繁体   English   中英

如何使用 Kubernetes 部署进行受控推出

[英]How to do controlled rollout using Kubernetes deployment

我们有 1000 个存储节点,需要按照以下顺序在每个 kubernetes 节点上部署应用程序映像,并希望在部署期间指定部署节点详细信息。 当我们执行 kubectl create 或 apply 部署命令时,有没有办法在命令行中指定节点详细信息?

此应用程序映像将被配置为在容器/POD 创建期间存储/节点特定的详细信息。

第 1 天 1 个节点,第 2 天 10 个节点,第 3 天 100 个节点等。

回答标题中的问题:

如何使用 Kubernetes 部署进行受控推出

您可以创建一个Deployment ,其清单中将包含特定字段,这些字段将配置 Kubernetes 处理它的方式。

使用podAntiAffinityrequiredDuringSchedulingIgnoredDuringExecution等字段,您可以确保Pods将 Pod 平均分配到集群Nodes上。 您可以通过以下文档了解更多信息:

请记住以下推出时间表:

REPLICAS_COUNT 个
1 1
2 10
3 100
4 1000

您可以使用CI/CD工具(例如 Jenkins)在特定计划中推出(更改) Deployment的副本数量。

您可以创建一个带有deploy阶段的 Jenkins 管道,您可以在其中使用它的调度程序(或延迟)放置您自己的命令。

可以与 Jenkins 一起使用的此类Deployment示例如下:

cat << EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: ${REPLICAS_COUNT}
  template:
    metadata:
      labels:
        app: nginx
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - nginx
            topologyKey: "kubernetes.io/hostname"
      containers:
      - name: nginx
        image: nginx
EOF

Deployment会将Pods分配给尚未拥有此Deployment的已运行副本的Nodes (即 1 Pod = 1 Node )。 如果 Pod 的数量超过Nodes的数量,它们将保留在Pending Pods中。


其他资源:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM