Kubernetes についてよく聞きますが、それが何なのかよくわかりませんか?

Kubernetesとは何ですか?
Kubernetes は、コンテナー オーケストレーションを処理するオープンソース ツールです。コンテナーのデプロイメント、継続的なスケーリングとスケール解除、コンテナーの負荷分散などを自動化します。

Google は当初、Go プログラミング言語で Kubernetes を開発しました。
現在、コンテナのオーケストレーションにおける市場リーダーです。 Kubernetes は、動的に拡張するマイクロサービス アプリケーションをホストするための理想的なプラットフォームです。実稼働環境で作業している場合、Kubernetes はコンテナ オーケストレーションに最も適した安全なプラットフォームです。
実稼働環境ではダウンタイムがゼロであることが期待されるため、クラスターは常に稼働している必要があります。
Google Cloud Platform (GCP) を使用すると、数回クリックするだけで Kubernetes を起動できます。これは、AWS や Azure などの他のクラウド プロバイダーでもサポートされています。また、複数のマネージド Kubernetes プラットフォームが利用可能です。

なぜKubernetesなのか?
以前は、開発者とテスターの間で喧嘩が起こることはよくありました。
かつては彼らにとって環境は異なっていました。開発者のシステムで動作したものがテスターのシステムでは動作しませんでした。
現在、ほとんどの組織がコンテナを使用しているため、環境の違いによって発生する問題は発生しなくなりました。
ただし、複数のコンテナを整理して実行することも簡単な作業ではありません。動的アプリケーションで作業している場合、コンテナの数がスケールアップ/スケールダウンするのは通常のことです。このようなタスクを手動で行うのは複雑でリスクが伴う可能性があります。したがって、コンテナ オーケストレーション ツールが必要であり、それが Kubernetes が必要な理由です。

Kubernetesの機能
たくさんありますが、以下に代表的なものをいくつか挙げます。
# 自動ビン梱包
Kubernetes はアプリケーションをパッケージ化し、要件と利用可能なリソースに基づいてコンテナを自動的に配置します。
# サービスの検出と負荷分散
Kubernetes は、論理操作を実行しているコンテナーに IP アドレスと DNS 名を自動的に割り当てます。コンテナーのセット間には負荷分散機能も存在します。
# ストレージオーケストレーション
Kubernetes は、選択したストレージ システムを自動的にマウントします。ローカル ストレージまたは AWS などのパブリック クラウド プロバイダーのいずれかを使用できます。
# 自己修復
Kubernetes は、コンテナの 1 つが失敗したことを認識すると、そのコンテナを独自に再起動し、クラッシュしたコンテナの代わりに新しいコンテナを作成します。ノードに障害が発生した場合、そのノードで実行されているコンテナは、クラスター内の別の実行ノードで起動されます。
# 水平方向のスケーリング
簡単なコマンドを使用して、アプリケーションをすばやくスケールアップまたはスケールダウンできます。この単純なコマンドは、CLI または Kubernetes ダッシュボードを通じて実行できます。自動スケールも可能で、CPU 使用率に基づいて、コンテナーが自動的にスケールアップまたはスケールダウンされます。
# 自動ロールバックとロールアウト
アプリケーションが更新されるたびに、Kubernetes はこれらの変更を段階的にロールアウトし、アプリケーションまたはその構成を更新します。すべてのインスタンスが同時に更新されるわけではないため、高可用性が確保されます。何か問題が発生した場合、Kubernetes は変更を即座にロールバックします。
Kubernetes をインストールしてセットアップする方法を学びます。

Kubernetes の用語
実際に作業を始める前に、Kubernetes で定期的に使用される用語をいくつか知っておく必要があります。
# ポッド
これは、クラスター内で実行されている 1 つ以上のコンテナーを表します。
# サービス
ポッド/アプリケーションにアクセスするための抽象的な方法。
# 名前空間
これは、クラスター内の名前の衝突を除去するために使用されます。同じ物理クラスター上で複数の仮想クラスターをサポートします。
# ノード
Kubernetes ワーカー マシン。
# クラスター
Kubernetes 上でコンテナ化されたアプリケーションを実行するノードのグループで構成されます。
# 注釈
リソースに必要なデータを格納するためのラベル。
# ボリューム
ポッド内のコンテナがアクセスするデータ ディレクトリです。
# レプリカセット
実行中のポッドのいくつかのレプリカ。
# ラベル
システム全体で識別できるように、Kubernetes オブジェクトに名前を付けます。
# キュベレット
これは、各ノード上で実行され、コンテナーがポッド内で実行されているかどうかを確認するエージェントです。
# クベクトル
Kubernetes API サーバーと対話するためのコマンドライン ユーティリティ。
# キューブプロキシ
クラスター内の各ノード上のすべてのネットワーク ルールを含むネットワーク プロキシ。
Kubernetes と Docker
ここで、Kubernetes が Docker とどう違うのかを考えているかもしれません。 Kubernetes 対 Docker というフレーズは誤解を招く可能性があります。
Docker は、OS、ライブラリ、アプリケーションをコンテナ内にパッケージ化するプラットフォームです。 Docker は、Kubernetes で行うことと同じことを行うことをお伝えしておきます。ただし、Docker だけを使用する場合は、すべてが手動になります。コンテナーを手動で起動および停止する必要があります。しかし、Kubernetes を使用すると、すべてが自動化されます。
Kubernetes はコンテナーを持つポッドをスケジュールでき、Kubelet は Docker にコンテナーを開始または停止するように指示します。 Kubernetes の Kubelet は、これらのコンテナを監視し、マスター ノード上でコンテナの情報を収集する役割を果たします。基本的な違いは、管理者が Docker に何をすべきかを指示するのではなく、Kubernetes ではすべてが自動化されることです。
コンテナ オーケストレーションに使用される別のツールとして Docker Swarm があります。それで、それらの違いは何でしょうか?
Kubernetes 対 Docker Swarm
Kubernetes | Docker Swarm |
インストールが複雑です | 取り付けは簡単です |
より大きなオープンソース コミュニティ | Kubernetesと比較してコミュニティが小さい |
数百のコンテナを簡単にオーケストレーション可能 | 10 ~ 20 個のコンテナのオーケストレーションに適しています |
Kubernetes ダッシュボードは GUI を提供します | GUIなし |
自動スケーリングをサポート | 自動スケーリングをサポートしていません |
自動ロールバックによるローリングアップデートをサポート | ローリングアップデートはサポートしますが、自動ロールバックはサポートしません |
組み込みでロギングとモニタリングが利用可能 | ロギングとモニタリングにはELKなどのサードパーティが必要 |
同じポッド内のコンテナーとボリュームを共有できます | クラスター内の任意のコンテナーとボリュームを共有できます |
結論
Kubernetes とは何か、そしてそれがどのように役立つのかについて基本的な理解ができたと思います。 DevOps に興味がある、またはこれから始めようと考えている場合は、この 素晴らしい Udemy コースを受講して Kubernetes を学ぶことを お勧めします。