YOGAE

TODO: FIXME:

kubernetes args

05 May 2019

쿠버네티스에서 명령과 인자 재정의

kind: Pod
spec:
 containers:
 - image: some/image
   command: ["/bin/command"] # docker의 ENTRYPOINT에 해당
   args: ["arg1", "arg2"] # docker의 CMD에 해당

컨데이너의 환경 변수 설정

kind: Pod
spec:
 containers:
 - name: html-generator
   image: luksa/fortune:env
   env:
   - name: INTERVAL
     value: "30"
# 다른 환경 변수 참조
   env:
   - name: FIRST_VAR
     value: "foo"
   - name: SECOND_VAR
     value: "$(FIRST_VAR)bar"

ConfigMap

  • 쿠버네티스는 설정 옵션을 ConfigMap이라는 별도의 객체로 분리할 수 있습니다.

ConfigMap 생성

# kubectl create configmap 명령 사용
kubectl create configmap fortune-config --from-literal=sleep-interval=25

# 파일로 설정
kubectl create configmap fortune-config --from-file=conig-file.conf

# 파일의 내용을 특정 키 아래에 설정
kubectl create configmap fortune-config --from-file=customkey=conig-file.conf
# yaml 파일 생성
apiVersion: v1
data:
 sleep-interval: "25"
kind: ConfigMap
metadata:
 name: fortune-config

ConfigMap 사용

  • valueFrom

    ConfigMap에서 각각의 key로 접근하여 value를 받아옵니다.

      # pod에서 ConfigMap 사용
      apiVersion: v1
      kind: Pod
      metadata:
       name: fortune-env-from-configmap
      spec:
       containers:
       - image: luksa/fortune:env
         env:
         - name: INTERVAL
           valueFrom:
            configMapKeyRef:
             name: fortune-config # 참조할 ConfigMap 이름
             key: sleep-interval # ConfigMap에서 사용할 key
    
  • envFrom

    ConfigMap의 모든 항목을 한번에 설정합니다.

    대시(-)를 포함하는 항목은 건너뜁니다.

    spec:
     containers:
     - image: some-image
       envFrom:
       - prefix: CONFIG_ # 모든 환경변수에 CONFIG_ 접두어를 붙임
         configMapRef:
          name: fortune-config
    

ConfigMap 볼륨 사용

  • 포드를 다시 만들거나 컨테이너를 다시 시작하지 않고도 설정을 업데이트할 수 있습니다.
# 예시 file 설정
mkdir configmap-files
cat "ngnix-conf-file.conf" > configmap-files/ngnix-config.conf
echo "25" > configmap-files/sleep-interval
# folder안에 있는 파일로 ConfigMap 생성
kubectl create configmap fortune-config --from=configmap-files
# 파일로 마운트된 ConfigMap 사용
apiVersion: v1
kind: Pod
metadata:
 name: configmap-volume
spec:
 volumes:
 - name: config
   configMap:
    name: fortune-config
    # items: # 특정 파일만 선택할 경우
    # - key: ngnix-config.conf
    #   path: gzip.conf
 containers:
 - image: nginx:alpine
   name: web-server
   volumeMounts:
   ...
   - name: config
     mountPath: /etc/ngnix/config.d
     # subPath: <fileName> # 특정 파일만 mount할 때 사용
     readOnly: true