Jay's Cookbook
Menu
  • Tags
  • Categories
  • Projects
Computer Science
OS
Network
Data Structure
Algorithm
Language
Code Architecture
Python
Javascript
Typescript
Java
Backend
Backend Theory
TypeORM
Node.js
NestJS
FastAPI
Frontend
HTML/CSS
React
Next.js
Data Engineering
DE Theory
MySQL
MongoDB
Elastic
Redis
Kafka
Spark
Airflow
AI
Basic
Pytorch
NLP
Computer Vision
Data Analytics
Statistics
Pandas
Matplotlib
DevOps
Git
Docker
Kubernetes
AWS
Kubernetes Series [Part2]: Kubernetes 기본 명령어
devops
kubernetes

Kubernetes Series [Part2]: Kubernetes 기본 명령어

Jay Kim
Jay Kim 01 Jan 2022
Kubernetes Series [Part1]: Kubernetes 설치 Kubernetes Series [Part3]: Kubernetes Workload Object

Table of Contents

  • 리소스 생성/삭제/갱신
  • 파드 재기동
  • 실행 순서를 지켜야 하는 리소스의 경우
  • 여러 매니페스트 파일 적용
  • 레이블
  • 리소스 조회: get
  • 리소스 상세 정보: describe
  • 실제 리소스 사용량 확인: top
  • 컨테이너에 명령어 전달: exec
  • 포트 포워딩: port-forward
  • 컨테이너 로그 확인: logs
  • 컨테이너와 로컬간의 파일 복사: cp

  • 쿠버네티스에서 클러스터 조작은 모두 마스터 API 를 통해 이루어진다
  • 직접 API에 요청을 보내거나 클라이언트 라이브러리를 사용해 클러스터를 조작할 수도 있지만,
  • 수동으로 조작하는 경우에는 CLI 도구인 kubectl을 사용하는 것이 일반적이다
  • kubectl은 kubeconfig ( ~/.kube/config)에 쓰여있는 정보를 사용하여 접속한다
  • kubectl 명령어 실행은 바로 전달되지만, 바로 처리가 되지는 않는다
  • (실제 리소스 처리는 비동기로 실행되기 때문에 바로 완료되지 않을 수 있다)

리소스 생성/삭제/갱신

# 리소스 생성
# 리소스가 있을 경우 에러 발생
kubectl create -f sample-pod.yaml
# 리소스 조회
kubectl get pods
# 리소스 삭제
# 리소스가 없을 경우 에러 발생
kubectl delete -f sample-pod.yaml

# 파일을 사용하지 않고 리소스 종류와 이름으로 지정해 삭제할 수도 있다
kubectl delete pod sample-pod

# 특정 리소스 종류를 모두 삭제
kubectl delete pod --all

# 리소스 처리를 완료하고 명령어 실행을 종료
kubectl delete -f sample-pod.yaml --wait

# 리소스 즉시 강제 삭제
kubectl delete -f sample-pod.yaml --force
# 리소스 수정
# 변경 부분이 있으면 적용하고, 없으면 적용하지 않는다
# 리소스가 없으면 create 명령어와 동일하게 리소스를 새로 생성한다
# 일반적으로 create 보다 apply를 사용하는 것이 편하다

kubectl apply -f sample-pod.yaml

파드 재기동

# 디플로이먼트와 같은 리소스에 연결되어 있는 모든 파드를 재기동할 수 있다
# 재실행하고 싶거나, 시크릿 리소스에서 참조되는 환경변수를 변경하고 싶을 때 사용하면 좋다

kubectl rollout restart deployment sample-deployment

실행 순서를 지켜야 하는 리소스의 경우

  • 한 개의 매니페스트에 여러 리소스를 정의할 수 있다
  • 매니페스트에 작성된 순서대로 리소스가 적용된다
  • 중간에 리소스에 에러가 발생하면, 이후 정의된 리소스는 적용되지 않는다
  • 리소스간 구분은 ---으로 한다

여러 매니페스트 파일 적용

  • 디렉터리를 경로로 해서 실행하면 디렉터리 안에 리소스들이 함께 적용된다
  • 파일명 순으로 매니페스트 파일이 적용되기 때문에 순서를 제어하고 싶을 때는 파일명 앞에 인덱스 번호를 지정하면 된다
  • 디렉터리 안에 디렉터리가 있는 경우에는 -R을 사용하면 된다
kubectl apply -f ./dir

kubectl apply -f ./dir -R

