K8s環境構築の選択肢
k8sクラスタ利用構築する環境によって手法が異なる
- ローカルk8s...ユーザーの手元のマシン1台にクラスタを構築・利用する。冗長性の担保はできないのでプロダクション利用には適さない。また、一部利用できない機能もある。
- Minikube...シングルノード構成。ハイパーバイザー(仮想マシンを作成・実行するソフトウェア)が必要。
- Docker Desktop...k8sのバージョン指定ができない。シングルクラスター、シングルノード構成。
- kind...Dockerコンテナを複数起動し、各コンテナをk8s Nodeとすることで、複数台構成のクラスタを構築する。現在、ローカルでマルチノードクラスタを構築するならこれ。クラスタ構成は、YAMLで管理可能。クラスター構築時にはDocker Desktopが起動している必要がある。kindは内部的にkubeadmを使用している。YAMLにkubeadmのパッチを当て、FeatureGates(k8sの機能を有効化/無効化するための仕組み)の有効化を通して、アルファ機能の有効化も可能。
- k8s構築ツール...ツールを利用して、任意の環境に(オンプレミス/クラウド)にクラスタを構築・利用する。多くのマネージドサービスではk8s Masterのノードのスケールアップは自動で行われるが、ツールを用いる場合は、k8s Masterのインスタンスサイズを自分で設定する必要がある(k8s公式自動構築スクリプトのkube-upを使用してAWSやGCP上に構築する際に使用されるインスタンスサイズの目安が公開されている。)
- kubeadm...k8s公式ツール。用意した各ノードに、Master/Worker Nodeのプロセスを稼働させるところまで。クラスタとして成立させるためには、異なるノードのPod同士で通信できる必要がある。(各ホストのInternal Netwotkの接続性を確保する必要)
- Flannel...Pod間ネットワークを構成するための手段の一つ。ノード間のネットワークに仮想的なトンネル(オーバーレイネットワーク)を構成することで、クラスタ内のPod間通信を実現する。
- Rancher...中央集権サーバーとしてRancher Serverを起動しておき、管理者はRancher Serverからクラスタの構築・管理を行う。クラウドプロバイダー環境上に構築する際も、APIを用いて仲介してくれる。k8sの構築・運用をサポートする様々な機能を備えている。
- その他構築ツール...Ansibleを使ったKubespray、CloudFormationを使ったkube-aws、Terraform、kops、OpenStack Magnumなど。
- その他エンタープライズソリューション...オンプレミスで強固なk8s環境を構築したいときは、Red Hat OpenShift Container Platform、VMware Enterprise PKS、IBMCloud Private(ICP)などがある。
- kubeadm...k8s公式ツール。用意した各ノードに、Master/Worker Nodeのプロセスを稼働させるところまで。クラスタとして成立させるためには、異なるノードのPod同士で通信できる必要がある。(各ホストのInternal Netwotkの接続性を確保する必要)
- マネージドサービス...パブリッククラウド上のマネージドサービスとして提供されるクラスタを利用。永続化ボリュームや、ロードバランサーとの連携などの機能をフル活用することが可能。
- GKE(Google Kubernetes Engine)...k8s NodeにはGCEを利用。
- クラスタの運用負荷を下げる様々な機能がある。(リリースチャンネル、ノードの自動アップデート、ノードの自動修復、ノードの自動プロビジョニング機能(ノードのインスタンスタイプを自動的に決定してくれる))また、プリエンプティブルインスタンス(起動時間)を用いることで、コスト削減が可能。(Preemptible-killerの使用を要検討)
- NodePool...k8sクラスタ内のノードに対してラベルづけしておくことで、グルーピングするような機能。現在は他のクラウドプロバイダにも存在する。
- スケジューリングの際の制約条件にすることができる
- ワークロードの混在を防げる
- どういった種類のノードをどのくらいの数でクラスタを構成するかの制御ができる
- AKS(Azure Kubernetes Service)
- Azure Active Directoryをk8sロールベースのアクセス制御(RBAC)と連携できる。
- AKSクラスタのリソース不足時に、ACI(Azure Container Instance)上にバースティングできる。
- EKS(Elastic Kubernetes Service)...k8s NodeにはAMI(Amazon Machine Image)から作成したEC2インスタンスを利用。(カスタムAMIも利用可)
- IAMとk8sのユーザーを紐づけることで、IAMベースで権限を管理できる。
- PodのNetworkとAWS VPCのSubnetがネイテブ接続されることで、VMからコンテナに直接疎通可能なネットワーク構成が利用できる。
- 運用負荷を下げるには、ワーカーノードの管理をAWSに任せるManaged Nodegroupsや、AWS Fargateをk8s Nodeとして利用するEKS on Fargateを利用する。
- GKE(Google Kubernetes Engine)...k8s NodeにはGCEを利用。
プリエンプティブルインスタンス...通常のGCEインスタンスの最大8割引のインスタンス。
- GCP側の都合で、いつでもVMが強制終了される可能性がある
- プリエンプティブVMは最大でも24時間で強制終了される
クラウドバースティング...コンピューティングリソースの需要が極端に高まったピーク時(バースト)に、処理をクラウド上のリソースに迅速に切り替えることを可能にするもの。