您现在的位置是:首页 >技术杂谈 >deletepod = restart pod?网站首页技术杂谈
deletepod = restart pod?
k8s delete pod后是如何创建新的pod
当您使用kubectl delete pod
命令删除一个Pod时,Kubernetes控制平面会检测到该Pod已经被删除,然后会自动创建一个新的Pod。这是因为Kubernetes使用控制器来管理Pod的生命周期,当Pod被删除时,控制器会自动创建一个新的Pod来替换它。
控制器会根据Pod的定义和配置文件中的规则来创建新的Pod,例如:
- 如果Pod的定义中指定了副本数,则控制器会确保在集群中始终有指定数量的Pod在运行,并自动创建新的Pod以替换已删除的Pod。
- 如果Pod的定义中指定了标签,则控制器会根据标签选择器来选择要创建的新Pod的节点。
- 如果Pod的定义中指定了容器镜像,则控制器会使用指定的镜像来创建新的Pod。
因此,当您使用kubectl delete pod
命令删除一个Pod时,Kubernetes控制平面会自动创建一个新的Pod来替换它,以确保您的应用程序始终处于运行状态。
Kubernetes控制平面如何检测到Pod异常
Kubernetes控制平面会通过以下方式检测到Pod异常:
-
定期检查:Kubernetes控制平面会定期检查每个Pod的状态,以确保它们处于正常状态。
-
容器存活探针:Kubernetes支持在Pod中配置容器存活探针(liveness probe),以检测容器是否处于正常状态。如果探针检测到容器异常,则Kubernetes会将Pod标记为失败状态,并尝试重新启动该Pod中的容器。
-
容器就绪探针:Kubernetes还支持在Pod中配置容器就绪探针(readiness probe),以检测容器是否已准备就绪可以接收流量。如果探针检测到容器未准备就绪,则Kubernetes将不会将流量路由到该容器,并且该容器将不会被考虑在内,直到它准备就绪。
-
资源利用率:Kubernetes还可以检测Pod中容器的资源利用率,如CPU和内存使用情况。如果容器使用的资源超过了预设的阈值,Kubernetes将认为Pod处于异常状态,并尝试重新启动该Pod中的容器。
总之,Kubernetes控制平面会通过定期检查、容器存活探针、容器就绪探针和资源利用率等方式来检测到Pod异常,并尝试自动修复或重新启动异常Pod,以确保应用程序的高可用性和可靠性。
定期是多久?
Kubernetes控制平面定期检查Pod状态的时间间隔由kube-controller-manager组件中的--pod-eviction-timeout
参数控制,默认值为5分钟。这意味着控制平面将每隔5分钟检查一次Pod的状态。但是,这个间隔时间可以通过修改该参数的值来进行调整。
需要注意的是,定期检查Pod状态的时间间隔并不是唯一的检测异常的方式,还有其他的方式,如前面提到的容器存活探针、容器就绪探针和资源利用率等。这些方式可以更快地检测到Pod异常,并进行相应的处理。
--pod-eviction-timeout
参数是kube-controller-manager组件的启动参数之一,它用于控制控制平面定期检查Pod状态的时间间隔。默认情况下,该参数的值为5分钟。如果需要调整该参数的值,可以在kube-controller-manager组件的启动命令中添加该参数,并指定新的值。
在Kubernetes集群中,kube-controller-manager组件的启动命令通常存储在/etc/kubernetes/manifests/kube-controller-manager.yaml
文件中,该文件是通过kubelet组件在节点上自动生成的。因此,如果需要修改--pod-eviction-timeout
参数的值,可以编辑该文件,并在其中添加该参数,如下所示:
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
component: kube-controller-manager
tier: control-plane
name: kube-controller-manager
namespace: kube-system
spec:
containers:
- command:
- kube-controller-manager
- --pod-eviction-timeout=10m # 修改pod-eviction-timeout参数的值为10分钟
image: k8s.gcr.io/kube-controller-manager:v1.22.2
name: kube-controller-manager
volumeMounts:
- mountPath: /etc/kubernetes/pki
name: k8s-certs
readOnly: true
- mountPath: /etc/kubernetes/controller-manager.conf
name: kubeconfig
readOnly: true
volumes:
- hostPath:
path: /etc/kubernetes/pki
type: DirectoryOrCreate
name: k8s-certs
- hostPath:
path: /etc/kubernetes/controller-manager.conf
type: FileOrCreate
name: kubeconfig
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
修改完毕后,保存文件并退出编辑器。然后,kubelet组件会自动检测到文件的更改,并重新启动kube-controller-manager组件,以使用新的参数值来定期检查Pod状态。