레이블

  • 레이블은 리소스를 구분하기 위한 정보
apiVersion: v1
kind: Pod
metadata:
  name: sample-pod
  labels:
    app: A
    env: dev
  • 레이블은 수많은 리소스에 대해 동일한 레이블로 그룹핑하여 처리하거나, 어떤 처리에 대한 조건으로 사용된다
  • 레플리카 리소스는 레이블을 이용해 파드의 수를 일정하게 유지한다
  • 서비스 리소스는 레이블을 긱준으로 목적지 파드를 결정한다
# app 레이블이 A이고 env 레이블을 가진 파드 조회
kubectl get pods -l app=A, env
# 조회할 때 app 레이블 컬럼으로 표시
kubectl get pods -L app
-------------------------------------
NAME READY STATUS RESTARTS AGE APP
# -l -L 옵션 함께 사용 가능
kubectl get pods -l app=A, env -L env
# 모든 레이블을 LABELS 컬럼에 표시
kubectl get pods --show-labels

리소스 조회: get

# 레이블이 label1: val인 파드들의 레이블을 LABELS 컬럼에 표시
kubectl get pods -l label1=val1 --show-labels
# 파드 목록 상세 표시
kubectl get pods -o wide

# 파드 목록 yaml 형태로 표시
kubectl get pods -o yaml

# 파드의 특정 항목 표시
kubectl get pods sample-pod -o jsonpath="{.metadata.name}"

# 배열 데이터의 일부 항목 표시
# 배열[] 안에 ?(@.field == value) 형식으로 지정
kubectl get pod sample-pod -o jsonpath="{.spec.containers[?(@.name == 'nginx-container')].image}"

# 노드 목록 표시
kubectl get nodes

# 모든 종류의 리소스 표시
kubectl get all

# 리소스 상태 변화를 실시간으로 출력
kubectl get pods --watch

리소스 상세 정보: describe

kubectl describe pod sample-pod

kubectl describe node gke-k8s-default

실제 리소스 사용량 확인: top

# describe에 나타난 리소스는 사용량이 아니라 확보한 용량

# 노드의 리소스 사용량 조회
kubectl top node

# 파드별 리소스 사용량 조회
kubectl -n default top pod

# 컨테이너별 리소스 사용량 조회
kubectl -n default top pod --containers

컨테이너에 명령어 전달: exec

# -i: 표준 입출력을 패스스루
# -t: 가상 터미널 생성
# -- 다음에 전달할 명령어
kubectl exec -it sample-pod -- /bin/ls

# 특정 컨테이너에 명령어 실행
kubectl exec -it sample-pod -c nginx-container -- /bin/bash

포트 포워딩: port-forward

# 로컬 머신에서 파드로 포트 포워딩
kubectl port-forward sample-pod 8888:80

# 파드가 아닌 디플로이먼트 리소스나 서비스 리소스에 연결되는 파드에도 포트 포워딩을 할 수 있다
kubectl port-forward deployment/sample-deployment 8888:80
kubectl port-forward service/sample-service 8888:80

컨테이너 로그 확인: logs

kubectl logs sample-pod

# 특정 컨테이너 로그 출력
kubectl logs sample-pod -c nginx-container

# 실시간 로그 출력
kubectl logs -f sample-pod

컨테이너와 로컬간의 파일 복사: cp

# 파드의 파일을 로컬 머신에 복사
kubectl cp sample-pod:etc/sample.txt ./sample.txt

# 로컬 파일을 컨테이너로 복사
kubectl cp ./sample.txt sample-pod:/tmp/
Kubernetes Series [Part1]: Kubernetes 설치 Kubernetes Series [Part3]: Kubernetes Workload Object

You may also like

See all kubernetes
01 Feb 2022 Kubernetes Series [Part18]: Kafka on Kubernetes
devops
kubernetes

Kubernetes Series [Part18]: Kafka on Kubernetes

01 Feb 2022 Kubernetes Series [Part17]: Spark on Kubernetes
devops
kubernetes

Kubernetes Series [Part17]: Spark on Kubernetes

01 Feb 2022 Kubernetes Series [Part16]: MongoDB on Kubernetes
devops
kubernetes

Kubernetes Series [Part16]: MongoDB on Kubernetes

Jay Kim

Jay Kim

Web development, data engineering for human for the Earth. I share posts, free resources and inspiration.

Rest
Lifestyle
Hobby
Hobby
Hobby
Hobby
2025 © Jay's Cookbook. Crafted & Designed by Artem Sheludko.