콤퓨우터/필기: KodeKloud CKA 강의

41. Namespaces

파란화면 2024. 5. 14. 22:26
반응형

지금까지는 Default 네임서페이스를 사용하고있었다.

  • 쿠버 내부에서 사용하는 Pod, Service에 대해서는, (DNS, 네트워킹 등) kube-system 네임서비스를 사용한다
  • 모든 사용자들이 사용할 수 있는 리소스는 kube-public으로 지정된다

클러스터가 작으면 default 네임스페이스로 상관없지만, 엔터프라이즈/프로덕션 환경에서는 namespace로 나눠 쓰는 편이 좋다

  • 예를 들어, 개발환경과 프로덕션환경에서 똑같은 클러스터를 사용하면서도 리소스는 isolate하고 싶은 경우, Dev와 Prod 네임스페이스를 따로 만들어 사용할수있을것이다

각네임스페이스는

  • 누가 무엇을 할 수 있는지에 대한 정책을 가지고있다
  • 네임스페이스별로 최대사용가능 리소스 리밋을 걸 수 있다

각각의 네임스페이스 구성원들끼리는 그냥 각자를 이름으로 부를 수 있다 (가정 내에서 풀네임을 쓸 필요가 없는 것처럼)

  • mysql.connect("db-service")

하지만 다른 네임스페이스의 구성원에 접근할때에는 풀네임을 써줘야한다

  • mysql.connect("db-service.dev.svc.cluster.local") - dev 네임스페이스의 db-service에 접속 시
    • 서비스가 생성되면 이러한 포맷으로 자동으로 DNS엔트리가 추가되기때문
      • cluster.local - 쿠버 클러스트의 도메인
      • svc 서비스에 대한 서브도메인
      • dev - 네임스페이스명

kubectl get pods 명령어에 파라미터를 안넣으면 default 네임스페이스의 pods만 보여준다

  • --namespace=네임스페이스-명 파라미터를 넣어야 함
  • 혹은, --all-namespace 파라미터를 주면 모든 네임스페이스를 전부 보여준다

특정 네임스페이스에 오브젝트(Pod같은)걸 만들려면
kubectl create -f asdf.yml

  • 이러면 default 네임스페이스로 들어감
  • 다른 곳에 넣으려면 --namespace=네임스페이스-명 파라미터를 넣어야

혹은 Pod Definition file의 metadata칸에

metadata:
  namespace: dev

옵션을 주어야함

네임스페이스의 생성

yaml 설정파일으로

apiVersion: v1
kind: namespace
metadata:
  name: 이름

를 만든 뒤에 kubectl create -f asdf.yml

그냥 명령어로

kubectl create namespace 이름

Default 네임스페이스를 다른 걸로 바꾸기

kubectl config set-context $(kubectl config current-context) --namespace=이름

  • context 개념에 대해서는 다음에 알아볼것이다

각 네임스페이스에 대한 리소스 요청/제한

resource quota를 생성하면된다

apiVersion: v1
kind: ResourceQuota
metadata:
    name: compute-quota
    namespace: dev
    # 이제 여기에 제한할 resource들을 넣으면 된다
    requests.cpu: "4"
    requests.memory: 5Gi
    limits.cpu: "10"
    limits.memory: 10Gi

kubectl create -f compute-quota.yaml

kubectl get --help | grep namespace
 Prints a table of the most important information about the specified resources. You can filter the list using a label selector and the --selector flag. If the desired resource type is namespaced you will only see results in your current namespace unless you pass --all-namespaces.
    -A, --all-namespaces=false:
        If present, list the requested object(s) across all namespaces. Namespace in current context is ignored even if specified with --namespace.
반응형

'콤퓨우터 > 필기: KodeKloud CKA 강의' 카테고리의 다른 글

59-63. Taints, Tolerations, Node Selectors, Affinity  (0) 2024.05.14
44. Imperative v. Declarative  (0) 2024.05.14
36. Services  (0) 2024.05.14
29-32. ReplicaSet과 Deployment  (0) 2024.05.14
22. Pods with YAML  (0) 2024.05.14