하위 태스크 1
ConfigMap 생성
설정 데이터를 저장하는 ConfigMap 생성
configmap.yaml:
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
LOG_LEVEL: "info"
API_URL: "https://api.example.com"ConfigMap을 생성한다.
kubectl apply -f configmap.yaml하위 태스크 2
Secret 생성
민감한 정보를 저장하는 Secret 생성
kubectl create secret generic app-secret \
--from-literal=username=admin \
--from-literal=password=secret123하위 태스크 3
Pod에서 ConfigMap/Secret 사용
환경변수 또는 볼륨으로 주입
pod-env.yaml:
apiVersion: v1
kind: Pod
metadata:
name: config-test-pod
spec:
containers:
- name: test-container
image: nginx
envFrom:
- configMapRef:
name: app-config
- secretRef:
name: app-secretPod를 생성한다.
kubectl apply -f pod-env.yamlPod 내부의 환경변수를 확인한다.
kubectl exec config-test-pod -- env | grep -E "LOG_LEVEL|username"결과:
LOG_LEVEL=info
username=admin
하위 태스크 4
Kustomize 베이스 작성
공통 설정을 정의하는 베이스 디렉터리 작성
mkdir -p kustomize-test/base
mkdir -p kustomize-test/overlays/dev
mkdir -p kustomize-test/overlays/prod기본적인 배포 설정을 작성한다.
base/deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 1
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: nginx
image: nginx베이스 디렉터리에 포함될 리소스 목록을 지정한다.
base/kusctomization.yaml:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml하위 태스크 5
Kustomize 오버레이 작성
환경별 차이를 정의하는 오버레이 작성
개발 환경에 적용할 설정을 정의한다. 베이스 설정을 가져오면서 네임스페이스와 레플리카 개수를 변경한다.
overlays/dev/kustomization.yaml:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
namespace: dev-env
replicas:
- name: myapp
count: 2하위 태스크 6
Kustomize 적용
kubectl apply -k로 환경별 배포
Kustomize 경로를 지정해 배포한다.
kubectl create namespace dev-env
kubectl apply -k kustomize-test/overlays/dev하위 태스크 7
Helm Chart 초기화
helm create로 Chart 구조 생성
helm create myapp하위 태스크 8
values.yaml 작성
Chart의 기본 값 정의
myapp/values.yaml:
replicaCount: 3
image:
repository: nginx
pullPolicy: IfNotPresent
tag: "latest"
service:
type: ClusterIP
port: 80하위 태스크 9
템플릿 파일 작성
Go 템플릿 문법으로 동적 설정
template/deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "myapp.fullname" . }}
spec:
replicas: {{ .Values.replicaCount }}
template:
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"하위 태스크 10
Helm 설치 및 업그레이드
helm install/upgrade로 배포
차트를 검증하고 생성될 YAML을 미리보기 한다.
helm lint myapp
helm install myapp-debug ./myapp --dry-run --debug차트를 설치하고, 설정 변경 후 업그레이드 한다.
helm install myapp ./myapp
helm upgrade myapp ./myapp --set replicaCount=5하위 태스크 11
Metrics Server 설치
리소스 사용량 수집 서버 설치
Metrics Server를 설치하고 확인한다.
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
kubectl get pods -n kube-system | grep metrics-server하위 태스크 12
리소스 사용량 확인
kubectl top으로 모니터링
노드별로 CPU와 메모리 사용량을 확인한다.
kubectl top nodes모든 Pod의 리소스 사용량을 확인한다.
kubectl top pods -A하위 태스크 13
HPA 작성
자동 스케일링을 위한 HPA 작성
CPU 사용률이 70%를 넘으면 10개까지 Pod를 늘리도록 설정한다.
hpa.yaml:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: myapp-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: myapp
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70HPA를 생성한다.
kubectl apply -f hpa.yaml하위 태스크 14
자동 스케일링 테스트
부하 생성하여 스케일링 동작 확인
별도의 임시 Pod에서 myapp 서비스에 HTTP 요청을 무한히 보낸다.
kubectl run -i --tty load-generator --rm --image=busybox:1.28 --restart=Never \
-- /bin/sh -c "while true; do wget -q -O- http://myapp; done"HPA의 상태 변화와 Pod 개수 증가를 모니터링한다.
# HPA 상태를 모니터링한다.
kubectl get hpa myapp-hpa -w
# Pod 개수가 minReplicas와 maxReplicas 사이로 늘어나는지 확인한다.
kubectl get pods -l app=myapp -w