5-5. 미니 프로젝트

황인권·2025년 2월 21일

Kubernetes

목록 보기
35/37

미니 프로젝트 구축하기

  • 다음과 같이 yaml 파일을 작성하여, 여러 오브젝트를 설정하여 미니 프로젝트 앱을 가동하자.
    • ---으로 행을 나누면, 하나의 파일에서 여러 오브젝트를 정의할 수 있다.
    • 하나의 Pod 안에 nginx, redis, last-week-project 컨테이너가 같이 동작한다.
    • last-week-project 앱은 내부적으로 이 redis에 의존하게끔 되어있다.
    • 유저들은 last-week-project 앱에 바로 접속하는 것이 아니라, nginx 컨테이너를 거쳐서 프록시로 접속을 하게끔 구성한다.
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-config
data:
  nginx.conf: |
    events {}
    http {
      server {
          listen 80;
          location / {
              proxy_pass http://localhost:3000;
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header X-Forwarded-Proto $scheme;
          }
      }
    }

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: last-week-project-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: last-week-project
  template:
    metadata:
      labels:
        app: last-week-project
    spec:
      containers:
      - name: redis
        image: redis
        resources:
          requests:
            cpu: "100m"
            memory: "256Mi"
          limits:
            cpu: "100m"
            memory: "256Mi"
      - name: app-container
        image: teamspartacontents/k8s_lecture1:last-week-project
        env:
        - name: DB_HOST
          valueFrom:
            secretKeyRef:
              name: mini-project-secret
              key: DB_HOST
        - name: DB_USER
          valueFrom:
            secretKeyRef:
              name: mini-project-secret
              key: DB_USER
        - name: DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mini-project-secret
              key: DB_PASS
        - name: DB_DATABASE
          valueFrom:
            secretKeyRef:
              name: mini-project-secret
              key: DB_DATABASE
        resources:
          requests:
            cpu: "500m"
            memory: "500Mi"
          limits:
            cpu: "500m"
            memory: "500Mi"
        ports:
        - containerPort: 3000
      - name: nginx
        image: nginx:latest
        resources:
          requests:
            cpu: "100m"
            memory: "100Mi"
          limits:
            cpu: "100m"
            memory: "100Mi"
        ports:
        - containerPort: 80
        volumeMounts:
        - name: nginx-config
          mountPath: /etc/nginx/nginx.conf
          subPath: nginx.conf
      volumes:
      - name: nginx-config
        configMap:
          name: nginx-config

---
apiVersion: v1
kind: Service
metadata:
  name: last-week-project-svc
  namespace: default
spec:
  selector:
    app: last-week-project
  ports:
    - port: 80
      targetPort: 80

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: last-week-project-ingress
  namespace: default
  annotations:
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
spec:
  ingressClassName: alb
  rules:
    - http:
        paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: last-week-project-svc
              port:
                number: 80





미니 프로젝트의 장애 상황 경험하기

가상 유저 생성 프로그램 다운로드 및 실행

  1. 도커 허브에 올라와 있는 teamspartacontents/k8s_lecture1:last-week-attack 이미지를 pull 하자.
docker pull teamspartacontents/k8s_lecture1:last-week-attack
  1. 이 이미지를 -it 옵션을 붙여서 docker run으로 실행
docker run -it teamspartacontents/k8s_lecture1:last-week-attack
  1. URL을 묻는 화면에 미니 프로젝트의 인그레스 접속 주소를 붙여넣는다.

  2. 부하 정도를 묻는 화면이 나오는 데, 여기에 적당한 값을 입력

  • 여기서 입력하는 값은 초당 몇명의 사용자가 유입되는 것인지를 의미
  • 클러스터의 상태에 따라 얼만큼의 레벨을 버틸 수 있을지가 다르기 때문에 10정도를 기준으로 해서 낮춰보고 높여보면서 적당한 값 찾기

접속 불능(장애) 상태 복구

  • Deployment 오브젝트의 replicas 옵션을 조정하여 Pod의 개수를 늘리면 많은 부하가 가해져서 장애가 생기는 상황을 해결할 수 있음을 경험해보자.
profile
inkwon Hwang

0개의 댓글