Namespace
- 컨테이너를 논리적인 영역으로 나누는 역할
- Database의 Schema와 같은 개념
- CPU, Resource 할당을 제한 할 수 있다.
일반적으로 team단위로 사용하는 것으로 알고 있다.
Data platform, Data analysist ..
api resource
Namespace 범위 Resource
- Namespace에 dependent한 resource
- Pod, Deployment, Service, Ingress, Secret, ConfigMap, Role ..
1
| $ kubectl api-resources --namespaced=true
|
Cluster 범위 API Resource
- Namespace와 다르게 모든 Namespace에서 같이 사용된다.
1
| $ kubectl api-resources --namespaced=false
|
기본 Namespace
- Default
- 기본적으로 할당되는 Namespace로 별도의 옵션을 추가하여 주지 않는다면 default
- kube-system
- System에 의해 생성되는 Object를 관리하기 위한 Namespace
- 관리자 Namespace
- kube-public
- kube-node-lease
- Cluster 내 노드 연결 정보를 관리하기 위한 Namespace
간단하게 test1, test2라는 Namespace nginx를 띄어 확인하여 본다.
1
2
3
4
5
6
7
8
| #namespace_test.sh
kubectl create namespace test1
kubectl create namespace test2
kubectl apply -f . -n test1
kubectl apply -f . -n test2
minikube service hello -n test1
minikube service hello -n test2
|
1
| kubectl describe service -n test1
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| # deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello
spec:
replicas: 2
selector:
matchLabels:
app: hello
template:
metadata:
name: hello
labels:
app: hello
spec:
containers:
- name: nginx
image: nginxdemos/hello:plain-text
ports:
- name: http
containerPort: 80
protocol: TCP
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| # service.yml
apiVersion: v1
kind: Service
metadata:
name: hello
labels:
app: hello
spec:
type: NodePort
ports:
- name: http
protocol: TCP
port: 8080
targetPort: 80
selector:
app: hello
|
Namespace resource 제한하기
- LimitRange
- Pod, Container를 만드는 경우 자원 기본 할당량 설정
- 최대, 최소값을 두어 동작하게 한다.
- resourcequota
- 전체적인 resource를 제한
- Cpu, Memory, Volume의 총합을 제외
- 생성 가능한 resource(pod,service,deployment) 개수 제한이 가능
1
2
3
4
5
| kubectl apply -f namespace.yml
kubectl apply -f resource_quota.yml
kubectl apply -f limit_range.yml
kubectl apply -f pod.yml
kubectl apply -f unpod.yml
|
1
2
3
4
5
| #namespace.yml
apiVersion: v1
kind: Namespace
metadata:
name: team1
|
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
| # limit_range.yml
apiVersion: v1
kind: LimitRange
metadata:
name: limit-range
namespace: team1
spec:
limits:
- type: Container
default:
memory: 128Mi
cpu: 100m
defaultRequest:
memory: 64Mi
cpu: 50m
max:
memory: 1Gi
cpu: 1000m
min:
memory: 16Mi
cpu: 10m
- type: Pod
- type: PersistentVolumeClaim
max:
storage: 1Gi
min:
storage: 100Mi
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| # resource_quota.yml
apiVersion: v1
kind: ResourceQuota
metadata:
name: object-count-quota
namespace: team1
spec:
hard:
limits.cpu: "5000m"
limits.memory: "8Gi"
count/pods: 10
count/replicationcontrollers: 10
count/replicasets.apps: 10
count/deployments.apps: 10
count/statefulsets.apps: 10
count/jobs.batch: 3
count/cronjobs.batch: 3
count/services: 5
count/services.nodeports: 0
count/services.loadbalancers: 0
count/configmaps: 10
count/secrets: 10
count/persistentvolumeclaims: 5
count/resourcequotas: 3
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # pod.yml
apiVersion: v1
kind: Pod
metadata:
name: test
namespace: team1
spec:
containers:
- name: nginx
image: nginxdemos/hello:plain-text
ports:
- name: http
containerPort: 80
protocol: TCP
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| # unpod.yml
apiVersion: v1
kind: Pod
metadata:
name: unavailable
namespace: team1
spec:
containers:
- name: nginx
image: nginxdemos/hello:plain-text
ports:
- name: http
containerPort: 80
protocol: TCP
resources:
limits:
cpu: 1
memory: 512Mi
|