ここでは、Kubernetes 1.25 の CHANGELOG から SIG-CLI (kubectl) の取り組みについてまとめています。
は筆者によるコメントです。
新たに追加された主なコマンドとフラグ
-
kubectl alpha eventの次のフラグ:-
--output:json|yamlサポートが追加され、将来カスタムカラム等の機能が追加される予定 -
--types:NormalまたはWarningが指定でき、特定のイベントタイプのみをフィルタして出力する。デフォルトはNormal,Warningで、すべてのタイプが含まれる。 -
--no-headers: デフォルトの出力形式でヘッダを出力しなくなる
-
-
kubectl diff --show-managed-fieldsフラグ: 出力に managed-fields の差分を含むようになる。デフォルトでは含まれないように変更された。 -
kubectl top pod --sumフラグ: Pods が使用するリソースの合計値が出力される
変更があった主なコマンドとフラグ
-
kubectl kustomizeコマンド: kustomize v4.5.7 にアップグレード
廃止予定のコマンドとフラグ
なし
削除されたコマンドとフラグ
-
kubectl runの次のフラグ:-
--cascade,--filename,--force,--grace-period,--kustomize,--recursive,--timeout,--wait
-
そのほか、細かい変更は、 https://github.com/superbrothers/kubectl-docs/compare/v1.24.0...v1.25.0 で参照できます。
所感
1.25 でも kubectl に主だった変更はなく、細かい修正や機能追加があります。
特に便利なのは kubectl diff コマンドで managed-fields が含まれなくなった変更です。managed-fields は Server-Side Apply において、どの manager がどのフィールドを管理しているかの情報をシステムが管理するためのフィールドで、一般にユーザがこのフィールドが変更されることについて知る必要はないため、kubectl get -o yaml コマンドで managed-fields がデフォルトで出力されなくなったのに次いで kubectl diff コマンドでも出力されなくなりました。
Server-Side Apply の詳細について興味ある方は、Kubernetes 1.14: Server-side Apply (alpha) - Qiita を、managed-fields に興味がある方は わかる!metadata.managedFields - Speaker Deck を参照ください。
What's New (Major Themes)(主要な変更)
SIG-CLI に関連する情報はありません。
Urgent Upgrade Notes(必ず一読してからアップグレードしなければならない事項)
SIG-CLI に関連する情報はありません。
Changes by Kind(種類別の変更)
Deprecation(廃止)
SIG-CLI に関連する情報はありません。
API Change(API の変更)
SIG-CLI に関連する情報はありません。
Feature(機能)
-
kubectl describe podコマンドの出力に Service Account フィールドが追加されました (#111192, aufarg)-
最近そういえば ServiceAccount の情報が出力されてないなーと思っていたところでした。べんり。
-
- alpha events に
--output,--types,--no-headersの新しいフラグが追加されました (#110007, ardaguclu)-
--output:json|yamlサポートが追加され、将来カスタムカラム等の機能が追加される予定 -
--types:NormalまたはWarningが指定でき、特定のイベントタイプのみをフィルタして出力する。デフォルトはNormal,Warningで、すべてのタイプが含まれる。 -
--no-headers: デフォルトの出力形式でヘッダを出力しなくなる
-
-
kubectl top podに sum 機能が追加されました (#105100, lauchokyip)-
次のように Pods が使用するリソースの合計値が出力されるようになる
$ kubectl top po --sum NAME CPU(cores) MEMORY(bytes) nginx-75889c7749-m98c8 0m 3Mi nginx-75889c7749-rqtgd 22m 3Mi ________ ________ 22m 7Mi -
kubectl topコマンドを使用するには、対象のクラスタで metrics-server が実行されている必要があります。 https://github.com/kubernetes-sigs/metrics-server
-
- Kubectl:
kubectl rollout statusで複数リソースがサポートされました (#108777, pjo256)-
kubectl rollout status deploy/nginx deploy/nginx2のように複数のオブジェクトを一度に渡せるようになったようです。
-
- 新しい
KUBECACHEDIR環境変数が導入され、デフォルトの discovery cache のディレクトリであるHOME/.kube/cacheをオーバライドできるようになりました。 (#109479, ardaguclu)-
discovery cache の指定はこれまでも --cache-dirフラグでできましたが、毎回指定するのが面倒なので環境変数でやりたいということのようです
-
- TopologySpreadConstraints が pods, deployments, daemonsets 等に対する describe コマンドで表示されるようになりました (#109563, ardaguclu)
-
これまで含まれていなかったので追加されたようで、次のように表示されます
Topology Spread Constraints: topology.kubernetes.io/zone1:ScheduleAnyway when max skew 3 is exceeded topology.kubernetes.io/zone2:DoNotSchedule when max skew 1 is exceeded for selector foo=bar
-
-
kubectl diffはデフォルトで managed fields を無視するように変更されました。そのため、差分に managed fields を含めるための--show-managed-fieldsフラグが追加されました。 (#111319, brianpursley)-
kubectl diffコマンドの出力で表示されてしまっていた managed-fields の変更が今後デフォルトで出力されなくなりました。さいこう。 -
ただ、現状差分があると metadata.generationフィールドの値がインクリメントされてそれが差分として表示されてしまって邪魔なので、これも非表示にしたい気がする (イシューは作っておきました https://github.com/kubernetes/kubectl/issues/1267)$ kubectl diff -f nginx.yaml diff -u -N /tmp/LIVE-2978127705/apps.v1.Deployment.default.nginx /tmp/MERGED-2861968783/apps.v1.Deployment.default.nginx --- /tmp/LIVE-2978127705/apps.v1.Deployment.default.nginx 2022-08-28 10:50:39.099818887 +0900 +++ /tmp/MERGED-2861968783/apps.v1.Deployment.default.nginx 2022-08-28 10:50:39.099818887 +0900 @@ -4,7 +4,7 @@ annotations: deployment.kubernetes.io/revision: "1" creationTimestamp: "2022-08-28T01:36:11Z" - generation: 2 + generation: 3 labels: app: nginx name: nginx @@ -30,7 +30,7 @@ app: nginx spec: containers: - - image: nginx + - image: nginxinc/nginx-unprivileged imagePullPolicy: Always name: nginx-unprivileged resources: {}
-
-
StatefulSetsのMaxUnavailableは、一度に1つ以上の Pods を停止させることでより早いRollingUpdateを可能にします。RollingUpdateの間に停止させたい Pods の数はmaxUnavailableパラメータで設定できます。 (#109251, krmayankk)-
StatefulSets の maxUnavailableについて色々書かれていますが、この機能自体は 1.24 でアルファで追加されており、ここでの変更はmaxUnavailableフィールドをkubectl describe statefulsetsコマンドの出力に含まれるようにするもの
-
Documentation(ドキュメント)
Bug or Regression(バグまたはリグレッション)
- replace コマンドで dry-run と force のフラグが設定されている場合は、"--force が設定されている場合、dry-run は使用できません" というエラーメッセージが出力されるようになりました (#110326, ardaguclu)
- 同じ値のラベルを設定してもエラーにせず無視するようになりました (#105936, zigarn)
-
kubectl labelコマンドは、これまで追加しようとしているラベルのキーがオブジェクトのラベルに存在している場合にエラーになっていました(--overwriteフラグで上書き可能)が、値が同一の場合はエラーにせずコマンドが成功するように変更されました
-
-
kubectl runコマンドの使用されていないフラグが削除されました (#110668, brianpursley)-
具体的には次のフラグが削除されました
-
--cascade,--filename,--force,--grace-period,--kustomize,--recursive,--timeout,--wait
-
-
-
kubectl kustomizeの機能が https://github.com/kubernetes-sigs/kustomize/releases/tag/kustomize%2Fv4.5.7 に記述されているとおりにアップグレードされました (#111606, natasha41575) -
pod.Spec.RuntimeClassNameフィールドが kubectl describe コマンドで利用可能になりました (#110914, yeahdongcn)
Other (Cleanup or Flake)(そのほか)
- kubectl completion コマンドの short description に不足している powershell オプションが追加されました (#109773, danielhelfand)
- discovery client のバースト制限のデフォルトが 300 に設定されました (#109141, ulucinar)
-
以前の変更で kubectl のバースト制限は 300 に変更されたものの、client-go でのデフォルトは以前の 100 のままだったので、それも今回の変更で 300 に変更された -
CRD の多いクラスタにおいて kubectlは tbrl(b=300, r=50.0 qps)に変更されたことで改善されたが、Helm 等のその他のクライアントでスロットリングが引き続き発生していた
-
-
kubectl runとkubectl debugでアタッチに失敗した場合のエラーメッセージが改善されました (#110764, soltysh)-
以前は Error attaching ...と表示されていたが、アタッチに失敗したことは致命的ではないためwarning: couldn't attach to pod/...のように変更された
-
- 廃止予定だった
kubectl.kubernetes.io/default-logs-containerのサポートが削除されました (#109254, pacoxu)-
代わりに kubectl.kubernetes.io/default-containerannotation を使用する必要があります
-
- シェル補完が
--subresourceフラグに提供されるようになりました (#109070, marckhouzam)-
--subresourceフラグは、リソースのサブリソースを操作するためのフラグで v1.24 で実装された。現在はstatusとscaleの2つがサポートされている。
-