目次
- どうしてKubernetesなのか
- Kubernetesの種類
- Kubernetesの基本構成
- Kubernetesのリソース
- Kubernetesリソースの分類
- Workloads りソース
- Discovery & Load Balance リソース
- Config & Storage リソース
- Cluster リソース
- Metadata リソース
- 最後に
どうしてKubernetesなのか
Kubernetesが流行ってきたのは原因が必ずあります。ここで少しその理由を触れていきます。
まず、コンテナ(Docker)の運用に関する課題が沢山あります。
- 複数のKubernetes nodeの管理
- コンテナのスケジューリング(コンテナをどこに配置するか)
- ローリングアップデート(ダウンタイムなしのアップデート)
- スケーリング/オートスケーリング(コンテナ数を必要に応じて自動拡張/縮小)
- コンテナの死活監視
- 障害時のセルフヒーリング(コンテナがダウンした時に自動復活する)
- サービスディスカバリー(名前解決など)
- ロードバランシング(負荷分散)
- データの管理(設定データ、機密データ、永続化ディスクなど)
- ワークロードの管理
- ログの管理
- Infrastructure as Code
- その他エコシステムとの連携や拡張
上記課題はいわば、すべてKubernetesに置いて解決可能になるので、その価値がかなり明確です。
Kubernetesの種類
Kubernetesプライベートを使うには、まず導入が必要です。
導入後、Kubernetesクラスタはクラスタとして、稼働します。
導入する方法は様々あります。大まかに以下の三種類があります。
- ローカルKubernetes:ローカルPC一台で構築する
- Minikube
- Docker for Mac
- Kubernetes構築ツール:ツールを利用して、任意の環境に構築する
- kubeadm
- Rancher
- マネージドKubernetesサービス:パブリッククラウドのサービスを使う
- GKE(google)
- プリエンプティブルインスタンスを使うことによってコストを削減できますよ。
- NodePoolというオリジナル機能があります。
- gcloudコマンドを使うことで、クラスタ接続の認証情報が
~/.kube/config
に保存されます。
- AKS(Azure)
- EKS(AWS)
- GKE(google)
筆者はクラウドをメインにやっておりますので、今後の説明はGKEをベースで説明していきます。
Kubernetesの基本構成
k8sは2種類のノードで構成されます:
- Kubernetes Master
- Kubernetes Node
-
Kubernetes Master:命令を受けて、コンテナのスケジューリング、スケーリングなどを管理するためのノード
- API endpointを提供
- REST APIとして実装のため、直接REST APIでの操作もできる。
- コンテナのスケジューリング:コンテナがどのKubernetes Nodeに配置するかを決める
- コンテナのスケーリング:コンテナの拡張や縮小
- API endpointを提供
- Kubernetes Node:実際にコンテナを格納するノード
Kubernetesのリソース
Kubernetesリソースの分類
Kubernetesのリソースは以下の5種類に分類できます
- Workloads:コンテナの実行に関するリソース
- Discovery & Load Balance:コンテナを外部からアクセス可能にするためのリソース
- Config & Storage:設定/機密情報/永続化ボリュームなどに関するリソース
- Cluster:Kubernetesのセキュリティやクォーターに関するリソース
- Metadata:クラスタ内の他のリソースの動作を制御するリソース
Workloads りソース
Workloadsリソースは、クラスタ上に、コンテナを起動させるために利用するリソースです。
以下のものがあります。
- Pod:Workloadsリソースの最小単位
- ReplicaSet(旧ReplicationController):Podのレプリカを作成し、指定した数のPodを維持し続けるリソースです。
- Deployment:ローリングアップデートやロールバックなどを実現するリソースです。
- DaemonSet(ReplicaSet亜種):各ノードにPodを一つずつ配置するリソースです。
- StatefulSet(ReplicaSet亜種):ステートフルなPodを作成できるリソースです。
- Job:Podを利用して、指定回数のみ処理を実行させるリソースです。(使い捨てPod)
- CronJob:Jobを管理するリソースです。Jobの定期実行を実現します。
Discovery & Load Balance リソース
Discovery & Load Balanceリソースは、コンテナのサービスディスカバリーや、クラスタ\
の外部からもアクセス可能なエンドポイントなどを提供するリソースです。
以下のものがあります。
-
Service
- ClusterIP:k8s内部ロードバランサー
- ExternalIP(ClusterIPに属する):指定のNodeのIPを使って、外部と通信可能なClusterIP
- NodePort:任意NodeのIPを使って、外部からk8s内部への通信を可能にするリソース
- LoadBalancer:外部ロードバランサー + NodePort + ClusterIP
- Headless(None)(ClusterIPに属する):主にStatefulSetのためのClusterIP
- ExternalName:k8sのCNAME変換用リソース
- None-Selector(ClusterIPに属する):Endpointsをカスタマイズ可能なClusterIP
- Ingress
Config & Storage リソース
Config & Storageリソースは、設定や機密データをコンテナに埋め込んだり、永続ボリュームを提供するリソースです。
以下のものがあります。
- Secret:機密情報保存用
- ConfigMap:設定値や共通設定などの保存用
- PersistentVolumeClaim:Podが永続化ディスク(ディスク)を利用するためのリソース
Cluster リソース
Clusterリソースは、クラスタ自体のふるまいを定義するリソースです。
以下のものがあります。
- Node
- NameSpace
- PersistentVolume
- ResourceQuota
- ServiceAccount
- Role
- ClusterRole
- RoleBinding
- ClusterRoleBinding
- NetworkPolicy
※用途は今後で説明していきます。
Metadata リソース
Metadataリソースは、クラスタ内の他のリソースの動作を制御するためのリソースです。
以下のものがあります。
- LimitRange
- HorizontalPodAutoscaler
- PodDisruptionBudget
- CustomResourceDefinition
※用途は今後で説明していきます。
最後に
本節では、簡単にk8sの構成について、大まかに説明しました。
次から、各リソースを詳細に説明していきます。
コメント