-Node, pod , deployment 등 모든 자원을 선택, 분류 관리하기 위한 목적
⇒ 레이블
deployment-label01.yaml (02.03.04) ⇒ 라벨이 구분되어짐.
deployment-label01.yaml (02.03.04) ⇒ 구분지어서 두개씩 묶어주는 기준 label-service01.yam

위에 babel01~04 4개를 environment가 기준이 되어서 clusterIP로 묶기

라벨을 통해 구분하기 위한 pod 배포
- vim deployment-label01.yaml
- 파드 템플릿에는 "app: nginx"와 함께 "environment: develop" 및 "release: beta"와 같은 추가 라벨이 정의하는 yaml 파일 작성
- label02.yaml: "app: nginx"와 함께 "environment: production" 및 "release: beta"와 같은 추가 라벨이 정의
- label03.yaml: "app: nginx"와 함께 "environment: develop" 및 "release: stable"와 같은 추가 라벨이 정의
- label04.yaml: "app: nginx"와 함께 "environment: production" 및 "release: stable"와 같은 추가 라벨이 정의
- kubectl create -f deployment-label01.yaml
- kubectl create -f deployment-label02.yaml
- kubectl create -f deployment-label03.yaml
- kubectl create -f deployment-label04.yaml
label-service01.yaml 생성 / 실행 / 확인
#kubectl apply -f label-service01.yaml (02.yaml)

⇒ 파드가 두개씩 묶여 있는지 확인
#kubectl describe svc


라벨에 대한 서비스 배포
- vim label-service01.yaml
- selector를 사용하여 "environment: develop" 라벨을 가진 파드를 대상으로 선택하는 yaml 파일 작성
- vim label-service02.yaml
- selector를 사용하여 "release: stable" 라벨을 가진 파드를 대상으로 선택하는 yaml 파일 작성
- kubectl create -f label-service01.yaml
- kubectl create -f label-service02.yaml
- kubectl describe service label-develop-service
- kubectl describe service label-stable-service 로 확인
- kubectl get pods -l environment=develop,release=stable -o wide로 확인
( -l 옵션: selector )
-레이블과 마찬가지로 키와 값으로 구성되어 있으며, 시스템이 필요한 정보를 가지고 관리하는데 사용됨
#cat annotation.yaml


애너테이션 설정
- ginx 애플리케이션을 배포하기 위한 Deployment 리소스를 정의하는 yaml 파일 작성
( "manager", "contact", "release-version"과 같은 정보가 포함 )
- kubectl create -f annotation.yaml
- kubectl describe deployments.apps annotation로 정보 확인
*카나리 배포 / 활용
-컨테이너에 필요한 환경설정을 컨테이너와 분리해서 관리하는 기능.
configmap-dev.yaml 파일 생성 / 실행 / 확인
#kubectl apply -f configmap-dev.yaml

==> 야물파일에 있는 내용이 모두 실행/적용여부 확인
ConfigMap 설정
- ConfigMap을 정의하는 내용의 yaml 파일 작성 ( configmap-dev.yaml )
( DB_URL: localhost
DB_USER: myuser
DB_PASS: mypass
DEBUG_INFO: debug )
( ConfigMap은 애플리케이션에서 사용될 설정 정보를 제공하기 위해 활용 )
( 설정 정보는 애플리케이션에 필요한 환경 변수, 데이터베이스 연결 정보 등을 포함 )
- kubectl create -f configmap-dev.yaml
- kubectl get configmaps config-dev 로 확인
- kubectl describe configmaps config-dev 로 확인
- ConfigMap을 정의하는 내용의 yaml 파일 작성 ( configmap-prod.yaml )
- ( DB_URL: prodhost
DB_USER: produser
DB_PASS: produser
DEBUG_INFO: production )
⇒ 호스트에서 localhost:30800/env 로 접속 후 환경 설정 확인 후
⇒ 설정된 내용중 일부만 불러오기
deployment-config01.yaml ⇒ 실행 ( name: DEBUG_LEVEL 추가 시켜주기 )

#kubectl apply -f deployment-config01.yaml
Deployment 설정
- Deployment를 정의하는 yaml파일 작성
( 환경 변수로는 "config-dev" ConfigMap에서 DEBUG_INFO 키의 값을 사용 )
( deployment-config01.yaml )
- "config-dev" ConfigMap에서 환경 변수를 가져와 사용하는 yaml 파일 작성
( deployment-config02.yaml )- config-volume"이라는 이름의 볼륨을 정의하고 볼륨은 "config-dev" ConfigMap을
참조하는 yaml 파일 작성 ( deployment-config03.yaml )
⇒접속해서 환경설정 내용 확인
#curl localhost:30800/env ⇒ 환경설정 내용이 마구잡이로 보여짐.
호스트PC에서 웹브라우저로 접속 해보면

==> 3번행에 DEBUG_LEVEL 이추가된것 확인
configMap과 Deployment 실행 후
- 파이어폭스로 localhost:30800/env 접속하여 확인 ( "DEBUG_LEVEL=debug" )
*한꺼번에 모두 불러오기
deployment-config02.yaml 실행

환경 설정부분에 모두 불러올수 있도록 설정된것 확인

