はじめに
ここでは、Kubernetes 1.20 の CHANGELOG から SIG-CLI (kubectl) の取り組みについてまとめています。
- https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md
- https://relnotes.k8s.io/?areas=kubectl&releaseVersions=v1.20.0
新たに追加された主なコマンドとフラグ
-
kubectl config delete-user
コマンド: kubeconfig から指定のuser
を削除する -
kubectl config get-user
コマンド: kubeconfig に定義された指定のuser
を表示する -
kubectl create ingress
コマンド: 指定の名前で Ingress を作成する -
kubectl debug
コマンド: ワークロードとノードのトラブルシューティングのためのデバッグ Pod を作成する-
kubectl alpha debug
のkubectl debug
への昇格です
-
-
kubectl patch --patch-file
フラグ: パッチを含むファイルを指定してリソースに適用
変更があった主なコマンドとフラグ
-
kubectl drain --delete-local-data
フラグ:--delete-emptydir-data
に変更- emptyDir を使用する Pod が存在する場合もドレイン処理を実行するフラグです
廃止予定のコマンドとフラグ
-
kubectl drain --delete-local-data
フラグ
削除されたコマンドとフラグ
-
kubectl alpha
コマンド -
kubectl convert
コマンド -
kubectl autoscale --generator
フラグ
そのほか、細かい変更は、 https://github.com/superbrothers/kubectl-docs/compare/v1.19.0...v1.20.0 で参照できます。
What's New (新情報)
client-go の外部クレデンシャルプロバイダ
client-go のクレデンシャルプラグインは、環境変数 KUBERNETES_EXEC_INFO
を介して現在のクラスタ情報を渡すことができるようになりました。詳細は、client-go クレデンシャルプラグインのドキュメンテーションを参照してください。
client-go のクレデンシャルプラグインは、例えば Amazon EKS のクラスタ認証に必要な情報を取得する aws-iam-authenticator
などが該当します。今回このクレデンシャルプラグインで、オプションで認証情報を取得しようとしているクラスタに関する情報を KUBERNETES_EXEC_INFO
環境変数を通じて参照できるようになりました。クラスタ情報には、サーバ URL や証明書データが含まれ、また任意の設定情報も渡せます。この機能を使用するには kubeconfig user.exec.provideClusterInfo
フィールドを true
に設定する必要があります。
kubectl debug
のベータへの昇格
kubectl alpha debug
コマンドは、1.20 でアルファからベータに昇格し、kubectl debug
コマンドになりました。
kubectl debug
コマンドは、一般的なデバッグワークフローを kubectl
から直接サポートします。このリリースの kubectl
でサポートされているトラブルシュートのシナリオは次のとおりです。
- 起動時にクラッシュする Pod のコンテナイメージやコマンドを変更したコピーの Pod を作成してトラブルシュートする
- Pod の新しいコピーかエフェメラルコンテナを使って、デバッグツールを含むコンテナを追加することで、distroless コンテナをトラブルシュートする(エフェメラルコンテナはデフォルトでは有効になっていないアルファ機能です)
- エフェメラルコンテナの詳細は Kubernetes 1.16: Ephemeral Containers (alpha) を参照ください
- distroless(ディストロレス)コンテナは、Google が提供するランタイムの依存関係のみを含むコンテナイメージです。パッケージマネージャやシェルといった一般の Linux ディストロに含まれるツールが含まれないため、攻撃対象領域が小さくなったり、脆弱性スキャナの雑音が少なくなるといったメリットがあります。
- ホストの Linux namespaces で実行され、ホストのファイルシステムにアクセスできるコンテナを作成して、ノード上でトラブルシュートする
新しいビルトインコマンドとして、kubectl debug
は、"debug" という名前の kubectl プラグインより優先されることに注意してください。影響を受けるプラグインは名前を変更する必要があります。
kubectl alpha debug
コマンドは廃止予定となり、以降のリリースで削除されます。kubectl alpha debug
の代わりに kubectl debug
を使うようにスクリプトを更新してください!
kubectl debug
の詳細は、Kubernetes ウェブサイトの Debug Running Pods または、kubectl help debug
を参照するか、Kubernetes Slack ワークスペースの #sig-cli チャンネル、または enhancement #1441 にコメントして SIG CLI に連絡してください。
- エフェメラルコンテナは、v1.21 でベータに昇格しデフォルトで有効化される予定になっています(2021/1/26)
Urgent Upgrade Notes(必ず一読してからアップグレードしなければならない事項)
- なし
Changes by Kind(種類別の変更)
Deprecation (廃止)
- Kubectl:
--delete-local-data
フラグの廃止 (#95076, dougsland) [SIG CLI, Cloud Provider and Scalability]-
kubectl drain
コマンドの--delete-local-data
フラグが廃止予定となり、代わりに--delete-emptydir-data
を使う必要があります。 - そもそも emptyDir を使う Pod は再作成されれば emptyDir のデータは削除されるはずで、ドレインを実行するのにいちいち emptyDir のデータを消すかどうかを確認していられないはずで、こんなフラグは不要なはずなんですが、なぜが存在しています。フラグ名の変更ではなくそもそも廃止予定として削除してしまえばよいフラグに感じます。
-
API Change (API 変更)
なし
Feature(機能)
-
kubectl config
サブコマンドにget-users
,delete-user
を追加 (#89840, eddiezane) [SIG CLI]-
kubectl config get-users
は、kubeconfig に定義されたユーザの情報を表示します -
kubectl config delete-user
は、kubeconfig から指定のユーザを削除します
-
-
kubectl
にcreate ingress
コマンドを追加 (#78153, amimof) [SIG CLI and Network]-
ついに
kubectl create
コマンドで Ingress オブジェクトが作成できるようになりました。 TODO
-
ついに
- EphemeralContainers(エフェメラルコンテナ)は、initContainers と containers と同じ API デフォルトが適用されるようになりました (#94896, wawa0210) [SIG Apps and CLI]
-
EphemeralContainers はこれまでクライアント側でデフォルト値が決定されていたため、例えば ImagePullPolicy はデフォルトが
IfNotPresent
になっていました。initContainers と containers では、latest
タグのイメージを指定している場合にはAlways
となる仕様であるため、EphemeralContainers でもそれらの仕様が適用されるように変更されました。
-
EphemeralContainers はこれまでクライアント側でデフォルト値が決定されていたため、例えば ImagePullPolicy はデフォルトが
- Kubectl が Ingress オブジェクトの作成をサポート (#94327, rikatz) [SIG CLI and Network]
- どういうわけか2つめの Ingress サポートの PR がありました
-
kubectl rollout history sts/sts-name --revision=some-revision
は、指定リビジョンの sts の詳細を表示するようになりました (#86506, dineshba) [SIG CLI] - Kubectl: これまでユーザは
KUBECTL_EXTERNAL_DIFF
環境変数を使って 外部 diff ツールに引数を渡せませんでした。このリリースでは、ユーザがKUBECTL_EXTERNAL_DIFF
環境変数で引数を指定できるようになりました (#95292, dougsland) [SIG CLI]-
この変更で
KUBECTL_EXTERNAL_DIFF="colordiff -N -u"
のような設定が可能になりました。べんり。
-
この変更で
- 現在削除されつつあるリソースに
kubectl apply/diff
が実行されるとユーザに警告が表示されるようになりました (#95544, SaiHarshaK) [SIG CLI]-
Warning: Detected changes to resource <object-name> which is currently being deleted.
の警告が標準エラーに出力されます。終了コードに変更はないので安心です。 -
オブジェクト名のみなので、リソース名があるほうがいい気がします TODO
pod
-
-
kubectl alpha debug
がベータに昇格しkubectl debug
になりました (#96138, verb) [SIG CLI and Testing] -
kubectl debug
は、デバッグ用に Pod をコピーするときkubectl set image
の動作と同じ方法でコンテナイメージを変更できるようになりました。詳しくはkubectl help debug
を参照ください。 (#96058, verb) [SIG CLI]-
--copy-to
フラグを使った場合(コピー Pod を作成する)に、--set-image
フラグが使えるようになりました。このフラグはkubectl set image
で使われているもので、--set-image=app=app:debug,sidecar=sidecar:debug
の記法で Pod のコンテナイメージを変更できます。
-
Bug or Regression(バグまたはリグレッション)
-
kubectl wait
に--ignore-not-found
フラグが追加されました (#90969, zhouya0) [SIG CLI]-
これまで
--for=delete
で待ちたいときにすでにオブジェクトが存在しないとエラー(終了ステータス1)になっていましたが、ユーザの期待値としては削除を持っている場合にすでに存在しなければ成功(終了ステータス0)としたいニーズがありました。--ignore-not-found
フラグを使用すれば、オブジェクトが存在しない場合の終了ステータスが0になります。
-
これまで
- "PVC を使用している" Pod を説明する言葉を変更 (#95635, RaunakShah) [SIG CLI]
-
kubectl describe pvc
のMounted by
の項目は、実際にこの PVC をマウントしている Pod をリストするようにみえますが、実際にはそうではなく割当たっていればリストされていたため実態とは異なっていました。この変更でMounted by
がUsed by
に変更されています。
-
- 空の操作をソートした際に失敗しないように修正 (#94666, soltysh) [SIG CLI]
-
これまで
kubectl get --sort-by
オプションで空の要素を指定するとパニックで落ちていたようで、それが修正されました
-
これまで
-
kubectl describe ingress
で正しくない形式で出力されるバグを修正 (#94985, howardjohn) [SIG CLI and Network] -
kubectl top pod
の出力が--sort-by
と--containers
のフラグを一緒に使うとソートされないバグを修正 (#93692, brianpursley) [SIG CLI] -
kubectl drain
で CPU 使用率が高くなるバグの修正 (#95260, amandahla) [SIG CLI] - Kubectl: プラグイン名の前にフラグがある場合にエラーを出力する (#92343, knight42) [SIG CLI]
- -v=2 ではなく -v=4 で Go のスタックトレースを出力する (#94663, soltysh) [SIG CLI]
- 非常に大きなパッチをコマンドラインで直接記述するのではなく
--patch-file
フラグを使用してkubectl patch
に指定できるようになりました。--patch
フラグと--patch-file
フラグは相互に排他です。 (#93548, smarterclayton) [SIG CLI] - kubectl でカスタムの verbs で Roles と ClusterRoles を作成する際に失敗するのではなく警告を出力するようになりました (#92492, eddiezane) [SIG CLI]
- [kubectl] ローカルファイルが存在しない場合にエラーになるように修正しました (#90333, bamarni) [SIG CLI]
-
これまで
kubectl cp
コマンドで存在しないローカルファイルを指定していても何も起こらずにステータス0で終了していたようです
-
これまで
Other (そのほか)
- 全てのコマンドの説明(description)に翻訳が適用されるようになりました (#95439, HerrNaN) [SIG CLI]
- 関数名
NewCreateCreateDeploymentOptions
が修正されました (#91931, lixiaobing1) [SIG CLI] - kubectl から services のジェネレータが削除されました (#95256, Git-Jiro) [SIG CLI]
-
kubectl-convert
プラグインが導入されました (#96190, soltysh) [SIG CLI and Testing]-
kubectl から
convert
コマンドが削除されましたが、要望が多いためにkubectl-convert
プラグインとして提供されることになったようです -
バイナリは提供されていないようにみえるので、k/k から自分でビルドする必要がありそうです
go get -u k8s.io/kubernetes/cmd/kubectl-convert
-
kubectl から
- Kubectl:
kubectl autoscale
のgenerator
フラグは廃止予定になりました(影響はありません)。将来のリリースで削除されます (#92998, SataQiu) [SIG CLI] -
kubectl api-resources
は、(kubectl-api-versions
の出力と同様にAPI group/version
のように)API バージョンを出力するようになりました。APIGROUP カラムは APIVERSION に変更されました。 (#95253, sallyom) [SIG CLI] -
kubectl get ingress
は、extensions/v1beta1
(v1.14 から非推奨)よりもnetworking.k8s.io/v1
を優先するようになりました。非推奨のバージョンを明示的にリクエストするにはkubectl get ingress.v1beta1.extensions
を使用します (#94309, liggitt) [SIG API Machinery and CLI]
所感
kubectl debug
がベータに昇格したのが大きなトピックです。EphemeralContainers がまだアルファでデフォルトで使用できないことは残念ですが、もうすぐ使用できることに期待できます。
また、ついに kubectl create ingress
コマンドが追加されました。Ingress は設定が複雑なのでどの程度このコマンドが機能するのか分かりませんが、これで主に使用されるリソースは大体 kubectl create
で作成できるようになったかなと思います。