我需要为每个微服务容器应用程序创建覆盖吗

do I need to create overlay for each microservice container app

我有大约 20 个容器应用程序,每个容器应用程序都有 deployment.yaml,现在假设我想为每个容器应用程序放置不同的 replicas。下图表明我需要匹配 metadata:name.

这是否意味着我需要为一个容器应用程序每个创建 20 个 overlay.yaml?我可以使用单个覆盖文件管理所有应用程序吗?

这可以通过使用 patches 来解决。您将能够在每个环境中使用一个覆盖文件来管理所有部署,您可以在其中为每个部署明确设置副本数。


这是一个简单的例子:

我有两个环境:devstage。两者都有 kustomization.yamlpatches 用于特定部署和副本数量(两个环境不同)。

tree command:

.
├── base
│   ├── app-1.yaml
│   ├── app-2.yaml
│   └── kustomization.yaml
└── overlays
    ├── dev
    │   └── kustomization.yaml
    └── stage
        └── kustomization.yaml

部署 - app-1.yaml:(第二个几乎相同,不同的名称和图像)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: example-1
spec:
  template:
    spec:
      containers:
      - name: example-1
        image: example:1.0

下面是 overlays/dev/kustomization.yaml 的片段:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - ../../base

patches:
  - patch: |-
      - op: replace
        path: /spec/replicas
        value: 2
    target:
      group: apps
      version: v1
      kind: Deployment
      name: example-1
  - patch: |-
      - op: replace
        path: /spec/replicas
        value: 3
    target:
      group: apps
      version: v1
      kind: Deployment
      name: example-2

实际结果:

$ kubectl kustomize overlays/dev
apiVersion: apps/v1
kind: Deployment
metadata:
  name: example-1
spec:
  replicas: 2
  template:
    spec:
      containers:
      - image: example:1.0
        name: example-1
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: example-2
spec:
  replicas: 3
  template:
    spec:
      containers:
      - image: example:2.0
        name: example-2

有用链接: