22
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[k8s] dry-run するなら dry-run オプションは使わない方がいい

Last updated at Posted at 2020-03-19

本記事で紹介している --server-dry-run オプションですが、v1.18 以降では --dry-run=server への置き換えが必要です。
https://kubernetes.io/blog/2019/01/14/apiserver-dry-run-and-kubectl-diff/

kubectl apply 実行時に --dry-run オプションを付けると、マニフェストファイルが適切かどうかをオブジェクトを作ることなく確認できます。

$ kubectl apply -f xxx.yaml --dry-run

しかし、このオプションはマニフェストファイルの文法チェックなど Local でのチェックしかしてくれず、kube-apiserver を通した挙動は確認できません。

そこで、代わりに --server-dry-run オプションや kubectl diff コマンドの使用をおススメします。

$ kubectl apply -f xxx.yaml --server-dry-run
$ kubectl diff -f xxx.yaml

※ 本機能は Kubernetes 1.13 以降でベータ版となっているものです。

実際に違いを検証してみた

例えば、以下のように image を故意にコメントアウトした deployment マニフェストファイルを用意します。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          # image: nginx:1.17.9
          ports:
            - containerPort: 443

この状態で --dry-run--server-dry-run / kubectl diff の挙動を比較してみると、

$ kubectl apply -f dryrun-nginx.yaml --dry-run
deployment.apps/nginx created (dry run)

$ kubectl apply -f dryrun-nginx.yaml --server-dry-run
The Deployment "nginx" is invalid: spec.template.spec.containers[0].image: Required value

$ kubectl diff -f dryrun-nginx.yaml
The Deployment "nginx" is invalid: spec.template.spec.containers[0].image: Required value

このように、--dry-run オプションでは異常は検知できず、--server-dry-run / kubectl diff では正しく検知できます。
kubectl diff コマンドでは、マニフェスト適用時に前回との差分出力までしてくれるので、場合によってはこちらの方が使い勝手がよいかもしれません。

参考資料

22
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?