Развернуть плоскость управления без регистрации главного узла с помощью kubeadm

Я бы хотел настроить кластер Kubernetes и скрыть компоненты уровня управления для всех клиентов (некий управляемый кластер). Kubeadmиспользует Kubelet и статические модули для запуска этих компонентов, что приводит к регистрации ресурсов Node и Pod на сервере API, поэтому любой пользователь с ClusterRoleможет перечислять и управлять основными узлами и модулями.

Я могу загрузить плоскость управления, остановить агент Kubelet и удалить ресурсы главного узла, но похоже, что таким образом я не могу использовать kubeadmдля обновления компонентов и Kubelet для восстановления модулей в случае любого сбоя.

Могу ли я запустить плоскость управления из кластера Kubernetes, используя kubeadm, или в этом случае мне следует использовать свои собственные инструменты?

1
задан 23 September 2021 в 13:08
2 ответа

Могу ли я запустить плоскость управления из кластера Kubernetes с помощью kubeadm

Краткий ответ: Нет, это невозможно.

Должен ли я использовать свои собственные инструменты в этом случае

Да, это будет решением этой ситуации. Если вы найдете свое собственное решение, не стесняйтесь писать его как ответ.

В качестве обходного пути вы можете попробовать создать отдельную плоскость управления (как в Kubernetes трудным путем), а затемприсоединиться к kubeadm. Однако вы также должны знать, что этот тип конфигурации будет сложным для выполнения. Посмотрите также на эту страницу блога.

См. также похожие темы:

Вы можете запускать плоскость управления Kubernetes вне Kubernetes, если рабочие узлы имеют сетевой доступ к плоскости управления. Этот подход используется в большинстве управляемых решений Kubernetes.

Посмотрите также эту страницу о Саморегистрации узлов.

РЕДАКТИРОВАТЬ: Я нашел еще один возможный обходной путь.

РЕДАКТИРОВАТЬ2: Этот туториалтоже должен вам помочь.

1
ответ дан 28 September 2021 в 11:43

В конце концов я переписал kubeadmдобавленную возможность развертывания компонентов уровня управления в качестве служб Unix и запуска их из кластера Kubernetes.

Если вам интересно, ознакомьтесь с PR и адаптируйте его под свои требования. Как использовать:

# build the updated kubeadm
make WHAT=cmd/kubeadm KUBE_BUILD_PLATFORMS=linux/amd64

# install the control plane components
wget -q --show-progress --https-only --timestamping \
  "https://storage.googleapis.com/kubernetes-release/release/v1.21.0/bin/linux/amd64/kube-apiserver" \
  "https://storage.googleapis.com/kubernetes-release/release/v1.21.0/bin/linux/amd64/kube-controller-manager" \
  "https://storage.googleapis.com/kubernetes-release/release/v1.21.0/bin/linux/amd64/kube-scheduler" \
  "https://storage.googleapis.com/kubernetes-release/release/v1.21.0/bin/linux/amd64/kubectl"

chmod +x kube-apiserver kube-controller-manager kube-scheduler kubectl
sudo mv kube-apiserver kube-controller-manager kube-scheduler kubectl /usr/local/bin/

wget -q --show-progress --https-only --timestamping \
  "https://github.com/etcd-io/etcd/releases/download/v3.4.15/etcd-v3.4.15-linux-amd64.tar.gz"

tar -xvf etcd-v3.4.15-linux-amd64.tar.gz
sudo mv etcd-v3.4.15-linux-amd64/etcd* /usr/local/bin/

# run kubeadm with enabled service hosting option
kubeadm init --service-hosting

Если вы используете Cluster API, вы должны написать свой собственный контроллер уровня управления и CRD для поддержки собственного развертывания.

0
ответ дан 4 October 2021 в 09:12

Теги

Похожие вопросы