네임스페이스(Namespace)
: 리소스를 논리적으로 구분하는 오브젝트
: 포드, 레플리카셋, 디플로이먼트, 서비스 등과 같은 쿠버네티스 리소스들이 묶여있는 그룹
- 용도 ex) 모니터링, 로드 밸런싱 인그레스 등
- 논리적으로만 구분되고, 물리적으로는 구분된 것은 아니다
네임스페이스 목록 확인
kubectl get ns
직접 생성하지 않아도 기본적으로 존재하는 네임스페이스
1. default
2. kube-public
3. kube-system
네임스페이스의 리소스 확인
# kube-system 네임스페이스의 pod 목록 확인
kubectl get pods -n kube-system
# kube-system 네임스페이스의 service 목록 확인
kubectl get service -n kube-system
네임스페이스 VS 라벨
네임스페이스는 라벨보다 더 넓은 용도로 사용 가능
- ex 1) ResourceQuota 를 이용해 특정 네임스페이스에서 생성되는 포드의 자원 사용량 제한
- ex 2) 애드미션 컨트롤러라는 기능을 이용해 특정 네임스페이스에 생성되는 포드에 항상 사이드카 컨테이너를 붙이도록 설정
- ex 3) 사용 목적에 따라 포드, 서비스 등의 리소스를 구분하기 편리하다
poudoction이라는 네임스페이스 생성하기 YAML
apiVersion: v1
kind: Namespace
metadata:
name: production
네임스페이스에 디플로이먼트, 서비스 생성하기 YAML
apiVersion: apps/v1
kind: Deployment
metadata:
name: hostname-deployment-ns
namespace: production
spec:
replicas: 1
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
- --- : 여러개의 리소스 정의
모든 네임스페이스의 리소스 확인하기
kubectl get pods --all-namespaces
같은 네임스페이스 내의 서비스에는 서비스 이름만으로 접근 가능
But, 다른 네임스페이에 존재하는 서비스에는 서비스 이름만으로 접근 불가능
-> 서비스이름.네임스페이스이름.svc 로 다른 네임스페이스의 서비스에도 접근 가능
ex) production 네임스페이스에 있는 hostname-scv-clusterip-ns 라는 서비스에 접근하기
curl hostname-svc-clusterip-ns.production.svc:8080 -- slient | grep Hello
A 네임스페이스에서 포드를 만들면 B 네임스페이스에서는 보이지 않는다
== '오브젝트가 네임스페이스에 속한다' namespaced
네임스페이스에 속하는 오브젝트 종류 확인
kubectl api-resources --namespaced=true
네임스페이스에 속하지 않는 오브젝트 종류 확인
kubectl api-resources --namespaced=false
환경변수(키-값)를 YAML에 직접 명시하는 방식보다는, YAML 파일과 설정값을 분리할 수 있는 컨피그맵, 시크릿 사용
-> 장점: 어플리케이션과 설정값을 별도로 분리해 관리할 수 있다
컨피그맵(Configmap)
: 설정값 저장
컨피그맵 생성방법 1. --from-literal 옵션 사용
- kubectl create configmap 컨피그맵이름 각종설정값들
- --from-literal: 컨피그맵에 여러개의 변수 설정
kubectl create configmap log-level-configmap --from-literal LOG_LEVEL=DEBUG --from-literal k8s=kubernetes
컨피그맵 저장된 값 확인
kubectl get cm
컨피그맵 생성방법 2. --from-file 옵션 사용
- kubectl create configmap 컨피그맵이름 --from-file 파일이름
kubectl create configmap index-file --from-file index.html // 키는 index.html이 된다
kubectl create configmap index-file --from-file myindex=index.html // 키는 myindex가 된다
- --from-env-file 옵션: 여러개의 키-값 들로 구성된 설정 파일을 한번에 컨피그맵으로 가져올 때
kubectl create configmap --from-envfile --from-env-file mutiple-keyvalue.env
// yaml 형식으로 생성된 컨피그맵 확인
kubectl get cm from-envfile -o yaml
컨피그맵 생성방법 3. --dry-run 옵션 사용
컨피그맵을 생성하지 않은채로 YAML 파일 내용 출력 후 YAML 파일 저장
-> 컨피그맵도 YAML 파일로 배포해서 사용 가능
kubectl create configmap my-configmap --from-literal mykey=myvalue --dry-run -o yaml > my-configmap.yaml
컨피그맵을 포드에서 사용하는 방법1. 컨피그랩의 값을 컨테이너의 환경변수로 사용
애플리케이션이 시스템 환경 변수로부터 설정값을 가져온다면 이 방법 사용
1) 컨피그맵의 값을 환경 변수로 사용하는 포드를 생성하는 YAML
apiVersion: v1
kind: Pod
metadata:
name: container-env-example
spec:
containers:
- name: my-container
image: busybox
args: ['tail', '-f', '/dev/null']
envFrom:
- configMapRef:
name: log-level-configmap
- configMapRef:
name: start-k8s
- envFrom.configMapRef: 컨피그맵에 존재하는 모든 키-값 쌍을 가져온다
포드의 컨테이너에 설정된 변수 확인하기
- env: 환경변수를 출력하는 명령어
kubectl exec container-env-example env
2) 컨피그맵에서 특정 값만 환경 변수로 사용하는 포드를 생성하는 YAML
apiVersion: v1
kind: Pod
metadata:
name: container-selective-env-example
spec:
containers:
- name: my-container
image: busybox
args: ['tail', '-f', '/dev/null']
env:
- name: ENV_KEYNAME_1 # (1.1) 컨테이너에 새롭게 등록될 환경 변수 이름
valueFrom:
configMapKeyRef:
name: log-level-configmap
key: LOG_LEVEL
- name: ENV_KEYNAME_2 # (1.2) 컨테이너에 새롭게 등록될 환경 변수 이름
valueFrom:
configMapKeyRef:
name: start-k8s # (2) 참조할 컨피그맵의 이름
key: k8s # (3) 가져올 데이터 값의 키
# 최종 결과 -> ENV_KEYNAME_2=$(k8s 키에 해당하는 값)
# ENV_KEYNAME_2=kubernetes
- valueFrom.configMapKeyRef: 컨피그맵에 존재하는 키-값 쌍 중에서 원하는 데이터만 선택적으로 가져온다
컨피그맵을 포드에서 사용하는 방법 2. 컨피그맵의 값을 포드 내부의 파일로 마운트해 사용
애플리케이션이 conf 등의 파일을 통해 설정값을 가져온다면 이 방법 사용
1) 컨피그맵에 존재하는 모든 키-값 쌍을 디렉터리에 마운트하는 YAML
apiVersion: v1
kind: Pod
metadata:
name: configmap-volume-pod
spec:
containers:
- name: my-container
image: busybox
args: [ "tail", "-f", "/dev/null" ]
volumeMounts:
- name: configmap-volume # volumes에서 정의한 컨피그맵 볼륨 이름
mountPath: /etc/config # 컨피그맵의 데이터가 위치할 경로
volumes:
- name: configmap-volume # 컨피그맵 볼륨 이름
configMap:
name: start-k8s
- spec.volumes: 사용할 볼륨의 목록
- spec.containers.volumeMounts: volume 항목에서 정의된 볼륨을 컨테이너 내부의 어떤 디렉터리에 마운트할 것인지 명시
마운트로 포드 생성 후 확인
$ kubectl exec configmap-volume-pod ls /etc/config
container
k8s
$ kubectl exec configmap-volume-pod cat /etc/config/k8s
kubernetes
2) 컨피그맵에 존재하는 특정 키-값 쌍을 디렉터리에 마운트하는 YAML
apiVersion: v1
kind: Pod
metadata:
name: selective-cm-volume-pod
spec:
containers:
- name: my-container
image: busybox
args: [ "tail", "-f", "/dev/null" ]
volumeMounts:
- name: configmap-volume
mountPath: /etc/config # 마운트되는 위치는 변경되지 않았습니다.
volumes:
- name: configmap-volume
configMap:
name: start-k8s
items: # 컨피그맵에서 가져올 키-값의 목록을 나열합니다.
- key: k8s # k8s라는 키에 대응하는 값을 가져옵니다.
path: k8s_fullname # 최종 파일 이름은 k8s_fullname이 됩니다
items: 컨피그맵에서 가져올 키-값 목록을 의미
path: 디렉토리에 위치할 파일 이름을 명시
마운트로 포드 생성 후 확인
$ kubectl exec selective-cm-volume-pod ls /etc/config
k8s_fullname
$ kubectl exec selective-cm-volume-pod cat /etc/config/k8s_fullname
kubernetes
시크릿(Secret)
: 노출되면 안되는 값 저장
kustomize
: YAML 파일이 너무 길어질 때 사용
SSH키 비밀번호 등과 같이 민감한 정보를 저장하기 위한 용도로 사용
사용법은 컨피그맵과비슷
kubectl create secret generic my-password --from-literal password=1q2w3e4r
echo mypassword > pw1 && echo yourpassword > pw2
kubectl create secret generic our-password --from-file pw1 --from-file pw2
시크릿은 컨피그맵과 달리 데이터의 사용 목적에 따라 몇가지 종류로 나뉨
kubectl describe secret my-password
password: 8 bytes
kubectl get secret my-password -o yaml
data:
password: MXEydzNlNHI=
컨피그맵과 비스산 형식으로 데이터가 저장돼 있지만, 키-값 쌍에서 값에
해당하는 부분이 이상한값으로 변형돼있음 MXEydzNlNHI=는 1q2w3e4r이 base64로 인코딩한값
--dry-run -o로 확인해보면 맞게 나와있음
컨피그맵ref와같이 시크릿도 secretRef가 존재
envFrom:
- secretRef:
name: my-password
동일하게 사용가능하고 key, name도 사용가능
'도커&쿠버네티스' 카테고리의 다른 글
[도커/쿠버네티스] 9장 퍼시스턴트 볼륨(PV)과 퍼시스턴트 볼륨 클레임(PVC) (0) | 2022.03.08 |
---|---|
[도커/쿠버네티스] 8장 인그레스 (0) | 2022.02.28 |
[도커/쿠버네티스] 5장 쿠버네티스 설치 / 6장 쿠버네티스 시작하기 (포드, 레플리카셋, 디폴로이먼트, 서비스) (0) | 2022.02.07 |
쿠버네티스 설치 minikube (0) | 2022.01.31 |
[도커/쿠버네티스] 4장 도커 컴포즈 (0) | 2022.01.25 |
댓글