13년차의 서버실

서버, 인프라, 홈랩 기술 블로그

[태그:] kubectl 사용법

  • [Kubernetes] 클라이언트 비교: Lens, K9s, kubectl 선택 가이드

    [Kubernetes] 클라이언트 비교: Lens, K9s, kubectl 선택 가이드

    [Kubernetes] 클라이언트 비교: Lens, K9s, kubectl 선택 가이드

    Kubernetes 클라이언트 비교가 왜 중요하냐고 물으시면, 운영 환경이 조금만 커져도 답이 바로 나옵니다. 파드(Pod, 컨테이너 실행 단위) 하나 상태 보는 건 쉬운데, 네임스페이스(Namespace, 리소스 격리 단위) 여러 개를 오가고 로그를 보고 이벤트를 확인하고 배포 상태까지 챙기려면 Kubernetes 관리 도구 선택이 꽤 중요하거든요. 저도 처음엔 kubectl만 붙잡고 버텼었는데, 실제로 써보니까 Lens, K9s, kubectl은 서로 경쟁 관계라기보다 역할이 다른 도구에 더 가깝더라고요. 오늘은 제가 홈랩과 실무에서 겪었던 흐름을 바탕으로, 어떤 상황에서 무엇을 고르면 덜 삽질하는지 정리해보겠습니다.

    특히 이 글은 단순한 스펙 나열이 아니라, Kubernetes 클라이언트 비교 관점에서 실제 운영 감각을 중심으로 풀어볼 생각입니다. 혹시 여러분도 'GUI가 편하긴 한데 결국 터미널로 돌아오게 되던데요?' 같은 경험 있으신가요? 저도 딱 그랬습니다 ㅎㅎ

    Lens, K9s, kubectl이 각각 어느 레이어에서 관리 경험을 제공하는지 한눈에 보여주는 개요 이미지입니다.

    Kubernetes 클라이언트 비교, 먼저 큰 그림부터 보겠습니다

    쉽게 말해 이렇습니다.

    • kubectl: Kubernetes 공식 CLI(Command Line Interface, 명령줄 도구)입니다.
    • K9s: 터미널 기반 TUI(Text User Interface, 텍스트 UI)로 클러스터 상태를 빠르게 탐색하게 도와줍니다.
    • Lens: GUI(Graphical User Interface, 그래픽 화면 기반) 중심으로 리소스를 시각적으로 관리하기 좋습니다.

    여기서 중요한 포인트가 하나 있습니다. 세 도구 모두 결국 kubeconfig(Kubernetes 접속 설정 파일)를 기반으로 클러스터에 접근하는 경우가 많다는 점입니다. 즉, 접근 권한과 컨텍스트(context, 현재 대상 클러스터/네임스페이스 설정)가 핵심이고, 겉모습만 다르다고 생각하시면 이해가 빠릅니다.

    Lens, K9s, kubectl 차이점은 어디서 체감될까요?

    1. kubectl 사용법이 기본기가 되는 이유

    kubectl은 결국 기준점입니다. Deployment(디플로이먼트, 배포 리소스), Service(서비스, 네트워크 노출 리소스), Ingress(인그레스, 외부 트래픽 진입점) 같은 객체를 가장 정확하게 다루기 좋거든요. 자동화 스크립트나 CI/CD에서도 거의 기본 전제로 깔립니다.

    제가 직접 해보니 장애 상황에서는 결국 kubectl로 돌아오게 되더라고요. 이유는 단순합니다. 로그, describe, events, yaml 출력까지 가장 세밀하게 볼 수 있기 때문입니다.

    2. K9s가 빛나는 순간

    K9s는 '터미널 안에서 빠르게 둘러보는 맛'이 있습니다. 방향키와 단축키로 파드 이동하고, 로그 보고, 리소스 상태를 훑는 흐름이 상당히 빠릅니다. SSH로 바로 들어가서 점검하는 환경에서는 특히 강합니다. GUI가 없는 서버 점검 환경에서는 진짜 편하더라고요.

    3. Lens가 편한 이유

    Lens는 시각화가 좋습니다. 여러 리소스를 화면에서 관계적으로 보기가 쉽고, 초보자도 진입 장벽이 낮은 편입니다. 특히 처음 Kubernetes를 접하는 분들은 YAML만 보는 것보다 상태를 한 화면에서 확인하는 방식이 훨씬 이해가 빠를 수 있습니다.

    다만 GUI가 편하다고 해서 운영의 본질이 쉬워지는 건 아닙니다. 여기서 많이 헷갈리시더라고요. 화면은 친절하지만, 권한 문제나 리소스 의미를 모르면 결국 판단은 사람이 해야 하거든요.

    쿠버네티스 관리 도구 비교 표로 정리해보겠습니다

    항목 kubectl K9s Lens
    형태 CLI TUI GUI
    학습 난이도 초반엔 높음 중간 낮음
    속도 익숙하면 매우 빠름 탐색이 빠름 화면 기반 확인이 편함
    자동화 적합성 매우 높음 낮음 낮음
    로그/이벤트 심층 분석 강함 강함 보통 이상
    원격 SSH 환경 매우 적합 매우 적합 제한적
    입문자 친화성 낮음 중간 높음
    추천 대상 운영자, 자동화 담당자 터미널 선호 운영자 초보자, 시각적 관리 선호자

    Lens K9s 비교만 놓고 보면, 초반 적응은 Lens가 쉽고 장기 운영 효율은 K9s가 더 손에 붙는 경우가 많습니다. 하지만 kubectl이 빠지면 결국 한계가 옵니다. 이건 꽤 중요합니다.

    실전 구현: kubectl, K9s, Lens를 같은 흐름에서 써보기

    이론만 보면 감이 잘 안 오죠. 그래서 간단한 점검 흐름으로 묶어보겠습니다. 예시는 특정 배포가 정상인지 확인하는 상황입니다.

    1. 현재 컨텍스트와 네임스페이스를 확인합니다.
    2. 배포와 파드 상태를 봅니다.
    3. 문제가 있는 파드 로그와 이벤트를 확인합니다.
    4. 필요하면 GUI나 TUI에서 리소스 관계를 함께 봅니다.

    1. kubectl로 기본 점검하기

    kubectl config get-contexts
    kubectl config current-context
    kubectl get ns
    kubectl get deploy -A
    kubectl get pods -A -o wide

    처음엔 이게 뭔가 싶었는데, 사실 운영자는 이 네 줄만 자주 써도 클러스터 현재 상태를 꽤 빨리 파악할 수 있습니다. 특히 current-context를 먼저 보는 습관은 꼭 들이시는 걸 추천합니다. 잘못된 클러스터에 명령 넣는 사고, 생각보다 자주 납니다.

    2. 특정 애플리케이션 문제 좁혀가기

    kubectl get pods -n production
    kubectl describe pod myapp-abc123 -n production
    kubectl logs myapp-abc123 -n production --tail=100
    kubectl get events -n production --sort-by=.metadata.creationTimestamp

    실제로 써보니까 장애 대응에서 제일 중요한 건 '무엇이 실패했는가'보다 '어디서부터 실패했는가'를 빠르게 찾는 거였습니다. describe 결과에서 이벤트를 보고, 로그에서 에러 패턴을 보고, 리소스 부족인지 이미지 풀(image pull) 실패인지 분리하는 게 핵심입니다.

    Kubernetes 클라이언트 비교에서 kubectl과 K9s 사용 장면 이미지

    운영자가 터미널 기반으로 파드 상태를 점검하고 로그를 추적하는 실전 흐름을 보여주는 이미지입니다.

    3. K9s로 빠르게 탐색하기

    k9s

    K9s는 실행 자체는 단순합니다. 다만 익숙해지려면 머릿속에 동선이 생겨야 합니다. 보통 저는 이런 순서로 봤습니다.

    1. 네임스페이스를 맞춥니다.
    2. Pods 화면에서 재시작 횟수와 상태를 봅니다.
    3. 문제 파드를 선택해 로그와 describe 성격의 정보를 확인합니다.
    4. 리소스 사용량이나 관련 객체로 이동합니다.

    SSH 세션 하나에서 다 처리되는 게 장점입니다. 홈랩에서 VM 여러 대 만질 때는 이 방식이 정말 편했어요. 마우스 손 안 대도 되니까 흐름이 끊기지 않거든요.

    4. Lens로 시각적으로 확인하기

    Lens는 클러스터를 등록한 뒤 Workloads(워크로드), Pods, Events, Config, Networking 같은 메뉴를 통해 탐색하는 방식입니다. 제가 초급자 분들 온보딩할 때는 Lens를 먼저 보여드린 적이 많았습니다. '아, Kubernetes 안에서 이런 객체들이 연결되는구나'가 빨리 보이기 때문입니다.

    예를 들어 서비스 장애가 났을 때, 파드만 보는 게 아니라 서비스와 엔드포인트(endpoint), 인그레스까지 같이 봐야 할 때가 있거든요. 이때 GUI의 장점이 분명히 있습니다.

    Kubernetes 클라이언트 비교를 위한 GUI 관리 도구 화면 이미지

    워크로드, 서비스, 인그레스 관계를 시각적으로 확인하는 GUI 관리 흐름을 표현한 이미지입니다.

    어떤 사람에게 어떤 도구가 맞을까요?

    kubectl이 맞는 경우

    • 운영 자동화와 스크립트 작업이 많습니다.
    • CI/CD 파이프라인과 연동해야 합니다.
    • 장애 원인을 깊게 파고드는 편입니다.
    • Kubernetes 클라이언트 도구의 기준 문법을 익히고 싶습니다.

    K9s가 맞는 경우

    • 터미널 작업이 익숙합니다.
    • 원격 서버나 SSH 환경에서 자주 일합니다.
    • 클러스터 탐색 속도를 중요하게 봅니다.
    • 마우스보다 키보드가 편합니다.

    Lens가 맞는 경우

    • Kubernetes 입문 단계입니다.
    • 팀원들과 화면 공유하며 상태를 설명해야 합니다.
    • 리소스 관계를 시각적으로 보는 게 편합니다.
    • 한눈에 파악되는 대시보드 느낌을 선호합니다.

    ⚠️ 실제로 자주 겪는 문제와 해결 방법

    여기서는 제가 삽질 좀 했던 부분을 솔직하게 적어보겠습니다. 이런 건 문서보다 경험에서 더 빨리 배우게 되더라고요.

    1. 컨텍스트(context) 착각

    가장 위험합니다. 개발 클러스터인 줄 알고 운영 클러스터를 보고 있던 적, 저도 있었습니다. 다행히 큰 사고는 안 났지만 식은땀이 나더라고요.

    kubectl config current-context
    kubectl config view --minify

    명령 전후로 현재 컨텍스트를 확인하는 습관이 중요합니다. 특히 여러 kubeconfig를 합쳐 쓰는 환경이라면 더 그렇습니다.

    2. 권한 문제(RBAC, Role-Based Access Control)

    Lens든 K9s든 kubectl이든, 권한이 없으면 안 보이거나 실패합니다. GUI가 예쁘게 보여도 백엔드는 결국 API 서버 권한 체크를 거치거든요.

    kubectl auth can-i get pods -n production
    kubectl auth can-i list secrets -n production

    화면 문제처럼 보이는데 사실은 권한 문제인 경우가 꽤 많습니다. 이거 진짜 자주 나옵니다.

    3. 로그만 보고 끝내는 실수

    처음엔 로그만 파봤었는데, 나중에 보니 이벤트(event) 쪽이 더 직접적인 경우가 많았습니다. 예를 들어 스케줄링 실패, 이미지 풀 실패, 프로브(probe) 실패 같은 건 이벤트에 힌트가 잘 남거든요.

    4. GUI 의존도가 너무 높아지는 문제

    Lens가 편해서 계속 쓰다 보면, 막상 터미널만 가능한 환경에서 당황할 수 있습니다. 그래서 제 추천은 이렇습니다. 입문은 Lens, 숙련은 K9s, 기준은 kubectl. 이 조합이 제일 덜 흔들렸습니다.

    검증: 실제로 무엇이 더 빨랐나?

    정량 벤치마크처럼 수치를 들이대고 싶진 않습니다. 확실하지 않은 숫자는 오히려 판단을 흐리거든요. 대신 체감 기준으로 말씀드리면 이렇습니다.

    • 처음 구조를 이해하는 속도는 Lens가 빨랐습니다.
    • 운영 중 다수 리소스를 훑는 속도는 K9s가 좋았습니다.
    • 정확한 원인 분석과 재현 가능한 절차 정리는 kubectl이 가장 강했습니다.

    제가 홈랩에서 여러 네임스페이스를 오가며 점검할 때도 비슷했습니다. 처음 상태 확인은 K9s나 Lens가 편했는데, 최종 확인 커맨드와 기록은 결국 kubectl로 남기게 되더라고요. 여기서 중요한 포인트! 빠른 확인 도구와 정확한 제어 도구는 다를 수 있습니다.

    Kubernetes 클라이언트 비교 결과를 정리한 운영 대시보드 이미지

    파드 상태, 이벤트, 로그 확인 결과가 정리된 운영 검증 화면을 묘사한 이미지입니다.

    정리: 제 선택은 하나가 아니라 조합입니다

    제 결론은 꽤 명확합니다. Kubernetes 클라이언트 비교를 할 때 하나만 고르려고 하면 오히려 답이 꼬입니다. kubectl은 반드시 익혀야 하고, 그 위에 K9s 또는 Lens를 얹는 방식이 가장 현실적입니다.

    • 초보자라면: Lens로 구조를 익히고 kubectl 사용법을 함께 배우세요.
    • 터미널 친화적 운영자라면: K9s와 kubectl 조합이 오래 갑니다.
    • 자동화까지 고려한다면: kubectl 중심 사고는 필수입니다.

    저도 처음엔 '어차피 GUI 있으면 되지 않나?' 싶었는데, 실제로 써보니까 클러스터를 깊게 이해할수록 kubectl 비중이 커졌습니다. 반대로 팀 협업이나 빠른 시각 확인은 Lens가 좋았고요. K9s는 그 사이에서 정말 실용적이었습니다. 이 셋은 배척할 대상이 아니라, 상황에 따라 꺼내 쓰는 공구함에 더 가깝습니다.

    세 도구의 장단점과 추천 대상, 사용 시나리오를 한 장으로 요약한 비교 인포그래픽 이미지입니다.

    FAQ: 많이 받는 질문

    Q1. Kubernetes 입문자는 무엇부터 시작하면 좋을까요?

    Lens로 객체 관계를 익히면서 kubectl 기본 명령을 같이 익히는 걸 추천합니다. 시각적 이해와 명령 기반 이해를 같이 가져가야 오래 갑니다.

    Q2. Lens K9s 비교에서 더 운영자다운 도구는 무엇인가요?

    터미널에 익숙하다면 K9s가 더 손에 붙을 가능성이 큽니다. 다만 팀 내 공유와 설명은 Lens가 더 편할 수 있습니다.

    Q3. kubectl만으로도 충분한가요?

    충분합니다. 다만 충분하다는 것과 편하다는 것은 다릅니다. 그래서 많은 분들이 K9s나 Lens를 보조 도구로 함께 씁니다.

    마무리

    오늘은 Kubernetes 클라이언트 비교라는 주제로 Lens, K9s, kubectl을 함께 봤습니다. 정답은 사람마다 조금 다르지만, 기준점은 분명합니다. 제어와 자동화는 kubectl, 빠른 탐색은 K9s, 시각적 이해는 Lens입니다. 이 프레임만 잡아도 도구 선택이 훨씬 쉬워집니다.

    다음 글에서는 kubectl 사용법을 조금 더 실전적으로 파서, 운영자가 자주 쓰는 조회 명령과 로그/이벤트 확인 루틴을 따로 정리해볼 예정입니다. 이전 글에서 다뤘던 홈랩 클러스터 구성 내용과 함께 보시면 더 이해가 잘 되실 겁니다. 혹시 지금 어떤 도구를 메인으로 쓰고 계신가요? 써보면 취향도 분명히 갈리더라고요.

  • [k8s] kubectl 명령어 완벽 가이드: 클러스터 관리 필수 명령어

    kubectl 명령어, 13년 경력자도 매일 찾아보는 이유

    쿠버네티스(Kubernetes)를 처음 배울 때 가장 먼저 맞닥뜨리는 게 바로 kubectl 명령어입니다. 저도 처음엔 이게 뭔가 싶었거든요. 도커(Docker)는 어느 정도 익숙해졌는데, kubectl 앞에서는 또 새로 공부해야 하나 싶은 막막함이 있었어요.

    근데 솔직히 말씀드리면, 13년 경력인 저도 지금도 자주 찾아봅니다. 워낙 옵션이 많고, 상황마다 쓰는 명령어가 다르거든요. 그래서 이번엔 제가 실무에서 진짜 자주 쓰는 명령어들, 그리고 “이게 왜 안 되지?”하고 삽질했던 경험까지 싹 정리해봤습니다.

    kubectl 사용법을 제대로 익혀두면 쿠버네티스 클러스터 관리가 훨씬 수월해집니다. 이 글에서는 클러스터 조회부터 디버깅, 리소스 관리까지 실무에서 바로 쓸 수 있는 필수 명령어들을 카테고리별로 정리해드릴게요.

    kubectl 명령어는 크게 조회, 생성/수정, 삭제, 디버깅, 클러스터 관리 카테고리로 나뉩니다. 각 카테고리별로 필수 명령어를 익혀두면 쿠버네티스 클러스터 관리가 훨씬 쉬워집니다.


    kubectl이 뭔지 잠깐만 짚고 가요

    쉽게 말해, kubectl은 쿠버네티스 클러스터에 명령을 내리는 CLI(Command Line Interface, 명령줄 인터페이스) 도구입니다. 쿠버네티스 API 서버와 통신하면서 파드(Pod), 서비스(Service), 디플로이먼트(Deployment) 같은 리소스들을 만들고, 조회하고, 수정하고, 삭제하는 역할을 하죠.

    기본 구조는 이렇습니다:

    kubectl [명령어] [리소스 타입] [리소스 이름] [옵션]

    예를 들어 kubectl get pods my-app이라고 하면, “파드(pods) 중에서 my-app이라는 걸 조회(get)해줘”라는 뜻이에요. 구조 자체는 단순한데, 옵션이 어마어마하게 많아서 처음엔 좀 헷갈립니다 ㅎㅎ.


    1. 클러스터 기본 정보 조회 명령어

    가장 먼저 클러스터 상태부터 확인해야죠. 제가 새 환경에 접속하면 제일 먼저 치는 명령어들입니다.

    1-1. 클러스터 정보 확인

    # 클러스터 기본 정보
    kubectl cluster-info
    
    # 현재 컨텍스트(context, 연결된 클러스터) 확인
    kubectl config current-context
    
    # 모든 컨텍스트 목록
    kubectl config get-contexts
    
    # 컨텍스트 전환 (멀티 클러스터 관리 시 필수!)
    kubectl config use-context [컨텍스트명]
    
    # API 서버 버전 확인
    kubectl version --short

    💡 팁: 멀티 클러스터 환경에서 컨텍스트 전환을 자주 하다 보면 실수로 운영 클러스터에 명령어를 날리는 경우가 생깁니다. 저도 한 번 그랬거든요… 그래서 저는 프롬프트에 현재 컨텍스트를 항상 표시해두는 편이에요.

    1-2. 노드(Node) 조회

    # 노드 목록 조회
    kubectl get nodes
    
    # 노드 상세 정보 (IP, OS, 역할 포함)
    kubectl get nodes -o wide
    
    # 특정 노드 상세 정보
    kubectl describe node [노드명]
    
    # 노드 리소스 사용량 (metrics-server 설치 필요)
    kubectl top nodes

    2. 파드(Pod) 관련 필수 명령어

    실무에서 가장 많이 쓰는 건 역시 파드 관련 명령어입니다. 파드는 쿠버네티스에서 컨테이너가 실행되는 가장 작은 단위거든요.

    2-1. 파드 조회

    # 현재 네임스페이스의 파드 목록
    kubectl get pods
    
    # 모든 네임스페이스의 파드 조회 (전체 현황 파악 시 유용)
    kubectl get pods --all-namespaces
    # 또는 축약형
    kubectl get pods -A
    
    # 특정 네임스페이스의 파드 조회
    kubectl get pods -n [네임스페이스명]
    
    # IP, 노드 정보 포함해서 조회
    kubectl get pods -o wide
    
    # 실시간 상태 변화 감시 (watch)
    kubectl get pods -w
    
    # 특정 라벨(label)로 필터링
    kubectl get pods -l app=my-app

    2-2. 파드 상세 정보 및 로그

    # 파드 상세 정보 (Events 섹션이 트러블슈팅의 핵심!)
    kubectl describe pod [파드명]
    
    # 파드 로그 조회
    kubectl logs [파드명]
    
    # 실시간 로그 스트리밍 (tail -f 같은 느낌)
    kubectl logs -f [파드명]
    
    # 최근 100줄만 조회
    kubectl logs --tail=100 [파드명]
    
    # 멀티 컨테이너 파드에서 특정 컨테이너 로그
    kubectl logs [파드명] -c [컨테이너명]
    
    # 이전에 크래시된 컨테이너 로그 (재시작 원인 파악 시 필수)
    kubectl logs [파드명] --previous

    ⚠️ 주의: --previous 옵션은 파드가 재시작된 경우에만 동작합니다. 파드가 삭제되고 새로 생성된 경우엔 이전 로그를 볼 수 없어요. 로그 영구 보존이 필요하면 Loki나 Elasticsearch 같은 로그 수집 시스템을 별도로 구축해야 합니다.

    2-3. 파드 내부 접속 및 실행

    # 파드 내부에 bash 셸로 접속
    kubectl exec -it [파드명] -- /bin/bash
    
    # bash가 없는 경우 (alpine 기반 이미지 등)
    kubectl exec -it [파드명] -- /bin/sh
    
    # 파드 안에서 단일 명령어 실행
    kubectl exec [파드명] -- env
    
    # 특정 컨테이너에 접속
    kubectl exec -it [파드명] -c [컨테이너명] -- /bin/bash

    처음엔 -it 옵션이 뭔가 싶었는데, -i는 interactive(대화형), -t는 tty(터미널 할당)입니다. 셸로 접속할 때는 둘 다 붙여줘야 제대로 동작해요.


    3. 리소스 생성 및 수정 명령어

    조회만 할 줄 알면 반쪽짜리죠. 실제로 리소스를 만들고 수정하는 kubectl 명령어도 알아야 합니다.

    3-1. 리소스 생성

    # YAML 파일로 리소스 생성
    kubectl apply -f [파일명.yaml]
    
    # 디렉토리 내 모든 YAML 적용
    kubectl apply -f ./manifests/
    
    # URL에서 직접 적용 (공식 예제 실습 시 자주 씀)
    kubectl apply -f https://example.com/manifest.yaml
    
    # 명령형으로 디플로이먼트 생성 (빠른 테스트용)
    kubectl create deployment my-app --image=nginx:1.21
    
    # 네임스페이스 생성
    kubectl create namespace my-namespace

    💡 apply vs create 차이: create는 이미 존재하면 에러가 나고, apply는 없으면 생성, 있으면 업데이트합니다. 실무에서는 apply를 훨씬 많이 씁니다. GitOps 방식으로 쿠버네티스 클러스터를 관리할 때 특히 유용하더라고요.

    3-2. 리소스 수정

    # 리소스를 에디터로 직접 수정
    kubectl edit deployment [디플로이먼트명]
    
    # 이미지 변경 (롤링 업데이트 트리거)
    kubectl set image deployment/[디플로이먼트명] [컨테이너명]=[새이미지:태그]
    
    # 레플리카(replica, 복제본) 수 조정
    kubectl scale deployment [디플로이먼트명] --replicas=3
    
    # 특정 필드를 JSON Patch로 수정
    kubectl patch deployment [디플로이먼트명] -p '{"spec":{"replicas":5}}'

    kubectl apply 명령어가 실행되면 API 서버를 통해 etcd에 저장되고, 컨트롤러가 원하는 상태로 파드를 조정하는 전체 흐름을 나타낸 다이어그램입니다.

    3-3. 롤아웃(Rollout, 배포) 관리

    # 배포 상태 확인
    kubectl rollout status deployment/[디플로이먼트명]
    
    # 배포 이력 조회
    kubectl rollout history deployment/[디플로이먼트명]
    
    # 이전 버전으로 롤백 (장애 시 생명줄!)
    kubectl rollout undo deployment/[디플로이먼트명]
    
    # 특정 버전으로 롤백
    kubectl rollout undo deployment/[디플로이먼트명] --to-revision=2
    
    # 배포 일시 중지/재개
    kubectl rollout pause deployment/[디플로이먼트명]
    kubectl rollout resume deployment/[디플로이먼트명]

    롤백 명령어는 진짜 실무에서 몇 번 써봤는데, 쓸 때마다 심장이 쫄깃해집니다 ㅎㅎ. rollout undo 치고 배포 상태 보면서 “제발 됩시다…”하는 그 느낌 있잖아요.


    4. 서비스 및 네트워크 관련 명령어

    4-1. 서비스 조회 및 포트 포워딩

    # 서비스 목록 조회
    kubectl get services
    # 축약형
    kubectl get svc
    
    # 서비스 상세 정보
    kubectl describe svc [서비스명]
    
    # 포트 포워딩 (로컬에서 클러스터 내부 서비스 접근 시)
    kubectl port-forward svc/[서비스명] 8080:80
    
    # 파드에 직접 포트 포워딩
    kubectl port-forward pod/[파드명] 8080:80
    
    # 인그레스(Ingress) 조회
    kubectl get ingress
    kubectl get ing

    포트 포워딩은 개발/디버깅 환경에서 정말 자주 씁니다. 로드밸런서 없이 로컬에서 서비스를 바로 테스트할 수 있거든요. 실무에서 운영 환경 직접 접근이 막혀있을 때 이만큼 편한 게 없더라고요.


    5. kubectl 디버깅 필수 명령어

    이 섹션이 사실 제일 중요합니다. 쿠버네티스 클러스터 관리하다 보면 문제가 안 생기는 날이 없거든요. kubectl 디버깅 명령어를 제대로 알아두면 장애 시간을 확 줄일 수 있습니다.

    5-1. 이벤트 조회

    # 클러스터 이벤트 전체 조회 (문제 파악의 시작)
    kubectl get events
    
    # 특정 네임스페이스 이벤트
    kubectl get events -n [네임스페이스]
    
    # 시간순 정렬
    kubectl get events --sort-by='.lastTimestamp'
    
    # Warning 이벤트만 필터링
    kubectl get events --field-selector type=Warning

    5-2. 리소스 사용량 및 상태 확인

    # 파드별 CPU/메모리 사용량 (metrics-server 필요)
    kubectl top pods
    kubectl top pods -A
    
    # 특정 네임스페이스
    kubectl top pods -n [네임스페이스]
    
    # 리소스 할당량 확인
    kubectl describe resourcequota -n [네임스페이스]
    
    # PVC(PersistentVolumeClaim, 영구 볼륨 요청) 상태
    kubectl get pvc
    kubectl get pv

    5-3. 임시 디버그 파드 실행

    # 네트워크 디버깅용 임시 파드 실행
    kubectl run debug-pod --image=busybox --rm -it --restart=Never -- sh
    
    # curl이 있는 이미지로 HTTP 테스트
    kubectl run curl-test --image=curlimages/curl --rm -it --restart=Never -- sh
    
    # 특정 노드에 디버그 파드 배치
    kubectl run debug-pod --image=busybox --rm -it --restart=Never \
      --overrides='{"spec":{"nodeName":"[노드명]"}}' -- sh
  • [k8s] kubectl 플러그인 추천: 생산성을 높이는 필수 도구 활용법

    [k8s] kubectl 플러그인 추천: 생산성을 높이는 필수 도구 활용법

    kubectl만으로는 부족했던 날들

    쿠버네티스(Kubernetes)를 쓰다 보면 kubectl이 얼마나 강력한 도구인지 금방 느끼게 됩니다. 근데 동시에 “이걸 좀 더 편하게 할 수 없나?”라는 생각도 같이 오더라고요. 저도 처음 몇 년은 그냥 기본 kubectl에 alias 좀 걸어놓고 썼는데, 팀원이 플러그인 쓰는 걸 보고 나서 세상이 달라 보였습니다. 😅

    특히 여러 클러스터를 동시에 관리하거나, 네임스페이스를 자주 전환하거나, 파드 로그를 한꺼번에 봐야 할 때 기본 kubectl만으로는 손이 너무 많이 가거든요. 오늘은 제가 실제로 쓰고 있는 kubectl 플러그인들을 소개해 드리려 합니다. 생산성이 진짜로 달라지는 것들만 골랐으니 한번 같이 살펴봐요.

    krew를 중심으로 한 kubectl 플러그인 생태계 구조 다이어그램

    kubectl 플러그인 생태계 — krew를 중심으로 다양한 플러그인이 연결되는 구조. 기본 kubectl에서 플러그인을 통해 기능이 확장되는 흐름을 보여줍니다.

    krew란 뭔가요? kubectl 플러그인 패키지 매니저

    kubectl 플러그인 얘기를 하려면 먼저 krew를 알아야 합니다. 쉽게 말해, kubectl 플러그인을 위한 apt나 brew 같은 패키지 매니저예요. kubectl은 $PATH에 kubectl-플러그인이름 형태의 실행 파일이 있으면 자동으로 서브커맨드로 인식하는 구조거든요. krew는 이 kubectl 플러그인들을 설치·업데이트·삭제하는 걸 한 곳에서 관리해 줍니다.

    공식 플러그인 인덱스에 200개가 넘는 플러그인이 등록돼 있고, 커뮤니티에서 계속 새로운 게 올라오고 있어요. 저도 처음엔 “그냥 직접 바이너리 받으면 되는 거 아닌가?” 싶었는데, 여러 플러그인을 쓰다 보니 krew 없이는 못 살겠더라고요 ㅎㅎ.

    krew 설치 방법

    macOS/Linux 기준으로 설치 방법은 아래와 같습니다. 공식 문서에서 제공하는 방법 그대로예요.

    # krew 설치 (bash/zsh 기준)
    (
      set -x; cd "$(mktemp -d)" &&
      OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
      ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/')" &&
      KREW="krew-${OS}_${ARCH}" &&
      curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz" &&
      tar zxvf "${KREW}.tar.gz" &&
      ./${KREW} install krew
    )
    
    # PATH에 krew bin 추가 (~/.bashrc 또는 ~/.zshrc에 추가)
    export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
    
    # 설치 확인
    kubectl krew version

    설치 후 source ~/.zshrc 또는 터미널 재시작을 해줘야 PATH가 적용됩니다. 이 부분에서 한 번씩 헤매시는 분들이 있더라고요. ⚠️ PATH 적용 안 하면 플러그인이 인식 안 됩니다.

    꼭 써야 할 kubectl 플러그인 추천 목록

    이제 본론입니다. 제가 홈랩에서도, 실무에서도 실제로 쓰고 있는 플러그인들이에요. 설치 명령어와 기본 사용법을 같이 정리했습니다.

    1. kubectx / kubens — 컨텍스트·네임스페이스 전환의 끝판왕

    이게 없던 시절엔 어떻게 살았나 싶을 정도예요. kubectx는 클러스터 컨텍스트(context, 어느 클러스터에 연결할지 설정)를, kubens는 네임스페이스(namespace)를 빠르게 전환해 줍니다.

    # krew로 설치
    kubectl krew install ctx
    kubectl krew install ns
    
    # 컨텍스트 목록 보기 및 전환
    kubectl ctx                    # 목록 출력
    kubectl ctx my-production      # 프로덕션 클러스터로 전환
    kubectl ctx -                  # 이전 컨텍스트로 돌아가기
    
    # 네임스페이스 전환
    kubectl ns                     # 목록 출력
    kubectl ns kube-system         # kube-system으로 전환
    kubectl ns -                   # 이전 네임스페이스로 돌아가기

    특히 fzf(퍼지 검색 도구)가 설치돼 있으면 인터랙티브 선택 메뉴가 뜨는데, 이게 진짜 편합니다. 클러스터가 5개 넘어가면 이거 없이는 진짜 힘들어요.

    2. stern — 여러 파드 로그를 한 번에

    stern은 여러 파드의 로그를 동시에 스트리밍해주는 도구입니다. 기본 kubectl logs는 파드 하나밖에 못 보잖아요. 마이크로서비스 환경에서 여러 레플리카를 동시에 봐야 할 때 정말 유용해요.

    # krew로 설치
    kubectl krew install stern
    
    # 특정 레이블의 파드 로그 전부 보기
    kubectl stern -l app=my-api
    
    # 특정 네임스페이스에서 이름 패턴으로 필터링
    kubectl stern my-api -n production
    
    # 지난 1시간치 로그부터 보기
    kubectl stern my-api --since 1h
    
    # 특정 컨테이너만 보기
    kubectl stern my-api -c main-container

    색깔별로 파드를 구분해서 출력해 주기 때문에 어느 파드에서 에러가 났는지 한눈에 보입니다. 처음 써봤을 때 “이게 왜 기본이 아니지?” 싶었어요 🎉.

    3. kubectl-neat — YAML을 깔끔하게

    kubectl get pod my-pod -o yaml 해보신 적 있으시죠? 출력이 어마어마하게 길게 나오는데, 대부분은 쿠버네티스가 자동으로 붙인 메타데이터라 실제로 내가 설정한 내용 파악하기가 힘들어요. kubectl-neat는 이 불필요한 필드들을 걸러내서 깔끔한 YAML만 보여줍니다.

    # 설치
    kubectl krew install neat
    
    # 파드 YAML을 깔끔하게 출력
    kubectl get pod my-pod -o yaml | kubectl neat
    
    # 디플로이먼트도 동일하게 활용
    kubectl get deployment my-deploy -o yaml | kubectl neat
    
    # 파일로 저장해서 재활용
    kubectl get deployment my-deploy -o yaml | kubectl neat > deploy-clean.yaml

    기존 리소스를 백업하거나, 다른 환경에 옮겨 적용할 때 진짜 요긴합니다. 삽질 좀 줄여주는 고마운 플러그인이에요.

    4. kubectl-tree — 리소스 의존관계 트리로 보기

    kubectl-tree는 쿠버네티스 리소스의 오너십(ownerReference) 관계를 트리 형태로 시각화해 줍니다. 디플로이먼트 → 레플리카셋 → 파드로 이어지는 관계를 한 눈에 볼 수 있어요.

    # 설치
    kubectl krew install tree
    
    # 디플로이먼트 트리 보기
    kubectl tree deployment my-deploy
    
    # 예시 출력
    # NAMESPACE  NAME                                    READY  REASON  AGE
    # default    Deployment/my-deploy                    -              2d
    # default    └─ReplicaSet/my-deploy-7d6b9c8f5       -              2d
    # default      ├─Pod/my-deploy-7d6b9c8f5-abc12      True           2d
    # default      └─Pod/my-deploy-7d6b9c8f5-def34      True           2d

    Helm으로 배포한 차트가 어떤 리소스들을 만들었는지 파악할 때도 편리해요. 신입 엔지니어분들한테 쿠버네티스 리소스 구조 설명할 때도 이걸 보여주면 이해가 훨씬 빠르더라고요.

    5. kubectl-whoami — 현재 인증 정보 빠르게 확인

    여러 클러스터, 여러 서비스 어카운트를 쓰다 보면 “내가 지금 어느 권한으로 붙어 있지?” 헷갈릴 때가 있어요. kubectl-whoami가 딱 그럴 때 씁니다.

    # 설치
    kubectl krew install whoami
    
    # 현재 인증 주체 확인
    kubectl whoami
    # 출력 예시: system:serviceaccount:default:my-sa

    RBAC(역할 기반 접근 제어) 트러블슈팅할 때 제일 먼저 쓰는 명령어가 됐습니다. 간단하지만 정말 자주 쓰게 되더라고요.

    stern과 kubectx 등 kubectl 플러그인이 실행되는 터미널 화면

    kubectx, stern, kubectl-tree 등 주요 플러그인이 터미널에서 실행되는 모습. 각 플러그인의 출력 형식과 색상 구분이 실제 작업 환경에서 어떻게 보이는지 확인할 수 있습니다.

    6. kubectl-df-pv — PersistentVolume 용량 현황 한눈에

    kubectl-df-pv는 PersistentVolume(영구 볼륨)의 사용량을 Linux df 명령어처럼 보여줍니다. 스토리지 모니터링할 때 Grafana 대시보드까지 열기 귀찮을 때 바로 CLI에서 확인할 수 있어서 편해요.

    # 설치
    kubectl krew install df-pv
    
    # 전체 PV 사용량 확인
    kubectl df-pv
    
    # 예시 출력
    # PVC           NAMESPACE     POD           CAPACITY  USED    AVAILABLE  PERCENTUSED  IUSED  IFREE   PERCENTIUSED
    # data-pvc      production    my-db-0       50Gi      23Gi    27Gi       46%          ...    ...     ...

    데이터베이스 파드 볼륨이 가득 차서 장애 난 경험 한 번쯤 있으시죠? 이걸로 주기적으로 확인하는 습관 들이시면 좋습니다. 💡

    7. kubectl-images — 파드에서 쓰는 이미지 목록 확인

    보안 감사나 이미지 버전 관리할 때 클러스터 전체에서 어떤 컨테이너 이미지가 쓰이고 있는지 한 번에 보고 싶을 때가 있어요. kubectl-images가 딱 그 역할입니다.

    # 설치
    kubectl krew install images
    
    # 현재 네임스페이스의 모든 이미지 목록
    kubectl images
    
    # 특정 네임스페이스
    kubectl images -n production
    
    # 전체 네임스페이스
    kubectl images -A

    이미지 태그에 latest 쓴 파드 찾아내서 혼낼 때(?) 유용합니다 ㅎㅎ. 보안팀에서 취약 이미지 버전 쓰는 파드 찾을 때도 요긴하게 씁니다.

    ⚠️ 플러그인 쓸 때 주의사항과 삽질 경험

    좋은 것만 얘기하면 섭섭하죠. 실제로 겪은 문제들도 공유합니다.

    PATH 충돌 문제

    krew로 설치한 플러그인과 시스템에 직접 설치된 바이너리가 이름이 겹치면 예상치 못한 동작이 생길 수 있어요. 예를 들어 stern을 brew로도 설치하고 krew로도 설치한 경우가 그렇습니다. which kubectl-stern으로 어느 경로가 우선인지 확인하는 습관을 들이세요.

    플러그인 버전 업데이트 누락

    krew로 설치한 플러그인은 자동 업데이트가 안 됩니다. 주기적으로 아래 명령어 실행해 주세요.

    # 설치된 플러그인 목록 확인
    kubectl krew list
    
    # 전체 업데이트
    kubectl krew upgrade
    
    # krew 자체 업데이트
    kubectl krew update

    클러스터 권한 문제

    일부 플러그인은 클러스터 전체를 조회하는 ClusterRole 권한이 필요합니다. 제한된 권한의 kubeconfig로 쓰다가 에러 나는 경우가 있어요. ⚠️ 권한 오류가 나면 플러그인 문제가 아니라 RBAC 권한 문제일 가능성이 높습니다. kubectl auth can-i로 먼저 확인해보세요.

    # 특정 동작 권한 확인
    kubectl auth can-i list pods -A
    kubectl auth can-i get persistentvolumes
    krew를 통한 kubectl 플러그인 설치 및 관리 워크플로우 다이어그램

    krew를 통한 kubectl 플러그인 설치·업데이트·삭제 워크플로우. 플러그인 인덱스에서 검색하고, 설치 후 PATH를 통해 kubectl 서브커맨드로 동작하는 흐름입니다.

    플러그인 비교 정리표

    지금까지 소개한 플러그인을 한 눈에 비교해 봤습니다.

    플러그인 krew 설치명 주요 기능 추천 상황
    kubectx ctx 클러스터 컨텍스트 전환 멀티 클러스터 환경
    kubens ns 네임스페이스 전환 네임스페이스 자주 변경시
    stern stern 다중 파드 로그 스트리밍 마이크로서비스 디버깅
    kubectl-neat neat YAML 정리·간소화 리소스 백업·마이그레이션
    kubectl-tree tree 리소스 의존관계 시각화 Helm 배포 구조 파악
    kubectl-whoami whoami 현재 인증 주체 확인 RBAC 트러블슈팅
    kubectl-df-pv df-pv PV 용량 현황 조회 스토리지 모니터링
    kubectl-images images 사용 중인 이미지 목록 보안 감사·버전 관리

    ✅ 한 번에 설치하는 스크립트

    위에서 소개한 플러그인을 한 번에 설치하고 싶으시면 아래 스크립트 쓰시면 됩니다.

    #!/bin/bash
    # kubectl 필수 플러그인 일괄 설치
    
    PLUGINS=(
      ctx
      ns
      stern
      neat
      tree
      whoami
      df-pv
      images
    )
    
    # krew 인덱스 업데이트
    kubectl krew update
    
    # 플러그인 설치
    for plugin in "${PLUGINS[@]}"; do
      echo "Installing kubectl $plugin..."
      kubectl krew install "$plugin"
    done
    
    echo "\n✅ 모든 플러그인 설치 완료!"
    kubectl krew list

    자주 묻는 질문 (FAQ)

    Q. krew 없이도 플러그인 설치할 수 있나요?

    네, 가능합니다. 플러그인 바이너리를 직접 다운로드해서 kubectl-플러그인이름 형태로 이름 짓고 $PATH에 있는 디렉토리에 넣으면 됩니다. 다만 버전 관리가 번거로워서 krew를 쓰는 게 훨씬 편해요.

    Q. 플러그인이 kubectl 버전과 호환이 안 될 수도 있나요?

    드물지만 있습니다. 특히 쿠버네티스 API 버전이 크게 바뀌는 경우 플러그인이 업데이트되기 전까지 문제가 생길 수 있어요. kubectl krew upgrade로 최신 버전 유지하시고, 문제 생기면 해당 플러그인의 GitHub 이슈 트래커 확인해 보세요.

    Q. 회사 보안 정책상 외부 플러그인 설치가 어려운데요?

    이 경우엔 플러그인 소스코드를 직접 검토하고 내부 아티팩토리(Artifactory) 같은 내부 저장소를 통해 배포하는 방식을 쓰는 팀도 있어요. krew도 커스텀 인덱스를 지원하니 내부 인덱스를 구축하는 것도 방법입니다.

    kubectl 생산성 향상을 위한 필수 플러그인 8종 요약 인포그래픽

    kubectl 생산성을 높이는 필수 플러그인 8종 요약. 각 플러그인의 역할과 추천 상황을 한눈에 정리한 인포그래픽입니다.

    마무리 — CLI 환경도 투자할 가치가 있습니다

    사실 처음엔 “플러그인 설치하고 관리하는 것도 귀찮은 일 아닌가?” 싶었는데, 한 번 손에 익으면 그냥 기본 kubectl로 돌아가기가 싫어지더라고요. 특히 stern이랑 kubectx/kubens는 진짜 하루에도 수십 번씩 쓰고 있습니다.

    홈랩에서 먼저 익히고 실무에 가져가는 방식을 추천드려요. 처음부터 프로덕션 클러스터에서 새 도구 쓰다가 실수하면 곤란하니까요 😅. 오늘 소개한 플러그인들은 조회 위주라 부작용 걱정은 크게 안 하셔도 됩니다.

    다음 글에서는 kubectl 단축키 설정과 쉘 자동완성(shell completion) 세팅 방법을 다뤄볼 예정입니다. 플러그인이랑 함께 쓰면 생산성이 한 단계 더 올라가거든요. 기대해 주세요! 💡

    혹시 제가 소개 못 한 플러그인 중에 여러분이 즐겨 쓰는 게 있으면 댓글로 알려주세요. 저도 계속 배우는 중이라 좋은 도구 있으면 바로 써보고 싶습니다 🙂