2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2025-05-26

ここでは、Kubernetes 1.33 の CHANGELOG から SIG-CLI (kubectl) の取り組みについてまとめています。:pencil: は筆者によるコメントです。

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

なし

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

  • kubectl wait --for=create: ラベルセレクタとの使用で実行が直ちに終了してしまっていたのが修正されました

廃止予定のコマンドとフラグ

なし

削除されたコマンドとフラグ

そのほか、細かい変更は、 https://github.com/superbrothers/kubernetes-docs/compare/kubernetes-1.32...kubernetes-1.33 で参照できます。

所感

久々に大きな変更として kubectl のユーザ設定を分離した kuberc の追加がありました。今後の機能拡張も期待できそうです。ページ下部で詳細を紹介しています。

What's New (Major Themes)

なし

Urgent Upgrade Notes

なし

Changes by Kind

Deprecation

なし

API Change

  • kubectl: kubeconfig とは別の kuberc ファイルからの環境設定を使用して kubectl の動作をカスタマイズできるアルファ版のサポートが追加されました (#125230, ardaguclu) [SIG API Machinery, CLI and Testing]
    • :pencil: 期待の新機能です。下で詳しく機能を紹介します。

Feature

  • kubectl debug コマンドでリソースの補完が追加されました (#130033, ardaguclu) [SIG CLI]
  • kubectl --subresource フラグが安定版に昇格しました (#130238, soltysh)
  • kubectl autoscale サブコマンドで autoscaling/v1 API ではなく autoscaling/v2 を使用するように変更されました。このコマンドはまず最初に autoscaling/v2 API の使用を試みます。もし autoscaling/v2 API を使用できない、またはエラーが発生した場合は autoscaling/v1 API にフォールバックします (#128950, googs1025) [SIG Autoscaling and CLI]

Documentation

Bug or Regression

  • ラベルセレクタでの kubectl wait --for=create の動作を修正し、ラベルが一致するリソースが表示されるのを適切に待つようになりました (#128662, omerap12) [SIG CLI and Testing]
    • :pencil: error: no matching resources found で実行が直ちに終了してしまっていたのが修正されました
  • WebSockets HTTPS サポートが入りました (#129872, seans3) [SIG API Machinery, Architecture, Auth, CLI, Cloud Provider, Instrumentation, Network and Node]
  • [kubectl] projected volume sources の describe 出力を改善し、Secret と ConfigMap のエントリがオプショナルかどうかを明示的に示すようになりました (#129457, gshaibi) [SIG CLI]

Other (Cleanup or Flake)

  • 対象 Pod の .Spec.SecurityContext.RunAsUser フィールドに非 root ユーザが指定されている場合にデバッグプロファイルによって付与されたデバッグコンテナの能力 (capabilities) が期待どおりに動作しない可能性があることをユーザに通知する警告メッセージが表示されるようになりました (#127696, mochizuki875) [SIG CLI and Testing]
    • :pencil: 条件を満たす場合に次のメッセージが表示されます
      Warning: Non-root user is configured for the entire target Pod, and some capabilities granted by debug profile may not work. Please consider using "--custom" with a custom profile that specifies "securityContext.runAsUser: 0".
      
    • :pencil: 例えばデバッグプロファイルに sysadmin を指定していた場合にはコンテナレベルで securityContext.privileged=true のエフェメラルコンテナが追加されますが、Pod レベルで非 root での実行が指定されていると期待した権限が付与されずに期待したデバッグコマンドが実行できない事態になります

⚡ kubectl の動作をカスタマイズできる kuberc ファイル (アルファ機能)

Kubernetes 1.33 で kubectl の動作をカスタマイズできる新しい設定ファイルである kuberc がアルファレベルで追加されました。
クラスタの接続情報を持つ kubeconfig ファイルにはすでにユーザ設定機能が実はあります1。しかし、kubeconfig ファイルは接続するクラスタを切り替えるために --kubeconfig オプションで別のものを指定したりするため、ここにユーザ設定を入れておくことは適切ではありませんでした。クラスタ接続に必要なクレデンシャルデータが含まれるため、ユーザ設定を他の人と共有しにくい問題もあります。

そこで、ユーザ設定のみを持つ新しい設定ファイルとして kuberc ファイルが導入されました。加えてユーザ設定の分離のみならず新たに kubectl の動作をカスタマイズできる機能が追加されています。

kuberc ファイルの使い方

kubectl の設定

kuberc は Kubernetes 1.33 でアルファレベルで導入されました。そのため v1.33.0 以上の kubectl ツールとアルファレベルのため明示的に機能を有効にするために環境変数 KUBECTL_KUBERC=true の設定が必要です。

$ kubectl version --client
Client Version: v1.33.1
Kustomize Version: v5.6.0
$ export KUBECTL_KUBERC=true

環境変数は .bashrc.zshrc など、使用するシェル設定で起動時に設定されるようにしましょう。

kuberc ファイル

kuberc ファイルはデフォルトでは ~/.kube/kuberc が使われます。KUBERC 環境変数または kubectl --kuberc フラグで明示的に指定もできます。

$ kubectl options | grep -A 1 -- --kuberc
    --kuberc='':
        Path to the kuberc file to use for preferences. This can be disabled by exporting KUBECTL_KUBERC=false.

kuberc の機能: コマンドエイリアスとデフォルトフラグの上書き

kuberc ファイルでは下記の2つの新機能が使用できます。

  • aliases: コマンドと引数、フラグを指定したエイリアスコマンドの定義
    • ビルドイン、エイリアス、プラグインの順で優先される
  • overrides: コマンドのデフォルトのフラグの上書き
    • 上書きしたフラグはインライン指定で上書きされる

kuberc ファイルの構造は次のとおりです(KEP にあるサンプルです)。

apiVersion: kubectl.config.k8s.io/v1alpha1
kind: Preference

aliases:
- name: getdbprod
  command: get
  # 引数の先頭に追加するオプションです。後ろに追加する appendArgs フィールドもあります
  prependArgs:
  - pods
  flags:
  - name: selector
    default: what=database
  - name: namespace
    default: us-2-production

overrides:
- command: apply
  flags:
  - name: server-side
    default: "true"
- command: delete
  flags:
  - name: interactive
    default: "true"

kubectl apply でデフォルトで Server Side Apply (SSA) を有効にするのは便利ですね。こういった形でフラグのデフォルト値を上書きできます。

drain で必ず追加するオプションもデフォルトになっていてもよさそうです。

overrides:
- command: drain
  flags:
  - name: ignore-daemonsets
    default: "true"
  - name: delete-emptydir-data
  - default: "true"

一方でオペレーションのログを記録することを考えると前提が人によって変わってしまうのは問題にもなりえそうです。コマンド実行時にどのフラグが上書きされているか表示してくれてもよいかもしれません。
好みがありそうですが、これ自体も kuberc で挙動を変更できるので、新しい機能もより気軽に追加できるようになりそうです。

そのほかにも GitOps ツールの Flux を使用している場合、SSA managedFields 問題も下記のようにデフォルトで Flux が適用したと思わせるようにしておくとハッピーになれます。

overrides:
- command: apply
  flags:
  - name: server-side
    default: "true"
  - name: field-manager
    default: kustomize-controller

エイリアスコマンドはオプションの値に追加の引数を使えるようになると便利そうな予感があります。
例えば次のように特定のノード上の pods をリストするなどできるとうれしそうです。

- name: gpn
  command: get
  prependArgs:
  - pods
  flags:
  - name: --all-namespaces
    default: "true"
  - name: --field-selector
    default: spec.nodeName=$1 # v1.33 時点では追加引数をフラグの値の一部としては使用できず

今後の機能追加に期待です。

参考

  1. https://kubernetes.io/docs/reference/config-api/kubeconfig.v1/#Preferences

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?