原生 Kubernetes 中的工作负载(Deployment、StatefulSet 等),部署使用时通常会依赖很多其他资源,例如 ConfigMap、Secret、PVC 等。因此,在联邦集群的资源分发场景下,需要确保工作负载分发到的目标成员集群时,关联的其他资源也遵循相同的部署策略,同步分发至相同的成员集群中。
工作负载和其他资源的关联方式,主要包括以下 2 种:
分布式云原生平台支持关联资源跟随调度模式,允许配置工作负载和资源关联。当工作负载和相关资源关联后,系统会保证工作负载和关联资源遵循相同的调度策略,并将其调度到相同的成员集群中。主要特性包括:
关联模式 | 说明 | 工作负载类型 | 关联资源类型 |
---|---|---|---|
内置跟随资源 | 使用 Kubernetes 原生的配置方式,在使用 Yaml 配置工作负载时,直接配置与其相关联的资源。 |
|
|
指定跟随资源 | 在使用 Yaml 配置工作负载时,使用 Annotation 声明需要关联的资源。 |
|
|
您可以通过内置跟随资源的方法关联工作负载和相关资源。在使用 Yaml 配置工作负载时,允许直接指定关联资源。此时,工作负载和关联资源会遵循工作负载的部署策略,分发到相同的成员集群中去。
说明
在配置工作负载前,您需要保证关联的资源存在。即首先需要完成关联资源的创建,再配置工作负载。
例如:
内置跟随资源的示例如下所示。在本例中,Deployment 工作负载关联了 ConfigMap 资源。
apiVersion: apps/v1 kind: Deployment metadata: name: deployment-demo spec: replicas: 2 selector: matchLabels: app: demo template: metadata: labels: app: demo spec: containers: - image: cr-cn-beijing.volces.com/demo-namespace/demo-repo:v1 name: demo port: - containerPort: 80 volumeMounts: - name: configmap-demo mountPath: "/path" volumes: - name: configmap-demo configMap: key1: value1
您可以在使用 Yaml 配置工作负载时,通过 Annotation 声明一个或多个需要关联的资源对象,该关联对象无需配置部署策略即可跟随工作负载分发到目标成员集群中。
说明
在配置工作负载前,您需要保证关联的资源存在。即首先需要完成关联资源的创建,再配置工作负载。
使用 Annotation 指定跟随资源时,格式说明如下:
kubeadmiral.io/followers:
开头。group
、kind
和 name
。使用 {}
包裹起来。代表一个确定的关联资源。,
分割,所有资源外部使用 []
包裹。不同关联资源,Annotation 中资源的字段配置不同,如下所示。
关联资源 | group 字段 | kind 字段 | name 字段 | Annotation 配置举例 |
---|---|---|---|---|
ConfigMap | 无需该项或值为空 | ConfigMap | 目标资源名称 | kubeadmiral.io/followers: '[{"group": "", "kind": "ConfigMap", "name": "configmap-name"}]' |
Secret | 无需该项或值为空 | Secret | 目标资源名称 | kubeadmiral.io/followers: '[{"group": "", "kind": "Secret", "name": "secret-name"}]' |
Service | 无需该项或值为空 | Service | 目标资源名称 | kubeadmiral.io/followers: '[{"group": "", "kind": "Service", "name": "service-name"}]' |
PersistentVolumeClaim | 无需该项或值为空 | PersistentVolumeClaim | 目标资源名称 | kubeadmiral.io/followers: '[{"group": "", "kind": "PersistentVolumeClaim, "name": "pvc-name"}]' |
ServiceAcount | 无需该项或值为空 | ServiceAcount | 目标资源名称 | kubeadmiral.io/followers: '[{"group": "", "kind": "ServiceAcount, "name": "serviceacount-name"}]' |
Ingress | networking.k8s.io | Ingress | 目标资源名称 | kubeadmiral.io/followers: '[{"group": "networking.k8s.io", "kind": "Ingress, "name": "ingress-name"}]' |
资源配置声明配置示例如下所示。在本例中,Deployment 工作负载关联了 2 个资源,分别为 Secret 和 Ingress。
apiVersion: apps/v1 kind: Deployment metadata: annotations: kubeadmiral.io/followers: '[{"group": "", "kind": "Secret", "name": "serect-demo"}, {"group": "networking.k8s.io", "kind": "Ingress", "name": "ingress-demo"}]' name: deployment-demo spec: replicas: 2 selector: matchLabels: app: demo template: metadata: labels: app: demo spec: containers: - image: cr-cn-beijing.volces.com/demo-namespace/demo-repo:v1 name: demo port: - containerPort: 80