Certified Kubernetes Administrator (CKA) with Practice Tests - Config Application

Albert·2025년 2월 8일

실행명령어

🐳 docker 컨테이너 실행 명령

Docker 컨테이너 실행 시 명령을 설정하는 방법은 ENTRYPOINTCMD 두 가지가 있습니다.
• CMD는 기본 실행 명령이지만, docker run에서 인자를 전달하면 완전히 덮어씌워집니다.
• ENTRYPOINT는 고정 실행 명령으로 사용되며, docker run에서 전달한 인자가 ENTRYPOINT에 추가됩니다.

1. ENTRYPOINT: 고정 실행 명령

FROM alpine
ENTRYPOINT ["echo"]

docker run my-image Hello  # echo Hello
docker run my-image Hi!    # echo Hi!

ENTRYPOINT는 명령어가 고정되며, docker run에서 전달된 인자가 ENTRYPOINT에 추가됩니다.

2. CMD: 기본 실행 명령 (Override 가능)

FROM alpine
CMD ["echo", "Hello, World!"]

docker run my-image        # echo Hello, World!
docker run my-image Hi!    # Hi! (CMD 전체가 덮어씌워짐)

CMD는 실행할 명령을 설정하지만, 새로운 인자를 전달하면 기존 CMD가 무시됩니다.

3. ENTRYPOINT + CMD

FROM alpine
ENTRYPOINT ["echo"]
CMD ["Hello, World!"]

docker run my-image        # echo Hello, World!
docker run my-image Hi!    # echo Hi!

ENTRYPOINT가 실행 명령으로 고정되며,CMD는 기본 인자로 동작하지만, docker run에서 새로운 인자를 입력하면 CMD는 덮어씌워집니다.

ENTRYPOINT와 CMD를 함께 사용하면 기본값을 유지하면서도 유연하게 인자를 변경할 수 있습니다.

☸️ 쿠버네티스 컨테이너 실행 명령

Kubernetes에서 컨테이너가 실행될 때 어떤 명령을 실행할지 설정하는 방법은 Docker의 ENTRYPOINT와 CMD 개념과 유사합니다.
Kubernetes에서는 commandargs 필드를 사용하여 실행 명령어를 정의합니다.
Kubernetes에서는 command가 Docker의 ENTRYPOINT를, args가 Docker의 CMD를 대체합니다.

1. command만 설정한 경우
• command를 설정하면 Docker 이미지의 ENTRYPOINT를 덮어씁니다.
• args가 없으면 command만 실행됩니다.

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: alpine
    command: ["/bin/sh", "-c", "echo 'Hello from Kubernetes'"]
    # /bin/sh -c echo 'Hello from Kubernetes'

2.args만 설정한 경우
• args는 Docker 이미지의 CMD를 덮어씌웁니다.
• command가 없으면 원래 ENTRYPOINT 값이 유지됩니다.

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: alpine
    args: ["echo", "Hello from Kubernetes"]
    # echo "Hello from Kubernetes"

3.command와 args를 함께 사용하는 경우
• command가 ENTRYPOINT를 덮어씌우고,
• args가 인자로 전달됩니다.

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: alpine
    command: ["/bin/sh", "-c"]
    args: ["echo 'Hello from Kubernetes'"]
    # /bin/sh -c echo 'Hello from Kubernetes'

환경변수

ConfigMap

ConfigMap은 애플리케이션에서 사용할 환경 설정 값을 저장하는 객체입니다. 일반적으로 환경 변수, 설정 파일, 커맨드라인 인수 등을 관리할 때 사용됩니다.

주요 특징
• 비밀 정보가 아닌 일반 환경 변수, 설정 값을 저장 (예: API URL, 서비스 포트 등)
• Key-Value 형태로 데이터 저장
• Pod에서 환경 변수, 볼륨 마운트, 커맨드라인 인수로 참조 가능
• YAML 파일 또는 CLI를 통해 생성 가능

ConfigMap (YAML)

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  DB_HOST: "mysql-service"
  DB_PORT: "3306"
  LOG_LEVEL: "debug"

1. 환경 변수로 주입

envFrom:
  - configMapRef:
	  name: app-config

2. 볼륨 마운트 방식

volumeMounts:
  - name: config-volume
    mountPath: /etc/config
volumes:
  - name: config-volume
    configMap:
      name: app-config

Secret

Secret은 비밀번호, API 키, TLS 인증서 등의 민감한 데이터를 저장하기 위한 Kubernetes 객체입니다.

주요 특징
• Base64 인코딩된 데이터를 저장
• ConfigMap과 동일한 방법으로 Pod에서 참조 가능
• 환경 변수 또는 볼륨 마운트 방식으로 사용 가능
• RBAC(Role-Based Access Control)과 결합하여 보안 강화 가능

Secret 예제 (YAML)

apiVersion: v1
kind: Secret
metadata:
  name: app-secret
type: Opaque
data:
  DB_PASSWORD: c2VjcmV0MTIz  # "secret123"를 Base64 인코딩한 값
  API_KEY: YXBpa2V5MTIzNDU=  # "apikey12345"를 Base64 인코딩한 값

1. 환경 변수로 주입

env:
  - name: DB_PASSWORD
    valueFrom:
      secretKeyRef:
        name: app-secret
        key: DB_PASSWORD

2. 볼륨 마운트 방식

volumeMounts:
  - name: secret-volume
    mountPath: "/etc/secret"
    readOnly: true
volumes:
  - name: secret-volume
    secret:
      secretName: app-secret
profile
개발 블로그

0개의 댓글