728x90
반응형

어플리케이션 내 ConfigMap 설정 (Configure ConfigMaps in Applications)

ConfigMap 생성

  1. 명령어로 key-value 값을 인자 값으로 주어 생성하는 방법이다.
$ kubectl create configmap app-config --from-literal=APP_COLOR=blue --from-literal=APP_MOD=prod
  1. properties 파일을 사용하여 생성하는 방법이다.
    ※ 파일을 사용하여 생성하게 되면 key 값이 파일 이름으로 설정되게 되니 주의하기 바란다.
$ cat > app_config.properties
APP_COLOR=blue
APP_MODE=prod
$ kubectl create configmap app-config --from-file=app_config.peroperties
  1. yaml 파일을 활용하여 생성하는 방법이다.
$ cat > config-map.yaml
apiVersion: v1
kind: ConfigMap
metadata:
    name: app-config
data:
    APP_COLOR: blue
    APP_MODE: prod

ConfigMap 조회

$ kubectl get configmaps
NAME               DATA   AGE
app-config         2      2m5s

or

$ kubectl get cm

ConfigMap 상세 조회

  • 커멘드 라인과 yaml 파일을 활용하여 생성하였을 때 내용이다.
$ kubectl describe cm app-config 
Name:         app-config
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
APP_COLOR:
----
blue
APP_MOD:
----
prod

BinaryData
====

Events:  <none>
  • properties 파일을 활용하여 생성하였을 때는 아래와 같이 key 값이 파일명으로 설정된다.
$ kubectl describe cm app-config
Name:         app-config
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
app-config.properties:
----
APP_COLOR=blue
APP_MOD=prod


BinaryData
====

Events:  <none>

ConfigMap POD 설정

$ cat > pod-definition.yaml

apiVersion: v1
kind: Pod
metadata:
  name: simple-webapp-color
spec:
 containers:
 - name: simple-webapp-color
   image: simple-webapp-color
   ports:
   - containerPort: 8080
   envFrom:
   - configMapRef:
       name: app-config

$ kubectl create -f pod-definition.yaml       

Secrets

개요

Secrets은 민감한 정보를 저장하는 데 사용된다.
configmap과 유사하지만 암호화된 형식 또는 해시 형식으로 저장된다.

Secret 생성

$ kubectl create secret generic app-secret --from-literal=DB_Host=mysql --from-literal=DB_User=root --from-literal=DB_Password=paswrd
$ kubectl create secret generic app-secret --from-file=app_secret.properties

base64 인코딩/디코딩 방법

$ echo -n "mysql" | base64
$ echo -n "root" | base64
$ echo -n "paswrd"| base64
$ echo -n "bX1zcWw=" | base64 --decode
$ echo -n "cm9vdA==" | base64 --decode
$ echo -n "cGFzd3Jk" | base64 --decode

선언전 방식은 base64 인코딩 한 문자열을 입력해준다.

$ cat > secret-data.yaml
apiVersion: v1
kind: Secret
metadata:
 name: app-secret
data:
  DB_Host: bX1zcWw=
  DB_User: cm9vdA==
  DB_Password: cGFzd3Jk
$ kubectl create -f secret-data.yaml  

Secret 조회

$ kubectl get secrets
NAME         TYPE     DATA   AGE
app-secret   Opaque   3      7s
$ kubectl describe secrets app-secret 
Name:         app-secret
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
====
DB_Host:      5 bytes
DB_Password:  6 bytes
DB_User:      4 bytes

암호화 된 secret을 보려면

$ kubectl get secrets app-secret -o yaml
apiVersion: v1
data:
  DB_Host: bXlzcWw=
  DB_Password: cGFzd3Jk
  DB_User: cm9vdA==
kind: Secret
metadata:
  creationTimestamp: "2023-02-06T07:32:59Z"
  name: app-secret
  namespace: default
  resourceVersion: "240554"
  uid: 82e6ceca-9edb-478c-816a-76ba59526318
type: Opaque
$ cat > pod-definition.yaml

apiVersion: v1
 kind: Pod
 metadata:
   name: simple-webapp-color
 spec:
  containers:
  - name: simple-webapp-color
    image: simple-webapp-color
    ports:
    - containerPort: 8080
    envFrom:
    - secretRef:
        name: app-secret
$ kubectl create -f pod-definition.yaml            

Multi Container POD

개요

POD가 여러 컨테이너를 가질 수 있는 주된 이유는 기본 애플리케이션을 지원하는 헬퍼 애플리케이션을 지원하기 위해서이다.
POD 간의 네트워크 공간이나 저장 공간을 공유하기 때문에 직접적으로 커뮤니케이션이 가능하다는 장점이 있다.

$ cat > multi-container.yaml

apiVersion: v1
kind: Pod
metadata:
  name: yellow
spec:
  containers:
  - image: busybox
    name: lemon
    command:
      - sleep
      - "1000"
  - image: redis
    name: redis
$ kubectl create -f multi-container.yaml

Init Container POD

개요

  • 초기화 컨테이너는 항상 완료될 때까지 실행된다.
  • 다음 초기화 컨테이너가 시작되기 전에 각 초기화 컨테이너가 성공적으로 완료되어야 한다.
$ cat > init-container.yaml

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app.kubernetes.io/name: MyApp
spec:
  containers:
  - name: myapp-container
    image: busybox:1.28
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init-myservice
    image: busybox:1.28
    command: ['sh', '-c', "until nslookup myservice.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for myservice; sleep 2; done"]
  - name: init-mydb
    image: busybox:1.28
    command: ['sh', '-c', "until nslookup mydb.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for mydb; sleep 2; done"]
$ kubectl create -f init-container.yaml
728x90
반응형