쿠버네티스

쿠버네티스 Pod

개발롬 2023. 9. 15. 23:55

인강 들으면서 정리한 쿠버네티스 관련 내용입니다.

Pod

  • 쿠버네티스에서 deploy를 할 수 있는 가장 작은 컴퓨팅 유닛입니다.
  • pod 안에는 하나 이상의 컨테이너를 넣을 수 있으며 이 컨테이너들은 storage와 network 를 공유합니다.
  • 컨테이너 여러개를 하나의 pod에 넣으려면 그 컨테이너들은 서로 밀접하게 연관되도록 설정해야합니다. 그래서 확장과 유연함을 생각한다면 하나의 pod에 하나의 컨테이너를 권장합니다.

1. Pod 생성하는 법

커맨드 라인으로 작성해도 되지만 보통은 yml 파일로 작성합니다.

예시)

apiVersion: v1
kind: pod
metadata:                     // 태그 같은 개념 (서비스에 이름 붙이기)
  name : nginx
spec:
  containers:                 // 어떤 컨테이너들을 넣을지
  - name: nginx
      image: nginx:1.14.2       // 도커 이미지
    ports:
    - containerPort: 80       // 컨테이너가 expose하는 port (즉 80포트로 서비스중이다)

위 중 필수값은 apiVersion, kind, metadata 입니다.

2. 실습해보기

미니큐브로 실습해보기!!!

1) 아래의 pod.yml 작성

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app.kubernetest.io/name: proxy
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - container: 80
      name: http-web-svc

2) deploy 하기

$ kubectl apply -f pod.yml

3) pod 확인하기

$ kubectl get pod

$ kubectl get pod -o wide
> 위의 명렁어로 입력하면 좀 더 자세한 정보로 확인이 가능합니다.

$ kubectl describe po/nginx  (nginx는 pod 이름)
> pod에 대한 info 를 확인할 수 있습니다.

하지만 위의 yml로는 ip 주소에 접근할 수 없습니다. 그래서 service를 생성해야합니다.

4) pod.yml 밑에 service 관련 내용 작성하기

---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: NodePort                    // node안에 있는 port를 expose한다
  selector:
    app.kubernetes.io/name: proxy   // 이 name 을 pod에 있는 labels과 같게 해야 pod를 찾아감.
  ports:
  - name: nginx-service-port
    protocol: TCP
    port: 80                        // service의 포트
    targetPort: http-web-svc        // pod의 port 의 name

5) deploy 하기

$ kubectl apply -f pod.yml

6) service 확인하기

$ kubectl get service

7) 미니큐브로 실행하기

$ minikube service [서비스명]

8) pod생성을 위한 yaml 설정

* apiVersion : version을 나타내는 identifier
* kind
    - Pod : 가장 작은 쿠버네티스의 오브젝트
    - Deployment : 여러개의 pod을 한번에 deploy 할 수 있음. 롤링 업데이트와 롤백과 같은 기능을 제공함.
    - Service : service는 변경 되지 않는 ip를 제공하며 pod를 그룹화하며 외부에서 pod에 접근이 가능하게 해줌.
    - ConfigMap : 설정 정보를 저장해놓는 일종의 저장소 역할을 함. (ex. 일반적인 환경변수)
    - Secret : ConfigMAp 과 비슷하며, 보안이 중요한 패스워드나 API키, 인증서 등을 저장할 수 있음.
    - PersistentVolume : disk 볼륨에 관한 설정.
    - StatefulSet : 상태를 유지하는 데이터베이스와 같은 애플리케이션을 관리하기 위한 컨트롤러.
    - Job : 배치 작업이나 주기적인 task에서 주로 사용됨.
* matadata
    - name : 쿠버네티스에서 어떤 pod을 봐야하고 바꿔야하는지 등을 알아야하기 떄문에 unique 해야함.
    - label : key-value 형태이며 optional 한 값임. (ex. 환경 구분을 위해 사용하기도 함 / stage & prod & dev)

출처
인강
블로그