Я бы хотел настроить кластер Kubernetes и скрыть компоненты уровня управления для всех клиентов (некий управляемый кластер). Kubeadm
использует Kubelet и статические модули для запуска этих компонентов, что приводит к регистрации ресурсов Node и Pod на сервере API, поэтому любой пользователь с ClusterRole
может перечислять и управлять основными узлами и модулями.
Я могу загрузить плоскость управления, остановить агент Kubelet и удалить ресурсы главного узла, но похоже, что таким образом я не могу использовать kubeadm
для обновления компонентов и Kubelet для восстановления модулей в случае любого сбоя.
Могу ли я запустить плоскость управления из кластера Kubernetes, используя kubeadm
, или в этом случае мне следует использовать свои собственные инструменты?
Могу ли я запустить плоскость управления из кластера Kubernetes с помощью kubeadm
Краткий ответ: Нет, это невозможно.
Должен ли я использовать свои собственные инструменты в этом случае
Да, это будет решением этой ситуации. Если вы найдете свое собственное решение, не стесняйтесь писать его как ответ.
В качестве обходного пути вы можете попробовать создать отдельную плоскость управления (как в Kubernetes трудным путем), а затемприсоединиться к kubeadm
. Однако вы также должны знать, что этот тип конфигурации будет сложным для выполнения. Посмотрите также на эту страницу блога.
См. также похожие темы:
Вы можете запускать плоскость управления Kubernetes вне Kubernetes, если рабочие узлы имеют сетевой доступ к плоскости управления. Этот подход используется в большинстве управляемых решений Kubernetes.
Посмотрите также эту страницу о Саморегистрации узлов.
РЕДАКТИРОВАТЬ: Я нашел еще один возможный обходной путь.
РЕДАКТИРОВАТЬ2: Этот туториалтоже должен вам помочь.
В конце концов я переписал 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 для поддержки собственного развертывания.