k8s教程(pod篇)-初始化容器

01 引言

声明:本文为《Kubernetes权威指南:从Docker到Kubernetes实践全接触(第5版)》的读书笔记

在很多应用场景中,应用在启动之前都需要进行如下初始化操作:

  • 等待其他关联组件正确运行(例如数据库或某个后台服务);
  • 基于环境变量或配置模板生成配置文件;
  • 从远程数据库获取本地所需配置,或者将自身注册到某个中央数据库中;
  • 下载相关依赖包,或者对系统进行一些预配置操作。

Kubernetes 1.3版本引入了一个Alpha版本的新特性init container(初始化容器),用于在启动应用容器(app container)之前启动一个或多个初始化容器,完成应用容器所需的预置条件

与应用容器在本质上是一样的,但它们是仅运行一次就结束的任务,并且必须在成功运行完成后,系统才能继续执行下一个容器,如下图所示:
在这里插入图片描述

备注:根据Pod的重启策略(RestartPolicy),当init container运行失败而且设置了RestartPolicy=Never时,Pod将会启动失败;而设置RestartPolicy=Always时,Pod将会被系统自动重启。

02 举例

下面以Nginx应用为例,在启动Nginx之前,通过初始化容器busybox,为Nginx 创建一个index.html主页文件。

2.1 配置资源文件

这里为init containerNginx设置了一个共享的Volume,以供Nginx访问init container设置的index.html文件

apiversion: v1
kind: Pod
metadata:
	name: nginx
	annotations:
spec:
	# These containers are run during pod initialization 
	initContainers:
	- name: install
	  image: busybox
	  command:
	  - wget
	  -"-o"
	  -"/work-dir/index.html" 
	  - http://kubernetes.io 
	  volumeMounts:
	  - name: workdir
		mountPath: "/work-dir"
	
	containers:
	- name: nginx
	  image: nginx
	  ports:
	  - containerPort: 80
	  volumeMounts:
	  - name: workdir
	    mountPath: /usr/share/nginx/html 
	dnsPolicy: Default
	
	volumes: 
	- name: workdir
	  emptyDir: {}

2.2 创建并查看pod状态

创建完成后,在运行init container的过程中查看Pod的状态,可见init过程还未完成:

$ kubectl create -f nginx-init-containers.yaml 
pod "nginx"created

$ kubectl get pods
NAME	READY	STATUS	    RESTARTS	AGE
nginx	0/1	    Init:0/1	0	        1m

init container成功运行完成后,系统继续启动Nginx容器,再次查看Pod的状态:

$ kubectl get pods
NAME	READY	STATUS	RESTARTS 	AGE
nginx	1/1		Running    0		7s

查看Pod的事件,可以看到系统首先创建并运行init container容器(名为install),成功后继续创建和运行Nginx容器:
在这里插入图片描述
启动成功后,登录进Nginx容器,可以看到/usr/share/nginx/html目录下的 index.html文件为init container所生成。

03 初始化容器与应用容器的区别

3.1 运行方式不同

init container 的运行方式与应用容器不同,它们必须先于应用容器执行完成,当设置了多个init container时,将按顺序逐个运行,并且只有前一个init container运行成功后才能运行后一个init container

在所有init container都成功运行后,Kubernetes才会初始化Pod的各种信息,并开始创建和运行应用容器。

3.2 资源与策略设置等

init container的定义中也可以设置资源限制、Volume的使用和安全策略等等,资源限制的设置与应用容器略有不同:

  • 如果多个init container都定义了资源请求/资源限制,则取最大的值作为所有init container的资源请求值/资源限制值。
  • Pod的有效 (effective)资源请求值/资源限制值取以下二者中的较大值:①所有应用容器的资源请求值/资源限制值之和;②init container的有效资源请求值/资源限制值
  • 调度算法将基于Pod的有效资源请求值/资源限制值进行计算,也就是说 init container可以为初始化操作预留系统资源,即使后续应用容器无须使用这些资源。
  • Pod的有效QoS等级适用于init container和应用容器。 资源配额和限制将根据Pod的有效资源请求值/资源限制值计算生效。
  • Pod级别的cgroup:将基于Pod的有效资源请求/限制,与调度机制一致。

