[k8s] kubectl 명령어 모음

pipi·2023년 6월 27일
0

인프라

목록 보기
5/12

kubectl : 쿠버네티스 클러스터에게 명령할 수 있는 커맨드 라인 도구,
사용자가 직접 마스터에게 REST API로 통신할 수 있지만, 쉽게 통신하기 위해 kubectl 사용

  • 쿠버네티스 최소 실행 단위는 pod
  • pod안에 컨테이너가 1~3개 위치가능하나, 보통 pod <-> 컨테이너 1개씩 대응
  • pod == 컨테이너로 보고, 앞으로 컨테이너라 표현하는 것들은 모두 pod

앞서 정리한 도커 명령어 모음과 비슷하다.


1. 📌 kubectl 기본 명령어

1.1 컨테이너 실행

kubectl run <NAME> --image <IMAGE> : pod(컨테이너) 실행, run=<NAME>이란 label이 자동으로 추가됨(YAML)

kubectl run mynginx --image nginx

1.2 컨테이너 조회

kubectl get pod : pod(컨테이너) 조회

NAME      READY   STATUS    RESTARTS   AGE
mynginx   1/1     Running   0          2s

kubectl get node : node(마스터, 워커) 조회

NAME     STATUS   ROLES    AGE   VERSION
master   Ready    master   11h   v1.18.6+k3s1
worker   Ready    <none>   10h   v1.18.6+k3s1

kubectl get pod -o wide : pod(컨테이너) 상세 조회 -> ip, node등 확인

NAME     READY   STATUS    RESTARTS   AGE  IP            NODE     
mynginx  1/1     Running   0          6s   10.42.0.6   master   

kubectl get pod mynginx -o yaml : 특정 pod YAML파일 조회(모든 정보)

piVersion: v1
kind: Pod
metadata:
creationTimestamp: "2023-06-26T18:00:08Z"
labels:
  run: myniginx
~

1.3 컨테이너 상세 정보 확인

kubectl describe pod <NAME> : pod 상세 정보 확인, 디버깅 용도로 자주 사용됨.

kubectl describe pod mynginx

# Name:         mynginx
# Namespace:    default
# Priority:     0
# Node:         worker/10.0.1.2
# Start Time:   Sun, 21 Jun 2020 06:54:52 +0000
# Labels:       run=mynginx
# Annotations:  <none>
# Status:       Running
# IP:           10.42.0.155
# IPs:
#   IP:  10.42.0.155
# ....

1.4 컨테이너 로깅

kubectl logs <NAME> : pod 로그 정보 확인

kubectl logs myniginx

# /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will ...
# /docker-entrypoint.sh: Looking for shell scripts in /docker-...
# ...

1.5 컨테이너 명령 전달

kubectl exec <NAME> -- <CMD> : pod(컨테이너)에 명령 전달

kubectl exec mynginx -- apt-get update : mynginx에 apt-update 명령을 전달합니다.

 Get:1 http://security.debian.org/debian-security buster/updates ...
 Get:2 http://deb.debian.org/debian buster InRelease [121 kB]
 # apt get update 하는 중...

1.6 컨테이너 내부로 접속 -it

kubectl exec -it mynginx -- bash : docker interactive와 동일하게, pod(컨테이너) 내부로 접속한다.

$root@mynginx:/# 
$root@mynginx:/# exit

1.7 컨테이너 / 호스트간 파일 복사

kubectl cp <TARGET> <SOURCE>

kubectl cp /etc/passwd mynginx:/tmp/passwd

# exec 명령으로 복사가 되었는지 확인합니다.
kubectl exec mynginx -- ls /tmp/passwd
# /tmp/passwd

1.8 컨테이너 삭제

kubectl delete pod <NAME>
kubectl delete pod --all : 싹다 삭제

1.9 선언형 명령 정의서 (YAML) 기반의 컨테이너 생성

kubectl apply -f <FILE_NAME> : file_name에 주소 가능 ex) http://github ~

  1. vi로 YAML 파일 생성
# mynginx.yaml
apiVersion: v1
kind: Pod
metadata:
  name: mynginx
spec:
  containers: 
  - name: mynginx
    image: nginx
  1. kubectl apply -f mynginx.yaml : yaml 기반 컨테이너 생성!
  2. kubectl get pod

1.10 컨테이너 정보 수정

  • vi와 동일, 컨테이너 YAML파일을 수정

