env 변수에서 수집 한 값 (ex.redis_host
)을 기반으로 동적 구성 파일 (redis, database)을 생성하고 서비스마다 다를 것이며 특정 위치 (config/redis.yml
)에 저장하려고합니다.동적 구성 파일을 생성하는 Kubernetes
어떻게 구현할 수 있습니까?
env 변수에서 수집 한 값 (ex.redis_host
)을 기반으로 동적 구성 파일 (redis, database)을 생성하고 서비스마다 다를 것이며 특정 위치 (config/redis.yml
)에 저장하려고합니다.동적 구성 파일을 생성하는 Kubernetes
어떻게 구현할 수 있습니까?
helm 여기에서 도움을받을 수 있습니다. Helm을 사용하면 k8s yaml 파일을 템플릿으로 만들고 하나의 배포 가능한 k8 패키지에 묶을 수 있습니다. 구성 파일을 ConfigMaps에 배치 할 수도 있고 helm을 사용하여 템플릿화할 수도 있습니다. 자세한 내용은 chart template guide에서 확인할 수 있습니다. 배포시 이러한 템플릿을 채우기 위해
한 가지 방법은 다음과 같다 :
helm upgrade --install my-service /path/to/my/chart/package --set my.value=${MY_VALUE_ENV_VAR}
구성 파일 구조의 생성을 포함 할 수
동적 구성 파일 생성 :
예를 들어 redis.yaml에 대한 설정 파일은 개발, 준비, 프로덕션 환경에 사용될 수 있습니다. 예 :
준비
${ENVIRONMENT}:
host: ${REDIS_HOST}
namespace: ${REDIS_NAMESPACE}
port: 6379
생산 :
${ENVIRONMENT}:
host: ${REDIS_HOST}
namespace: ${REDIS_NAMESPACE}
port: 6379
connect_timeout: ${REDIS_CONNECT_TIMEOUT}
timeout: {REDIS_TIMEOUT}
구성 파일 내용 :
설정 파일의 내용을 다시 동적으로 채울 수 있습니다.
우리는 config-templates
또는 config-file-structure
사용 투구를 생성하고 (예를 들어 설정/redis.yaml)를 pod.Then 내부 이러한 설정 - 템플릿에서 유틸리티를 사용하여 적절한 파일로 렌더링/변환 할 수 있습니다 필요한 장소에 마운트 할 수 컨테이너 실행 시간.
environment/environment_variables를 기반으로 구성 파일을 동적으로 만들려면 다음 방법을 사용합니다.
배쉬 방법 (
eval
및
cat
사용) :
#!/bin/bash
eval "cat <<EOF
$(<$1)
EOF
" | tee $1 >/dev/null
가 실행으로 inator을 확인하고 고정 표시기 내부에 배치 다음과 같은 내용으로 inator
라는 이름의 파일을 만듭니다 이미지를 ENTRYPOINT 스크립트로 실행하십시오.
$ env
ENVIRONMENT=staging
REDIS_HOST=abc.com
REDIS_NAMESPACE=inator
$ cat config/redis.yaml
${ENVIRONMENT}:
host: ${REDIS_HOST}
namespace: ${REDIS_NAMESPACE}
port: 6379
$ ./inator config/redis.yaml
$ cat config/redis.yaml
staging:
host: abc.com
namespace: inator
port: 6379
생산을
$ env
ENVIRONMENT=production
REDIS_HOST=redis.prod.com
REDIS_NAMESPACE=prod
REDIS_CONNECT_TIMEOUT=5
TIMEOUT=10
$ cat config/redis.yaml
${ENVIRONMENT}:
host: ${REDIS_HOST}
namespace: ${REDIS_NAMESPACE}
port: 6379
connect_timeout: ${REDIS_CONNECT_TIMEOUT}
timeout: {REDIS_TIMEOUT}
$ ./inator config/redis.yaml
$ cat config/redis.yaml
production:
host: redis.prod.com
namespace: prod
port: 6379
connect_timeout: 5
timeout: 10
장점을 준비 :
고려 ENV의 varibles는 포드/용기
예를 들어 내부 기한 없습니다 필요한 추가 패키지로 제공된다.
dockerize 방법 :
dockerize는 고정 표시기 컨테이너에서 실행중인 응용 프로그램을 단순화하는 유틸리티입니다. 내부적으로 go 템플릿을 사용하여 환경 변수의 구성 파일을 채 웁니다.
자세한 내용은이 블로그 게시물 Environment Variable Templates을보십시오.
감사합니다. 런타임에 값을 지정하는 대신 Vault에서 값을 가져 와서 자동으로 채워지도록 할 수 있습니까? –
@DanielSagayaraj 당신은 당신의 꼬투리가 시작할 때 금고에서 직접 비밀을 끌어 당기는 것을 의미합니까? 이 경우 consul-template을 컨테이너 용으로 특별히 설계된 [exec-mode] (https://github.com/hashicorp/consul-template#exec-mode)와 통합 할 수 있습니다. consul-template 파일을 설정 맵에 넣고 컨테이너에 마운트하고 컨테이너가 시작할 때 consul-template이 저장소로 마법을 걸도록 할 수 있습니다. – fishi