k8s- 6회차

박형준·2024년 5월 15일

*레이블(Label) / 애너테이션

-Node, pod , deployment 등 모든 자원을 선택, 분류 관리하기 위한 목적

⇒ 레이블

  • 키와 값으로 구성(key:value) / 키는 쿠버네티스에서 컨트롤이 파드를 관리할때 구분하는 역할
  • 글자는 63글자 까지만 인식 , 시작과 끝은 알파벳으로, 점, 밑줄, 대시바
  • test: test

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)

-컨테이너에 필요한 환경설정을 컨테이너와 분리해서 관리하는 기능.

configmap-dev.yaml 파일 생성 / 실행 / 확인

  • data:
    DB_URL: localhost
    DB_USER: myuser
    DB_PASS: mypass
    DEBUG_INFO:

#kubectl apply -f configmap-dev.yaml

  • #kubectl get configmap ⇒ 실행 확인 및 내용 확인

==> 야물파일에 있는 내용이 모두 실행/적용여부 확인

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

웹브라우저로 접속해 보기


*시크릿 ( Secret )

⇒ 비밀번호, 토큰, SSH키 등 정보를 저장하는 용도.

  • 내장 시크릿 : 쿠버네티스에서 API접근시 사용하는 용도
  • 외장 시크릿 : API이외 용도 사용

*명령을 이용해서 시크릿 만들기
-username.txt , password.txt 생성 안에다 username 과 암호를 기록 하기.

  • [root@master secret]# echo -n 'username' > ./username.txt
    • [root@master secret]# cat username.txt
      username
  • [root@master secret]# echo -n 'password' > ./password.txt
    • [root@master secret]# cat password.txt
      password

secret 파일을 만들기 위한 내용 입력

  • echo -n 'username' > ./username.txt ( 내용 입력 )
  • cat username.txt 으로 확인
  • echo -n 'password' > ./password.txt ( 내용 입력 )
  • cat password.txt 으로 확인

⇒시크릿 파일 생성

  • #kubectl create secret generic user-pass-secret --from-file=./username.txt \ --from-file=./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 부분을 보면 위치가 지정되어 있음.

⇒ 실행 하고 접속해서 파일 확인

  • #kubectl apply -f deployment-secret02.yaml
    • #kubectl exec -it secretapp-f9c8fb9cf-j77db -- sh
      #cd /etc/volume-secret 여기에 보면 username, password 파일 생성 된것 확인

⇒ 웹브라우저를 통해서 확인 방법

볼륨 마운트 ( deployment-secret01.yaml )

  • kubectl apply -f deployment-secret02.yaml
    • kubectl exec -it secretapp-57488ccbf4-llk26 -- sh ( 접속 )
    • cd /etc/volume-secret/ ( 마운트 지점으로 이동 )
  • 마운트 확인
  • localhost에서 확인

*컨테이너 이미지를 가져오기

  • #kubectl create secret docker-registry dockersecret \
    --docker-username=USERNAME --docker-password=PASSWORD \
    --docker-email=EMAIL --docker-server=https://index.docker.io/v1/
    • data: 부분은 기존에 컨테이너에는 없는 부분이고,
      secret을 이용해서 가져오면 보안때문에 형식이 생성되어 저장됨

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로 확인

0개의 댓글