Kubernetesの基礎をまとめてみます。
Kubernetesは、Kubernetes MasterとKubernetes Nodeの2種類のノードから成り立っています。
役割 | ||
---|---|---|
Kubernetes Master | APIエンドポイントの提供 コンテナのスケジューリング コンテナのスケーリング | |
Kubernetes Node | コンテナを起動する (Dockerホストに相当) |
Kubernetesクラスタの操作
CLIツールのkubectlと、YAML形式またはJSON形式で書かれたマニフェストファイルを用いて、Kubernetes Masterに「リソース」の登録をします。
マニフェストファイルは、YAML形式で書くのが一般的のようです。可読性の観点からJSONよりいいってことでしょうかね。
kubectlはマニフェストファイルの情報をもとに、Kubernetes Masterが持つAPIにリクエストを送り、Kubernetesの操作をします。
Kubernetes MasterのAPIはRESTful APIで実装されています。
そのため、いろんなプログラム言語のRESTful APIライブラリや、curlなどのコマンドラインツールを使って、直接APIを呼び出すことによって、Kubernetesを操作することも可能です。
Kubernetesとリソース
Kubernetesでは、「リソース」を登録することで、コンテナの実行やロードバランサの作成が非同期で行われます。
Kubernetesが扱うリソースの種類はいろいろあり、APIリファレンスが公開されています。
https://kubernetes.io/docs/reference/using-api/api-overview/
リソースは、大きく分けて5つの分類で分けられます。
種別 | 概要 |
---|---|
Workloads リソース | コンテナの実行に関するリソース |
Discovery & LB リソース | コンテナを外部公開するようなエンドポイントを提供するリソース |
Config & Storage リソース | 設定/機密情報/永続化ボリュームなどに関するリソース |
Cluster リソース | セキュリティやクォータなどに関するリソース |
Metadata リソース | クラスタ内の他のリソースを操作するためのリソース |
Workloads リソース
コンテナ上に、コンテナを起動させるために利用するリソースです。
内部的に利用されているものを除いて、利用者が直接操作するものとしては、全部で8種類のWorkloadsリソースがあります。
- Pod
- ReplicationController
- ReplicaSet
- Deployment
- DeamonSet
- StatefulSet
- Job
- CronJob
Discovery & LB リソース
コンテナのサービスディスカバリや、クラスタの外部からもアクセス可能なエンドポイントなどを提供するリソースです。
内部的に利用されているものを除いて、利用者が直接操作するものとしては、ServiceとIngressの2種類のDiscovery & LB リソースがあります。
- Service
- ClusterIP
- ExternalIP(ClusterIPの一種)
- NodePort
- LoadBalancer
- Headless(None)
- ExternalName
- None-Selector
- Ingress
Config & Storage リソース
設定や機密データをコンテナに埋め込んだり、永続ボリュームを提供するリソースです。
SecretとConfigMapはいずれもKey-Valueのデータ構造を持ち、保存したいデータが機密データなのか、一般的な設定情報なのかによって使い分けます。
PersistentVolumeClaimは、コンテナから永続ボリュームを要求する際に利用します。
- Secret
- ConfigMap
- PersistentVolumeClaim
Clusterリソース
クラスタ自体の振る舞いを定義するリソースです。
セキュリティ周りの設定やポリシー、クラスタの管理性を高める昨日のためのリソースなどあります。
- Node
- Namespace
- PersistentVolume
- ResourceQuota
- ServiceAccount
- Role
- ClusterRole
- RoleBinding
- ClusterRoleBinding
- NetworkPolicy
Metadataリソース
クラスタ内の他のリソースの動作を制御するためのリソースです。
たとえば、Podをオートスケーリングさせるために利用されるHorizontalPodAutoscalerはDeploymentリソースを操作してレプリカ数を変更することで、オートスケーリングを実現しています。
- LimitRange
- HorizontalPodAutoscaler
- PodDisruptionBudget
- CustomResourceDefinition