【Kubernetes】kustomizeでHPAのマニフェストをビルドしてみる
はじめに
kustomizeでHPA(Horizontal Pod Autoscaler)とDeploymentのマニフェストをビルドしてみます。
kustomizeとHPAに関しては下記を参照ください。
【Kubernetes】これから始めるkustomize
はじめに これからkustomizeを使う人向けに、**kustomizeとは何か**、**実際
【Kubernetes】Horizontal Pod Autoscalerやってみる
はじめに KubernetesのHPA(Horizontal Pod Autoscaler)につ
ディレクトリ構造
作成するファイルとディレクトリ構造は下記の通りとなります。
1.
2├── base
3│ ├── deployment.yaml
4│ ├── hpa.yaml
5│ └── kustomization.yaml
6└── overlays
7 ├── dev
8 │ ├── deployment.yaml
9 │ ├── hpa.yaml
10 │ └── kustomization.yaml
11 ├── prod
12 │ ├── deployment.yaml
13 │ ├── hpa.yaml
14 │ └── kustomization.yaml
15 └── stg
16 ├── deployment.yaml
17 ├── hpa.yaml
18 └── kustomization.yaml
DeploymentとHPAのマニフェストが各環境(dev、stg、prod)ごとに用意されています。
base
まずはベースとなるファイルを用意します。
DeploymentとHPAのマニフェストは下記の通りです。
1apiVersion: apps/v1
2kind: Deployment
3metadata:
4 name: php-apache
5spec:
6 selector:
7 matchLabels:
8 run: php-apache
9 template:
10 metadata:
11 labels:
12 run: php-apache
13 spec:
14 containers:
15 - name: php-apache
16 image: k8s.gcr.io/hpa-example
17 ports:
18 - containerPort: 80
19 resources:
20 limits:
21 cpu: 100m
22 requests:
23 cpu: 100m
1apiVersion: autoscaling/v2
2kind: HorizontalPodAutoscaler
3metadata:
4 name: php-apache-hpa
5spec:
6 scaleTargetRef:
7 apiVersion: apps/v1
8 kind: Deployment
9 name: php-apache # Deploymentの名前を指定
10 minReplicas: 1
11 maxReplicas: 1
12 metrics:
13 - type: Resource
14 resource:
15 name: cpu
16 target:
17 type: Utilization
18 averageUtilization: 50
kustomize用のkustomization.yaml
は下記の通りです。
1apiVersion: kustomize.config.k8s.io/v1beta1
2kind: Kustomization
3
4resources:
5- deployment.yaml
6- hpa.yaml
overlays/dev
次にdev環境用のファイルを用意します。
Deploymentはresource、HPAはレプリカ数のみを設定しています。
1apiVersion: apps/v1
2kind: Deployment
3metadata:
4 name: php-apache
5spec:
6 template:
7 spec:
8 containers:
9 - name: php-apache
10 resources:
11 limits:
12 cpu: 100m
13 requests:
14 cpu: 100m
1apiVersion: autoscaling/v2
2kind: HorizontalPodAutoscaler
3metadata:
4 name: php-apache-hpa
5spec:
6 minReplicas: 1
7 maxReplicas: 1
kustomization.yaml
では、名前のプレフィックスとラベルが付くようにしています。
1apiVersion: kustomize.config.k8s.io/v1beta1
2kind: Kustomization
3namespace: hpa-dev
4
5namePrefix: dev-
6commonLabels:
7 env: dev
8
9resources:
10- ./../../base
11
12patchesStrategicMerge:
13- deployment.yaml
14- hpa.yaml
overlays/stg
stg環境のファイルを用意します。
stg環境もDeploymentはresource、HPAはレプリカ数のみを設定しています。
1apiVersion: apps/v1
2kind: Deployment
3metadata:
4 name: php-apache
5spec:
6 template:
7 spec:
8 containers:
9 - name: php-apache
10 resources:
11 limits:
12 cpu: 200m
13 requests:
14 cpu: 200m
1apiVersion: autoscaling/v2
2kind: HorizontalPodAutoscaler
3metadata:
4 name: php-apache-hpa
5spec:
6 minReplicas: 1
7 maxReplicas: 5
kustomization.yaml
では、stg環境用の名前のプレフィックスとラベルが付くようにしています。
1apiVersion: kustomize.config.k8s.io/v1beta1
2kind: Kustomization
3namespace: hpa-stg
4
5namePrefix: stg-
6commonLabels:
7 env: stg
8
9resources:
10- ./../../base
11
12patchesStrategicMerge:
13- deployment.yaml
14- hpa.yaml
overlays/prod
prod環境のファイルを用意します。
prod環境も同様にDeploymentはresource、HPAはレプリカ数のみを設定しています。
1apiVersion: apps/v1
2kind: Deployment
3metadata:
4 name: php-apache
5spec:
6 template:
7 spec:
8 containers:
9 - name: php-apache
10 resources:
11 limits:
12 cpu: 500m
13 requests:
14 cpu: 500m
1apiVersion: autoscaling/v2
2kind: HorizontalPodAutoscaler
3metadata:
4 name: php-apache-hpa
5spec:
6 minReplicas: 1
7 maxReplicas: 10
kustomization.yaml
では、prod環境用の名前のプレフィックスとラベルが付くようにしています。
1apiVersion: kustomize.config.k8s.io/v1beta1
2kind: Kustomization
3namespace: hpa-prod
4
5namePrefix: prod-
6commonLabels:
7 env: prod
8
9resources:
10- ./../../base
11
12patchesStrategicMerge:
13- deployment.yaml
14- hpa.yaml
ビルドしてみる
試しにprod環境用のマニフェストをビルドしてみます。
1kustomize build overlays/prod --output resource.yaml
ビルドされたマニフェストを確認してみます。
特に気になるのが、HPAのターゲットとなるDeploymentの名前がkustomizeによってプレフィックがついた名前に変わった点です。
kustomizeではnameReference
という機能で、紐づけらられたリソースの名前がnamePrefix
やnameSuffix
で変更されても、関連する箇所を自動的に変更してくれるようになっています。
ビルドされたマニフェストを確認すると、HPAのscaleTargetRef.name
がプレフィックスがついたDeploymentの名前に変更されているのがわかります。
1apiVersion: apps/v1
2kind: Deployment
3metadata:
4 labels:
5 env: prod
6 name: prod-php-apache # プレフィックスがついている
7 namespace: hpa-prod
8spec:
9 selector:
10 matchLabels:
11 env: prod
12 run: php-apache
13 template:
14 metadata:
15 labels:
16 env: prod
17 run: php-apache
18 spec:
19 containers:
20 - image: k8s.gcr.io/hpa-example
21 name: php-apache
22 ports:
23 - containerPort: 80
24 resources:
25 limits:
26 cpu: 500m
27 requests:
28 cpu: 500m
29---
30apiVersion: autoscaling/v2
31kind: HorizontalPodAutoscaler
32metadata:
33 labels:
34 env: prod
35 name: prod-php-apache-hpa
36 namespace: hpa-prod
37spec:
38 maxReplicas: 10
39 metrics:
40 - resource:
41 name: cpu
42 target:
43 averageUtilization: 50
44 type: Utilization
45 type: Resource
46 minReplicas: 1
47 scaleTargetRef:
48 apiVersion: apps/v1
49 kind: Deployment
50 name: prod-php-apache # プレフィックスがついた名前に書き換えられている
nameReferenceについて
nameReference
は、リソースの名前を紐付ける機能になっています。namePrefix
やnameSuffix
で変更されても、関連する箇所を自動的に変更してくれるようになっています。
自分で設定することもできますが、よく使われるものはビルトインで設定されています。
ビルトインの設定は下記から確認できます。
kustomize/examples/transformerconfigs at master · kubernetes-sigs/kustomize
Customization of kubernetes YAML configurations. Contribute to kubernetes-sigs/kustomize development by creating an account on GitHub.
参考
- Kustomize | SIG CLI
- kubernetes-sigs/kustomize: Customization of kubernetes YAML configurations
- kustomize/examples/transformerconfigs at master · kubernetes-sigs/kustomize
- 【Kubernetes】Horizontal Pod Autoscalerやってみる | amateur engineer's blog
- 【Kubernetes】これから始めるkustomize | amateur engineer's blog