
Gostaria de configurar o cluster Kubernetes e ocultar os componentes do plano de controle para todos os clientes (algum tipo de cluster gerenciado). Kubeadm
usa Kubelet e pods estáticos para executar esses componentes que levam ao registro de recursos de nós e pods no servidor API para que qualquer usuário ClusterRole
possa listar e gerenciar os nós mestres e pods.
Posso inicializar o plano de controle, parar o agente Kubelet e excluir os recursos do nó mestre, mas parece que dessa forma não posso usar kubeadm
para atualizar os componentes e o Kubelet para recuperar pods se ocorrer alguma falha.
Posso executar o plano de controle fora do cluster Kubernetes kubeadm
ou devo usar meus próprios instrumentos nesse caso?
Responder1
Posso executar o plano de controle fora do cluster Kubernetes usando kubeadm
Resposta curta: Não, não é possível.
devo usar meus próprios instrumentos nesse caso
Sim, essa será a solução para esta situação. Se você encontrar sua própria solução, sinta-se à vontade para escrevê-la como resposta.
Como solução alternativa, você pode tentar criar um plano de controle separado (como emKubernetes da maneira mais difícil) e entãokubeadm join
. Porém, você também deve estar ciente de que esse tipo de configuração será complicado de realizar. Veja tambémesta página do blog.
Veja também tópicos semelhantes:
É possível executar o plano de controle do Kubernetes fora do Kubernetes, desde que os nós do trabalhador tenham acesso de rede ao plano de controle. Essa abordagem é usada na maioria das soluções gerenciadas do Kubernetes.
- GKE Onde o nó mestre é executado
- Por que não consigo obter informações do nó mestre em Kubernetes totalmente gerenciados?
Veja também esta página sobreAutorregistro de nós.
EDIT: encontrei outro possívelGambiarra.
EDITAR2: Estetutorialdeve ajudar você também.
Responder2
Eventualmente, reescrevi e kubeadm
adicionei a opção de implantar componentes do plano de controle como serviços unix e executá-los no cluster Kubernetes.
Se você estiver interessado, dê uma olhada emRPe adote-o para suas necessidades. Como usar:
# 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
Se você estiver usando a API Cluster, deverá escrever seu próprio controlador de plano de controle e CRDs para dar suporte à sua própria implantação.