본문 바로가기

클라우드/쿠버네티스(Kubernetes)

쿠버네티스 Kubernetes 파드(Pod) / 리소스 정보 확인

더보기

# 파드(Pod)
쿠버네티스 워크로드 리소스 중에 가장작은 리소스 단위, 가장 핵심
쿠버네티스가 제어할수있는 가장 작은 단위 파드 (쿠버네티스가 컨테이너를 직접 제어하지 않는다)
여러개의 컨테이너가 정의될수있다

# 파드 정의 
vagrant@k-control:~$ cat ldh-pod.yaml
apiVersion: v1
kind: Pod
metadata:                                #파드의 이름
  name: ldh-pod
spec:
  containers:
  - image: ghcr.io/c1tsdskd/sdsd
    name: ldh                            #컨테이너의 이름   
    ports:                               #필드 이름이 복수형인것은 거의 리스트 형태 
    - containerPort: 8080                #컨테이너에서 노출 할 포트
      protocol: TCP
      

# 파드 생성
vagrant@k-control:~$ kubectl create -f ldh-pod.yaml
pod/ldh-pod created                       #종류/이름 

# 전체 파드 목록 확인
vagrant@k-control:~$ kubectl get pods
NAME      READY   STATUS    RESTARTS   AGE
ldh-pod   1/1     Running   0          80s
        # 1/컨테이너의 갯수    컨테이너의 재시작 횟수 

# ldh-pod 목록 확인
vagrant@k-control:~$ kubectl get pods ldh-pod
NAME      READY   STATUS    RESTARTS   AGE
ldh-pod   1/1     Running   0          4m3

# ldh-pod 목록 확인 wide 
vagrant@k-control:~$ kubectl get pods ldh-pod -o wide
NAME      READY   STATUS    RESTARTS   AGE    IP               NODE      NOMINATED NODE   READINESS GATES
ldh-pod   1/1     Running   0          8m4s   192.168.82.130   k-node1   <none>           <none>
                                                              #node1에 배치


# ldh-pod 정의 확인 (yaml 형태로 출력 )
vagrant@k-control:~$ kubectl get pods ldh-pod -o yaml
apiVersion: v1
kind: Pod
metadata:
  annotations:
    cni.projectcalico.org/podIP: 192.168.82.130/32
    cni.projectcalico.org/podIPs: 192.168.82.130/32
  creationTimestamp: "2021-07-07T07:34:50Z"
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:spec:
        f:containers:
          k:{"name":"ldh"}: 
...(생략)...



# ldh-pod 정보 자세히 확인
vagrant@k-control:~$ kubectl describe pods ldh-pod 
Name:         ldh-pod
Namespace:    default
Priority:     0
Node:         k-node1/10.0.2.15
Start Time:   Wed, 07 Jul 2021 07:34:50 +0000
Labels:       <none>
...(생략)...
Events:              #이벤트 확인 가능 -리소스에 대한 활동로그 
  Type    Reason     Age    From               Message
  ----    ------     ----   ----               -------
  Normal  Scheduled  9m34s  default-scheduler  Successfully assigned default/ldh-pod to k-node1
  Normal  Pulling    9m33s  kubelet            Pulling image "ghcr.io/c1tgfgf7/ggfgfb"
  Normal  Pulled     9m31s  kubelet            Successfully pulled image "ghcr.io/c1gfg/go-gf in 2.251503867s
  Normal  Created    9m31s  kubelet            Created container ldh
  Normal  Started    9m31s  kubelet            Started container ldh
         # 어디에 배치 되어야 할지 default-scheduler가 정한다
         # 파드에 있는 컨테이너를 생성, 실행 하려면 kubelet이 Docker에 명령-도커데몬을 컨트롤

 

# 로그 확인
vagrant@k-control:~$ kubectl logs ldh-pod
2021/07/07 07:34:54 Start MyWeb Application
2021/07/07 07:34:54 Listen:  0.0.0.0:8080 

# 포트포워딩
# 파드를 임시로 외부로 포워딩
# 서비스라는 리소스를 만들지 않고 작동하는지 확인만 할때사용
vagrant@k-control:~$ kubectl port-forward ldh-pod 8080:8080
Forwarding from 127.0.0.1:8080 -> 8080
Forwarding from [::1]:8080 -> 8080

#다른 터미널에서 확인
vagrant@k-control:~$ curl http://localhost:8080
Hello World!
ldh-pod





# 로그 확인, 포트 포워딩에 오류가 난다면?
# 네트워크 확인 후 각 컨트롤,노드의 ip 변경
vagrant@k-node1:~$ echo "KUBELET_EXTRA_ARGS='--node-ip 192.168.200.51'" | sudo tee /etc/default/kubelet
KUBELET_EXTRA_ARGS='--node-ip 192.168.200.51'
vagrant@k-node1:~$  sudo systemctl daemon-reload && sudo systemctl restart kubelet