본문 바로가기
IT 끄적이기

쿠버네티스(k8s) 학습하기 - 포드간 통신 보기

by 미르아 2024. 12. 27.
728x90

진행 순서

  1. 포드 간 데이터 통신 이해
    • 먼저, 쿠버네티스에서 포드 간 통신을 설정하고 테스트합니다. 이 과정은 Helm, CI/CD, 모니터링을 진행할 때 기본이 되는 네트워킹 이해를 돕습니다.
  2. Helm 설치 및 사용
    • 포드 간 통신을 이해한 후, Helm을 사용하여 애플리케이션 배포를 템플릿화합니다. 이는 CI/CD와 모니터링 도구 설치 시 작업을 더 간단하게 만들어줍니다.
  3. CI/CD 연습
    • Jenkins를 Minikube에 배포하고 파이프라인을 구성합니다. Helm을 사용해 Jenkins를 설치하면 훨씬 간편합니다.
  4. 모니터링 툴 추가
    • Prometheus와 Grafana를 설치해 클러스터 상태를 시각적으로 모니터링합니다. 이것도 Helm으로 설치하면 쉽습니다.

1. 포드 간 데이터 통신 이해

(1) 두 개의 애플리케이션 배포

  • 프론트엔드와 백엔드 역할을 하는 두 개의 Deployment를 생성합니다.
  • 프론트엔드에서 백엔드로 데이터를 요청하고 응답을 확인합니다.

프론트엔드 Deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontend
spec:
  replicas: 1
  selector:
    matchLabels:
      app: frontend
  template:
    metadata:
      labels:
        app: frontend
    spec:
      containers:
        - name: frontend
          image: curlimages/curl  # 간단히 요청 테스트용으로 curl 사용
          command: ["sleep", "3600"]

백엔드 Deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend
spec:
  replicas: 1
  selector:
    matchLabels:
      app: backend
  template:
    metadata:
      labels:
        app: backend
    spec:
      containers:
        - name: backend
          image: hashicorp/http-echo  # 간단히 HTTP 응답 테스트용
          args:
            - "-text=Hello from backend"

(2) 백엔드 서비스 생성

프론트엔드가 백엔드에 접근할 수 있도록 Service를 생성합니다.

apiVersion: v1
kind: Service
metadata:
  name: backend-service
spec:
  selector:
    app: backend
  ports:
    - protocol: TCP
      port: 80
      targetPort: 5678

(3) 포드 간 통신 테스트

프론트엔드 Pod에 접속하여 백엔드에 요청을 보냅니다.

kubectl exec -it <frontend-pod-name> -- sh
curl <http://backend-service>

결과로 "Hello from backend"가 출력되면 포드 간 통신이 성공적으로 설정된 것입니다.


2. Helm 설치 및 사용

Helm을 설치하고, 이를 통해 애플리케이션 배포를 템플릿화합니다.

(1) Helm 설치

brew install helm

(2) Nginx 배포 예제

Helm으로 Nginx를 배포하는 간단한 예제를 실행합니다.

helm repo add bitnami <https://charts.bitnami.com/bitnami>
helm install my-nginx bitnami/nginx

배포된 Nginx를 확인:

kubectl get all

3. CI/CD 연습

Jenkins를 Minikube 클러스터에 배포하고, 간단한 빌드 파이프라인을 설정합니다.

(1) Jenkins 설치

Helm을 사용해 Jenkins를 설치:

helm repo add jenkins <https://charts.jenkins.io>
helm repo update
helm install my-jenkins jenkins/jenkins

(2) Jenkins 초기 비밀번호 확인

kubectl get secret --namespace default my-jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode

(3) Jenkins 웹 인터페이스 접속

Jenkins를 외부에서 접근할 수 있도록 Service를 NodePort로 설정하거나 Port Forward를 사용합니다:

kubectl port-forward svc/my-jenkins 8080:8080

4. 모니터링 툴 추가

Prometheus와 Grafana를 설치해 쿠버네티스 클러스터를 모니터링합니다.

(1) Prometheus & Grafana 설치

Helm으로 설치:

helm repo add prometheus-community <https://prometheus-community.github.io/helm-charts>
helm repo update
helm install prometheus prometheus-community/kube-prometheus-stack

(2) Grafana 웹 인터페이스 접속

kubectl port-forward svc/prometheus-grafana 3000:80

Grafana 기본 계정:

  • 사용자: admin
  • 비밀번호: 설치 과정에서 출력된 값을 확인.

결론

  1. 포드 간 통신 실습 → 네트워킹 이해.
  2. Helm 설치 → 배포 템플릿화.
  3. CI/CD 연습 → Jenkins 파이프라인 구성.
  4. 모니터링 툴 추가 → 클러스터 상태 모니터링.
728x90