文章目录
- k8s节点状态介绍
- 配置宿主机使用k8s内部域名
- 使用KubeKey 升级kubesphere
- 使用KubeKey添加节点
- 使用KubeKey下架节点
- 使用k8s命令添加新节点
- k8s集群备份与恢复
- 环境准备
- 备份与还原
- 在集群A和B中安装Velero
- 集群A备份操作
- 集群B还原备份操作
注意:所有节点运维操作前建议使用 Velero 来备份和迁移 Kubernetes 资源以及持久化存储卷
k8s节点状态介绍
在 Kubernetes 中,节点(Node)是集群中的工作节点,用于运行容器化应用程序。节点状态描述了节点的运行状况和可用性。以下是 Kubernetes 中节点状态的一些常见指标:
- Ready(就绪):表示节点已经准备好接受工作负载。节点必须处于就绪状态才能被调度器选择来运行容器。
- NotReady(未就绪):表示节点当前不可用或无法接受新的工作负载。可能是由于节点上的故障、网络问题或其他原因导致的。
- OutOfDisk(磁盘空间不足):表示节点的磁盘空间不足,无法继续运行容器。
- MemoryPressure(内存压力):表示节点的内存资源不足,无法继续运行容器。
- DiskPressure(磁盘压力):表示节点的磁盘资源不足,无法继续运行容器。
- PIDPressure(进程数压力):表示节点上的进程数已达到限制,无法继续运行容器。
- NetworkUnavailable(网络不可用):表示节点的网络连接不可用,无法与其他节点或服务通信。
- Unschedulable(不可调度):表示节点当前被标记为不可调度,即调度器不会将新的工作负载分配到该节点上。
这些节点状态可以通过运行 kubectl get nodes 命令来查看,其中的 STATUS 列会显示节点的状态信息。
配置宿主机使用k8s内部域名
参考:k8s篇-集群内的DNS原理与配置和K8s hosts 解析 HostAliases
集群node节点上的进程,如果希望能够访问到集群内的服务,可以修改node节点上的/etc/resolv.conf文件中的nameserver配置,将nameserver指定为集群coredns的ClusterIP来达到目的。
- 查找coredns的ClusterIP
- 修改resolv.conf文件:
vi /etc/resolv.conf
# 修改内容如下
nameserver 10.20.0.3
nameserver 114.114.114.114
nameserver 8.8.8.8
resolv.conf 内容顺序影响:
在 CentOS 中,/etc/resolv.conf 文件用于配置系统的 DNS 解析器。该文件中的内容顺序确实会影响 DNS 解析的行为。
/etc/resolv.conf 文件可以包含多个 DNS 服务器的 IP 地址,并且按照顺序进行解析。当系统需要解析主机名时,它会按照文件中列出的 DNS 服务器的顺序进行查询,直到找到可用的 DNS 服务器或解析成功。
- 测试:
ping redis.kubesphere-system.svc.cluster.local
这样配置后jumpserver部署可以考虑使用docker-compse的部署方式,官网安装参考:离线安装 - JumpServer 文档
使用KubeKey 升级kubesphere
注意:升级不能跨版本,如v3.3.x 的集群集群升级到v3.4.x 的集群,需将集群挨版本升级到v3.3.x。
运行以下命令,将您的集群升级至 KubeSphere 3.4 和 Kubernetes v1.22.12:
# 在安装篇已经生成sample.yaml文件
./kk upgrade --with-kubernetes v1.22.12 --with-kubesphere v3.4.1 -f sample.yaml
若是担心新版配置文件和当前版本存在差异,可重新下载KubeKey进行对修改配置
使用KubeKey添加节点
官方文档:添加新节点
修改生成的配置文件config-sample.yaml,添加如下配置
./kk add nodes -f config-sample.yaml
执行上述命令出现:参考安装篇在ksnode27节点上安装前置依赖
重新执行等待安装,出现如下信息则安装成功
验证安装结果
使用KubeKey下架节点
删除节点
# 查看集群节点
kubectl get node -o wide
# <nodeName>为下架节点名称
./kk delete node <nodeName> -f config-sample.yaml
当出现如下信息则下架成功:
验证下架是否成功:
使用k8s命令优雅下架节点
k8s 下线node正确处理姿势
:::info
在 Kubernetes 集群中下架节点需要执行以下步骤:
:::
标记节点不可调度:在下架节点之前,你需要将节点标记为不可调度,以防止 Kubernetes 在该节点上调度新的 Pod。你可以使用以下命令将节点标记为不可调度:
转移 Pod:在将节点下架之前,你需要将节点上的 Pod 转移到其他节点上。你可以使用以下命令将节点上的 Pod 转移到其他节点上:
从集群中删除节点:在将节点下架并转移 Pod 后,你可以将节点从 Kubernetes 集群中删除。你可以使用以下命令将节点从集群中删除:
- 查看集群节点
kubectl get node -o wide
- 节点不可调度
kubectl cordon <node-name>
在上面的命令中, 是要下架的节点的名称。
节点重新调度:
kubectl uncordon <node-name>
- 节点驱逐
kubectl drain <node-name>
在上面的命令中, 是要下架的节点的名称。kubectl drain 命令将停止节点上的所有 Pod,并将它们转移到其他节点上。如果你希望在转移 Pod 之前强制删除它们,可以使用 --force 和 --delete-local-data 标志。
- 节点下架
kubectl delete node <node-name>
在上面的命令中, 是要下架的节点的名称。
完成上述步骤后,节点将被从 Kubernetes 集群中删除,并且该节点上的 Pod 将被转移到其他节点上。请注意,在将节点下架之前,你需要确保节点上的所有应用程序都已停止,并且在下架节点期间不会有任何重要的任务运行。
使用k8s命令添加新节点
要将新节点添加到 Kubernetes 集群中,需要完成以下步骤:
- 安装 Kubernetes 软件和依赖项:在新节点上安装 Docker 和 Kubernetes 软件,以便在该节点上运行容器和管理集群。
- 加入集群:使用 kubeadm join 命令将新节点加入到 Kubernetes 集群中。在加入集群之前,需要获取 kubeadm join 命令的参数,这些参数可以从运行 kubeadm init 命令时生成的输出中获取。在新节点上执行以下命令:
kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash <hash>
在上面的命令中, 是 Kubernetes 控制平面节点的主机名或 IP 地址, 是 Kubernetes 控制平面节点的端口号, 是加入集群所需的令牌, 是用于发现集群的 CA 证书哈希。这些参数可以从运行 kubeadm init 命令时生成的输出中获取。
- 验证节点状态:使用 kubectl get nodes 命令验证新节点已成功添加到 Kubernetes 集群中。在节点成功加入集群后,节点状态应为 Ready。
- 在将新节点添加到 Kubernetes 集群之前,你需要确保新节点具有与其他节点相同的操作系统、软件和配置。否则,在节点加入集群后可能会出现不兼容或不一致的情况,从而导致集群出现问题。
k8s集群备份与恢复
备份源环境的多节点 KubeSphere 集群 A,在目标环境上恢复此多节点 KubeSphere 集群。
注意:建议定期备份,或在节点运维前进行备份
参考:Velero Kubernetes备份恢复之velero实战
环境准备
- 源集群 A (master, node1, node2):已经部署 KubeSphere-v3.0.0
- 目标集群 B (master, node1, node2): 已经部署 Kubernetes-v1.17.9
- 独立的对象存储 Minio (虚机)
- 虚机操作系统:Centos 7
备份与还原
在集群A和B中安装Velero
- 安装Velero
- 进入解压目录,创建Velero和minio的凭证
- 创建备份目标源
集群A备份到minio,集群B从minio恢复
集群A备份操作
- 【集群A master上操作】首先备份存储对象文件,因为还原的时候不会生成存储对象
kubectl get sc local -o yamlopenebs-sc.yaml
- 【集群A master上操作】将存储对象文件拷贝到集群B master上
scp -r openebs-sc.yaml root@192.168.0.8:/root/
- 查看mster端的污点
- 取消master端的污点
- 查看PV挂载情况
- 注释挂载PV【没挂载才能备份】
- 备份名称空间
集群B还原备份操作
- 查看备份资源,确认还原顺序
- 还原kube-system数据
查看pod,还原情况
- 还原不会创建存储对象,需手动创建
查看状态
- 还原污点
- 还原kubesphere-system数据
- 还原kubesphere-controls数据
- 还原kubesphere-monitoring命名空间数据
- 还原test空间数据
- 查看还原状态
- 登录ks验证还原情况