이미지를 업데이트하기 위해 배포하는 방법을 Kubernetese
저는 단일 포드를 사용하여 구축을 수행하고 있으며, 맞춤형 도커 이미지는 다음과 같습니다.
containers:
- name: mycontainer
image: myimage:latest
개발 중에 새로운 최신 버전을 푸시하고 Deployment를 업데이트하고 싶습니다.태그/버전을 명시적으로 정의하지 않고 빌드마다 이를 증가시키는 방법을 찾을 수 없으며,
kubectl set image deployment/my-deployment mycontainer=myimage:1.9.1
(예: 및 크기에 기간을 ( : 에 할 하고 를 할 하고 를 )"imagePullPolicy: "Always"
. 그리고 사용.kubectl delete pod pod_name
으로 다운로드된 종료됩니다. 새 컨테이너가 생성되고 최신 이미지가 자동으로 다운로드된 후 이전 컨테이너가 종료됩니다.
예:
spec:
terminationGracePeriodSeconds: 30
containers:
- name: my_container
image: my_image:latest
imagePullPolicy: "Always"
저는 현재 Jenkins를 자동 빌드 및 이미지 태깅에 사용하고 있으며 다음과 같습니다.
kubectl --user="kube-user" --server="https://kubemaster.example.com" --token=$ACCESS_TOKEN set image deployment/my-deployment mycontainer=myimage:"$BUILD_NUMBER-$SHORT_GIT_COMMIT"
또 다른 방법은 처음 실행하는 것입니다.
kubectl set image deployment/my-deployment mycontainer=myimage:latest
그 다음:
kubectl set image deployment/my-deployment mycontainer=myimage
업데이트를 는 를 이지만 이 는 이 이지만 imagePullPolicy: "Always"
세트.
업데이트:
이미지 이름을 변경할 필요가 없는 또 다른 방법은 롤링 업데이트를 트리거할 필드의 값을 변경하는 것입니다.terminationGracePeriodSeconds
. 이 작업은 다음을 사용하여 수행할 수 있습니다.kubectl edit deployment your_deployment
아니면kubectl apply -f your_deployment.yaml
패치를 사용하는 것도 가능합니다.
kubectl patch deployment your_deployment -p \
'{"spec":{"template":{"spec":{"terminationGracePeriodSeconds":31}}}}'
항상 숫자 값을 변경해야 합니다.
업데이트 2019-06-24
으로 @Jodiug comment가 .1.15
할 수 있습니다: version수다할을다수edn:을e
kubectl rollout restart deployment/demo
이 문제에 대한 자세한 내용:
https://github.com/kubernetes/kubernetes/issues/13488
이 주제에 대해 kubernetes GitHub 프로젝트에 대한 흥미로운 토론이 있습니다.문제 참조: https://github.com/kubernetes/kubernetes/issues/33664
거기에 설명된 해결책을 통해 두 가지 중 하나를 제안하고자 합니다.
첫번째
1. 배치 준비
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: demo
spec:
replicas: 1
template:
metadata:
labels:
app: demo
spec:
containers:
- name: demo
image: registry.example.com/apps/demo:master
imagePullPolicy: Always
env:
- name: FOR_GODS_SAKE_PLEASE_REDEPLOY
value: 'THIS_STRING_IS_REPLACED_DURING_BUILD'
2. 전개
sed -ie "s/THIS_STRING_IS_REPLACED_DURING_BUILD/$(date)/g" deployment.yml
kubectl apply -f deployment.yml
두 번째(라이너 1개):
kubectl patch deployment web -p \
"{\"spec\":{\"template\":{\"metadata\":{\"labels\":{\"date\":\"`date +'%s'`\"}}}}}"
입니다입니다.imagePullPolicy: Always
두 경우 모두 필요합니다.
kubectl rollout restart deployment myapp
하고 이전 를 다른 입니다.kubectl rollout
롤백 같은.
Gitlab-CI를 사용하여 이미지를 구축한 후 GCK에 직접 배포합니다.용기의 실제 설정을 변경하지 않고 롤링 업데이트를 달성하기 위해 깔끔한 작은 트릭을 사용하는 경우, 이는 라벨을 현재 커밋-숏-샤로 변경하는 것입니다.
내 명령은 다음과 같습니다.
kubectl patch deployment my-deployment -p "{\"spec\":{\"template\":{\"metadata\":{\"labels\":{\"build\":\"$CI_COMMIT_SHORT_SHA\"}}}}}}"
각 빌드에 따라 변경되는 레이블의 이름과 값을 사용할 수 있습니다.
재미있게 보내!
다음 명령을 사용하여 업데이트할 수 있습니다.
kubectl set image deployment/<<deployment-name>> -n=<<namespace>> <<container_name>>=<<your_dockerhub_username>>/<<image_name you want to set now>>:<<tag_of_the_image_you_want>>
예를들면,
kubectl set image deployment/my-deployment -n=sample-namespace my-container=alex/my-sample-image-from-dockerhub:1.1
여기서:
kubectl set image deployment/my-deployment
- 이름이 지정된 배포 이미지를 설정하고자 합니다.my-deployment
-n=sample-namespace
- 이 배포는 다음 이름의 네임스페이스에 속합니다.sample-namespace
. 배포 환경이 기본 네임스페이스에 속해 있으면 명령에서 이 부분을 언급할 필요가 없습니다.my-container
는 이전에 배포 구성의 YAML 파일에 언급된 컨테이너 이름입니다.alex/my-sample-image-from-dockerhub:1.1
는 배포에 대해 설정하고 컨테이너를 실행할 새 이미지입니다.여기서,alex
도커허브 이미지의 사용자 이름입니다(해당되는 경우).my-sample-image-from-dockerhub:1.1
사용할 이미지와 태그.
k8s는 우리가 배포할 때마다 다른 이미지 태그를 제공하기를 기대하는 것 같습니다.제 기본 전략은 CI 시스템이 도커 이미지를 생성하고 밀어 넣도록 하는 것이며, 이 이미지들에 빌드 번호를 태그하는 것입니다.xpmatteo/foobar:456
.
로컬 개발을 위해서는 다음과 같은 스크립트나 makefile을 사용하는 것이 편리할 수 있습니다.
# create a unique tag
VERSION:=$(shell date +%Y%m%d%H%M%S)
TAG=xpmatteo/foobar:$(VERSION)
deploy:
npm run-script build
docker build -t $(TAG) .
docker push $(TAG)
sed s%IMAGE_TAG_PLACEHOLDER%$(TAG)% foobar-deployment.yaml | kubectl apply -f - --record
그sed
명령어는 배포 문서의 자리 표시자를 실제 생성된 이미지 태그로 바꿉니다.
디버깅에 더 적합하지만 언급할 가치가 있는 또 다른 옵션은 롤아웃의 개정 기록을 확인하는 것입니다.
$ kubectl rollout history deployment my-dep
deployment.apps/my-dep
REVISION CHANGE-CAUSE
1 <none>
2 <none>
3 <none>
각 리비전의 세부 정보를 보려면 다음을 실행합니다.
kubectl rollout history deployment my-dep --revision=2
다음을 실행하여 이전 개정판으로 돌아갑니다.
$kubectl rollout undo deployment my-dep --to-revision=2
그리고 다시 새로운 것으로 돌아가는 겁니다.
달리는 것처럼ctrl+z -> ctrl+y
(:
(*) 변경 원인은<none>
당신이 업데이트를 실행해야 하기 때문입니다.--record
flag - 여기에 언급된 것처럼:
kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1 --record
(**) 이 깃발을 감가상각하는 것에 대한 논의가 있습니다.
저는 Azure DevOps를 사용하여 컨테이너화 어플리케이션을 배포하고 있으며 빌드 ID를 사용하여 이 문제를 쉽게 해결할 수 있습니다.
새로운 빌드 ID를 빌드하고 생성할 때마다 이 빌드 ID를 도커 이미지의 태그로 사용하는 예는 다음과 같습니다.
이미지 이름:buildID
이미지가 빌드(CI)에 성공하면 배포 yml 파일의 CD 파이프라인에서 이미지 이름을 다음과 같이 지정합니다.
이미지 이름:env:buildID
여기서 evn:buildid는 빌드 ID 값을 가지는 azure devops 변수입니다.
CI(Build) 및 CD(Deploy)를 변경할 때마다 새로운 변경사항이 발생합니다.
CI/CD에 대한 빌드 정의가 필요하다면 코멘트 부탁드립니다.
언급URL : https://stackoverflow.com/questions/40366192/kubernetes-how-to-make-deployment-to-update-image
'programing' 카테고리의 다른 글
데이터 폴더에 대한 ADB 액세스가 거부되었습니까? (0) | 2023.09.06 |
---|---|
maria db의 데이터 변경 시 maria db에서 sms로 대용량 데이터 전송 (0) | 2023.09.06 |
iPython 노트북에서 DataFrame을 표로 표시 (0) | 2023.09.06 |
추가 열 ASP를 사용하여 사용자 역할 기본 키를 확장합니다.NET 코어 EF (0) | 2023.09.01 |
호버에 굵게 표시된 경우 인라인 요소가 이동합니다. (0) | 2023.09.01 |