今回からコンテナオーケストレーションツールであるKubernetesを紹介していきます。Kubernetesは「クーバーネイティス」とか「クバネティス」とか「クーべネティス」とか人によって読み方が多少異なったりします。Kubernetesは長いのでK8sと略されることが多いです。コンテナオーケストレーションツールはk8sだけではないですが、最もポピュラーが世界で一番利用されているコンテナオーケストレーションツールがk8sですので、ここではk8sの概要や基本的な機能を紹介していきます。Dockerコンテナに関する解説は以下のページにまとめていますので、参考にしてください。コンテナ技術コンテナオーケストレーションツールDockerは1台のマシン上でコンテナを管理する上で非常に有用なツールです。Dockerだけでは、複数マシンで構成される大規模な環境でのコンテナ管理はできません。このような大規模な環境でコンテナを管理するのに利用されるツールをコンテナオーケストレーションツールと呼びます。複数のマシンでコンテナを管理するためには、コンテナをどのマシン上で起動させるか、異なるマシン上で動作するコンテナ間をどう通信させるか、マシンやコンテナの障害をどのように検知するかなど、1台のマシン上でコンテナを運用するよりも複雑な運用になります。コンテナオーケストレーションツールは、コンテナやマシンの管理を自動化して、管理者が扱いやすいインターフェースを提供します。Kubernetesの概要Kubernetes(k8s)は、Googleが開発したコンテナオーケストレーションツールで、複数のマシンからなるコンテナを統一的に管理することができるツールです。元々はGoogleが自社で利用していた「Borg」と呼ばれるツールを広く一般的に公開したツールのため、Googleの大規模サービスの運用ノウハウが盛り込まれています。Kubernetesの主な機能は次の通りです。自動でコンテナを分散配置コンテナがダウンしたら自動回復ローリングアップデートが可能コンテナのロードバランシングコンテナの監視コンテナ間のネットワーク管理オートスケーリングが可能ログの集中管理また、機能以外にもKubernetesには、特徴的な2つの思想があります。巨大なエコシステムと拡張性の高さ宣言的な構成管理k8sは宣言的な構成管理という思想を取り入れています。ユーザーが期待する状態をManifestファイルに宣言する。それを適用すれば、以前の状態がどうであれ、宣言した状態になる、という考え方です。アプリケーションをk8sにデプロイする時に、「こうあるべき」という状態を宣言すれば、宣言通りの状態をk8sが作業してくれます。宣言的とは対局にあるのが命令的と呼ばれるもので、「こうあるべき」という状態を実現するために、「コマンドAを実行して、その後にコマンドBを実行し・・・」というように、実行する処理を定義する構成管理方法です。宣言的な構成管理の場合、「こうあるべき」という状態を実現するために細かい手順に気を使わなくて良いというメリットがあります。この宣言的な構成管理を採用することで、k8sはコンテナをシンプルに管理することができます。巨大なエコシステムと拡張性の高さk8sは拡張性の高さも大きな特徴で、当初からAPIを公開しており、このAPIを活用した様々なコンポーネントやツールが有志から公開されています。Kubernetesは複数の異なるクラウドに対応しますし、オンプレミス環境でも利用が可能です。このような拡張性の高さを活かして、プラグインによってさまざまなネットワークベンダやストレージベンダを対応させることができます。Foundation)と呼ばれるオープンなファウンデーションで中心的なプロジェクトとなっていて、OSSとしてコミュニティベースとして開発が進められています。周辺のプロジェクトも多岐に渡っていて、活発に活動されていることもいます。これらのOSSプロジェクトに加えて、クラウドベンダもk8sをマネージドサービスとして提供しているなど、k8sを中心に巨大なエコシステムが構築されています。LandscapeKubernetesのアーキテクチャk8sのアーキテクチャは以下の図のようになっています。クラスタk8sが管理するマシンの集合で、少なくとも1つのマスターとノードと呼ばれるコンテナの展開されるマシンで構成されます。クラスタ内でどのノード上でも動作可能。マスタクラスタ全体の管理を行うプロセスが動作するマシンで、APIサーバー、スケジューラ、コントロールマネージャなどのプロセスが動作します。ユーザーや各コンポーネントはマスタが持つAPIサーバーが公開しているAPIを叩くことで、クラスタを操作します。k8sではAPI操作をkubectlコマンドでコマンド化しています。ノードコンテナを展開するマシン。クラスタには通常1つ以上のノードが存在します。各ノードの管理はマスターが行います。ポッドコンテナを管理するための最小単位で、複数のDockerコンテナの集合体です。マニフェストYAMLやJSON形式で、リソースの構成をテキストファイルで記述して、それをAPI経由でクラスタに宣言することで、クラスタを操作することができます。マスタとノードには次のようなコンポーネントが動作しています。クライアントコンポーネントクライアントは厳密にはコンポーネントではありませんが、参考までに記載しておきます。kubectlkubectlはapi-serverに対してリクエストを送信し、リソースの作成や変更、削除などを行います。kubectlはコマンド形式ですが、裏ではAPIのやり取りを行っています。Kubernetesマスタコンポーネントマスタには、次のようなコンポーネントが動作しています。APIサーバー(kube-apiserver)ユーザーや各コンポーネントから管理情報にアクセスするためのAPIを提供しています。認証や認可の処理なども行っています。スケジューラ(kube-shcduler)コンテナをどのノードで実行するかのスケジューリングを実施します。コントロールマネージャ(kube-controller-manager)クラスタ上のノードやコンテナなどに関するクラスタの状態をAPIサーバー経由で監視するコンポーネントです。クラウドコントロールマネージャ(cloud-controller-manager)ノードやルーティング、ロードバランサ、ストレージなどのクラウドプロバイダに依存するオブジェクトを管理etcdetcdはKubernetesのデータストアとして利用されています。クラスタ全体の管理に関わる情報が格納されています。通して取得や格納が行わます。Kubernetesノードコンポーネントノードには、コンテナを実行するためのコンテナエンジン(Docker)が動作しています。このDockerを操作するためのコンポーネントのkubeletと、コンテナ間通信を行うためのコンポーネントのkube-proxyが動作しています。kubeletコンテナを起動したり管理するためのコンポーネントです。kube-schedulerでスケジュールされたタスクを認識し、ノードの起動や監視を行います。kube-proxyコンテナ間通信を行うためのルーティングを行います。実際はiptablesのルールを使ってパケットの制御を行っています。-namespace、cgroup、overlayfs-メールマガジンネットワ-ク初心者のみなさま。ネットワークの基礎知識を疎かにすることは大変危険です!!「初心者にも理解できるネットワーク技術」これを読めばネットワークの基礎が分かる!!ネットワーク関連の仕事に就きたいとお考えの学生の方や、ネットワークに興味があって転職を考えている社会人の方、まずは登録してみてください。ネットワークエンジニアを目指して。