【问题标题】:Kubernetes set deploment number of replicas based on namespaceKubernetes根据命名空间设置部署副本数
【发布时间】:2018-09-08 13:22:32
【问题描述】:

我已将 Kubernetes 集群拆分为两个不同的命名空间; staging 和 production,目标是让生产部署有两个副本(对于滚动部署,稍后会自动扩展),而 staging 有一个副本。

除了每个命名空间有一个部署配置,我想知道我们是否可以为每个命名空间设置每个部署的默认副本数?

创建部署配置时,如果不指定副本数,则默认为一个。有没有办法在 production 命名空间上将其默认为两个?

如果没有,是否有推荐的方法来避免每个命名空间都需要部署配置?

这样做的一种方法是在第一次创建后,在生产命名空间中手动将部署扩展到两个副本,但我更愿意跳过任何手动步骤。

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    不可能在一次部署中为每个命名空间设置不同数量的副本。

    但是每个命名空间可以有 2 个不同的部署文件 1,即 <your-app>-production.yaml<your-app>-staging.yaml

    在这些描述中,您可以确定您需要的任何自定义值和设置。

    举个例子:

    <your-app>-production.yaml:

    apiVersion: v1
    kind: Deployment
    metadata:
      name: <your-app>
      namespace: production #Here is namespace
    ...
    spec:
      replicas: 2 #Here is the count of replicas of your application
      template:
        spec:
          containers:
          - name: <your-app-pod-name>
            image: <your-app-image>
    ...
    

    &lt;your-app&gt;-staging.yaml:

    apiVersion: v1
    kind: Deployment
    metadata:
      name: <your-app>
      namespace: staging #Here is namespace
    ...
    spec:
      replicas: 1 #Here is the count of replicas of your application
      template:
        spec:
          containers:
          - name: <your-app-pod-name>
            image: <your-app-image>
    ...
    

    【讨论】:

      【解决方案2】:

      我认为您无法避免进行两次部署,但您可以通过使用 helm 模板 (https://docs.helm.sh/chart_template_guide) 摆脱重复的代码。然后,您可以定义单个部署 yaml,并在使用 if 语句进行部署时替换不同的值。

      【讨论】:

        【解决方案3】:

        创建部署配置时,如果不指定副本数,则默认为一个。有没有办法在生产命名空间中将其默认为两个?

        其实有两种方法可以做到,但都涉及到编码。

        1. Admission Controllers:

        这是为字段分配默认值的推荐方式。

        在 Kubernetes 中创建对象时,它会通过一些准入控制器,其中之一是 MutatingWebhook

        MutatingWebhook 自 v1.9+ 起已升级为 beta 版本。该准入控制器在实际创建(或修改/删除)对象之前修改(变异)对象,例如,分配某些字段和某些类似任务的默认值。您可以在此处更改最小副本数。

        用户必须实现一个准入服务器来接收来自 Kubernetes 的请求并相应地给出修改后的对象作为响应。

        这是一个由 Openshift kubernetes-namespace-reservation 实现的准入服务器示例。

        1. 部署控制器:

        这相对容易,但有点破解部署过程。

        您可以编写一个部署控制器来监视部署,如果进行了任何部署,它将执行一些任务。在这里,您可以使用一些您希望的最小值来更新部署。 可以看官方Sample Pod Controller

        如果它们看起来都有很多事情要做,那么每次部署时最好更仔细地分配字段。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-05-20
          • 2021-08-11
          • 2019-03-15
          • 1970-01-01
          • 1970-01-01
          • 2015-08-23
          • 1970-01-01
          • 2021-07-08
          相关资源
          最近更新 更多