cho2cee
TIL
cho2cee
전체 방문자
오늘
어제
  • 전체 게시글 (78)
    • Cloud (31)
      • AWS (12)
      • Kubernetes (16)
      • IaC (3)
    • Security (15)
      • ELK (5)
      • Reversing (10)
    • Network (8)
    • Linux (4)
    • Etc. (20)
      • 기타 (4)
      • 업무 (16)

태그

  • VPC
  • AWS
  • CLOUD
  • SAA
  • 합격후기

최근 댓글

블로그 메뉴

  • 홈
  • 태그
  • 방명록
hELLO
cho2cee

TIL

[Kubernetes] Kubernetes pod | pod 생성, 관리
Cloud/Kubernetes

[Kubernetes] Kubernetes pod | pod 생성, 관리

2021. 12. 8. 00:15

1. Pod 개념 및 사용하기

도커에서의 Container

  • 아래 코드는 앱서비스를 제공하는 app.js 파일이다.
  • 클라이언트 요청이 들어오면 8080 커넥션을 맺어 200 상태코드와 함께 컨테이너의 이름을 응답한다.
# cat > app.js const 
http = require('http'); 
const os = require('os'); 
console.log("Test server starting..."); 
var handler = function(req, res) { res.writeHead(200); 
  res.end("Container Hostname: " + os.hostname() + "\n"); 
}; 
var www = http.createServer(handler); 
www.listen(8080);
  • smlinux라는 계정에서 app.js를 빌드하여 푸시하면 도커 허브에 app.js라는 컨테이너가 저장된다.
# cat > Dockerfile FROM node:12 COPY app.js /app.js 
ENTRYPOINT ["node", "app.js"] 
<Ctrl> <d> 

# docker build -t smlinux/app.js 
# docker push smlinux/app.js

 

Pod 란?

  • 쿠버네티스에서 생성하고 관리할 수 있는 배포 가능 한 가장 작은 컴퓨팅 단위이다.
  • 하나 이상의 컨테이너 그룹이며, 이 그룹은 스토리지 및 네트워크를 공유하고, 해당 컨테이너를 구동하는 방식에 대한 명세를 갖는다.
  • 파드의 콘텐츠는 항상 함께 배치되고, 함께 스케줄되며, 공유 콘텍스트에서 실행된다.
  • pod 예시 (nginx:1.14.2 이미지를 실행하는 컨테이너)
# cat > simple-pod.yaml 
apiVersion: v1 
kind: Pod 
metadata: 
  name: nginx spec: 
  containers: 
  - name: nginx 
  image: nginx:1.14.2 
  ports: 
  - containerPort: 80

 

Pod 생성하기

① kubectl run 명령으로 생성

$ kubectl run nginx --image=nginx:1.14.2

② pod yaml을 이용한 생성 (위에서 생성한 nginx1.14.2 파드)

$ kubectl apply -f https://k8s.io/examples/pods/simple-pod.yaml

$ kubectl create -f nginx
// 파드 실행

$ kubectl get pods web1 -o yaml
// web1 파드를 yaml 형태로 출력

$ kubectl get pods 
// 현재 동작중인 파드 확인 
$ kubectl get pods -o wide 
// 파드의 동작상태 출력
$ kubectl get pods -o yaml 
// 현재 동작중인 파드 상태를 yaml 형태로 출력 

$ kubectl get pods webserver -o json | grep -i podip 

$ curl [파드 IP]
// 파드에 접속해서 결과 보기

 

multi-container Pod 생성하기

$ kubectl create -f pod-multi.yaml
$ kubectl get pods 
$ kubectl get pods -o wide
$ kubectl exec multipod -it -c centos-container -- /bin/bash
/# curl http://localhost:80 
/# exit
$ kubectl logs multipod -c nginx-container

 

Pod 동작 flow 

 값  의미
 Pending  파드가 쿠버네티스 클러스터에서 승인되었지만, 하나 이상의 컨테이너가 설정되지 않았고 실행할 준비가 되지 않았다. 여기에는 파드가 스케줄되기 이전까지의 시간 뿐만 아니라 네트워크를 통한 컨테이너 이미지 다운로드 시간도 포함된다. 
 Running   파드가 노드에 바인딩되었고, 모든 컨테이너가 생성되었다. 적어도 하나의 컨테이너가 아직 실행 중이거나, 시작 또는 재시작 중에 있다. 
 Succeeded   파드에 있는 모든 컨테이너들이 성공적으로 종료되었고, 재시작되지 않을 것이다. 
 Failed   파드에 있는 모든 컨테이너가 종료되었고, 적어도 하나 이상의 컨테이너가 실패로 종료되었다. 즉, 해당 컨테이너는 non-zero 상태로 빠져나왔거나(exited) 시스템에 의해서 종료되었다. 
 Unknown  어떤 이유에 의해서 파드의 상태를 얻을 수 없게 된다. 이 단계는 일반적으로 파드가 실행되어야 하는 노드와의 통신 오류로 인해 발생한다. 

 

 

Pod 관리하기 

  • 동작중인 파드 정보 보기 
$ kubectl get pods 
$ kubectl get pods -o wide 
$ kubectl get pods --all-namespace  // 전체 namespace에서 동작중인 파드 확인
$ kubectl describe pod webserver
  • 동작중인 파드 수정 
$ kubectl edit pod webserver
  • 동작중인 파드 삭제 
$ kubectl delete pod webserver
$ kubectl delete pod --all

 

트러블슈팅 

$ kubectl describe pod // 실행중인 파드의 이벤트 확인

$ kubectl edit pod redis // 파드 정보 수정

 


Reference

🔗따라하면서 배우는 쿠버네티스
🔗kubernetes pod | kubernetes.io

 

 

 

 

저작자표시 (새창열림)

'Cloud > Kubernetes' 카테고리의 다른 글

[Kubernetes] Kubernetes Pod | init container  (0) 2021.12.09
[Kubernetes] Kubernetes Pod | livenessProbe  (0) 2021.12.09
[Kubernetes] 쿠버네티스 아키텍쳐 | yaml, API  (0) 2021.12.07
[Kubernetes] 쿠버네티스 아키텍쳐 | namespace  (0) 2021.12.07
[Kubernetes] 쿠버네티스 아키텍쳐 | 컴포넌트  (0) 2021.12.07
    'Cloud/Kubernetes' 카테고리의 다른 글
    • [Kubernetes] Kubernetes Pod | init container
    • [Kubernetes] Kubernetes Pod | livenessProbe
    • [Kubernetes] 쿠버네티스 아키텍쳐 | yaml, API
    • [Kubernetes] 쿠버네티스 아키텍쳐 | namespace
    cho2cee
    cho2cee
    Today I Learned

    티스토리툴바