kubectl을 활용한 쿠버네티스 기본 작업 실습

kubectl은 쿠버네티스 클러스터와 상호작용하기 위한 핵심 CLI 도구로, API 서버에 요청을 전달하여 리소스를 관리합니다. 이 도구는 애플리케이션 배포, 상태 확인, 확장, 업데이트 등 다양한 작업을 명령어 한 줄로 수행할 수 있게 해줍니다. kubectl 사용법에 익숙해지는 것은 쿠버네티스 운영의 첫걸음이라 할 수 있습니다.

1. 셸 자동 완성 기능 설정

작업 효율을 높이기 위해 bash 환경에서 kubectl 명령어 자동 완성을 활성화할 수 있습니다.
yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
위 설정을 통해 탭 키로 명령어, 하위 명령, 플래그 등을 자동 완성할 수 있습니다.

2. 주요 kubectl 명령어 구조 이해

kubectl의 전체 명령어 목록과 카테고리는 다음 명령으로 확인할 수 있습니다:
kubectl --help
주요 카테고리는 다음과 같습니다:
  • 기본 명령 (create, get, run): 초기 배포 및 조회
  • 수정 명령 (edit, patch, replace): 리소스 변경
  • 배포 관리 (rollout, scale): 롤아웃 제어 및 스케일링
  • 문제 해결 (logs, describe, exec): 디버깅 및 상태 점검
  • 클러스터 관리 (cluster-info, drain): 노드 및 클러스터 제어
각 하위 명령은 --help 옵션으로 세부 설명을 확인할 수 있습니다.

3. Nginx 애플리케이션 배포

Deployment를 사용해 nginx 인스턴스를 생성합니다. 아래 예시는 1개의 복제본을 가진 애플리케이션을 배포합니다.
kubectl run my-nginx \
  --image=nginx:1.14-alpine \
  --port=80 \
  --replicas=1
생성 후 Deployment 상태를 확인합니다:
kubectl get deployment my-nginx
결과에는 필요한 복제본 수(Desired), 현재 실행 중인 수(Current), 사용 가능한 수(Available)가 표시됩니다.

4. 파드(Pod) 정보 조회 및 접근

배포 후 생성된 파드를 확인합니다:
kubectl get pods -o wide
출력 결과에는 각 파드의 이름, IP 주소, 실행 중인 노드 위치가 포함됩니다. 내부 네트워크를 통해 직접 접근 가능합니다:
curl -I http://[POD_IP]
# 예: curl -I http://10.244.2.2
응답 코드 200을 받으면 정상 동작함을 의미합니다.

5. 서비스(Service)를 통한 외부 노출

파드는 일시적일 수 있으므로, 안정적인 네트워크 엔드포인트를 제공하기 위해 Service를 생성합니다.
kubectl expose deployment my-nginx \
  --name=web-svc \
  --port=80 \
  --target-port=80 \
  --type=NodePort
NodePort 유형은 클러스터 내 모든 노드의 특정 고정 포트(예: 30757)를 열어 외부에서 접근할 수 있게 합니다. 서비스 정보를 확인합니다:
kubectl get svc web-svc
외부에서는 http://[NODE_IP]:[NODE_PORT] 형태로 접근이 가능합니다.

6. 파드 삭제 시 동작 관찰

현재 실행 중인 파드를 수동으로 삭제해 보겠습니다:
kubectl delete pod [POD_NAME]
잠시 후 다시 파드 목록을 확인하면 새로운 파드가 자동으로 생성된 것을 확인할 수 있습니다. 이는 Deployment가 지정된 복제본 수를 유지하려는 특성 때문입니다.
kubectl get pods -w
-w 플래그는 실시간으로 상태 변화를 모니터링합니다.

7. 레이블 기반 연결 구조 이해

Service는 레이블 셀렉터(selector)를 통해 대상 파드를 동적으로 선택합니다. 다음 명령으로 이를 확인할 수 있습니다:
kubectl describe svc web-svc
# 출력 예시: Selector: run=my-nginx
새로 생성된 파드도 동일한 레이블을 가지고 있어 자동으로 서비스와 연결됩니다:
kubectl get pod [NEW_POD_NAME] --show-labels

8. 애플리케이션 확장 및 축소

kubectl scale 명령을 사용해 복제본 수를 조정합니다. 확장:
kubectl scale deployment my-nginx --replicas=5
축소:
kubectl scale deployment my-nginx --replicas=3
각 과정에서 파드의 생성/종료가 자동으로 처리됩니다.

9. 롤링 업데이트 및 롤백

이미지를 새 버전으로 업데이트하면서 가동 중단 없이 배포할 수 있습니다:
kubectl set image deployment/my-nginx \
  nginx=nginx:1.15-alpine \
  --record
--record 옵션은 변경 사항을 어노테이션으로 저장하여 추후 추적 가능하게 합니다. 업데이트 진행 상황 확인:
kubectl rollout status deployment/my-nginx
문제 발생 시 이전 버전으로 즉시 롤백:
kubectl rollout undo deployment/my-nginx
완료 후 파드의 이미지 버전을 확인하면 다시 1.14-alpine으로 되돌아간 것을 알 수 있습니다.

10. 요약: 핵심 명령어

  • kubectl run: 간단한 배포 생성
  • kubectl get: 리소스 상태 조회
  • kubectl expose: 서비스 생성 및 외부 노출
  • kubectl describe: 리소스 상세 정보 분석
  • kubectl scale: 복제본 수 조정
  • kubectl set image: 이미지 업데이트
  • kubectl rollout undo: 이전 상태로 복구
이러한 명령어들은 YAML 매니페스트를 사용하지 않고도 빠르게 테스트하고 검증할 수 있는 강력한 도구입니다. 하지만 프로덕션 환경에서는 선언형 구성 파일(YAML) 기반의 관리 방식을 권장합니다.

태그: kubectl 쿠버네티스 deployment Service 롤링업데이트

7월 26일 23:24에 게시됨