쿠버네티스 배포에서 동적/가변 이미지 태그를 사용하는 방법?
Kustomize를 사용하는 프로젝트에서 기본 파일은 다음과 같습니다:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:IMAGE_TAG # <------------------------------
ports:
- containerPort: 80
그런 다음 배포할 이미지의 버전으로 교체합니다.
텍스트 yaml 파일을 사용하여 편집하는 것보다 더 정교한 방법이 있습니까?
태그를 사용하거나 사용하지 않고 배포를 그대로 유지할 수 있습니다:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
사용자 지정 파일에서 다음을 수행합니다:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
images:
- name: nginx
newTag: MYNEWTAG
이렇게 하면 사용자 지정 파일에 포함된 모든 리소스의 모든 nginx 이미지의 태그가 교체됩니다. 여러 버전의 nginx를 실행해야 하는 경우 배포의 이미지 이름을 자리 표시자로 바꿀 수 있으며 변환기에 다른 항목이 있습니다.
를 사용할 수 있으며, 각 태그의 파일을 편집할 필요가 가능합니다. 이 기능은 버전 제어 파일을 변경하지 않고 이미지 태그를 변경해야 할 경우 유용합니다.
이 목적을 위해서는 표준이 충분하다. 요약하면 환경 변수에서 데이터를 채운 a를 사용합니다. 그런 다음 이 ConfigMap 데이터를 참조하여 관련 이미지 태그를 추가합니다.
예
예제를 계속 사용하면 다음과 같은 파일을 같은 폴더에 저장할 수 있습니다:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
# Generate a ConfigMap based on the environment variables in the file `.env`.
configMapGenerator:
- name: my-config-map
envs:
- .env
replacements:
- source:
# Replace any matches by the value of environment variable `MY_IMAGE_TAG`.
kind: ConfigMap
name: my-config-map
fieldPath: data.MY_IMAGE_TAG
targets:
- select:
# In each Deployment resource …
kind: Deployment
fieldPaths:
# … match the image of container `nginx` …
- spec.template.spec.containers.[name=nginx].image
options:
# … but replace only the second part (image tag) when split by ":".
delimiter: ":"
index: 1
resources:
- deployment.yaml
동일한 폴더에 환경 변수 이름만 있는 파일이 필요합니다(참고: 이름만 있고 값이 할당되지 않음):
MY_IMAGE_TAG
이제 로컬 환경에서 등을 실행할 때 이미지 태그로 통합됩니다.
데모:
MY_IMAGE_TAG=foobar kubectl kustomize .
이렇게 하면 생성된 이미지 태그가 인쇄되고 원하는 대로 인쇄됩니다:
# …
spec:
# …
template:
# …
spec:
containers:
- image: nginx:foobar
name: nginx
ports:
- containerPort: 80
대안
에서 다음 사항을 유의하십시오:
로컬 환경 변수 모집단 기능은 일부만 사용하는 것이 좋습니다. 패치가 있는 오버레이가 유지보수성이 더 높은 경우가 많습니다. 환경에서 값을 설정하는 것은 git SHA와 같이 쉽게 예측할 수 없을 때 유용할 수 있다.
단순히 여러 파일 간에 이미지 태그를 공유하려는 경우에는 이미를 참조하십시오.
@evolutics의 답변은 아마도 그것을 하는 "적절한" 방법일 것이지만 모든 배포에 이미지 태그만 사용자 정의하는 경우 $IMAGE_TAG 변수를 넣고 명령을 사용하는 것을 고려해 볼 수 있다.
예:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:$IMAGE_TAG
ports:
- containerPort: 80
IMAGE_TAG=my_image_tag envsubst '${IMAGE_TAG}' < deployment.yaml > final_deployment.yaml
CLI를 선호하는 사람들을 위한 편리한 해결책이 있다.
이미지 변환을 파일에 동적으로 추가할 수 있습니다. 전화번호부를 확인하고 전화하세요
kustomize edit set image nginx:your_new_tag
그러면 에 다음과 같은 변화가 발생합니다:
images:
- name: nginx
newTag: your_new_tag
내가 이 솔루션을 시도했을 때 직면했던 유일한 문제는 독립 실행형으로만 작동할 수 있었지만 사용할 수 없었다는 것이다. 나에게 적합한 현재 버전은 다음과 같다
'개발하자' 카테고리의 다른 글
플러터에서 스마트폰이나 태블릿으로 기기를 확인할 수 있나요? (0) | 2023.08.13 |
---|---|
둥근 탭 바 인 플러터를 만드는 방법은 무엇인가요? (0) | 2023.08.12 |
Terraform - 하나를 제외한 모든 리소스 (0) | 2023.08.11 |
실행 중인 kubernetes 포드의 로그를 표시하는 단일 명령 (0) | 2023.08.10 |
민큐브를 사용할 때 쿠버네티스 API에 액세스하는 방법은 무엇인가요? (0) | 2023.08.10 |