集群备份、升级、扩容
哪些内容需要备份
1.集群中各种资源和应用程序,例如:pod service deployment等等
2.集群本身、集群内其他资源的信息
如何备份
1.如果是以声明式的方式创建资源,可以将其保存到代码库(如github)。如果是以命令式的方式创建的资源,使用下面的命令,将群集上创建的所有对象的所有资源配置保存为副本。 kubectl get all --all-namespace -o yaml > all-deploy-services.yaml。或者使用备份工具来备份,velero
2.使用etcdctl对etcd进行备份
备份tecd
ETCDCTL_API=3 etcdctl snapshot save snapshot.db
ETCDCTL_API=3 etcdctl snapshot status snapshot.db
systemctl stop kube-apiserver # 恢复数据需要重启etcd,apiserver依赖于etcd,所以提前关闭
# 它初始化一个新的集群配置, 并将XKCD的成员配置为新的成员, 以结束新的集群。
这是为了防止新成员意外加入现有群集。
ETCDCTL_API=3 etcdctl snapshot restore --data-dir /var/lib/etcd-from-backup
在etcd.service中指定新路径 --data-dir /var/lib/etcd-from-backup
systemctl daemon-reload
systemctl restart etcd
systemctl start kube-apiservere
2379端口用于与客户端通信,2380端口用于etcd集群各节点通信
./bin/etcd --name node1 \
--initial-advertise-peer-urls http://172.16.28.1:2380 \ # 该节点对集群其他成员暴露的集群通信地址
--listen-peer-urls http://172.16.28.1:2380 \ # 该节点与其他集群成员的通信地址
--listen-client-urls http://172.16.28.1:2379 \ # 该节点与客户端通信的地址
--advertise-client-urls http://172.16.28.1:2379 \ # 该节点对集群中的其他成员暴露的客户端通信地址
--initial-cluster node1=http://172.16.28.1:2380,node2=http://172.16.28.2:2380,node3=http://172.16.28.3:2380 \ # 指定集群成员
etcd官方中文文档
https://www.bookstack.cn/read/etcd/documentation-op-guide-configuration.md#%E2%80%94listen-peer-urls
官方配置
# node 1
sudo rkt run --net=default:IP=${NODE1} quay.io/coreos/etcd:v3.2 -- -name=node1 -advertise-client-urls=http://${NODE1}:2379 -initial-advertise-peer-urls=http://${NODE1}:2380 -listen-client-urls=http://0.0.0.0:2379 -listen-peer-urls=http://${NODE1}:2380 -initial-cluster=node1=http://${NODE1}:2380,node2=http://${NODE2}:2380,node3=http://${NODE3}:2380
# node 2
sudo rkt run --net=default:IP=${NODE2} quay.io/coreos/etcd:v3.2 -- -name=node2 -advertise-client-urls=http://${NODE2}:2379 -initial-advertise-peer-urls=http://${NODE2}:2380 -listen-client-urls=http://0.0.0.0:2379 -listen-peer-urls=http://${NODE2}:2380 -initial-cluster=node1=http://${NODE1}:2380,node2=http://${NODE2}:2380,node3=http://${NODE3}:2380
# node 3
sudo rkt run --net=default:IP=${NODE3} quay.io/coreos/etcd:v3.2 -- -name=node3 -advertise-client-urls=http://${NODE3}:2379 -initial-advertise-peer-urls=http://${NODE3}:2380 -listen-client-urls=http://0.0.0.0:2379 -listen-peer-urls=http://${NODE3}:2380 -initial-cluster=node1=http://${NODE1}:2380,node2=http://${NODE2}:2380,node3=http://${NODE3}:2380
集群升级
版本命名规则
kube-apiserver controller-manager kube-scheduler kubelet kube-proxy kubectl 版本统一
etcd coredns 有自己的版本
1.先升级master节点,如果有多个master节点,需要一台一台升级
2.master节点升级完毕后,再升级node节点,建议一台一台升级
3.使用kubeadm升级集群,需要先升级kubeadm本身,然后再升级集群,kubeadm的版本与组件版本一致
4.驱逐pod的命令在master节点上执行
升级master节点
yum list --showduplicates kubeadm --disableexcludes=kubernetes # 查看可用的kubeadm版本,禁用非kubernetes库的版本
yum install -y kubeadm-1.26.x-0 --disableexcludes=kubernetes
kubeadm version
kubeadm upgrade plan
kubeadm upgrade apply v1.26.x
kubeadm upgrade node # 有多个mstar节点时,执行这条
kubectl drain <node-to-drain> --ignore-daemonsets # 将master节点标记为不可调度并驱逐pod
yum install -y kubelet-1.26.x-0 kubectl-1.26.x-0 --disableexcludes=kubernetes
sudo systemctl daemon-reload
sudo systemctl restart kubelet
kubectl uncordon <node-to-uncordon>
升级worker节点
kubectl drain <node-to-drain> --ignore-daemonsets
yum install -y kubeadm-1.26.x-0 --disableexcludes=kubernetes
kubeadm upgrade node
yum install -y kubelet-1.26.x-0 kubectl-1.26.x-0 --disableexcludes=kubernetes
sudo systemctl daemon-reload
sudo systemctl restart kubelet
kubectl uncordon <node-to-uncordon>
扩容node节点
使用cordon、uncordon子命令
//隔离某个Node
kubectl cordon <node_name>
//对某个Node恢复调度
kubectl uncordon <node_name>
使用patch子命令
//将spec.unschedulable设置为true,表示隔离该Node
kubectl patch node k8s-node1 -p '{"spec":{"unschedulable":true}}'
//将spec.unschedulable设置为false,表示恢复该Node
kubectl patch node k8s-node1 -p '{"spec":{"unschedulable":false}}'
扩容
* 将一个新Node的加入到Kubernetes集群中非常简单。
* (1)在新的Node上安装Docker、kubelet和kube-proxy服务,然后配置kubelet和kubeproxy的启动参数,将Master URL指定为当前Kubernetes集群Master的地址,最后启动这些服务。
* (2)通过kubelet默认的自动注册机制,新的Node将会自动加入现有的Kubernetes集群中。
* Kubernetes Master在接受了新Node的注册之后,会自动将其纳入当前集群的调度范围,之后创建容器时,就可以对新的Node进行调度了。
* 重新生成用于加入到集群的token(要添加master,可以在token后加--control-plane参数)
kubeadm token create --print-join-command
kubeadm join 10.1.1.11:6443 --token swosas.n9p71fcgsx7vcll0 --discovery-token-ca-cert-hash sha256:c8f0875af59e971434e352867943ed9f3d8453a4de086cecb8b031fa43d5bd7c
标签:扩容,http,etcd,--,备份,2380,集群,urls
From: https://www.cnblogs.com/lixunblogs/p/18167070