您现在的位置是:首页 >技术杂谈 >deletepod = restart pod?网站首页技术杂谈

deletepod = restart pod?

喝醉酒的小白 2023-05-21 12:00:02
简介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异常:

  1. 定期检查:Kubernetes控制平面会定期检查每个Pod的状态,以确保它们处于正常状态。

  2. 容器存活探针:Kubernetes支持在Pod中配置容器存活探针(liveness probe),以检测容器是否处于正常状态。如果探针检测到容器异常,则Kubernetes会将Pod标记为失败状态,并尝试重新启动该Pod中的容器。

  3. 容器就绪探针:Kubernetes还支持在Pod中配置容器就绪探针(readiness probe),以检测容器是否已准备就绪可以接收流量。如果探针检测到容器未准备就绪,则Kubernetes将不会将流量路由到该容器,并且该容器将不会被考虑在内,直到它准备就绪。

  4. 资源利用率: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状态。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。