네임스페이스(namespace)

리소스(pod, replicaset, deployment, service, node, …)를 논리적으로 구분하는 기준

YAML 파일의 메타데이터 아래 namespace 속성으로 지정

네임스페이스 조회

vagrant@ubuntu:~/kub01$ kubectl get namespaces
NAME              STATUS   AGE
default           Active   3d1h
kube-node-lease   Active   3d1h
kube-public       Active   3d1h
kube-system       Active   3d1h

기본적으로 kube-* 네임스페이스를 가진다.

default : 쿠버네티스를 설치하면 자동으로 사용하도록 설정되는 네임스페이스

특정 네임스페이스에 생성된 pod 확인

vagrant@ubuntu:~/kub01$ kubectl get pods --namespace default
NAME                                   READY   STATUS    RESTARTS   AGE
hostname-deployment-7dfd748479-7zdv7   1/1     Running   0          106m
hostname-deployment-7dfd748479-pp8x4   1/1     Running   0          106m
hostname-deployment-7dfd748479-rtgzv   1/1     Running   0          106m

vagrant@ubuntu:~/kub01$ kubectl get pods --namespace kube-system
NAME                               READY   STATUS    RESTARTS   AGE
coredns-f9fd979d6-lsnmk            1/1     Running   2          3d1h
etcd-minikube                      1/1     Running   1          3d1h
kube-apiserver-minikube            1/1     Running   1          3d1h
kube-controller-manager-minikube   1/1     Running   2          3d1h
kube-proxy-sbghs                   1/1     Running   2          3d1h
kube-scheduler-minikube            1/1     Running   2          3d1h
storage-provisioner                1/1     Running   4          3d1h

특정 네임스페이스에 생성된 service 확인

vagrant@ubuntu:~/kub01$ kubectl get service --namespace kube-system
NAME       TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE
kube-dns   ClusterIP   10.96.0.10   <none>        53/UDP,53/TCP,9153/TCP   3d1h

네임스페이스 사용

  1. YAML 파일 생성
vagrant@ubuntu:~/kub01$ vi production-namespace.yml
`YAML
apiVersion: v1
kind: Namespace
metadata:
  name: production
`
  1. 다른방법. 명령어로 생성
kubectl create namespace mynamespace

1.1 네임스페이스 조회

vagrant@ubuntu:~/kub01$ kubectl get namespaces
NAME              STATUS   AGE
default           Active   3d1h
kube-node-lease   Active   3d1h
kube-public       Active   3d1h
kube-system       Active   3d1h
mynamespace       Active   8s
production        Active   2m4s

특정 네임스페이스에 리소스를 생성하는 방법

vagrant@ubuntu:~/kub01$ cp deployment-hostname.yml hostname-deploy-svc-ns.yml
vagrant@ubuntu:~/kub01$ vi hostname-deploy-svc-ns.yml

`YAML
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hostname-deployment-ns
  namespace: production
spec:
  replicas: 3
  selector:
    matchLabels:
      app: webserver
  template:
    metadata:
      name: my-webserver
      labels:
        app: webserver
    spec:
      containers:
      - name: my-webserver
        image: alicek106/rr-test:echo-hostname
        ports:
        - containerPort: 80

---
apiVersion: v1
kind: Service
metadata:
  name: hostname-svc-clusterip-ns
  namespace: production
spec:
  ports:
    - name: web-port
      port: 8080
      targetPort: 80
  selector:
    app: webserver
  type: ClusterIP
`
vagrant@ubuntu:~/kub01$ kubectl apply -f hostname-deploy-svc-ns.yml
deployment.apps/hostname-deployment-ns created
service/hostname-svc-clusterip-ns created

vagrant@ubuntu:~/kub01$ kubectl get pods,services --namespace production
NAME                                          READY   STATUS    RESTARTS   AGE
pod/hostname-deployment-ns-7dfd748479-4mg2b   1/1     Running   0          50s
pod/hostname-deployment-ns-7dfd748479-jgzg6   1/1     Running   0          50s
pod/hostname-deployment-ns-7dfd748479-rg8lw   1/1     Running   0          50s

NAME                                TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)    AGE
service/hostname-svc-clusterip-ns   ClusterIP   10.97.13.64   <none>        8080/TCP   50s

서로 다른 네임스페이스에서 이름으로 접근하려면 .NAMESPACE.svc 붙여 명시해줘야한다.

vagrant@ubuntu:~/kub01$ kubectl run -it --rm debug --image=alicek106/ubuntu:curl --restart=Never -- bash
If you don't see a command prompt, try pressing enter.
root@debug:/#
root@debug:/# curl http://hostname-svc-clusterip-ns:8080
curl: (6) Could not resolve host: hostname-svc-clusterip-ns
# default 네임스페이스에서는 접근 못함

root@debug:/# curl http://hostname-svc-clusterip-ns.production.svc:8080
<!DOCTYPE html>
<meta charset="utf-8" />
# <이하생략>

네임스페이스 삭제

vagrant@ubuntu:~/kub01$ kubectl delete namespace production
namespace "production" deleted

네임스페이스에 속하는 오브젝트 종류

vagrant@ubuntu:~/kub01$ kubectl api-resources --namespaced=true

네임스페이스에 속하지 않는 오브젝트 종류

vagrant@ubuntu:~/kub01$ kubectl api-resources --namespaced=false

 

반응형

+ Recent posts