kubeadmで高可用性kubernetesクラスタを作成した後、制御平面を再追加する方法
7647 ワード
シーン
いくつかの理由でk 8 s-001ノードが削除されました.k 8 s-001ノードを制御平面としてクラスタに再追加する必要があります.クラスタに追加中にエラーが発生しました.
クラスタ情報
クラスタバージョン:1.13.1
3つの制御プレーン、2つのworkerノード k8s-001:10.0.3.4 control plane k8s-002:10.0.3.5 control plane k8s-003:10.0.3.6 control plane k8s-004:10.0.3.7 worker k8s-005:10.0.3.8 worker vip::10.0.3.9
解決する
kubeadmがクラスタに参加したときのetcd健康診断に失敗した問題を解決する
一般的に直接クラスタに再加入すると次のような問題が発生します.
これは、制御平面10.0.3.4(k 8 s-001)は削除されているが、configmap:kubeadm-configには削除されていない状態があるためである.
クラスタ情報にはk 8 s−001が依然として存在し,kubeadmを用いてクラスタに再加入するとノード上のetcd健康状態が検出されることがわかる.
したがって、コンフィギュレーションファイルからk 8 s-001を削除する
次のk 8 s-001を削除し、保存します.
失効したetcdクラスタメンバーの削除
kubeadmで構築されたクラスタは、etcd(kubeadm自動構築)を手動で配置しない場合、etcdは各制御平面でインスタンスを起動し、k 8 s-001ノードを削除すると、etcdクラスタはこのノード上のetcdメンバーを自動的に削除しないため、手動で削除する必要がある
まずetcdクラスタメンバー情報を表示
ショートカットを先に設定
etcdクラスタメンバー情報の表示
クラスタは元気そうに見えますが、実際にはk 8 s-001は存在しません.このときクラスタに参加すると、次のエラーが報告されます.
失効メンバーの削除(k 8 s-001)
kubeadmを再使用して制御プレーンに追加
すべて正常
いくつかの注意点
k 8 s-001がkubeadm joinを実行するたびに失敗した後、kubeadm resetを実行してノード状態をリセットする必要があり、状態をリセットした後、再び制御平面としてクラスタに参加するには、他の健康な制御平面ノードの/etc/kubernetes/pkiディレクトリからk 8 s-001に証明書をコピーする必要があります.具体的な証明書は以下の通りです. ca.crt ca.key sa.pub sa.key front-proxy-ca.crt front-proxy-ca.key etcd/ca.crt etcd/ca.key
クラスタに追加された
クラスタに通常ノードとして追加
コントロールプレーンとしてクラスタに追加
なお、
転載先:https://www.cnblogs.com/songguo/p/11155566.html
いくつかの理由でk 8 s-001ノードが削除されました.k 8 s-001ノードを制御平面としてクラスタに再追加する必要があります.クラスタに追加中にエラーが発生しました.
クラスタ情報
クラスタバージョン:1.13.1
3つの制御プレーン、2つのworkerノード
解決する
kubeadmがクラスタに参加したときのetcd健康診断に失敗した問題を解決する
一般的に直接クラスタに再加入すると次のような問題が発生します.
[kubeconfig] Writing "controller-manager.conf" kubeconfig file
[kubeconfig] Writing "scheduler.conf" kubeconfig file
[etcd] Checking Etcd cluster health
error syncing endpoints with etc: dial tcp 10.0.3.4:2379: connect: connection refused
これは、制御平面10.0.3.4(k 8 s-001)は削除されているが、configmap:kubeadm-configには削除されていない状態があるためである.
root@k8s-002:/home# kubectl get configmaps -n kube-system kubeadm-config -oyaml
.
.
.
ClusterStatus: |
apiEndpoints:
k8s-001:
advertiseAddress: 10.0.3.4
bindPort: 6443
k8s-002:
advertiseAddress: 10.0.3.5
bindPort: 6443
k8s-003:
advertiseAddress: 10.0.3.6
bindPort: 6443
apiVersion: kubeadm.k8s.io/v1beta1
kind: ClusterStatus
.
.
.
クラスタ情報にはk 8 s−001が依然として存在し,kubeadmを用いてクラスタに再加入するとノード上のetcd健康状態が検出されることがわかる.
したがって、コンフィギュレーションファイルからk 8 s-001を削除する
root@k8s-002:/home# kubectl edit configmaps -n kube-system kubeadm-config
次のk 8 s-001を削除し、保存します.
k8s-001:
advertiseAddress: 10.0.3.4
bindPort: 6443
失効したetcdクラスタメンバーの削除
kubeadmで構築されたクラスタは、etcd(kubeadm自動構築)を手動で配置しない場合、etcdは各制御平面でインスタンスを起動し、k 8 s-001ノードを削除すると、etcdクラスタはこのノード上のetcdメンバーを自動的に削除しないため、手動で削除する必要がある
まずetcdクラスタメンバー情報を表示
ショートカットを先に設定
root@k8s-002:/home# export ETCDCTL_API=3
root@k8s-002:/home# alias etcdctl='etcdctl --endpoints=https://10.0.3.5:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key'
etcdクラスタメンバー情報の表示
root@k8s-002:/home# etcdctl member list
57b3a6dc282908df, started, k8s-003, https://10.0.3.6:2380, https://10.0.3.6:2379
58bfa292d53697d0, started, k8s-001, https://10.0.3.4:2380, https://10.0.3.4:2379
f38fd5735de92e88, started, k8s-002, https://10.0.3.5:2380, https://10.0.3.5:2379
クラスタは元気そうに見えますが、実際にはk 8 s-001は存在しません.このときクラスタに参加すると、次のエラーが報告されます.
[kubeconfig] Writing "admin.conf" kubeconfig file
[kubeconfig] Writing "controller-manager.conf" kubeconfig file
[kubeconfig] Writing "scheduler.conf" kubeconfig file
[etcd] Checking Etcd cluster health
[kubelet] Downloading configuration for the kubelet from the "kubelet-config-1.13" ConfigMap in the kube-system namespace
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Activating the kubelet service
[tlsbootstrap] Waiting for the kubelet to perform the TLS Bootstrap...
[patchnode] Uploading the CRI Socket information "/var/run/dockershim.sock" to the Node API object "k8s-001" as an annotation
error creating local etcd static pod manifest file: etcdserver: unhealthy cluster
失効メンバーの削除(k 8 s-001)
root@k8s-002:/home# etcdctl member remove 58bfa292d53697d0
Member 58bfa292d53697d0 removed from cluster f06e01da83f7000d
root@k8s-002:/home# etcdctl member list
57b3a6dc282908df, started, k8s-003, https://10.0.3.6:2380, https://10.0.3.6:2379
f38fd5735de92e88, started, k8s-002, https://10.0.3.5:2380, https://10.0.3.5:2379
kubeadmを再使用して制御プレーンに追加
すべて正常
root@k8s-002:/home# kubectl get pod --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-node-4956t 1/1 Running 0 128m
kube-system calico-node-hkcmq 1/1 Running 0 5h58m
kube-system calico-node-lsqsg 1/1 Running 0 5h58m
kube-system calico-node-q2zpt 1/1 Running 0 5h58m
kube-system calico-node-qdg49 1/1 Running 0 5h58m
kube-system coredns-89cc84847-sl2s5 1/1 Running 0 6h3m
kube-system coredns-89cc84847-x57kv 1/1 Running 0 6h3m
kube-system etcd-k8s-001 1/1 Running 0 39m
kube-system etcd-k8s-002 1/1 Running 1 3h8m
kube-system etcd-k8s-003 1/1 Running 0 3h7m
kube-system kube-apiserver-k8s-001 1/1 Running 0 128m
kube-system kube-apiserver-k8s-002 1/1 Running 1 6h1m
kube-system kube-apiserver-k8s-003 1/1 Running 2 6h
kube-system kube-controller-manager-k8s-001 1/1 Running 0 128m
kube-system kube-controller-manager-k8s-002 1/1 Running 1 6h1m
kube-system kube-controller-manager-k8s-003 1/1 Running 0 6h
kube-system kube-proxy-5stnn 1/1 Running 0 5h59m
kube-system kube-proxy-92vtd 1/1 Running 0 6h1m
kube-system kube-proxy-sz998 1/1 Running 0 5h59m
kube-system kube-proxy-wp2jx 1/1 Running 0 6h
kube-system kube-proxy-xl5nn 1/1 Running 0 128m
kube-system kube-scheduler-k8s-001 1/1 Running 0 128m
kube-system kube-scheduler-k8s-002 1/1 Running 0 6h1m
kube-system kube-scheduler-k8s-003 1/1 Running 1 6h
root@k8s-002:/home# etcdctl member list
57b3a6dc282908df, started, k8s-003, https://10.0.3.6:2380, https://10.0.3.6:2379
f38fd5735de92e88, started, k8s-002, https://10.0.3.5:2380, https://10.0.3.5:2379
fc790bd58a364c97, started, k8s-001, https://10.0.3.4:2380, https://10.0.3.4:2379
いくつかの注意点
k 8 s-001がkubeadm joinを実行するたびに失敗した後、kubeadm resetを実行してノード状態をリセットする必要があり、状態をリセットした後、再び制御平面としてクラスタに参加するには、他の健康な制御平面ノードの/etc/kubernetes/pkiディレクトリからk 8 s-001に証明書をコピーする必要があります.具体的な証明書は以下の通りです.
クラスタに追加された
kubeadm join
コマンドの印刷root@master:~# kubeadm token create --print-join-command
kubeadm join your.k8s.domain:6443 --token xxxxxx.xxxxxxxxxxxxxxxx --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
クラスタに通常ノードとして追加
kubeadm join your.k8s.domain:6443 --token xxxxxx.xxxxxxxxxxxxxxxx --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
コントロールプレーンとしてクラスタに追加
kubeadm join your.k8s.domain:6443 --token xxxxxx.xxxxxxxxxxxxxxxx --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --experimental-control-plane
なお、
--experimental-control-plane
パラメータは1.15+バージョンで--control-plane
に置き換える必要があります.転載先:https://www.cnblogs.com/songguo/p/11155566.html