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
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}