kubernetes CKA study (14) - Rolling Updates and Rollbacks, Commands, Configure Environment Variables in Applications, ConfigMaps

이동명·2023년 12월 23일
0

kubernetes CKA study

목록 보기
14/37
post-thumbnail

Rolling Updates and Rollbacks

새로운 rollout은 새로운 revision을 생성한다.
향후 컨테이너 버전이 새 것으로 업데이트되면 새로운 rollout이 생기고 새로운 revision이 생성된다.
이렇게 하면 변화를 추적할 수 있고 필요하다면 배포 이전 버전으로 되돌아갈 수 있다.

kubectl rollout 명령어를 통해 rollout 상태와 rollout 기록을 확인할 수 있다.

배포 전략에는 두 가지 유형이 있다.

  • Recreate

    • 인스턴스들을 모두 파괴하고 인스턴스의 새 버전을 생성한다.
    • 구버전이 다운되고 새 버전이 업되기 전 기간 동안 응용 프로그램은 다운되고 사용자가 접근할 수 없다.
    • 기본 전략이 아니다.
  • RollingUpdate

    • 구 버전을 제거하고 신 버전을 하나씩 올린다.
    • 앱이 다운되지 않고 업그레이드가 원활하게 이루어진다.
    • 기존 전략이다.

두 명령어는 각각 deployment를 업데이트하여 새로운 rollout을 생성하고 새로운 revision이 만들어진다.

후자의 방법은 deployment 정의 파일과 다른 구성을 갖게 되기 때문에 주의해야 한다.

업그레이드를 잘못해서 새 버전 빌드에 문제가 있다면 kubectl rollout undo 명령어를 사용해서 이전 리비전으로 롤백할 수 있다.
새 replicaset의 파드가 파괴되고 이전의 replicaset으로 돌아간다.

이번 강의에서 배운 명령어를 요약하자면 다음과 같다.


Solution: Rolling update

deployment의 이미지를 수정하는 명령어이다.

kubectl set image deployment {deployment명} {컨테이너명}={이미지명}

배포 전략 바꾸기(RollingUpdate -> Recreate)

kubectl edit deployment 명령어로 파드 정의 파일에 접속해서 strategy의 type을 'Recreate'으로 수정한다.


Commands

도커에서 컨테이너는 컨테이너 내부의 프로세스가 살아있어야 Running 상태가 된다.
컨테이너 안의 웹 서비스가 멈추거나 충돌하면 컨테이너는 종료된다.

컨테이너에서 실행되는 프로세스는 Dockerfile에 의해 정의된다.
Dockerfile의 CMD는 컨테이너 안에서 실행될 명령이다.

컨테이너 시작 명령을 어떻게 지정할까?

첫번째 방법은 docker run 명령어에 COMMAND를 추가하는 것이다.
그럼 이미지에 지정된 기본 명령을 재정의한다.

docker run ubuntu sleep 5를 실행하면 컨테이너가 작동할 때 sleep을 5초 동안 실행하고 종료된다.

두 번째 방법은 CMD를 추가한 Dockerfile을 작성해서 이미지를 빌드하는 것이다.

일시적으로 명령을 실행하는 앞의 방법과 다르게 컨테이너가 영구적으로 명령을 실행하도록 할 수 있다.

명령을 지정하는 방법은 셸 양식, JSON이 있다.
JSON 배열 포맷에서 명령을 지정할 때 배열의 첫 번째 요소가 실행 가능해야 한다.
또한 명령과 매개 변수를 별도로 지정해야 한다.

CMD는 docker run 명령의 [COMMAND] 옵션에 따라 CMD의 매개변수가 완전히 바뀐다.
반면에, ENTRYPOINT의 경우 전달받은 매개변수를 추가해서 명령을 실행한다.
만약, 매개변수를 전달 받지 못하면 'sleep' 명령이 실행되어 누락된 명령문이라는 오류가 발생한다.

