15Stepで習得 Dockerから入るKubernetes その4

Deploymentの概要

DeploymentはReplicaSetを管理する仕組み
ReplicaSetはPodを管理し、Pod内にコンテナが存在する

Deploymentのマニフェストファイル

シンプルな例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deploy
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx:latest

ポイント

  • Podの稼働数が3 replicas: 3
  • matchLabelsapp: web を指定
    • templatelabelsは先ほどselector内で指定したapp: webと同じにする
  • specに関してはPodのspecと同じ

Deploymentのマニフェストファイルの実行

実行する

1
2
$ kubectl apply -f nginx-deployment.yml
deployment.apps/web-deploy created

各情報をみてみる

1
2
3
4
5
6
7
8
9
10
11
$ kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
web-deploy 3/3 3 3 24m
$ kubectl get rs
NAME DESIRED CURRENT READY AGE
web-deploy-654cd6d4d8 3 3 3 27m
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
web-deploy-654cd6d4d8-j2cjg 1/1 Running 0 28m 172.17.0.6 minikube <none> <none>
web-deploy-654cd6d4d8-n274r 1/1 Running 0 28m 172.17.0.5 minikube <none> <none>
web-deploy-654cd6d4d8-tgs6w 1/1 Running 0 28m 172.17.0.4 minikube <none> <none>

replicasetを増やしてみる

マニフェストファイルのreplicasの値を増減することでReplicaSetの数を調整でき、スケールすることができる
これとは別でCPU使用率と連動して動的にReplicaSetを数を増やすことができるオートスケール機能がある

スタティックな変更

マニフェストをreplicas: 5にしてみる

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deploy
spec:
replicas: 5
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx:latest

適用する

1
2
$ kubectl apply -f nginx-deployment.yml
deployment.apps/web-deploy configured

実行時の表示はconfigured
起動したPodを確認してみる

1
2
3
4
5
6
7
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
web-deploy-654cd6d4d8-6dg2c 1/1 Running 0 11s 172.17.0.7 minikube <none> <none>
web-deploy-654cd6d4d8-j2cjg 1/1 Running 0 37m 172.17.0.6 minikube <none> <none>
web-deploy-654cd6d4d8-n274r 1/1 Running 0 37m 172.17.0.5 minikube <none> <none>
web-deploy-654cd6d4d8-tdwt4 1/1 Running 0 11s 172.17.0.8 minikube <none> <none>
web-deploy-654cd6d4d8-tgs6w 1/1 Running 0 37m 172.17.0.4 minikube <none> <none>

既存の3つのPodに加えて、新しく2つのPodが起動しているのがわかる

コマンドラインでの変更

kubectl scaleを実行することでPodの数を調整できる
現状確認

1
2
3
4
5
6
7
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
web-deploy-654cd6d4d8-6dg2c 1/1 Running 0 9m53s 172.17.0.7 minikube <none> <none>
web-deploy-654cd6d4d8-j2cjg 1/1 Running 0 47m 172.17.0.6 minikube <none> <none>
web-deploy-654cd6d4d8-n274r 1/1 Running 0 47m 172.17.0.5 minikube <none> <none>
web-deploy-654cd6d4d8-tdwt4 1/1 Running 0 9m53s 172.17.0.8 minikube <none> <none>
web-deploy-654cd6d4d8-tgs6w 1/1 Running 0 47m 172.17.0.4 minikube <none> <none>

5コ
10コにする

1
2
$ kubectl scale --replicas=10 deployment.apps/web-deploy
deployment.apps/web-deploy scaled

メッセージはscaled
確認する

1
2
3
4
5
6
7
8
9
10
11
12
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
web-deploy-654cd6d4d8-6dg2c 1/1 Running 0 13m 172.17.0.7 minikube <none> <none>
web-deploy-654cd6d4d8-j2cjg 1/1 Running 0 50m 172.17.0.6 minikube <none> <none>
web-deploy-654cd6d4d8-jw5z4 1/1 Running 0 35s 172.17.0.11 minikube <none> <none>
web-deploy-654cd6d4d8-n274r 1/1 Running 0 50m 172.17.0.5 minikube <none> <none>
web-deploy-654cd6d4d8-nwv8f 1/1 Running 0 35s 172.17.0.10 minikube <none> <none>
web-deploy-654cd6d4d8-pfp5n 1/1 Running 0 35s 172.17.0.9 minikube <none> <none>
web-deploy-654cd6d4d8-rnfpw 1/1 Running 0 35s 172.17.0.13 minikube <none> <none>
web-deploy-654cd6d4d8-tdwt4 1/1 Running 0 13m 172.17.0.8 minikube <none> <none>
web-deploy-654cd6d4d8-tgs6w 1/1 Running 0 50m 172.17.0.4 minikube <none> <none>
web-deploy-654cd6d4d8-wgltb 1/1 Running 0 35s 172.17.0.12 minikube <none> <none>

既存の5コに加えて新規5コが追加されたことがわかる

次回はPodの入替を行なってみる