「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
ネットワークインフラなどの自動展開やスケーリングといったコンテナの運用を自動化するための、
フリーソフトウェアによって構成されるコンテナオーケストレーションプラットフォーム。
経緯 †
- オープンソースソフトウェアとして公開したことで、
MicrosoftやRed Hatといった多くのIT企業が開発に参加表明。
- 2017年初頭に、Kubernetesをサポートする
Public Cloud は Google Cloud Platformのみだった。
- 2017年2月に、Microsoft AzureがKubernetesの公式サポートを表明、
クラウド業界は次第にKubernetesにシフトするようになった。
- オラクルやVMwareといった企業もCNCFに参加を表明
- GoogleやMicrosoft Azureとは競合関係にあるAWSも参加
- 2017年10月に、DockerがKubernetesサポートすることを発表。
- 2018年1月時点でLinux Foundationの傘下にあるCNCFが管理する
オープンソースプロジェクトとなっている。
アーキテクチャ †
- ネットワークで接続された複数のLinux上にクラスタを構築することで動作する。
- クラスタは主に複数のマスター (master) とノード (node) から構成される。
- マスターがクラスターの管理を行い、
- コンテナは各ノード上にデプロイされる。
- マスターやノードを構成するコンポーネントは下記のようになっている。
- マスターとノードのコンポーネントは同一のマシン上に存在してもよく、
最小の構成では1台からなるKubernetesクラスタが構築出来る。
マスター †
kube-apiserver †
Kubernetes APIを外部に公開するためのコンポーネント。
etcd †
Kubernetesクラスタの情報を保存する分散キーバリューストア。
kube-scheduler †
ポッドをどのノードに対してデプロイするかを選択するコンポーネント。
kube-controller-manager †
Kubernetesクラスタの各種コントローラを実行するコンポーネント。
cloud-controller-manager †
- Kubernetesとプラットフォームとなっている
クラウドプロバイダとの相互作用を担うコンポーネント。
- 各クラウドプロバイダに特化した機能を提供し、パフォーマンスを向上する。
その他アドオン †
- Kubernetesクラスタ内での名前解決を行うDNSサーバ
- 各種Web UIやクラスタ単位でロギングを行うコンポーネント(fluentd, etc.)
- , etc.
ノード †
kubelet †
- ノード上に常駐し、ノードの生存をクラスタに対して通知する。
- 自身に対するポッドの割り当てが行われたかどうかを監視して
- ボリュームのマウント、
- コンテナのダウンロード/デプロイ、
- ポッドの生存確認
などを行い、クラスタに通知する機能も担う。
kube-proxy †
外部やapiserverからのアクセスを、
ノード上の各ポッドに対して転送し、
ポッドへのアクセスを抽象化するコンポーネント。
Docker †
実際にコンテナを動作させるバックエンドに利用される。
supervisord †
kubeletとdockerが正しく動作し続けるように監視及び管理するコンポーネント。
fluentd †
クラスタレベルでのロギングを補助する。
ポッド †
概要 †
- いくつかのコンテナをグループ化したもの。
- ポッド単位で作成、開始、停止、削除といった操作を行う。
- 1つのコンテナを作成したいときも「コンテナが1つ含まれるポッド」を作成する。
特徴 †
以下の特徴がある。
- ポッド内のコンテナは、同一ホスト上に配備される。
- ポッド内のコンテナは、仮想NICやプロセステーブルを共有する。
→ つまり、同じIPを使えたり、互いのプロセスが見えたりする。
- 各ポッドには固有のIPアドレスがあり、ポートスペース全体を所有している。
- ポッド内のコンテナはストレージを共有できる。
- ポッドには、ポッドをグループするための1つ以上のラベルを指定できる。
- 一般的には、サーバと、そのサーバと共に実行する補助サービスを含める。
- Webサーバ
- APサーバ
- DBサーバ
- KVSサーバ
Helm Charts †
- Kubernetesは、Helmというパッケージ・マネージャを使用する。
- Helmでは、Chartという単位でパッケージを管理する。
- Chartとは、kubernetes のマニフェストファイル群(RC, Service, Pod)をパッケージ化したもの。
トレンド †
Dockerとの関係 †
- 現在は、Dockerの存在感が薄れてきている。
- コンテナとしてもDockerに依存しない「cri-o」と言う
軽量コンテナランタイムの1.0が2017/10/17にリリースされた。
PaaSの上モノ部分 †
OpenShiftのs2iに相当するものが色々出ており、
(microsoftのdraftやGoogleのSkaffoldなど)
玉石混合で、なにがベストプラクティスなのか固まっていない。
参考 †
Helm Charts †
Publickey †