namespace에 자원 제한(reousrce limit) 예시
low-usage-limit name space를 생성한다.
$ kubectl create namespace low-usage-limit
namespace/low-usage-limit created
$ kubectl get namespace
NAME STATUS AGE
default Active 1h
ingress-nginx Active 1h
kube-public Active 1h
kube-system Active 1h
low-usage-limit Active 19s
자원 제한 정보를 설정한다.
$ vi low-resource-range.yaml
apiVersion: v1
kind: LimitRange
metadata:
name: low-resource-range
spec:
limits:
- default:
cpu: 1
memory: 500Mi
defaultRequest:
cpu: 0.5
memory: 100Mi
type: Container
아래와 같이 진행하면 실행되지 않는다.
$ kubectl create -f low-resource-range.yaml --namespace=low-usage-limit
$ kubectl get LimitRange --all-namespaces
NAMESPACE NAME AGE
low-usage-limit low-resource-range 1m
$ kubectl get LimitRange
namespace이름을 넣어주고 새로운 deployment를 생성한다.
$ kubectl create deployment limited-hog --image vish/stress -n low-usage-limit
참고로 삭제할 때도 namespace를 줘야 삭제된다.
$ kubectl delete deployment limited-hog -n low-usage-limit
deployment.extensions "limited-hog" deleted
$ kubectl delete deployment limited-hog
Error from server (NotFound): deployments.extensions "limited-hog" not found
제대로 실행되었다면. low-usage-limit limited-hog 의 available이 0이 되지 않을 것이다. (마침 1이다.)
$ kubectl get deployments --all-namespaces
NAMESPACE NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
default hog 1 1 1 1 15m
kube-system kube-dns 2 2 2 2 1h
kube-system kubedns-autoscaler 1 1 1 1 1h
kube-system kubernetes-dashboard 1 1 1 1 1h
kube-system tiller-deploy 1 1 1 1 1h
low-usage-limit limited-hog 1 1 1 1 37s
제대로 실행 중이다. 만약 deployment가 잘못 되었다면 STATUS에 잘 표시될 것이다 .
$ kubectl -n low-usage-limit get pods
NAME READY STATUS RESTARTS AGE
limited-hog-757fc847ff-mvm7s 1/1 Running 0 1m
pod 설정을 yaml로 보면 제대로 되어 있다.
$ kubectl -n low-usage-limit get pod limited-hog-757fc847ff-mvm7s -o yaml
resources:
limits:
cpu: "1"
memory: 500Mi
requests:
cpu: 500m
memory: 100Mi
deployment를 수정해 namespace를 적용한다.
$ kubectl get deployment hog --export -o yaml > new-hog.yaml
namespace: low-usage-limit를 추가하고 deploy한다.
$ vi new-hog.yaml
labels:
app: hog
name: hog
namespace: low-usage-limit
$ kubectl create -f new-hog.yaml
$ get deployments --all-namespaces
NAMESPACE NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
default hog 1 1 1 1 23m
kube-system kube-dns 2 2 2 2 1h
kube-system kubedns-autoscaler 1 1 1 1 1h
kube-system kubernetes-dashboard 1 1 1 1 1h
kube-system tiller-deploy 1 1 1 1 1h
low-usage-limit hog 1 1 1 1 40s
low-usage-limit limited-hog 1 1 1 1 8m
work장비에 들어가서 보면 메모리를 12% 쓰고 있다.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
30062 root 20 0 960872 954176 3120 S 101.0 11.7 26:52.72 stress
1126 root 20 0 960104 954108 3180 S 100.3 11.7 3:53.52 stress
정리한다.
$ kubectl -n low-usage-limit delete deployment hog
deployment.extensions "hog" deleted
$ kubectl delete deployment hog
deployment.extensions "hog" deleted
출처 : linux foundation kubernetes 예시
'Cloud' 카테고리의 다른 글
[kubernetes] proxy 사용 예시 (0) | 2018.11.29 |
---|---|
[ kubernetes] 토큰으로 api 접근하기 (0) | 2018.11.29 |
[kubernetes] 자원 제약(resource limit) 걸기 예제 (0) | 2018.11.26 |
쿠버네티스 + 스파크 연동 참조 자료(spark 2.3.0) (0) | 2018.10.16 |
linkerd 버전 2 언어를 scala에서 go로 변경 (0) | 2018.10.16 |