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