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 |