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

1. 保持pod健康

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

HTTPGET探针对容器的 IP 地址TCP套接字探针尝试与容器指定端口建立TCP连接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有三个主要部分:

label selector ( 标签选择器), 用于确定ReplicationController作用域中有哪些Podreplica count (副本个数), 指定应运行的pod 数量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 执行单个任务或定时运行

相关阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。