# Налаштування компонентів за допомогою kubeadm API

LLMS index: [llms.txt](/llms.txt)

---

<!-- overview -->

Ця сторінка охоплює способи налаштування компонентів, які розгортаються за допомогою kubeadm. Для компонентів панелі управління можна використовувати прапорці у структурі `ClusterConfiguration` або патчі на рівні вузла. Для kubelet і kube-proxy ви можете використовувати `KubeletConfiguration` та `KubeProxyConfiguration`, відповідно.

Всі ці опції можливі за допомогою конфігураційного API kubeadm. Докладніше про кожне поле в конфігурації ви можете дізнатися на наших [довідкових сторінках API](/docs/reference/config-api/kubeadm-config.v1beta4/).


<div class="alert alert-info" role="note"><h4 class="alert-heading">Примітка:</h4>Щоб переконфігурувати кластер, який вже був створений, дивіться <a href="/uk/docs/tasks/administer-cluster/kubeadm/kubeadm-reconfigure/">Переконфігурація кластера з kubeadm</a>.</div>


<!-- body -->

## Налаштовування панелі управління за допомогою прапорців у `ClusterConfiguration` {#customizing-the-control-plane-with-flags-in-clusterconfiguration}

Обʼєкт конфігурації панелі управління kubeadm надає можливість користувачам перевизначати типові прапорці, що передаються компонентам панелі управління, таким як APIServer, ControllerManager, Scheduler та Etcd. Компоненти визначаються за допомогою наступних структур:

- `apiServer`
- `controllerManager`
- `scheduler`
- `etcd`

Ці структури містять спільне поле `extraArgs`, яке складається з пар `name` / `value`. Щоб перевизначити прапорець для компонента панелі управління:

1. Додайте відповідні `extraArgs` до вашої конфігурації.
2. Додайте прапорці до поля `extraArgs`.
3. Запустіть `kubeadm init` з `--config <ВАШ КОНФІГ YAML>`.


<div class="alert alert-info" role="note"><h4 class="alert-heading">Примітка:</h4>Ви можете згенерувати обʼєкт <code>ClusterConfiguration</code> з типовими значеннями, використовуючи <code>kubeadm config print init-defaults</code> і зберігши вивід у файл на ваш вибір.</div>



<div class="alert alert-info" role="note"><h4 class="alert-heading">Примітка:</h4>Обʼєкт <code>ClusterConfiguration</code> наразі є глобальним у кластерах kubeadm. Це означає, що будь-які прапорці, які ви додаєте, будуть застосовуватися до всіх екземплярів того самого компонента на різних вузлах. Щоб застосовувати індивідуальну конфігурацію для кожного компонента на різних вузлах, ви можете використовувати <a href="#patches">патчі</a>.</div>



<div class="alert alert-info" role="note"><h4 class="alert-heading">Примітка:</h4>Дублювання прапорців (ключів) або передача одного й того ж прапорця <code>--foo</code> кілька разів наразі не підтримується. Для обходу цього обмеження слід використовувати <a href="#patches">патчі</a>.</div>


### Прапорці APIServer {#apiserver-flags}

Докладну інформацію див. у [довідковій документації для kube-apiserver](/docs/reference/command-line-tools-reference/kube-apiserver/).

Приклад використання:

```yaml
apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
kubernetesVersion: v1.16.0
apiServer:
  extraArgs:
  - name: "enable-admission-plugins"
    value: "AlwaysPullImages,DefaultStorageClass"
  - name: "audit-log-path"
    value: "/home/johndoe/audit.log"
```

### Прапорці ControllerManager {#controllermanager-flags}

Докладну інформацію див. у [довідковій документації для kube-controller-manager](/docs/reference/command-line-tools-reference/kube-controller-manager/).

Приклад використання:

```yaml
apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
kubernetesVersion: v1.16.0
controllerManager:
  extraArgs:
  - name: "cluster-signing-key-file"
    value: "/home/johndoe/keys/ca.key"
  - name: "deployment-controller-sync-period"
    value: "50"
```

### Прапорці планувальника {#scheduler-flags}

Докладну інформацію див. у [довідковій документації для kube-scheduler](/docs/reference/command-line-tools-reference/kube-scheduler/).

Приклад використання:

```yaml
apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
kubernetesVersion: v1.16.0
scheduler:
  extraArgs:
  - name: "config"
    value: "/etc/kubernetes/scheduler-config.yaml"
  extraVolumes:
    - name: schedulerconfig
      hostPath: /home/johndoe/schedconfig.yaml
      mountPath: /etc/kubernetes/scheduler-config.yaml
      readOnly: true
      pathType: "File"
```

### Прапорці etcd {#etcd-flags}

