Kubernetes 最佳实践:零宕机升级集群

文 / 开发技术推广工程师 Sandeep Dinesh

众所周知,为优化安全性和性能,最好让应用时刻保持最新状态。Kubernetes 和 Docker 可以简化上述更新操作,因为您可以用更新构建一个新容器,部署操作相对而言更加轻松。

与应用类似,Kubernetes 不断获取新功能和安全更新,因此,底层节点和 Kubernetes 基础架构也需要保持最新状态。

在本集的 “Kubernetes 最佳实践” 中,我们来看看 Google Kubernetes Engine 如何使升级 Kubernetes 集群变得轻松!

集群的两个部分

在升级集群时,两个部分都需要更新:主节点和工作节点。必须先更新主节点,然后才能更新工作节点。下面我们来看看如何使用 Kubernetes Engine 升级这两种节点。

零宕机升级主节点

Kubernetes Engine 会在发布单点版本时自动升级主节点,但通常不会自动升级到新版本(例如,1.7 到 1.8)。当您准备好升级到新版本时,只需点击 Kubernetes Engine 控制台中的升级主节点按钮即可。

但是,您可能会发现对话框中提示以下信息:

“Changing the master version can result in several minutes of control plane downtime.During that period you will be unable to edit this cluster.”

在主节点停机进行升级期间,部署和服务等继续照常工作。但是,任何需要 Kubernetes API 的程序都会停止工作。这意味着 kubectl 将停止工作,使用 Kubernetes API 获取集群信息的应用也将停止工作,并且在升级集群期间基本上不能对集群进行任何更改。

那么,如何在不引起停机的情况下更新主节点呢?

Kubernetes Engine 区域性集群的高度可用主节点

标准的 “分区性” Kubernetes Engine 集群只有一个主节点来支持集群,但您可以创建 “区域性” 集群,提供多分区、高度可用的主节点。

创建集群时,务必选择 “区域性” 选项:

就这么简单。Kubernetes Engine 自动在三个分区内创建工作节点和主节点,主节点使用已进行负载平衡的 IP 地址,因此,升级期间 Kubernetes API 将继续工作。

零宕机升级工作节点

升级工作节点时,可采用几种不同的策略。下面将重点介绍其中两个:

1、滚动更新

2、使用工作节点池迁移

滚动更新

更新 Kubernetes 工作节点的最简单方法是使用滚动更新。这是 Kubernetes Engine 用于更新工作节点的默认升级机制。

滚动更新的工作方式如下。逐个排空并封锁工作节点,确保该工作节点上未运行任何 pod。然后删除工作节点,并使用更新的 Kubernetes 版本创建新工作节点。一旦该工作节点启动并运行,下一个工作节点就会更新。此过程将一直进行,直到所有工作节点更新完毕。

可通过在工作节点池上启用自动工作节点升级,将此过程完全交由 Kubernetes Engine 管理。

如果不选择此选项,Kubernetes Engine 信息中心会在有可用升级时提醒您:

只需点击链接,按照提示执行滚动更新。

警告:确保您的 pod 由 ReplicaSet、Deployment、StatefulSet 或类似程序管理。不会重新安排独立 pod!

在 Kubernetes Engine 上执行滚动更新很简单,但也有一些缺点。

其中一个缺点是就集群容量而言少了一个工作节点。您可以扩展工作节点池来增加额外容量,然后在升级完成后缩减容量,这样便可轻松解决这一问题。

滚动更新的完全自动化特性使其易于操作,但您对过程的控制也相对减少。一旦出现问题,回滚到旧版本也需要时间,因为您必须先停止滚动更新,然后撤消。

使用工作节点池迁移

不像滚动更新那样升级 “活动” 工作节点池,您可以创建一个新工作节点池,等待所有工作节点运行,然后一次迁移一个工作节点上的负载。

假设我们的 Kubernetes 集群现在有三个虚拟机。您可以通过以下命令显示工作节点:

kubectl get nodes

NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?STATUS ?AGE

gke-cluster-1-default-pool-7d6b79ce-0s6z ? ?Ready ? 3h

gke-cluster-1-default-pool-7d6b79ce-9kkm ? ?Ready ? 3h

gke-cluster-1-default-pool-7d6b79ce-j6ch ? ?Ready ? 3h

创建新工作节点池

要创建名为 “pool-two” 的新工作节点池,请运行以下命令:

gcloud container node-pools create pool-two

注:务必自定义此命令,以确保新工作节点池与旧池相同。如果需要,还可以使用 GUI 创建新的工作节点池。

