ここでは、Kubernetes 1.24 の CHANGELOG から SIG-CLI (kubectl) の取り組みについてまとめています。 は筆者によるコメントです。
新たに追加された主なコマンドとフラグ
-
kubectl config set-context --proxy-url
フラグ: kubeconfig の プロキシ URL を設定 -
kubectl create token
コマンド: Bound ServiceAccount token のリクエスト -
kubectl get/patch/edit/replace --subresource
フラグ: サブリソースの操作 -
kubectl rollout --selector/-l
フラグ: ラベルセレクタによる対象の指定
変更があった主なコマンドとフラグ
-
--filename, -f
フラグ: Glob パターンを受け付けるようになりました(e.g.-f '*.yaml'
-
--validate
フラグ: bool からtrue
,struct
,warn
,false
,ignore
の文字列を受け入れるように変更されました- true/strict - 検証を実施し、オブジェクトの無効なフィールドでリクエストをエラーにする。apiserver で有効な場合にはサーバサイドの検証を実行し、なっていない場合にはクライアントサイドの検証にフォールバックする。
- warn - サーバサイドの検証を実行し、無効なフィールドについて警告する(警告のみでオブジェクトから無効なフィールドを削除してリクエストを成功させる)。サーバで検証が利用できない場合は、検証を実施しない。
- false/ignore - 検証を実施しないで、オブジェクトから不正なフィールドを黙って削除する。
-
kubectl version
: ビルトインの Kustomize バージョンが出力されるようになりました -
kubectl kustomize
: Kustomize v4.5.4 に更新
廃止予定のコマンドとフラグ
なし
削除されたコマンドとフラグ
-
kubectl run --serviceaccount/--hostport/--requests/--limits
フラグ -
--generator
フラグ -
--container-port
フラグ -
kubectl kustomize --enable-managedby-label
フラグ
そのほか、細かい変更は、 https://github.com/superbrothers/kubectl-docs/compare/v1.23.0...v1.24.0 で参照できます。
所感
1.24 でも引き続き目立った新機能はなく、改善、バグ修正、廃止予定だった機能の削除が主な変更でした。
What's New (新情報)
SIG-CLI に関連する情報はありません。
Known Issues(既知の問題)
SIG-CLI に関連する情報はありません。
Urgent Upgrade Notes(必ず一読してからアップグレードしなければならない事項)
SIG-CLI に関連する情報はありません。
Changes by Kind (種類別の変更)
Deprecation(廃止)
SIG-CLI に関連する情報はありません。
API Change(API の変更)
- kubectl のユーザヘルプコマンドの読みやすさが改善されました (#104736, lauchokyip)
- 下記の感じで改行が入るようになったようです
$ kubectl options The following options can be passed to any command: --add-dir-header=false: If true, adds the file directory to the header of the log messages (DEPRECATED: will be removed in a future release, see https://github.com/kubernetes/enhancements/tree/master/keps/sig-instrumentation/2845-deprecate-klog-specific-flags-in-k8s-components) --alsologtostderr=false: log to standard error as well as files (DEPRECATED: will be removed in a future release, see https://github.com/kubernetes/enhancements/tree/master/keps/sig-instrumentation/2845-deprecate-klog-specific-flags-in-k8s-components)
-
ServerSideFieldValidation
機能がベータに昇格し、デフォルトで有効化されるようになりました。Kubectl 1.24 からはこの機能が有効化されているとクライアントサイトの検証の代わりにサーバサイドの検証が使われるようになりました。 (#108889, kevindelgado)- ベータに昇格とありますが、実際にはその後に問題が見つかり、アルファに戻されています
- CRD のメタデータの検証で問題が見つかったようです
Feature(機能)
-
kubectl config set-cluster
にproxy-url
フラグが追加されました (#105566, ardaguclu) -
kubectl config set-context
で補完がサポートされました (#106739, kebe7jun) - すべての
kubectl rollout
コマンドにラベルセレクタが追加されました (#99758, aramperes) -
kubectl diff
コマンドにkubectl apply --prune
をシミュレートする prune フラグが追加されました (#105164, ardaguclu)- 便利そう
- SOCKS5 プロキシ経由での kubectl コマンドの利用(
kubectl exec
とkubectl port-forward
)がサポートされました (#105632, xens) - 最初にシェルが展開することなく、kubectl でファイル名パターンでリソースが管理できるようになりました (#102265, danielrodriguez)
-
kubectl delete -f '*.yaml'
のような glob パターンがサポートされたという意味です。複数のファイルを指定する場合はこれまで-f a.yaml -f b.yaml
とする必要がありました。 -
実装としては
filepath.Glob
が使われているため、対象がファイル名でソートされるとのことです
-
-
kubectl get/patch/edit/replace
コマンドに status と scale サブリソースの取得と更新を行う--subresource
フラグ(アルファ)が追加されました (#99556, nikhita)-
これまで subresource の操作は取得は
kubectl --raw
でいけたが、パッチはkubectl
で実施できず curl を用いる必要があり、テストやデバッグで面倒だったということがモチベーションのようです - KEP: https://github.com/kubernetes/enhancements/issues/2590
-
これまで subresource の操作は取得は
- kubectl
--validate
フラグが bool からtrue
,struct
,warn
,false
,ignore
の文字列を受け入れるように変更されます (#108350, kevindelgado)- true/strict - 検証を実施し、オブジェクトの無効なフィールドでリクエストをエラーにする。apiserver で有効な場合にはサーバサイドの検証を実行し、なっていない場合にはクライアントサイドの検証にフォールバックする。
- warn - サーバサイドの検証を実行し、無効なフィールドについて警告する(警告のみでオブジェクトから無効なフィールドを削除してリクエストを成功させる)。サーバで検証が利用できない場合は、検証を実施しない。
- false/ignore - 検証を実施しないで、オブジェクトから不正なフィールドを黙って削除する。
- kubectl の discovery キャッシュ の TTL のデフォルト値が6時間に増やされました (#107141, mk46)
- discovery キャッシュはクラスタで利用できる API を見つけるための仕組みで、これまでキャッシュの TTL は10分だったが、これが6時間に変更された
- Crossplane や GCP Config Connector, Azure Service Operator といったコントローラのような多くの CRD(1000 はないものの100個はあり得る)をインストールするものの場合、discovery キャッシュの更新に数十秒かかってしまい、生産性に問題があった
- Kubectl はリソースを指定する際の
<type>/<name>
形式の補完、exec
コマンドの--container/-c
フラグのコンテナ名の補完、Pod を対象とするコマンドでリソースタイプの補完をそれぞれサポートしました (#108493, marckhouzam)-
kubectl attach/exec/logs/port-forward
コマンドは引数に Pod 名を取りますが、それに加えて Deployment や Service といったリソース名も取れます(例えば、kubectl logs deployments/app
)。これらのコマンドはこれまで Pod 名の補完のみをサポートしていましたが、<type>/<name>
形式も補完されるようになりました
-
-
kubectl logs
は、Pod の最初のコンテナをデフォルトで選択するようになり、合わせて警告メッセージを出力するようになりました。この新しい動作はkubectl exec
と揃えられた形です。 (#105964, kidlj)- べんり
-
kubectl describe ingress
の出力は、可能であれば IngressClass 名を含むようになりました (#107921, mpuckett159) -
kubectl kustomize
とkubectl apply -k
は Kustomize v4.5.4 に更新されました (#108994, KnVerey) -
kubectl config delete-user
で補完がサポートされました (#107142, dimbleby) -
kubectl create token
は ServiceAccount トークンを要求できるようになりました。ServiceAccount トークンの要求にはedit
またはadmin
の RBAC ロールの権限が必要です。 (#107880, liggitt)-
ServiceAccount が作成されると自動的に生成されていた Secret-based ServiceAccount token が生成されなくなったため、今後 ServiceAccount のトークンを作成したい場合は Bound ServiceAccount token を使用する必要があり、そのトークンのリクエストを簡単に行えるようにするために新しく
kubectl create token
コマンドが追加された - Bound ServiceAccount token については Bound Service Account Tokenとは何か - Qiita を参照
-
ServiceAccount が作成されると自動的に生成されていた Secret-based ServiceAccount token が生成されなくなったため、今後 ServiceAccount のトークンを作成したい場合は Bound ServiceAccount token を使用する必要があり、そのトークンのリクエストを簡単に行えるようにするために新しく
-
kubectl version
は組み込みの Kustomize のバージョンを含むようになりました (#108817, KnVerey)- 次のように出力されるようになった。わざわざ Kustomize のバージョンを知るのに CHANGELOG を見に行かなくて済むようになってべんり。
$ kubectl version 2>/dev/null | grep Kustomize Kustomize Version: v4.5.4
Bug or Regression(バグまたはリグレッション)
-
kubectl cp
で負の値に対する--retries
機能が修正されました (#108748, atiratree)-
--retries
フラグはもともと0より小さい値を指定した場合は無限に繰り返す仕様になっていたが正しく機能していなかったみたい
--retries=0: Set number of retries to complete a copy operation from a container. Specify 0 to disable or any negative value for infinite retrying. The default is 0 (no retry).
-
-
kubectl create secret
コマンドで不正な出力形式を使用した場合にパニックになるバグが修正されました (#107221, rikatz) - kubectl の
--context
フラグにコロンが含まれる値を指定すると bash 補完が効かなくなるバグが修正されました (#107439, brianpursley) - drainer が Ctx または Client に nil を持つ場合に
RunCordonOrUncordon
がエラーになります (#105297, jackfrancis) - コマンドエラー(例えば
kubectl list
->unknown command
)が複数行のプレーンテキストではなくエスケープされた改行のログメッセージとして出力されていてエラーが読みにくかったのが修正されました (#107044, pohly) - 冗長度の高いデバッグメッセージであるにも関わらず JSON での出力で
"v":0
と書かれていたログメッセージが修正されました (#106978, pohly) - デフォルトバックエンドがいないときに
kubectl describe ingress
がdefault-backend:80
と表示する場合に値を<default>
として出力するように変更されました (#108506, jlsong01)- 下記のように表示されていたのが改善された感じです
Default backend: default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
- 冗長設定が有効な場合に kubectl のレスポンスにレスポンスステータスとヘッダが再度追加されました (#108505, rikatz)
- 1.24 で
ServerSideFieldValidation
機能がアルファに戻されました (#109271, liggitt) -
kubectl version
は余分な引数が指定された場合に失敗するように修正されました (#107967, jlsong01)
Other (Cleanup or Flake)
-
kubectl describe priorityclass
に PreemptionPolicy が追加されました (#108701, denkensk) -
kubectl plugin list
コマンドに例が追加されました (#106600, bergerhoffer) -
NewDefaultKubectlCommand
のデフォルトの設定フラグが修正されました (#107131, jonnylangefeld) - クラスタに CRD が存在する前に CRD を適用した場合のエラーメッセージが改善されました (#107363, eddiezane)
- 下記のように表示されていたのが
次のように変わりました。これはよい変更。unable to recognize "sealedsecret.yaml": no matches for kind "SealedSecret" in version "bitnami.com/v1alpha1"
resource mapping not found for name: "letsencrypt" namespace: "cert-manager" from "sealedsecret.yaml": no matches for kind "SealedSecret" in version "bitnami.com/v1alpha1" ensure CRDs are installed first
- Kubectl のスタックトレースは
-v=99
でのみ表示されるようになり、-v=6
では表示されなくなりました (#108053, eddiezane) - Kubectl: 1.23 以下との互換性のために
--dry-run
,--dry-run=true
,--dry-run=false
がもとに戻されました (#107003, julianvmodesto) - kubectl run から廃止予定だった
--serviceaccount
と--hostport
,--requests
,--limits
が削除されました (#108820, mozillazg) - 削除予定だった
generator
とcontainer-port
のフラグが削除されました (#106824, lauchokyip) - ServerResources は2019年2月に廃止予定となり (https://github.com/kubernetes/kubernetes/commit/618050e)、現在は削除され、代わりに ServerGroupsAndResources の使用が提案されています (#107180, ardaguclu)