기본적으로, 쿠버네티스 클러스터의 모든 리소스는 기본 네임스페이스에 생성된다. 파드는 무제한 CPU 및 메모리 요청/제한으로 실행됩니다. A 쿠버네티스 네임스페이스 를 사용하면 생성된 리소스를 논리적으로 이름이 지정된 그룹으로 분할할 수 있습니다. 각 네임스페이스는 다음을 제공합니다:
- 고유한 범위 이름 충돌을 피하기 위한 리소스
- 정책신뢰할 수 있는 사용자에게 적절한 권한을 보장합니다.
- 지정할 수 있는 기능 리소스 소비에 대한 제약 조건
이를 통해 쿠버네티스 클러스터는 여러 그룹이 리소스를 공유하고 각 그룹마다 다른 수준의 QoS를 제공할 수 있습니다. 한 네임스페이스에서 생성된 리소스는 다른 네임스페이스에서 숨겨진다. 여러 네임스페이스를 생성할 수 있으며, 각각 다른 제약 조건이 적용될 수 있다.
기본 쿠버네티스 네임스페이스
기본적으로 쿠버네티스 클러스터에서 사용자가 생성한 각 리소스는 다음과 같은 기본 네임스페이스에서 실행된다. 기본값
.
1 2 3 4 |
./쿠버네티스/클러스터/kubectl.sh get 네임스페이스 이름 라벨 상태 AGE 기본값 활성 1m kube-시스템 활성 1m |
모든 파드, 서비스 또는 리플리케이션 컨트롤러가 이 네임스페이스에 생성된다. 큐브 시스템
네임스페이스는 쿠버네티스 클러스터에서 생성한 리소스를 위해 예약되어 있다. 네임스페이스에 대한 자세한 내용은 여기에서 확인할 수 있다:
1 2 3 4 5 6 7 8 9 10 11 |
./쿠버네티스/클러스터/kubectl.sh 설명 네임스페이스 기본값 이름: 기본값 레이블: 상태: 활성 아니요 리소스 할당량. 리소스 제한 유형 리소스 Min 최대 요청 제한 제한/요청 ---- -------- --- --- ------- ----- ------------- 컨테이너 cpu - - 100m - - |
이 설명에는 리소스 할당량(있는 경우)과 리소스 제한 범위가 표시됩니다. 이제 Couchbase 복제 컨트롤러를 다음과 같이 만들어 보겠습니다:
1 |
./쿠버네티스/클러스터/kubectl.sh 실행 카우치베이스 --이미지=arungupta/카우치베이스 |
기존 복제 컨트롤러를 확인합니다:
1 2 3 |
./쿠버네티스/클러스터/kubectl.sh get rc 컨트롤러 컨테이너(S) 이미지(S) 셀렉터 복제 AGE 카우치베이스 카우치베이스 arungupta/카우치베이스 실행=카우치베이스 1 5m |
기본적으로 사용자 네임스페이스에 있는 리소스만 표시됩니다. 모든 네임스페이스의 리소스는 다음을 사용하여 표시할 수 있습니다. --모든 네임스페이스
옵션을 선택합니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
./쿠버네티스/클러스터/kubectl.sh get rc --모두-네임스페이스 네임스페이스 컨트롤러 컨테이너(S) 이미지(S) 셀렉터 복제 AGE 기본값 카우치베이스 카우치베이스 arungupta/카우치베이스 실행=카우치베이스 1 5m kube-시스템 힙스터-v11 힙스터 gcr.io/구글_컨테이너/힙스터:v0.18.4 k8s-앱=힙스터,버전=v11 1 6m kube-시스템 kube-dns-v9 etcd gcr.io/구글_컨테이너/etcd:2.0.9 k8s-앱=kube-dns,버전=v9 1 6m kube2sky gcr.io/구글_컨테이너/kube2sky:1.11 skydns gcr.io/구글_컨테이너/skydns:2015-10-13-8c72f8c healthz gcr.io/구글_컨테이너/실행 건강:1.0 kube-시스템 kube-ui-v4 kube-ui gcr.io/구글_컨테이너/kube-ui:v4 k8s-앱=kube-ui,버전=v4 1 6m kube-시스템 l7-lb-컨트롤러-v0.5.2 기본값-http-백엔드 gcr.io/구글_컨테이너/기본 백엔드:1.0 k8s-앱=glbc,버전=v0.5.2 1 6m l7-lb-컨트롤러 gcr.io/구글_컨테이너/glbc:0.5.2 kube-시스템 모니터링-유입DB-그라파나-v2 유입DB gcr.io/구글_컨테이너/힙스터_인플로우DB:v0.4 k8s-앱=유입그라파나,버전=v2 1 6m 그라파나 베타.gcr.io/구글_컨테이너/힙스터_그라파나: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 |
./쿠버네티스/클러스터/kubectl.sh 구성 보기 카우치베이스 apiVersion: v1 클러스터: - 클러스터: 인증서-권한-데이터: 편집됨 서버: https://104.197.10.200 이름: 카우치베이스-on-쿠버네티스_쿠버네티스 컨텍스트: - 컨텍스트: 클러스터: 카우치베이스-on-쿠버네티스_쿠버네티스 사용자: 카우치베이스-on-쿠버네티스_쿠버네티스 이름: 카우치베이스-on-쿠버네티스_쿠버네티스 현재-컨텍스트: 카우치베이스-on-쿠버네티스_쿠버네티스 종류: 구성 환경설정: {} 사용자: - 이름: 카우치베이스-on-쿠버네티스_쿠버네티스 사용자: 클라이언트-인증서-데이터: 편집됨 클라이언트-키-데이터: 편집됨 토큰: 1RUrsvA5RDwwRNf0eOvz86elmniOK0oj - 이름: 카우치베이스-on-쿠버네티스_쿠버네티스-기본-auth 사용자: 비밀번호: cZ9fZSuzIqq5kdnj 사용자 이름: 관리자 |
다음을 찾아보세요. contexts.context.name
속성을 사용하여 기존 컨텍스트를 확인할 수 있습니다. 이것은 나중에 조작할 것입니다.
새 쿠버네티스 네임스페이스에서 리소스 생성하기
먼저 새 네임스페이스를 만들어 보겠습니다. 이 작업은 다음 구성 파일을 사용하여 수행할 수 있습니다:
1 2 3 4 5 6 |
apiVersion: v1 종류: 네임스페이스 메타데이터: 이름: 개발 레이블: 이름: 개발 |
네임스페이스는 다음과 같이 생성됩니다:
1 2 |
./쿠버네티스/클러스터/kubectl.sh create -f myns.yaml 네임스페이스 "개발" 생성 |
그런 다음 모든 네임스페이스를 쿼리하면 다음과 같은 결과가 나옵니다:
1 2 3 4 5 |
./쿠버네티스/클러스터/kubectl.sh get 네임스페이스 이름 라벨 상태 AGE 기본값 활성 9m 개발 이름=개발 활성 13s kube-시스템 활성 8m |
이 새 네임스페이스에서 다음을 사용하여 새 복제 컨트롤러를 만들 수 있습니다. --이름공간
옵션을 선택합니다:
1 2 |
./쿠버네티스/클러스터/kubectl.sh --네임스페이스=개발 실행 카우치베이스 --이미지=arungupta/카우치베이스 복제 컨트롤러 "couchbase" 생성 |
모든 네임스페이스의 리소스 목록은 다음과 같습니다:
1 2 3 4 5 6 |
./쿠버네티스/클러스터/kubectl.sh get rc --모두-네임스페이스 네임스페이스 컨트롤러 컨테이너(S) 이미지(S) 셀렉터 복제 AGE 기본값 카우치베이스 카우치베이스 arungupta/카우치베이스 실행=카우치베이스 1 4m 개발 카우치베이스 카우치베이스 arungupta/카우치베이스 실행=카우치베이스 1 2m kube-시스템 힙스터-v11 힙스터 gcr.io/구글_컨테이너/힙스터:v0.18.4 k8s-앱=힙스터,버전=v11 1 31m . . . |
보시다시피, 다음과 같은 두 개의 복제 컨트롤러가 있습니다. 아룽업타/카우치베이스
이미지 - 하나 기본값
네임스페이스와 개발
네임스페이스.
기존 리소스에 대한 쿠버네티스 네임스페이스 설정하기
리소스가 이미 생성된 경우 네임스페이스를 할당할 수 있습니다. 이전에 만든 리소스에서 네임스페이스에 새 컨텍스트를 설정할 수 있습니다:
1 2 |
./쿠버네티스/클러스터/kubectl.sh 구성 set-컨텍스트 dev --네임스페이스=개발 --클러스터=카우치베이스-on-쿠버네티스_쿠버네티스 --사용자=카우치베이스-on-쿠버네티스_쿠버네티스 컨텍스트 "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 |
./쿠버네티스/클러스터/kubectl.sh 구성 보기 카우치베이스 apiVersion: v1 클러스터: - 클러스터: 인증서-권한-데이터: 편집됨 서버: https://104.197.10.200 이름: 카우치베이스-on-쿠버네티스_쿠버네티스 컨텍스트: - 컨텍스트: 클러스터: 카우치베이스-on-쿠버네티스_쿠버네티스 사용자: 카우치베이스-on-쿠버네티스_쿠버네티스 이름: 카우치베이스-on-쿠버네티스_쿠버네티스 - 컨텍스트: 클러스터: 카우치베이스-on-쿠버네티스_쿠버네티스 네임스페이스: 개발 사용자: 카우치베이스-on-쿠버네티스_쿠버네티스 이름: dev 현재-컨텍스트: 카우치베이스-on-쿠버네티스_쿠버네티스 종류: 구성 환경설정: {} 사용자: - 이름: 카우치베이스-on-쿠버네티스_쿠버네티스 사용자: 클라이언트-인증서-데이터: 편집됨 클라이언트-키-데이터: 편집됨 토큰: 1RUrsvA5RDwwRNf0eOvz86elmniOK0oj - 이름: 카우치베이스-on-쿠버네티스_쿠버네티스-기본-auth 사용자: 비밀번호: cZ9fZSuzIqq5kdnj 사용자 이름: 관리자 |
의 두 번째 속성은 context.context
배열은 새 컨텍스트가 생성되었음을 보여줍니다. 또한 현재 컨텍스트가 여전히 카우치베이스-온-쿠버네티스_쿠버네티스
. 해당 컨텍스트에 네임스페이스가 지정되지 않았으므로 기본 네임스페이스에 속합니다. 컨텍스트를 변경합니다:
1 2 |
./쿠버네티스/클러스터/kubectl.sh 구성 사용-컨텍스트 dev 전환 에 컨텍스트 "dev". |
복제 컨트롤러 목록을 참조하세요:
1 2 |
./쿠버네티스/클러스터/kubectl.sh get rc 컨트롤러 컨테이너(S) 이미지(S) 셀렉터 복제 AGE |
분명히 이 컨텍스트에서 실행 중인 복제 컨트롤러는 없습니다. 이 새 네임스페이스에 새 복제 컨트롤러를 만들어 보겠습니다:
1 2 |
./쿠버네티스/클러스터/kubectl.sh 실행 카우치베이스 --이미지=arungupta/카우치베이스 복제 컨트롤러 "couchbase" 생성 |
그리고 모든 네임스페이스의 복제 컨트롤러 목록을 확인하세요:
1 2 3 4 5 6 |
./쿠버네티스/클러스터/kubectl.sh get rc --모두-네임스페이스 네임스페이스 컨트롤러 컨테이너(S) 이미지(S) 셀렉터 복제 AGE 기본값 카우치베이스 카우치베이스 arungupta/카우치베이스 실행=카우치베이스 1 16m 개발 카우치베이스 카우치베이스 arungupta/카우치베이스 실행=카우치베이스 1 4s kube-시스템 힙스터-v11 힙스터 gcr.io/구글_컨테이너/힙스터:v0.18.4 k8s-앱=힙스터,버전=v11 1 17m . . . |
이제 두 가지를 볼 수 있습니다. 아룽업타/카우치베이스
두 개의 서로 다른 네임스페이스에서 실행되는 복제 컨트롤러.
네임스페이스에서 쿠버네티스 리소스 삭제하기
리소스 이름을 완전히 정규화하여 리소스를 삭제할 수 있습니다:
1 2 |
./쿠버네티스/클러스터/kubectl.sh --네임스페이스=기본값 삭제 rc 카우치베이스 복제 컨트롤러 "couchbase" 삭제됨 |
마찬가지로 다른 복제 컨트롤러도 다음과 같이 삭제할 수 있습니다:
1 2 |
./쿠버네티스/클러스터/kubectl.sh --네임스페이스=개발 삭제 rc 카우치베이스 복제 컨트롤러 "couchbase" 삭제됨 |
마지막으로 모든 네임스페이스의 모든 복제 컨트롤러 목록을 확인하세요:
1 2 3 4 5 |
./쿠버네티스/클러스터/kubectl.sh get rc --모두-네임스페이스 네임스페이스 컨트롤러 컨테이너(S) 이미지(S) 셀렉터 복제 AGE kube-시스템 힙스터-v11 힙스터 gcr.io/구글_컨테이너/힙스터:v0.18.4 k8s-앱=힙스터,버전=v11 1 3h kube-시스템 kube-dns-v9 etcd gcr.io/구글_컨테이너/etcd:2.0.9 k8s-앱=kube-dns,버전=v9 1 3h . . . |
이렇게 하면 사용자가 만든 모든 복제 컨트롤러가 삭제된 것을 확인할 수 있습니다.
쿠버네티스 네임스페이스를 사용한 리소스 할당량 및 제한
각 네임스페이스에 리소스 할당량을 할당할 수 있다. 기본적으로 파드는 CPU 및 메모리 요청/제한이 무제한으로 실행됩니다. 쿼터를 지정하면 네임스페이스의 모든 파드에서 사용할 수 있는 클러스터 리소스의 양을 제한할 수 있다. 리소스 쿼터는 구성 파일을 사용하여 지정할 수 있다:
1 2 3 4 5 6 7 8 9 10 11 12 |
apiVersion: v1 종류: 리소스 쿼터 메타데이터: 이름: 할당량 사양: hard: cpu: "20" 메모리: 1Gi 포드: "10" 복제 컨트롤러: "20" 리소스 할당량: "1" 서비스: "5" |
다음 리소스는 할당량 시스템에서 지원됩니다:
리소스 | 설명 |
---|---|
cpu |
총 요청된 CPU 사용량 |
메모리 |
총 요청된 메모리 사용량 |
포드 |
단계가 보류 중이거나 활성 상태인 활성 파드의 총 개수입니다. |
서비스 |
총 서비스 수 |
복제 컨트롤러 |
총 복제 컨트롤러 수 |
리소스 할당량 |
총 리소스 할당량 수 |
비밀 |
총 비밀 개수 |
지속적 볼륨 클레임 |
총 영구 볼륨 클레임 수 |
이 리소스 할당량은 네임스페이스에서 만들 수 있습니다:
1 2 |
./쿠버네티스/클러스터/kubectl.sh --네임스페이스=개발 create -f 할당량.yaml 리소스 할당량 "할당량" 생성 |
생성된 할당량은 다음과 같이 볼 수 있습니다:
1 2 3 4 5 6 7 8 9 10 11 |
./쿠버네티스/클러스터/kubectl.sh --네임스페이스=개발 설명 할당량 이름: 할당량 네임스페이스: 개발 리소스 사용됨 하드 -------- ---- ---- cpu 0 20 메모리 0 1Gi 포드 0 10 복제 컨트롤러 0 20 리소스 할당량 1 1 서비스 0 5 |
이제 작동하는 복제 컨트롤러를 만들려고 합니다:
1 2 |
./쿠버네티스/클러스터/kubectl.sh --네임스페이스=개발 실행 카우치베이스 --이미지=arungupta/카우치베이스 복제 컨트롤러 "couchbase" 생성 |
하지만 할당량을 다시 설명하면 다음과 같습니다:
1 2 3 4 5 6 7 8 9 10 11 |
./쿠버네티스/클러스터/kubectl.sh --네임스페이스=개발 설명 할당량 이름: 할당량 네임스페이스: 개발 리소스 사용됨 하드 -------- ---- ---- cpu 0 20 메모리 0 1Gi 포드 0 10 복제 컨트롤러 1 20 리소스 할당량 1 1 서비스 0 5 |
이 복제 컨트롤러의 일부로 새 파드가 생성될 것으로 예상했지만 거기에 없습니다. 따라서 복제 컨트롤러에 대해 설명하겠습니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
./쿠버네티스/클러스터/kubectl.sh --네임스페이스=개발 설명 rc 이름: 카우치베이스 네임스페이스: 개발 이미지(s): arungupta/카우치베이스 선택기: 실행=카우치베이스 레이블: 실행=카우치베이스 복제본: 0 현재 / 1 원하는 포드 상태: 0 실행 중 / 0 대기 중 / 0 성공 / 0 실패 아니요 볼륨. 이벤트: FirstSeen LastSeen Count 에서 서브객체 경로 이유 메시지 ───────── ──────── ───── ──── ───────────── ────── ─────── 1m 24s 4 {복제-컨트롤러 } FailedCreate 오류 만들기: Pod "카우치베이스-" 는 금지됨: 필수 make a 비-제로 요청 에 대한 메모리 이후 it 는 추적 by 할당량. |
기본적으로 파드는 사용 가능한 모든 CPU와 메모리를 사용한다. 리소스 쿼터를 적용하려면 명시적인 값을 지정해야 한다. 또는 다음 구성 파일을 사용하여 파드의 기본값을 지정할 수 있다:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
apiVersion: v1 종류: 제한 범위 메타데이터: 이름: 제한 사양: 제한: - 기본값: cpu: 200m 메모리: 512Mi defaultRequest: cpu: 100m 메모리: 256Mi 유형: 컨테이너 |
이는 파드에서 사용할 수 있는 CPU와 메모리를 제한합니다. 이러한 제한을 다음과 같이 적용해 보겠습니다:
1 2 |
./쿠버네티스/클러스터/kubectl.sh --네임스페이스=개발 create -f 제한.yaml 제한 범위 "제한" 생성 |
이제 복제 컨트롤러를 다시 설명하면 다음과 같이 표시됩니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
./쿠버네티스/클러스터/kubectl.sh --네임스페이스=개발 설명 rc 이름: 카우치베이스 네임스페이스: 개발 이미지(s): arungupta/카우치베이스 선택기: 실행=카우치베이스 레이블: 실행=카우치베이스 복제본: 1 현재 / 1 원하는 포드 상태: 1 실행 중 / 0 대기 중 / 0 성공 / 0 실패 아니요 볼륨. 이벤트: FirstSeen LastSeen Count 에서 서브객체 경로 이유 메시지 ───────── ──────── ───── ──── ───────────── ────── ─────── 8m 2m 14 {복제-컨트롤러 } FailedCreate 오류 만들기: Pod "카우치베이스-" 는 금지됨: 필수 make a 비-제로 요청 에 대한 메모리 이후 it 는 추적 by 할당량. 2m 2m 1 {복제-컨트롤러 } 성공 만들기 생성됨 pod: 카우치베이스-gzk0l |
이것은 파드가 성공적으로 생성되었음을 보여줍니다. 이제 할당량을 설명할 때 올바른 값도 표시됩니다:
1 2 3 4 5 6 7 8 9 10 11 |
./쿠버네티스/클러스터/kubectl.sh --네임스페이스=개발 설명 할당량 이름: 할당량 네임스페이스: 개발 리소스 사용됨 하드 -------- ---- ---- cpu 100m 20 메모리 268435456 1Gi 포드 1 10 복제 컨트롤러 1 20 리소스 할당량 1 1 서비스 0 5 |
리소스 할당량 에서 이 값을 설정/업데이트하는 방법에 대한 자세한 내용을 확인하세요. 다른 할당량을 만들면 다음과 같은 오류가 발생합니다:
1 2 |
./쿠버네티스/클러스터/kubectl.sh --네임스페이스=개발 create -f 할당량.yaml 오류 에서 서버: 오류 언제 만들기 "quota.yaml": 리소스 쿼터 "할당량" 는 금지됨: 제한된 에 1 리소스 할당량 |
파드 생성 중 제한 지정
파드를 생성하는 동안에도 제한을 지정할 수 있다: 각 파드의 메모리 제한이 1g으로 제한되어 있다면, 유효한 파드 정의가 됩니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
apiVersion: v1 종류: Pod 메타데이터: 이름: 카우치베이스-pod 사양: 컨테이너: - 이름: 카우치베이스 이미지: 카우치베이스 포트: - 컨테이너 포트: 8091 리소스: 제한: cpu: "1" 메모리: 512Mi |
이는 파드가 0.5G의 메모리만 요청하기 때문이다. 그리고 잘못된 파드 정의가 있을 수 있다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
apiVersion: v1 종류: Pod 메타데이터: 이름: 카우치베이스-pod 사양: 컨테이너: - 이름: 카우치베이스 이미지: 카우치베이스 포트: - 컨테이너 포트: 8091 리소스: 제한: cpu: "1" 메모리: 2G |
이는 파드가 2G의 메모리를 요청하기 때문이다. 이러한 파드를 생성하면 다음과 같은 오류가 발생합니다:
1 2 |
./쿠버네티스/클러스터/kubectl.sh --네임스페이스=개발 create -f 카우치베이스-pod.yaml 오류 에서 서버: 오류 언제 만들기 "couchbase-pod.yaml": Pod "couchbase-pod" 는 금지됨: unable 에 인정 pod 없이 초과 할당량 에 대한 리소스 메모리: 제한된 에 1Gi 하지만 require 2805306368 에 성공 |
네임스페이스, 리소스 할당량 및 제한을 적용하여 여러 환경에서 클러스터를 공유할 수 있기를 바랍니다.