Kubernetes v1.10 [stable]
kubeadm init та kubeadm join разом забезпечують гарну послідовність дій користувача для створення базового кластера Kubernetes з нуля, відповідно до найкращих практик. Однак може бути не очевидно, як kubeadm це робить.
Цей документ надає додаткову інформацію про те, що відбувається за лаштунками, з метою поширення знань про найкращі практики для кластера Kubernetes.
Кластер, який налаштовується за допомогою kubeadm init та kubeadm join, має бути:
kubeadm initexport KUBECONFIG=/etc/kubernetes/admin.confkubectl apply -f <network-plugin-of-choice.yaml>kubeadm join --token <token> <endpoint>:<port>Щоб зменшити складність і спростити розробку вищого рівня інструментів, що будуються на основі kubeadm, він використовує обмежений набір констант для добре відомих шляхів та імен файлів.
Тека Kubernetes /etc/kubernetes є константою в застосунку, оскільки вона є очевидним шляхом у більшості випадків і найінтуїтивнішим розташуванням; інші константні шляхи та імена файлів є такими:
/etc/kubernetes/manifests як шлях, де kubelet повинен шукати маніфести статичних Podʼів.
Імена маніфестів статичних Podʼів:
etcd.yamlkube-apiserver.yamlkube-controller-manager.yamlkube-scheduler.yaml/etc/kubernetes/ як шлях, де зберігаються файли kubeconfig з ідентифікаторами для компонентів панелі управління. Імена файлів kubeconfig:
kubelet.conf (bootstrap-kubelet.conf під час TLS bootstrap)controller-manager.confscheduler.confadmin.conf для адміністратора кластера і kubeadmsuper-admin.conf для супер-адміністратора кластера, який може обходити RBACІмена сертифікатів і ключових файлів:
ca.crt, ca.key для центру авторизації Kubernetesapiserver.crt, apiserver.key для сертифіката API-сервераapiserver-kubelet-client.crt, apiserver-kubelet-client.key для клієнтського сертифіката, що використовується API-сервером для безпечного підключення до kubelet-івsa.pub, sa.key для ключа, який використовується менеджером контролерів при підписанні ServiceAccountfront-proxy-ca.crt, front-proxy-ca.key для центру авторизації front-проксіfront-proxy-client.crt, front-proxy-client.key для клієнта front-проксіБільшість команд kubeadm підтримують прапорець --config, який дозволяє передавати конфігураційний файл з диска. Формат конфігураційного файлу відповідає загальній схемі API Kubernetes apiVersion / kind, але вважається форматом конфігурації компонентів. Деякі компоненти Kubernetes, такі як kubelet, також підтримують конфігурацію на основі файлів.
Різні підкоманди kubeadm вимагають різних kind файлів конфігурації. Наприклад, InitConfiguration для kubeadm init, JoinConfiguration для kubeadm join, UpgradeConfiguration для kubeadm upgrade і ResetConfiguration для kubeadm reset.
Командою kubeadm config migrate можна перенести файл конфігурації старого формату до нового (поточного) формату конфігурації. Інструмент kubeadm підтримує міграцію лише із застарілих форматів конфігурацій до поточного формату.
Докладні відомості наведено на сторінці kubeadm configuration reference.
kubeadm initКоманда kubeadm init складається з послідовності атомарних завдань для виконання, як описано в внутрішньому робочому процесі kubeadm init.
Команда kubeadm init phase дозволяє користувачам викликати кожне завдання окремо, і в кінцевому підсумку пропонує багаторазовий і компонований API/інструментарій, який може бути використаний іншими інструментами початкового завантаження Kubernetes, будь-яким інструментом автоматизації ІТ або досвідченим користувачем для створення власних кластерів.
Kubeadm виконує набір перевірок перед початком ініціалізації з метою перевірки передумов і уникнення типових проблем під час запуску кластера.
Користувач може пропустити певні перевірки перед установкою або всі за допомогою опції --ignore-preflight-errors.
--kubernetes-version), є хоча б на одну мінорну версію вищою за версію kubeadm CLI./etc/kubernetes/manifests вже існує і не є порожньоюip, iptables, mount, nsenter відсутні в шляху до командethtool, tc, touch відсутні в шляху до командkubeadm init phase preflight.Kubeadm генерує пари сертифікатів і приватних ключів для різних цілей:
Самопідписаний центр сертифікації для кластера Kubernetes, збережений у файлі ca.crt і приватний ключ у файлі ca.key
Сертифікат обслуговування для API-сервера, згенерований за допомогою ca.crt як CA, збережений у файлі apiserver.crt разом із приватним ключем apiserver.key. Цей сертифікат повинен містити наступні альтернативні імена:
10.96.0.1, якщо підмережа сервісів — 10.96.0.0/12)kubernetes.default.svc.cluster.local, якщо значення прапорця --service-dns-domain є cluster.local, а також типові DNS-імена kubernetes.default.svc, kubernetes.default, kubernetes--apiserver-advertise-addressКлієнтський сертифікат для API-сервера для безпечного підключення до kubelet-ів, згенерований за допомогою ca.crt як CA і збережений у файлі apiserver-kubelet-client.crt разом із його приватним ключем apiserver-kubelet-client.key. Цей сертифікат повинен бути в організації system:masters
Приватний ключ для підпису токенів ServiceAccount, збережений у файлі sa.key разом із його публічним ключем sa.pub
Центр сертифікації для front proxy, збережений у файлі front-proxy-ca.crt разом із його ключем front-proxy-ca.key
Клієнтський сертифікат для клієнта front proxy, згенерований за допомогою front-proxy-ca.crt як CA і збережений у файлі front-proxy-client.crt разом із його приватним ключем front-proxy-client.key
Сертифікати зберігаються типово у /etc/kubernetes/pki, але цю теку можна налаштувати за допомогою прапорця --cert-dir.
Зверніть увагу на наступне:
/etc/kubernetes/pki/ca.{crt,key}, і після цього kubeadm використовуватиме ці файли для підпису інших сертифікатів. Див. також використання власних сертифікатівca.crt, але не надавати файл ca.key. Якщо всі інші сертифікати і файли kubeconfig вже на місці, kubeadm визнає цю умову і активує ExternalCA, що також означає, що контролер csrsigner в контролері-менеджері не буде запущений--dry-run, файли сертифікатів записуються в тимчасову текуkubeadm init phase certs allIt seems like you're referring to documentation or a detailed guide on how kubeadm handles various aspects of Kubernetes initialization and configuration. If you need a translation of this content into Ukrainian, I can provide that. Here's the translation:
Kubeadm генерує kubeconfig файли з ідентичностями для компонентів панелі управління:
Файл kubeconfig для kubelet, який використовується під час ініціалізації TLS — /etc/kubernetes/bootstrap-kubelet.conf. У цьому файлі є bootstrap-token або вбудовані клієнтські сертифікати для автентифікації цього вузла у кластері.
Цей клієнтський сертифікат повинен:
system:nodes, як вимагається модулем Node Authorizationsystem:node:<hostname-lowercased>Файл kubeconfig для контролера-менеджера, /etc/kubernetes/controller-manager.conf; у цьому файлі вбудований клієнтський сертифікат з ідентичністю контролера-менеджера. Цей клієнтський сертифікат повинен мати CN system:kube-controller-manager, як визначено стандартними RBAC ролями ядра компонентів
Файл kubeconfig для планувальника, /etc/kubernetes/scheduler.conf; у цьому файлі вбудований клієнтський сертифікат з ідентичністю планувальника. Цей клієнтський сертифікат повинен мати CN system:kube-scheduler, як визначено стандартними RBAC ролями ядра компонентів
Додатково, kubeconfig файл для kubeadm як адміністративної сутності генерується і зберігається у /etc/kubernetes/admin.conf. Цей файл включає сертифікат з Subject: O = kubeadm:cluster-admins, CN = kubernetes-admin. kubeadm:cluster-admins — це група, керована kubeadm. Вона повʼязана з cluster-admin ClusterRole під час kubeadm init, за допомогою super-admin.conf файлу, який не потребує RBAC. Файл admin.conf повинен залишатися на вузлах панелі управління і не повинен бути переданий іншим користувачам.
Під час kubeadm init генерується інший kubeconfig файл і зберігається у /etc/kubernetes/super-admin.conf. Цей файл включає сертифікат з Subject: O = system:masters, CN = kubernetes-super-admin. system:masters — це суперкористувачі, які обходять RBAC і роблять super-admin.conf корисним у випадку надзвичайної ситуації, коли кластер заблокований через неправильну конфігурацію RBAC. Файл super-admin.conf повинен зберігатися в безпечному місці і не повинен передаватися іншим користувачам.
Дивіться RBAC user facing role bindings для додаткової інформації про RBAC і вбудовані ClusterRoles та групи.
Ви можете запустити kubeadm kubeconfig user для створення файлів kubeconfig для додаткових користувачів.
Також, зверніть увагу на наступне:
ca.crt.--dry-run, файли kubeconfig записуються в тимчасову теку.kubeadm init phase kubeconfig allKubeadm записує файли маніфестів статичних Pod для компонентів панелі управління до /etc/kubernetes/manifests. kubelet спостерігає за цією текою для створення Podʼів при запуску.
Маніфести статичних Podʼів мають спільний набір властивостей:
Всі статичні Podʼи розгорнуті в просторі імен kube-system
Всі статичні Podʼи мають мітки tier:control-plane та component:{імʼя-компоненти}
Всі статичні Podʼи використовують клас пріоритету system-node-critical
На всіх статичних Podʼах встановлено hostNetwork: true, щоб дозволити запуск панелі управління до налаштування мережі; в результаті:
127.0.0.1etcd-server буде встановлена як 127.0.0.1:2379Включено обрання лідера як для контролер-менеджера, так і для планувальника
Контролер-менеджер та планувальник будуть посилатися на файли kubeconfig з їхніми відповідними, унікальними ідентифікаторами
Всі статичні Podʼи отримують будь-які додаткові прапорці або патчі, вказані користувачем, як описано в передача користувацьких аргументів компонентам панелі управління
Всі статичні Podʼи отримують будь-які додаткові томи, вказані користувачем (Шлях хоста)
Зверніть увагу, що:
--dry-run файли статичних Podʼів записуються у тимчасову текуkubeadm init phase control-plane allМаніфест статичних Podʼів для сервера API обробляється наступними параметрами, наданими користувачами:
apiserver-advertise-address та apiserver-bind-port для звʼязку; якщо вони не вказані, стандартне значення буде IP-адреса основного мережевого інтерфейсу на машині та порт 6443service-cluster-ip-range для використання сервісівetcd-servers та повʼязані налаштування TLS (etcd-cafile, etcd-certfile, etcd-keyfile); якщо зовнішній сервер etcd не вказано, буде використовуватися локальний etcd (через мережу хосту)--cloud-provider разом зі шляхом --cloud-config, якщо такий файл існує (експериментально, альфа версія, буде вилучено в майбутній версії)Інші прапорці сервера API, що встановлені безумовно, включають:
--insecure-port=0 для уникнення небезпечних зʼєднань з сервером API
--enable-bootstrap-token-auth=true для активації модуля автентифікації BootstrapTokenAuthenticator. Див. TLS Bootstrapping для деталей
--allow-privileged до true (необхідно, наприклад, для kube-proxy)
--requestheader-client-ca-file до front-proxy-ca.crt
--enable-admission-plugins до:
NamespaceLifecycle наприклад, для уникнення видалення системних зарезервованих просторів іменLimitRanger та ResourceQuota для встановлення обмежень на простори іменServiceAccount для автоматизації службових облікових записівPersistentVolumeLabel приєднує мітки регіону або зони до PersistentVolumes, як визначено провайдером хмарних послуг (Цей контролер допуску є застарілим і буде вилучений у майбутній версії. Він типово не розгорнутий kubeadm починаючи з v1.9, якщо явно не вибрано використання gce або aws як провайдерів хмарних послуг)DefaultStorageClass для встановлення типового класу зберігання на обʼєктах PersistentVolumeClaimDefaultTolerationSecondsNodeRestriction для обмеження того, що kubelet може змінювати (наприклад, тільки Podʼи на цьому вузлі)--kubelet-preferred-address-types до InternalIP,ExternalIP,Hostname; це робить kubectl logs та іншу комунікацію API server-kubelet працюючою в середовищах, де імена хостів вузлів не розвʼязуються
Прапорці для використання сертифікатів, згенерованих на попередніх етапах:
--client-ca-file до ca.crt--tls-cert-file до apiserver.crt--tls-private-key-file до apiserver.key--kubelet-client-certificate до apiserver-kubelet-client.crt--kubelet-client-key до apiserver-kubelet-client.key--service-account-key-file до sa.pub--requestheader-client-ca-file до front-proxy-ca.crt--proxy-client-cert-file до front-proxy-client.crt--proxy-client-key-file до front-proxy-client.keyІнші прапорці для забезпечення безпеки front proxy (Агрегація API) комунікацій:
--requestheader-username-headers=X-Remote-User--requestheader-group-headers=X-Remote-Group--requestheader-extra-headers-prefix=X-Remote-Extra---requestheader-allowed-names=front-proxy-clientМаніфест статичного Podʼа для менеджера контролерів обробляється наступними параметрами, наданими користувачами:
Якщо kubeadm запускається з вказанням --pod-network-cidr, активується функція менеджера підмережі, необхідна для деяких мережевих втулків CNI, встановлюючи:
--allocate-node-cidrs=true--cluster-cidr та --node-cidr-mask-size відповідно до заданого CIDRІнші прапорці, які встановлюються безумовно, включають:
--controllers, що активує всі стандартні контролери плюс контролери BootstrapSigner та TokenCleaner для TLS-запуску. Див. TLS Bootstrapping для деталей.
--use-service-account-credentials до true
Прапорці для використання сертифікатів, згенерованих на попередніх етапах:
--root-ca-file до ca.crt--cluster-signing-cert-file до ca.crt, якщо відключений зовнішній режим CA, в іншому випадку до ""--cluster-signing-key-file до ca.key, якщо відключений зовнішній режим CA, в іншому випадку до ""--service-account-private-key-file до sa.key.Маніфест статичного Podʼа для планувальника обробляється наступними параметрами, наданими користувачами.
Якщо ви вказали зовнішній etcd, цей крок буде пропущено. В іншому випадку kubeadm генерує маніфест статичного Pod для створення локального екземпляра etcd, що працює в Pod з наступними характеристиками:
localhost:2379 і використовувати HostNetwork=truehostPath з dataDir до файлової системи хостуЗверніть увагу, що:
registry.gcr.io. Для налаштування власного репозиторію образів див. використання власних образів.--dry-run, маніфест статичного Pod для etcd записується у тимчасову теку.kubeadm init phase etcd local.На вузлах панелі управління kubeadm чекає до 4 хвилин, поки компоненти панелі управління та kubelet стануть доступними. Для цього виконується перевірка стану відповідних точок доступу компонентів /healthz або /livez.
Після того як панель управління буде запущена, kubeadm завершує виконання завдань, описаних у наступних розділах.
kubeadm зберігає конфігурацію, передану в kubeadm init, у ConfigMap з назвою kubeadm-config в просторі імен kube-system.
Це забезпечить можливість kubeadm у майбутньому (наприклад, під час оновлення kubeadm upgrade) визначати фактичний поточний стан кластера і приймати нові рішення на основі цих даних.
Зверніть увагу, що:
kubeadm init phase upload-config.Як тільки панель управління буде доступна, kubeadm виконує наступні дії:
node-role.kubernetes.io/control-plane=""node-role.kubernetes.io/control-plane:NoScheduleЗверніть увагу, що фазу позначення вузла як вузла панелі управління можна викликати окремо за допомогою команди kubeadm init phase mark-control-plane.
Kubeadm використовує Автентифікацію за допомогою Запускових Токенів для приєднання нових вузлів до існуючого кластера; для отримання більш детальної інформації дивіться також пропозицію дизайну.
kubeadm init забезпечує належну конфігурацію всього процесу, включаючи наступні кроки, а також налаштування прапорців API-сервера та контролера, як вже було описано у попередніх розділах.
kubeadm init phase bootstrap-token, виконуючи всі кроки налаштування, описані в наступних розділаї; альтернативно, кожен крок може бути викликаний окремо.kubeadm init створює перший bootstrap токен, що генерується автоматично або надається користувачем за допомогою прапорця --token. Згідно з документацією щодо специфікації bootstrap токена, токен слід зберегти як секрет з іменем bootstrap-token-<token-id> у просторі імен kube-system.
Зверніть увагу, що:
kubeadm init, використовуватиметься для перевірки тимчасових користувачів під час процесу TLS-запуску; ці користувачі будуть членами групи system:bootstrappers:kubeadm:default-node-token.--token-ttl).kubeadm token, яка також надає інші корисні функції для управління токенами.Kubeadm забезпечує можливість користувачам у групі system:bootstrappers:kubeadm:default-node-token доступ до API підпису сертифікатів.
Це реалізується створенням ClusterRoleBinding з назвою kubeadm:kubelet-bootstrap між вищезазначеною групою та рольовим доступом RBAC стандартно system:node-bootstrapper.
Kubeadm забезпечує автоматичне схвалення запитів на підпис сертифікату Bootstrap Token за допомогою контролера csrapprover.
Це реалізується створенням ClusterRoleBinding з назвою kubeadm:node-autoapprove-bootstrap між групою system:bootstrappers:kubeadm:default-node-token та стандартним рольовим доступом system:certificates.k8s.io:certificatesigningrequests:nodeclient.
Роль system:certificates.k8s.io:certificatesigningrequests:nodeclient також має бути створена, надаючи дозвіл POST на шлях /apis/certificates.k8s.io/certificatesigningrequests/nodeclient.
Kubeadm забезпечує активацію ротації сертифікатів для вузлів і автоматичне схвалення запитів на підпис сертифікатів для вузлів за допомогою контролера csrapprover.
Це реалізується створенням ClusterRoleBinding з назвою kubeadm:node-autoapprove-certificate-rotation між групою system:nodes та стандартним рольовим доступом system:certificates.k8s.io:certificatesigningrequests:selfnodeclient.
У цій фазі створюється ConfigMap cluster-info у просторі імен kube-public.
Додатково створюється Role та RoleBinding, які надають доступ до ConfigMap неавтентифікованим користувачам (тобто користувачам у RBAC групі system:unauthenticated).
cluster-info не обмежується за швидкістю. Це може бути проблемою, якщо ваш API-сервер кластера відкритий для інтернету; у найгіршому випадку може виникнути атака типу DoS, коли атакуючий використовує всі вхідні запити, які може обробити kube-apiserver, щоб обслуговувати ConfigMap cluster-info.Kubeadm встановлює внутрішній DNS-сервер і компоненти надбудов kube-proxy через API-сервер.
kubeadm init phase addon all.Для kube-proxy створюється обліковий запис ServiceAccount у просторі імен kube-system, після чого kube-proxy розгортається як DaemonSet:
ca.crt та token) до панелі управління отримуються з облікового запису ServiceAccount.kube-proxy повʼязується з правами у рольовому доступі ClusterRole system:node-proxier.Сервіс CoreDNS називається kube-dns для сумісності з застарілою надбудовою kube-dns.
У просторі імен kube-system створюється обліковий запис ServiceAccount для CoreDNS.
Обліковий запис coredns привʼязаний до привілеїв у ClusterRole system:coredns.
У версії Kubernetes 1.21 була видалена підтримка використання kube-dns з kubeadm. Ви можете використовувати CoreDNS з kubeadm, навіть якщо повʼязаний сервіс називається kube-dns.
kubeadm joinПодібно до kubeadm init, внутрішній робочий процес kubeadm join також складається з послідовності атомарних завдань, що виконуються.
Вони поділені на дві частини: виявлення (щоб вузол довіряв Kubernetes API Server) та початкове завантаження TLS (щоб Kubernetes API Server довіряв вузлу).
Дивіться Автентифікація за допомогою Bootstrap Tokens або відповідну пропозицію дизайну.
kubeadm виконує набір попередніх перевірок перед початком приєднання, з метою перевірити попередні умови та уникнути поширених проблем запуску кластера.
Зверніть увагу на наступне:
kubeadm join є, по суті, підмножиною попередніх перевірок kubeadm init.--ignore-preflight-errors.Є дві основні схеми для виявлення. Перша полягає у використанні спільного токена разом з IP-адресою сервера API. Друга — наданні файлу (який є підмножиною стандартного файлу kubeconfig).
Якщо kubeadm join викликається з параметром --discovery-token, використовується виявлення за допомогою токена; у цьому випадку вузол основному отримує сертифікати CA кластера з ConfigMap cluster-info у просторі імен kube-public.
Щоб запобігти атакам типу "особа посередині", вживаються кілька заходів:
Спочатку сертифікат CA отримується через небезпечне зʼєднання (це можливо, тому що kubeadm init надає доступ користувачам cluster-info для system:unauthenticated)
Потім сертифікат CA проходить наступні кроки перевірки:
--discovery-token-ca-cert-hash. Це значення доступне у виводі kubeadm init або може бути обчислене за допомогою стандартних інструментів (хеш обчислюється над байтами обʼєкта Subject Public Key Info (SPKI) відповідно до RFC7469). Прапор --discovery-token-ca-cert-hash може бути повторений кілька разів, щоб дозволити більше одного публічного ключа.--discovery-token-unsafe-skip-ca-verification. Це послаблює модель безпеки kubeadm, оскільки інші потенційно можуть видавати себе за сервер API Kubernetes.Якщо kubeadm join викликається з параметром --discovery-file, використовується виявлення за допомогою файлу; цей файл може бути локальним файлом або завантаженим через HTTPS URL; у випадку HTTPS, використовується встановлений на хості пакет сертифікатів CA для перевірки зʼєднання.
При виявленні файлу сертифікат CA кластера надається у самому файлі; фактично, файл для виявлення є файлом kubeconfig з встановленими тільки атрибутами server і certificate-authority-data, як описано у референс-документації kubeadm join; коли зʼєднання з кластером встановлено, kubeadm намагається отримати доступ до ConfigMap cluster-info, і якщо він доступний, використовує його.
Після того, як інформація про кластер відома, записується файл bootstrap-kubelet.conf, що дозволяє kubelet виконати початкове завантаження TLS.
Механізм початкового завантаження TLS використовує спільний токен для тимчасової автентифікації з сервером API Kubernetes для подання запиту на підписання сертифіката (CSR) для локально створеної пари ключів.
Запит автоматично затверджується, і операція завершується збереженням файлів ca.crt і kubelet.conf, які використовуються kubelet для приєднання до кластера, тоді як bootstrap-kubelet.conf видаляється.
kubeadm init (або за допомогою додаткових токенів, створених командою kubeadm token)system:bootstrappers:kubeadm:default-node-token, якій було надано доступ до API CSR під час процесу kubeadm initkubeadm initКоманда kubeadm upgrade має підкоманди для керування оновленням кластера Kubernetes, створеного за допомогою kubeadm. Вам слід виконати kubeadm upgrade apply на одному з вузлів панелі управління (ви можете вибрати, на якому саме); це запустить процес оновлення. Потім виконайте kubeadm upgrade node на всіх інших вузлах (як на робочих вузлах, так і на вузлах панелі управління).
І kubeadm upgrade apply, і kubeadm upgrade node мають підкоманду phase, яка надає доступ до внутрішніх фаз процесу оновлення. Докладніші відомості наведено у статті kubeadm upgrade phase.
Додатковими командами оновлення утиліти є kubeadm upgrade plan та kubeadm upgrade diff.
Усі підкоманди оновлення підтримують передачу конфігураційного файлу.
За бажанням ви можете запустити kubeadm upgrade plan перед запуском kubeadm upgrade apply. Підкоманда plan перевіряє, до яких версій можна оновитися, і перевіряє, чи можна оновити ваш поточний кластер.
Показує, які відмінності буде застосовано до існуючих статичних маніфестів пакунків для вузлів панелі управління. Більш розлогий спосіб зробити те саме — виконати kubeadm upgrade apply --dry-run або kubeadm upgrade node --dry-run.
Команда kubeadm upgrade apply готує кластер до оновлення всіх вузлів, а також оновлює вузол панелі управління, на якому вона виконується. Кроки, які вона виконує:
kubeadm init та kubeadm join, переконуючись, що образи контейнерів завантажено і кластер перебуває у стані, придатному для оновлення./etc/kubernetes/manifests і чекає, поки kubelet перезапустить компоненти, якщо файли було змінено.kubeadm-config і kubelet-config (обидві у просторі імен kube-system)./var/lib/kubelet/config.yaml, а також читає файл /var/lib/kubelet/instance-config.yaml цього вузла і накладає латки на такі поля, як containerRuntimeEndpoint з цієї конфігурації інстансу у /var/lib/kubelet/config.yaml.cluster-info ConfigMap для правил RBAC. Це те ж саме, що і на етапі kubeadm init і гарантує, що кластер продовжує підтримувати приєднання вузлів за допомогою токенів bootstrap.kubeadm upgrade node оновлює один вузол панелі управління або робочий вузол після запуску оновлення кластера (шляхом запуску kubeadm upgrade apply). Команда визначає, чи є вузол вузлом панелі управління, перевіряючи наявність файлу /etc/kubernetes/manifests/kube-apiserver.yaml. Знайшовши цей файл, інструмент kubeadm
припускає, що на цьому вузлі запущено Pod kube-apiserver.
kubeadm upgrade apply./etc/kubernetes/manifests і чекає, поки kubelet перезапустить компоненти, якщо файли було змінено./var/lib/kubelet/config.yaml, а також читає файл /var/lib/kubelet/instance-config.yaml цього вузла і накладає латки на такі поля, як containerRuntimeEndpoint з цієї конфігурації інстансу у /var/lib/kubelet/config.yaml.Ви можете скористатися підкомандою kubeadm reset на вузлі, де раніше виконувалися команди kubeadm. Ця підкоманда виконує очищення вузла з best-effort зусиллями. Якщо певні дії не вдасться виконати, ви маєте втрутитися і виконати очищення вручну.
Команда підтримує фази. Докладні відомості наведено у статті kubeadm reset phase.
Команда підтримує файл конфігурації.
Додатково:
.kube/ у домашній теці користувача не очищується.Команда виконує наступні етапи:
/var/lib/kubelet./var/lib/kubelet та /etc/kubernetes.