Докладну інформацію див. у [документації сервера etcd](https://etcd.io/docs/).

Приклад використання:

```yaml
apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
etcd:
  local:
    extraArgs:
    - name: "election-timeout"
      value: 1000
```

## Налаштування за допомогою патчів {#patches}








  <div class="feature-state-notice feature-beta">
      <span class="feature-state-name">СТАН ФУНКЦІОНАЛУ:</span>
      <code>Kubernetes v1.22 [beta]</code>
    </div>
  



Kubeadm дозволяє передавати теку з файлами патчів в `InitConfiguration`,
`JoinConfiguration` та `UpgradeConfiguration` на окремих вузлах. Ці патчі можна використовувати як останній крок налаштування перед записом конфігурації компонента на диск.

Ви можете передати цей файл в `kubeadm init` за допомогою `--config <ВАШ КОНФІГ YAML>`:

```yaml
apiVersion: kubeadm.k8s.io/v1beta4
kind: InitConfiguration
patches:
  directory: /home/user/somedir
```


<div class="alert alert-info" role="note"><h4 class="alert-heading">Примітка:</h4>Для <code>kubeadm init</code> ви можете передати файл, який містить як <code>ClusterConfiguration</code>, так і <code>InitConfiguration</code> розділені <code>---</code>.</div>


Ви можете передати цей файл в `kubeadm join` за допомогою `--config <ВАШ КОНФІГ YAML>`:

```yaml
apiVersion: kubeadm.k8s.io/v1beta4
kind: JoinConfiguration
patches:
  directory: /home/user/somedir
```

Якщо ви використовуєте `kubeadm upgrade apply` та `kubeadm upgrade node` для оновлення вузлів kubeadm, ви повинні знову надати ті самі виправлення, щоб налаштування збереглися після оновлення.

```yaml
apiVersion: kubeadm.k8s.io/v1beta4
kind: UpgradeConfiguration
apply:
  patches:
    directory: /home/user/somedir
```

```yaml
apiVersion: kubeadm.k8s.io/v1beta4
kind: UpgradeConfiguration
node:
  patches:
    directory: /home/user/somedir
```

Тека має містити файли з назвами `target[suffix][+patchtype].extension`. Наприклад, `kube-apiserver0+merge.yaml` або просто `etcd.json`.

- `target` може бути одним із `kube-apiserver`, `kube-controller-manager`, `kube-scheduler`, `etcd`,
`kubeletconfiguration` та `corednsdeployment`.
- `suffix` — це необовʼязковий рядок, який можна використовувати для визначення порядку застосування патчів за алфавітною послідовністю.
- `patchtype` може бути одним із `strategic`, `merge` або `json` і вони повинні відповідати форматам патчів, [підтримуваним kubectl](/docs/tasks/manage-kubernetes-objects/update-api-object-kubectl-patch). Типово `patchtype` — `strategic`.
- `extension` повинен бути або `json`, або `yaml`.

## Налаштування kubelet {#kubelet}

Щоб налаштувати kubelet, ви можете додати [`KubeletConfiguration`](/docs/reference/config-api/kubelet-config.v1beta1/) поруч із `ClusterConfiguration` або `InitConfiguration`, розділеними `---` у тому самому файлі конфігурації. Цей файл потім можна передати до `kubeadm init`, і kubeadm застосує ту ж саму базову `KubeletConfiguration` для всіх вузлів у кластері.

Для застосування конфігурації, специфічної для екземпляра, понад базовою `KubeletConfiguration`, ви можете використовувати ціль патчу [`kubeletconfiguration`](#patches).

Також ви можете використовувати прапорці kubelet як перевизначення, передаючи їх у поле `nodeRegistration.kubeletExtraArgs`, яке підтримується як `InitConfiguration`, так і `JoinConfiguration`. Деякі прапорці kubelet є застарілими, тому перевірте їх статус у [довідковій документації kubelet](/docs/reference/command-line-tools-reference/kubelet), перш ніж їх використовувати.

Додаткові деталі дивіться в розділі [Налаштування кожного kubelet у вашому кластері за допомогою kubeadm](/docs/setup/production-environment/tools/kubeadm/kubelet-integration)

## Налаштування kube-proxy {#customizing-kube-proxy}

Щоб налаштувати kube-proxy, ви можете передати `KubeProxyConfiguration` поруч з `ClusterConfiguration` або `InitConfiguration` до `kubeadm init`, розділені `---`.

Для отримання докладнішої інформації ви можете перейти на наші [сторінки API-посилань](/docs/reference/config-api/kubeadm-config.v1beta4/).


<div class="alert alert-info" role="note"><h4 class="alert-heading">Примітка:</h4>kubeadm розгортає kube-proxy як <a class='glossary-tooltip' title='Забезпечує запуск копії обʼєкта Pod на певному наборі вузлів у кластері.' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/concepts/workloads/controllers/daemonset' target='_blank' aria-label='DaemonSet'>DaemonSet</a>, що означає, що <code>KubeProxyConfiguration</code> буде застосовуватися до всіх екземплярів kube-proxy в кластері.</div>


## Налаштування CoreDNS {#customizing-coredns}

kubeadm дозволяє налаштувати Deployment CoreDNS за допомогою патчів для [`corednsdeployment` patch target](#patches).

Патчі для інших обʼєктів API, повʼязаних з CoreDNS, таких як <a class='glossary-tooltip' title='Обʼєкт API, призначений для зберігання неконфіденційних даних у вигляді пар ключ-значення. Може використовуватися як змінні середовища, аргументи командного рядка чи файли конфігурації у томі.' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/concepts/configuration/configmap/' target='_blank' aria-label='ConfigMap'>ConfigMap</a> `kube-system/coredns`, наразі не підтримуються. Ви повинні вручну виправити будь-який з цих обʼєктів за допомогою kubectl, а потім перестворити <a class='glossary-tooltip' title='Pod є групою контейнерів, що запущені у вашому кластері.' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/concepts/workloads/pods/' target='_blank' aria-label='Podʼи'>Podʼи</a> CoreDNS.

Як альтернативу, ви можете вимкнути розгортання kubeadm CoreDNS, включивши наступну опцію у ваш `ClusterConfiguration`:

```yaml
dns:
  disabled: true
```

Також виконавши наступну команду:

```shell
kubeadm init phase addon coredns --print-manifest --config my-config.yaml`
```

ви можете отримати файл маніфесту, який kubeadm створить для CoreDNS у вашій конфігурації.
