アプリケーション Pod は環境変数または DNS のいずれかを使用してサービスにアクセスできます。環境変数を使用する場合、それぞれのアクティブなサービスについて、変数が Pod がノードで実行される際に kubelet によって挿入されます。クラスター対応の DNS サーバーは、Kubernetes API で新規サービスの有無を監視し、それぞれに DNS レコードのセットを作成します。DNS がクラスター全体で有効にされている場合、すべての Pod は DNS 名でサービスを自動的に解決できるはずです。DNS を使用したサービス検出は、5000 サービスを超える使用できる場合があります。サービス検出に環境変数を使用する場合、引数のリストは namespace で 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
clusterIP: ''
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:8080clusterIP:''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
namespace で実行できるアプリケーション Pod の数は、環境変数がサービス検出に使用される場合にサービスの数およびサービス名の長さによって異なります。システムの ARG_MAX は、新規プロセスの引数の最大の長さを定義し、デフォルトで 2097152 バイト (2 MiB) に設定されます。Kubelet は、以下を含む namespace で実行するようにスケジュールされる各 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>
引数の長さが許可される値を超え、サービス名の文字数がこれに影響する場合、namespace の Pod は起動に失敗し始めます。たとえば、5000 サービスを含む namespace では、サービス名の制限は 33 文字であり、これにより namespace で 5000 Pod を実行できます。