【Kubernetes】kustomizeでHPAのマニフェストをビルドしてみる

2022.11.17
2024.03.24
Kubernetes
Horizontal Pod Autoscalerkustomize

はじめに

kustomizeでHPA(Horizontal Pod Autoscaler)とDeploymentのマニフェストをビルドしてみます。

kustomizeとHPAに関しては下記を参照ください。

【Kubernetes】これから始めるkustomize

【Kubernetes】これから始めるkustomize

はじめに これからkustomizeを使う人向けに、**kustomizeとは何か**、**実際

【Kubernetes】Horizontal Pod Autoscalerやってみる

【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という機能で、紐づけらられたリソースの名前がnamePrefixnameSuffixで変更されても、関連する箇所を自動的に変更してくれるようになっています。

ビルドされたマニフェストを確認すると、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は、リソースの名前を紐付ける機能になっています。namePrefixnameSuffixで変更されても、関連する箇所を自動的に変更してくれるようになっています。

自分で設定することもできますが、よく使われるものはビルトインで設定されています。

ビルトインの設定は下記から確認できます。

kustomize/examples/transformerconfigs at master · kubernetes-sigs/kustomize

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.

参考

Support

\ この記事が役に立ったと思ったら、サポートお願いします! /

buy me a coffee
Share

Profile

author

Masa

都内のIT企業で働くエンジニア
自分が学んだことをブログでわかりやすく発信していきながらスキルアップを目指していきます!

buy me a coffee