Migración del nodo maestro de kubernetes de 1 servidor a otro servidor

Migración del nodo maestro de kubernetes de 1 servidor a otro servidor

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 directorybú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/pkideMaestro1hacianuevo 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

    ./etcd/peer.crt
    ./apiserver.crt

    rm ~/backup/pki/{apiserver.*,etcd/peer.*}
  • moverpki 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
    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-0la 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 etcdctlbinarios:
    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.

información relacionada