Kubemetes有以下三种探测容器的机制:
Exec探针在容器内执行任意命令,并检查命令的退出状态码。如果状态码 是o, 则探测成功。所有其他状态码都被认为失败。
spec:
containers:
- name: IMAGE_NAME
image: WAREHOUSE/NAMESPACE/IMAGE_NAME:TAG
# 一个基于HTTP GET的存活探针
livenessProbe:
# 第一次检测在容器启动15秒后
initialDelaySeconds: 15
httpGet:
port: 8080
path: /
apiVersion: v1
kind: ReplicationController
metadata:
name: app
spec:
# 这里的selector可以删除,这样的话会默认从模板(template)中获取标签
selector:
app: app
replicas: 2
template:
metadata:
labels:
app: app
spec:
containers:
- name: app
image: app/1.0
ports:
- containerPort: 8080
2 . ReplicationController(Rc)会根据标签选择器管理符合其标签的所有pod,并维持在replicas设置的数量上。
当有一个pod发生故障然后又需要保留pod以查询日志信息的时候,可以更改pod的标签来移出ReplicationController的管理范围,
这样Rc会重新创建一个pod,故障pod也不会删除,仍然可以根据日志分析故障原因
3 . 注意:修改yaml文件的模板或者标签选择器时,要删除之前创建的pod,不然pod会失去Rc的管理,白白占用内存空间,类似于java中的内存泄漏
4 . 直接编辑Rc的yaml命令,命令执行后会自动生效,可以用来升级pod,但是后面有更好的方法
kubectl edit rc myapp
5 . 有的时候需要删除Rc但是不能删除Rc下面管理的pod,比如需要将Rc升级到ReplicaSet(Rs),可以执行以下命令
kubectl delete re kubia --cascade=false
目前ReplicationController已经被ReplicaSet完全取代了,而我们也不会直接去创建ReplicaSet,是使用Deployment去管理ReplicaSet,在后面会讲到
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: app
spec:
selector:
matchLabels:
app: app
replicas: 2
template:
metadata:
labels:
app: app
spec:
containers:
- name: app
image: app/1.0
ports:
- containerPort: 8080
2 . 更加强大的标签选择器:matchExpressions
spec:
selector:
matchExpressions:
- key: app
operator: In
values:
- app
每个表达式都必须包含一个key、一 个operator(运算符),并且可能还有一个values的列表(取决于运算符),运算符如下:
如果你指定了多个表达式,则所有这些表达式都必须为true才能使选择器与 pod匹配。如果同时指定matchLabels和matchExpressions, 则所有标签都必须匹配,并且所有表达式必须计算为true以使该pod与选择器匹配
3 . 删除Rs
kubectl delete rs kubia
原文:https://www.cnblogs.com/yechen2019/p/12103905.html