Назад | Перейти на главную страницу

Миграция мастер-ноды Kubernetes с 1 сервера на другой сервер

У меня есть голый металлический сервер, на котором находится главный узел Kubernetes. Мне нужно было бы переместить главный узел на новый голый металлический сервер. Как мы можем его переместить или перенести?

Я сделал свой исследовательская работа но большинство из них связано с кластером GCP, где мы перемещаем 4 каталога со старого узла на новый, а также меняем IP-адрес, и этот вопрос был задан 5 лет назад, а сейчас он устарел.

/var/etcd
/srv/kubernetes
/srv/sshproxy
/srv/salt-overlay

Как правильно переместить его, предполагая, что мы используем самую последнюю версию k8s 1.17

Следующий проблема с github упомянутые в комментариях и Изменение IP-адреса в Kubernetes Master Node:

1. Подтвердите свой etcd data directory глядя в etcd pod in kube-system namespace:

(значения по умолчанию с использованием k8s v1.17.0, созданного с помощью kubeadm),

    volumeMounts:
    - mountPath: /var/lib/etcd
      name: etcd-data

2. Подготовка:

  • копировать /etc/kubernetes/pki из Мастер1 к новый Мастер2:
    #create backup directory in Master2,
    mkdir ~/backup

    #copy from Master1 all key,crt files into the Master2 
    sudo scp -r /etc/kubernetes/pki  master2@x.x.x.x:~/backup

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

    rm ~/backup/pki/{apiserver.*,etcd/peer.*}
  • шаг pki directory to /etc/kubernetes
 cp -r ~/backup/pki  /etc/kubernetes/

3. На Мастер1 Создайте снимок etcd:

Подтвердите свой API version:

kubectl exec -it etcd-Master1 -n kube-system -- etcdctl  version

etcdctl version: 3.4.3
API version: 3.4
  • используя текущий etcd pod:
    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. Скопировать созданный снимок из Мастер1 к Мастер2 каталог резервного копирования:

scp ./snapshot1.db  master2@x.x.x.x:~/backup

5. Подготовить Конфиг Kubeadm для отражения Мастер1 конфигурация:

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. Восстановить снимок:

  • с помощью etcd:3.4.3-0 образ докера:
    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/"
  • или используя etcdctl двоичные файлы:
    ETCDCTL_API=3 etcdctl --endpoints https://127.0.0.1:2379 snapshot restore  './snapshot1.db' ; mv ./default.etcd/member/ /var/lib/etcd/

7. Инициализировать Мастер2:

    sudo kubeadm init --ignore-preflight-errors=DirAvailable--var-lib-etcd --config kubeadm-config.yaml
    # kubeadm-config.yaml prepared in 5 step.
  • уведомление:

[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
  • После проверки объекта k8s (короткий пример):
    kubectl get nodes
    kuebctl get pods - owide
    kuebctl get pods -n kube-system -o wide
    systemctl status kubelet 
  • Если все развернутые объекты k8s, такие как модули, развертывания и т. Д., Были перемещены в ваш новый Мастер2 узел:
    kubectl drain Master1
    kubectl delete node Master1

Примечание:

Кроме того, пожалуйста, обратите внимание Создание высокодоступных кластеров в этой настройке у вас должна быть возможность иметь более одного мастера, в этой конфигурации вы можете более безопасно создавать / удалять дополнительные узлы плоскости управления.