
기본적으로, 쿠버네티스 클러스터의 모든 리소스는 기본 네임스페이스에 생성된다. 파드는 무제한 CPU 및 메모리 요청/제한으로 실행됩니다. A 쿠버네티스 네임스페이스 를 사용하면 생성된 리소스를 논리적으로 이름이 지정된 그룹으로 분할할 수 있습니다. 각 네임스페이스는 다음을 제공합니다:
- 고유한 범위 이름 충돌을 피하기 위한 리소스
- 정책신뢰할 수 있는 사용자에게 적절한 권한을 보장합니다.
- 지정할 수 있는 기능 리소스 소비에 대한 제약 조건
이를 통해 쿠버네티스 클러스터는 여러 그룹이 리소스를 공유하고 각 그룹마다 다른 수준의 QoS를 제공할 수 있습니다. 한 네임스페이스에서 생성된 리소스는 다른 네임스페이스에서 숨겨진다. 여러 네임스페이스를 생성할 수 있으며, 각각 다른 제약 조건이 적용될 수 있다.
기본 쿠버네티스 네임스페이스
기본적으로 쿠버네티스 클러스터에서 사용자가 생성한 각 리소스는 다음과 같은 기본 네임스페이스에서 실행된다. 기본값.
|
1 2 3 4 |
./kubernetes/cluster/kubectl.sh get namespace NAME LABELS STATUS AGE default Active 1m kube-system Active 1m |
모든 파드, 서비스 또는 리플리케이션 컨트롤러가 이 네임스페이스에 생성된다. 큐브 시스템 네임스페이스는 쿠버네티스 클러스터에서 생성한 리소스를 위해 예약되어 있다. 네임스페이스에 대한 자세한 내용은 여기에서 확인할 수 있다:
|
1 2 3 4 5 6 7 8 9 10 11 |
./kubernetes/cluster/kubectl.sh describe namespaces default Name: default Labels: Status: Active No resource quota. Resource Limits Type Resource Min Max Request Limit Limit/Request ---- -------- --- --- ------- ----- ------------- Container cpu - - 100m - - |
이 설명에는 리소스 할당량(있는 경우)과 리소스 제한 범위가 표시됩니다. 이제 Couchbase 복제 컨트롤러를 다음과 같이 만들어 보겠습니다:
|
1 |
./kubernetes/cluster/kubectl.sh run couchbase --image=arungupta/couchbase |
기존 복제 컨트롤러를 확인합니다:
|
1 2 3 |
./kubernetes/cluster/kubectl.sh get rc CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS AGE couchbase couchbase arungupta/couchbase run=couchbase 1 5m |
기본적으로 사용자 네임스페이스에 있는 리소스만 표시됩니다. 모든 네임스페이스의 리소스는 다음을 사용하여 표시할 수 있습니다. --모든 네임스페이스 옵션을 선택합니다:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
./kubernetes/cluster/kubectl.sh get rc --all-namespaces NAMESPACE CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS AGE default couchbase couchbase arungupta/couchbase run=couchbase 1 5m kube-system heapster-v11 heapster gcr.io/google_containers/heapster:v0.18.4 k8s-app=heapster,version=v11 1 6m kube-system kube-dns-v9 etcd gcr.io/google_containers/etcd:2.0.9 k8s-app=kube-dns,version=v9 1 6m kube2sky gcr.io/google_containers/kube2sky:1.11 skydns gcr.io/google_containers/skydns:2015-10-13-8c72f8c healthz gcr.io/google_containers/exechealthz:1.0 kube-system kube-ui-v4 kube-ui gcr.io/google_containers/kube-ui:v4 k8s-app=kube-ui,version=v4 1 6m kube-system l7-lb-controller-v0.5.2 default-http-backend gcr.io/google_containers/defaultbackend:1.0 k8s-app=glbc,version=v0.5.2 1 6m l7-lb-controller gcr.io/google_containers/glbc:0.5.2 kube-system monitoring-influxdb-grafana-v2 influxdb gcr.io/google_containers/heapster_influxdb:v0.4 k8s-app=influxGrafana,version=v2 1 6m grafana beta.gcr.io/google_containers/heapster_grafana:v2.1.1 |
보시다시피 아룽업타/카우치베이스 이미지가 실행되는 기본값 네임스페이스에서 실행됩니다. 다른 모든 리소스는 큐브 시스템 네임스페이스. 이 복제 컨트롤러의 컨텍스트를 확인해 보겠습니다:
|
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 |
./kubernetes/cluster/kubectl.sh config view couchbase apiVersion: v1 clusters: - cluster: certificate-authority-data: REDACTED server: https://104.197.10.200 name: couchbase-on-kubernetes_kubernetes contexts: - context: cluster: couchbase-on-kubernetes_kubernetes user: couchbase-on-kubernetes_kubernetes name: couchbase-on-kubernetes_kubernetes current-context: couchbase-on-kubernetes_kubernetes kind: Config preferences: {} users: - name: couchbase-on-kubernetes_kubernetes user: client-certificate-data: REDACTED client-key-data: REDACTED token: 1RUrsvA5RDwwRNf0eOvz86elmniOK0oj - name: couchbase-on-kubernetes_kubernetes-basic-auth user: password: cZ9fZSuzIqq5kdnj username: admin |
다음을 찾아보세요. contexts.context.name 속성을 사용하여 기존 컨텍스트를 확인할 수 있습니다. 이것은 나중에 조작할 것입니다.
새 쿠버네티스 네임스페이스에서 리소스 생성하기
먼저 새 네임스페이스를 만들어 보겠습니다. 이 작업은 다음 구성 파일을 사용하여 수행할 수 있습니다:
|
1 2 3 4 5 6 |
apiVersion: v1 kind: Namespace metadata: name: development labels: name: development |
네임스페이스는 다음과 같이 생성됩니다:
|
1 2 |
./kubernetes/cluster/kubectl.sh create -f myns.yaml namespace "development" created |
그런 다음 모든 네임스페이스를 쿼리하면 다음과 같은 결과가 나옵니다:
|
1 2 3 4 5 |
./kubernetes/cluster/kubectl.sh get namespace NAME LABELS STATUS AGE default Active 9m development name=development Active 13s kube-system Active 8m |
이 새 네임스페이스에서 다음을 사용하여 새 복제 컨트롤러를 만들 수 있습니다. --이름공간 옵션을 선택합니다:
|
1 2 |
./kubernetes/cluster/kubectl.sh --namespace=development run couchbase --image=arungupta/couchbase replicationcontroller "couchbase" created |
모든 네임스페이스의 리소스 목록은 다음과 같습니다:
|
1 2 3 4 5 6 |
./kubernetes/cluster/kubectl.sh get rc --all-namespaces NAMESPACE CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS AGE default couchbase couchbase arungupta/couchbase run=couchbase 1 4m development couchbase couchbase arungupta/couchbase run=couchbase 1 2m kube-system heapster-v11 heapster gcr.io/google_containers/heapster:v0.18.4 k8s-app=heapster,version=v11 1 31m . . . |
보시다시피, 다음과 같은 두 개의 복제 컨트롤러가 있습니다. 아룽업타/카우치베이스 이미지 - 하나 기본값 네임스페이스와 개발 네임스페이스.
기존 리소스에 대한 쿠버네티스 네임스페이스 설정하기
리소스가 이미 생성된 경우 네임스페이스를 할당할 수 있습니다. 이전에 만든 리소스에서 네임스페이스에 새 컨텍스트를 설정할 수 있습니다:
|
1 2 |
./kubernetes/cluster/kubectl.sh config set-context dev --namespace=development --cluster=couchbase-on-kubernetes_kubernetes --user=couchbase-on-kubernetes_kubernetes context "dev" set. |
이제 컨텍스트 보기가 표시됩니다:
|
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 |
./kubernetes/cluster/kubectl.sh config view couchbase apiVersion: v1 clusters: - cluster: certificate-authority-data: REDACTED server: https://104.197.10.200 name: couchbase-on-kubernetes_kubernetes contexts: - context: cluster: couchbase-on-kubernetes_kubernetes user: couchbase-on-kubernetes_kubernetes name: couchbase-on-kubernetes_kubernetes - context: cluster: couchbase-on-kubernetes_kubernetes namespace: development user: couchbase-on-kubernetes_kubernetes name: dev current-context: couchbase-on-kubernetes_kubernetes kind: Config preferences: {} users: - name: couchbase-on-kubernetes_kubernetes user: client-certificate-data: REDACTED client-key-data: REDACTED token: 1RUrsvA5RDwwRNf0eOvz86elmniOK0oj - name: couchbase-on-kubernetes_kubernetes-basic-auth user: password: cZ9fZSuzIqq5kdnj username: admin |
의 두 번째 속성은 context.context 배열은 새 컨텍스트가 생성되었음을 보여줍니다. 또한 현재 컨텍스트가 여전히 카우치베이스-온-쿠버네티스_쿠버네티스. 해당 컨텍스트에 네임스페이스가 지정되지 않았으므로 기본 네임스페이스에 속합니다. 컨텍스트를 변경합니다:
|
1 2 |
./kubernetes/cluster/kubectl.sh config use-context dev switched to context "dev". |
복제 컨트롤러 목록을 참조하세요:
|
1 2 |
./kubernetes/cluster/kubectl.sh get rc CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS AGE |
분명히 이 컨텍스트에서 실행 중인 복제 컨트롤러는 없습니다. 이 새 네임스페이스에 새 복제 컨트롤러를 만들어 보겠습니다:
|
1 2 |
./kubernetes/cluster/kubectl.sh run couchbase --image=arungupta/couchbase replicationcontroller "couchbase" created |
그리고 모든 네임스페이스의 복제 컨트롤러 목록을 확인하세요:
|
1 2 3 4 5 6 |
./kubernetes/cluster/kubectl.sh get rc --all-namespaces NAMESPACE CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS AGE default couchbase couchbase arungupta/couchbase run=couchbase 1 16m development couchbase couchbase arungupta/couchbase run=couchbase 1 4s kube-system heapster-v11 heapster gcr.io/google_containers/heapster:v0.18.4 k8s-app=heapster,version=v11 1 17m . . . |
이제 두 가지를 볼 수 있습니다. 아룽업타/카우치베이스 두 개의 서로 다른 네임스페이스에서 실행되는 복제 컨트롤러.
네임스페이스에서 쿠버네티스 리소스 삭제하기
리소스 이름을 완전히 정규화하여 리소스를 삭제할 수 있습니다:
|
1 2 |
./kubernetes/cluster/kubectl.sh --namespace=default delete rc couchbase replicationcontroller "couchbase" deleted |
마찬가지로 다른 복제 컨트롤러도 다음과 같이 삭제할 수 있습니다:
|
1 2 |
./kubernetes/cluster/kubectl.sh --namespace=development delete rc couchbase replicationcontroller "couchbase" deleted |
마지막으로 모든 네임스페이스의 모든 복제 컨트롤러 목록을 확인하세요:
|
1 2 3 4 5 |
./kubernetes/cluster/kubectl.sh get rc --all-namespaces NAMESPACE CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS AGE kube-system heapster-v11 heapster gcr.io/google_containers/heapster:v0.18.4 k8s-app=heapster,version=v11 1 3h kube-system kube-dns-v9 etcd gcr.io/google_containers/etcd:2.0.9 k8s-app=kube-dns,version=v9 1 3h . . . |
이렇게 하면 사용자가 만든 모든 복제 컨트롤러가 삭제된 것을 확인할 수 있습니다.
쿠버네티스 네임스페이스를 사용한 리소스 할당량 및 제한
각 네임스페이스에 리소스 할당량을 할당할 수 있다. 기본적으로 파드는 CPU 및 메모리 요청/제한이 무제한으로 실행됩니다. 쿼터를 지정하면 네임스페이스의 모든 파드에서 사용할 수 있는 클러스터 리소스의 양을 제한할 수 있다. 리소스 쿼터는 구성 파일을 사용하여 지정할 수 있다:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
apiVersion: v1 kind: ResourceQuota metadata: name: quota spec: hard: cpu: "20" memory: 1Gi pods: "10" replicationcontrollers: "20" resourcequotas: "1" services: "5" |
다음 리소스는 할당량 시스템에서 지원됩니다:
| 리소스 | 설명 |
|---|---|
cpu |
총 요청된 CPU 사용량 |
메모리 |
총 요청된 메모리 사용량 |
포드 |
단계가 보류 중이거나 활성 상태인 활성 파드의 총 개수입니다. |
서비스 |
총 서비스 수 |
복제 컨트롤러 |
총 복제 컨트롤러 수 |
리소스 할당량 |
총 리소스 할당량 수 |
비밀 |
총 비밀 개수 |
지속적 볼륨 클레임 |
총 영구 볼륨 클레임 수 |
이 리소스 할당량은 네임스페이스에서 만들 수 있습니다:
|
1 2 |
./kubernetes/cluster/kubectl.sh --namespace=development create -f quota.yaml resourcequota "quota" created |
생성된 할당량은 다음과 같이 볼 수 있습니다:
|
1 2 3 4 5 6 7 8 9 10 11 |
./kubernetes/cluster/kubectl.sh --namespace=development describe quota Name: quota Namespace: development Resource Used Hard -------- ---- ---- cpu 0 20 memory 0 1Gi pods 0 10 replicationcontrollers 0 20 resourcequotas 1 1 services 0 5 |
이제 작동하는 복제 컨트롤러를 만들려고 합니다:
|
1 2 |
./kubernetes/cluster/kubectl.sh --namespace=development run couchbase --image=arungupta/couchbase replicationcontroller "couchbase" created |
하지만 할당량을 다시 설명하면 다음과 같습니다:
|
1 2 3 4 5 6 7 8 9 10 11 |
./kubernetes/cluster/kubectl.sh --namespace=development describe quota Name: quota Namespace: development Resource Used Hard -------- ---- ---- cpu 0 20 memory 0 1Gi pods 0 10 replicationcontrollers 1 20 resourcequotas 1 1 services 0 5 |
이 복제 컨트롤러의 일부로 새 파드가 생성될 것으로 예상했지만 거기에 없습니다. 따라서 복제 컨트롤러에 대해 설명하겠습니다:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
./kubernetes/cluster/kubectl.sh --namespace=development describe rc Name: couchbase Namespace: development Image(s): arungupta/couchbase Selector: run=couchbase Labels: run=couchbase Replicas: 0 current / 1 desired Pods Status: 0 Running / 0 Waiting / 0 Succeeded / 0 Failed No volumes. Events: FirstSeen LastSeen Count From SubobjectPath Reason Message ───────── ──────── ───── ──── ───────────── ────── ─────── 1m 24s 4 {replication-controller } FailedCreate Error creating: Pod "couchbase-" is forbidden: must make a non-zero request for memory since it is tracked by quota. |
기본적으로 파드는 사용 가능한 모든 CPU와 메모리를 사용한다. 리소스 쿼터를 적용하려면 명시적인 값을 지정해야 한다. 또는 다음 구성 파일을 사용하여 파드의 기본값을 지정할 수 있다:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
apiVersion: v1 kind: LimitRange metadata: name: limits spec: limits: - default: cpu: 200m memory: 512Mi defaultRequest: cpu: 100m memory: 256Mi type: Container |
이는 파드에서 사용할 수 있는 CPU와 메모리를 제한합니다. 이러한 제한을 다음과 같이 적용해 보겠습니다:
|
1 2 |
./kubernetes/cluster/kubectl.sh --namespace=development create -f limits.yaml limitrange "limits" created |
이제 복제 컨트롤러를 다시 설명하면 다음과 같이 표시됩니다:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
./kubernetes/cluster/kubectl.sh --namespace=development describe rc Name: couchbase Namespace: development Image(s): arungupta/couchbase Selector: run=couchbase Labels: run=couchbase Replicas: 1 current / 1 desired Pods Status: 1 Running / 0 Waiting / 0 Succeeded / 0 Failed No volumes. Events: FirstSeen LastSeen Count From SubobjectPath Reason Message ───────── ──────── ───── ──── ───────────── ────── ─────── 8m 2m 14 {replication-controller } FailedCreate Error creating: Pod "couchbase-" is forbidden: must make a non-zero request for memory since it is tracked by quota. 2m 2m 1 {replication-controller } SuccessfulCreate Created pod: couchbase-gzk0l |
이것은 파드가 성공적으로 생성되었음을 보여줍니다. 이제 할당량을 설명할 때 올바른 값도 표시됩니다:
|
1 2 3 4 5 6 7 8 9 10 11 |
./kubernetes/cluster/kubectl.sh --namespace=development describe quota Name: quota Namespace: development Resource Used Hard -------- ---- ---- cpu 100m 20 memory 268435456 1Gi pods 1 10 replicationcontrollers 1 20 resourcequotas 1 1 services 0 5 |
리소스 할당량 에서 이 값을 설정/업데이트하는 방법에 대한 자세한 내용을 확인하세요. 다른 할당량을 만들면 다음과 같은 오류가 발생합니다:
|
1 2 |
./kubernetes/cluster/kubectl.sh --namespace=development create -f quota.yaml Error from server: error when creating "quota.yaml": ResourceQuota "quota" is forbidden: limited to 1 resourcequotas |
파드 생성 중 제한 지정
파드를 생성하는 동안에도 제한을 지정할 수 있다: 각 파드의 메모리 제한이 1g으로 제한되어 있다면, 유효한 파드 정의가 됩니다:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
apiVersion: v1 kind: Pod metadata: name: couchbase-pod spec: containers: - name: couchbase image: couchbase ports: - containerPort: 8091 resources: limits: cpu: "1" memory: 512Mi |
이는 파드가 0.5G의 메모리만 요청하기 때문이다. 그리고 잘못된 파드 정의가 있을 수 있다:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
apiVersion: v1 kind: Pod metadata: name: couchbase-pod spec: containers: - name: couchbase image: couchbase ports: - containerPort: 8091 resources: limits: cpu: "1" memory: 2G |
이는 파드가 2G의 메모리를 요청하기 때문이다. 이러한 파드를 생성하면 다음과 같은 오류가 발생합니다:
|
1 2 |
./kubernetes/cluster/kubectl.sh --namespace=development create -f couchbase-pod.yaml Error from server: error when creating "couchbase-pod.yaml": Pod "couchbase-pod" is forbidden: unable to admit pod without exceeding quota for resource memory: limited to 1Gi but require 2805306368 to succeed |
네임스페이스, 리소스 할당량 및 제한을 적용하여 여러 환경에서 클러스터를 공유할 수 있기를 바랍니다.