Redian新闻
>
Kubernetes 集群的关闭与重启

Kubernetes 集群的关闭与重启

公众号新闻

前言

在日常对 Kubernetes 集群运行维护的过程中,您可能需要临时的关闭或者是重启 Kubernetes 集群对集群进行维护,本文将介绍如何去安全的关闭 K8s 集群以及如何重新启动集群。

日常节点运维方式

关闭 K8s 集群是个危险的操作!在关闭集群之前,您必须完全了解这个操作所带来的后果。首先,我们要对集群内的应用、客户定义资源 CRD 和 Etcd 进行备份,然后再进行重启或关闭集群的操作。在通常运维的情况下,建议您驱逐维护节点,而非重启整个集群。在这里,我们也把驱逐维护节点命令放在下面供您参考。

首先,确定想要移出的节点的名称。可以用以下命令列出集群中的所有节点:

$ kubectl get nodes

接下来,告诉 Kubernetes 需要移出的节点:

$ kubectl drain <node name>

一旦它返回(没有报错), 你就可以下线此节点(或者等价地在云平台上,删除支持该节点的虚拟机)。如果要在维护操作期间将节点留在集群中,则需要运行:

kubectl uncordon <node name>

然后告诉 Kubernetes,它可以继续在此节点上调度新的 Pods。

在进行集群关闭前的准备工作

备份是最最重要的准备工作,保障应用可以重新正常服务为目的各种操作都是必须的。做一个你自己的计划清单,在重要的步骤之前确认好。

  • 主机之间已经设置 SSH 免密登录
  • 集群内应用的备份
  • 集群内客户自定义资源的备份
  • 集群内 Etcd 的备份

关闭 Kubernetes 集群

再次提示在关闭集群前,请您务按照我们推荐的方法备份集群的数据与应用,以便在重新启动集群时如果遇到任何问题,可以通过备份还原集群与应用。使用本教程中的方法可以平稳关闭集群,但数据损坏的可能性仍然存在。

首先,我们要获取节点列表

k8snodes=$(kubectl get nodes -o name)

然后,我们就要关闭节点了,您可以可一台一台的关闭。或运行以下脚本关闭节点:

for node in ${k8snodes[@]}
do
    echo "==== Shut down $node ===="
    ssh $node sudo shutdown -h 1
done

注意: 前提条件是主机之间已经设置 SSH 免密登录。

此时,您就可以关闭其他的集群依赖项,对集群进行维护操作啦。

Kubernetes 集群重启

在重启后,我们需要仔细检查所有节点和核心组件的状态,并确保一切就绪。

$ kubectl get nodes -o wide
NAME        STATUS   ROLES                  AGE   VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
mars-k8s1   Ready    control-plane,master   17d   v1.21.0   172.16.60.60   <none>        Ubuntu 20.04.1 LTS   5.11.0-40-generic   docker://20.10.10
mars-k8s2   Ready    <none>                 17d   v1.21.0   172.16.60.61   <none>        Ubuntu 20.04.1 LTS   5.11.0-40-generic   docker://20.10.10
mars-k8s3   Ready    <none>                 17d   v1.21.0   172.16.60.62   <none>        Ubuntu 20.04.1 LTS   5.11.0-40-generic   docker://20.10.10

$ kubectl get svc -n kube-system
NAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
kube-dns         ClusterIP   10.96.0.10       <none>        53/UDP,53/TCP,9153/TCP   17d
metrics-server   ClusterIP   10.111.227.248   <none>        443/TCP                  17d

$ kubectl get pod -n kube-system
NAME                                READY   STATUS    RESTARTS   AGE
coredns-558bd4d5db-h7jqc            1/1     Running   2          17d
coredns-558bd4d5db-wj4bn            1/1     Running   2          17d
etcd-mars-k8s1                      1/1     Running   2          17d
kube-apiserver-mars-k8s1            1/1     Running   3          17d
kube-controller-manager-mars-k8s1   1/1     Running   2          17d
kube-flannel-ds-677dg               1/1     Running   2          17d
kube-flannel-ds-bxhx6               1/1     Running   3          17d
kube-flannel-ds-r5pqf               1/1     Running   2          17d
kube-proxy-6w52h                    1/1     Running   2          17d
kube-proxy-p8zfp                    1/1     Running   2          17d
kube-proxy-v8t7j                    1/1     Running   2          17d
kube-scheduler-mars-k8s1            1/1     Running   2          17d
metrics-server-5f9459b95c-dtzbf     1/1     Running   2          17d

