Anda dapat mengonfigurasi pod Anda dengan masa tenggang (misalnya 30 detik atau lebih, bergantung pada waktu mulai container dan ukuran gambar) dan disetel "imagePullPolicy: "Always"
. Dan gunakan kubectl delete pod pod_name
. Penampung baru akan dibuat dan gambar terbaru diunduh secara otomatis, kemudian penampung lama dihentikan.
Contoh:
spec:
terminationGracePeriodSeconds: 30
containers:
- name: my_container
image: my_image:latest
imagePullPolicy: "Always"
Saat ini saya menggunakan Jenkins untuk pembuatan otomatis dan penandaan gambar dan tampilannya seperti ini:
kubectl --user="kube-user" --server="https://kubemaster.example.com" --token=$ACCESS_TOKEN set image deployment/my-deployment mycontainer=myimage:"$BUILD_NUMBER-$SHORT_GIT_COMMIT"
Trik lain adalah menjalankan awal:
kubectl set image deployment/my-deployment mycontainer=myimage:latest
lalu:
kubectl set image deployment/my-deployment mycontainer=myimage
Ini sebenarnya akan memicu pembaruan bergulir tetapi pastikan Anda juga telah imagePullPolicy: "Always"
mengaturnya.
Memperbarui:
Trik lain yang saya temukan, di mana Anda tidak perlu mengubah nama gambar, adalah mengubah nilai bidang yang akan memicu pembaruan berkelanjutan, seperti terminationGracePeriodSeconds
. Anda dapat melakukan ini menggunakan kubectl edit deployment your_deployment
atau kubectl apply -f your_deployment.yaml
atau menggunakan tambalan seperti ini:
kubectl patch deployment your_deployment -p \
'{"spec":{"template":{"spec":{"terminationGracePeriodSeconds":31}}}}'
Pastikan Anda selalu mengubah nilai angka.
kubectl set image
perintah, kubernetes akan melakukan pembaruan berkelanjutan. Misalnya, Anda menerapkan "repo / myimage: latest". Sementara itu gambar Anda telah diubah dan didorong ke repo dengan tag "v0.2". Anda dapat melakukan update dengan menjalankankubectl set image deployment/my-deployment mycontainer=myimage:v0.2
Gambar ini juga akan memiliki tag "terbaru".UPDATE 2019-06-24
Berdasarkan komentar @Jodiug jika Anda memiliki
1.15
versi, Anda dapat menggunakan perintah:Baca lebih lanjut tentang masalah ini:
https://github.com/kubernetes/kubernetes/issues/13488
Nah ada pembahasan menarik tentang hal ini di proyek kubernetes GitHub. Lihat masalahnya: https://github.com/kubernetes/kubernetes/issues/33664
Dari solusi yang dijelaskan di sana, saya akan menyarankan satu dari dua solusi.
Pertama
1. Siapkan penerapan
2. Terapkan
Kedua (satu liner):
Tentu saja
imagePullPolicy: Always
diperlukan pada kedua kasus tersebut.sumber
Ini adalah cara terkini untuk memicu pembaruan berkelanjutan dan membiarkan set replika lama di tempat untuk operasi lain yang disediakan oleh
kubectl rollout
rollback seperti.sumber
undo
perintah atau yang setara.Saya menggunakan Gitlab-CI untuk membangun image dan kemudian menerapkannya langsung ke GCK. Jika menggunakan trik kecil yang rapi untuk mencapai pembaruan berkelanjutan tanpa mengubah pengaturan nyata apa pun dari wadah, yang mengubah label menjadi commit-short-sha saat ini.
Perintah saya terlihat seperti ini:
Di mana Anda dapat menggunakan nama dan nilai apa pun untuk label asalkan berubah dengan setiap build.
Selamat bersenang-senang!
sumber
Tampaknya k8s mengharapkan kami memberikan tag gambar yang berbeda untuk setiap penerapan. Strategi default saya akan membuat sistem CI menghasilkan dan mendorong gambar buruh pelabuhan, penandaan mereka dengan nomor membangun:
xpmatteo/foobar:456
.Untuk pengembangan lokal, akan lebih mudah menggunakan skrip atau makefile, seperti ini:
The
sed
perintah menggantikan placeholder dalam dokumen penyebaran dengan tag gambar yang dihasilkan sebenarnya.sumber
Saya menggunakan Azure DevOps untuk menyebarkan aplikasi containerize, saya dengan mudah mengelola untuk mengatasi masalah ini dengan menggunakan build ID
Setiap kali membangun dan menghasilkan ID Build baru, saya menggunakan ID build ini sebagai tag untuk gambar buruh pelabuhan di sini adalah contohnya
imagename: buildID
setelah gambar Anda berhasil dibangun (CI), di pipeline CD dalam penyebaran file yml saya telah memberi nama gambar sebagai
imagename: env: buildID
di sini evn: buildid adalah variabel azure devops yang memiliki nilai ID build.
jadi sekarang setiap kali saya memiliki perubahan baru untuk membangun (CI) dan menyebarkan (CD).
tolong beri komentar jika Anda membutuhkan definisi build untuk CI / CD.
sumber