배포 파이프라인 구축 후 마주하게 되는 고민들

보안
배포를 위해 서버에서 Docker Hub 로그인을 해두면 특정 디렉토리에 접속 정보를 담은 파일이 생긴다.
또한 kube-config 파일도 관리자 권한의 인증서이기 때문에,
탈취되면 관리자 권한으로 쿠버네티스 클러스터에 API를 요청할 수 있게 된다.
따라서 1차적으로 아무나 서버에 들어갈 수 없도록 접근 보안을 잘 해둬야 하고,
또한 디스크에 암호화되지 않는 중요 정보를 남기지 않아야 한다.
이를 위해 중요 정보를 Jenkins Credential로 등록하여 암호화된 상태로 사용할 수 있다.
또한 파이프라인 내에서의 Docker 로그인 시에도 결국 파일이 생성되기 때문에,
배포가 끝나면 로그아웃을 하는 명령어를 요청하여 파일을 삭제해야 한다.
추가로 해당 파일의 암호화 기능을 제공하는 docker-credential-helpers를 사용할 수 있다.
컨테이너 이미지 누적
빌드를 계속 하다 보면 CI/CD서버에 컨테이너 이미지가 계속 쌓여서 디스크가 꽉 차게 된다.
따라서 컨테이너 빌드 및 업로드 이후 해당 이미지를 잘 삭제하도록 구성해야 한다.
또한 배포되는 노드에서도 이미지가 계속 쌓일 수 있는데,
쿠버네티스에서는 Garbage Collection을 통해 사용하지 않는 이미지는 자동으로 삭제한다.
네임스페이스
하나의 네임스페이스는 여러 App을 구성할 수 있고, Helm으로 Uninstall하더라도 네임스페이스가 삭제되지 않는다.
따라서 네임스페이스는 배포와 별도로 관리해 주는 것이 좋다.
Pod 기동 확인
배포 명령 실행 후 Pod가 정상적으로 기동되었는지 확인이 필요할 수 있다.
Helm에서 제공하는 wait 옵션을 활용하여 Pod가 완전히 기동되었는지 확인할 수 있다.
배포 시 업그레이드 누락
쿠버네티스는 Deployment.yaml 파일의 template 속성 밑으로 변경이 있어야만 업그레이드를 시작한다.
Helm의 annotations를 통해 template 속성 하위에 랜덤 값을 생성하여 배포 시 항상 업그레이드를 수행할 수 있다.
이미지 관리
개발 환경과 운영 환경의 차이에 따라 각 특성에 맞춰서 이미지 관리가 필요하다.
개발 환경
개발 환경은 배포가 자주 일어나고, 이미지 버전 관리가 필요 없다.
따라서 기본적으로는 아래와 같이 설정할 수 있다.
- image 태그: latest 혹은
- pullPolicy: Always
버전 관리가 필요 없으므로 태그는 가장 최신인 latest로 구성하고,
pullPolicy를 Always로 두어 동일한 태그여도 항상 Docker Hub에서 이미지를 가져와서 최신화한다.
이 때 태그가 바뀌지 않아 Deployment가 동일하여 배포가 안될 수 있기 때문에,
Helm의 annotations를 활용하여 배포가 동작하도록 구성한다.
운영 환경
운영 환경은 항상 계획적으로 배포를 수행하고, 이미지 버전 관리가 반드시 필요하다.
따라서 아래와 같이 설정하는 것이 좋다.
- image 태그: 배포 버전
- pullPolicy: ifNotPresent
pullPolicy가 ifNotPresent이면 노드에 해당 이미지가 존재하는 경우 그 이미지를 사용한다.
이미 있는 이미지를 다시 받아오는 것은 비효율적이기도 하지만,
운영 중에 Pod가 Scale-Out되는 경우 Docker Hub에 연결이 되지 않는 상황이더라도 정상 동작할 수 있다.
버전 관리되는 개발 환경
운영 환경처럼 개발 환경에서도 롤백이나 버전 관리가 필요할 수 있고,
이미지를 사용하는 제3자 입장에서는 latest 태그를 보면 최신 안정화 버전으로 착각할 가능성이 있다.
따라서 위와 같은 경우 아래와 같이 구성할 수도 있다.
- image 태그: 날짜, Git 커밋 ID, Jenkins 빌드 ID 등 고유한 값
- pullPolicy: ifNotPresent
배포가 자주 일어나기 때문에 태그에 고유한 속성을 추가하여 관리한다.
이 때는 이미지 태그 자체가 변경되므로 Helm의 annotations 설정이 불필요하다.
출처
https://inf.run/Ncohz
쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2 강의 | 일프로 - 인프런
일프로 | ⚓쿠버네티스(Kuberentes, Containerd, Docker Hub, Helm, Jenkins, Kustomize, ArgoCD) 🙇♀️아직 망설이시나요? 🙋♂️저만 믿고 따라오세요! 이론과 실습으로 당신의 실력을 ⭐어나더 레벨로 만
www.inflearn.com
'Kubernetes' 카테고리의 다른 글
[Kubernetes] ArgoCD Image Updater를 이용한 이미지 자동 배포 (1) | 2025.06.21 |
---|---|
[Kubernetes] ArgoCD 아키텍처 (0) | 2025.06.18 |
[Kubernetes] Helm과 Kustomize 비교 (0) | 2025.06.15 |
[Kubernetes] Jenkins를 활용한 Blue/Green 배포 (0) | 2025.06.14 |
[Kubernetes] 배포를 시작하기 전에 반드시 알아야 할 것들 (0) | 2025.06.12 |