[쿠버네티스] - Pod

chancehee·2023년 9월 13일
0

쿠버네티스

목록 보기
4/17
post-thumbnail

[ Pod ]

  • 쿠버네티스에서 관리하는 가장 작은 배포 단위
  • 쿠버네티스와 도커의 차이점은 도커는 컨테이너를 만들지만, 쿠버네티스는 컨테이너 대신 Pod을 만든다.
  • Pod은 한 개 또는 여러 개의 컨테이너를 포함한다.
    (여러 개의 컨테이너를 포함할 경우, VolumeIP 주소를 공유한다.)
    (하나의 Pod에 하나의 컨테이너를 갖는 것이 일반적이다.)
  • 쿠버네티스 클러스터 안에 노드가 있고, 노드 안에 Pod이 있다.

[ 실습 ]

Pod 생성은 명령형 커맨드 또는 선언형 오브젝트 구성으로 생성하는 방법이 존재한다.

1. [ 명령형 커맨드 ]

kubectl run [pod 이름] --image [이미지 이름]
kubectl create
kubectl expose

2. [ 선언형 오브젝트 구성 ]

운영환경에서는 복잡하고 다양한 설정이 필요하기 때문에, 원하는 리소스를 YAML 파일로 작성하고 변경 내용 버전을 관리하는 것이 적합하다고 한다.

version, kind, metadata, spec는 리소스를 정의할 때 반드시 필요한 요소다.

apiVersion: v1
kind: Pod
metadata:
  name: [pod 이름]
  labels:
    app: [라벨 이름]
spec:
  containers:
    - name: [컨테이너 이름]
      image: [이미지 이름]

kubectl apply -f [YAML 파일]
kubectl create -f [YAML 파일

기타 Pod 조작 명령어

kubectl get pod : pod 조회
kubectl logs [pod 이름] : pod 로그 확인
kubectl exec -it [pod 이름] -- sh : pod 컨테이너 접속
kubectl delete -f [YAML 파일] : pod 제거
kubectl edit pod [pod 이름] : pod YAML 수정 ex) 이미지 변경

[ Pod 생성 분석 ]

  1. 스케줄러API서버를 감시하면서 할당되지 않은 pod이 있는지 체크
  2. 스케줄러는 할당되지 않은 pod을 감지하고 적절한 노드에 할당
  3. 노드에 설치된 kubelet은 자신의 노드에 할당된 pod이 있는지 체크
  4. kubelet스케줄러에 의해 자신에게 할당된 pod의 정보를 확인하고 컨테이너 생성
  5. kubelet은 자신에게 할당된 pod의 상태를 API서버에 전달

[ 예제 : Mongo DB Pod 만들기 ]

sudo vi mongodb-pod.yml

apiVersion: v1
kind: Pod
metadata:
  name: mongodb
  labels:
    app: mongo
spec:
  containers:
    - name: mongodb
      image: mongo:4

kubectl apply -f mongodb-pod.yml

[ 예제 : Maria DB Pod 만들기 ]

sudo vi mariadb-pod.yml

apiVersion: v1
kind: Pod
metadata:
  name: mariadb
  labels:
    app: mariadb
spec:
  containers:
    - name: mariadb
      image: mariadb:10.7
      env:
        - name: MYSQL_ROOT_PASSWORD
          value: "1234"

kubectl apply -f mariadb-pod.yml

출처
https://subicura.com/k8s/guide/pod.html#%E1%84%83%E1%85%A1%E1%84%8C%E1%85%AE%E1%86%BC-%E1%84%8F%E1%85%A5%E1%86%AB%E1%84%90%E1%85%A6%E1%84%8B%E1%85%B5%E1%84%82%E1%85%A5

0개의 댓글