연재 시리즈

Helm 시작하기 - 8편. namespace설정

악분 2021. 11. 25. 23:10
반응형

 

8편에서는 helm 차트를 Release할 때 namespace를 설정하는 방법을 설명합니다.

영상에서는 30:10 ~ 34:16 내용에 해당합니다.

https://youtu.be/ajcyC_6velc?t=1810 

 

1. helm 차트 release의 namespace는 default

kubectl create 또는 apply를 할 때 namespace를 설정하지 않으면 default namespace로 설정됩니다. helm도 마찬가지로 namespace를 설정하지 않으면 default namespace에 설정됩니다.

 

2. namespace 설정

namespace를 설정하는 방법은 helm install(또는 upgrade)할 때 --namespace인자를 같이 사용하는 것입니다. 

helm install --namespace <namespace> <Release> <Chart 경로>

 

문제는 helm Release에 namespace가 설정되면 템플릿 리소스의 metadata.namespace에도 namespace가 설정되어야 합니다. 

 

3. 템플릿 namespace 동적 설정

다행히도 템플릿 리소스에서 release할때 사용된 namespace를 가져올 수 있습니다. 7편에서 살펴본 Release Object에서 가져올 수 있습니다. Relase.Namespace로 Release namespace를 얻을 수 있습니다.

 

7편에서 작성한 차트를 변경해보겠습니다.

 

templates/deployment.yaml 설정은 아래와 같습니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}
  namespace: {{ .Release.Namespace }}
  labels:
    app: {{ .Release.Name }}
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx-test
  template:
    metadata:
      labels:
        app: nginx-test
    spec:
      containers:
      - name: nginx
        image: {{ .Values.image }}
        ports:
        - containerPort: 80

 

templates/service.yaml 설정은 아래와 같습니다.

apiVersion: v1
kind: Service
metadata:
  name: {{ .Release.Name }}
  namespace: {{ .Release.Namespace }}
spec:
  selector:
    app: {{ .Release.Name }}
  ports:
  - port: 80
    targetPort: 80
  type: NodePort

 

values.yaml 설정은 아래와 같습니다.

image: nginx:stable

 

4. helm 차트 Release

namespace를 생성한 후, helm install(또는 upgrade)의 --namespace에 namespace를 설정합니다. kuebctl get -n <namespace>로 배포된 쿠버네티스 리소스를 확인할 수 있습니다.

kubectl create ns test
helm install --namespace test ./
kubectl get -n test all

 

5. helm list로 Release 확인

helm list명령어도 default로 namespace에 배포된 리소스만 확인합니다. 특정 namespace에 배포된 리소스를 확인하려면 --namespace(단축어 -n)을 설정해야 합니다.

helm list --namespace <namespace>

 

반응형