首先要说的是,我对 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。
- 第一个应用程序(相机管理器)确实包含所有配置。也许是一个 WebApp,因此您可以轻松创建和更新配置。
- 您对相机应用程序的部署将向第一个应用程序(相机管理器)询问未使用的配置。
作为进一步的改进,您的第一个应用程序(相机管理器)甚至会随着每个新配置或删除配置通过 k8s API 扩展“相机应用程序”。
或者创建一个脚本来部署你的应用程序。(地图配置和更新版本)。