欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > 使用deployment管理简单的服务器

使用deployment管理简单的服务器

2024/11/30 6:55:32 来源:https://blog.csdn.net/qq_26124425/article/details/143912377  浏览:    关键词:使用deployment管理简单的服务器

承接上文

使用k8s搭建一个简单的golang服务器

使用deployment管理起来

直接创建deployment来创建pod,顺便测试一下故障场景,修改一下test.go来增加退出场景,需要重新制作镜像,参考上面即可。

package mainimport ("fmt""net/http""os"
)func main() {fmt.Println("start main")http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {fmt.Fprintf(w, "hello, world")})// 添加一个退出的url,测试服务异常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)
}

重新制作镜像搞到minikube里面之后,我们开始定义deployment来管理pod

apiVersion: apps/v1		# 版本,虽然不知道为什么,但是要写apps/v1
kind: Deployment		# 选deployment
metadata:name: test-dep		# 给deployment定义名字,创建的pod会以此为前缀# labels:				# 给deployment定义标签,也可以不定义,暂时没用# app: test
spec:					# deployment的要求replicas: 1			# pods启动1个,保持1个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"]

然后就是启动一下deployment

kubectl apply -f test.yaml

查看deployment和pod的状态

=> kubectl get deployments
NAME       READY   UP-TO-DATE   AVAILABLE   AGE
test-dep   1/1     1            1           4m6s
=> kubectl get pods
NAME                        READY   STATUS    RESTARTS   AGE
test-dep-769f4564f5-56zv6   1/1     Running   0          4m10s

在Running状态后,service那边不用动,同样用上面的方式访问,可以通。

=> minikube ip
192.168.49.2
=> curl 192.168.49.2:30449
hello, world%

然后测试一下搞挂这个服务端,自己会恢复

=> curl 192.168.49.2:30449/exit; date; while true; do curl 192.168.49.2:30449 &>/dev/null; if [ $? -eq 0 ]; then break; fi; sleep 1; done; date
curl: (52) Empty reply from server
20241119日 星期二 20:06:46 CST
20241119日 星期二 20:07:29 CST

pods的状态也是有一次重启

=> kubectl get pods
NAME                        READY   STATUS    RESTARTS       AGE
test-dep-769f4564f5-56zv6   1/1     Running   1 (119s ago)   42m

测试一下pods的容错,我们把deployments配置改一下,把replicas改成3个。等待启动完成再次测试。

=> kubectl apply -f test.yaml --force
# 搞挂第一个,第二个可以响应,很快返回
=> curl 192.168.49.2:30449/exit; date; while true; do curl 192.168.49.2:30449 &>/dev/null; if [ $? -eq 0 ]; then break; fi; sleep 1; done; date
curl: (52) Empty reply from server
20241119日 星期二 20:17:15 CST
20241119日 星期二 20:17:15 CST
# 搞挂第二个,第三个可以响应,很快返回
=> curl 192.168.49.2:30449/exit; date; while true; do curl 192.168.49.2:30449 &>/dev/null; if [ $? -eq 0 ]; then break; fi; sleep 1; done; date
curl: (52) Empty reply from server
20241119日 星期二 20:17:16 CST
20241119日 星期二 20:17:17 CST
# 搞挂第三个,第一个重启还没搞定,等第一个重启好就可以了
=> curl 192.168.49.2:30449/exit; date; while true; do curl 192.168.49.2:30449 &>/dev/null; if [ $? -eq 0 ]; then break; fi; sleep 1; done; date
curl: (52) Empty reply from server
20241119日 星期二 20:17:19 CST
20241119日 星期二 20:18:06 CST

由于我写的是go run test.go 容器启动之后需要现场编译,所以会慢一点,编译好的二进制启动会更快,应该就都是快速返回了。可以看到service里面暴露的端口会自动负载均衡到三个pods上面。

版权声明:

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

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