Tengo un servidor básico que alberga un nodo maestro de Kubernetes. Necesitaría mover el nodo maestro a un servidor básico nuevo. ¿Cómo podemos moverlo o migrarlo?
he hecho miinvestigaciónpero la mayoría de ellos están relacionados con el clúster de GCP donde movemos 4 directorios del nodo antiguo al nuevo, y también cambiamos la IP y esa pregunta se hizo hace 5 años y ahora está desactualizada.
/var/etcd
/srv/kubernetes
/srv/sshproxy
/srv/salt-overlay
¿Cuál es la forma correcta de moverlo, asumiendo que estamos usando la versión más reciente de k8s, 1.17?
Respuesta1
Siguienteproblema de githubmencionado en los comentarios yCambios de dirección IP en Kubernetes Master Node:
1. Verifique su etcd data directory
búsqueda en etcd pod in kube-system namespace
:
(valores predeterminados usando k8s v1.17.0 creado con kubeadm),
volumeMounts:
- mountPath: /var/lib/etcd
name: etcd-data
2. Preparación:
- Copiado
/etc/kubernetes/pki
deMaestro1hacianuevo maestro2:
#create backup directory in Master2,
mkdir ~/backup
#copy from Master1 all key,crt files into the Master2
sudo scp -r /etc/kubernetes/pki [email protected]:~/backup
- EnMaestro2eliminar certificados con claves que tengan la dirección IP anterior paracertificado apiserver y etcd:
./etcd/peer.crt
./apiserver.crt
rm ~/backup/pki/{apiserver.*,etcd/peer.*}
- mover
pki directory to /etc/kubernetes
cp -r ~/backup/pki /etc/kubernetes/
3. EnMaestro1crearinstantánea etcd:
Verifique su API version
:
kubectl exec -it etcd-Master1 -n kube-system -- etcdctl version
etcdctl version: 3.4.3
API version: 3.4
- usando corrientevaina etcd:
kubectl exec -it etcd-master1 -n kube-system -- etcdctl --endpoints https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key snapshot save /var/lib/etcd/snapshot1.db
- usando o usandobinarios etcdctl:
ETCDCTL_API=3 etcdctl --endpoints https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key snapshot save /var/lib/etcd/snapshot1.db
4. Copiar la instantánea creada desdeMaestro1aMaestro2directorio de respaldo:
scp ./snapshot1.db [email protected]:~/backup
5. PrepararConfiguración de Kubeadm para reflejarMaestro1configuración:
apiVersion: kubeadm.k8s.io/v1beta2
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: x.x.x.x
bindPort: 6443
nodeRegistration:
name: master2
taints: [] # Removing all taints from Master2 node.
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
type: CoreDNS
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: k8s.gcr.io
kind: ClusterConfiguration
kubernetesVersion: v1.17.0
networking:
dnsDomain: cluster.local
podSubnet: 10.0.0.0/16
serviceSubnet: 10.96.0.0/12
scheduler: {}
6.Restaurar instantánea:
- usando
etcd:3.4.3-0
la imagen de la ventana acoplable:
docker run --rm \
-v $(pwd):/backup \
-v /var/lib/etcd:/var/lib/etcd \
--env ETCDCTL_API=3 \
k8s.gcr.io/etcd:3.4.3-0 \
/bin/sh -c "etcdctl snapshot restore './snapshot1.db' ; mv /default.etcd/member/ /var/lib/etcd/"
- o usando
etcdctl
binarios:
ETCDCTL_API=3 etcdctl --endpoints https://127.0.0.1:2379 snapshot restore './snapshot1.db' ; mv ./default.etcd/member/ /var/lib/etcd/
7.InicializarMaestro2:
sudo kubeadm init --ignore-preflight-errors=DirAvailable--var-lib-etcd --config kubeadm-config.yaml
# kubeadm-config.yaml prepared in 5 step.
- aviso:
[WARNING DirAvailable--var-lib-etcd]: /var/lib/etcd is not empty
[certs] Generating "apiserver" certificate and key
[certs] apiserver serving cert is signed for DNS names [master2 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 master2_IP]
[certs] Generating "etcd/server" certificate and key
[certs] etcd/server serving cert is signed for DNS names [master2 localhost] and IPs [master2_ip 127.0.0.1 ::1]
[certs] Generating "etcd/peer" certificate and key
[certs] etcd/peer serving cert is signed for DNS names [master2 localhost] and IPs [master2_ip 127.0.0.1 ::1]
.
.
.
Your Kubernetes control-plane has initialized successfully!
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
- Después de la verificación del objeto k8s (ejemplo breve):
kubectl get nodes
kubectl get pods -o wide
kubectl get pods -n kube-system -o wide
systemctl status kubelet
- Si todos los objetos k8s implementados, como pods, implementaciones, etc., se movieran a su nuevoMaestro2nodo:
kubectl drain Master1
kubectl delete node Master1
Nota:
Además por favor considereCrear clústeres de alta disponibilidaden esta configuración debería tener la posibilidad de tener más de 1 maestro; en esta configuración puede crear/eliminar nodos del plano de control adicionales de una manera más segura.