深入掌握Pod

将对Kubernetes如何发布与管理容器应用进行详细说明和示例,主要包括Pod和容器的使用、应用配置管理、Pod的控制和调度管理、Pod的升级和回滚,以及Pod的扩缩容机制等内容。

Pod定义详解

Pod是Kubernetes创建或部署的最小/最简单的基本单位,一个Pod代表集群上正在运行的一个进程。
一个Pod封装一个应用容器(也可以有多个容器),存储资源、一个独立的网络IP以及管理控制容器运行方式的策略选项。Pod代表部署的一个单位:Kubernetes中单个应用的实例,它可能由单个容器或多个容器共享组成的资源。

Pod的基本用法

在Kubernetes系统中对长时间运行容器的要求是:其主程序需要一直在前台执行。Kubernetes需要我们自己创建的Docker镜像并以一个前台命令作为启动命令。

注意:重启Pod中的容器跟重启Pod不是一回事。Pod只提供容器的运行环境并保持容器的运行状态,重启容器不会造成Pod重启。

Pod可以由1个或多个容器组合而成。

Pod不会自愈。如果Pod运行的Node故障,或者是调度器本身故障,这个Pod就会被删除。同样的,如果Pod所在Node缺少资源或者Pod处于维护状态,Pod也会被驱逐。Kubernetes使用更高级的称为Controller的抽象层,来管理Pod实例。虽然可以直接使用Pod,但是在Kubernetes中通常是使用Controller来管理Pod的。

静态Pod

静态Pod是由kubelet进行管理的仅存在于特定Node上的Pod。它们不能通过APIServer进行管理,无法与ReplicationController、Deployment或者DaemonSet进行关联,并且kubelet无法对它们进行健康检查。静态Pod总是由kubelet创建的,并且总在kubelet所在的Node上运行。

Pod容器共享Volume

同一个Pod中的多个容器能够共享Pod级别的存储卷Volume。Volume可以被定义为各种类型,多个容器各自进行挂载操作,将一个Volume挂载为容器内部需要的目录

Pod的配置管理

Kubernetes 1.2开始提供了一种统一的应用配置管理方案——ConfigMap

ConfigMap概述

ConfigMap供容器使用的典型用法如下。

  • (1)生成为容器内的环境变量。
  • (2)设置容器启动命令的启动参数(需设置为环境变量)。
  • (3)以Volume的形式挂载为容器内部的文件或目录。

ConfigMap以一个或多个key:value的形式保存在Kubernetes系统中供应用使用,既可以用于表示一个变量的值(例如apploglevel=info),也可以用于表示一个完整配置文件的内容

可以通过YAML配置文件或者直接使用kubectl create configmap命令行的方式来创建ConfigMap

Pod生命周期和重启策略

Pod在整个生命周期中被系统定义为各种状态,熟悉Pod的各种状态对于理解如何设置Pod的调度策略、重启策略是很有必要的。
Pod的状态如表:

状态值描述
PendingApiServer已经创建该pod,但在该pod内还有一个或多个容器镜像没有创建,包括正在下载镜像的过程
RunningPod内所有容器都已经创建,且至少有一个容器正在处于运行状态、正在启动状态或正在重启状态
SuccessedPod内所有容器均已经执行成功并退出,且不会再重启
FailedPod内所有容器均已经退出,但至少有一个容器退出为失败状态
Unknow由于某种原因无法获取pod状态,可能是网络原因

在这里插入图片描述

Pod的重启策略包括Always、OnFailure和Never,默认值为Always。

  • Always:当容器失效时,由kubelet自动重启该容器。
  • OnFailure:当容器终止运行且退出码不为0时,由kubelet自动重启该容器。
  • Never:不论容器运行状态如何,kubelet都不会重启该容器。

Pod的重启策略与控制方式息息相关,当前可用于管理Pod的控制器包括ReplicationController、Job、DaemonSet及直接通过kubelet管理(静态Pod)。每种控制器对Pod的重启策略要求如下:

  • RC和DaemonSet:必须设置为Always,需要保证该容器持续运行。
  • Job:OnFailure或Never,确保容器执行完成后不再重启。
  • kubelet:在Pod失效时自动重启它,不论将RestartPolicy设置为什么值,也不会对Pod进行健康检查。

Pod健康检查和服务可用性检查

Kubernetes对Pod的健康状态可以通过两类探针来检查: LivenessProbe(用于判断容器是否存活)和ReadinessProbe(用于判断容器服务是否可用)。
公司的配置

"readinessProbe":{
							"failureThreshold":3,
							"tcpSocket":{
								"port":8888
							},
							"timeoutSeconds":1,
							"periodSeconds":10,
							"successThreshold":1,
							"initialDelaySeconds":130
						},
"livenessProbe":{
							"failureThreshold":3,
							"tcpSocket":{
								"port":6666
							},
							"timeoutSeconds":1,
							"periodSeconds":10,
							"successThreshold":1,
							"initialDelaySeconds":130
						}

LivenessProbe和ReadinessProbe均可配置以下三种实现方式:

  1. ExecAction:在容器内部执行一个命令,如果该命令的返回码为0,则表明容器健康。
  2. TCPSocketAction:通过容器的IP地址和端口号执行TCP检查,如果能够建立TCP连接,则表明容器健康。
  3. HTTPGetAction:通过容器的IP地址、端口号及路径调用HTTP Get方法,如果响应的状态码大于等于200且小于400,则认为容器健康

都需要设置initialDelaySeconds和timeoutSeconds两个参数,它们的含义分别如下。

  • initialDelaySeconds:启动容器后进行首次健康检查的等待时间,单位为s。
  • timeoutSeconds:健康检查发送请求后等待响应的超时时间,单位为s。当超时发生时,kubelet会认为容器已经无法提供服务,将会重启该容器。
  • periodSeconds: 检查的间隔时间,默认为 10s,单位“秒”

Pod调度

在Kubernetes平台上,我们很少会直接创建一个Pod,在大多数情况下会通过RC、Deployment、DaemonSet、Job等控制器完成对一组Pod副本的创建、调度及全生命周期的自动控制任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值