CI/CDの処理の中で、何らかのテストを行なったあと、Kubernetesクラスターにコンテナアプリケーションをデプロイするということがあると思います。
今回は、CI/CDの研究で最近よく使うGitHub ActionsとCircleCIを使って、Kubernetesへのアプリケーションデプロイを試してみました。
基本的には、両方ともkubeconfigはbase64エンコードしたデータを環境変数に取り込んで、CIの実行時にそれらを呼び出すことにより実現できるようです。GitHub ActionsはGitHub、CircleCIはCircleCI側でこれらのデータを管理します。あとは必要な「パーツ」を組み合わせることでGitベースのアプリケーション管理が可能です。
GitHub Actionsの場合
まずはGitHub Actionsから。
GitHub Actionsには「Actions」という、CI/CD実行時に使えるパーツが用意されています。
今回は次の2つを使いました。
kubeconfigのbase64エンコードと登録
kubeconfigはbase64エンコードしてGitHub Secretに格納します。詳細は「暗号化されたシークレット」に書かれています。
base64エンコードの方法は、macOSの場合は次のような感じです。
cat ~/Downloads/yourclusters-kubeconfig | base64 > mysecret
CI/CDの定義
CIを定義するYAMLファイルは.github/workflows
ディレクトリーの下に用意します。
name: First CI/CD on: - push jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install kubectl uses: azure/setup-kubectl@v1 - name: Run kubectl env: KUBE_CONFIG_DATA: ${{ secrets.KUBE_CONFIG_DATA }} run: | echo "$KUBE_CONFIG_DATA" | base64 --decode > /tmp/kube_config export KUBECONFIG=/tmp/kube_config kubectl apply -f deployment.yaml sleep 60 kubectl get pods
CI/CDの結果はGitHubのプロジェクトのメニューのなかの「Actions」をクリックで確認できます。
CircleCIの場合
CircleCIの場合はちょっと検索すると実行例がすぐ出てきます。 CircleCIはGitHub Actionsの「Action」に相当する「Orbs」というものがあります。
GitHub Actionsは色々なActionを利用しましたが、CircleCIでは「circleci/kubernetes」一個ですみます。
確認した情報
kubeconfigのbase64エンコードと登録
kubeconfigはbase64エンコードして、CircleCIのプロジェクトの「Environment variable」に格納します。
「Environment variable」はCircleCIのプロジェクト設定の中にあり、そこで設定します。呼び出し名のデフォルトはKUBECONFIG_DATAです。
base64エンコードの方法は、macOSの場合は次のような感じです。
cat ~/Downloads/yourclusters-kubeconfig | base64 > mysecret
CI/CDの定義
CIを定義するYAMLファイルは.circleci
ディレクトリーの下に用意します。
version: '2.1' orbs: kubernetes: circleci/kubernetes@1.3.0 jobs: create-update: docker: - image: 'cimg/base:stable' steps: - checkout - kubernetes/install-kubeconfig: kubeconfig: KUBECONFIG_DATA - kubernetes/install-kubectl - kubernetes/create-or-update-resource: get-rollout-status: true resource-file-path: deployment.yaml resource-name: deployment/phpapp show-kubectl-command: true workflows: kubedeploy-workflow: jobs: - create-update
CI/CDの結果はCircleCIのパイプライン一覧から、該当のパイプラインを選択すると確認できます。
もしかするとGitHub Actionsも別のActionを組み合わせて使うといい感じに動いてくれるかもしれませんが、比較した結果CircleCIのKubernetes Orbsは作り込まれていて、パラメータを加えるだけで色々結果が出せるので良いですね。
今回GitHub ActionsとCircleCIを使って、Kubernetesクラスターにアプリケーションのデプロイを試してみました。 どちらも同じことはできるものの、今回やりたかったことについてはCircleCIの方が使いやすそうでした。この用途では今後はCircleCIを使おうと思います。