手动升级kubernetes集群

手动升级kubernetes集群

在我最开始写作本书的时候,kubernetes刚发布1.6.0版本,而kubernetes基本按照每三个月发布一个大版本的速度迭代,为了使用新特性和只支持新版本kubernetes的配套软件,升级kubernetes就迫在眉睫,在此我们使用替换kubernets的旧的二进制文件这种暴力的方式来升级测试集群,若升级生产集群还望三思。

另外,自kubernetes1.6版本之后发布的1.7和1.8版本又增加了一些新特性,参考:

目前kubernetes的官方文档上并没有详细的手动安装的集群如何升级的参考资料,只有两篇关于kubernetes集群升级的文档。

手动升级的还没有详细的方案,大多是基于管理工具部署和升级,比如juju、kubeadm、kops、kubespray等。

manual upgrade/downgrade testing for Kubernetes 1.6 - google group,在这个Google group中讨论了kubernetes手动升级的问题,并给出了参考建议。

升级步骤

注意:该升级步骤是实验性的,建议在测试集群上使用,无法保证线上服务不中断,实际升级完成后无需对线上服务做任何操作。

大体上的升级步骤是,先升级master节点,然后再一次升级每台node节点。

升级建议

下图来自@ahmetb的Twitter,这是他对于0宕机时间的kubernetes集群升级建议。

图片 - Kubernetes零宕机时间升级建议

主要包括以下建议:

  • 应用使用高级对象定义,如支持滚动更新的Deployment对象
  • 应用要部署成多个实例
  • 使用pod的preStop hook,加强pod的生命周期管理
  • 使用就绪和健康检查探针来确保应用存活和及时阻拦应用流量的分发

准备

  1. 备份kubernetes原先的二进制文件和配置文件。
  2. 下载最新版本的kubernetes二进制包,如1.8.5版本,查看changelog,下载二进制包,我们使用的是kubernetes-server-linux-amd64.tar.gz,分发到集群的每个节点上。

升级master节点

停止master节点的进程

systemctl stop kube-apiserver
systemctl stop kube-scheduler
systemctl stop kube-controller-manager
systemctl stop kube-proxy
systemctl stop kubelet

使用新版本的kubernetes二进制文件替换原来老版本的文件,然后启动master节点上的进程:

systemctl start kube-apiserver
systemctl start kube-scheduler
systemctl start kube-controller-manager

因为我们的master节点同时也作为node节点,所有还要执行下面的”升级node节点“中的步骤。

升级node节点

关闭swap

# 临时关闭
swapoff -a

# 永久关闭,注释掉swap分区即可
vim /etc/fstab
#UUID=65c9f92d-4828-4d46-bf19-fb78a38d2fd1 swap                    swap    defaults        0 0

修改kubelet的配置文件

将kubelet的配置文件/etc/kubernetes/kublet配置文件中的KUBELET_API_SERVER="--api-servers=http://172.20.0.113:8080"行注释掉。

注意::kubernetes1.7及以上版本已经没有该配置了,API server的地址写在了kubeconfig文件中。

停止node节点上的kubernetes进程:

systemctl stop kubelet
systemctl stop kube-proxy

使用新版本的kubernetes二进制文件替换原来老版本的文件,然后启动node节点上的进程:

systemctl start kubelet
systemctl start kube-proxy

启动新版本的kube-proxy报错找不到conntrack命令,使用yum install -y conntrack-tools命令安装后重启kube-proxy即可。

检查

到此升级完成,在master节点上检查节点状态:

NAME           STATUS    ROLES     AGE       VERSION
172.20.0.113   Ready     <none>    244d      v1.8.5
172.20.0.114   Ready     <none>    244d      v1.8.5
172.20.0.115   Ready     <none>    244d      v1.8.5

所有节点的状态都正常,再检查下原先的运行在kubernetes之上的服务是否正常,如果服务正常的话说明这次升级无误。

API版本变更适配

对于不同版本的Kubernetes,许多资源对象的API的版本可能会变更,下表列出了kubernetes1.5至1.9的API资源对象的版本演进:

图片 - Kuberentes API对象的版本演进

当我们升级过后,可能出现资源对象的API变更后,原先的YAML文件无法使用的情况,因此需要对新版本的Kubernetes进行适配。对应的API版本转换工具:https://github.com/fleeto/kube-version-converter,可以将Kuberntes API对象转换到指定版本。

参考

原文地址:https://www.cnblogs.com/iors/p/9803015.html

时间: 2024-10-08 21:15:47

手动升级kubernetes集群的相关文章

kubeadm平滑升级kubernetes集群

