このページでは、フィーチャーゲートを有効化また無効化して、クラスター内でKubernetesの特定の機能を制御する方法を説明します。 フィーチャーゲートを有効化することで、一般提供される前にアルファまたはベータ機能をテストおよび使用できます。
Kubernetesクラスターが必要、かつそのクラスターと通信するためにkubectlコマンドラインツールが設定されている必要があります。 このチュートリアルは、コントロールプレーンのホストとして動作していない少なくとも2つのノードを持つクラスターで実行することをおすすめします。 まだクラスターがない場合、minikubeを使って作成するか、 以下のいずれかのKubernetesプレイグラウンドも使用できます:
以下も必要です:
フィーチャーゲートを有効化する前に、フィーチャーゲートのリファレンスで機能の成熟度レベルを確認してください:
フィーチャーゲートごとに、影響を受けるKubernetesコンポーネントは異なります:
フィーチャーゲートのリファレンスは通常、各ゲートによって影響を受けるコンポーネントを示しています。 すべてのKubernetesコンポーネントは同じフィーチャーゲート定義を共有しているため、すべてのゲートがヘルプ出力に表示されますが、各コンポーネントの動作に影響を与えるのは関連するゲートのみです。
関連するコンポーネント全体でフィーチャーゲートを有効化するための構成ファイルを作成します:
apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
apiServer:
extraArgs:
feature-gates: "FeatureName=true"
controllerManager:
extraArgs:
feature-gates: "FeatureName=true"
scheduler:
extraArgs:
feature-gates: "FeatureName=true"
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
featureGates:
FeatureName: true
クラスターを初期化します:
kubeadm init --config kubeadm-config.yaml
kubeadmクラスターの場合、フィーチャーゲートの設定はマニフェストファイル、構成ファイル、kubeadm設定など複数の場所で行うことができます。
/etc/kubernetes/manifests/内のコントロールプレーンコンポーネントのマニフェストを編集します:
kube-apiserver、kube-controller-manager、またはkube-schedulerの場合、コマンドにフラグを追加します:
spec:
containers:
- command:
- kube-apiserver
- --feature-gates=FeatureName=true
# ... other flags
ファイルを保存します。 Podは自動的に再起動します。
kubeletの場合、/var/lib/kubelet/config.yamlを編集します:
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
featureGates:
FeatureName: true
kubeletを再起動します:
sudo systemctl restart kubelet
kube-proxyの場合、ConfigMapを編集します:
kubectl -n kube-system edit configmap kube-proxy
設定にフィーチャーゲートを追加します:
featureGates:
FeatureName: true
DaemonSetを再起動します:
kubectl -n kube-system rollout restart daemonset kube-proxy
コマンドラインのフラグに、カンマ区切りのリストを使用します:
--feature-gates=FeatureA=true,FeatureB=false,FeatureC=true
構成ファイルをサポートするコンポーネント(kubelet、kube-proxy)の場合:
featureGates:
FeatureA: true
FeatureB: false
FeatureC: true
/etc/kubernetes/manifests/にある静的Podマニフェスト内のコマンドラインフラグを介して構成されます。
これらのコンポーネントは--configフラグを介して構成ファイルをサポートしていますが、kubeadmは主にコマンドラインフラグを使用します。設定後、フィーチャーゲートがアクティブであることを確認します。 以下の方法は、コントロールプレーンのコンポーネントが静的Podとして実行されるkubeadmクラスターに適用されます。
静的Podマニフェストで設定されたフィーチャーゲートを表示します:
kubectl -n kube-system get pod kube-apiserver-<node-name> -o yaml | grep feature-gates
kubeletのconfigzエンドポイントを使用します:
kubectl proxy --port=8001 &
curl -sSL "http://localhost:8001/api/v1/nodes/<node-name>/proxy/configz" | grep featureGates -A 5
もしくは、ノード上で直接構成ファイルを確認します:
cat /var/lib/kubelet/config.yaml | grep -A 10 featureGates
フィーチャーゲートのステータスは、KubernetesコンポーネントによってPrometheusスタイルのメトリクスで公開されます(利用可能なのはKubernetes 1.26以降)。 メトリクスエンドポイントをクエリして、どのフィーチャーゲートが有効になっているかを確認します:
kubectl get --raw /metrics | grep kubernetes_feature_enabled
特定のフィーチャーゲートを確認するには:
kubectl get --raw /metrics | grep kubernetes_feature_enabled | grep FeatureName
メトリクスは、有効なゲートには1、無効なゲートには0を表示します。
コンポーネントのデバッグエンドポイントにアクセスでき、ComponentFlagzフィーチャーゲートがそのコンポーネントで有効化されている場合、/flagzエンドポイントにアクセスしてコンポーネントの起動に使用されたコマンドラインフラグを検査できます。
コマンドラインフラグを使用して構成されたフィーチャーゲートは、この出力に表示されます。
/flagzエンドポイントは、Kubernetesのz-pagesの一部であり、人間が読みやすい形式でコアコンポーネントのランタイムデバッグ情報を提供します。
より詳しくは、z-pagesのドキュメントを参照してください。
コンポーネント固有のフィーチャーゲートの例:
StructuredAuthenticationConfigurationのような機能は主にkube-apiserverに影響しますGracefulNodeShutdownのような機能は主にkubeletに影響しますフィーチャーゲートは必ず本番環境以外の環境で最初にテストしてください。 アルファ機能は予告なしに削除される可能性があります。