Kubernetes にデプロイする
このガイドでは、Bitbucket Pipelines を構成してコンテナ化したアプリケーションを Kubernetes に自動的にデプロイする方法を説明します。ここでは、アプリケーションの複数のインスタンスを実行する デプロイメントを Kubernetes 内に作成し、当社の Node.js アプリの新しいバージョンを Docker イメージの新しいバージョン内でパッケージ化し、このイメージを DockerHub にプッシュします。最後に、Pipelines を使用してデプロイメントを更新し、サービスを停止することなく新しい Docker イメージをリリースします。
すべてのコード スニペットはサンプル リポジトリでも入手できます。
Prerequisites
以下が必要です。
- イメージのプッシュ先となる、既存の DockerHub アカウント (または他の Docker レジストリ)
- 既存の kubernetes クラスタまたは minikube テスト環境
アーティファクトのビルド
以下の例では、Node.js アプリをパッケージ化してデプロイします。Node.js プロジェクトを簡単にビルドするには、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
が必要です。以下を使用します。
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
ファイルに追加します。
pipelines:
default:
- step:
name: Test
script:
- npm install
- npm test
- step:
name: Build
script:
- export IMAGE_NAME=$DOCKER_HUB_USERNAME/$APPLICATION_NAME:$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
services:
- docker
注意
ここでは APPLICATION_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 を使用してアプリケーションを更新する方法を紹介しているため、ここでは公開方法は説明していません。
要約
上記のすべてのステップを完了することで bitbucket-pipelines.yml
ファイルが完成します。
pipelines:
default:
- step:
name: Test
script:
- npm install
- npm test
- step:
name: Build
script:
- export IMAGE_NAME=$DOCKER_HUB_USERNAME/$APPLICATION_NAME:$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
services:
- docker
- step:
name: Deploy
deployment: production
script:
- sed -i "s|{{image}}|$DOCKER_HUB_USERNAME/$APPLICATION_NAME:$BITBUCKET_COMMIT|g" deployment.yml
- pipe: atlassian/kubectl-run:1.1.2
variables:
KUBE_CONFIG: $KUBE_CONFIG
KUBECTL_COMMAND: 'apply'
RESOURCE_PATH: 'deployment.yml'
アトラシアンのオンライン バリデーターでご使用の bitbucket-pipelines.yml ファイルをチェックすることができます。