プログラミング初心者がアーキテクトっぽく語る

見苦しい記事も多数あるとは思いますが訂正しつつブログと共に成長していければと思います

Kubernetesの設定

Kubernetesk8s)には複数の設定方法がある。

今回はKubernetesの設定方法について紹介する。


設定方法

k8sがサポートする設定方法を以下に示す。

  1. kubectlコマンドで手続き的に設定する
    • kubectl run/scale/expose
  2. Manifestファイルを手続き的に設定する
    • kubectl create -f
  3. 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