
본 장은 macOS 사용자를 대상으로 GitOps 실습 전 필요한 준비 과정을 정리한다. Docker Hub 계정은 chaany를 기준으로 예시를 제공한다.
2.1 Docker Hub 계정 준비
Docker Hub는 컨테이너 이미지를 관리/공유하는 대표 레지스트리 서비스다. macOS에서는 Docker Desktop을 통해 로컬 이미지를 빌드하고 Hub로 푸시할 수 있다.
- Docker Hub 가입: https://hub.docker.com/
- Docker Desktop 로그인(메뉴 → Sign in) 또는 CLI 로그인
# 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 클러스터 생성

# 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 테스트 배포

# 간단한 파드 배포
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 delete cluster --name myk8s
2.4 Docker Hub에 이미지 빌드 및 푸시 (계정: chaany)

아래 예시는 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 마이너 버전 호환
- Kubernetes v1.32 기준:
- 이미지 푸시 실패
docker login상태 확인, 저장소명/태그 확인, 네트워크 점검
- 포트 충돌
- kind
extraPortMappings에서hostPort변경 후 재생성
- kind
'스터디(Study) > CI·CD Study' 카테고리의 다른 글
| GitOps Cookbook 6장: 클라우드 네이티브 CI/CD (0) | 2025.10.25 |
|---|---|
| GitOps Cookbook 5장: 헬름 (0) | 2025.10.25 |
| GitOps Cookbook 4장: 커스터마이즈 (0) | 2025.10.18 |
| GitOps Cookbook 3장: 컨테이너 (0) | 2025.10.18 |
| GitOps Cookbook 1장: 소개 (0) | 2025.10.18 |
댓글