개발강의정리/DevOps

[데브옵스를 위한 쿠버네티스 마스터] 쿠버네티스 핵심 개념-Namespaces

nineDeveloper 2020. 12. 27.
728x90

Namespaces

네임스페이스란?

  • 리소스를 각각의 분리된 영역으로 나누기 좋은 방법

  • 여러 네임스페이스를 사용하면 복잡한 쿠버네티스 시스템을 더 작은 그룹으로 분할

  • 멀티 테넌트(Multi-tenant) 환경을 분리하여 리소스를 생산, 개발, QA 환경 등으로 사용

  • 리소스 이름은 네임스페이스 내에서만 고유 명칭 사용

  • 현재 클러스터의 기본 네임스페이스 확인하기

$ kubectl get ns
NAME              STATUS   AGE
default           Active   75m
kube-node-lease   Active   75m
kube-public       Active   75m
kube-system       Active   75m

각 네임스페이스 상세 내용 확인

  • kubectl get 을 옵션없이 사용하면 default 네임스페이스에 질의\
  • 다른 사용자와 분리된 환경으로 타인의 접근을 제한
  • 네임스페이스 별로 리소스 접근 허용과 리소스 양도 제어 가능
  • --namespace나 -n을 사용하여 네임스페이스 별로 확인이 가능
$ kubectl get po --namespace kube-system
NAME                             READY   STATUS    RESTARTS   AGE
coredns-74ff55c5b-bsm6g          1/1     Running   0          76m
coredns-74ff55c5b-btpq5          1/1     Running   0          76m
etcd-master                      1/1     Running   0          76m
kube-apiserver-master            1/1     Running   0          76m
kube-controller-manager-master   1/1     Running   0          76m
kube-proxy-4frsb                 1/1     Running   0          76m
kube-proxy-6ld5t                 1/1     Running   0          75m
kube-proxy-fq6m7                 1/1     Running   0          75m
kube-scheduler-master            1/1     Running   0          76m
weave-net-mxqkk                  2/2     Running   0          75m
weave-net-qpmvn                  2/2     Running   0          75m
weave-net-qq5bk                  2/2     Running   0          75m

YAML 파일로 네임스페이스 만들기

  • test_ns.yaml 파일을 생성하고 create 를 사용하여 생성
apiVersion: v1
kind: Namespace
metadata:
  # 네임스페이스 이름
  name: office
$ kubectl create -f test-ns.yaml
namespace/testr-ns created
$ kubectl get ns
NAME              STATUS   AGE
default           Active   75m
kube-node-lease   Active   75m
kube-public       Active   75m
kube-system       Active   75m
test-ns           Active   4m17s

kubectl 명령어로 yaml 없이 바로 네임스페이스 생성 가능
$ kubectl create namespace “test-namespace”

전체 네임스페이스 조회

  • 전체 네임스페이스를 대상으로 kubectl을 실행하는 방법
  • $ kubectl get pod --all-namespaces

실습

  1. 네임스페이스 yaml 설정파일 생성
$ kubectl create ns office --dry-run=client -o yaml > office-ns.yaml
$ cat office-ns.yaml
apiVersion: v1
kind: Namespace
metadata:
  creationTimestamp: null
  name: office
spec: {}
status: {}
  1. 네임스페이스 생성
$ kubectl create -f office-ns.yaml
namespace/office created
  1. 네임스페이스 자원 할당
$ kubectl create deploy nginx --image nginx -n office
deployment.apps/nginx created
  1. 네임스페이스로 생성된 POD 확인
$ kubectl get all -n office
NAME                         READY   STATUS              RESTARTS   AGE
pod/nginx-6799fc88d8-vbch8   0/1     ContainerCreating   0          4s

NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx   0/1     1            0           4s

NAME                               DESIRED   CURRENT   READY   AGE
replicaset.apps/nginx-6799fc88d8   1         1         0       4s
  1. 전체 네임스페이스 정보 조회