现在,如果您检查工作节点,您将注意到还有三个具有新池名称的工作节点:

$ kubectl get nodes

NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?STATUS ?AGE

gke-cluster-1-pool-two-9ca78aa9–5gmk ? ? ? ?Ready ? 1m

gke-cluster-1-pool-two-9ca78aa9–5w6w ? ? ? ?Ready ? 1m

gke-cluster-1-pool-two-9ca78aa9-v88c ? ? ? ?Ready ? 1m

gke-cluster-1-default-pool-7d6b79ce-0s6z ? ?Ready ? 3h

gke-cluster-1-default-pool-7d6b79ce-9kkm ? ?Ready ? 3h

gke-cluster-1-default-pool-7d6b79ce-j6ch ? ?Ready ? 3h

不过,pod 仍位于旧工作节点上!我们把它们转移过来。

排空旧池

现在,我们需要将工作转移到新的工作节点池。让我们以滚动的方式一次移动一个工作节点。

首先,封锁每个旧工作节点。这样可避免将新 pod 安排给旧工作节点。

kubectl cordon <node_name> 在封锁所有旧工作节点后,只能在新工作节点上安排 pod。这意味着您可以开始从旧工作节点中移除 pod,Kubernetes 会自动在新工作节点上安排这些 pod。

警告:确保您的 pod 由 ReplicaSet、Deployment、StatefulSet 或类似程序管理。不会重新安排独立 pod!

运行以下命令来排空每个工作节点。这将删除该工作节点上的所有 pod。

kubectl drain <node_name> --force

排空工作节点后,确保新的 pod 已启动并运行,然后再继续下一个工作节点。

如果您在迁移过程中有任何问题,可打开旧池,然后封锁并排空新池。Pod 将被重新安排回旧池。

删除旧池

在所有 pod 重新安排妥当后,需要删除旧池。

将 “default-pool” 替换为要删除的池。

gcloud container node-pools delete default-pool

至此,您已成功更新所有工作节点!

结论

通过使用 Kubernetes Engine,您只需点击几下,即可使 Kubernetes 集群保持最新状态。

如果您未使用类似 Kubernetes 这样的托管服务,也可以对您的集群使用滚动更新或工作节点池方法来升级工作节点。不同的是,您需要手动将新工作节点添加到集群中,并自己执行主节点升级,这可能会比较麻烦。

强烈建议您使用 Kubernetes Engine 区域性集群进行高可用主节点和自动工作节点升级,only倒装句以获得轻松的升级体验。如果您需要对工作节点更新进行额外控制,可使用工作节点池方法,这种方法既可以提供所需的控制,同时还能利用 Kubernetes Engine 具有的托管 Kubernetes 平台的优势。

至此,Kubernetes 最佳实践系列正式结束。如果您对未来我要讨论的其他话题有什么想法,可通过 Twitter 与我联系。如果您要参加今年 7 月的 Google Cloud Next ‘18,我们可以见面交流一下。

更多 AI 相关阅读:

·?Kubernetes 最佳实践:正常终止

·?通过视频着色进行自监督跟踪

·?通过机器学习让医疗数据更好用



文章来源:https://blog.csdn.net/jILRvRTrc/article/details/81199622

原文地址:https://www.cnblogs.com/yujingyua/p/9639508.html

时间: 2024-07-28 22:35:16

Kubernetes 最佳实践:零宕机升级集群的相关文章

Rancher 2.4实现零宕机升级集群,无需担心组件出现短暂故障!

在瞬息万变的技术世界中,为用户提供持续不断.快速的创新至关重要.Kubernetes是一个极佳引擎,可以在云端.本地以及边缘驱动创新.因此,Kubernetes及其整个生态系统本身迭代十分迅速,让Kubernetes保持最新状态以确保安全和新功能的使用对于任何部署来说都至关重要.  什么是零宕机升级集群 Rancher 2.4已于上周GA,在Rancher 2.4中,我们正式引入了零宕机集群升级功能.通俗来说,这个功能可以让你在飞机飞行过程中更换引擎,而不受任何干扰.开发人员可以继续将应用程序部

Kubernetes集群实践(08)升级集群

ECK在集群上还没部署多久还没有正式投入使用,试用阶段也发现了不少问题,现在马上要正式的部署了,想着在正式部署的时候把k8s集群升级.看了些资料,由于我的集群只有一个master节点虽然很强大,一台HUAWEI Taishan2280v2 服务器配双路鲲鹏920(单路48核,所以物尽其用,跑了master节点,traefik和kubernetes-dashboard,nexus没有arm64的镜像,很可惜),但终归是个单点.因此,在没有什么负载的情况下把升级工作做了.集群升级分为Kubernet

