Post

Linux 쿠버네티스(2)

Linux 쿠버네티스(2)

Kubbernetes

파드(POD)

  1. 파드(Pod)
    • 컨테이너의 추상화 시켜 놓은 단위
    • 쿠버네티스에서 배포하는 최소단위
    • 하나의 POD에는 여러개의 Container가 들어갈 수 있다.
    • POD는 여러 컨테이너가 들어있어도 하나의 아이피를 갖는다.
  2. 다중 컨테이너 파드(Multi-container Pod)

    1
    2
    3
    4
    
     vi multi-pod.yaml
     kubectl create -f multi-pod.yaml
     kubectl exec multipod -c centos-container -it -- /bin/bash
     kubectl logs multipod -c centos-container
    
  3. 라이브니스 프로브(Liveness Probe)
    • Probe 종류
      • Liveness Probe
      • Readness Probe
      • Startup Probe

        현재에서는 세개의 차이를 아는 것은 너무 고급 과정이다

    • Liveness Probe
      1. httpGet

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        
         # HTTP get
         livenessProbe:
           httpGet:
             path: /
             port: 80
                    
         # TCP SOCKET
         livenessProbe:
           tcpSocket:
             port: 22
                    
         # exec
         livenessProbe:
           exec:
             command:
               - ls
               - /tmp/datafile
        
    • Liveness Probe parameter

초기화 컨테이너(init container)

  • 앱 컨테이너(main container)가 동작하기 위한 전초 작업을 위한 컨테이너이다.
    • ex. (WEB <-> DB) 환경에서 웹 컨테이너 에서 DB 컨테이너가 기동되었는지를 위한 작업
    • (Network) 네트워크 인프라 점검 위한 전초 작업
  • main container가 실행되기 전에 사전 작업이 필요할 경우 사용한다.
  • 초기화 컨테이너가 모두 실행후에 앱 컨테이너를 실행한다.
  • 초기화 컨테이너는 앱 이미지에는 없는 유틸리티 또는 설정 스크립트 등을 포함할 수 있다.
1
2
3
4
5
6
7
8
9
spec:
  containers:
  - name: myapp-container
    image: busybox:1.28
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init-myservice
    image: busybox:1.28
    command: ['sh', '-c', "until nslookup myservice.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for myservice; sleep 2; done"]

파드 인프라 언테이너 (Pause 컨테이너)

  • 인프라 컨테이너
    • 앱 컨테이너의 인프라를 생성 및 삭제를 담당하는 컨테이너

STATIC POD(중요!)

  • 정적 파드
    • API 서버 없이 특정 노드에 있는 kubelet 데몬에 의해 직접 관리
    • /etc/kubernetes/manifests/ 디렉토리에 k8s yaml 파일을 저장시 적용됨
    • 정적 파드 용도
      • 각 노드에서 사용해야하는 파드들을 실행할때 사용
        • ex. 쿠버네티스 노드를 관리하는 파드
        • ex. 데이터를 수집하는 파드
    • 해당 노드에서만 동작해야하는 파드가 있다. 그럴 경우 사용한다.
  • 구성
    • /var/lib/kubelet/config.yaml 꼭 확인해주기(노드에 들어가서 작업)
    • staticPodPath 경로를 바꾸라고 하면 바꿔주면 된다.
    • 그 후 systemctl restart kubelet 해주면 됨!
  • 관련 폴더
    • /var/lib/kubulet/config.yaml
      • staticPodPath: /etc/kubernetes/manifests
    • /etc/kubernetes/manifests
      • vi /etc/kubernetes/manifests/newpod.yaml

파드 자원 할당

  • 자원 할당
    • cpu( 단위: 1core/1vCPU = 1000m )
    • mem( 단위: 500Mi, 1Gi, ..)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
      containers:
      - name: nginx-container
        image: nginx:1.14
        ports:
        - containerPort: 80
        resources:
          requests:
            cpu: "200m"
            memory: "250Mi"
          limits:
            cpu: "1"
            memory: "500Mi"
    
  • 할당된 리소스보다 더 많은 리소스를 가진 파드는 실행 불가(배포불가, pending상태)하다.
  1. request만 줬을 때

  2. limit만 줬을 때

  3. 둘 다 줬을 때

파드 환경 변수 (중요)

  • 파드의 환경 변수 설정
1
2
3
4
5
6
7
8
9
# vi pod-env.yaml
containers:
- name: mysql-container
  image: mysql
  ports:
  - containerPort: 3306
  env:
  - name: MYSQL_ROOT_PASSWORD
    value: password

Pod 구성 패턴의 종류

sidecar adaptor ambassador

–dry-run=client -o yaml

apply : 계속 추가해줌 create: 있으면 그냥 에러남


0401 workload resource

deployment : DB 제외 나머지 statefulset : DB

## 리플리케이션 컨트롤러 파드의 개수를 보장

요구하는 pod개수가 부족하면 template을 이용해 pod를 추가 요구하는 pod 수보다 많으면 -> 최근에 생성된 pod 삭제

selector key: value 형식

  • Label vs Selector
    • label: 분류
    • selector : 분류를 선택한다.

    template: 컨테이너 정의가 들어감(컨테이너 이름들)

This post is licensed under CC BY 4.0 by the author.