
kubectl run <NAME> --image <IMAGE>
위 명령어로 새로운 컨테이너(pod)을 실행시킬 수 있다.
kubectl get pod
위 명령어로 배포된 컨테이너(pod)을 확인할 수 있다.
kubectl run mynginx --image nginx
kubectl get pods

get 명령의 세번째 컬럼 STATUS는 현재 pod의 상태 정보를 나타낸다. pod이 가질 수 있는 상태는 다음과 같다.
| 상태값 | 설명 |
|---|---|
| Pending | 쿠버네티스 마스터에 생성 명령은 전달되었지만 실행되지 않은 상태(PVC 마운트 오류 등으로 발생할 수 있음) |
| ContainerCreating | 특정 노드에 스케줄링되어 컨테이너를 생성중인 단계(이미지 다운로드 등) |
| Running | Pod가 정상적으로 실행되고 있는 상태 |
| Completed | 계속 실행되고 있는 프로세스가 아닌, 한 번 실행하고 완료되는 배치작업 Pod에서 작업이 완료된 상태 |
| Error | Pod에 문제가 생겨 에러가 발생한 상태 |
| CrashLoopBackOff | 지속적으로 에러 상태로 있어 crash가 반복되는 상태 |
특정 Pod의 상태 정보를 더 자세히 보고 싶다면 -o yaml 옵션을 추가하면 된다
kubectl get pod mynginx -o yaml

위와 같이 PodIP, nodeName등 다양한 상세 정보를 확인 가능하다.
각 Pod의 IP등 정보를 바로 확인하려면 -o wide 옵션을 사용할 수 있다.
kubectl get pods -o wide

10.244.1.2 가 할당된것을 확인 가능하다.💡 k8s 내부 리소스들의 IP는 따로 DHCP와 같은 프로토콜로 할당되는 것이 아닌 CNI 플러그인을 통해 할당된다.
kubectl describe pod
describe 명령어는 Event로그를 포함한 더 자세한 정보를 보여준다.
kubectl describe pod mynginx

kubectl logs
파드의 로그 정보를 확인할 수 있다.
kubectl logs mynginx -f
-f옵션은 follow로, 로그를 계속 출력한다.

kubectl exec <NAME> -- <CMD>
실행중인 컨테이너에 명령을 전달할때 사용한다. 예를 들어 bash쉘을 띄워 서비스 DNS가 잘 호출되는지 등,,,
kubectl exec mynginx -it -- bash

kubectl cp <TARGET> <SOURCE>
호스트에서 파드로 (혹은 반대로) 파일을 복사한다.
kubectl cp /etc/passwd mynginx:/tmp/passwd

kubectl edit pod <NAME>
실행중인 파드의 정보를 수정한다.
라벨 수정하기
kubectl edit mynginx

hello: world 라는 라벨을 추가했다.
파드 삭제하기
kubectl delete pod mynginx

nginx 파드를 삭제했다.
YAML기반 파드 생성
apiVersion: v1
kind: Pod
metadata:
name: mynginx
spec:
containers:
- name: mynginx
image: nginx

아래와 같이 수정하여 라벨을 추가할 수도 있다.
apiVersion: v1
kind: Pod
metadata:
labels:
hello: world
name: mynginx
spec:
containers:
- name: mynginx
image: nginx

쿠버네티스는 모든 것이 리소스로 표현된다. 예컨대, 지금까지는 Pod으로 명령어를 지정하였지만, Service, ReplicaSet, Deployment 등 다양한 리소스를 타겟으로 지정할 수도 있다.
kubectl get service
kubectl get deployments
...
쿠버네티스에는 네임스페이스라는 개념이 있다. 클러스터를 논리적으로 나누기 위해서이다. 각 리소스는 네임 스페이스 별로 생성할 수 있으며, 접근제어 정책을 다르게 지정할 수도 있다.
각 명령을 실행할때 --namespace | -n 옵션을 이용하여 특정 네임스페이스에 리소스를 생성하거나, 특정 네임스페이스의 리소스를 조회 가능하다.
쿠버네티스 명령을 매번 일일이 입력하는 것은 귀찮으므로 명령을 완성시켜주는 스크립트를 제공한다.
https://kubernetes.io/docs/reference/kubectl/generated/kubectl_completion/
echo 'source >(kubectl completion bash)' >> ~/.bashrc
source ~/.bashrc
책에서는 cat + 파이프라인을 통해 yaml파일을 출력하는데, 아래 방식이 더 깔끔한 것 같다.
kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
name: mynginx
labels:
app: mynginx
spec:
containers:
- name: mynginx
image: nginx
EOF
jsonpath를 사용해서 특정 속성값만 추출해올 수 있다.
kubectl get node master -o jsonpath="{.status.addresses[0].address"

kubectl api-resources

--namespaced=true: 네임스페이스 레벨의 API 리소스만 조회kubectl explain pods
클러스터가 정상적으로 동작하고 있는지 확인하고 싶다면 아래 명령어를 사용할 수 있다.
kubectl cluster-info
kubectl get node
klubectl get pod -n kube-system
각 쿠버네티스 API 서버 작동 여부, 전체 노드 상태, 핵심 컴포넌트 Pod 상태를 확인한다.
kubectl config <SUBCOMMAND>
kubectl 툴은 내부적으로 KUBECONFIG ($HOME/.kube/config) 설정 파일을 참조하여 마스터 주소, 인증 정보 등을 관리한다. kubectl의 설정값을 바꾸기 위해서 해당 파일을 직접 수정할 수도 있고, kubectl config 명령을 사용할 수도 있다.
먼저, view 명령을 통해 클라이언트 설정 파일값들을 확인한다.
kubectl config view
or
kubectl $HOME/.kube/config

KUBECONFIG 파일은 크게 3가지 영역으로 나뉜다