Kubernetes導入に伴い、GitOpsを用いたCI/CDの構成に
続いては、佐々木氏からEKS導入前後で、CI/CDの構成がどう変わったかが語られた。
EKS導入前は、アプリケーションのコードやDeployConfigを、CIツール「Jenkins」を使ってデプロイしていた。
EKS導入後は、Immutable ClusterでBlue-Green Deploymentを用いていたため、クラスターが多くなった。そのため、クラスターが追加されるたびにデプロイ先をJenkinsで変更していたが、移行期間には並行稼動する必要があり、3~4カ月ごとに設定しなおすのは骨が折れる。そこでキーワードとして挙がったのが、GitOpsだった。
「一般的には、Git上の構成ファイルはKubernetesの構成ファイルをSingle Of Truthにして、常に同期させて正しい状態にしておくことでCIとCDを分離します。メリットとしては開発で使われるPRレビューのフローが持ってこれる、Gitの履歴管理ができる、セキュリティの分離ができるなど。Immutable Cluster環境におけるメリットとしては、クラスタ側からGitに同期させることができるので、それによって常に正しい状態にすることができる点です」
下記の図のように、各クラスタからGitのほうに同期して、正しい状態にする。クラスター構築時にアプリケーションのデプロイまで一気にできしまうところは、このImmutable Clusterという環境においては、GitOpsのメリットだと佐々木氏は語る。
続いて、CI/CDの構成とフローについて説明が行われた。ここで特徴的なのは、HelmfileというHelm ChartsをデプロイするツールでKubernetesのConfigを管理していること。Kubernetes上にArgoCDがあり、Helmfileのリポジトリと同期するようになっている。
「アプリケーションの変更がGitのほうにプッシュされるとCircleCIでビルドが走り、そこからContainer Registryにビルド済みのイメージがプッシュされる。同時にCircleCIでHelmfileのイメージタグの更新をかけると、ArgoCDとHelmfileの同期が外れた状態になるので、その差分を検知してArgoCDがマニフェストを生成して、Kubernetesにアプライする。それが終わるとまたArgoCDが同期状態になり、常に最新の正しい状態になるという流れになっています」
SREと開発のチームの動き方
最後に、この仕組みをどのような組織と役割分担をしているのかが紹介された。下記の図のように、アプリケーションの管理とHelmfile・Configファイルの作成までは、開発側が行っている。一方、SRE側はHELM Chartsの生成を担当しているという。
「クラスタのバージョンが変わるたびに変更が必要となるところを、なるべくこのHELM Charts側で吸収できるようにしています。変更があった場合は、説明会を開催して開発側にHelmfileを作ってもらい、SREのほうでレビューするという棲み分けをしています」
【Q&A】Kubernetes導入に関する質問と回答を紹介
坂本氏と佐々木氏のセッション後は、濱氏からいくつかの質問が投げかけられた。こちらも簡単に紹介したい。
濱:ArgoCDは複数のクラスタに対応できるのが良いところだと思うのですが、どのように使っていますか?
佐々木:数のクラスタに1台で複数のクラスターを面倒を見るか、クラスタごとに入れるかという構成が取れると思うが、我々は今のところ、各クラスタにArgoCDを入れる感じにしてます。理由としては、クラスターを構築した時点でなるべく全て完了させたいので、クラスターの中に入れることで、最初に構築した時点で全て出来上がっている構成にしています。
濱:今出てきたキーワードであるArgoCDやHELM Chartsは、どのようなツールで、どんな背景・目的で採用したのですか?
佐々木:HELM Chartsはマニフェストを管理するツールです。我々だとHELM Chartsをより宣言的に扱えるHelmfileをマニフェスト生成のためのツールとして使っています。HelmfileからHelmを呼び出して、HelmfileコマンドをインストールしてあるArgoCDで変換して、最終的にアプライするようにしています。ArgoCDはHelmには対応しているんですけど、Helmfileは入っていないので、我々のほうで対応させています。
濱:GitOpsについて、今後の展望や課題など、考えていることはありますか?
佐々木:EKSに移行したいアプリケーションがまだあるので、その辺をまずはGitOps化しようと思います。最終的には全部GitOps化して同じデプロイフローにしたいので。今は段階的に取り組んでいる最中です。
濱:AWSプラットフォームの中でもKubernetesを活かせているChatworkさんの事例は大変貴重なので、今後もまたお話を聞かせてください。ありがとうございました。