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-podlabels:app: myapp
spec:containers:- name: reservation-serverimage: weihanli/activityreservation:devports:- name: httpcontainerPort: 80protocol: TCPlivenessProbe:httpGet:path: /healthport: httpinitialDelaySeconds: 60periodSeconds: 10readinessProbe:httpGet:path: /api/noticeport: httpinitialDelaySeconds: 60periodSeconds: 10initContainers:- name: init-redisimage: busybox:1.31command: ['sh', '-c', 'until nslookup redis-server; do echo waiting for redis; sleep 2; done;']- name: init-mysqlimage: busybox:1.31command: ['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

k8s 查看mysql 日志_k8s 使用 Init Container 确保依赖的服务已经启动相关推荐

  1. k8s 使用 Init Container 确保依赖的服务已经启动

    k8s 使用 Init Container 确保依赖的服务已经启动 Intro 最近 helm 3 正式发布了,dotnetcore 3.1 也正式发布了,最近打算把我的活动室预约项目做一个升级,项目 ...

  2. K8S查看容器日志、进入容器内部

    K8S查看容器日志.进入容器内部 前言 常用命令 查看所有正在运行的pod 查看容器日志 查看pod的详细信息,以yaml格式或json格式显示 查看pod的描述信息 查看node或pod的资源使用情 ...

  3. navicat mysql 日志_使用Navicat查看MySQL日志的具体方法

    使用Navicat查看MySQL日志的具体方法 发布时间:2020-05-18 14:04:52 来源:51CTO 阅读:699 作者:三月 下文主要给大家带来使用Navicat查看MySQL日志的具 ...

  4. 利用 mysqlbinlog 查看 mysql 日志

    这几天遇到个玄学bug,想要通过查看 mysql 日志跟踪问题,学了下如何查看 mysql 日志,记录一下. 本文不介绍日志内容的含义,只介绍查看日志的方法. 正文 主要用到了mysql自带的工具:m ...

  5. linux查看mysql连接日志文件,linux下查看mysql日志文件的方法

    查看mysql日志方法: mysql默认不允许我们查看日志.需要更改一些设置 1 vi 更改配置文件 允许用户查看日志文件 sudo vi /etc/mysql/mysql.conf.d/mysqld ...

  6. docker查看mysql日志_Docker 容器日志分析

    查看容器日志 先使用  docker run -it --rm -d -p 80:80 nginx:1.15.8-alpine命令启动一个nginx容器.如果没有异常,会得到容器ID如 d2408a7 ...

  7. win 查看mySQL日志_Windows下MySQL日志操作

    日志文件类型概述: 1. 错误日志 记录启动.运行或停止mysqld时出现的问题. My.ini配置信息: #Enter a name for the error log file. Otherwis ...

  8. 查看mysql日志文件大小和数据库大小

    2019独角兽企业重金招聘Python工程师标准>>> 查看数据库日志文件的大小 show binary logs; 删除bin-log(删除mysql-bin.00000*小于my ...

  9. 查看mysql日志大小,SQL Server:查看SQL日志文件大小命令:dbcc sqlperf(logspace)

    SQL Server:查看SQL日志文件大小命令:dbcc sqlperf(logspace) DBA 日常管理工作中,很重要一项工作就是监视数据库文件大小,及日志文件大小.如果你管理数据库的有很多的 ...

最新文章

  1. kafka项目启动_Kafka 探险 源码环境搭建
  2. kafka高可用(集群)
  3. Linux命令Find实例
  4. R语言数据挖掘2.1.1.1 频繁项集
  5. 完整的WebApplication JSF EJB JPA JAAS –第2部分
  6. MySQL入门之索引
  7. webpack插件配置(二)- HtmlWebpackPlugin
  8. 读书笔记2014第12本:《创新者的窘境》
  9. spss入门——简单的数据预处理到时间序列分析系列(五)
  10. 【知识兔课程】跨境电商骗局揭秘及应对策略整理(2021版)
  11. android mvp mvvm ppt,Android中MVC MVP MVVM模式
  12. 岳飞诗词集萃[zz]
  13. Django+Vue实现增删改查操作
  14. 给游戏开发初学者的10条建议
  15. RT系统+STM32+SYN8266播报+红外定时器
  16. 120个ps常用的好看的英文艺术字体下载分享
  17. 尺寸压缩与质量压缩的文件大小及效果对比,webp格式
  18. FreeRTOS 任务管理之任务创建
  19. 自己制作的一个小网站--张晶塑料包装制品厂
  20. 809计算机考研,2017年南开大学计算机与控制工程学院809计算机综合基础考研题库...

热门文章

  1. httpclient 小例子编写
  2. php.ini 配置详解
  3. Cisco 3550配置DHCP的实际经验
  4. Python内置函数min(iterable, *[, key, default])
  5. Appium下载安装及环境配置
  6. git 拉取和获取 pull 和 fetch 区别
  7. 分布式服务框架dubbo原理解析 转
  8. JavaWeb学习总结(十二)——Session
  9. 配置ADO.NET类文件连接优化
  10. js 两行之间的设置间距_防火间距