3.3 探针设置

init container不能设置readinessProbe探针,因为必须在它们成功运行后才能继续运行在Pod中定义的普通容器。

Pod重新启动时,init container将会重新运行,常见的Pod重启场景如下:

  • init container的镜像被更新时,init container将会重新运行,导致Pod重启。仅更新应用容器的镜像只会使得应用容器被重启。
  • Pod的infrastructure容器更新时,Pod将会重启。
  • Pod中的所有应用容器都终止了,并且RestartPolicy=Always,则Pod会重启。

03 文末

本文主要讲解pod的初始化容器,希望能帮助到大家,谢谢大家的阅读,本文完!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
网盘文件永久链接 目录: 1 kubernetes极速入门课程介绍mp4 2kubernetes极速入门k8s初识容器mp4 3 kubernetes极速入门k8s初识容器管理工具及容器编排管理工具介绍mp4 4 kubernetes极速入门k8s初识k8s初识mp4 5 kubernetest极速入门k8s初识k8初识总结mp4 6 kubernetes极速入门k8s功能mp4 7 kubernetes极速入门k8s架构场学习目标学习步骤,mp4 8 kubernetes极速入门k8架构,mp4 9 kubernetes极速入门k8s集群部署场黑学习目标学习步骤mp4 10 kubernetes极速入门k8s集群部署部署工具介绍mp4 11 kubernetes极速入门k8s集群部署主机准备主机系统准备mp4 12 kubernetes极速入门k8s集群部署主机准备主机名设置mp4 13 ekubernetes极速入门k8s集群部署主机准备P没置及主机名解释:mp4 14 kubernetes极速入门k8s集群部署主机准备主机安全设置mp4 15 kubernetes极速入门k8s集群部署主机准备主机时间同步没置:mp4 16 kubernetes极速入门kBs集群部署主机准备永久关闭主机sWap分区mp4 17 kubernetes极速入门ks集群部署主机备配置主机网析过功能mp4 18 kubernetes极速入门k8s集群部署主机佳备配置主机pvs功能mp4 19 kubernetest极速入门k8s集群部署 docker安装mp4 20 kubernetes极速入门k8s集群部害集群软件安装及配置mp4 21 kubernetes极速入门k8s集群部害集群镜像准备mp4 22 kubernetes极速入门k8s集群部署集群初始化mp4 23 kubernetes极速入门k8s集群部署k8s集群部署后验证mp4 24 kubernetes极速入门k8s集群部学习总结_mp4 25 kubernetesi极速入门k8s集群客户端工具kump4 26 kubernetes极速入门k8s集群资源清单YAML文件书写方法YAM介绍mp4 27 kubernetes极速入门k8s集群资源清单 YAM, mp4 28 kubernetes极速入门k8s集群 Name Spacel命名空间 Name Space介绍及查看mp4 29 kubernetes!极速入门k8s集群 Name Spacer命名空间 NameSpace创建mp4 30 kubernetes极速入门k8s集群 Name Space命,mp4 31 kubernetes极速入门k8s集群核心概念 podPod介绍及创建mp4 32 kubernetes极速入门k8s集群核心概念 pod, mp4 33 kubernetes极速入门k8s集群核心概念 Controller介绍分类 Deployment控制器介绍创建 Deployment控制器类型应用mp4 34 kubernetes极速入门k8s集群核心概念 Controller使用资源清单文件创建 Deployment控制器类型应用mp4 35 kubernetes极速入门k8s集群核心概念 Controller使用命令行或资源清单文件删除 Deployment控制器类型应用mp4 36 kubernetes极速入门k8s集群核心概念 Cont mp4 37 kubernetes极速入门k8s集群核心概念 Service Service介绍mp4 38 kubernetes极速入门k8s集群核心概念 Service通过命令行创建 Service,mp4 39 kubernetes极速入门k8s集群核心概念 Service通过资源清单文件创建 Service ClusterlP. mp4 40 kubernetes极速入门k8s集群核心概念 Service通过资源清单文件创建 Service Node Port. mp4 41 kubernetes极速入门k8s集群核心概念 Serv, mp4 42 kubernetesl极速入门结果有方法请注意mp4

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值