Kubernetesを使った開発やCI等で適用中のマニフェストの一部を変更する方法を4つまとめました。
1. kubectl editで直接書き換える
kubectl edit ~~~
でエディタを開いて直接適用中のものを書き換えることができる
例: nginx-deploymentという名前のdeploymentの中のimagePullPolicyをAlwaysに書き換える。
kubectl edit deployments.apps nginx-deployment
でエディタが開くのでimagePullPolicyをAlwaysに書き換えて保存
2. 適用中のマニフェストを取得してきて、ローカルで書き換えたうえでapplyする方法
kubectl get ~~~ -o yaml
でローカルに適用中のマニフェストを保存して書き換えた後、再適用する方法
例: nginx-deploymentという名前のdeploymentの中のimagePullPolicyをAlwaysに書き換える
# 適用中のマニフェストを取得
kubectl get deployments.apps nginx-deployment -o yaml > nginx-deployment.yaml
# バックアップを作成
cp nginx-deployment.yaml nginx-deployment-backup.yaml
nginx-deployment.yamlの中のimagePullPolicyをimagePullPolicy: Alwaysに書き換える
kubectl apply -f nginx-deployment.yaml
元に戻すときはバックアップを適用しなおす
kubectl apply -f nginx-deployment-backup.yaml
3. kubectl patchを使う
kubectl patch ~~~
で上書きしたい設定をjsonで渡して書き換える。ワンライナーで書き換えることができる。
例: deployment/nginx-deploymentのnginxイメージをnginx:1.9.1に変える
kubectl patch deployment nginx-deployment -p '{"spec":{"template":{"spec":{"containers":[{"name":"nginx","image":"nginx:1.9.1"}]}}}}'
4. kubectl setを使う
kubectl set image ~~~
のように使い、image以外にはenv、resources、selector、serviceaccount、subjectが指定できる
例: deployment/nginx-deploymentのnginxイメージをnginx:1.9.1に変える
kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1
おまけ: 適当なenvを追加して強制再作成させる
Podの環境変数を書き換えることで強制的に再作成させる小技。
kubectl set env deployment/nginx-deployment RELOAD_DATE="$(date)"
imagePullPolicy: Always
になってないとimageをpullしなおさないので注意。