Kubernetes の基礎
Kubernetes は、Kubernetes Master と Kubernetes Node の 2 種類のノードから成り立っています。
CLI ツールのkubectl はマニフェストファイル(.yaml
,.yml
,.json
)の情報を元にKubernetes Master が持つ API にリクエストを送ることで Kubernetes を操作します。
また、Kubernetes Master の API は、一般的な RESTful API として実装されているので、各種プログラム言語の RESTful API ライブラリや curl
などのコマンドラインツールを利用して、直接 API を呼び出して Kubernetes を操作することも可能です。
Kubernetes とリソース
Workloads APIs リソースがあります
● Pod
● ReplicationController
● ReplicaSet
● Deployment
● DaemonSet
● StatefulSet
● Job
● CronJob
Service APIs カテゴリ
Service APIs カテゴリは、コンテナのサービスディスカバリや、クラスタの外部からもア
クセス可能なエンドポイントなどを提供するリソースです。
● Service
・ ClusterIP
・ ExternalIP(ClusterIP の一種)
・ NodePort
・ LoadBalancer
・ Headless(None)
・ ExternalName
・ None-Selector
● Ingres
Config & Storage APIs カテゴリ
Config & Storage APIs カテゴリは、設定や機密データをコンテナに埋め込んだり、永続ボリュームを提供するリソースです。
● Secret
● ConfigMap
● PersistentVolumeClaim
Cluster APIs カテゴリ
クラスタ自体の振る舞いを定義するリソースです。セキュリティ周りの設定やポリシー、クラスタの管理性を高める機能のためのリソースなど、様々なリソースがあります。
● Node
● Namespace
● PersistentVolume
● ResourceQuota
● ServiceAccount
● Role
● ClusterRole
● RoleBinding
● ClusterRoleBinding
● NetworkPolicy
Metadata APIs カテゴリ
クラスタ内の他のリソースの動作を制御するためのリソースです。
例えば、Pod をオートスケーリングさせるために利用される HorizontalPodAutoscaler は、Deployment リソースを操作してレプリカ数を変更することでオートスケーリングを実現しています。
● LimitRange
● HorizontalPodAutoscaler
● PodDisruptionBudget
● CustomResourceDefinition
初期状態のNamespace
● kube-system
・ Kubernetes クラスタのコンポーネントやアドオンがデプロイされる Namespace
● kube-public
・ 全ユーザが利用できる ConfigMap などを配置する Namespace
● kube-node-lease
・ Kubernetes Node のハートビート情報を保存するための Lease リソースが保存されている専用の Namespace です。
● default
・ デフォルトの Namespace、ユーザが任意のリソースを登録するのに使用できます
RBAC(Role-Based Access Control)
RBAC は、図 4.2 のようにクラスタ操作に関する権限を Namespace ごとに分けることができるほか、Network Policy と組み合わせることで Namespace 間の通信の制御を行える仕組みです
CLI ツール kubectl
手動:kubectl
プログラム:クライアントライブラリ
認証情報と Context(config)
kubectl が Kubernetes Master と通信する際には、接続先サーバの情報や認証情報などが必要となります。
kubectl は kubeconfig(デフォルトでは~/.kube/config
)に書かれている情報を使用して
接続を行います。
kubeconfig で具体的に設定を行う部分は、clusters
/ users
/ contexts
の 3 種類の配列型です。複数の対象を登録することができます。
kubeconfigのsample
1 | apiVersion: v1 |
contexts には、cluster
と user
のペアと namespace
を指定したものを定義します。
kubeconfigの設定変更
クラスタ(prd-cluster)の定義を追加・変更
1
kubectl config set-cluster prd-cluster --server=https://localhost:6443
認証情報の定義を追加・変更
1
2
3
4kubectl config set-credentials admin-user \
--client-certificate=./sample.crt\
--client-key=./sample.key \
--embed-certs=trueContextの定義(クラスタcluster/認証情報user/Namespaceを定義)を追加・変更
1
2
3
4kubectl config set-context prd-admin \
--cluster=prd-cluster \
--user=admin-user \
--namespace=default
kubectl は Context(current-context)を切り替えることにより、複数の環境を複数の権限で操作できる。
Contextの一覧を表示
1
kubectl config get-contexts
Contextの切り替え
use-context
1
kubectl config use-context prd-admin
現在のContextを表示
1
kubectl config current-context
コマンドの実行ごとにContextを指定することも可能
1
kubectl --context prd-admin get pod