k8s 使用 Init Container 确保依赖的服务已经启动
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了k8s 使用 Init Container 确保依赖的服务已经启动,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2242字,纯文字阅读大概需要4分钟。
内容图文
![k8s 使用 Init Container 确保依赖的服务已经启动](/upload/InfoBanner/zyjiaocheng/1201/cca9b0fb382046c985f51114176d3e5e.jpg)
k8s 使用 Init Container 确保依赖的服务已经启动
Intro
最近 helm 3 正式发布了,dotnetcore 3.1 也正式发布了,最近打算把我的活动室预约项目做一个升级,项目已经升级到了 dotnetcore 3.1,最近几天则在准备把项目打包一个 helm 包,使得想要在 k8s 上部署的童鞋可以更方便的部署,目前已经基本完成,本来打算发布到阿里云的 AppHub 上,但是前几天更新的 angular client 的 chart 还没有更新,不知道最近是不更新了还是怎么回事,所以现在暂时还没发布到阿里云的 AppHub。你如果想要现在体验,可以直接拉取 Github 上的 chart 配置,自己打包安装。
一个 Pod 中可以有多个 container,也可以有多个 init container,init container 会在应用启动之前启动,并且如果有多个应用会依次启动,只有一个运行成功了,才会启动下一个,所有 init container 都运行结束了,应用才会启动,因此,我们可以借助 init container 来检查应用的依赖(如:db/redis/es...)是否已经可用。
Init Container 使用示例
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: reservation-server
image: weihanli/activityreservation:dev
ports:
- name: http
containerPort: 80
protocol: TCP
livenessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 60
periodSeconds: 10
readinessProbe:
httpGet:
path: /api/notice
port: http
initialDelaySeconds: 60
periodSeconds: 10
initContainers:
- name: init-redis
image: busybox:1.31
command: ['sh', '-c', 'until nslookup redis-server; do echo waiting for redis; sleep 2; done;']
- name: init-mysql
image: busybox:1.31
command: ['sh', '-c', 'until nslookup mysql-server; do echo waiting for mysql; sleep 2; done;']
上面这一示例定义了两个 init container,一个用来检查 redis 是否启动成功,另外一个用来检查 mysql 是否启动成功,开始部署的时候,首先会通过 nslookup
检查 redis 是否成功启动,检测到 redis 启动了之后,域名解析也就会成功,然后会检查 mysql 的状态,mysql 也成功启动之后才会开始启动 reservation-server
container
查看 pod 信息:
kubectl describe po reservation-server-59fb5447f7-gb5jg
从上面的信息可以看到结果是符合预期的,首先是创建并启动 init-redis
的容器,然后创建并启动 init-mysql
容器,最后创建并启动 reservation-server
容器,从 pod 状态来看,redis 和 mysql 还未 ready
时,resrvation-server
容器也不会启动
查看 init-redis 的日志
kubectl logs reservation-server-59fb5447f7-gb5jg -c init-redis
查看 init-mysql 的日志:
kubectl logs reservation-server-59fb5447f7-gb5jg -c init-mysql
Memo
通过 init container 的配置终于可以解决依赖的服务还没有 ready 应用就启动从而导致应用多次重启之后才能正常工作的问题~~
Reference
- https://kubernetes.io/docs/concepts/workloads/pods/init-containers
- https://github.com/WeihanLi/ActivityReservation/blob/dev/k8s/charts/reservation-server/templates/deployment.yaml
- https://github.com/WeihanLi/ActivityReservation/tree/dev/k8s/charts/reservation-server
原文:https://www.cnblogs.com/weihanli/p/12018469.html
内容总结
以上是互联网集市为您收集整理的k8s 使用 Init Container 确保依赖的服务已经启动全部内容,希望文章能够帮你解决k8s 使用 Init Container 确保依赖的服务已经启动所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。