Jonas 和 SYN 是对的,但我想通过一些额外的信息和示例来扩展这个主题。
在指定更新部署的方式时,您有两种策略可供选择:
默认且更推荐的一种是.spec.strategy.type==RollingUpdate。请参阅以下示例:
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
在此示例中,将在所需数量 3 之上增加一个 Pod (maxSurge: 1),并且可用 Pod 的数量不能低于该数量 (maxUnavailable: 0)。
选择这个配置,Kubernetes 将启动一个额外的 Pod,然后停止一个“旧的”。如果有另一个节点可用于部署此 Pod,系统将能够在部署期间处理相同的工作负载。如果没有,该 Pod 将部署在已使用的 Node 上,代价是来自同一 Node 上托管的其他 Pod 的资源。
你也可以试试这样的:
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 0
maxUnavailable: 1
在上面的示例中,将没有额外的 Pod (maxSurge: 0),并且一次只有一个 Pod 不可用 (maxUnavailable: 1)。
在这种情况下,Kubernetes 会先停止一个 Pod,然后再启动一个新 Pod。这样做的好处是基础架构不需要扩展,但最大工作量会更少。
如果您选择使用maxSurge 和maxUnavailable 的百分比值,您需要记住:
-
maxSurge - 通过四舍五入
从百分比计算绝对数字
-
maxUnavailable - 通过四舍五入
从百分比计算绝对数字
正确定义 RollingUpdate 后,您还必须确保您的应用程序提供端点以供 Kubernetes 查询并返回应用程序的状态。下面是一个 /greeting 端点,当它准备好处理请求时返回 HTTP 200 状态,当它没有准备好时返回 HTTP 500:
readinessProbe:
httpGet:
path: /greeting
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
successThreshold: 1
timeoutSeconds: 1
-
initialDelaySeconds - 完成第一次就绪检查之前的时间(以秒为单位)。
-
periodSeconds - 第一次之后的两次就绪检查之间的时间(以秒为单位)。
-
successThreshold - 探测失败后被视为成功的最小连续成功。默认为 1。活性必须为 1。最小值为 1。
-
timeoutSeconds - 探测超时的秒数。默认为 1 秒。最小值为 1。
有关活性/就绪性探测的更多信息,请访问here。