【Kubernetes】マニフェストファイルを爆速で書く
めんどくさがりやは考える
これまで何度も扱ってきたマニフェストファイルは一度書いてしまえばその後リソースの破壊と創造を容易としてくれますが、いかんせん項目がたくさんあるのでイチから記述するのがとても大変です。
既に作成されたものをコピペして書くのも良いですが、元のファイルの仕様や書いた人独自の考え方に影響されてしまい、本来あるべき構成で記述できなくなるリスクもあります。(これはエンジニアあるある…と思いたい)
dry-runオプション
dry-runコマンドを使うと雛形となるyamlファイルを表示したり、他のオプションと組み合わせてファイルとして出力させることができます。
mysqlのリソースをDeploymentで構築する例で解説します。
Deploymentの最もシンプルなデプロイ方法は、以下のようにcreateコマンドでリソースを構築する方法です。
実行するとcreateされた旨メッセージが表示されました。(実際にリソースがデプロイされています)
kubectl create deploy mysql --image=mysql:latest
deployment.apps/mysql created
ではこのコマンドにdry-runを付け足してみます。
kubectl create deploy mysql --image=mysql:latest --dry-run=client -o yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: mysql
name: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: mysql
spec:
containers:
- image: mysql:latest
name: mysql
resources: {}
status: {}
あら不思議。mysqlリソースのDeploymentのyamlが表示されたではありませんか。
ちなみにこのコマンドではリソースはデプロイされていません。
ここで表示されたものをyamlファイルとして保存し微修正すれば良さそうです。
でもいちいち保存するのは面倒なので、一発でyamlファイルで出力すことはできるのでしょうか。
できるのか、できないのか、どっちなーーんだい。
でーきーる!
kubectl create deploy mysql --image=mysql:latest --dry-run=client -o yaml > mysql-deployment-dryrun.yaml
実行結果こそ何も表示されないものの、指定したファイル名でyamlファイルが作成されています。
mysqlの場合はDBの名前やrootユーザの指定が必須なので、それらを付け足します。
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: mysql
name: mysql
spec:A
replicas: 1
selector:
matchLabels:
app: mysql
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: mysql
spec:
containers:
- image: mysql:latest
name: mysql
[ここから追記]
env:
- name: MYSQL_ROOT_PASSWORD
value: ********
- name: MYSQL_DATABASE
value: mysql_db
- name: MYSQL_USER
value: macbooker
- name: MYSQL_PASSWORD
value: ********
[ここまで]
resources: {}
status: {}
ではapplyしていきます。
kubectl apply -f mysql-deployment-dryrun.yaml
deployment.apps/mysql created
mysqlという名前のDeploymentが確認できました。
kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
mysql 1/1 1 1 68s
確認が終わったらリソースは消しておきましょう。
kubectl delete -f mysql-deployment-dryrun.yaml
deployment.apps "mysql" deleted
まとめ
何十行にもわたるマニフェストファイルをイチから記述するのは骨が折れますが、dry-runオプションを活用することで雛形を自動作成できました。さらに他のオプションと組み合わせることでyamlファイルとして出力することがきました。これを微修正した上でapplyし、リソースがデプロイされたところまで確認しました。
ご覧いただきありがとうございました。