Namespace, ResourceQuota, LimitRange 실습
1. Namespace
Namespace
apiVersion: v1
kind: Namespace
metadata:
name: nm-1
Pod
apiVersion: v1
kind: Pod
metadata:
name: pod-1
namespace: nm-1
labels:
app: pod
spec:
containers:
- name: container
image: kubetm/app
ports:
- containerPort: 8080
Service
apiVersion: v1
kind: Service
metadata:
name: svc-1
namespace: nm-1
spec:
selector:
app: pod
ports:
- port: 9000
targetPort: 8080
Another Namespace
apiVersion: v1
kind: Namespace
metadata:
name: nm-2
Another Pod
apiVersion: v1
kind: Pod
metadata:
name: pod-1
namespace: nm-2
labels:
app: pod
spec:
containers:
- name: container
image: kubetm/init
ports:
- containerPort: 8080
NodePort
apiVersion: v1
kind: Service
metadata:
name: svc-2
namespace: nm-1
spec:
ports:
- port: 9000
targetPort: 8080
nodePort: 30000
type: NodePort
Pod mount host-path
apiVersion: v1
kind: Pod
metadata:
name: pod-2
spec:
nodeSelector:
kubernetes.io/hostname: k8s-node1
containers:
- name: container
image: kubetm/init
volumeMounts:
- name: host-path
mountPath: /mount1
volumes:
- name : host-path
hostPath:
path: /node-v
type: DirectoryOrCreate
실습 과정
Namespace 생성 --> nm-1
만든 nm-1을 대시보드에서 선택하고, 생성을 눌러서 생성
서비스 생성 --> 서비스 셀렉터와 이전에 만든 파드의 라벨이 연결됨
서비스를 클릭하고, 클러스터 ip 복사 -->
10.110.193.89
파드를 클릭하고, ip 복사 -->
20.111.156.86
똑같은 파드를 만드려고 시도 --> 에러남
Another Namespace 생성 --> nm-2
만든 nm-2를 선택하고 서비스 생성 --> 이렇게 선택하고 서비스를 생성하면 네임스페이스를 지정 안 해도됨, 2단계도 마찬가지
nm-2 선택이 되지 않으면 모든 네임스페이스 클릭 후 yaml metadata에 namesapce를 명시하면 됨nm-2를 클릭하면 연결된 파드가 없는걸 확인, 다른 네임스페이스니 연결이 안 된 것
nm-2에 Another Pod 생성하면 nm-2에서 파드가 연결된 것을 확인
nm-2 네임스페이스에 있는 pod에서 nm-1 네임스페이스의 파드에 연결이 되는지 확인
Pod 연결
curl 20.111.156.86:8080/hostname
Service 연결
curl 10.110.193.89:9000/hostname
NodePort를 nm-2에서 생성 후 nm-1에서도 생성되는지 확인 --> nm-1에서 생성 실패
host-path를 마운트 한 pod-2를 nm-1에 생성
nm-1의 pod-2의 shell에서 파일 생성
echo "hello" >> hello.txt
nm-2에 똑같은 내용의 pod-2를 생성하고 pod-2 shell의 mount1에 nm-1의 파드에서 생성한 파일이 있는지 확인
pod-2 shell in nm-1
pod-2 shell in nm-2
2. ResourceQuota
Namespace
apiVersion: v1
kind: Namespace
metadata:
name: nm-3
ResourceQuota
apiVersion: v1
kind: ResourceQuota
metadata:
name: rq-1
namespace: nm-3
spec:
hard:
requests.memory: 1Gi
limits.memory: 1Gi
Error Pod
apiVersion: v1
kind: Pod
metadata:
name: pod-2
namespace: nm-3
spec:
containers:
- name: container
image: kubetm/app
Pod1
apiVersion: v1
kind: Pod
metadata:
name: pod-3
namespace: nm-3
spec:
containers:
- name: container
image: kubetm/app
resources:
requests:
memory: 0.5Gi
limits:
memory: 0.5Gi
Error Pod2
apiVersion: v1
kind: Pod
metadata:
name: pod-4
namespace: nm-3
spec:
containers:
- name: container
image: kubetm/app
resources:
requests:
memory: 0.8Gi
limits:
memory: 0.8Gi
ResourceQuota2
apiVersion: v1
kind: ResourceQuota
metadata:
name: rq-2
namespace: nm-3
spec:
hard:
pods: 2
Pod2
apiVersion: v1
kind: Pod
metadata:
name: pod-4
namespace: nm-3
spec:
containers:
- name: container
image: kubetm/app
resources:
requests:
memory: 0.1Gi
limits:
memory: 0.1Gi
Error Pod3
apiVersion: v1
kind: Pod
metadata:
name: pod-5
namespace: nm-3
spec:
containers:
- name: container
image: kubetm/app
resources:
requests:
memory: 0.1Gi
limits:
memory: 0.1Gi
실습 과정
Namespace 생성
ResuorceQuota 생성 후 잘 만들어 졌는지 마스터에서 확인
ResourceQuota 생성 확인
kubectl describe resourcequotas --namespace=nm-3
Error Pod 생성하고 오류 확인 --> ResourceQuota가 있는데 resources를 명시하지 않아 오류가 생김
Error Pod2 생성하고 오류 확인 --> 현재 0.5Gi가 생성됐는데 0.8Gi를 요구해서 오류 발생
ResourceQuota2 생성 --> 파드 개수 2개 제한
Pod2 생성
Error Pod3 생성 --> 파드 생성 개수 초과 오류
주의
Pod 생성 후 ResourceQuota를 생성하면 기존 Pod에 대해서 제한이 적용되지 않음
ResourceQuota를 만들기 전에 해당 NameSpace에 Pod가 존재하면 안 됨
3. LimitRange
Namespace
apiVersion: v1
kind: Namespace
metadata:
name: nm-5
LimitRange
apiVersion: v1
kind: LimitRange
metadata:
name: lr-1
namespace: nm-5
spec:
limits:
- type: Container
min:
memory: 0.1Gi
max:
memory: 0.4Gi
maxLimitRequestRatio:
memory: 3
defaultRequest:
memory: 0.1Gi
default:
memory: 0.2Gi
Error Pod
apiVersion: v1
kind: Pod
metadata:
name: pod-1
namespace: nm-5
spec:
containers:
- name: container
image: kubetm/app
resources:
requests:
memory: 0.1Gi
limits:
memory: 0.5Gi
실습 과정
Namespace 생성
LimitRange 생성
마스터노드에서 LimitRange 생성 확인
kubectl describe limitranges --namespace=nm-5
Error Pod 생성 --> MaxLimit과 maxLimitRequestRatio 오류 발생(MaxLimit이 0.4인데 0.5를 요구했고, ratio는 3인데 5임)
Request와 Limit 설정 없이 생성 --> defaultRequest에 설정한대로 만들어짐
주의해야할 점
- 한 네임스페이스에는 여러 개의 LimitRange가 들어갈 수 있음
- 만약 둘의 MaxLimit과 default가 다르면, 알 수 없는 오류가 발생하니 잘 맞춰야 함
출처
인프런 - 대세는 쿠버네티스
'네트워크 > k8s' 카테고리의 다른 글
[k8s] 13. ReplicaSet, Selector - 실습 (0) | 2021.02.13 |
---|---|
[k8s] 12. Replication Controller, ReplicaSet (0) | 2021.02.12 |
[k8s] 10. Namespace, ResourceQuota, LimitRange (0) | 2021.02.10 |
[k8s] 9. ConfigMap, Secret - 실습 (0) | 2021.02.08 |
[k8s] 8. ConfigMap, Secret - Env, Mount (0) | 2021.02.07 |