はじめに
ここでは、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 でもそれらの仕様が適用されるように変更されました。
-
- 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 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 で作成できるようになったかなと思います。