쿠버네티스는 클러스터 안에 가상 클러스터를 또 다시 만들 수 있다
클러스터 안의 가상 클러스터
쿠버네티스 클러스터내의 논리적인 분리단위
하나의 클러스터 내에, 개발/운영/테스트 환경이 있을때, 클러스터를 개발/운영/테스트 3개의 네임 스페이스로 나눠서 운영 가능
쿠버네티스 클러스터는 컨테이너화된 애플리케이션을 실행하기 위한 노드 머신
프로덕션 ip 안에 있는 걸로 접속
==> 여기서 프로덕션 ip란 실제 서비스를 위한 운영용 ip(겠지?)
동일한 네임스페이스 안에 있는 파드로 연결된 것
다른 네임스페이스 내의 서비스에 접근
kubectl run -it --rm debug --image=alicek106/ubuntu:curl --restart=Never -- bash
네임스페이스를 지정하지 않고(디폴트 네임스페이스인 상태) 포드를 생성
ip로 접근할 때--> 가능
네임스페이스(서비스 이름)로 접근할 때--> 찾을 수 없다
네임스페이스가 달라도 접근은 할 수 있다.
직접적인 서비스 명을 안쓰고 어떤 방법을 통하면 ip로 접근이 가능하니 어떤 규칙을 사용하면 접근 가능할듯!
다른 네임스페이스에 존재라는 서비스로 접근하기 위해서는
[서비스 이름].[네임스페이스 이름].svc
형태로 사용해야 함
kubectl api-resources --namespaced=tr
kubectl api-resources --namespaced=false
네임스페이스 별로 존재한다
YAML파일과 kubectl create configmap 명령어로 생성가능
kubectl get configmap
설정된 키=벨류 이름들이 나오게 되는 것. 안에 설정된 내용은 describe 하면 데이터 부분에 나와있는 것을 볼 수 있다.
from literal--> key=value 형태의 설정정보를 저장할 수 있도록
kubectl describe configmap <configmap 이름>
kubectl get configmap <configmap 이름> -o yaml
설정정보들을 필요에 따라 여러개 나누는 경우가 있음--> 파일의저장정보/db의 저장정보를 따로 가져가는 등의 경우
그루핑해서 따로 가져갈 수 있다
컨피그맵을 만들고 위의 명령어로 확인 가능하다
pod에서 필요로 하는 값을 제공받기 위해 컨피그 맵을 사용하는 방법
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
pod 실행
컨테이너 내부에 있는 환경변수 확인
kubectl exec container-env-example -- env
LOG_LEVEL=DEBUG
container=docker
k8s=kubernetes
이 부분에 주목!
지금은 전체 컨피그 사용 --> envFrom: 컨피그맵에 정의된 모든 vey=value 값을 가져와서 환경변수로 설정
valueFrom,configMapKeyRef=> 컨피그맵에 존재하는 키=값 쌍중에서 원하는 데이터만 선택해서 환경변수로 설정
컨피그맵의 모든 변수가 설정된 이름 변수가 설정된 환경의 이름 변수에 다 잡힌다
valueFrom 위의 name은 새롭게 정의될 환경변수의 이름
참조할 컨피그맵의 이름이 된다
컨피그맵에서 정의된 변수의 키가 된다
컨피그맵의 값을 포드 내부의 파일로 마운트해 사용
VolumeMounts => 모든 키-값 쌍 데이터를 포드에 마운트
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
mountPath: /etc/config
volumes:
- name: configmap-volume
configMap:
name: start-k8s'''
주로 아주 많은 내용들을 담고있는 nginx.conf (nginx서버의 설정파일 ) 또는 mysql.conf (Mysql 설정 파일) 등의 내용 전체를 컨피그맵에 저장할 때 사용
configmap은 포드로 설정값을 전달
일부/전체를 주는 방법으로 나뉜다.
환경변수로 전달/ 볼륨마운트-> 파일로 전달하는 방법도 있음
일부 데이터를 보내줄 환경변수명을 새롭게 정의해야 된다
컨피그맵으로 정의될 값이 새로 변경될 값으로 변경된다.
키값:파일명
파일 내용: 해당 컨피그의 값
일부를 보낼 때는 파일을 정의할 수 있다.
컨피그를 설정하지 않고 yaml 파일 형식으로 출력 가능
yaml파일을 저장해두면 동일한 내용의 컨피그를 만들면 다음에 yaml이용 가능
리눅스 할 때 특정 출력결과를 파일로 보내기--> 리다이렉트로 만들기!
kubectl get configmap my-configmap -o yaml > my-configmap.yaml
cat my-configmap.yaml
파일을 삭제하지않고
kubectl create configmap my-configmap --from-literal mykey=myvalue --dry-run
컨피그 파일이 만들어진 것 처럼 출력하라!
yaml 파일의 형태로 출력하려면
-o yaml 을 추가한다
실제 컨피그맵에는 추가되어있지 않음
kubectl create configmap my-configmap --from-literal mykey=myvalue --dry-run -o yaml > my-configmap.yaml
: yaml형식의 출력을 파일로 저장(리다이렉트)
">": 덮어쓰기
">>": 엎어쓰기
SSH 키, 비밀번호 등과 같이 민감한 정보를 저장하는 용도로 사용
Opaque 타입
비공개 레지스트리(private registry)에 접근할 때 사용하는 인증 설정 시크릿
kubectl create secret generic my-password --from-literal password=p@ssw0rd
--from-literal
--from-file
configmap vs secret: secret은 내용 공개X
kubectl describe secret my-password
kubectl get secrets my-password -o yaml
패스워드는 BASE64로 인코딩
6비트 단위로 자르고 매핑해서 데이터를 만든다
인코딩
echo p@ssw0rd | base64
디코딩
echo cEBzc3cwcmQ= | base64 -d
시크릿에 저장된 모든 값을 가져오기
vi env-from-secret.yaml
apiVersion: v1
kind: Pod
metadata:
name: secret-env-example
spec:
containers:
\- name: my-container
image: busybox
args: ["tail", "-f", "/dev/null"]
envFrom:
\- secretRef: <= my-password 시크릿에 저장된 모든-키-밸류 값을 환경변수로 설정
name: my-password
시크릿에 저장된 일부 값을 가져오기
vi selective-env-from-secret.yaml
시크릿에 저장된 값 전체를 포드에 볼륨 마운트
vi volume-mount-secret.yaml
시크릿에 저장된 값 일부를 포드에 볼륨 마운트
vi selective-volume-mount-secret.yaml