본문 바로가기
개발/개발공부

Kubernetes EnvVar / 쿠버네티스, 패턴, pattern, 환경변수, dockerfile, env

by 치킨개발자 2023. 1. 25.
728x90

Kubernetes EnvVar


Application은 서비스 접근, 분리 등등 다양한 케이스에서 설정이 필요

Application 내부에 환경변수를 설정하는것은 옳지 않음

Container영역에서 사용할 수 있도록 해주는 것이 EnvVar

 

👎bad case, 하드코딩된 기본 설정값을 사용하는 방식

예전에 Dockerfile에 대해 공부할 때 사용했던 ENV 명령어로 직접 정의 가능

https://dev-chicken.tistory.com/22

 

Container Image / 컨테이너 이미지, Kubernetes, Docker, Dockerfile

Container Image 컨테이너 이미지는 root filesystem과 이미지 설정 정보로 저장 즉 이미지는 root filesystem에 복사되어 사용되는 것이고, Dockerfile과 같은 이미지 build관련 설정 명령어들로 이루어지는 것 -

dev-chicken.tistory.com

Dockerfile ENV 명령어

이렇게 설정한 뒤 각 언어에 맞게 환경변수에 접근하면 사용가능

package main
import "os"
import "fmt"
func main() {

	fmt.Println("NODE_ENV:", os.Getenv("NODE_ENV"))
}

$ go run main.go
NODE_ENV: production

하지만 이런 방식으로 직접 실행하면 Dockerfile에 하드 코딩된 기본 값이 사용됨

 

👍good case, docker run시 환경변수를 설정하거나 kubernetes pod 명세로 env설정

docker run -e NODE_ENV=production

이런식으로 docker run -e 옵션으로 환경변수를 설정하거나

 

apiVersion: v1
kind: Pod
metadata:
  name: ~~
spec:
  containers:
  - image: ~~
    name: ~~
    env: #환경변수 설정
    - name: NODE_ENV
      value: production
...

이런식으로 환경 변수를 명세로 관리하여 override하여 사용하는 것을 추천

 

환경변수는 안전하지 않고 많아질수록 어려운 관리 등 사소하지만 관리해야할 포인트들이 많음

보편적으로 사용해야하고 다양한 수준에서 변수를 설정할 수 있기 때문에 한곳에서 중점적으로 관리하는 것이 중요

앞선 envVar방식으로 손쉽게 사용하는 것이 좋고, 간단한 사례에만 적용하는 것이 좋음

복잡한 설정에 대해서는 제한사항이 많이 존재하고 hot reload 변경이 불가능하여 무조건 재시작해야함

 

이러한 문제점을 해결하기 위해 kubernetes에서는 configmap을 지원, 해당 부분도 공부예정

반응형

댓글