Kubernetes

Kubernetes 기초 - Pod(7)

사실 나도 모름 2023. 12. 9. 00:41
  1. Pod 개념(복습) 및 사용
  2. livenessProbe를 사용한 self-healing Pod
  3. init container
  4. infra container(pause) 이해
  5. static pod 만들기
  6. Pod에 resource 할당
  7. 환경변수를 이용해 컨테이너에 데이터 전달         ←   오늘 볼 내용
  8. Pod 구성 패턴의 종류          ←   오늘 볼 내용

7. 환경변수를 이용해 컨테이너에 데이터 전달

환경변수

  • Pod내의 컨테이너가 실행될 때 필요로 하는 변수
  • 컨테이너 제작 시 미리 정의
    • NGINX Dockerfile의 예
      1. ENV NGINX_VERSION 1.19.2
      2. ENV NJS_VERSION 0.4.3
  • Pod 실행 시 미리 정의된 컨테이너 환경변수를 변경할 수 있다.

 

 

실습

 

pod-nginx-env.yaml

# pod-nginx-env.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod-env
spec:
  containers:
  - name: nginx-container
    image: nginx:1.25
    ports:
    - containerPort: 80
      protocol: TCP
    env:
    - name: MYVAR
      value: "testvalue"
    resources:
      requests:
        memory: 500Mi
        cpu: 200m
      limits:
        memory: 500Mi
        cpu: 250m

 

yaml코드에서 spec부분에 env를 추가하였다.

env는 키-값 형태로 구성되어 있어서 env를 쓰고 아래에 name과 value를 사용하여 파드에 원하는 환경변수를 정의한다.

yaml파일을 이용하여 파드를 실행하고 다음을 입력하여 파드 내부로 진입한다.

 

 

# 파드 내부 진입
kubectl exec -it -- /bin/bash

# 환경변수 확인
env

파드의 환경변수

 

yaml코드로 정의한 환경변수가 잘 적용된 것을 볼 수 있다.

 

 

환경변수 사용 용도
  • 설정 및 구성 정보 전달 : 컨테이너화된 애플리케이션에서 환경 변수는 설정 및 구성 정보를 전달하는 데 사용됩니다. 예를 들어, 데이터베이스 연결 정보, API 키, 서비스 엔드포인트 등을 전달할 수 있습니다.
  • 동적 설정 변경 : 환경 변수는 애플리케이션이 실행 중에 동적으로 동작을 변경하는 데 사용될 수 있습니다. 예를 들어, 로깅 레벨이나 디버그 모드를 활성화하거나 비활성화하는 데 사용될 수 있습니다.
  • 버전 관리 : 애플리케이션의 다양한 환경(개발, 테스트, 운영 등)에 대한 설정을 관리하기 위해 사용될 수 있습니다. 각 환경에서는 다른 환경 변수를 사용하여 설정을 구성할 수 있습니다.
  • 보안 정보 전달 : 민감한 정보(예: 비밀번호, 암호화 키)를 환경 변수로 설정하여, 코드나 설정 파일에 직접 하드코딩하지 않고 안전하게 전달할 수 있습니다.
  • 컨테이너 간 통신 및 조절 : 여러 컨테이너 간의 통신을 위해 사용될 수 있습니다. 예를 들어, 마이크로서비스 아키텍처에서 서비스 엔드포인트를 환경 변수로 정의하고 전달하여 서비스 간의 연결을 용이하게 만들 수 있습니다.
  • 빌드 및 배포 자동화 : 환경 변수는 빌드 파이프라인이나 배포 프로세스에서 사용될 수 있습니다. CI/CD 도구에서 환경별로 다른 변수를 설정하여 자동화된 프로세스를 관리할 수 있습니다.

 

 

 


8. Pod 구성 패턴의 종류

https://matthewpalmer.net/kubernetes-app-developer/articles/multi-container-pod-design-patterns.html

 

Multi-Container Pod Design Patterns - CKAD Course

Multi-Container Pod Design Patterns in Kubernetes Multi-container pods are extremely useful for specific purposes in Kubernetes. While it’s not always necessary to combine multiple containers into a single pod, knowing the right patterns to adopt creates

matthewpalmer.net

 

