Pod

장동민·2022년 7월 26일
0

CKA 자격증 준비

목록 보기
4/13

1. Pod란?

  • 컨테이너를 표현하는 k8s API의 최소 단위
  • Pod에는 하나 또는 여러 개의 컨테이너가 포함될 수 있음


2. Pod 생성

2-1. 명령어로 CLI 모드에서 생성

  • nginx 웹 서버 컨테이너를 pod로 동작시키기
# pod name: web, image: nginx:1.14, port: 80인 파드 생성

$ kubectl run web --image=nginx:1.14 --port=80

✍ --dry-run 옵션 : 파드를 생성 할 수 있는지 없는지 실제로 실행시키지 않고 여부만 알려줌

2-2. yaml 템플릿으로 생성

  • nginx 웹 서버 컨테이너를 pod로 동작시키기
# pod name: web, image: nginx:1.14, port: 80인 파드 생성

<yaml 파일>
apiVersion: v1
kind: Pod
metadata:
  name: web
spec:
  containers:
  - image: nginx:1.14
    name: web
    ports:
    - containerPort: 80

# yaml 파일을 만든 뒤 yaml 파일 실행
$ kubectl apply -f web.yaml

※ 문제1: Pod 생성하기

(참고 URL: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#%EC%85%B8-%EC%95%88%EC%97%90%EC%84%9C-%EC%BB%A4%EB%A7%A8%EB%93%9C-%EC%8B%A4%ED%96%89%ED%95%98%EA%B8%B0)

  • 작업 클러스터 : k8s
  • 'cka-exam'이라는 namespace를 만들고, 'cka-exam' namespace에 아래와 같은 Pod를 생성하시오.
    • pod Name : pod-01
    • image : busybox
    • 환경변수 : CERT = "CKA-cert"
    • command : /bin/sh
    • args : -c "while true; do echo $(CERT); sleep 10; done"
- 작업 클러스터 변경
$ kubectl config use-context k8s

- 'cka-exam' namespace 생성
$ kubectl create namespace cka-exam

- 이름이 pod-01, image가 busybox인 pod 생성 및 yaml 파일 생성
$ kubectl run pod-01 --image=busybox --dry-run -o yaml > 2-1.yaml

- 2-1.yaml 파일 수정

apiVersion: v1
kind: Pod
metadata:
  name: pod-01
  namespace: cka-exam
spec:
  containers:
  - env:
    - name: CERT
      value: CKA-cert
    image: busybox
    name: pod-01
    command: ["/bin/sh"]
    args: ["-c","while true; do echo $(CERT); sleep 10;done"]

- 수정한 2-1.yaml 파일 apply
$ kubectl apply -f 2-1.yaml

3. Static Pod 만들기

  • API 서버 없이 특정 노드에 있는 kubelet에 의해 직접 관리
  • /etc/kubernetes/manifests/ 디렉토리에 pod yaml 파일을 저장 시 적용됨
  • static pod 디렉토리 구성
# cat /var/lib/kubelet/config.yaml

<config.yaml 파일 내용>
...
staticPodPath: /etc/kubernetes/manifests
  • 디렉토리 수정 시 kubelet 데몬 재실행
# systemctl restart kubelet

만약 hk8s-w1에 static Pod를 만든다면?
1. ssh로 hk8s-w1 서버에 접속
2. sudo -i로 root 권한을 얻음
3. /etc/kubernetes/manifests 디렉토리에 pod yaml파일을 저장


※ 문제2: static pod 생성하기

  • hk8s-w1 노드에 nginx-static-pod2.yaml 라는 이름의 Static Pod를 생성하시오.
    • pod name: nginx-static-pod2
    • image: nginx
    • port: 80
  1. hk8s-w1 노드에 접속

  2. root 계정으로 변경 후 어디에다가 static Pod를 만들어야하는지 확인

📌 staticPodPath 경로 확인

  1. /etc/kubernetes/manifests 경로로 이동하여 static pod 생성 후 실행

  2. 실행 결과 확인


4. multi-container

  • 하나의 Pod에 여러 개의 컨테이너가 포함되어 함께 실행됨

※ 문제3: multi container Pod 생성하기

(참고 URL: https://kubernetes.io/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume/#creating-a-pod-that-runs-two-containers)

  • 작업 클러스터 : k8s
  • 4개의 컨테이너를 동작시키는 eshop-frontend Pod를 생성하시오.
    • pod image: nginx, redis, memcached, consul
  1. k8s 클러스터로 이동

  2. eshop-frontend Pod 생성

  3. 3-2.yaml 파일 수정 후 저장

  1. 3-2.yaml 파일 apply

  2. 결과 확인


5. sidecar-container

  • 기본 컨테이너 기능을 확장하기 위해 사용
  • 본래의 컨테이너는 기본 서비스에 충실하고, 추가 기능을 별도의 컨테이너를 이용해 적용
  • 웹서버는 기본서비스에 충실하고, 추가로 생성되는 웹서버 로그는 별도의 사이드 카 컨테이너가 수집하여 외부 log aggregator로 전송하는 형태의 서비스


※ 문제4 : sidecar container Pod 생성하기

(참고 URL: https://kubernetes.io/docs/concepts/cluster-administration/logging/#sidecar-container-with-logging-agent)

  • 작업 클러스터 : k8s
  • 현재 운영중인 eshop-cart-app Pod의 로그를 Kubernetes built-in logging 아키텍처에 통합하는 로그 스트리밍 사이드카 컨테이너를 운영하시오.
    • busybox 이미지를 사용하여 price라는 이름의 사이드카 컨테이너를 기존 eshop-cart-app에 추가합니다.
    • 새 price 컨테이너는 다음과 같은 command를 실행해야 합니다.
      Command: /bin/sh, -c, "tail -n+1 -f /var/log/cart-app.log"
    • /var/log에 마운트 된 볼륨을 사용하여 사이드카 컨테이너에서 로그 파일 cart-app.log를 사용해야 합니다.
    • eshop-cart-app Pod와 cart-app 컨테이너를 수정하지 마시오.
  1. k8s 클러스터로 이동

  2. eshop-cart-app 파드를 yaml 파일로 복사하여 저장 후 편집 실행(기존에 eshop-cart-app 파드가 존재)

  3. yaml 파일 수정(sidecar container 추가) 후 저장

  1. 3-3.yaml 파일 apply

  1. 결과 확인

📌 eshop-cart-app를 log로 확인

profile
나만의 데이터베이스

0개의 댓글