스터디(Study)/CI·CD Study

GitOps Cookbook 2장: 실습 준비

Chann._.y 2025. 10. 18.
728x90

 

본 장은 macOS 사용자를 대상으로 GitOps 실습 전 필요한 준비 과정을 정리한다. Docker Hub 계정은 chaany를 기준으로 예시를 제공한다.


2.1 Docker Hub 계정 준비

Docker Hub는 컨테이너 이미지를 관리/공유하는 대표 레지스트리 서비스다. macOS에서는 Docker Desktop을 통해 로컬 이미지를 빌드하고 Hub로 푸시할 수 있다.

# CLI 로그인 (계정명: chaany)
docker login -u chaany

무료 계정은 공개 저장소 무제한, 비공개 저장소 1개(정책 변동 가능). Pull rate limit를 피하기 위해 인증 로그인 권장.


2.2 Git 저장소 준비

실습 예제 저장소를 로컬에 복제한다.

# 예제 저장소 복제
git clone https://github.com/gitops-cookbook/chapters.git
cd chapters

원본 예제: https://github.com/gitops-cookbook/gitops-cookbook-sc
원하면 개인 GitHub 계정으로 Fork 후 활용해도 된다.


2.3 kind 기반 로컬 쿠버네티스 클러스터 구축 (macOS)

kind(Kubernetes in Docker)는 Docker 컨테이너로 구성된 로컬 쿠버네티스 클러스터를 손쉽게 만든다.

2.3.1 필수 도구 설치

# 1) Docker Desktop 설치
brew install --cask docker
open -a Docker

# 2) kind 설치
brew install kind
kind --version

# 3) kubectl 설치
brew install kubernetes-cli
kubectl version --client=true

# 4) Helm 설치
brew install helm
helm version

# 5) (권장) CLI 유틸
brew install krew kubectx kube-ps1 k9s kubecolor

# 6) zsh alias 및 PATH 설정
echo 'alias k=kubectl' >> ~/.zshrc
echo 'alias kubectl=kubecolor' >> ~/.zshrc
echo 'compdef kubecolor=kubectl' >> ~/.zshrc
echo 'export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

2.3.2 kind 클러스터 생성

kind 클러스터 생성 및 리소스 현황 확인

# kubeconfig 백업
mkdir -p ~/.kube
[ -f ~/.kube/config ] && cp ~/.kube/config ~/.kube/config.bak

# 단일 컨트롤플레인 + 워커 1개, NodePort 포트 2개 개방
kind create cluster --name myk8s --image kindest/node:v1.32.8 --config - <<'EOF'
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 30000
    hostPort: 30000
  - containerPort: 30001
    hostPort: 30001
- role: worker
EOF

생성 후 상태 확인:

kind get clusters
kind get nodes
kubectl get nodes -o wide
kubectl get pods -A -o wide
kubectl cluster-info

2.3.3 nginx 테스트 배포

nginx 배포 및 배포 현황 체크, taint 체크

# 간단한 파드 배포
kubectl run nginx --image=nginx:alpine
kubectl get pods -owide

# 노드 Taints 확인 (kind 기본은 컨트롤플레인 스케줄 가능)
kubectl describe node | grep -i taints || echo "No taints"

2.3.4 클러스터 삭제(정리)

kind 클러스터 삭제

kind delete cluster --name myk8s

 


2.4 Docker Hub에 이미지 빌드 및 푸시 (계정: chaany)

chaany 계정의 start repository 및 push 되어 있는 Image

아래 예시는 chaany/start 이미지를 빌드 후 Docker Hub로 푸시한다.

# 작업 디렉터리 생성
mkdir -p ~/docker-test && cd ~/docker-test

# Dockerfile 작성
cat > Dockerfile <<'EOF'
FROM busybox
CMD echo "Hello world! This is my first Docker image."
EOF

# 이미지 빌드 (리포지토리: chaany/dev-test-app)
DOCKERID=chaany
DOCKERREPO=start
docker build -t ${DOCKERID}/${DOCKERREPO}:latest .

# 로컬 실행 테스트
docker run --rm ${DOCKERID}/${DOCKERREPO}:latest

# Docker Hub 로그인 (이미 로그인했다면 생략 가능)
docker login -u ${DOCKERID}

# 푸시
docker push ${DOCKERID}/${DOCKERREPO}:latest

# 확인
docker images | grep ${DOCKERID}/${DOCKERREPO}

태깅 팁: docker build -t <hub-user>/<repo-name>:<tag> . 또는 docker tag <local> <hub-user>/<repo>:<tag> 사용.


2.5 Docker Personal Access Token 생성(선택)

CI/CD나 비대화형 로그인에 유용하다.

1) Docker Hub → Account Settings → Security → Personal Access Tokens
2) 새 토큰 생성(권한/만료일 설정) → 안전한 장소에 보관

# 토큰 기반 로그인 예시 (표준입력 사용)
export DOCKER_USER=chaany
export DOCKER_TOKEN='YOUR_DOCKER_PAT'  # 실제 발급 토큰으로 교체
printf "%s" "$DOCKER_TOKEN" | docker login -u "$DOCKER_USER" --password-stdin

2.6 macOS kind 실습 요약 점검

# Docker / kind / k8s 기본 점검
docker info
docker ps
kind get clusters
kubectl cluster-info

# 네임스페이스 및 리소스 확인
kubectl get ns
kubectl get all -A

# kind 네트워크 확인
docker network ls
docker network inspect kind | jq

# kubeconfig 확인
test -f ~/.kube/config && sed -n '1,60p' ~/.kube/config

# 정리(필요 시)
kind delete cluster --name myk8s

참고

  • Docker Desktop 리소스 부족
    • 설정 → Resources → CPUs 4, Memory 8GB 이상 권장
  • kubectl 버전 스큐
    • Kubernetes v1.32 기준: kubectl은 보통 ±1 마이너 버전 호환
  • 이미지 푸시 실패
    • docker login 상태 확인, 저장소명/태그 확인, 네트워크 점검
  • 포트 충돌
    • kind extraPortMappings에서 hostPort 변경 후 재생성

 

728x90

댓글