1.检查集群可更新到的最新正式版 这步需要访问google上的文件,被Wall,超时 I0215 11:50:19.097435 24591 version.go:94] could not fetch a Kubernetes version from the internet: unable to get URL "https://dl.k8s.io/release/stable.txt": Get https://storage.googleapis.com/kubernetes

Kubernetes 集群升级docker版本

Kubernetes 集群升级docker版本 原则:升级完一台正常后再接着升下一台. Work Node 一.迁移上的pod(保证业务,但期间会出现抖动) kubectl drain $NODE --ignore-daemonsets --delete-local-data --force 迁移的过程中如果提示pod无法删除,则需要手动delete. 二.升级docker版本至18.09.9 1.停掉kubelet及docker服务 systemctl stop kubelet systemc

kubernetes集群部署

鉴于Docker如此火爆,Google推出kubernetes管理docker集群,不少人估计会进行尝试.kubernetes得到了很多大公司的支持,kubernetes集群部署工具也集成了gce,coreos,aws等iaas平台,部署起来也相当的方便.鉴于网上众多资料基于的是不少老版本,本篇文章针对最新的kubernetes及其依赖组件的部署简要阐述.通过本文可以比较粗暴的运行你的kubernetes集群,要优雅还需要更多的工作.部署主要分为三步: 1.准备机器并打通网络 如果要部署kube

【prometheus】kubernetes集群性能监控

手动安装方案——阿里云解决方案(部署失败): https://www.jianshu.com/p/1c7ddf18e8b2 手动安装方案—— (部署成功,但是只有CPU内存等的监控信息,没有GPU的监控信息): https://github.com/camilb/prometheus-kubernetes/tree/master helm安装方案——GPU-Monitoring-tools解决方案(部署成功): 参考:http://fly-luck.github.io/2018/12/10/gp

Kubernetes集群

Kubernetes已经成为当下最火热的一门技术,未来一定也会有更好的发展,围绕着云原生的周边产物也越来越多,使得上云更加便利更加有意义,本文主要讲解一些蔚来汽车从传统应用落地到Kubernetes集群的一些实践经验,提供给大家在落地之前的一些思考和注意点,并且让大家在实施的时候能够有一些借鉴,提供一些使用过程中的注意事项.项目背景 Docker诞生于2013年初,随着时间的推移Docker项目也逐渐火热起来,也形成了自己的生态,为了能够灵活调度容器,编排技术也变得非常重要,Swarm,Meso

Kubernetes集群水平扩展——HPA(自动伸缩)

Kubernetes集群可以通过Replication Controller的scale机制完成服务的扩容或缩容,实现具有伸缩性的服务. Kubernetes集群自动伸缩分为: sacle手动伸缩:可参考K8s资源对象的基本管理之使用命令行的方式(升级.回滚.扩容.缩容): autoscale自动伸缩:也就是本篇博文所介绍的HPA: Kubernetes自动扩展主要分为: 水平扩展:针对实例数目的增减: 垂直扩展:也就是单个实例就可以使用的资源的增减,比如增加CPU.内存: 一.HPA简介 HP

Centos7 下安装入门级别的kubernetes集群

前情说明: 三台Centos7系统的虚拟机(1个master+2个node),三台机器上的防火墙,SELINUX全部关掉.我的实验坏境可以上网,默认的YUM源就可以用. 1.什么是kubernetes Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg).在Docker技术的基础上,为容器化的应用提供部署运行.资源调度.服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性. Kubernetes优势: - 容器编排         - 轻量级

Shell脚本快速部署Kubernetes集群系统

本文紧跟上节所讲的手动部署Kubernetes管理Docker篇所写,本篇主要内容利用Shell脚本完成快速部署Kubernetes集群.上节博文看过的朋友也能感觉到部署过程相对比较简单,那么,出于简化工作流程,推进运维自动化角度来说,于是花了2/3天时间写这个部署Kubernetes脚本. 运维工作中,常常会遇到部署各种各样的服务,建议:常规部署都应该尽量使用脚本完成,一方面提高自身脚本编写能力,另一方面推进运维自动化. 详细部署说明文档:http://lizhenliang.blog.51c

通过Rancher部署并扩容Kubernetes集群基础篇

一 应用场景描述 持续跟踪研究Kubernetes也有一段时间了,Kubernetes作为谷歌开源的生产级别的容器调度系统从开源初始便获得了众多的关注.一些有研发实力的公司调研过Kubernetes的设计理念以及应用场景后很快就组织研发人员结合Kubernetes开发出符合自身业务发展的容器管理平台,也有一些公司基于Kubernetes开发公有容器云平台对外提供服务.但是对于一些小型团队对Kubernetes还是保持观望态度并适当做些测试.对比与mesos,kubernetes目前缺少一个像DC