阻止 Kubernetes 从部署中重新部署 Pod

问题描述 投票:0回答:1

我正在尝试手动控制 Pod 的使用寿命,但我似乎无法控制 Pod 在手动终止后不应重新启动。

概念是这样的:

  1. 应用部署文件
  2. 对部署中使用的代码库进行更改
  3. 再次应用部署文件
  4. 两个 Pod 现在都应该正在运行
  5. 我会在需要时手动终止最旧的 pod
  6. 仅应运行最新的 Pod

部署文件是这样的

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: default
  name: my-service-deployment
  labels:
    app: my-service
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-service
  template:
    metadata:
      labels:
        app: my-service
    spec:
      containers:
      - name: my-service
        image: my-service:latest
        ports:
        - containerPort: 81

知道如何实现这一点吗?我尝试过通过 api 放大/缩小副本,但没有任何运气

我尝试像这样使用

restartPolicy

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: default
  name: my-service-deployment
  labels:
    app: my-service
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-service
  template:
    metadata:
      labels:
        app: my-service
    spec:
      containers:
      - name: my-service
        image: my-service:latest
        ports:
        - containerPort: 81
      restartPolicy: Never

这会导致这个错误

The Deployment "my-service" is invalid: spec.template.spec.restartPolicy: Unsupported value: "Never": supported values: "Always"
kubernetes kubernetes-deployment
1个回答
0
投票

从 Will 的评论中添加,您可以考虑使用

deployment
,而不是使用
statefulset
。从文档中,

StatefulSet 是用于管理有状态应用程序的工作负载 API 对象。

管理一组 Pod 的部署和扩展,并提供这些 Pod 的排序和唯一性保证。

与 Deployment 类似,StatefulSet 管理基于相同容器规范的 Pod。与 Deployment 不同,StatefulSet 为其每个 Pod 维护粘性身份。这些 Pod 是根据相同的规范创建的,但不可互换:每个 Pod 都有一个持久标识符,在任何重新调度中都会维护该标识符。

请注意,当您删除 Pod 时 `

kubectl删除pod`,statefulset仍然会替换pod,你应该运行命令

kubectl scale statefulset my-service --replicas=0 将其缩小到 0

© www.soinside.com 2019 - 2024. All rights reserved.