매개변수의 기본값을 설정하기 위해서 ENTRYPOINT와 CMD를 둘 다 사용하면 된다.
이 경우, 매개변수를 지정하지 않았다면 ENTRYPOINT 명령어에 CMD 명령이 추가된다.
만약 매개변수가 지정되었으면 CMD 명령은 무효화된다.
이러한 경우에는 ENTRYPOINT와 CMD를 항상 JSON 포맷으로 지정해야 한다.

마지막으로 ENTRYPOINT를 수정하고 싶다면 '--entrypoint' 옵션을 사용해 재정의하면 된다.

Commands and Arguments

도커 실행 명령에 추가되는 모든 것은 파드 정의 파일의 args 속성으로 가지게 된다.
파드 정의 파일의 args 옵션을 통해 Dockerfile의 CMD를 재정의할 수 있다.

Dockerfile의 ENTRYPOINT를 변경해야 한다면 파드 정의 파일의 command 옵션을 사용하면 된다.

즉, 파드 정의 파일의 command 영역은 Dockerfile의 ENTRYPOINT 영역을 덮어쓰고
args 영역은 Dockerfile의 CMD 영역을 덮어쓴다.


파드 정의 파일에서 args와 command를 명시할 수 있다.

args와 command는 다음과 같이 두가지 형식으로 명시된다.

아래의 경우, '--color green'이 컨테이너에서 실행된다.

아래의 경우, 'python app.py --color pink'가 컨테이너에서 실행된다.

kubectl run 명령어를 실행할 때 다음 옵션들을 사용해서 args와 command를 넘겨줄 수 있다.
kubectl 옵션과 컨테이너 안에서 실행되는 응용 프로그램 옵션을 구분하기 위해 '--'가 사용된다.


테스트 통과 완료


Configure Environment Variables in Applications

파드 정의 파일에서 env 필드를 사용하여 환경변수를 설정할 수 있다.

키-값 포맷을 사용하는 방법 이외에도 컨피그맵과 시크릿키를 사용해서 env를 지정할 수 있다.

Configuring ConfigMaps in Application

컨피그 맵은 중앙에서 키 값 쌍의 데이터를 한번에 관리하기 위해 사용된다.

파드 정의 파일의 env 필드에 컨피그맵을 삽입하여 컨피그맵의 키 값 쌍이 환경 변수로 사용될 수 있게 한다.

컨피그 맵 구성에는 두 단계가 있다.

  1. Create ConfigMap
  2. Inject into Pod

다른 쿠버네티스 개체들과 마찬가지로 컨피그맵을 만드는 방법은 두 가지가 있다.

명령적인 방법은 kubectl create configmap 명령어를 사용하는 것이고

선언적인 방법은 configmap 정의 파일을 작성하고 kubectl create -f 명령어를 실행하는 것이다.

kubectl create configmap 명령어를 사용할 때 키 값 데이터를 명시하기 위해 '--from-literal' 옵션을 사용할 수 있다. 여러 개의 키 값을 명시하기 위해서는 '--from-literal' 옵션을 여러번 사용해야 한다.
'--from-file' 옵션을 사용하여 파을을 통해 필요한 키 값 데이터를 한번에 전달할 수도 있다.

configmap 정의 파일을 통해 다음과 같이 configmap을 생성할 수 있다.

다양한 목적을 위해 같은 방식으로 필요한만큼 configmap을 생성할 수 있다.
그렇기 때문에 configmap에 이름을 적절히 붙이는 것이 중요하다.

컨피그맵을 통해 환경 변수를 전달하기 위해서는 파드 정의 파일의 'envFrom' 필드에 컨피그맵 이름을 명시하면 된다.

파드 정의 파일에서 configmap을 사용하는 경우는 다음 세 가지이다.
env, single env, volume으로 사용될 수 있다.


pod 에 configmap edit 시 들여쓰기 주의하자

테스트 통과 완료

profile
Web Developer

0개의 댓글