Kubernetes にデプロイする

このガイドでは、Bitbucket Pipelines を構成してコンテナ化したアプリケーションを Kubernetes に自動的にデプロイする方法を説明します。ここでは、アプリケーションの複数のインスタンスを実行する デプロイメントを Kubernetes 内に作成し、当社の Node.js アプリの新しいバージョンを Docker イメージの新しいバージョン内でパッケージ化し、このイメージを DockerHub にプッシュします。最後に、Pipelines を使用してデプロイメントを更新し、サービスを停止することなく新しい Docker イメージをリリースします。

要件

以下が必要です。

  • イメージのプッシュ先となる、既存の DockerHub アカウント (または他の Docker レジストリ)
  • 既存の kubernetes クラスタまたは minikube テスト環境


アーティファクトのビルド

以下の例では、Node.js アプリをパッケージ化してデプロイします。Node.js プロジェクトを簡単にビルドするには、bitbucket-pipelines.yml を次のように構成します。 

bitbucket-pipelines.yml
pipelines:
  default:
    - step:
        script: # Modify the commands below to build your repository.
# build and test the Node app
          - npm install
          - npm test


オンライン バリデーターを使用して bitbucket-pipelines.yml ファイルをチェックすることができます。

Docker イメージのビルドとプッシュ

次に、Node.js アプリを Docker イメージとしてパッケージ化します。これを行うには、リポジトリで Docker を有効にし、Docker イメージを作成して、レジストリにプッシュする必要があります。この例では、DockerHub にプッシュします。 

最初に、リポジトリのルートに Dockerfile が必要です。以下を使用します。 

Dockerfile
FROM node:boron
 
# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
 
# Install app dependencies
COPY package.json /usr/src/app/
RUN npm install
 
# Bundle app source
COPY . /usr/src/app
 
EXPOSE 8080
CMD [ "npm", "start" ]

次に、Docker イメージをビルドして、DockerHub レジストリ内のプライベート リポジトリにプッシュします。Bitbucket Pipelines で環境変数として DockerHub 資格情報を構成する必要があります。

Bitbucket でリポジトリ設定に進み、[Pipelines] > [環境変数] に移動して、DockerHub のユーザー名とパスワードを追加します。

以下に示すように、資格情報を bitbucket-pipelines.yml ファイルに追加します。次のプレースホルダーを独自の詳細情報に置き換える必要があります。 

  • <my.dockerhub.username> 
  • <my.app> (Docker イメージの名前)
bitbucket-pipelines.yml
# enable Docker for your repository
options:
  docker: true
 
pipelines:
  default:
    - step:
        script: # Modify the commands below to build your repository.
          # build and test the Node app
          - npm install
          - npm test
          - export IMAGE_NAME=<my.dockerhub.username>/<my-app>:$BITBUCKET_COMMIT
          # build the Docker image (this will use the Dockerfile in the root of the repo)
          - docker build -t $IMAGE_NAME .
          # authenticate with the Docker Hub registry
          - docker login --username $DOCKER_HUB_USERNAME --password $DOCKER_HUB_PASSWORD
          # push the new Docker image to the Docker registry
          - docker push $IMAGE_NAME

アプリケーションの複数のインスタンスを実行するデプロイメントを Kubernetes で作成

これは、Kubernetes クラスタを構成するために Pipelines 外で一度だけ行う必要がある手動プロセスで、Kubernetes サーバーの場所を kubectl に構成済みであることを前提としています。例については、以下の「kubectl を構成する」セクションを参照してください。

Bitbucket Pipelines を使用した継続的なデプロイメントの演習を行うには、アプリケーションを実行するデプロイメントを Kubernetes で構成する必要があります。kubectl コマンド ライン インターフェイスを使用して次のコマンドを実行し、デプロイメントを作成します。 

次のプレースホルダーを上記で使用した値に置き換える必要があります。 

  • <my.dockerhub.username>  
  • <my.app>
kubectl run <my.app> --labels="app=<my.app>" --image=<my.dockerhub.username>/<my.app>:latest --replicas=2 --port=8080

これでアプリケーションは Kubernetes で実行されている状態になりますが、Kubernetes サービスとして公開されるまでは外部からアクセスできません。ただし、この例では Pipelines を使用してアプリケーションを更新する方法を紹介しているため、ここでは公開方法は説明していません。

デプロイ ツールのインストール

