# 젠킨스 빌드 후 버전 정보를 configmap(key-value 데이터 저장하는 오프젝트)을 통해
# 운영 중인 k8s pod 에 전달하려고 한다.
# 우선 pod 또는 deployment(pod 와 replica를 생성하고 제어하는)에
# configmap 볼륨(volumes)을 추가한다.
# 마운트(volumeMounts)를 설정하면 파일로 사용할 수 있다.
# 환경변수(env)를 설정하면 환경변수 값으로 설정돼 사용할 수 도 있다.
# ysoftman-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: ysoftman-test
name: ysoftman-test-deployment
spec:
replicas: 1
revisionHistoryLimit: 0
selector:
matchLabels:
app: ysoftman-test-deployment
template:
metadata:
labels:
app: ysoftman-test-deployment
spec:
containers:
- name: ysoftman-test
image: ysoftman.test.com/ysoftman/ysoftman-test
imagePullPolicy: Always
ports:
- containerPort: 443
- containerPort: 8080
command: ["./ysoftman-test", "-myopt1=test"]
# 파일로 configmap 을 사용할 경우
# 컨테이너에 /configmap 로 configmap 을 마운트
volumeMounts:
- name: configmap
mountPath: "/configmap"
readOnly: true
# 환경변수로 설정해 사용할 경우
env:
# configmap 로부터 가져와 다음 환경변수이름으로 저장된다.
- name: ysoftman-version-env
valueFrom:
configMapKeyRef:
# ysoftman-configmap 을 참조한다.
name: ysoftman-configmap
# ysoftman-configmap 의 ysoftman-version.json 키의 값을 가져온다.
key: ysoftman-version.json
# configmap 이 있는 볼륨
volumes:
# 컨테이너 /configmap 에 마운트될 볼륨 이름
- name: configmap
configMap:
# configmap 이름
name: ysoftman-configmap
# 적용
kubectl apply -f k8s/ysoftman-deployment.yaml
# 젠킨스 빌드 후 k8s configmap 에 버전 정보 저장
# ysoftman-configmap-template.yaml
apiVersion: v1
kind: ConfigMap
metadata:
namespace: ysoftman-test
name: ysoftman-test-configmap
data:
# key : value 로 데이터 설정
ysoftman-key1: 123
ysoftman-key2: "lemon_juice"
# value 내용이 많다면
# x.x 처럼 파일 이름처럼 키이름 설정하고
# | (literal 스타일로 멀티라인 지정) 지시자�로 value 를 명시하면
# 컨테이너에서 마운트해 파일로 접근할 수 있다.
ysoftman.version: |
aaa = "lemon"
bbb = 123
# 내용이 json 인 경우
ysoftman-version.json: |
{
"VersionName":"v1.0.0",
"VersionTime":"2020-09-01_14:30:10_KST"
}
# 버전값 부분을 sed 로 바꿀 수 있도록 유니크한 스트링으로 명시
ysoftman-version2.json: |
{
"VersionName":"__versionname__",
"VersionTime":"__versiontime__"
}
# 실제 버전값은 젠킨스의 환경변수로 가지고 있기 때문에
# sed 로 버전값 부분을 변경해서 실제로 적용할 파일을 생성한다.
vn="v1.0.1"
vt="2020-09-02"
sed -e "s/__versionname__/${vn}/g" -e "s/__versiontime__/${vt}/g" < ysoftman-template.yaml > ysoftman-configmap.yaml
# 적용
kubectl apply -f k8s/ysoftman-configmap.yaml
# configmap 업데이트되면 kubelet(k8s 노드에서 동작하는 에이전트)이
# configmap 동기화시간+캐시시간 이후에 pod 에 반영된다.
# 결과 확인
# 이제 pod shell 로 들어가면
# 다음 위치에 파일이 존재한다.
/configmap/ysoftman-version.json
# 환경 변수로도 설정돼 있다.
echo $ysoftman-version-env
# configmap 데이터를 업데이트 하면 볼륨 마운트된 파일 자동으로 갱신되지만
# 환경변수는 deployment 의 env 값 설정 부분을 다시 수행(pod restart)
# 해야 하기 때문에 파일로 접근하는것이 좋다.
# 참고
comments:
댓글 쓰기