Увімкнення або вимкнення функціональних можливостей

На цій сторінці показано, як увімкнути або вимкнути функціональні можливості для керування певними функціями Kubernetes у вашому кластері. Увімкнення функціональних можливостей дозволяє тестувати та використовувати функції Alpha або Beta до того, як вони стануть загальнодоступними.

Примітка:

Деякі стабільні (GA) можливості також можна вимкнути, зазвичай через один мінорний реліз після GA; однак у цьому випадку ваш кластер може не відповідати вимогам Kubernetes.

Перш ніж ви розпочнете

Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою minikube або використовувати одну з цих пісочниць:

Вам також потрібно:

  • Адміністративний доступ до вашого кластера
  • Знання про те, яку функцію ви хочете увімкнути (див. [Довідку про функціональні можливості] (/docs/reference/command-line-tools-reference/feature-gates/))

Примітка:

Загально доступні функції (GA) є завжди стандартно увімкненими. Зазвичай ви налаштовуєте можливості для функцій Alpha або Beta.

Understand feature gate maturity

Перед увімкненням функціональної можливості перевірте довідку про функціональні можливості щодо рівня зрілості функції:

  • Альфа: стандартно вимкнена, може містити помилки. Використовуйте тільки в тестових кластерах.
  • Бета: зазвичай стандартно увімкнена, добре протестована.
  • GA: завжди стандартно увімкнена; іноді може бути вимкнена для одного випуску після GA.

Визначте, які компоненти вимагають використання функціональної можливості {#identify-which-components-need-the-feature gate}

Різні функціональні можливості впливають на різні компоненти Kubernetes:

  • Деякі функції вимагають увімкнення можливості на декількох компонентах (наприклад, API-сервері та менеджері контролерів)
  • Інші функції вимагають увімкнення можливості лише на одному компоненті (наприклад, лише kubelet)

У довідці про функціональні можливості зазвичай вказано, на які компоненти впливає кожна функція. Усі компоненти 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/:

  1. Для kube-apiserver, kube-controller-manager або kube-scheduler додайте прапорець до команди:

    spec:
      containers:
      - command:
        - kube-apiserver
        - --feature-gates=FeatureName=true
        # ... інші прапорці
    

    Збережіть файл. Pod автоматично перезапуститься.

  2. Для kubelet, відредагуйте /var/lib/kubelet/config.yaml:

    apiVersion: kubelet.config.k8s.io/v1beta1
    kind: KubeletConfiguration
    featureGates:
      FeatureName: true
    

    Перезапустіть kubelet:

    sudo systemctl restart kubelet
    
  3. Для 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

Примітка:

У кластерах kubeadm компоненти панелі управління (kube-apiserver, kube-controller-manager та kube-scheduler) зазвичай налаштовуються за допомогою прапорців командного рядка в їх маніфестах статичних подів, розташованих у /etc/kubernetes/manifests/. Хоча ці компоненти підтримують файли конфігурації за допомогою прапорця --config, kubeadm в основному використовує прапорці командного рядка.

Перевірка конфігурації функціональних можливостей

Після налаштування перевірте, чи функціональні можливості активні. Наступні методи застосовуються до кластерів kubeadm, де компоненти панелі управління працюють як статичні поди.

Перевірка маніфестів компонентів панелі управління

Перегляньте функціональні можливості, налаштовані в маніфесті статичного пода:

kubectl -n kube-system get pod kube-apiserver-<node-name> -o yaml | grep feature-gates

Перевірка конфігурації kubelet

Використовуйте точку доступу configz kubelet:

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

Перевірка через точку доступу метрик

Статус функціональної можливості виводиться в метриках у стилі Prometheus компонентами Kubernetes (доступно в Kubernetes 1.26+). Запитайте точку доступу метрик, щоб перевірити, які функціональні можливості включені:

kubectl get --raw /metrics | grep kubernetes_feature_enabled

Щоб перевірити конкретну функціональну можливість:

kubectl get --raw /metrics | grep kubernetes_feature_enabled | grep FeatureName

Метрика показує 1 для увімкнених можливостей і 0 для вимкнених можливостей.

Примітка:

У кластерах kubeadm перевірте всі відповідні місця, де можуть бути налаштовані функціональні можливості, оскільки конфігурація розподілена між декількома файлами та місцями.

Перевірка через точку доступу /flagz

Якщо ви маєте доступ до точок доступу для налагодження компонента і для цього компонента ввімкнено функціональну можливість ComponentFlagz, ви можете перевірити прапорці командного рядка, які використовувалися для запуску компонента, відвідавши точку доступу /flagz. Функціональні можливості, налаштовані за допомогою прапорців командного рядка, відображаються в цьому виводі.

Точка доступу /flagz є частиною Kubernetes z-pages, які надають зрозумілу для людини інформацію про налагодження під час виконання для основних компонентів.

Для отримання додаткової інформації див. документацію z-pages.

Розуміння вимог до конкретних компонентів

Деякі приклади функціональних можливостей, специфічних для компонентів:

  • Орієнтовані на API-сервер: такі функції, як StructuredAuthenticationConfiguration, в першу чергу впливають на kube-apiserver
  • Орієнтовані на Kubelet: такі функції, як GracefulNodeShutdown, в першу чергу впливають на kubelet
  • Кілька компонентів: деякі функції вимагають координації між компонентами

Увага:

Якщо для функції потрібно кілька компонентів, необхідно ввімкнути можливість на всіх відповідних компонентах. Увімкнення можливості лише на деяких компонентах може призвести до несподіваної поведінки або помилок.

Завжди спочатку тестуйте функціональні можливості на тестових середовищах. Функції Alpha можуть бути видалені без попередження.

Що далі