概要
kustomize は k8s のマニフェストを生成、管理することができるツールです helm や helmfile に近いツールですが kubectl に標準で搭載されているので別途インストール作業は不要で使えます 今回は簡単なリソース作成を kustomize を使ってやってみました
環境
- k8s 1.20.1
- kubectl 1.20.4
今回の流れ
configMap で作成した情報を nginx で表示するアプリを作成してみます 最終的には kustomize.yaml で各種リソースを定義してデプロイします
profile.txt の作成
今回は configMap として登録します kustomize では configMap を作成するために configMapGenrator という機能が使えます これはファイルから configMap の定義を生成してくれる機能です
- vim profile.txt
name=hawksnowlog
この profile.txt を使って configMap を作成するために kustomize.yaml というファイルを作成します
- vim kustomize.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
configMapGenerator:
- name: user-profile
files:
- profile.txt
とりあえずこれでビルドしてみると kustomize が自動生成してくれるマニフェストの状態を確認することができます
- kubectl kustomize .
こんな感じで kustomize.yaml にいろいろな定義をしていくことで一括でマニフェストを管理してくれるツールになります
deployment.yaml の作成
次に deployment.yaml を作成します 先程定義した configMap を使うように定義します
- vim deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
labels:
app: my-app
spec:
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: app
image: nginx:latest
volumeMounts:
- name: profile
mountPath: /usr/share/nginx/html
volumes:
- name: profile
configMap:
name: user-profile
単純な deployment の定義になります volumeMounts で configMap を参照できます 今回はテキストファイルですが nginx のドキュメントルートに配置してあとから確認できるようにします
そしてこの deployment.yaml も kustomize.yaml で管理するので追記します 普通のマニフェストを管理する場合は resoureces ディレクティブを使って定義します
- vim kustomize.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
configMapGenerator:
- name: user-profile
files:
- profile.txt
resources:
- deployment.yaml
service.yaml の作成
deploment によってデプロイされた Pods にアクセスするために service を定義します NodePort でアクセスします
- vim service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-app
labels:
app: my-app
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
protocol: TCP
selector:
app: my-app
selector の「app: my-app」は deployment のラベルと合わせるようにしましょう
これも kustomize.yaml に追記します
- vim kustomize.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
configMapGenerator:
- name: user-profile
files:
- profile.txt
resources:
- deployment.yaml
- service.yaml
動作確認
ここまで作成できたら適用してみます kustomize を使っている場合はすべてのリソースを一回でデプロイできます
- kubectl apply -k .
-f ではなく -k オプションなので注意しましょう
これでデプロイされると以下のように kustomize によりリソースが作成されているのが確認できると思います
- kubectl get -k .
NAME DATA AGE
configmap/user-profile-gd9h846t5c 1 3m25s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/my-app NodePort 10.110.195.120 <none> 80:30722/TCP 11m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/my-app 1/1 1 1 23s
あとは NodePort で LISTEN しているポートにアクセスすればちゃんと profile.txt の内容が確認できます
- curl node_ip:30722/profile.txt
=> name=hawksnowlog
リソース削除
- kubectl delete -k .
最後に
自分でマニフェストを作成して管理する際にわざわざ helm chart のテンプレートとして書きたくない場合には kustomize を使う感じかなと思います
helmfile もあるのを考えると helm に寄せるほうが良い気はしますが一概にどちらが良いかは何とも言えないかなと思います
kubectl でのオペレーションに慣れている人は kustomize にしたほうがいいし helm でのオペレーションに慣れている人は helm にしたほうがいいなどはあるかなと思います
0 件のコメント:
コメントを投稿