イントロダクション
Kubernetes(Kubeとも呼ばれる)は、コンテナの構成を管理するためのオープンソースプラットフォームです。各環境でのコンテナのライフサイクルを管理します。
Kubernetesは軽量で拡張性があり、柔軟性に富んでいます。CI/CD(継続的インテグレーション / 継続的デリバリー)ツールと組み合わせて使用するのが一般的です。
CI/CDツールを利用してクラウドネイティブアプリをデリバリーすることで、開発と運用のプロセスが円滑になります。CI/CD手法を取り入れることで、クラウドネイティブアプリの実力が大幅に向上します。
Kubernetesでの継続的なデリバリーは、従来のVM環境に比べ効率的です。アプリ全体を停止せずに、更新や変更が可能です。
Kubernetes(Kubeとも呼ばれる)は、コンテナ運用のためのオープンソースプラットフォームであり、異なる環境でのコンテナのライフサイクルを管理します。
Kubernetesは柔軟で拡張性があり、適応力にも優れます。CI/CDツールと組み合わせて使用するのが一般的です。
CI/CDツールを利用してクラウドネイティブアプリをデリバリーすると、開発と運用のプロセスがスムーズになります。CI/CD手法を取り入れることで、クラウドネイティブアプリの価値が大いに向上します。
Kubernetesでの継続的なデリバリーは、従来のVM環境よりも一層効率的です。アプリ全体を停止する必要はありません。
Kubernetes環境におけるCI/CDパイプラインは、一般的に4つの主要な部分で構成されます:
これらの要素を統合し自動化することで、安定した継続的なソフトウェアデリバリーが実現されます。
Kubernetesの導入とアプリの稼働自体は非常にシンプルですが、更新やデリバリーとなるとそう簡単ではありません。特に、大規模な開発チームで手動のKubernetes設定を行う場合、ミスが起こりやすくなります:
これらの問題を解消するため、Kubernetes上で稼働するアプリの開発者は、コード更新のワークフローを自動化し、エンドツーエンドのCI/CDパイプラインを構築することを目指します。
継続的インテグレーションは、各コード変更を必ずテストし、本番や他環境へデリバリーされる前にバグを発見することを目的としています。継続的デプロイメントでは、テストに十分な信頼がある場合、全ての変更が本番に反映されます。
テストでバグを見逃してしまった場合でも、問題を回避する方法は存在します。まず、十分な監視やログ仕組みによってバグを検知します。次に、円滑な運用サイクルにより、新しいコードへの更新や古いバージョンへのロールバックが容易に行われます。
Kubernetesはデリバリーのプロセスを自動化することで更新を非常にシンプルにします。Kubernetesはコンテナイメージを実行するため、プロダクトとその設定が直接コンテナイメージに組み込まれます。また、クラスタ内の各ノードのリソース割り当てを管理するため、新しいプロダクトの配置場所が自動的に決定されます。最終的に、更新作業はKubernetes上で容易かつローカルに実施されます。
Kubernetesにおいて、デプロイメントはPodのデリバリースタイルを定義する単位です。1つのデプロイメントには、同一のファイルで記述される1つ以上のコンテナが含まれ、Pod内のコンテナはストレージや設定を共有して、Docker Composeファイルと同様の役割を果たします。
Kubernetesは他のコンテナオーケストレーターと同様にデリバリーサイクルを実現しますが、学ぶべきファイルやコマンドがいくつか存在します。しかし、適切なツールを使えば自動化が可能です。これらのツールは大きく3種類に分類されます:
Helm
Helm(またはRudder)は、既存のKubernetes用パッケージマネージャーと比べてユニークです。Helmでは「チャート」と呼ばれる、アプリのパッケージと必要な設定をまとめたひな形を利用します。コマンドラインからチャートを呼び出すと、Helmはそれに基づいたKubernetes設定用YAMLファイルを生成し、クラスタに展開します。Helmはオープンソースであるため、チャートのダウンロード、修正、利用が可能です。
Helmの最大の利点は、複雑なアプリの管理を柔軟に行える点です。ロールバックの自動化にも対応しており、開発者にとって理解しやすい設計ですが、セットアップや維持管理が難しいという欠点があります。
KsonnetとJsonnet
Ksonnet(JSONテンプレート言語であるJsonnetに基づく)は宣言型ツールです。Kubernetesリソースのパッケージを作成し、設定ファイルを生成するために利用されます。Ksonnetはコマンドラインインターフェースとして動作し、Jsonnetはアプリを記述するためのテンプレート言語です。
このツールの利点は、JSONに精通している開発者なら直感的にJsonnetを使ってアプリをデプロイできる点です。しかし、JSONの使用とJsonnetの取り扱いには違いがあり、学習が必要となります。
Draft
Draftは、Kubernetes向けクラウドネイティブアプリ作成のためのツールです。Microsoftが開発した設定・デプロイツールで、コードがCIを通過した後にDockerイメージの作成や、Helmチャートを利用したKubernetesへのデリバリーが可能です。
このツールはHelmと連携してアプリのパッケージ作成とデリバリーを実現できる一方、セットアップ手順が多い点が欠点です。
Jenkins X
Jenkins Xは、Kubernetesクラスタ向けの有名なCIツールです。CI向けの機能を備えたオープンソース自動化ツールで、Javaで構築されています。
Jenkinsを利用することで、プロダクトプロジェクトの継続的なビルドとテストが可能になり、変更が容易になります。しかし、その操作が複雑でミスが起こりやすい場合もあります。
CircleCI
CircleCIは、もう一つのCI/CDツールです。クラウドベースで、Kubernetesへの自動展開用APIを備えています。
クラウドベースのため、専用マシンを用意する必要はありません。
CircleCIの強みは、ユニットテスト、統合テスト、受け入れテストなど多様なテストを実施し、コード変更の品質を担保できる点です。一方、完全なCDパイプラインとしては一部機能が不足している点が欠点です。
Travis
Travisは、Jenkinsとは異なる商用CIツールです。ツール内で署名、リポジトリ連携、ビルド、テストなどを実行でき、BitbucketやGitHubなど一般的なクラウドリポジトリとも連携可能です。
Travisはクラウドベースのため専用マシンは不要で、異なるOS上でのテストも可能です。オープンソースプロジェクトは無料ですが、商用プロジェクトの場合、月額約$69のプランが必要です。
Gitlab
GitlabはCI/CDパイプライン機能を備えた統合ツールです。リポジトリ、wiki、コードレビュー、課題管理なども含み、単一ノードで約25,000ユーザの運用が可能です。さらに、Kubernetesへの自動デプロイ機能やHelmチャートのサポートも提供されています。
Weave Cloud
Weave Cloudは、Dockerコンテナの監視および管理を迅速に行えるCDツールです。CI/CDパイプラインとKubernetesクラスタのセットアップを簡単に実現し、迅速なリリース、更新、ロールバックを可能にします。Gitを唯一の情報源として活用する仕組みです。
欠点として、正常に機能させるための設定が複雑な点が挙げられます。
Spinnaker
Spinnakerは、Netflixが開発したオープンソースツールです。パイプラインやデプロイを管理し、Helmチャートもサポートします。マルチクラウド環境での継続的デリバリーを効率的に実現しますが、元々はVM向けに設計されたため、Kubernetesでのセットアップがやや複雑です。
Codefresh
CodefreshはCD/CIパイプラインツールで、Helmチャートもサポートしています。CIおよびイメージリポジトリを活用し、シンプルながら優れたCI/CDパイプラインの構築を支援します。多くのプラグインにより、貴社の好みのツールとの連携が可能ですが、サードパーティツールが独自のGUIで提供されるため、パイプラインに追加の手間が生じる点が欠点です。
Codefreshは商用ツールで、料金は月額$34からとなります。
最近、開発者は継続的インテグレーションと継続的デリバリーに慣れ親しんでおり、適切なCI/CDパイプラインなくして新たなソフトウェア開発は考えにくい状況です。Kubernetesの普及が進む中、各ツールもKubernetesとの連携に対応しています。上記の記事では、最も人気のあるKubernetes CI/CDツールをまとめました。貴社のニーズと予算に合わせて選択してください。
最新情報を購読