Kubernetes 資格試験本番では edit コマンドを使わない

前置き

そういえば今年度何も資格を取っていなかったので、去年取得した CKA に続き、CKAD を受験しようと思います。

Udemy のこの講座に久しぶりにログインしたものの、あんまり覚えてないので最初からやり直しです。

去年はこれを受講し、CKAに合格。 www.udemy.com

CKA合格後、ちょっとだけこの講座を受講したが飽きてやめた。 www.udemy.com

試験難易度的には CKA > CKAD と言われているので、ちょっと復習すればいけるやろ的な甘い考えです。

復習する中で試験本番Tipsを一つ思い出したのでメモします。

試験本番では edit 禁止

試験本番では Kubernetes 環境に対して管理者権限でコマンドをベシベシ叩きます。そのため環境を壊して試験が続行できなくなる可能性があります。

環境を壊しても自分で直すか再構築すればOKですが、時間にシビアな試験なので環境破壊=試験終了を意味します。

直接マニフェストを書き換える kubectl edit コマンドは非常に便利ですが、ミスすると取り返しがつかなくなることがあるので試験本番では edit 禁止と律するのがよさそうです。

超簡単な例を挙げると以下のようなケースです。

Q: レプリカセットのイメージが間違っていて DockerHub からイメージプルできない。動くように修正せよ。

edit の場合(本番ではやらないようにしたい)

このとき、一番速いのは以下です。※エイリアス k を設定している前提

k edit rs hoge-replicaset

Vimが開くので spec を修正し保存。既存のエラー Pod をすべて delete。

これだけでOKですが、万一修正内容が間違ったまま保存してしまった場合、元に戻すことはできません。※一見 --record オプションが使えそうかなと思いますが、これはコマンドが記録されるだけなので無理です。

もしかしたらシステム側を掘れば旧戻しや差分確認ができるかもしれませんが非常にハードだと思います。

patch の場合(打ち込むのに時間がかかる)

edit は怖いとなれば、patch でやるのが定石です。

kubectl patch rs hoge-replicaset -p '{"spec":{"template":{"spec":{"containers":[{"name":"nginx-container","image":"nginx"}]}}}}'

しかし、打ち込むのに非常に時間がかかり、カッコの数とかクオーテーションの数とかミスったときにはさらに時間がとられます。

再作成の場合(一番早くて安全)

要件が許すのであれば手数は多いもののコマンドが簡単な再作成が一番速いです。

マニフェストをバックアップ。このとき、Tab 補完で間違えないようにプレフィックスとして bk. をつけておくとよい。

k get rs hoge-replicaset -o yaml > bk.hoge-replicaset.yaml

編集用マニフェストを作成。

cp bk.hoge-replicaset.yaml hoge-replicaset.yaml

マニフェスト編集。

vi hoge-replicaset.yaml

既存の ReplicaSets は試験側で用意したものであるため、受験者側はオリジナルのマニフェストファイルは持っていません。このまま apply しても反映されない可能性がある(少なくとも Warning は出る)ため、リソースを削除してから新しいマニフェストを apply します。

k delete rs hoge-replicaset
k apply -f hoge-replicaset.yaml

‘edit` は使わないように気を付けましょう。