kubectl edit pod <NAME> : YAML파일 수정
kubectl get pod <NAME> -oyaml : YAML파일 확인


2 고급 명령

2.1 리소스별 명령

  • 쿠버네티스는 모든것이 리소스로 표현된다. Node, Pod, Service, ReplicaSet등
  • 앞서 kubectl get pod 에서 리소스 pod 만 변경하면 앞서 본 명령어가 모두 사용가능하다.
    ex) kubectl get node , kubectl get service

2.2 네임스페이스

  • 쿠버네티스에선, 클러스터 내부를 논리적으로 네임스페이스로 나눌 수 있다.
  • 네임스페이스 각각은 network, 사용자등 정책을 다르게 설정 가능
kubectl get namespace
# NAME             STATUS   AGE
# default          Active   12m #기본 네임스페이스, 아무 옵션이 없을 경우 여기로
# kube-system      Active   12m #핵심 컴포넌트, ex) 네트워크 설정, DNS 서버
# kube-public      Active   12m
# kube-node-lease  Active   12m 
  1. kubectl create namespace <NAMESPACE> : 네임스페이스 추가, YAML파일에서도 가능
  2. kubectl run mynginx --image nginx -n <NAMESPACE> : 특정 네임스페이스에 서비스 추가
  3. kubectl get pod -n <NAMESPACE> or kubectl get api_resources -n <NAMESPACE>

2.3 자동완성 기능

echo 'source <(kubectl completion bash)' >> ~/.bashrc
source ~/.bashrc <- 설치 과정

kubectl get pod <TAB> : pod까지 적은 뒤, tab을 누르면 현재 존재하는 pod가 밑에 뜬다.

2.4 모든 리소스 조회

kubectl api-resources : pod, service, node등 모든 리소스를 조회한다. 짱 많이 나온다.

쿠버네티스 리소스는 크게 클러스터 레벨, 네임 스페이스 레벨로 나뉜다
1. 클러스터 레벨은 마스터, 워커등 Node가 대표적이며
2. 네임스페이스 레벨은 Pod가 대표적이다. ex) 아까 pod(컨테이너)를 생성할때 다 default namespace로 기본으로 갔다.

만약, 네임스페이스 레벨만 출력하려면? -> pod, service등이 나온다.
kubectl api-resources --namespaced=true

만약, 클러스터 레벨만 출력하려면?
kubectl api-resources --namespaced=false

2.5 클러스터 상태 확인

앞서 말한 명령어 조합들이다. 익숙할 것이다.

kubectl get pod -n kube-system : 쿠버네티스 핵심 컴포넌트 네임스페이스의 pod들을 확인
kubectl get node : 전체 노드 확인, 마스터, 워커 노드 등
kubectl cluster-info : 쿠버네티스 API서버 작동 여부 확인 -> 쿠버네티스 설치됬는지 확인.

2.6 클라이언트 설정파일

내부적으로 KUBECONFIG 설정 파일을 참조하여, 마스터 주소, 인증 정보 등을 관리한다.
이 설정값을 바꾸기 위해 해당 파일을 직접 수정하거나, config 명령어를 사용한다.
config 설정파일은 13장 접근 제어에서도 나올 예정이다!

  1. kubectl config view or cat $HOME/.kube/config -> 설정값 확인
# apiVersion: v1
# clusters:
# - cluster:
#     certificate-authority-data: ....
#     server: https://127.0.0.1:6443
#   name: default
# contexts:
# - context:
#     cluster: default
#     user: default
#   name: default
# current-context: default
# kind: Config
# preferences: {}
# users:
# - name: default
#   user:
#     password: ...
#     username: admin

config 파일은 크게 3가지 영역으로 나뉜다.
1. clusters : kubectl이 바라보는 클러스터 정보, local일 경우 127.0.0.1, 원격일 경우 원격주소
2. contexts : cluster, user를 연결해주는 것, kubectl이 여러개의 클러스터와 사용자를 사용할 경우 유용함 -> 이부분 더 공부 필요
3. users : cluster에 접속하는 사용자 정의. 13장에서 더 다룰 예정


환경 세팅 끝나서, 실습할때 너무 행복했다.
참고한 깃헙링크다. 잘 사용하지 않을 것들은 임의로 뺐다.

'핵심만 콕 쿠버네티스' 도서 참고했습니다

0개의 댓글

관련 채용 정보