如何最小化 kubernetes 中的部署数量,如何将 pod 与 configmap 绑定?

如何最小化 kubernetes 中的部署数量,如何将 pod 与 configmap 绑定?

首先要说的是,我对 Kubernetes 还很陌生,很难提出一个正确的问题。

我使用的k8s实现是microk8s。

我有一款应用程序可以分析摄像头的反馈。摄像头反馈的 URL 是可配置的。

目前我有 10 个摄像头。我当前的解决方案是拥有 10 个不同的部署和 10 个不同的配置图,如下所示:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: camera-1-10
spec:
  replicas: 1
  selector:
    matchLabels:
      app: camera-1-10
  strategy: {}
  template:
    metadata:
      labels:
        app: camera-1-10
    spec:
      volumes:
        - name: camera-config
          configMap:
            name: camera1.json
      containers:
      - image: xxxxx.azurecr.io/camera-application:0.0.14
        name: myrepo
        ports:
          - containerPort: 3000
        volumeMounts:
          - name: camera-config
            mountPath: "/config/camera.json"
            subPath: "data"
      imagePullSecrets:
        - name: acrsecret

我不喜欢这个解决方案的地方在于,我有 10 个部署 yaml,如果我想更新应用程序的版本号,我必须在 10 个不同的文件中进行更改。而且感觉添加新相机的工作量比我想要的要多。

有没有更简单的方法可以解决这个问题?我是否可以有 1 个部署来描述要使用的容器。然后 10 个 pod 只引用不同的配置图?有没有办法只使用配置来添加新摄像头?通过在 k8s 中配置某些东西来定义不同摄像头的数量?

答案1

你可以做一个部署例如副本数为 10,这将消除新版本的部署问题。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 10

现在,您又会面临一个新问题:如何为每个 Pod 分配一个唯一的配置。您仍然可以将所有不同的配置映射到您的部署,但您的代码现在必须以某种方式确定哪个配置适用于哪个 Pod。您需要某种逻辑来为 Pod 分配一个尚未被其他 Pod 使用的配置。

解决这个问题的一个想法是,创建一个 2. App。

  1. 第一个应用程序(相机管理器)确实包含所有配置。也许是一个 WebApp,因此您可以轻松创建和更新配置。
  2. 您对相机应用程序的部署将向第一个应用程序(相机管理器)询问未使用的配置。

作为进一步的改进,您的第一个应用程序(相机管理器)甚至会随着每个新配置或删除配置通过 k8s API 扩展“相机应用程序”。

或者创建一个脚本来部署你的应用程序。(地图配置和更新版本)。

相关内容