728x90
반응형
어플리케이션 내 ConfigMap 설정 (Configure ConfigMaps in Applications)
ConfigMap 생성
- 명령어로 key-value 값을 인자 값으로 주어 생성하는 방법이다.
$ kubectl create configmap app-config --from-literal=APP_COLOR=blue --from-literal=APP_MOD=prod
- properties 파일을 사용하여 생성하는 방법이다.
※ 파일을 사용하여 생성하게 되면 key 값이 파일 이름으로 설정되게 되니 주의하기 바란다.
$ cat > app_config.properties
APP_COLOR=blue
APP_MODE=prod
$ kubectl create configmap app-config --from-file=app_config.peroperties
- 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
반응형
'DevOps > Kubernetes' 카테고리의 다른 글
Kubernetes::스토리지 (Storage) (0) | 2023.12.19 |
---|---|
Kubernetes::클러스터 유지 (Cluster Maintenance) (0) | 2023.12.19 |
Kubernetes::로깅 모니터링 (Logging Monitoring) (0) | 2023.12.19 |
Kubernetes::스케쥴링 (Scheduling) - 정적 파드 (0) | 2023.12.19 |
Kubernetes::스케쥴링 (Scheduling) - 데몬셋 (1) | 2023.12.19 |