Kubernetesの設定
Kubernetes(k8s)には複数の設定方法がある。
今回はKubernetesの設定方法について紹介する。
設定方法
k8sがサポートする設定方法を以下に示す。
- kubectlコマンドで手続き的に設定する
- kubectl run/scale/expose
- Manifestファイルを手続き的に設定する
- kubectl create -f
- Manifestファイルを宣言的に設定する
- kubectl apply -f
3番目の設定方法が宣言型で、かつ設定をバージョン管理できるため推奨される。
kubectlコマンド
設定方式1のkubectlコマンドを紹介する
Podを起動
kubectl run example --image=somerepository.com/images/web-app:latest --port=5000 --replicas=3
- web-appコンテナのPodを3つ起動する
- ポート番号は5000
- Deployment ControllerとReplicaSet Controllerが立ち上がる
- Podの1つに障害が発生するとReplicaSet Controllerが新しいPodを立ち上げる
Podの確認
kubectl get pods
ReplicaSet Controllerの確認
kubectl get rs
詳細情報確認
kubectl describe pod example-XXXXX
Serviceで外部ネットワークと接続
kubectl expose deployment example --type="LoadBalancer" --name example-svc
Serviceの確認
kubectl get service
Manifestファイル
設定方式2と3で利用するManifestファイルについて紹介する。Manifestファイルの書き方は方式2と3で共通である。
ManifestファイルはJSON形式かYAML形式で記述する。YAML形式の方が一般的である。
設定をManifestファイル形式で表示
下記のコマンドで既存のPodの設定をManifestファイル形式で取得できる。
kubectl get pod xxx -o yaml
Manifestファイルの例
以下にManifestファイルの例を示す。
apiVersion: apps/v1beta1 kind: Deployment metadata: name: example-deployment spec: replicas: 3 template: metadata: name: example-app labels: app: example-app spec: containers: - image: somerepository.com/images/web-app:latest name: web-app-container ports: - containerPort: 5000 protocol: TCP
kind
kindが設定の種別を表す。単にPodを作成するだけなら「kind: Pod」とする。
上述の例ではDeploymentを記述している。DeploymentはPodの作成だけでなく、複製、死活監視、復旧、更新などの機能をまとめて提供してくれるPodの上位概念である。
apiVersion
apiVersionはAPIのバージョンを表す。kindによって異なるので注意が必要だ。 (v1, apps/v1, batch/v1など)
metadata
名前やLabelなど設定を管理する上で有用な情報を記述する。必須ではないが記述することがBest Practiceだ。
spec
設定を記述する。
手続き的にDeployする
kubectl create -f example-pod.yaml
宣言的にDeployする
kubectl apply -f example-pod.yaml
コンテナイメージの更新
Deploymentを利用している場合、コンテナイメージの更新やロールバックをスムーズに実行できる。
web-appコンテナのイメージをrolling update
kubectl set image deployment example-deployment web-app-container=somerepository.com/images/web-app:1.1
rolling updateの状況確認
kubectl rollout status deployment example-deployment
rollback
kubectl rollout undo deployment example-deployment