前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pod依赖启动

Pod依赖启动

作者头像
张琳兮
发布2022-04-15 17:24:32
7410
发布2022-04-15 17:24:32
举报
文章被收录于专栏:首富手记首富手记
代码语言:javascript
复制
笔者:张首富
时间:2022-04-15

背景

我们在真实的生产环境中,在启动服务的时候可能会有先后顺序,比如服务A不启动成功,服务器B无法启动,服务B不启动成功服务器C又无法启动。所以这个时候我们该怎么办呢?想到的第一种方法就是使用探针,但是细想一下发现探针又好像不能完成我们的需求。(探针并不能控制不让服务启动,只能探测服务是否启动完成)

这个时候就去翻官网,发现init 容器好像能满足我们的需求

Init containers

官方文档:https://kubernetes.io/zh/docs/concepts/workloads/pods/init-containers/

我们这个地方来摘取符合我们上面需求的部分。

init containers 是什么?

Init 容器是一种特殊容器,在 Pod内的应用容器启动之前运行。Init 容器可以包括一些应用镜像中不存在的实用工具和安装脚本。

你可以在 Pod 的规约中与用来描述应用容器的 containers数组平行的位置指定 Init 容器。(init 容器是按照yaml文件的书写顺序来顺序执行的,只有等上一个执行成功并结束才会执行下一个)

理解 init containers

每个 Pod中可以包含多个容器, 应用运行在这些容器里面,同时 Pod 也可以有一个或多个先于应用容器启动的 Init 容器。

Init 容器与普通的容器非常像,除了如下两点:

  • 它们总是运行到完成。
  • 每个都必须在下一个启动之前成功完成。

如果 Pod 的 Init 容器失败,kubelet 会不断地重启该 Init 容器直到该容器成功为止。 然而,如果 Pod 对应的 restartPolicy值为 "Never",并且 Pod 的 Init 容器失败, 则 Kubernetes 会将整个 Pod 状态设置为失败。

看到这是不是就明白了,init containers 就是我们需要的东西,他就是我们的救世主。我们可以在POD B内添加一个init containers容器.这个容器的作用就是去探测pod A是否正常启动,这个探测可以是http 也可以是TCP的。(看你脚本如何写了)

截止到这个地方我们的问题就得以解决了。其他init pod相关的就自己去看官方文档吧

例子

serviceA服务依赖serviceB,而serviceB采用上文提及Readness探针的HTTPGetAction Handler。

代码语言:javascript
复制
spec:
  initContainers:
  - name: init-serviceA
    image: registry.docker.dev.fwmrm.net/busybox:latest
    command: ['sh', '-c', "curl --connect-timeout 3 --max-time 5 --retry 10 --retry-delay 5 --retry-max-time 60 serviceB:portB/pathB/"]
  containers:

参考文档:

https://dockone.io/article/2587

https://kubernetes.io/zh/docs/concepts/workloads/pods/init-containers/

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-04-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • Init containers
    • init containers 是什么?
      • 理解 init containers
      • 例子
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档