하위 태스크 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-secret

Pod를 생성한다.

kubectl apply -f pod-env.yaml

Pod 내부의 환경변수를 확인한다.

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: 70

HPA를 생성한다.

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