有没有办法在ConfigMap中指定int
值?当我尝试指定端口号时,我收到以下错误。
error: error validating "my-deployment.yml": error validating data: expected type int, for field spec.template.spec.containers[0].ports[0].containerPort, got string; if you choose to ignore these errors, turn validation off with --validate=false
以下是我正在使用的示例配置文件:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: my-service
spec:
replicas: 2
template:
metadata:
labels:
app: poweramp-email-service
spec:
containers:
- name: poweramp-email-service
env:
- name: SERVICE_PORT_NUM
valueFrom:
configMapKeyRef:
name: stg-config
key: poweramp-email-service.port
image: nginx
ports:
- containerPort: my-service.port
这是我使用命令生成ConfigMap的简单stg.properties
文件:kubectl create configmap stg-config --from-file stg.properties
my-service.port=9513
答案 0 :(得分:1)
您无法在spec.template.spec.containers[0].ports[0].containerPort
中使用配置图值,我担心这是配置值。
您可以使用的选项(在this guide中指定)是
如果要为部署/窗格配置端口,可以考虑使用Helm。 Helm允许您在清单/定义中使用Go模板,然后您可以在调用时覆盖它们。
拿这个MySQL Chart template as an example,您可以在这里将端口设置为配置选项,如下所示:
ports:
- name: mysql
containerPort: {{ default 3306 .Values.mysqlPort }}
然后从那里,在values.yaml
中设置此值答案 1 :(得分:0)
我在将端口号设置为env变量时遇到了类似的问题。 我有两个服务,其中ServiceB应该连接到ServiceA。 错误是
/opt/service/config.yml出现错误: * serviceAPort;处的值类型不正确;类型为:字符串,应为:整数 我的config.yml包含这样的内容 -serviceAPort:“ $ {SERVICEA_PORT!'9091'}”
Kubernetes正在以具有Protocol:IP:port的格式创建环境变量SERVICEA_PORT。 ServiceB无法将此解析为int
我在ServiceB pod中使用'printenv'并通过以下配置覆盖了它
env:
- name : SERVICEA_PORT
value: 9091
基本上,这是一个冲突,因为k8s开箱即用创建了env变量。