我将Kubernetes集群拆分为两个不同的名称空间;分段和生产,旨在让生产部署具有两个副本(用于滚动部署,稍后自动缩放)和具有一个副本的分段。
除了每个命名空间有一个部署配置外,我想知道我们是否可以为每个命名空间设置每个部署的默认副本数量?
创建部署配置时,如果未指定副本数,则默认为1。有没有办法在production
命名空间上将其默认为两个?
如果没有,是否有推荐的方法可以防止每个命名空间需要部署配置?
这样做的一种方法是在第一次创建部署后,在生产命名空间中手动将部署扩展到两个副本,但我更愿意跳过任何手动步骤。
答案 0 :(得分:0)
在一个部署中,无法为每个命名空间设置不同数量的副本。
但是,每个命名空间可以有2个不同的部署文件,即<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>
...
<your-app>-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>
...
答案 1 :(得分:0)
我认为您不能避免进行两次部署,但您可以使用helm模板(https://docs.helm.sh/chart_template_guide)来删除重复的代码。然后,您可以定义单个部署yaml,并在使用if语句进行部署时替换不同的值。
答案 2 :(得分:0)
创建部署配置时,如果未指定副本数,则默认为1。有没有办法在生产命名空间中将其默认为两个?
实际上,有两种方法可以做到,但它们都涉及编码。
这是为字段分配默认值的推荐方法。
在Kubernetes中创建对象时,它会通过一些许可控制器,其中一个是MutatingWebhook。
自v1.9 +以来,MutatingWebhook已升级为测试版。该准入控制器在动作创建(或修改/删除)之前修改(变异)对象,例如,分配某些字段和某些类似任务的默认值。您可以在此处更改最小副本数。
用户必须实现准入服务器以接收来自kubernetes的请求,并相应地将修改后的对象作为响应。
以下是由Openshift kubernetes-namespace-reservation实施的示例准入服务器。
这比较容易,但有点黑客攻击部署过程。
您可以编写一个部署控制器来监视部署,如果进行了任何部署,它将执行一些任务。在这里,您可以使用所需的最小值更新部署。 您可以看到官方Sample Pod Controller。
如果两者似乎都有很多工作要做,那么每次部署时最好更仔细地分配字段。