SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

イラストではじめるKubernetes

イラストではじめる「Kubernetesでのアプリケーション開発」~CIOps・GitOpsを活用したクラウドネイティブなCI/CD

イラストではじめるKubernetes 第4回

Kubernetesを使ったアプリケーション開発の進め方

 では日々の開発はどのように行うのか簡単に説明します。

 KubernetesはKubernetes自身も含めて基本的に全てコンテナで運用されています。そのためアプリケーションサーバーを立ち上げたい時、必ずコンテナを起動する必要があります。docker build、docker pushまではDockerを使っていて馴染みのある操作だと思いますが、docker runをKubernetesクラスタで実行するイメージですね。

 本番運用する場合は良いのですが、ローカルで動作確認したい場合毎回docker pushするのは面倒ですよね。ローカルのKubernetesクラスタのツール次第ではありますが、例えばkindだとkind load docker-image sample-image:latestのようにローカルのDockerイメージを利用することができます。

 docker pushされたイメージはKubernetesのリソース作成時にIMAGE:VERSIONを指定することでコンテナを起動できます。例えばPodのマニフェストにspec.image: nginx: 1.14と書き、そのマニフェストをkubectl applyすることでNGINXのコンテナを起動できます。具体的な操作については連載第3回を読むと手を動かしながら理解を進めることができますので、まだ読んでいない方はぜひお読みください。

リソース作成時、毎回kubectl applyを実行するのか?

 これまで、Pod作成時に毎回kubectl applyを実行するという説明をしてきましたが、これにはいくつか問題があります。

 マニフェストを作成することで設定のバージョン管理やレビューが簡単になりましたが、このマニフェストの適用を手動で行うと、適用のバージョン管理やレビューが難しくなってしまいます。

 そこでCIOpsやGitOpsという考え方に基づき、マニフェストを適用することが一般的です(OpsはOperationsの略です)。

 CIOpsは、CIツールを利用してマニフェストの適用を行う方法です。例えば、GitHubで管理しているマニフェストのコンテナイメージバージョンを変更したとします。プルリクエストをmainブランチにマージするタイミングでGitHub Actionsを動かし、Kubernetesクラスタに対してkubectl apply -fを実行させます。GitHub ActionsというCIツールを利用してクラスタへの適用作業を行っているため、この方法はCIOpsと呼ばれます。

 GitOpsは、デプロイツールがマニフェストの変更を監視し、変更があった場合に自動適用を行う方法です。

 デプロイツールには以下がよく使われます。

Argo CD

 Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes.

 Argo CDはGitOps用のOSSです。元々はIntuit社(正確にはIntuit社が買収したApplatix社)が自社で開発していたソフトウェアです。

 Argo CDではApplicationという名前のCustom Resourceを利用し、「どのリポジトリの」「どのマニフェストの」「どのバージョン(ex.ブランチ)の」マニフェストを「どの環境に」適用するかを指定します。Argo CD自身もKubernetes上に構築します。

Spinnaker

 Spinnaker is an open-source, multi-cloud continuous delivery platform that helps you release software changes with high velocity and confidence.

 元々はNetflix社が開発していたツールです。Argo CDが「Kubernetes向け」と謳っているのに対し、Spinnakerはあらゆるユースケースで利用できると言っています。そのためArgo CDはKubernetesクラスタへのデプロイのみを扱いますが、SpinnakerではDocker ImageのビルドなどCIパイプラインを構築することもできるようです。

FluxCD

 Flux is a set of continuous and progressive delivery solutions for Kubernetes that are open and extensible.

 こちらもKubernetes向けのツールとなっています。GitOpsを提唱したWeaveWorks社が元々開発をしていました。現在Fluxバージョン2であるFlux v2を開発しているようです。Argo CDとかなり近いですが、Flux v2になってマルチテナンシーが可能になったことが違いの1つです。第2回で紹介したOktetoではGitOpsのチュートリアルとしてFluxが使えるので、GitOpsを体験してみたい方はこちらを参考に触ってみると良いでしょう。

CIOpsとGitOpsの違いは?

 CIOpsとGitOpsについて紹介してきましたが、最も大きな違いはなんでしょうか? Gitを使っているか否かが違いではありません! push型かpull型かが大きな違いとなっています。2つの特徴をまとめると以下のとおりです。

  • CIOps:push型。即時適用作業が実施される。kubectl applyでやっていることを自動化するイメージなのでわかりやすく直感的。
  • GitOps:pull型。宣言的であるため、管理されているマニフェストが常に正しい設定となる。

 GitOpsはなかなか想像しづらいと思いますが、GitリポジトリをSingle Source Of Truth(唯一正しいとされるソース)として常にリポジトリの内容がクラスタに適用されています。

 どちらが正解ということはなく、メリットデメリットがあります。それぞれ所属する組織やクラスタの運用方法によってどの方法を選択するのが良いかは変わってきます。ここではこういったデプロイの手法がKubernetesを利用する上では一般的になっているということを覚えておいていただけたらと思います。

 ここまでの解説で、Kubernetesにあまり馴染みのない方でも、アプリケーション開発フローのイメージが少しは沸いたでしょうか? Kubernetes利用の有無に関わらず、CI/CDの導入は少しハードルが高いかもしれません。この連載を機に少しでも理解が深まれば幸いです。では次回最終回でお会いしましょう!

次のページ
ぷちコラム:Custom Resource Definition、Custom Resource そしてCustom Controller

この記事は参考になりましたか?

イラストではじめるKubernetes連載記事一覧

もっと読む

この記事の著者

あおい(アオイ)

 大手メーカーにてソフトウェアエンジニアエンジニアを経て2019年7月サイボウズ株式会社にSREとして入社。 現行インフラ基盤上のアプリケーションを新インフラ基盤(Kubernetes)に移行するプロジェクトが主な仕事です。著書は、「まんがではじめるKubernetes」など。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/15892 2022/06/01 11:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー