본문 바로가기

3. 기술 공부/Kubernetes

[K8S] Kubectl - Kubernets CLI

Goal

안녕하세요! 오늘은 쿠버네티스를 터미널에서 효율적으로 관리할 수 있는 기본 CLI(Command Line Interface) 사용법에 대해 알아보고 기본 커맨드 치트시트를 공유드리겠습니다. 

요새는 k9s, Lens 등 쉽게 kubernetes와 상호작용할 수 있는 툴들이 많이 나와있지만, 그래도 아날로그적으로 직접 커맨드를 하나씩 쳐보는 맛이 있지요! 이제 막 시작하는 분들께 도움이 되었으면 좋겠습니다.


What is Kubectl?

쿠버네티스 CLI는 쿠버네티스 클러스터를 커맨드 라인을 통해 관리할 수 있게 해주는 도구입니다. 터미널을 사용하여 쿠버네티스 리소스를 생성, 조회, 수정, 삭제하는 등 다양한 작업을 수행할 수 있습니다.

How to Install

설치법은 운영체제에 따라 다르지만, Window, maxOS, Linux 모두에서 kubectl을 설치하여 사용이 가능합니다.

쿠버네티스 공식 문서에서 각 운영체제에 맞는 설치 가이드가 제공되지만, 아래에 간단한 설치 방법이 있습니다.
https://kubernetes.io/docs/tasks/tools/#kubectl

 

Install Tools

Set up Kubernetes tools on your computer.

kubernetes.io

 

Linux의 경우 (apt나 yum을 사용하는 경우)
# Ubuntu/Debian
sudo apt-get update && sudo apt-get install -y kubectl
# CentOS/RHEL
sudo yum install -y kubectl
macOS의 경우 (Homebrew를 사용하는 경우)

 

brew install kubectl
Windows의 경우 (Chocolatey를 사용하는 경우)
choco install kubernetes-cli


위의 방법 중 해당하는 운영체제에 맞는 방법을 선택하여 kubectl을 설치하면 됩니다. 

 

Basic commands

더 많은 커맨드를 보고싶으시다면 역시 공식 레퍼런스 -> https://kubernetes.io/ko/docs/reference/kubectl/cheatsheet/

Pods 조회

# 쿠버네티스 클러스터 정보 확인
kubectl cluster-info

# 현재 클러스터의 노드들 조회
kubectl get nodes

# 현재 클러스터의 파드들 조회
kubectl get pods

# 네임스페이스 조회
kubectl get namespaces

# 새로운 네임스페이스 생성
kubectl create namespace [이름]

# 네임스페이스 삭제
kubectl delete namespace [이름]

# 파드 상세 정보 조회
kubectl describe pod [파드 이름]

# 파드 로그 조회
kubectl logs [파드 이름]

# YAML 파일로 파드 생성
kubectl create -f [파일 경로]

# YAML 파일로 파드 업데이트
kubectl apply -f [파일 경로]

# 파드 삭제
kubectl delete pod [파드 이름]

# 디플로이먼트 조회
kubectl get deployments

# 디플로이먼트 상세 정보 조회
kubectl describe deployment [디플로이먼트 이름]

# 디플로이먼트 업데이트
kubectl apply -f [파일 경로]

# 디플로이먼트 롤백
kubectl rollout undo deployment [디플로이먼트 이름]

# 서비스 조회
kubectl get services

# 서비스 상세 정보 조회
kubectl describe service [서비스 이름]

# 서비스 삭제
kubectl delete service [서비스 이름]

# 클러스터 확인
kubectl get all

# 전체 파드 리스트 정보 확인
kubectl get pods -o wide

# 파드 개별 상세 정보 확인 (status 정보 확인 가능)
kubectl describe pod [파드 이름]

# 컨테이너 내부 쉘 실행
kubectl exec -it [파드 이름] -- sh

# 로그 조회
kubectl logs [파드 이름]

# 이벤트 조회 (모든 네임스페이스에서 생성 시간 기준으로 정렬)
kubectl get events --all-namespaces --sort-by='.metadata.creationTimestamp'

# 네임스페이스 변경 (ingress-nginx 네임스페이스로 변경)
kubectl config set-context --current --namespace=[네임스페이스 이름]

쿠버네티스에 앱 실행

kubectl apply -f ./deployment.yaml
#./deployment.yaml

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: test-deployment
  namespace: default
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 3
  template:
    metadata:
      labels:
        app: test
    spec:
      containers:
      - name: test
        image: nginx
        imagePullPolicy: IfNotPresent
        resources:
          requests:
            cpu: 500m
            memory: 200Mi

템플릿 필드 설명 조회

kubectl explain ${kind}
kubectl explain ${kind}.${field} 
kubectl explain ${kind} --recursive #하위에 속한 모든 필드 보기

이미지 버전 변경

kubectl set image ${type}/${name} ${label}=${image:version}

레플리카 갯수 스케일 아웃

kubectl scale --replicas=10 ${type}/${name}