[Kubernetes] App 확인 (Pod 확인)
kubectl get pod, top, logs, exec, describe로 Pod 상태와 로그를 확인하고 kubectl run과 YAML로 Pod를 생성·삭제하는 방법을 정리합니다.
요약
kubectl get pod,kubectl top pod,kubectl describe pod로 Pod 상태, 리소스 사용량, 상세 정보를 확인할 수 있습니다.kubectl logs -f로 컨테이너 로그를 실시간으로 보고kubectl exec -ti <pod> -- <명령>으로 컨테이너 안에서 명령을 실행합니다.kubectl run이나 YAML로 Pod를 만들고kubectl delete pod로 삭제할 수 있으며, 한 Pod에 여러 컨테이너를 넣는 예제도 있습니다.
목차
- Build APP - Container image
- Deploy APP
- Check APP
- Expose APP
- Scale APP
- Update APP
Check The Pod
이 문서는 Pod 를 확인하는 방법에 대해 포함되어 있습니다.
Kubernetes Pod
앞선 Create the Deployment 를 통해 Deployment 가 생성이 되고 나면
Kubernetes 는 여러분의 애플리케이션 인스턴스에 Pod 를 생성했습니다.
Pod 는 하나 또는 그 이상의 애플리케이션 컨테이너 (도커 또는 rkt와 같은)들의 그룹을 나타내는 쿠버네티스의 추상적 개념으로 일부는 컨테이너에 대한 자원을 공유합니다.
Check The Pod
- Pod 정보 확인
$ kubectl get pod NAME READY STATUS RESTARTS AGE flask-example-app-959c5f88d-k95wk 1/1 Running 0 24m - Pod 성능 사용량 확인
$ kubectl top pod NAME CPU(cores) MEMORY(bytes) flask-example-app-959c5f88d-k95wk 1m 2Mi - Pod 내 Container 의 log 확인
$ kubectl logs flask-example-app-959c5f88d-k95wk실시간 확인을 위해서는 아래와 같이
-f옵션을 추가합니다.$ kubectl logs -f flask-example-app-959c5f88d-k95wk - Pod 내 Container 에 명령어 수행
$ kubectl exec -ti flask-example-app-959c5f88d-k95wk -- pwd /usr/src/app - Pod 상세 정보 확인 - 1
$ kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES flask-example-app-959c5f88d-k95wk 1/1 Running 0 24m 10.42.0.36 fastvm-centos-7-7-110 <none> <none> - Pod 상세 정보 확인 - 2
$ kubectl describe pod flask-example-app-959c5f88d-k95wk Name: flask-example-app-959c5f88d-k95wk Namespace: default Priority: 0 Node: fastvm-centos-7-7-110/192.168.200.110 Start Time: Wed, 09 Sep 2020 15:38:00 +0900 Labels: app=flask-example-app pod-template-hash=959c5f88d Annotations: <none> Status: Running IP: 10.42.0.36 IPs: IP: 10.42.0.36 Controlled By: ReplicaSet/flask-example-app-959c5f88d Containers: flask-example-app: Container ID: containerd://f99d19b1ac52ced19e300a294cd93ad62a97f6259cf6e426c63c545e0918a9d8 Image: han0495/flask-example-app:v1 Image ID: docker.io/han0495/flask-example-app@sha256:f3d45e996bc86a13e1a8a363d9736e18c1501804690733b86aa02df3f59bda10 Port: <none> Host Port: <none> State: Running Started: Wed, 09 Sep 2020 15:38:01 +0900 Ready: True Restart Count: 0 Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from default-token-89vwb (ro) Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled True Volumes: default-token-89vwb: Type: Secret (a volume populated by a Secret) SecretName: default-token-89vwb Optional: false QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s node.kubernetes.io/unreachable:NoExecute for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled <unknown> default-scheduler Successfully assigned default/flask-example-app-959c5f88d-k95wk to fastvm-centos-7-7-110 Normal Pulled 29m kubelet, fastvm-centos-7-7-110 Container image "han0495/flask-example-app:v1" already present on machine Normal Created 29m kubelet, fastvm-centos-7-7-110 Created container flask-example-app Normal Started 29m kubelet, fastvm-centos-7-7-110 Started container flask-example-app - 현재 실행중인 Pod 의 정보를
yaml형식으로 출력$ kubectl get pod flask-example-app-959c5f88d-k95wk -o yaml아래와 같이 저장이 가능합니다.
$ kubectl get pod flask-example-app-959c5f88d-k95wk -o yaml > flask-example-app.yml
Create Pod
아래 명령어를 통해 Pod 을 생성 할 수 있습니다.
$ kubectl run pod-test-app --image=nginx
pod/pod-test-app created
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
flask-example-app-959c5f88d-k95wk 1/1 Running 0 38m
pod-test-app 1/1 Running 0 66s <<
아래와 같이 yaml 을 이용해서 Pod 을 생성 할 수 있습니다.
$ cat << EOF | kubectl create -f -
apiVersion: v1
kind: Pod
metadata:
labels:
run: pod-test-app-2
name: pod-test-app-2
namespace: default
spec:
containers:
- image: nginx
name: pod-test-app-2
EOF
or
$ kubectl create -f pod-test-app-2.yml
Delete Pod
아래 명령을 통해 Pod 삭제 할 수 있습니다.
$ kubectl delete pod pod-test-app
$ kubectl delete pod pod-test-app-2
연습 문제
아래 container 를 포함한 하나의 Pod 을 생성하시오.
- nginx
- redis
- memcached
연습문제 정답
apiVersion: v1
kind: Pod
metadata:
labels:
run: pod-practice-app
name: pod-practice-app
spec:
containers:
- image: nginx
name: nginx
- image: redis
name: redis
- image: memcached
name: memcached
참고 문서
- https://github.com/chhanz/kubernetes-hands-on-lab
- https://github.com/chhanz/kubernetes-hands-on-lab/blob/master/doc/check-the-pod.md
자주 묻는 질문
Pod 컨테이너 로그를 실시간으로 보려면 어떻게 하나요?
kubectl logs -f <pod 이름>처럼 -f 옵션을 추가하면 됩니다.
실행 중인 Pod 정의를 YAML 파일로 저장하려면 어떻게 하나요?
kubectl get pod <pod 이름> -o yaml > flask-example-app.yml처럼 -o yaml 출력을 파일로 리다이렉트하면 됩니다.
Pod가 어느 노드에서 실행 중인지 확인하려면 어떻게 하나요?
kubectl get pod -o wide를 실행하면 Pod IP와 NODE 열이 함께 표시됩니다.
하나의 Pod에 여러 컨테이너를 넣으려면 어떻게 작성하나요?
Pod YAML의 spec.containers 아래에 nginx, redis, memcached처럼 컨테이너를 여러 개 나열하면 됩니다.