본문 바로가기

kubernetes, helm, rancher

kubernetes configmap, secret

기본적인 kubernetes resource, option 등을 설명한 블로그입니다. 추가적인 기능을 보고싶으시면 docs를 참고바랍니다.

https://kubernetes.io/docs/home/

 

Kubernetes Documentation

Kubernetes is an open source container orchestration engine for automating deployment, scaling, and management of containerized applications. The open source project is hosted by the Cloud Native Computing Foundation.

kubernetes.io

  • configmap -> 컨테이너 구성 정보를 한 곳에서 정리.
  • kubectl create configmap [config_name] --from-literal=[key]=[value]
  • kubectl create configmap [config_name] --from-file=[file name] -> key = file name, value = file 내용
  • kubectl cretae configmap [config_name] --from-file=[key]=[configmap file name] -> key = [key], value = file 내용
  • kubectl cretae configmap [config_name] --from-file=[directory name] -> key = directory 안의 file name, value = file 내용
apiVersion: v1
kind: configMap
metadata:
  name: app-config
data:
  [key]: [value]
  [key]: [value]
  ...
  • 위의 value 값은 1mib를 초과할 수 없다.
  • kubectl get configmaps [config name]
  • version은 apps/v1

 

... 
spec: 
  containers: 
  - image: smlinux/genid:env 
    env: 
    - name: INTERVAL 
      valueFrom: # config file을 수정하면 pod를 다시 실행. configmap 안의 특정 key값만 가져올 때 
      - configMapKeyRef: 
          name: [config name] 
          key: [key name]

 

... 
spec: 
  containers: 
  - image: smlinux/genid 
    envFrom: # config map 전체 가져올 때. 
    - configMapRef: 
        name: [config name]

 

kind: Pod 
... 
spec: 
  ... 
  containers: 
  - image: smlinux/genid:env
    ... 
    volumeMounts: 
    - name: [volume name] 
      mountPath: [mount path] 
  - image: nginx:1.14 
    ... 
    volumeMounts: 
    - name: [volume name]
      mountPath: [mount path] 
      readOnly: true 
  volumes: 
  - name: [volume name] 
    emptyDir: {} 
  - name: [volume name] 
    configMap: 
      name: [config name] 
      items: 
      - key: [config key] # mount path안에서 file name으로 지정. 
        path: [mount로 저장할 file 명]

 

  • Secret -> 파드들의 데이터들을 인코딩해서 한 곳에 저장. configmap하고 다른 점은 인코딩한다는 점. password, auth token, ssh key 저장할 때 쓰임.
  • kubectl create secret [available command] [name] [flags] [options] -> available command는 docker-registry, generic, tls가 있고 반드시 그 중 하나는 써야하고 뒤에 올 parameter도 달라진다.
  • kubectl create secret tls [name] --cert=[cert file path] --key=[key file path]
  • kubectl create secret docker-registry [name] --docker-username=[user name] --docker-password=[password] --docker-email=[email]
  • kubectl create secret generic [name] --from-literal=[key]=[value] --from-file=[dir name]
  • secret을 여러가지 타입이 있는데, Opaque -> 임의의 사용자 정의 데이터(generic), kubernetes.io/tls -> tls 관련 정의(tls), kubernetes.io/dockerconfigjson -> ~/.docker/config.json 파일(docker-registry) 등등 많이 있다.

 

kind: Pod 
... 
spec: 
  containers: 
  - image: smlinux/genid:env 
    env: 
    - name: [env name] 
      valueFrom: 
        secreteKeyRef: 
          name: [secrete name] 
          key: [key name]

 

  • 파일로는 kubectl create -f [secret fle name] -> declarative
apiVersion: v1
kind: Secret
metadata:
  name: secret
data:
  [key]: [value]
  [key]: [value]
  ...
  • secret은 describe로 value값을 볼 수 없지만, value에 plain text가 들어가는 것보다 echo -n [value] | base64 같은 encoding을 통해 나온 값을 넣어주는 것이 안전.
  • echo -n [encoded value] | base64 --decode로 decoding할 수 있으며, secret안의 value값을 보고 싶으면, kubectl get secret [secret name] -o yaml로 볼 수 있다.
  • secret은 yaml로 생성하려면 annotation값이 문서에 적힌대로 써야하며, value는 10바이트 이상이여야한다.
kind: Pod 
... 
spec: 
  containers: 
  - image: smlinux/genid:env 
    env: 
    - name: [env name] 
      valueFrom: 
      - secretRef: 
          name: [secrete file name]

 

kind: Pod 
... 
spec: 
  ... 
  containers: 
  - image: smlinux/genid:env 
    ... 
    volumeMounts: 
    - name: [volume name]
      mountPath: [mount path] 
  - image: nginx:1.14 
    ... 
    volumeMounts: 
    - name: [volume name] 
      mountPath: [mount path] 
      readOnly: true 
  volumes: 
  - name: [volume name] 
    emptyDir: {} 
  - name: [volume name] 
    secret: 
      secreteName: [secret name] 
      items: 
      - key: [config key] # mount path안에서 file name으로 지정. 
        path: [mount로 저장할 file 명] # volume mount는 decoding되서 저장.

 

  • secret etcd에 암호화 하지 않은 텍스트로 저장되므로, 최대 크기는 1MB
  • 현재 볼륨에서 사용된 컨피그맵이 업데이트되면, 프로젝션된 키도 마찬가지로 업데이트된다. 환경 변수로 사용되는 컨피그맵은 자동으로 업데이트되지 않으며 파드를 다시 시작해야 한다.

 

'kubernetes, helm, rancher' 카테고리의 다른 글

kubernetes auth, certificates  (0) 2021.12.02
kubernetes scheduling  (0) 2021.12.01
kubernetes labels  (0) 2021.11.28
kubernetes services  (0) 2021.11.27
kubernetes HA(Highly Available), multi master node  (0) 2021.11.27