kubernetes 应用程序未启动时如何设置副本集的重启限制

kxkpmulp  于 2023-04-20  发布在  Kubernetes
关注(0)|答案(1)|浏览(141)

我正在使用副本集管理我的Pod。如果我的应用在启动后崩溃,我希望副本集重新启动它。但我有一个场景,副本集不应该重新启动我的应用或限制重新启动它。
当我的应用程序成功启动时,它将返回一个端点/健康的OK结果。我有这样的场景:我将推送一些更改,这样应用程序将无法成功启动,它将在启动时崩溃。并且它不会返回端点/健康的OK结果。当更改应用于Kubernetes时,从副本集重新启动它没有意义,因为它总是会失败。我知道副本集重新启动策略总是。但是有什么方法可以让它工作吗?我期待:当应用成功启动时(返回端点/运行状况的OK结果),如果副本集将在运行时崩溃,则应始终重新启动副本集。
当应用程序未成功启动(未返回端点/健康状态的OK结果)时,副本集不应重新启动它超过3次,因为这没有意义。相反,它应该保留旧版本的应用程序。
我的部署文件是基本的:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: apideployment
  namespace: dilshod
spec:
  selector:
    matchLabels:
      app: api_deploymentpod
  template:
    metadata:
      labels:
        app: api_deploymentpod
    spec:
      containers:
      - image: komdil/app:1.0.19
        imagePullPolicy: Always
        name: appcontainer
        ports:
        - containerPort: 80
enxuqcxy

enxuqcxy1#

不幸的是,Kubernetes ReplicaSet不允许你做你要求的事情;这将始终尝试将Pod的副本带到所需的状态(定时会不时地递增)。
您可以通过设置. spec. replicas来指定应该同时运行多少个Pod。ReplicaSet将创建/删除其Pod以匹配此数量。
如果不指定.spec.replicas,则默认值为1。
https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/#replicas
Pod的spec有一个restartPolicy字段,可能值为Always、OnFailure和Never。默认值为Always。
restartPolicy适用于Pod中的所有容器。restartPolicy仅指同一节点上kubelet对容器的重启。Pod中的容器退出后,kubelet会以指数级回退延迟重启容器(10 s,20 s,40 s,...),上限为5分钟。一旦容器执行了10分钟而没有任何问题,kubelet重置该容器的重启退避定时器。
https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy
我不清楚如果Pod(无论出于何种原因)没有正确启动,为什么要阻止这种机制......但是如果你仍然想实现你的目标,你必须实现一个监控系统,检查Pod的状态+它重新启动的次数(可能在给定的时间范围内),并触发一个工作流(Jenkins,GitHub等),将Deployment扩展到0。
https://kubernetes.io/docs/reference/kubectl/cheatsheet/#scaling-resources
https://stackoverflow.com/a/51245203/21404450

相关问题