,

인프라 학습(5) 내 프로젝트의 이미지

이 글의 목적

이 글에서는 Kubernetes 환경에 내 프로젝트의 Docker 이미지를 배포하고 도메인에 노출시키는 과정을 다룹니다. 프로젝트의 이미지를 만들고, Kubernetes에 올리는 방법을 중심으로 설명합니다.

한눈에 보기

이 글은 내 프로젝트 폴더에서 도커 이미지를 생성하고 Kubernetes에 배포하는 방법을 설명합니다. 또한, 발생할 수 있는 여러 문제와 그 해결책을 제공합니다.

이 단계의 목적: 내 프로젝트의 Docker 이미지를 생성하고 Kubernetes에 등록하여 도메인에 노출시킵니다.

절차

  1. 내 프로젝트의 폴더로 이동한다.
  2. 도메인에 내 프로그램이 노출되도록 잘 작업한다.해당 프로젝트를 Docker Image로 변환한다.
  3. Kubernetes에서 해당 도커 이미지를 잘 등록한다.

잘 되는지 확인한다.

핵심 문제

도메인에 내 프로그램을 노출시키자!

평행 문제

!!. PostgreSQL의 DB 서버를 별도로 만들고 싶다. > 다음 계획은 Prometheus

!!. kubernetes에 대한 배포 스크립트에서 설정 값들을 추상화해서 관리하고 싶다.

  1. ChatGPT한테 내 프로그램을 아래의 정보들만 가지고 실행 가능한 스크립트를 만들어 달라고 요청한다.
  1. 만들어준 배치 파일을 실행한다.

!!. 문제: API 테스트를 할 때 테스트로 만들어둔 Service가 구동 중이다

  • Kubernetes Engine > Workloads > hello-app 선택 후 Delete 버튼 클릭

!!!. 문제: 그래도 Pod라던가 설정 파일들이 남아 있다.

  • 아래의 명령어로 점검 및 삭제하기

!!. 문제: 파드의 복제된 개수가 3개이다 > 1개로 줄이기

성공!

  1. 잘 되는지 확인한다.

!!. 문제: Postman에서 아래와 같은 오류가 발생 (2시간 ..)

1.아래의 명령어를 입력한다

  • ingress 목록을 확인한다.kubectl get ingress -A

원인은 아직 hello-ingress가 남아 있었다.

ingress를 삭제한다.

  • kubectl delete ingress hello-ingress -n default

만약 이전 배치 스크립트에 ingress 관련 처리의 스크립트가 있어서 등록되었다면, 그러면 자동적으로 도메인과 연결이 된다.

!!. 문제: 위의 문제를 해결하고 난 이후에, API를 호출 했을 때 "Error:Client network socket disconnected before secure TLS connection was established" 오류 발생 (3시간 넘게 ㅜㅜ..)

원인: 발급했던 Global-Static-IP가 사용 중이라 연결에 충돌이 발생

결론

  • service.yaml 파일의 annotations: 내용의 cloud.google.com/neg: '{"ingress": true}' 내용이 추가되어야 한다.
  • kubectl rollout restart deployment <Your-Service-Name>의 다시시작 명령어를 실행한다.

성공!!!

흔한 함정

  • API 테스트 시 미처 삭제되지 않은 Ingress 설정으로 인한 오류.
  • Global-Static-IP 사용 중인 상태에서의 네트워크 충돌.

다음 단계

다음은 ArgoCD를 활용한 지속적 배포(CD) 환경 설정입니다.

  1. 1인프라 학습 시리즈 시작: Kubernetes, GKE, GitHub Actions, ArgoCD 연동 계획
  2. 2인프라 학습(2) – API 서버
  3. 3인프라 학습(3) – Kubernetes 실행
  4. 4인프라 학습(4-1) K8S를 GKE와 연결
  5. 5인프라 학습(4-3) 비용 최적화
  6. 6인프라 학습(4-4) 비용 최적화(2)
  7. 7인프라 학습(5) 내 프로젝트의 이미지읽는 중
  8. 8인프라 학습(6) Git Actions
  9. 9인프라 학습(7) ArgoCD

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다