Infra/Kubernetes
쿠버네티스를 활용한 네이티브 데브옵스 - 7장 유용한 쿠버네티스 도구
wave35
2024. 10. 19. 15:23
7.1 kubectl 마스터하기
리소스 단축형 사용
- kubectl get po (pod)
- kubectl get deploy (deployment)
- kubectl get svc (service)
- kubectl get ns (namespace)
- kubectl get no (node)
- kubectl get cm (configmap)
도움말 보기 (kubectl -h)
kubectl -h
상세 커맨드 도움말
kubectl <command> --help"
kubectl get -h
더 자세한 출력 결과 확인하기
kubectl get pods
NAME READY STATUS RESTARTS AGE
demo-6c7dbfffb4-bkkpp 1/1 Running 1 (2m56s ago) 20d
# -o wide 옵션은 파드가 실행 중인 노드와 같은 추가정보 확인
kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
demo-6c7dbfffb4-bkkpp 1/1 Running 1 (2m50s ago) 20d 10.224.0.61 minikube <none> <none>
jq를 이용하여 json 형식으로 출력
다양한 jq쿼리를 테스트하기 - ( https://jqplay.org )
# jq 다운로드
brew install jq
# json 형식으로 출력
kubectl get pods -n kube-system -o json
# 출력 결과를 쿼리하고 필터링
kubectl get pods -n kube-system -o=json | jq '.items[].metadata.labels'
{
"k8s-app": "kube-dns",
"pod-template-hash": "787d4945fb"
}
{
"component": "etcd",
"tier": "control-plane"
}
{
"component": "kube-apiserver",
"tier": "control-plane"
}
...
오브젝트 감시하기
kubectl get pods --watch
오브젝트 정보 확인
kubectl describe pods demo-6c7dbfffb4-b888p
7.2 리소스 다루기
리소스 매니페스트 생성하기 (신규)
클러스터 변경시 kubectl 커맨드는 권장하지 않지만,
커맨드를 활용하면 k8s YAML 매니페스트 기본파일을 손쉽게 생성할 수 있다.
# demo 파드를 실행
# --dry-run 옵션은 리소스를 생서하지 않고, 생성시 발생하는 메세지만 출력
# -o yaml 옵션은 리소스 매니페스트를 yaml 형식으로 출력
kubectl run demo --image=cloudnatived/demo:hello --dry-run -o yaml > deployment.yaml
# 리소스 매니페스트 실행
kubectl apply -f deployment.yaml
리소스 매니페스트 내보내기 (기존)
클러스터에 존재하는 기존의 리소스를 매니페스트 파일로 생성할 수 있다.
jq를 이용해 불필요한 필드를 제거하고 yaml파일을 생성한다.
kubectl get deployment demo -o json | jq 'del(.metadata.creationTimestamp, .metadata.generation, .status, .metadata.managedFields)' > deployment_2.yaml
7.3 컨테이너 다루기
컨테이너 로그 보기 ( kubectl logs <pod_name> )
# tail을 통해 가장 최근 로그 출력
kubectl logs -n kube-system kube-ingress-dns-minikube --tail=20
# follow를 통해 로그 출력을 터미널로 스트림
kubectl logs -n kube-system kube-ingress-dns-minikube --follow
컨테이너에 명령어 실행 ( kubectl exec -it <pod_name> -- <commend> )
# -i는 사용자 입력을 허용하고, -t는 터미널 모드로 실행을 도움
# Pod 내부에서 bash, sh와 같은 특정 명령어를 실행할 때 유용
# 멀티 컨테이너 Pod에서 특정 컨테이너에 접근할 때는 -c 옵션을 사용
kubectl exec -it -c container2 demo -- ls /
7.4 컨텍스트와 네임스페이스
클러스터가 두개 이상인 경우, kubectl 명령어를 실행할 대상 클러스터와 네임스페이스를 선택할 수 있다.
컨텍스트 확인 ( kubectl config get-contexts )
# 컨텍스트 확인
kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
admin kubernetes kubernetes-admin
* minikube minikube minikube default
# 컨텍스트 전환
kubectl config use-context admin
# 컨텍스트 생성
kubectl config set-context myapp --cluster=gke --namespace=myapp