ここでは、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
-
次のように Pods が使用するリソースの合計値が出力されるようになる
- 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
フラグでできましたが、毎回指定するのが面倒なので環境変数でやりたいということのようです
-
discovery cache の指定はこれまでも
- 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
コマンドの出力に含まれるようにするもの
-
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-container
annotation を使用する必要があります
-
代わりに
- シェル補完が
--subresource
フラグに提供されるようになりました (#109070, marckhouzam)-
--subresource
フラグは、リソースのサブリソースを操作するためのフラグで v1.24 で実装された。現在はstatus
とscale
の2つがサポートされている。
-