Today I Learned

[쿠버네티스 인 액션] 7. 컨피그맵과 시크릿 : 애플리케이션 설정 (1) 본문

쿠버네티스

[쿠버네티스 인 액션] 7. 컨피그맵과 시크릿 : 애플리케이션 설정 (1)

하이라이터 2022. 11. 7. 18:25
728x90

7장에서 다루는 내용

  • 컨테이너의 주 프로세스 변경
  • 애플리케이션에 명령줄 옵션 전달
  • 애플리케이션에 노출되는 환경변수 설정
  • 컨피그맵으로 애플리케이션 설정
  • 시크릿으로 민감한 정보 전달

7.1 컨테이너화된 애플리케이션 설정

  • 애플리케이션에 필요한 설정을 외부에서 전달하는 경우 명령줄 인수 또는 설정 파일을 사용하거나 환경변수를 사용한다.
  • 도커 컨테이너 내부에 있는 설정 파일을 사용하는 것은 까다롭기 때문에(설정 파일을 컨테이너 이미지 안에 포함하거나 파일이 포함돼 있는 볼륨을 컨테이너에 마운트) 주로 환경변수가 주로 사용된다.
  • 설정 데이터를 저장하는 쿠버네티스 리소스인 컨피그맵을 사용하면 최상위 레벨의 쿠버네티스 리소스에 저장하고 이를 깃 저장소 등에 저장할 수 있다.

7.2 컨테이너에 명령줄 인자 전달

7.2.1 도커에서 명령어와 인자 전달

  • 컨테이너에서 실행하는 전체 명령은 명령어와 인자로 구성된다.

ENTRYPOTION와 CMD 이해

  • ENTRYPOINT는 컨테이너가 시작될 때 호출될 명령어를 정의한다.
  • CMD는 ENTRYPOINT에 전달되는 인자를 정의한다.
$docker run <image>
$docker run <image> <arguments>

 

shell과 exec 형식 간의 차이점

  • 두 명령어는 두  가지 서로 다른 형식을 지원한다.
    • shll 형식 - 예 : ENTRYPOINT node app.js
    • exec 형식 - 예: ENTRYPOIONT ["node", "app.js"]
  • 차이점은 내부에서 정의된 명령을 shell로 호출하는지 여부다.
  • exec 형식을 사용하면 다음과 같이 컨테이너의 프로세스 목록이 보여진다.

  • shell 형식을 사용할 경우에는 다음과 같다.

 

fortune 이미지에서 간격을 설정할 수 있도록 만들기

  • fortune 스크립트와 이미지에서 반복하는 주기를 변경하도록 수정해보자. INTERNAL 변수를 추가하고 첫 번째 명령줄 인자의 값으로 초기화한다.

  • Dockfile을 수정해 exec 버전 ENTRYPOINT 명령을 사용하고 기본 간격으로 10초를 CMD 명령으로 지정한다.

  • 이제 이미지를 빌드하고 도커 허브에 푸시할 수 있다.

  • 로컬에서 도커로 이미지를 실행해 테스트할 수 있다.

  • 또한 기본 sleep 시간 간격을 인자로 전달해 재정의할 수 있다.


7.2.2 쿠버네티스에서 명령과 인자 재정의

  • 컨테이너 정의 안에 command와 args 속성을 지정해서 ENTRYPOINT와 CMD를 재정의할 수 있다.

 

사용자 정의 주기로 fortune 파드 실행

  • 컨테이너 정의에 args 배열을 추가했다. 파드를 생성하고 실행하면 배열 값들이 컨테이너에 명령줄 인자로 전달된다.
  • 여러 인자를 가졌을 때는 다음 표기법을 사용할 수 있다.
args:
- foo
- bar
- "15"


7.3 컨테이너의 환경변수 설정

  • 쿠버네티스는 파드의 각 컨테이너를 위한 환경변수 리스트를 지정할 수 있다.

 

환경변수로 fortune 이미지 안에 간격을 설정할 수 있도록 만들기

  • INTERVAL 변수를 초기화하는 행을 제거한다.

7.3.1 컨테이너 정의에 환경변수 지정

  • 환경변수를 컨테이너 정의에 포함해 스크립트에 전달할 수 있다.
  • 환경변수는 파드 레벨이 아닌 컨테이너 정의 안에 설정한다.


7.3.2 변수값에서 다른 환경변수 참조

  • 환경변수 고정값 외에, $(VAR) 구문을 사용해 이미 정의된 환경변수나 기타 기존 변수를 참조할 수도 있다.

 

728x90
Comments