Our deployment script requires kubectl to be installed. You can use a docker image we created with it preinstalled, or you can use the following commands in your script:

bitbucket-pipelines.yml スニペット
- curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
- chmod +x ./kubectl
- sudo mv ./kubectl /usr/local/bin/kubectl

kubectl を構成する

以下の例では、BASIC 認証を使用して Kubernetes サーバーへのリクエストの認証を行っています。本番システムでは、クライアント証明書やベアラー トークンなどの、より強力な認証形式を推奨します。

デプロイメントを更新する前に、kubectl を構成して Kubernetes サーバーの場所を設定する必要があります。次のプレースホルダーを独自の詳細情報に置き換える必要があります。 

    • <my.cluster.name> (Kubernetes サーバーに関連付ける名前)
    • <my.kubernetes.host> (Kubernetes サーバーのホスト名とポート。例: https://mydomain.com:8443)
    • <my.user> (the name you want to associate with a configured user)
    • <my.context> (サーバーを特定のユーザーとして参照するために使用するコンテキストの名前)
    • </path/to/ca.pem> (the path to your certificate authority file)

また、Kubernetes 内にユーザーを作成して、$KUBERNETES_USERNAME および $KUBERNETES_PASSWORD の Pipelines 保護変数にユーザーの資格情報を設定する必要もあります。

bitbucket-pipelines.yml スニペット
- kubectl config set-cluster <my.cluster.name> --server=<my.kubernetes.host> --certificate-authority=</path/to/ca.pem>
- kubectl config set-credentials <my.user> --username=$KUBERNETES_USERNAME --password=$KUBERNETES_PASSWORD
- kubectl config set-context <my.context> --cluster=<my.cluster.name> --user=<my.user>
- kubectl config use-context <my.context>

デプロイメントの更新

Pipelines でビルドごとにアプリケーションを更新するには、最後に、kubectl コマンドを bitbucket-pipelines.yml ファイルに追加して、新しい Docker イメージで Kubernetes デプロイメントを更新するようにします。

次のプレースホルダーを上記で使用した値に置き換える必要があります。 

  • <my.dockerhub.username>  
  • <my.app>
bitbucket-pipelines.yml スニペット
- kubectl set image deployment/<my.app> <my.app>=<my.dockerhub.username>/<my.app>:$BITBUCKET_COMMIT

要約

上記のすべてのステップを完了して、bitbucket-pipelines.yml ファイルを作成します

次のプレースホルダーを上記で使用した値に置き換える必要があります。 

  • <my.dockerhub.username> 
  • <my.cluster.name>
  • <my.context>
  • <my.user>
  • <my.app>
  • <my.kubernetes.host>
bitbucket-pipelines.yml
pipelines:
  default:
    - step:
        services: # enable Docker for your repository
          - docker 
        script: # Modify the commands below to build your repository.
          # build and test the Node app
          - npm install
          - npm test
          - export IMAGE_NAME=<my.dockerhub.username>/<my.app>:$BITBUCKET_COMMIT
          # build the Docker image (this will use the Dockerfile in the root of the repo)
          - docker build -t $IMAGE_NAME .
          # authenticate with the Docker Hub registry
          - docker login --username $DOCKER_HUB_USERNAME --password $DOCKER_HUB_PASSWORD
          # push the new Docker image to the Docker registry
          - docker push $IMAGE_NAME
          # Download the necessary tools to deploy to kubernetes
          - curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
          - chmod +x ./kubectl
          - sudo mv ./kubectl /usr/local/bin/kubectl
          # Configure kubectl
          - kubectl config set-cluster <my.cluster.name> --server=<my.kubernetes.host> --certificate-authority=/path/to/ca.pem
          - kubectl config set-credentials <my.user> --username=$KUBERNETES_USERNAME --password=$KUBERNETES_PASSWORD
          - kubectl config set-context <my.context> --cluster=<my.cluster.name> --user=<my.user>
          - kubectl config use-context <my.context>
          # Update the deployment to use the new Docker image
          - kubectl set image deployment/<my.app> <my.app>=<my.dockerhub.username>/<my.app>:$BITBUCKET_COMMIT


Remember, you can check your bitbucket-pipelines.yml file with our online validator.

最終更新日 2018 年 5 月 16 日

この内容はお役に立ちましたか?

はい
いいえ
この記事についてのフィードバックを送信する
Powered by Confluence and Scroll Viewport.