kubectl : 쿠버네티스 클러스터에게 명령할 수 있는 커맨드 라인 도구,
사용자가 직접 마스터에게 REST API로 통신할 수 있지만, 쉽게 통신하기 위해 kubectl 사용
앞서 정리한 도커 명령어 모음과 비슷하다.
kubectl run <NAME> --image <IMAGE>
: pod(컨테이너) 실행, run=<NAME>
이란 label이 자동으로 추가됨(YAML)
kubectl run mynginx --image nginx
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
~
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
# ....
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-...
# ...
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 하는 중...
kubectl exec -it mynginx -- bash
: docker interactive와 동일하게, pod(컨테이너) 내부로 접속한다.
$root@mynginx:/#
$root@mynginx:/# exit
kubectl cp <TARGET> <SOURCE>
kubectl cp /etc/passwd mynginx:/tmp/passwd
# exec 명령으로 복사가 되었는지 확인합니다.
kubectl exec mynginx -- ls /tmp/passwd
# /tmp/passwd
kubectl delete pod <NAME>
kubectl delete pod --all
: 싹다 삭제
kubectl apply -f <FILE_NAME>
: file_name에 주소 가능 ex) http://github ~
- vi로 YAML 파일 생성
# mynginx.yaml apiVersion: v1 kind: Pod metadata: name: mynginx spec: containers: - name: mynginx image: nginx
kubectl apply -f mynginx.yaml
: yaml 기반 컨테이너 생성!kubectl get pod
kubectl edit pod <NAME>
: YAML파일 수정
kubectl get pod <NAME> -oyaml
: YAML파일 확인
kubectl get pod
에서 리소스 pod
만 변경하면 앞서 본 명령어가 모두 사용가능하다.kubectl get node
, kubectl get service
kubectl get namespace
# NAME STATUS AGE
# default Active 12m #기본 네임스페이스, 아무 옵션이 없을 경우 여기로
# kube-system Active 12m #핵심 컴포넌트, ex) 네트워크 설정, DNS 서버
# kube-public Active 12m
# kube-node-lease Active 12m
kubectl create namespace <NAMESPACE>
: 네임스페이스 추가, YAML파일에서도 가능kubectl run mynginx --image nginx -n <NAMESPACE>
: 특정 네임스페이스에 서비스 추가kubectl get pod -n <NAMESPACE>
or kubectl get api_resources -n <NAMESPACE>
echo 'source <(kubectl completion bash)' >> ~/.bashrc
source ~/.bashrc
<- 설치 과정
kubectl get pod <TAB>
: pod까지 적은 뒤, tab을 누르면 현재 존재하는 pod가 밑에 뜬다.
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
앞서 말한 명령어 조합들이다. 익숙할 것이다.
kubectl get pod -n kube-system
: 쿠버네티스 핵심 컴포넌트 네임스페이스의 pod들을 확인
kubectl get node
: 전체 노드 확인, 마스터, 워커 노드 등
kubectl cluster-info
: 쿠버네티스 API서버 작동 여부 확인 -> 쿠버네티스 설치됬는지 확인.
내부적으로 KUBECONFIG 설정 파일을 참조하여, 마스터 주소, 인증 정보 등을 관리한다.
이 설정값을 바꾸기 위해 해당 파일을 직접 수정하거나, config 명령어를 사용한다.
config 설정파일은 13장 접근 제어에서도 나올 예정이다!
kubectl config view
orcat $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장에서 더 다룰 예정
환경 세팅 끝나서, 실습할때 너무 행복했다.
참고한 깃헙링크다. 잘 사용하지 않을 것들은 임의로 뺐다.
'핵심만 콕 쿠버네티스' 도서 참고했습니다