欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > 使用简单实验体验k8s的热升级机制

使用简单实验体验k8s的热升级机制

2024/11/29 20:59:26 来源:https://blog.csdn.net/qq_26124425/article/details/143939411  浏览:    关键词:使用简单实验体验k8s的热升级机制

热升级pod

负载均衡的容错基本可以了,现在考虑要升级一下这个容器,把其中的test.go修改一下,返回hello, world的同时打印一下HOSTNAME。

package mainimport ("fmt""net/http""os"
)func main() {fmt.Println("start main")// 从环境变量取hostname,为pod的名称,如test-dep-6cb67f4fbb-n8d78hostName := os.Getenv("HOSTNAME")http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {// 返回时加上这个HOSTNAMEfmt.Fprintf(w, "hello, world, %s\n", hostName)})http.HandleFunc("/exit", func(w http.ResponseWriter, r *http.Request) {fmt.Println("recieve exit, bye!")os.Exit(0)})err := http.ListenAndServe(":7878", nil)if err != nil {panic(err)}os.Exit(0)
}

宿主机重新生成这个image,commit为test-con:v2,然后同样minikube image load test-con:v2加载到minikube虚拟化环境的docker里面去。然后我们需要先修改一下deployment来处理一下更新的策略

apiVersion: apps/v1		# 版本,虽然不知道为什么,但是要写apps/v1
kind: Deployment		# 选deployment
metadata:name: test-dep		# 给deployment定义名字,创建的pod会以此为前缀# labels:				# 给deployment定义标签,也可以不定义,暂时没用# app: test
spec:					# deployment的要求strategy:type: RollingUpdate	# 策略为滚动更新rollingUpdate:maxUnavailable: 1	# 最多只能停止1个podmaxSurge: 1		# 在更新过程中,最多可以多创建多少个 Pod,本身停止了1个,创建1个,这里设置1会停1个创建2个replicas: 3			# pods启动3个selector:				# 定义deployment管理的pod选择器matchLabels:		# 要跟下面的template中一样,不一样会报错app: testtemplate:				# 定义deployment管理的podmetadata:labels:			# 定义标签,要和deployment中一样app: testspec:				# pod的定义containers:- name: testimage: test-con:latestimagePullPolicy: Nevercommand: ["go"]args: ["run", "/root/test.go"]readinessProbe:			# 就绪探针,什么时候可以开始接收流量,不会重启podhttpGet:path: /port: 7878timeoutSeconds: 1		# 探测超时时间5sinitialDelaySeconds: 5	# 第一次探测的等待时间periodSeconds: 5		# 探测周期livenessProbe:			# 存活探针,什么时候需要杀掉这个pod,如果启动一直失败就会杀掉pod重启一个httpGet:path: /port: 7878timeoutSeconds: 1		# 探测超时时间5sinitialDelaySeconds: 20	# 第一次探测的等待时间periodSeconds: 5		# 探测周期failureThreshold: 10	# 错误阈值,超过这个阈值将会重启pod

里面的image先使用test-con:latest,使用老的然后测试更新为新的,开不同的窗口,执行下面的命令监控状态

# 窗口1:查看pod状态
watch -n 1 kubectl get pods
# 窗口2:查看服务对外状态
watch -n 1 curl 192.168.49.2:30449 -s
# 窗口3:查看更新状态
watch -n 1 kubectl rollout status deployment/test-dep

三个窗口搞定之后,开始进行热更新。两种方式,可以直接修改deployment里面的image,也可以使用下面的命令

kubectl set image deployment/test-dep test=test-con:v2

可以看到窗口1里面pod的更新状态,先停止1个,启动2个pod。2个pod就绪后停止第三个,启动1个pod。这个时候窗口2中的curl结果变成了hello, world, test-dep-7668f6d499-x72cg每秒变一下不同的pod返回,并且**整个过程中没有获取失败的情况**。到此热升级完成。

但是作为运维人员,假设升级出现问题,需要回滚,执行下面命令就可以回滚。

kubectl rollout undo deployment/test-dep

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com