Kubernetes 集群重启维护避坑指南

说点儿心里话,运维有时要看运气,这不是开玩笑,在我的职业生涯中看到了也学到了很多,在过去我有幸支持了多个国家的数据灾备业务。包括:韩国,日本,中港台,及东南亚各个 Region 的客户公司,在运维做 IT 架构变更的时候,买烧猪祭奠关二爷有时真的需要,我们不了解的事情还有很多,要保持敬畏。所以备份吧,多备份几次!!!

在我们这个时代人定胜天的神迹比比皆是。但是所谓割接,割下来,接不上的情况也屡见不鲜。通常情况下,重新启动 Kubernetes 集群后就可以继续正常使用,但是由于意外情况,该集群可能不可用。例如:

  • 关闭集群过程中 Etcd 数据损坏或是节点故障,这在 Bare Metal K8s Node 上很常见。
  • 网络错误,这就需要检查所有集群依赖项的状态,一定用好监控工具,一步一步的查,别怕麻烦,要确保所有集群依赖项均已就绪。
  • 应用的问题,节点是启动了,K8s 也好好的,应用不能对外提供服务,这时一系列的排错是最考验人的,所以备份恢复吧。这样可以确保 RTO。

参考链接

  1. Kasten 实战系列备份K8S云原生应用
  2. Kasten k10 提高系列 02 - 用 Kasten 备份 kubernates etcd 数据库

链接:https://www.data2clouds.com/?p=210

(版权归原作者所有,侵删)

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
7 款 DevOps 工具管理 Kubernetes2023招聘季 | Uber (US) Data岗 Summer Internship已开放!后Kubernetes时代的未来?Wasmer 3.0 发布,可在浏览器外运行 WebAssemblyKubernetes 1.24发布,支持网络策略状态、上下文日志记录和子资源餐厅的女当家人赶紧的,赶紧把你的肚子收一收!Kubernetes 即将支持机密计算 | Linux 中国内资八大|BDO International Tax Intern招聘已开启!熟练使用办公软件者优先考虑Kubernetes 1.26 版本正式发布:改进 Windows 支持,加强网络安全和管理功能如何用 Kubeadm 在 Debian 11 上安装 Kubernetes 集群 | Linux 中国Google Intern Return正式重启!Kubernetes入门之Pod健康状态监测机制面向 OLTP 场景,火山引擎跑在 Kubernetes 上的数据库有何不同?| Q推荐Kubernetes 缺少的多租户功能,你可以通过这些方式实现After a Blistering Summer, China Braces for a Frigid Winter他只是一名眼科医生——绝不是什么英雄!管理Kubernetes资源要注意的5件事!Kubernetes 能否帮助解决自动化挑战? | Linux 中国16 张图硬核讲解 Kubernetes 网络从单一容器平台到数字化赋能平台,KubeSphere企业版3.3这一跃真“高”Kubernetes上千规模Pod最佳实践字节跳动开源 kube-apiserver 高可用方案 KubeGateway没有银弹,只有取舍 - Serverless Kubernetes 的思考与征程(一)The Answer to China’s Energy Woes? Harnessing Virtual Power.Chinese Drugmaker Launches Epilepsy Medicine After Approval优化 Kubernetes 中的 Java 无服务器函数 | Linux 中国A Japanese Man’s 30-Year Quest to Green a Chinese Desert【中秋味道】暖场 《月圆花好》The Chinese Online Slang That Took Over the Internet in 2022Kubernetes是如何实现数据持久化存储的?使用 PowerFlex 在 Kubernetes 平台上部署 Microsoft SQL Server 大数据集群Chinese Sailor Returns Home After Circumnavigating the Arctic第一财经推出跨年特别策划《2022-2023:挥别与重启》停了电就像要没了命‘End of an Era’ as Lonely Planet Folds Its Chinese Magazine
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。