728x90
ConfigMap 관리
컨피그맵은 컨테이너를 필요한 "환경설정"을 컨테이너와 분리해서 제공하는 기능이다. 개발용과 상용서비스에서는(production) 서로 다른 설정이 필요할 때가 많다. 사용하는 데이터베이스가 다를 수도 있고, 실제 개발할 때는 디버그 모드로 로그를 출력하는데, 서비스용에서는 시스템 정보를 나타내는 모드로 로그를 출력해야 하는 등의 차이가 있다. 이렇게 다른 설정으로 컨테이너를 실행해야할 때 사용하는 것이 컨피그맵이다. 컨피그맵을 컨테이너와 분리하면 컨테이너 하나를 개발용, 상용 서비스를 운영하기 전 보안이나 성능 장애 등을 검증하는 스테이지용, 상용서비스 용으로 사용할 수 있다. |
공개 > configmpa을 환경설정으로 함
비공개 > secret을 환경설정으로 함
컨피그맵은 키-값 쌍으로 기밀이 아닌 데이터를 저장하는 데 사용하는 API 오브젝트입니다.
파드는 볼륨에서 환경 변수, 커맨드-라인 인수 또는 구성 파일로 컨피그맵을 사용할 수 있습니다.
컨피그맵을 사용하면 컨테이너 이미지에서 환경별 구성을 분리하여, 애플리케이션을 쉽게 이식할 수 있습니다.
# vi configmap-dev.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: config-dev
namespace: default
data: #환경설정구성내용 아래와같이 설정해주기
DB_URL: localhost
DB_USER: myuser
DB_PASS: mypass
DEBUG_INFO: debug
# kubectl apply -f configmap-dev.yaml
# kubectl describe configmaps config-dev
이렇게 노출이 되기 때문에
기밀의 정보는 configmap에다가 넣으면 안된당.
기밀의 정보는 secret을 활용!
그렇다면 configmap을 어떻게 활용하지?
# vi deployment-config01.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: configapp
labels:
app: configapp
spec:
replicas: 1
selector:
matchLabels:
app: configapp
template:
metadata:
labels:
app: configapp
spec:
containers:
- name: testapp
image: 34.22.96.240:5000/nginx:latest #/etc/docker/daemon.jason
ports:
- containerPort: 8080
env: #환경변수의 선언 이 부분이 중요함
- name: DEBUG_LEVEL #변수명(DEBUG_LEVEL)=debug라는 이름 집어넣기(k describe configmaps config-dev에 있는 변수명)
valueFrom:
configMapKeyRef: #컨피그맵 여러개 중에서 config-dev의 정보
name: config-dev
key: DEBUG_INFO
---
apiVersion: v1
kind: Service #서비스를 만들어서 접속할 수 있도록 함
metadata:
labels:
app: configapp
name: configapp-svc
namespace: default
spec:
type: NodePort
ports:
- nodePort: 30800
port: 8080
protocol: TCP
targetPort: 80
selector:
app: configapp
# kubectl apply -f deployment-config01.yaml
kubectl exec -it configapp-548f777477-dthcm -- bash
env
echo $DEBUG_LEVEL
- > 컨테이너 접근까지 성공!!
먼저, 다시 실습내용 다 지우고 다시 실습!
# k delete all --all --force
# vi configmap-wordpress.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: config-wordpress
namespace: default
data:
MYSQL_ROOT_HOST: '%'
MYSQL_DATABASE: wordpress
# kubectl apply -f configmap-wordpress.yaml
# kubectl describe configmaps config-wordpress
컨테이너,파드,deploy를 따로 분리하기 위해 사용하고 있음
민감한 정보들은 configmap이 아니라 secret에 넣어보자!
# vi secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: my-secret
stringData:
MYSQL_ROOT_PASSWORD: Test1752!
MYSQL_USER: wpuser
MYSQL_PASSWORD: Test1752!
# kubectl apply -f secret.yaml
# kubectl describe secrets my-secret
secret.yaml에 이름을 my-secret으로 지정하였기 때문에 describe는 지정된 이름으로 불러온다.
어쨋든!! 중요한건.
secret으로 만들어보았더니 describe해도 내용이 모두 보여지지 않는다.
활용해보자.
도커를 gcp에서 내려받아서 태깅하고 내려받기!
docker pull mysql:5.7
docker images
docker tag mysql:5.7 34.22.96.240:5000/mysql:5.7
docker push 34.22.96.240:5000/mysql:5.7
# vi mysql-pod-svc.yaml
apiVersion: v1
kind: Pod
metadata:
name: mysql-pod
labels:
app: mysql-pod
spec:
containers:
- name: mysql-container
image: 34.22.96.240:5000/mysql:5.7
envFrom:
- configMapRef:
name: config-wordpress
- secretRef:
name: my-secret
ports:
- containerPort: 3306
---
apiVersion: v1
kind: Service
metadata:
name: mysql-svc
spec:
type: ClusterIP
selector:
app: mysql-pod
ports:
- protocol: TCP
port: 3306
targetPort: 3306
# kubectl apply -f mysql-pod-svc.yaml
시크릿 파일을 저장했는데 이 파일을 확인하는 방법
master node에서 해당 mysql5.7 파드를 확인하기
k get svc
mysql -h 10.104.157.20 -u wpuser -p
워드프레스를 사설 레지스트리(GCP)에 등록하기!
docker pull wordpress
docker tag wordpress:latest 34.22.96.240:5000/wordpress:latest
docker push 34.22.96.240:5000/wordpress:latest
# vi wordpress-pod-svc.yaml
apiVersion: v1
kind: Pod
metadata:
name: wordpress-pod
labels:
app: wordpress-pod
spec:
containers:
- name: wordpress-container
image: 34.22.96.240:5000/wordpress:latest
env:
- name: WORDPRESS_DB_HOST
value: mysql-svc
- name: WORDPRESS_DB_USER
valueFrom:
secretKeyRef:
name: my-secret
key: MYSQL_USER
- name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: my-secret
key: MYSQL_PASSWORD
- name: WORDPRESS_DB_NAME
valueFrom:
configMapKeyRef:
name: config-wordpress
key: MYSQL_DATABASE
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: wordpress-svc
spec:
type: LoadBalancer
# externalIPs:
# - 192.168.0.25
selector:
app: wordpress-pod
ports:
- protocol: TCP
port: 80
targetPort: 80
# kubectl apply -f wordpress-pod-svc.yaml
wordpress 파드를 배포했더니
aws.tar 페이지에서 wordpress 페이지로 변경!!
728x90
'Kubernetes' 카테고리의 다른 글
Kubernetes - ResourceQuota관리 (0) | 2024.02.20 |
---|---|
쿠버네티스-namespace (0) | 2024.02.19 |
쿠버네티스 - GCP에서 이미지를 띄워서 쿠버네티스 해보기 (pv정적프로비저닝) (0) | 2024.02.19 |
Kubernetes-volume (1) | 2024.02.19 |
쿠버네티스- MetalLB (0) | 2024.02.19 |