
출처: 시작하세요 도커/쿠버네티스 - 용찬호 지음 > 사세요 대박
네임스페이스(Namespace)별로 컨테이너와 관련 리소스들을 분리하여 관리할 수 있음
기본으로 default namespace가 사용되나
$ kubectl get ns (or namespaces) 하면 이 외에도 기본으로 생성된 kube-node-lease, kube-public, kube-system이라는 네임스페이스가 조회되었다. (kubernetes-dashboard는 조금전에 공홈에서 보고 설치해본것..)

$ kubectl get pods --namespace default 로 default namespace의 파드를 확인해보니 이전에 다 지우고 넘어와서 아무것도 안보이나, kube-system을 들여다보니 이것저것 보였다.
$ kubectl get pods -n kube-system(kube-system namespace 의 pods를 조회하겠다)

번외로
$ kubectl get pods -A (모든 네임스페이스의 pods를 조회하겠다)
$ kubectl get service -n kube-system

서비스도 함께 생성되어 있는것이 확인 되었다.
네임스페이스를 통한 분리는 논리적인 분리이고 물리적 분리는 아니라서 같은 노드에 다른 네임스페이스의 포드가 존재 가능하다
라벨보다 좋은 점은 리소스를 격리켜서 관리할 수 있다는 것과 특정 네임스페이스에만 사이드카 컨테이너를 붙이는것도 가능하다는 것
라벨로 파드 검색
$ kubectl get pods -l app=webserver
@ 네임스페이스는 YAML 파일에 정의해 생성 가능. 적용은 kubectl apply -f로 동일
명령어로도 가능, 이것도 관리차원에서는 YAML이 나을듯하다, 아무리 간단해도

$ kubectl get ns | grep production # 새로 생성한 production namespace 확인
그렇다면 production namespace에 리소스는 어떻게 생성할 것인가?
=> metadata에서 namespace를 명시하면 된다.
...
metadata:
name: hostname-deployment-ns
namespace: production
...
네임스페이스에 종속되는 쿠버네티스 오브젝트 조회
$ kubectl api-resources --namespaced=true

네임스페이스에 종속되지 않는 리소스들
$ kubectl api-resources --namespaced=false

컨피그맵(Configmap) / 시크릿(Secret)
- 설정값이나 환경변수를 저장하는역할은 컨피그맵, 노출되면 안되는 값은 시크릿에
- 환경변수로 포드내부에 설정값을 제공하면 컨피그맵이나 시크릿값을 변경해도 자동재설정 되지 않아서 디플로이먼트를 다시 생성해야하는 점이 있다.
- 볼륨 파일로 포드 내부에 마운트하면 컨피그맵이나 시크릿 변경사항이 자동 update되지만, 이미 실행중인 포드 내부의 어플리케이션에 반영은 아니고 이거는 직접 구현(sighup을 보내는 사이드카 컨테이너를 포함시킨다? 웹훅 너낌?) 해야함
1) 컨피그 맵
maven에서는 active profile에 따라 application.properties파일을 다른 것을 보도록 하였는데..
Configmap은 각서버에서 동일한 이름의 파일을 만들어서 사용하되 내부의 값만 바꾼다는 것.
Okay but How?
pod의 spec에서 아래를 미리 정의해 주면 된다.
spec.containers.env.valueFrom.configMapKeyRef.name 필요한 컨피그 맵 이름 설정
spec.containers.env.valueFrom.configMapKeyRef.key 에 가져올 key값 설정
또는 전체를 다 가져오고 싶으면
spec.containers.envFrom.configMapRef.name을 여러개 선언해서 각 컨피그맵들의 값을 모두 가져올수 있음
$ kubectl get cm (줄임말에 익숙해지자..)
$ kubectl exec container-env-example env 와 같이 테스트로 생성한 container-env-example 컨테이너의 환경 변수를 출력해보면 컨피그맵을 통해 설정된 값들을 확인이 가능하다.
신규 파드에서 별도 볼륨으로 지정해 놓고, 컨피그 맵을 마운트해서 사용도 가능. 아래는 예시
spec.containers.volumeMounts.name: configMap-volume # 볼륨이름
spec.containers.volumeMounts.mountPath: /etc/config # configMap 데이터 위치할 경로
spec.volumes.name: configMap-volume # 볼륨 이름
spec.volumes.configMap.name: start-k8s # 컨피그맵 이름
(선언할 경우에만)
spec.volumes.configMap.items.key: k8s # k8s라는 키의 값 가져오기
spec.volumes.configMap.items.path: k8s_fullname # 최종 파일이름은 k8s_fullname
kustomize 기능을 사용하면 편하게 컨피그맵 생성 가능하다고 하는데... secret에서 설명한다고 함
2) 시크릿
ssh 키나 비밀번호 같은 민감정보용. 네임스페이스 종속되는 리소스
$ kubectl create secret generic my-password --from-literal password=1q2w3e4r (--from-file 도 가능)
$ kubectl describe secrets
$ kubectl get secret my-password -o yaml (yaml형식으로 가져오자)
열어보면 password가 base64 인코딩 되어있음 MXEydzNiNHI=
$ echo MXEydzNiNHI= | base64 -d 로 보면 원래값 확인가능
- generic?
시크릿 종류중 하나. kubectl get secrets으로 보면 TYPE 이 Opaque로 보인다. Opaque타입중 하나라는 말..
- tls
시크릿을 kubernetes.io/tls 타입으로 생성.
$ openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj "/CN=example.com" -keyout cert.key -out cert.crt
$ kubectl create secret tls my-tls-secret --cert cert.crt --key cert.key
사설 레지스트리 또는 도커허버, GCR, ECR 등의 클라우드 레지스트리를 사용하고 있다면 로그인과 같은 인증절차가 필요한데, 시크릿에 인증정보 저장해서 사용한다.
1. ~/.docker/config.json 사용
2. 시크릿 생성명령어에 직접 로그인 정보 명시
파드에서 configMap가 동일하게 secretKeyRef 를 통해 사용가능
$ kubectl create secret tls my-tls-secret --cert cert.crt --key cert.key --dry-run -o yaml 로 시크릿을 인증서와 함께 배포하려면 --dry-run 명령어에서 출력되는 YAML 파일 내용을 저장해 사용 가능
* kustomize
kubectl 1.14부터 사용가능한 기능. yaml파일이 이제까지 작성한것과 좀 다르게 생겼다.
secretGenerator를 configMapGenerator로 바구면 컨피그맵이된다.

정보 미리 확인하기
$ kubectl kustomize ./
적용은
$ kubectl apply -k ./
삭제는
$ kubectl delete -k ./
넘어가기에 앞서 리소스 정리
$ kubectl delete deployment -all
$ kubectl delete pod -all
$ kubectl delete configmap -all
$ kubectl delete secret -all
이제 고급 기능 활용 3부로 가보자.
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2749683716804155"
crossorigin="anonymous"></script>
'환경관련' 카테고리의 다른 글
| 책보고 따라해보는 쿠버네티스: (4) Ingress, PV, PVC (0) | 2021.07.16 |
|---|---|
| 쿠버네티스 대시보드와 렌즈 (1) | 2021.06.17 |
| 책보고 따라해보는 쿠버네티스: (2) 시작하기 (1) | 2021.06.07 |
| 책보고 따라해보는 쿠버네티스: (1) 설치 (2) | 2021.06.04 |
| 책보고 정리해보는 도커 기초 (0) | 2021.06.04 |