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.
Команда kubeadm init складається з послідовності атомарних завдань для виконання, як описано в розділі про внутрішній робочий процес kubeadm init.
Команда kubeadm init phase дозволяє користувачам викликати кожне завдання окремо, і в кінцевому підсумку пропонує багаторазовий і компонований API/інструментарій, який може бути використаний іншими інструментами початкового завантаження Kubernetes, будь-яким інструментом автоматизації ІТ або досвідченим користувачем для створення власних кластерів.
Kubeadm виконує набір попередніх перевірок перед початком ініціалізації з метою перевірки передумов і уникнення типових проблем під час запуску кластера. Користувач може пропустити певні попередні перевірки або всі за допомогою прапорця --ignore-preflight-errors.
--kubernetes-version), є хоча б на одну мінорну версію вищою за версію kubeadm CLI./etc/kubernetes/manifest вже існує і не є порожньою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.
Приватний ключ для підпису токенів 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 у controller-manager не буде запущений--dry-run, файли сертифікатів записуються в тимчасову текуkubeadm init phase certs allKubeadm генерує kubeconfig файли з ідентичностями для компонентів панелі управління:
Файл kubeconfig для kubelet, який використовується під час TLS bootstrap — /etc/kubernetes/bootstrap-kubelet.conf. У цьому файлі є bootstrap-токен або вбудовані клієнтські сертифікати для автентифікації цього вузла у кластері.
Цей клієнтський сертифікат повинен:
system:nodes, як вимагається модулем Node Authorizationsystem:node:<hostname-lowercased>Файл kubeconfig для controller-manager, /etc/kubernetes/controller-manager.conf; у цьому файлі вбудований клієнтський сертифікат з ідентичністю controller-manager. Цей клієнтський сертифікат повинен мати 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 для користувачів для додаткової інформації про 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:{component-name}
Всі статичні Podʼи використовують клас пріоритету system-node-critical
На всіх статичних Podʼах встановлено hostNetwork: true, щоб дозволити запуск панелі управління до налаштування мережі; в результаті:
address, яку використовують controller-manager і планувальник для звернення до API-сервера, — 127.0.0.1etcd-server буде встановлена як 127.0.0.1:2379Увімкнено обрання лідера як для controller-manager, так і для планувальника
Controller-manager та планувальник будуть посилатися на файли 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 приєднує мітки регіону або зони до PersistentVolume, як визначено провайдером хмарних послуг (Цей контролер допуску є застарілим і буде вилучений у майбутній версії. Він типово не розгорнутий kubeadm починаючи з v1.9, якщо явно не вибрано використання gce або aws як провайдерів хмарних послуг)DefaultStorageClass для встановлення типового класу зберігання на обʼєктах PersistentVolumeClaimDefaultTolerationSecondsNodeRestriction для обмеження того, що kubelet може змінювати (наприклад, тільки Podʼи на цьому вузлі)--kubelet-preferred-address-types до InternalIP,ExternalIP,Hostname; завдяки цьому kubectl logs та інший звʼязок між API-сервером і 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 bootstrap. Див. TLS Bootstrapping для деталей.
--use-service-account-credentials до true
Прапорці для використання сертифікатів, згенерованих на попередніх етапах:
--root-ca-file до ca.crt--cluster-signing-cert-file до ca.crt, якщо режим External CA вимкнено, в іншому випадку до ""--cluster-signing-key-file до ca.key, якщо режим External 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 використовує автентифікацію за допомогою bootstrap-токенів для приєднання нових вузлів до наявного кластера; для отримання більш детальної інформації дивіться також пропозицію дизайну.
kubeadm init забезпечує належне налаштування всього необхідного для цього процесу; це включає описані нижче кроки, а також налаштування прапорців API-сервера та контролера, як уже описано в попередніх розділах.
kubeadm init phase bootstrap-token, виконуючи всі кроки налаштування, описані в наступних розділах; альтернативно, кожен крок може бути викликаний окремо.kubeadm init створює перший bootstrap-токен, що генерується автоматично або надається користувачем за допомогою прапорця --token. Згідно з документацією щодо специфікації bootstrap-токена, токен слід зберегти як Secret з іменем bootstrap-token-<token-id> у просторі імен kube-system.
Зверніть увагу, що:
kubeadm init, використовуватиметься для перевірки тимчасових користувачів під час процесу TLS bootstrap; ці користувачі будуть членами групи 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 забезпечує автоматичне схвалення CSR-запитів від 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.
Kubeadm забезпечує доступ API-сервера до API kubelet за допомогою клієнтського сертифіката apiserver-kubelet-client.crt.
Це реалізується створенням ClusterRoleBinding з назвою kubeadm:apiserver-kubelet-client між користувачем kube-apiserver-kubelet-client та типовою роллю RBAC system:kubelet-api-admin.
У цій фазі створюється 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.Service CoreDNS називається kube-dns для сумісності з застарілою надбудовою kube-dns.
У просторі імен kube-system створюється ServiceAccount для CoreDNS.
ServiceAccount coredns привʼязаний до прав ClusterRole system:coredns.
Подібно до kubeadm init, внутрішній робочий процес kubeadm join також складається з послідовності атомарних завдань, що виконуються.
Вони поділені на дві частини: виявлення (щоб вузол довіряв Kubernetes API Server) та TLS bootstrap (щоб Kubernetes API Server довіряв вузлу).
Дивіться Автентифікація за допомогою bootstrap-токенів або відповідну пропозицію дизайну.
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 bootstrapping.
Механізм TLS bootstrap використовує спільний токен для тимчасової автентифікації на 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 перевіряє, до яких версій можна оновитися, і перевіряє, чи можна оновити ваш поточний кластер.
Показує, які відмінності буде застосовано до наявних маніфестів статичних Podʼів для вузлів панелі управління. Більш розлогий спосіб зробити те саме — виконати 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 для правил 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.