일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 레디스
- 젠킨스
- EMR
- 머신러닝
- fastcampus
- aws
- ec2
- 자동
- Cluster
- 클러스터
- 설정
- SpringBoot
- 로그인
- 예제
- redash
- java
- Redis
- spring
- 간단
- Mac
- Jenkins
- config
- Zeppelin
- 자바
- vue
- login
- hive
- Kafka
- Docker
- gradle
- Today
- Total
코알못
[CKA] kubernetes 리소스 조정(CPU,MEM) 본문
하나의 노드에 여러 컨테이너 파드가 뜰 수 있으며 리소스 제한을 두지 않는다면 하나의 파드가 리소스를 다써버려 다른 파드에 장애가 나게 된다.
우리는 이를 방지 하기 위해 Resource Requests를 사용하여 리소스 제한을 두도록 한다!
그리고 너무 타이트한 파드 배치가 되지 않도록 어느정도 리소스의 여유가 있는 노드에 할당하고 싶다면 Resource Requests 기능을 이용하면 된다!
리소스 조정 항목 | 내용 |
Resource Requests | 파드를 실행하기 위한 최소 리소스양을 요청 |
Resource Limits | 파드가 사용할 수 있는 최대 리소스양을 제한 |
단위는 아래를 참고한다.
MB | 1000KB |
1Mib | 1024Kib |
1core | 1000mc |
이제 nginx 컨테이너 파드를 요청하는데 request를 memory 100Mi cpu 1개로 지정해보자!
# nginx.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
run: my-nginx
name: my-nginx
spec:
containers:
- image: nginx
name: my-nginx
ports:
- containerPort: 80
protocol: TCP
resources:
requests:
memory: 500Mi
cpu: 1
위 nginx.yaml 파일을 가지고 파드를 생성한다.
[node1 ~]$ kubectl create -f nginx.yaml
pod/my-nginx created
파드 정보를 보면 정상적으로 생성 되었으며
[node1 ~]$ kubectl get pods
NAME READY STATUS RESTARTS AGE
my-nginx 1/1 Running 0 20s
상세 정보를 보면 아래와 같이 request 가 원하는대로 설정 된것을 볼 수 있다.
[node1 ~]$ kubectl describe pod my-nginx
Name: my-nginx
Namespace: default
...
IPs:
IP: 10.5.1.2
Containers:
my-nginx:
Container ID: containerd://123d6eb1bdc325b353988798c7295648bb2e8d60d9015d0b194e3ce23887f851
Image: nginx
Image ID: docker.io/library/nginx@sha256:104c7c5c54f2685f0f46f3be607ce60da7085da3eaa5ad22d3d9f01594295e9c
Port: 80/TCP
Host Port: 0/TCP
State: Running
Started: Tue, 29 Aug 2023 11:47:10 +0000
Ready: True
Restart Count: 0
Requests:
cpu: 1
memory: 500Mi
다음 실습을 위해 파드를 제거한다.
[node1 ~]$ kubectl delete pod --all
pod "my-nginx" deleted
[node1 ~]$
이제 limit 리소스 제한 설정을 진행하며 아래와 같이 설정 하면 된다.
# nginx.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: my-nginx
name: my-nginx
spec:
containers:
- image: nginx
name: my-nginx
ports:
- containerPort: 80
protocol: TCP
resources:
limits:
memory: 500Mi
cpu: 1
nginx 파드 정보를 보면 설정한 limit 만큼 request 설정도 같은 값으로 지정 되는것을 볼 수 있다.
[node1 ~]$ kubectl describe pod my-nginx
Name: my-nginx
Namespace: default
...
Limits:
cpu: 1
memory: 500Mi
Requests:
cpu: 1
memory: 500Mi
다음 실습을 위해 모든 파드를 제거한다.
[node1 ~]$ kubectl delete pod --all
pod "my-nginx" deleted
만약에 리소스를 크게 설정하면 어떻게 될까 ?
yaml 파일을 아래와 같이 수정하고 생성해본다.
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: my-nginx
name: my-nginx
spec:
containers:
- image: nginx
name: my-nginx
ports:
- containerPort: 80
protocol: TCP
resources:
limits:
memory: 500Mi
cpu: 100
pod 항목을 보면 pending 상태로 원하는 리소스를 가진 노드가 없어 노드 할당 되지 않아 Running 되지 않는다.
[node1 ~]$ kubectl get pods
NAME READY STATUS RESTARTS AGE
my-nginx 0/1 Pending 0 10s
이처럼 리소스 요청, 제한을 너무 크게 잡으면 파드가 생성되지 않을 수 있다는 것을 알 수 있다.
이제 request, limit 두가지를 모두 설정 하는 실습을 진행하며 아래와 같이 하면 된다.
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: my-nginx
name: my-nginx
spec:
containers:
- image: nginx
name: my-nginx
ports:
- containerPort: 80
protocol: TCP
resources:
limits:
memory: 200Mi
cpu: 2
requests:
memory: 100Mi
cpu: 1
아래와 같이 정상적으로 조회 되는것을 볼 수 있다.
[node1 ~]$ kubectl describe pod my-nginx
Name: my-nginx
Namespace: default
...
Limits:
cpu: 2
memory: 200Mi
Requests:
cpu: 1
memory: 100Mi
끝!
'ETC' 카테고리의 다른 글
[CKA] kubernetes Controller - ReplicaSet (0) | 2023.09.03 |
---|---|
[CKA] kubernetes Controller - ReplecationController (0) | 2023.09.02 |
[CKA] Kubernetes init & infra & static container (0) | 2023.08.24 |
[CKA] Kubernetes Self-healing LivenessProbe (0) | 2023.08.15 |
[CKA] yaml 및 APIVersion (0) | 2023.08.12 |