pod에 Resource 할당하기
새로운 파드를 생성할 때 스케쥴러는 각 노드에 사용중인 리소스를 고려해서 배치
etcd 통해서 cpu, memory 사용량 체크.
pod당 리소스의 제한을 설정하므로써 디도스 공격시 전체 시스템 장애를 예방 할 수 있음
request, limit으로 resource를 control한다.
- Resource Requests : 파드를 실행하기 위한 최소 리소스 양을 요청
- Resource Limits : 파드가 사용할 수 있는 최대 리소스 양을 제한
실행 중 memory limts을 넘어서 실행되명 해당 파드는 재실행된다.
resource 정의할 때 requests만 정의하면 limits은 설정되지않고, limits만 정의하면 request는 limits과 동일하게 설정된다.
Assign CPU Resources to Containers and Pods
This page shows how to assign a CPU request and a CPU limit to a container. Containers cannot use more CPU than the configured limit. Provided the system has CPU time free, a container is guaranteed to be allocated as much CPU as it requests. Before you be
kubernetes.io
그 전에 알아둘 것!
컴퓨터 메모리의 저장단위 : 키비바이트, 미비바이트
일반적으로 알고이는 키로바이트, 메가바이트랑 약간 차이가 있다.
1MB = 1000 KB
1 MiB = 1024 KiB (미비바이트, 키비바이트)
cpu는 코어수로 카운트해서
1코어 -> 100%
2코어 -> 200% 이런식으로 계산된다.
리소스 request, limts을 모두 설정한 kubernetes yaml 파일
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod-resource
spec:
containers:
- name: nginx-container
image: nginx:1.14
ports:
- containerPort: 80
protocol: TCP
resources:
requests:
cpu: 200m
memory: 250Mi
limits:
cpu: 1
memory: 500Mi
pod 생성
kubectl create -f filename.yaml
결과 확인
kubectl describe pod pod-name
노드가 모두 cpu 2코어인데 request를 cpu 2코어로 주면 어떻게 될까?
각 노드에 내가 생성한 노드가 없더라도 기본적으로 실행중이 파드들이 있기때문에
(kubectl get pods --all-namespaces 로 확인가능한 파드들),
해당 요청에 따라 생성된(될) pod는 계속 pending 상태에 놓이게 된다.
따라서 resource를 너무 크게 주면 안된다.
pod 환경변수 설정
컨테이너를 만들면 환경변수 설정이 필요하다.
쿠버네티스로 컨테이너를 만들때, 도커파일에 설정된 환경변수 쿠버네티스로 변경과 재정의 가능하고, 새로운 환경변수도 추가가 가능하다.
다음과 같이 yaml 파일에 spec을 추가하면 된다.
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod-resource
spec:
containers:
- name: nginx-container
image: nginx:1.14
ports:
- containerPort: 80
protocol: TCP
env:
- name: MYVAR
value: "testvalue"
pod 생성
kubectl create -f filename.yaml
생성된 파드의 컨테이너에 인터렉티브모드로 들어가기
kubectl exec pod-name -it -- /bin/bash
환경변수 확인
env
# or
echo $MYVAR
컨테이너 내에 사전에 yaml 파일에 정의한 환경변수가 잘 설정되어 있는 것을 확인할 수 있다.
pod 실행패턴
하나에 파드에 여러 컨테이너가 존재하는 multi-container pod에 대표적인 실행패턴(디자인패턴) 3가지가 있다.
멀티 컨테이너 파드의 대표적인 디자인 패턴들
쿠버네티스에서 때로는 하나의 파드 안에 여러 컨테이너를 함께 운영해야 할 수 있다. 메인 컨테이너의 기능 향상이나 안정성 확보, 또는 의존성 이슈를 체크할 때 유용할 수 있는 멀티 컨테이
seongjin.me
- sidecar
혼자서는 동작할 수 없는 파드
ex. 웹서버에서 로그만들어 내면 해당 로그를 분석하는 형태 - adapter
중간에 어댑터 역할
ex. 외부 데이터를 어댑터가 정보 가져오면 웹 UI로 보여줌 - ambassador
ex. 고객들의 접속으로 생성된 정보를 분산해주는 로드밸런싱 역할
'Kubernetes' 카테고리의 다른 글
[Kubernetes] VM 쿠버네티스 실습환경 설정 - kubectl 설치 (0) | 2023.04.07 |
---|---|
[Kubernetes][따배쿠 6-1] Controller - Replication Controller (0) | 2023.03.22 |
[Kubernetes] 따배쿠 5강 문제풀이 (0) | 2023.03.17 |
[Kubernetes] init & infra container / static pod (0) | 2023.03.03 |
[Kubernetes] LivenessProbe : Self-healing Pod (0) | 2023.02.23 |