K8s 实践 | 如何解决多租户集群的安全隔离问题?

作者 |?匡大虎? 阿里巴巴技术专家 导读:如何解决多租户集群的安全隔离问题是企业上云的一个关键问题,本文主要介绍 Kubernetes 多租户集群的基本概念和常见应用形态,以及在企业内部共享集群的业务场景下,基于 Kubernetes 原生和 ACK 集群现有安全管理能力快速实现多租户集群的相关方案. 什么是多租户集群? 这里首先介绍一下"租户",租户的概念不止局限于集群的用户,它可以包含为一组计算,网络,存储等资源组成的工作负载集合.而在多租户集群中,需要在一个集群范围内(未来可能

堡垒机jumpserver集群部署

本文参考老广开发二次开发后的堡垒机部署方案,在此基础上进行集群部署,提高其可靠性.尽管国外已经有类似的功能的堡垒机的发布,但是还是要感谢老广在百忙之中再次开发出精简功能,更加使用的jumpserver堡垒机. 本文内容虽然亲测,但难免仍有错误指出.各位同行发现有请帮忙反馈,以便及时改进. 目 录 堡垒机jumpserver集群部署手册... 1 目录... 2 部分一  堡垒机架构原理... 3 jumpserver基本架构... 3 jumpserver集群架构... 4 部分二部署... 5

ZooKeeper场景实践:(6)集群监控和Master选举

1. 集群机器监控 这通常用于那种对集群中机器状态,机器在线率有较高要求的场景,能够快速对集群中机器变化作出响应.这样的场景中,往往有一个监控系统,实时检测集群机器是否存活. 利用ZooKeeper有两个特性(读可监控,临时节点),就可以实现一种集群机器存活性监控系统: 1. 客户端在节点 x 上注册一个Watcher,那么如果x的子节点变化了,会通知该客户端 2. 创建EPHEMERAL类型的节点,一旦客户端和服务器的会话结束或过期,那么该节点就会消失 利用这两个特性,可以分别实现对客服端的状

kubernetes 1.5 + nginxplus负载均衡 + jenkins集群 实战(一)

背景: 如题,公司要部署一套这个东东,故找了些设备部署起来看看好不好使,本人鄙陋,这个文章只做个测试参考,抛砖引玉,如有大神指教,可以加一下我的QQ,好,废话少说,开始吧! 大概步骤: 1    环境说明和配置 2    安装etcd集群 3    安装k8s并且配置 4    安装nginxplus 5    安装jenkins集群 1.环境说明 ip hostname 角色 系统 172.18.1.6 k8s-node-1 etcd-master,k8s-master centos-7.2

Kubernetes环境下如何运行Coherence缓存集群

Oracle官方出了一个如何在Docker环境下运行Coherence的技术文档,大家可以参考: https://github.com/oracle/docker-images/tree/master/OracleCoherence 但是对于一个熟悉Coherence的老司机来说,简单搭建起来只是个初步方案,在客户的环境总是各种特性和定制化配置,所以本文研究的也是如何将已经客户化的Coherence架构构建在Kubernetes开源框架上. 背景架构说明 话不多说,找一个客户的典型的Cohere

二进制安装kubernetes v1.11.2 (第一章 集群信息和初始化)

介绍 之前部署过单master节点的环境,并且没有启用证书.这次准备部署高可用的master节点并启用证书和部署dashboard. 一.集群环境信息 1.1 设备信息(使用virtualbox虚拟出了2个master和2个node设备) 192.168.56.20 k8s-m1 192.168.56.21 k8s-m2 192.168.56.30 k8s-n1 192.168.56.31 k8s-n2 内存不小于1G内核版本不小于 3.10.0 1.2 软件版本 kubernetes-v1.1

流式大数据计算实践(2)----Hadoop集群和Zookeeper

一.前言 1.上一文搭建好了Hadoop单机模式,这一文继续搭建Hadoop集群 二.搭建Hadoop集群 1.根据上文的流程得到两台单机模式的机器,并保证两台单机模式正常启动,记得第二台机器core-site.xml内的fs.defaultFS参数值要改成本机的来启动,启动完毕后再改回来 2.清空数据,首先把运行单机模式后生成的数据全部清理掉 rm -rf /work/hadoop/nn/current rm -rf /work/hadoop/dn/current hdfs namenode