#kubectl apply
-f deployment-config02.yaml
실행후 접속을 해보면 원본에 있는 환경 설정파일이 모두 적용이 된것 확인
*컨피그맵을 볼륨에서 불러와서 사용하기 ⇒ 설정파일을 파일로 만들어서 바로 적용 시키는 방법
deployment-config03.yaml ⇒ config-dev 에 있는 설정 파일을 /etc/config 에 파일생성 저장

#kubectl apply -f deployment-config03.yaml
⇒생성된 파드 접속 후 /etc/config 확인해보기
#kubectl exec -it configapp-5c89b5fc94-d5vlk -- sh

웹브라우저로 접속해 보기

⇒ 비밀번호, 토큰, SSH키 등 정보를 저장하는 용도.
*명령을 이용해서 시크릿 만들기
-username.txt , password.txt 생성 안에다 username 과 암호를 기록 하기.
secret 파일을 만들기 위한 내용 입력
- echo -n 'username' > ./username.txt ( 내용 입력 )
- cat username.txt 으로 확인
- echo -n 'password' > ./password.txt ( 내용 입력 )
- cat password.txt 으로 확인
⇒시크릿 파일 생성

secret 파일 생성
- kubectl create secret generic user-pass-secret --from-file ./username.txt \
--from-file ./password.txt- kubectl get secrets으로 확인
- kubectl get secrets user-pass-secret -o yaml 으로 확인 ( 암호화 )
*템플릿을 이용해서 시크릿 생성

[root@master secret]# kubectl apply -f user-pass-yaml.yaml

secret 설정
- 시크릿을 정의하는 yaml 파일 작성
( 사용자 이름과 비밀번호를 base64로 인코딩하여 저장 )
( 타입(type)은 "Opaque"으로 지정 )
( 데이터 필드에 사용자 이름과 비밀번호가 base64로 인코딩되어 저장
"username" 키에는 base64로 인코딩된 사용자 이름이 저장
"password" 키에는 base64로 인코딩된 비밀번호가 저장 )
- kubectl create -f user-pass-yaml.yaml
- kubectl get secrets으로 확인
*생성된 시크릿 파일 사용
deployment-secret01.yaml 환경변수로 설정 사용 env 부분 보면됨.

deployment 설정
- Deployment를 정의하는 yaml 파일 작성 ( deployment-secret01.yaml )
( "arisu1000/simple-container-app:latest" 이미지를 사용 )
( 환경 변수를 시크릿에서 가져온다
"SECRET_USERNAME" 환경 변수: "user-pass-yaml" 시크릿의 "username" 키에서 값을 가져온다
"SECRET_PASSWORD" 환경 변수: "user-pass-yaml" 시크릿의 "password" 키에서 값을 가져온다 )- 볼륨을 마운트하고 있으며, 해당 볼륨은 시크릿을 참조하는 yaml 파일 작성
( deployment-secret02.yaml )
- "volume-secret"이라는 이름의 볼륨을 "/etc/volume-secret" 경로에 읽기 전용으로 마운트하고 있으며, 이 볼륨은 "user-pass-yaml"이라는 이름의 시크릿을 참조하고 있습니다.
- private Docker 레지스트리에서 이미지를 가져오기 위해 "dockersecret"라는 이름의 이미지 풀 시크릿을 사용하는 yaml 파일 작성 ( deployment-secret03.yaml )
⇒ 실행 / 접속 해서 환경변수로 USERNAME과 PASSWORD가 환경변수에 등록되었는지 확인
#kubectl apply -f deployment-secret01.yaml

접속해서 환경 변수 확인 ( deployment-secret01.yaml )
- #kubectl apply -f deployment-secret01.yaml
- 파이어 폭스로 접속해서 확인 ( 환경 변수가 등록된 것, localhost:30900/env )
-볼륨에 시크릿 파일 제공(저장)
#cat deployment-secret02.yaml ⇒ volume 부분을 보면 위치가 지정되어 있음.

⇒ 실행 하고 접속해서 파일 확인
⇒ 웹브라우저를 통해서 확인 방법

볼륨 마운트 ( deployment-secret01.yaml )
- kubectl apply -f deployment-secret02.yaml
- kubectl exec -it secretapp-57488ccbf4-llk26 -- sh ( 접속 )
- cd /etc/volume-secret/ ( 마운트 지점으로 이동 )
- 마운트 확인
- localhost에서 확인
*컨테이너 이미지를 가져오기

deployment-secret03.yaml ⇒ 인증과 관련된 정보를 시크릿을 이용해서 이미지로 저장
⇒ 파일 실행하고 확인해보면 Err 발생 이유는 프라이빗 저장소이미지는 가져올 수 없음

이미지 가져오기
- #kubectl create secret docker-registry dockersecret \
--docker-username=USERNAME --docker-password=PASSWORD \
--docker-email=EMAIL --docker-server=https://index.docker.io/v1/
- kubectl get secrets dockersecret로 확인
*인증서 저장하기 ( openssh : https 인증서 )
⇒ 파일 형식이 yaml 파일이 아니라 kubectl로는 실행이 안됨.

#kubectl create secret tls tlssecret --key tls.key --cert tls.crt
[root@master secret]# kubectl get secret tlssecret -o yaml

인증서 생성
- openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key \
-out tls.crt -subj "/CN=example.com" ( key 덮어씌워서 새로 만들기 )- kubectl create secret tls tlssecret --key tls.key --cert tls.crt ( kubectl로 인증서 생성 )
- kubectl get secrets tlssecret -o yaml로 확인