위 내용에서 더욱 자세하게 설명되어 있다.

 

 

 Pod 실행 패턴

 

파드를 구성하고 실행하는 패턴으로 Multi-container Pod에서 몇가지의 형태로 분류된다.

 

Sidecar 컨테이너 파드 : 

메인 애플리케이션 컨테이너가 동작을 하여 로그나 데이터가 발생하면 로깅, 모니터링, 사전 처리, 데이터 변환 등의 작업을 수행하는 컨테이너다.

메인 컨테이너와 함께 동작하며 단독으로는 동작하지 않는 컨테이너 패턴이다.

 

Adapter 컨테이너 파드 :

어댑터 컨테이너는 주로 쿠버네티스의 Custom Metrics API와 같은 사용자 정의 지표를 제공하는 역할을 한다.

즉, 어댑터 컨테이너는 외부 시스템에서 수집한 메트릭을 포맷이나 단위 등을 적절히 변환하여 쿠버네티스 메트릭 API에 노출한다.

 

Ambassador 컨테이너 파드 : 

앰배서더 컨테이너는 다양한 서비스 간 통신을 관리하고, 프로토콜 변환, 로깅, 모니터링과 같은 역할을 하는 중개자(로드밸런서) 역할을 한다.

주로 마이크로서비스 아키텍처에서 사용되어 다양한 서비스 간의 통신을 투명하게 만든다.

쿠버네티스 디자인 패턴

 

 

실무에서는 단일 컨테이너 파드를 운영하는 경우는 거의 없고 대부분이 멀티 컨테이너 파드로 서버를 배포한다.

다양한 패턴의 서비스 운영 방법을 학습하면 실무에서 접하는 시스템을 이해하는데 도움이 되리라 생각한다.

 

 

 


 

 

종합 실습 - 1

 

Create a static pod on node01  called mydb with image redis

Create this pod on node01 and make sure that it is recreated/restarted automatically in case of a failure.

  • use /etc/kubenetes/manifests as the Static Pod path for example.
  • Kubernetes Configured for Static Pods
  • Pod mydb-node01 is Up and running
### node1에서 작업
# /etc/kubernetes/manifesets/ 로 이동
cd /etc/kubernetes/manifests/

# yaml 파일 작성
vi redis-pod.yaml

# 코드 입력 후 :wq
apiVersion: v1
kind: Pod
metadata:
  name: redis-pod
spec:
  containers:
  - name: redis
    image: redis

 

static 파드는 yaml파일을 생성한 순간부터 바로 생성하기 때문에 여기까지

 

 

 

종합 실습 - 2

 

다음과 같은 조건에 맞는 Pod를 생성하시오.

  • Pod name: myweb, image: nginx:1.14
  • CPU 200m, Memory 500Mi 를 요구하고, CPU 1core, Memory 1Gi 제한 받는다.
  • Application 동작에 필요한 환경변수 DB=mydb 를 포함한다.
  • namespace product 에서 동작되어야 한다.
# pod-test.yaml
---
apiVersion: v1
kind: namespace
metadata:
  name: product
---
apiVersion: v1
kind: Pod
metadata:
  name: myweb
  namespace: product
spec: 
  containers: 
  - name: nginx
    image: nginx:1.14
    resources: 
      requests:
        cpu: 200m
        memory: 500Mi
      limits:
        cpu: 1
        memory: 1Gi
    env: 
    - name: DB
      value: mydb

 

product 네임스페이스도 함께 생성하고 파드를 배포해야 하므로 위와 같이 작성한다.

 

 


 

 

아래 영상을 참고했습니다.

https://youtube.com/playlist?list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c&si=hbPclcPuc-6lTNdE

 

[따배쿠] 쿠버네티스 시리즈

 

www.youtube.com

 

'Kubernetes' 카테고리의 다른 글

Kubernetes 기초 - Controller(1)  (0) 2023.12.11
Kubernetes 기초 - Namespace  (0) 2023.12.11
Kubernetes 기초 - Pod(6)  (0) 2023.12.08
Kubernetes 기초 - Pod(5)  (0) 2023.12.07
Kubernetes 기초 - Pod(4)  (0) 2023.12.07