spring 启动应用程序中的 Kubernetes pod 级配置外部化
Kubernetes pod level configuration externalization in spring boot app
我需要社区的一些帮助,我还是 K8 和 Spring Boot 的新手。提前谢谢大家。
我需要的是在 K8 环境中有 4 个 K8 pods 运行 并且每个 pod 之间的配置略有不同,例如,我的 [=24] 之一中有一个 属性 =] class 称为区域,它从 Application.yml 中提取它的值,例如
@Value("${regions}")
私有字符串区域;
现在将它部署到 K8 env 后我想要 4 个 pods(我可以在 helm 文件中配置它)运行 并且在每个 pod 中 regions 字段应该有不同的值。
这是可以实现的吗?谁能给点建议吗?
如果你想运行 4不同的pods配置不同,你必须部署4 kubernetes.
中的不同部署
您可以根据需要创建不同的 configmap
存储整个 Application.yaml
文件或环境变量并将其注入 different 部署.
如何将整个 application.yaml
存储在 config map
中
apiVersion: v1
kind: ConfigMap
metadata:
name: yaml-region-first
data:
application.yaml: |-
data: test,
region: first-region
与第二次部署创建配置映射的方式相同。
apiVersion: v1
kind: ConfigMap
metadata:
name: yaml-region-second
data:
application.yaml: |-
data: test,
region: second-region
您可以将此 configmap
注入每个部署
示例:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: hello-app
name: hello-app
namespace: default
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: hello-app
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: hello-app
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
volumeMounts:
- mountPath: /etc/nginx/app.yaml
name: yaml-file
readOnly: true
volumes:
- configMap:
name: yaml-region-second
optional: false
name: yaml-file
相应地,您还可以创建 helm 图表。
如果您只是为了传递单个环境而不是将整个文件存储在 configmap
中,您可以直接为部署添加价值。
示例:
apiVersion: v1
kind: Pod
metadata:
name: print-greeting
spec:
containers:
- name: env-print-demo
image: bash
env:
- name: REGION
value: "one"
- name: HONORIFIC
value: "The Most Honorable"
- name: NAME
value: "Kubernetes"
command: ["echo"]
args: ["$(GREETING) $(HONORIFIC) $(NAME)"]
https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/
对于每个部署,您的环境会有所不同,在 helm 中,您可以 dynamically
也可以 update
或 overwrite
使用 CLI 命令。
我需要社区的一些帮助,我还是 K8 和 Spring Boot 的新手。提前谢谢大家。
我需要的是在 K8 环境中有 4 个 K8 pods 运行 并且每个 pod 之间的配置略有不同,例如,我的 [=24] 之一中有一个 属性 =] class 称为区域,它从 Application.yml 中提取它的值,例如
@Value("${regions}")
私有字符串区域;
现在将它部署到 K8 env 后我想要 4 个 pods(我可以在 helm 文件中配置它)运行 并且在每个 pod 中 regions 字段应该有不同的值。 这是可以实现的吗?谁能给点建议吗?
如果你想运行 4不同的pods配置不同,你必须部署4 kubernetes.
中的不同部署您可以根据需要创建不同的 configmap
存储整个 Application.yaml
文件或环境变量并将其注入 different 部署.
如何将整个 application.yaml
存储在 config map
apiVersion: v1
kind: ConfigMap
metadata:
name: yaml-region-first
data:
application.yaml: |-
data: test,
region: first-region
与第二次部署创建配置映射的方式相同。
apiVersion: v1
kind: ConfigMap
metadata:
name: yaml-region-second
data:
application.yaml: |-
data: test,
region: second-region
您可以将此 configmap
注入每个部署
示例:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: hello-app
name: hello-app
namespace: default
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: hello-app
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: hello-app
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
volumeMounts:
- mountPath: /etc/nginx/app.yaml
name: yaml-file
readOnly: true
volumes:
- configMap:
name: yaml-region-second
optional: false
name: yaml-file
相应地,您还可以创建 helm 图表。
如果您只是为了传递单个环境而不是将整个文件存储在 configmap
中,您可以直接为部署添加价值。
示例:
apiVersion: v1
kind: Pod
metadata:
name: print-greeting
spec:
containers:
- name: env-print-demo
image: bash
env:
- name: REGION
value: "one"
- name: HONORIFIC
value: "The Most Honorable"
- name: NAME
value: "Kubernetes"
command: ["echo"]
args: ["$(GREETING) $(HONORIFIC) $(NAME)"]
https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/
对于每个部署,您的环境会有所不同,在 helm 中,您可以 dynamically
也可以 update
或 overwrite
使用 CLI 命令。