通过控制器来运行托管的 pod,Pod失败的时候自动重新启动它们。

1. 保持pod健康

从外部检查应用程序的运行状况:

  1. HTTPGET探针对容器的 IP 地址
  2. TCP套接字探针尝试与容器指定端口建立TCP连接
  3. Exec探针在容器内执行任意命令,并检查命令的退出状态码。如果状态码是 0, 则探测成功。

务必记得设置一个初始延迟未说明应用程序的启动时间。

livenessProbe:     
	httpGet: 		 		 HTTPGET探针
		path: /      		 请求路径
		port: 8080  		 请求端口
	initialDelaySeconds: 15  初始延迟,应用启动后15s开始探测请求

在这里插入图片描述

# 获取崩溃容器的应用日志, 即上一个容器的日志
kubectl logs mypod --previous 

# describe的内容来了解为什么必须重启容器
kubectl describe po kubia-liveness

1.1 describe 结果解释

退出代码为137, 这有特殊的含义 —-表示该进程由外部信号终止。数字137是两个数字的总和:128+x, 其中x是终止进程的信号编号。
在这个例子中,x等于9, 这是SIGKILL 的信号编号,意味着这个进程被强行终止。

  • delay(延迟)delay=0s部分显示在容器启动后立即开始探测
  • timeout(超时)设置为1秒,因此容器必须在1秒内进行响应, 不然这次
    探测记作失败
  • period(周期)等。在探测连续三次失败(#failure= 3)后重启容器。
    在这里插入图片描述

2 了解ReplicationController

ReplicationController旨在创建和管理一个pod的多个副本。确保pod的数量始终与其标签选择器匹配。
ReplicationController有三个主要部分:

  1. label selector ( 标签选择器), 用于确定ReplicationController作用域中有哪些Pod
  2. replica count (副本个数), 指定应运行的pod 数量
  3. pod template (pod模板), 用于创建新的pod 副本

一些命令缺少命名空间,补上即可使用

kubectl create -f kubia-rc.yaml		 创建了ReplicationController

kubectl get pods -A			RC 根据Pod 模板启动3个kubia 的Pod,查看Pod
#NAME 		READY STATUS	 RESTARTS AGE 
#kubia-53thy	 0/1 ContainerCreating 0  2s

kubectl delete pod kubia-53thy    删除一个Pod,观察将会创建出一个

kubectl get re   # 获取RC的信息 re作为rep让ca巨oncontroller的简写
# NAME DESIRED CURRENT READY AGE 
# kubia 3		3		3		3m

kubectl describe rc kubia

在这里插入图片描述
通过更改pod的标签, 可以将它 从ReplicationController的作用域中添加或删除。
pod 在metadata.ownerReferences 中引用RC 控制器,可以找到属于哪个RC控制器。

将 pod 移入或移出RC的作用域

kubectl label pod kubia - dmdck type=special   给一个Pod增加type=sp ecial的标签,对原控制器无影响

kubectl label pod kubia-dmdck app=foo --overwrite   对Pod修改现有标签app=kubi,脱落RC 的管理

kubectl get pods -L app      使用-L app 选项在列中显示app的标签列

修改RC 中的 pod模板

更改 pod 模板后,会影响你之后创建的Pod,并且不会影响你已经创建的Pod。

kubectl edit rc kubia   # 编辑RC kubia 的Yaml
修改模板中的容器图像, 删除现有的容器, 并让它们替换为新模板中的新容器, 可用来升级pod(后续有更好方法)

kubectl scale re kubia --replicas=3    也可修改副本数量实现水平缩放

kubectl delete rc kubia --cascade=false  删除 RC 时,使用--cascade=false保持 pod 的运行

3 使用ReplicaSet而不是ReplicationController

ReplicaSet 的选择器比RC强,RC已经被弃用。
在这里插入图片描述

kubectl create -f kubia-replicaset.yaml
kubectl get rs                    rs 是ReplicaSet的简写
kubectl describe rs    

selector: 
	matchExpressions: 
		- key: app 
			operator: In
			values:
			- kubia 

每个表达式都必须 包含一个key、一个operator (运算符),并且可能还有一个values的列表(取决于运算符),四个有效的运算符。如果同时指定matchLabels和matchExpressions, 则所有标签都必须匹配,并且所有表达式必须计算为true以使该pod与选择器匹配

• In : Label的值 必须与其中 一个指定的values 匹配。
• Notln : Label的值与任何指定的values 不匹配。
• Exists : pod 必须包含一个指定名称的标签(值不重要)。使用此运算符时,
不应指定 values字段。
• DoesNotExist : pod不得包含有指定名称的标签。values属性不得指定

使用 DaemonSet在每个节点上运行一个pod

在这里插入图片描述

Job 执行单个任务或定时运行

在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