Kubernetes ConfigMap 시도

7905 단어 kubernetes

ConfigMap


ConfigMap은 Kubernetes 1.2에서 설정된 정보를 처리하는 데 사용되는 리소스입니다.
  • 다음과 같이 Pod에 여러 가지 설정 정보를 전달할 수 있음
  • 환경 변수
  • 컨테이너 매개변수
  • 파일
  • Volume로 사용할 때 변경 사항을 동적으로 반영
  • Volume의 경우 파일이 기호 링크가 됨(후술)
  • 유사한 기능의 시크릿은 동적 반영이 없기 때문에 저는 개인적으로 동적 변화의 반영이 매우 기쁩니다.(Issue가 상승하여 대응할 수 있을 것 같다.Secret volume should refresh when secrets are updated #18372
    참조:
  • 공식 문서 Using ConfigMap
  • 설계 문서Generic Configuration Object
  • ConfigMap 만들기


    ConfigMap에는 다양한 제작 방법이 있습니다.
  • kubectl create -f config.conf 방식
  • 설정 파일(yaml/json)을 직접 쓰는 방식
  • kubectl create configmap 명령 사용 방법
  • 파일 또는 디렉토리 지정--from-file 옵션, 구성하려는 설정 파일 지정
  • 매개 변수에 직접 설정 정보 쓰기--from-literal 옵션
  • 여기서 설정 파일을 직접 쓰는 방식을 시도해 보세요.먼저 아래의 설정 파일을 쓰십시오.
    example-config.yaml
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: example-config
    data:
      # key, value形式で設定を記述する
      example.property.1: hello
      example.property.2: world
    
    설정을 반영합니다.
    $ kubectl create -f example-config.yaml
    
    다음과 같이 ConfigMap을 만들었습니다.
    $ kubectl get configmap example-config -o yaml
    apiVersion: v1
    data:
      example.property.1: hello
      example.property.2: world
    kind: ConfigMap
    metadata:
      creationTimestamp: 2016-03-19T12:33:55Z
      name: example-config
      namespace: default
      resourceVersion: "1522"
      selfLink: /api/v1/namespaces/default/configmaps/example-config
      uid: d82ebdbc-edce-11e5-8c6d-08002701bf15
    

    Pod to ConfigMap 데이터 사용


    Pod에서 읽어서 만든 ConfigMap을 사용해 보세요.환경 변수로 설정하는 방법과 파일로 마운트하는 방법은 두 가지가 있습니다.여기서 Volume을 파일로 마운트해 보십시오.
    pod-using-config.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-using-config
    spec:
      containers:
        - name: example-container
          image: busybox
          # あとからexecで操作するためsleepさせておく
          command: ["sleep", "3600"]
          # 定義したConfigMapのvolumeをマウントする
          volumeMounts:
            - name: config-volume
              mountPath: /etc/config
      volumes:
        # ConfigMapのvolume定義
        - name: config-volume
          configMap:
            # 作ったConfigMapのname
            name: example-config
    
    상기 구성의 Pod을 배포합니다.
    $ kubectl create -f pod-using-config.yaml
    
    Pod의 마운트/etc/config 아래에서 키 이름의 파일을 만들면 접근 값을 확인할 수 있습니다.
    $ kubectl exec pod-using-config cat /etc/config/example.property.1
    hello
    $ kubectl exec pod-using-config cat /etc/config/example.property.2
    world
    

    ConfigMap 변경 내용 확인


    ConfigMap을 Volume로 사용할 때 ConfigMap의 변경 사항도 Pod에 동적으로 반영됩니다.example-config 를 사용하여 방금 생성한 kubectl edit 을 변경합니다.
    $ kubectl edit configmap example-config
    
    기본적으로vi는 상승하기 때문에config를 다음과 같이 고쳐야 합니다.
    ...
    data:
      # 値を書き換える
      example.property.1: hello-updated
      example.property.2: world-updated
    
    값 변경을 확인합니다.변경 사항을 반영하는 데 시간이 오래 걸릴 수 있습니다.(Kublet의 SyncLoop 타이밍에 반영된 것 같습니다. cf.kubelet#syncLoopIteration
    $ kubectl exec pod-using-config cat /etc/config/example.property.1
    hello-updated
    $ kubectl exec pod-using-config cat /etc/config/example.property.2
    world-updated
    

    볼륨의 경우 파일은 기호 링크입니다.


    ConfigMap을 Volume로 사용할 때 구성 파일은 기호 링크입니다.여러 개의 설정 파일을 하나하나 새로운 것으로 바꾸면 전체적으로 원자가 되지 않기 때문에 디렉터리의 기호 링크를 바꾸는 방식을 사용했다.기호 링크를 보지 않는 프로그램은 주의해야 한다.
    실제 Pod에 로드된 파일은 다음과 같습니다.
    $ kubectl exec pod-using-config -- ls /etc/config -lra
    total 8
    lrwxrwxrwx    1 root     root            25 Mar 19 05:23 example.property.2 -> ..data/example.property.2
    lrwxrwxrwx    1 root     root            25 Mar 19 05:23 example.property.1 -> ..data/example.property.1
    lrwxrwxrwx    1 root     root            31 Mar 19 05:33 ..data -> ..3983_19_03_05_33_10.012371420
    drwx------    2 root     root            80 Mar 19 05:33 ..3983_19_03_05_33_10.012371420
    drwxr-xr-x    1 root     root          4096 Mar 19 05:23 ..
    drwxrwxrwt    3 root     root           120 Mar 19 05:33 .
    
    실제 원자 전환 처리는 atomic_writer.go에서 진행되는데 다음은 처리의 인상이다.
  • 타임 스탬프를 바탕으로 ..3983_19_03_05_33_10.012371420 같은 이름으로 디렉터리를 만들고 각 설정 파일을 쓴다
  • ..data의 디렉터리 이름으로 위의 디렉터리에 기호 링크를 붙여넣기
  • 마운트 목적지의 데이터 쌍.data에 대한 각 설정 파일 붙여넣기 기호 링크
  • 업데이트가 있는 경우 타임 스탬프를 기반으로 새 디렉터리에 각 설정 파일 쓰기
  • ..data의 기호 대상을 새 것으로 전환
  • 모든 설정 파일을 원자로 전환
  • 좋은 웹페이지 즐겨찾기