⚙️
kubectl の yaml 生成バグについて
Kubernetes で yaml を書く際、一から yaml を書くケースはあまり多くないと思います。一般的にはkubectl
コマンドで yaml のテンプレートを生成し、それに追記する場合が多いでしょう。
この記事では yaml 生成時のバグについて解説します。バグとしてはサービスをexpose
する際にnamespace
を指定しても yaml に反映されないというものです。具体的には、下記コマンドを入力すると
$ kubectl create ns testns
$ kubectl -n testns create deployment test-deploy --image=nginx
$ kubectl -n testns expose deployment.apps/test-deploy --port=80 --dry-run=client -o yaml
下記が出力されます。
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
app: test-deploy
name: test-deploy
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: test-deploy
status:
loadBalancer: {}
namespace
にtestns
を指定しているにも関わらず yaml に出力されていません。ちなみにこれは--dry-run=client
を指定した場合のみ発生し、指定しなければ正常に出力されます。
通常業務で使用する際はレビューなり動作確認なりをする時間があるので気づくと思います。むしろ、CKA/CKADのような資格試験で時間が限られている場合、このバグを踏んでパニックになってしまう恐れがありますので、受験を検討されている方は確認しておくことをおすすめします。
対象となるKubernetesバージョンについては、少なくともv1.19とv1.20で上記不具合を確認しています。upstream の方は下記パッチで直しましたので Kubernetes v1.21 以降は不具合は解消される予定です。
Discussion