Section2

1. Komposeを利用して、Kubernetes用yamlを作成しよう

  1. React+Go(Gin)+PostgresSQLのTodoアプリを使用していきます。
    今回利用するアプリをGitHubよりプログラムをダウンロードします。

    github-source-dl

  2. ローカル環境にDockerイメージを作成します。
    ※ダウンロードしたファイルを解凍したフォルダで実行してください。

    1. フロントアプリのビルドを行います。
      次のコマンドを実行してください。

       docker-compose run client npm run build
      

      docker-compose-client-build

    2. バックエンドのビルドを行います。
      次のコマンドを実行してください。

       docker-compose run server go build
      

      docker-compose-backend-build

    3. アプリイメージのビルドを行います。
      次のコマンドを実行してください。

       docker-compose -f docker-compose.prod.yml build
      

      docker-compose-prod-build

  3. Komposeでは、docker-compose.ymlファイルにKompose用Labelsを記載することで、Kompose用の設定を行うことができます。
    kompose-guide-labels 参考URL:https://kompose.io/user-guide/

    今回は以下の3点を修正します。

    • ローカルでKubernetesを実行するため、 kompose.service.type を設定します。
    • ローカルコンテナイメージを利用するため、 kompose.image-pull-policy を設定します。
    • Komposeで depends_on が対応していないため、 port を追加で設定します。

      対象ファイル:(go-react-todo-master)/docker-compose.prod.yml
      ※port,labelsを追加しています。

      version: '3'
      services:
        postgres:
            image: postgres
            environment:
                - POSTGRES_PASSWORD=postgres
            ports:
                - "5432:5432"
        server:
            build: ./server
            command: ./app
            ports:
                - "3001"
            depends_on:
                - "postgres"
            environment:
                - POSTGRES_PASSWORD=postgres
            labels:
                kompose.image-pull-policy: Never
        nginx:
            build: ./nginx
            ports:
                - "8000:80"
            labels:
                kompose.service.type: nodeport
                kompose.image-pull-policy: Never
      
  4. Komposeコマンドでdocker-compose.ymlを変換します。
    今回は開発時の者は不要ですので、production環境用のymlファイルをもとに変換します。
    ※ダウンロードしたファイルを解凍したフォルダで実行してください。

     kompose convert -f docker-compose.prod.yml
    

    (WindowsPowerShell) kompose-convert-powershell

  5. 変換後の確認を行います。
    次のファイルが生成されていることを確認してください。

    • nginx-service.yaml
    • postgres-service.yaml
    • server-service.yaml
    • nginx-deployment.yaml
    • postgres-deployment.yaml
    • server-deployment.yaml
  6. Kubernetes用のyamlファイルは生成できたのですが、Komposeの変換だけでは対応しきれない部分の修正を行います。
    ローカルイメージを取得するため、ローカルイメージ名を記載します。

    対象ファイル:(go-react-todo)/server-deployment.yaml

    Windowsの場合

     - [36] image: server
     + [36] image: go-react-todo-master_server
    

    Macの場合

     - [34] image: server
     + [34] image: go-react-todo-master_server
    

    対象ファイル:(go-react-todo)/nginx-deployment.yaml

    Windowsの場合

     - [33] - image: nginx
     + [33] - image: go-react-todo-master_nginx
    

    Macの場合

     - [31] - image: nginx
     + [31] - image: go-react-todo-master_nginx
    
  7. Kubernetesに変換したファイルをKubernetesに反映します。

     kubectl apply -f nginx-service.yaml -f postgres-service.yaml -f server-service.yaml -f nginx-deployment.yaml -f postgres-deployment.yaml -f server-deployment.yaml
    

    (WindowsPowerShell) kubectl-apply-kompose-file

  8. Kubernetesの状態確認を行います。

     kubectl get pod,deploy,svc
    

    ※kubectlでは略語を使用できます。

    名称: 略称

    • pods: pod
    • deployments: deploy
    • services: svc

      (WindowsPowerShell) kubectl-get-pod-service-deploy

  9. Kubernetesに反映したプロジェクトを確認します。
    Kubernetesの状態確認を行った際にNginxの公開されているポートを確認します。
    NodePortは動的にポート番号を割り振るため、個々の端末によって異なります。
    kubectl-get-service-nodeport

    上記で確認したポート番号のLocalhostにアクセスしてください。
    http://localhost:XXXXX

    Todoアプリが表示しましたらデプロイ完了です。 todo

results matching ""

    No results matching ""