$ kubectl get all --all-namespaces
NAMESPACE     NAME                                 READY   STATUS    RESTARTS   AGE
kube-system   pod/coredns-74ff55c5b-bsm6g          1/1     Running   0          86m
kube-system   pod/coredns-74ff55c5b-btpq5          1/1     Running   0          86m
kube-system   pod/etcd-master                      1/1     Running   0          86m
kube-system   pod/kube-apiserver-master            1/1     Running   0          86m
kube-system   pod/kube-controller-manager-master   1/1     Running   0          86m
kube-system   pod/kube-proxy-4frsb                 1/1     Running   0          86m
kube-system   pod/kube-proxy-6ld5t                 1/1     Running   0          85m
kube-system   pod/kube-proxy-fq6m7                 1/1     Running   0          85m
kube-system   pod/kube-scheduler-master            1/1     Running   0          86m
kube-system   pod/weave-net-mxqkk                  2/2     Running   0          85m
kube-system   pod/weave-net-qpmvn                  2/2     Running   0          85m
kube-system   pod/weave-net-qq5bk                  2/2     Running   0          85m
office        pod/nginx-6799fc88d8-vbch8           1/1     Running   0          2m43s

NAMESPACE     NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE
default       service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP                  86m
kube-system   service/kube-dns     ClusterIP   10.96.0.10   <none>        53/UDP,53/TCP,9153/TCP   86m

NAMESPACE     NAME                        DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
kube-system   daemonset.apps/kube-proxy   3         3         3       3            3           kubernetes.io/os=linux   86m
kube-system   daemonset.apps/weave-net    3         3         3       3            3           <none>                   85m

NAMESPACE     NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
kube-system   deployment.apps/coredns   2/2     2            2           86m
office        deployment.apps/nginx     1/1     1            1           2m43s

NAMESPACE     NAME                                DESIRED   CURRENT   READY   AGE
kube-system   replicaset.apps/coredns-74ff55c5b   2         2         2       86m
office        replicaset.apps/nginx-6799fc88d8    1         1         1       2m43s
  1. 사용자 설정파일 수정
$ vi ~/.kube/config

context에 네임스페이스 추가

...
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
    namespace: office
...
  1. 바뀐 네임스페이스 확인
$ kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
nginx-6799fc88d8-vbch8   1/1     Running   0          9m17s
  1. 네임스페이스 삭제

네임스페이스를 삭제 하면 네임스페이스에 연결된 것들이 함께 삭제됨

$ kubectl delete ns office
namespace "office" deleted

$ kubectl get all -n office
No resources found in office namespace.

$ kubectl get all
No resources found in office namespace.

연습문제

  • 현재 시스템에는 몇 개의 Namespace가 존재하는가?
$ kubectl get ns
NAME              STATUS   AGE
default           Active   135m
kube-node-lease   Active   135m
kube-public       Active   135m
kube-system       Active   135m

아래의 총 라인 수 조회를 한 뒤 1을 빼면 됨

$ kubectl get ns | wc -l -1
5
  • kube-system에는 몇 개의 포드가 존재하는가?

아래의 총 라인 수 조회를 한 뒤 1을 빼면 됨

$ kubectl get pod -n kube-system | wc -l
13

모든 네임스페이스 라인 수와 동일

$ kubectl get pod --all-namespaces | wc -l
13
  • ns-jenkins 네임스페이스를 생성하고 jenkins 포드를 배치하라.
    • pod image: jenkins
    • pod name: jenkins

Pod Templates 복사해서 사용
https://v1-17.docs.kubernetes.io/docs/concepts/workloads/pods/pod-overview/#pod-templates

ns-jenkins 네임스페이스 설정 파일 생성

$ kubectl create ns ns-jenkins --dry-run=client -o yaml > jenkins-ns.yaml

ns-jenkins.yaml 설정 파일에 pod 설정 내용을 추가하고 아래와 같이 수정

apiVersion: v1
kind: Namespace
metadata:
  creationTimestamp: null
  name: ns-jenkins
spec: {}
status: {}

---

apiVersion: v1
kind: Pod
metadata:
  name: jenkins
  namespace: ns-jenkins
spec:
  containers:
  - name: jenkins
    image: jenkins
    ports:
    - containerPort: 8080

네임스페이스와 pod 생성
먼저 네임스페이스를 만들던지 같이 만들던지 해야지 pod 가 생성됨

$ kubectl create -f jenkins-ns.yaml
namespace/ns-jenkins created
pod/jenkins created

네임스페이스 및 pod 생성확인

$ kubectl get pod -n ns-jenkins
NAME      READY   STATUS             RESTARTS   AGE
jenkins   0/1     ImagePullBackOff   0          84s
  • coredns는 어느 네임스페이스에 속해있는가?
$ kubectl get pod --all-namespaces | grep coredns
kube-system   coredns-74ff55c5b-bsm6g          1/1     Running            0          161m
kube-system   coredns-74ff55c5b-btpq5          1/1     Running            0          161m
728x90

댓글

💲 추천 글