LoginSignup
8
4

More than 3 years have passed since last update.

Kubernetes 1.20: SIG-CLI (kubectl) の変更内容

Last updated at Posted at 2020-12-22

はじめに

ここでは、Kubernetes 1.20 の CHANGELOG から SIG-CLI (kubectl) の取り組みについてまとめています。

新たに追加された主なコマンドとフラグ

  • kubectl config delete-user コマンド: kubeconfig から指定の user を削除する
  • kubectl config get-user コマンド: kubeconfig に定義された指定の user を表示する
  • kubectl create ingress コマンド: 指定の名前で Ingress を作成する
  • kubectl debug コマンド: ワークロードとノードのトラブルシューティングのためのデバッグ Pod を作成する
    • :pencil: kubectl alpha debugkubectl debug への昇格です
  • kubectl patch --patch-file フラグ: パッチを含むファイルを指定してリソースに適用

変更があった主なコマンドとフラグ

  • kubectl drain --delete-local-data フラグ: --delete-emptydir-data に変更
    • :pencil: 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 クレデンシャルプラグインのドキュメンテーションを参照してください。

:pencil: 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 コンテナをトラブルシュートする(エフェメラルコンテナはデフォルトでは有効になっていないアルファ機能です)
    • :pencil: エフェメラルコンテナの詳細は Kubernetes 1.16: Ephemeral Containers (alpha) を参照ください
    • :pencil: 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 に連絡してください。

Urgent Upgrade Notes(必ず一読してからアップグレードしなければならない事項)

  • なし

Changes by Kind(種類別の変更)

Deprecation (廃止)

  • Kubectl: --delete-local-data フラグの廃止 (#95076, dougsland) [SIG CLI, Cloud Provider and Scalability]
    • :pencil: kubectl drain コマンドの --delete-local-data フラグが廃止予定となり、代わりに --delete-emptydir-data を使う必要があります。
    • :pencil: そもそも emptyDir を使う Pod は再作成されれば emptyDir のデータは削除されるはずで、ドレインを実行するのにいちいち emptyDir のデータを消すかどうかを確認していられないはずで、こんなフラグは不要なはずなんですが、なぜが存在しています。フラグ名の変更ではなくそもそも廃止予定として削除してしまえばよいフラグに感じます。

API Change (API 変更)

なし

Feature(機能)

  • kubectl config サブコマンドに get-users, delete-user を追加 (#89840, eddiezane) [SIG CLI]
    • :pencil: kubectl config get-users は、kubeconfig に定義されたユーザの情報を表示します
    • :pencil: kubectl config delete-user は、kubeconfig から指定のユーザを削除します
  • kubectlcreate ingress コマンドを追加 (#78153, amimof) [SIG CLI and Network]
    • :pencil: ついに kubectl create コマンドで Ingress オブジェクトが作成できるようになりました。 TODO
  • EphemeralContainers(エフェメラルコンテナ)は、initContainers と containers と同じ API デフォルトが適用されるようになりました (#94896, wawa0210) [SIG Apps and CLI]
    • :pencil: EphemeralContainers はこれまでクライアント側でデフォルト値が決定されていたため、例えば ImagePullPolicy はデフォルトが IfNotPresent になっていました。initContainers と containers では、latest タグのイメージを指定している場合には Always となる仕様であるため、EphemeralContainers でもそれらの仕様が適用されるように変更されました。
  • Kubectl が Ingress オブジェクトの作成をサポート (#94327, rikatz) [SIG CLI and Network]
    • :pencil: どういうわけか2つめの Ingress サポートの PR がありました :thinking:
  • 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]
    • :pencil: この変更で KUBECTL_EXTERNAL_DIFF="colordiff -N -u" のような設定が可能になりました。べんり。
  • 現在削除されつつあるリソースに kubectl apply/diff が実行されるとユーザに警告が表示されるようになりました (#95544, SaiHarshaK) [SIG CLI]
    • :pencil: Warning: Detected changes to resource <object-name> which is currently being deleted. の警告が標準エラーに出力されます。終了コードに変更はないので安心です。
    • :pencil: オブジェクト名のみなので、リソース名があるほうがいい気がします 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]
    • :pencil: --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]
    • :pencil: これまで --for=delete で待ちたいときにすでにオブジェクトが存在しないとエラー(終了ステータス1)になっていましたが、ユーザの期待値としては削除を持っている場合にすでに存在しなければ成功(終了ステータス0)としたいニーズがありました。--ignore-not-found フラグを使用すれば、オブジェクトが存在しない場合の終了ステータスが0になります。
  • "PVC を使用している" Pod を説明する言葉を変更 (#95635, RaunakShah) [SIG CLI]
    • :pencil: kubectl describe pvcMounted by の項目は、実際にこの PVC をマウントしている Pod をリストするようにみえますが、実際にはそうではなく割当たっていればリストされていたため実態とは異なっていました。この変更で Mounted byUsed by に変更されています。
  • 空の操作をソートした際に失敗しないように修正 (#94666, soltysh) [SIG CLI]
    • :pencil: これまで 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]
    • :pencil: これまで 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]
    • :pencil: kubectl から convert コマンドが削除されましたが、要望が多いために kubectl-convert プラグインとして提供されることになったようです
    • :pencil: バイナリは提供されていないようにみえるので、k/k から自分でビルドする必要がありそうです
      • go get -u k8s.io/kubernetes/cmd/kubectl-convert
  • Kubectl: kubectl autoscalegenerator フラグは廃止予定になりました(影響はありません)。将来のリリースで削除されます (#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 で作成できるようになったかなと思います。

8
4
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
8
4