You are viewing documentation for a release that is no longer maintainedSee documentation for the latest supported version 3 or the latest supported version 4.
应用程序 pod 可以使用环境变量或 DNS 访问服务。如果使用环境变量,当 pod 在节点上运行时,对于每个活跃服务,则 kubelet 的变量都会注入。集群感知 DNS 服务器监视 Kubernetes API 提供了新服务,并为每个服务创建一组 DNS 记录。如果整个集群中启用了 DNS,则所有 pod 都应自动根据其 DNS 名称解析服务。如果您必须超过 5000 服务,可以使用 DNS 进行服务发现。当使用环境变量进行服务发现时,参数列表超过了命名空间中 5000 服务后允许的长度,则 pod 和部署将失败。要解决这个问题,请禁用部署的服务规格文件中的服务链接:
---
apiVersion: template.openshift.io/v1
kind: Template
metadata:
name: deployment-config-template
creationTimestamp:
annotations:
description: This template will create a deploymentConfig with 1 replica, 4 env vars and a service.
tags: ''
objects:
- apiVersion: apps.openshift.io/v1
kind: DeploymentConfig
metadata:
name: deploymentconfig${IDENTIFIER}
spec:
template:
metadata:
labels:
name: replicationcontroller${IDENTIFIER}
spec:
enableServiceLinks: false
containers:
- name: pause${IDENTIFIER}
image: "${IMAGE}"
ports:
- containerPort: 8080
protocol: TCP
env:
- name: ENVVAR1_${IDENTIFIER}
value: "${ENV_VALUE}"
- name: ENVVAR2_${IDENTIFIER}
value: "${ENV_VALUE}"
- name: ENVVAR3_${IDENTIFIER}
value: "${ENV_VALUE}"
- name: ENVVAR4_${IDENTIFIER}
value: "${ENV_VALUE}"
resources: {}
imagePullPolicy: IfNotPresent
capabilities: {}
securityContext:
capabilities: {}
privileged: false
restartPolicy: Always
serviceAccount: ''
replicas: 1
selector:
name: replicationcontroller${IDENTIFIER}
triggers:
- type: ConfigChange
strategy:
type: Rolling
- apiVersion: v1
kind: Service
metadata:
name: service${IDENTIFIER}
spec:
selector:
name: replicationcontroller${IDENTIFIER}
ports:
- name: serviceport${IDENTIFIER}
protocol: TCP
port: 80
targetPort: 8080
portalIP: ''
type: ClusterIP
sessionAffinity: None
status:
loadBalancer: {}
parameters:
- name: IDENTIFIER
description: Number to append to the name of resources
value: '1'
required: true
- name: IMAGE
description: Image to use for deploymentConfig
value: gcr.io/google-containers/pause-amd64:3.0
required: false
- name: ENV_VALUE
description: Value to use for environment variables
generate: expression
from: "[A-Za-z0-9]{255}"
required: false
labels:
template: deployment-config-template
---apiVersion: template.openshift.io/v1
kind: Template
metadata:name: deployment-config-template
creationTimestamp:annotations:description: This template will create a deploymentConfig with 1 replica, 4 env vars and a service.
tags:''objects:-apiVersion: apps.openshift.io/v1
kind: DeploymentConfig
metadata:name: deploymentconfig${IDENTIFIER}spec:template:metadata:labels:name: replicationcontroller${IDENTIFIER}spec:enableServiceLinks:falsecontainers:-name: pause${IDENTIFIER}image:"${IMAGE}"ports:-containerPort:8080protocol: TCP
env:-name: ENVVAR1_${IDENTIFIER}value:"${ENV_VALUE}"-name: ENVVAR2_${IDENTIFIER}value:"${ENV_VALUE}"-name: ENVVAR3_${IDENTIFIER}value:"${ENV_VALUE}"-name: ENVVAR4_${IDENTIFIER}value:"${ENV_VALUE}"resources:{}imagePullPolicy: IfNotPresent
capabilities:{}securityContext:capabilities:{}privileged:falserestartPolicy: Always
serviceAccount:''replicas:1selector:name: replicationcontroller${IDENTIFIER}triggers:-type: ConfigChange
strategy:type: Rolling
-apiVersion: v1
kind: Service
metadata:name: service${IDENTIFIER}spec:selector:name: replicationcontroller${IDENTIFIER}ports:-name: serviceport${IDENTIFIER}protocol: TCP
port:80targetPort:8080portalIP:''type: ClusterIP
sessionAffinity: None
status:loadBalancer:{}parameters:-name: IDENTIFIER
description: Number to append to the name of resources
value:'1'required:true-name: IMAGE
description: Image to use for deploymentConfig
value: gcr.io/google-containers/pause-amd64:3.0required:false-name: ENV_VALUE
description: Value to use for environment variables
generate: expression
from:"[A-Za-z0-9]{255}"required:falselabels:template: deployment-config-template
Copy to ClipboardCopied!Toggle word wrapToggle overflow
可在命名空间中运行的应用程序 pod 数量取决于服务数量以及环境变量用于服务发现时的服务名称长度。系统中的ARG_MAX 为新进程定义最大参数长度,默认设置为 2097152 KiB。Kubelet 将环境变量注入到要在命名空间中运行的每个 pod 中,包括:
<SERVICE_NAME>_SERVICE_HOST=<IP>
<SERVICE_NAME>_SERVICE_PORT=<PORT>
<SERVICE_NAME>_PORT=tcp://<IP>:<PORT>
<SERVICE_NAME>_PORT_<PORT>_TCP=tcp://<IP>:<PORT>
<SERVICE_NAME>_PORT_<PORT>_TCP_PROTO=tcp
<SERVICE_NAME>_PORT_<PORT>_TCP_PORT=<PORT>
<SERVICE_NAME>_PORT_<PORT>_TCP_ADDR=<ADDR>
如果参数长度超过允许的值,服务名称中的字符数会受到影响,命名空间中的 pod 将开始失败。例如,在一个带有 5000 服务的命名空间中,服务名称的限制为 33 个字符,它可让您在命名空间中运行 5000 个 Pod。