GNU/Linux >> Belajar Linux >  >> Ubuntu

Bagaimana melakukan Deployment Canary di Kubernetes

Pendahuluan

Menguji fitur baru atau peningkatan dalam produksi adalah proses yang menegangkan. Anda ingin sering meluncurkan perubahan tetapi tanpa memengaruhi pengalaman pengguna. Untuk meminimalkan waktu henti selama fase ini, siapkan penerapan canary untuk menyederhanakan transisi.

Anda dapat menggunakan penerapan canary pada infrastruktur apa pun. Oleh karena itu, ini adalah salah satu strategi penerapan di Kubernetes.

Pelajari apa itu penerapan canary, cara kerjanya, dan cara melakukan penerapan canary di Kubernetes.

Prasyarat

  • Akses ke baris perintah/terminal
  • Docker diinstal pada sistem
  • Kubernetes atau Minikube
  • Alat baris perintah kubectl yang terkonfigurasi penuh di mesin lokal Anda

Apa itu Penerapan Canary?

Penerapan kenari adalah versi yang ditingkatkan dari penerapan yang ada, dengan semua kode aplikasi dan dependensi yang diperlukan. Ini digunakan untuk menguji fitur baru dan peningkatan untuk melihat bagaimana mereka menangani lingkungan produksi.

Saat Anda menambahkan penerapan canary ke kluster Kubernetes, itu dikelola oleh layanan melalui pemilih dan label . Layanan mengarahkan lalu lintas ke pod yang memiliki label yang ditentukan. Ini memungkinkan Anda untuk menambah atau menghapus penerapan dengan mudah.

Jumlah lalu lintas yang didapat kenari sesuai dengan jumlah pod yang diputarnya. Dalam kebanyakan kasus, Anda memulai dengan mengarahkan persentase lalu lintas yang lebih kecil ke canary dan meningkatkan jumlahnya dari waktu ke waktu.

Dengan kedua penerapan yang disiapkan, Anda memantau perilaku canary untuk melihat apakah ada masalah yang muncul. Setelah Anda puas dengan cara menangani permintaan, Anda dapat meningkatkan semua penerapan ke versi terbaru.

Menyiapkan Deployment Canary di Kubernetes

Langkah-langkah di bawah ini menunjukkan cara menyiapkan penerapan canary. Untuk artikel ini, kami membuat cluster Kubernetes sederhana dari pod Nginx dengan halaman HTML statis dua kalimat dasar. Versi penerapan bervariasi menurut konten yang ditampilkan di halaman web.

Proses menyiapkan penyebaran canary Anda akan berbeda sesuai dengan aplikasi yang Anda jalankan.

Langkah 1:Tarik Gambar Docker

Langkah pertama adalah menarik atau membuat image untuk container di cluster Kubernetes Anda. Karena kami sedang membuat container Nginx dalam contoh ini, kami menggunakan gambar Nginx yang tersedia di Docker Hub.

1. Unduh gambar dengan:

docker pull nginx

2. Pastikan Anda memilikinya dengan mencantumkan semua gambar lokal:

docker image ls

Langkah 2:Buat Deployment Kubernetes

1. Buat definisi penerapan menggunakan file yaml. Gunakan editor teks pilihan Anda dan berikan nama untuk file tersebut. Kami akan memberi nama file nginx-deployment.yaml dan buat dengan Nano :

nano nginx-deployment.yaml

2. Tambahkan konten berikut ke file:

apiVersion: apps/v1
kind: Deployment
metadata:
 name: nginx
spec:
 selector:
  matchLabels:
   app: nginx
 replicas: 3
 template:
  metadata:
   labels:
    app: nginx
    version: "1.0"
  spec:
   containers:
    - name: nginx
      image: nginx:alpine
      resources:
      limits:
       memory: "128Mi"
       cpu: "50m"
      ports:
      - containerPort: 80
      volumeMounts:
      - mountPath: /usr/share/nginx/html
        name: index.html
      volumes:
      - name: index.html
        hostPath:
          path: /Users/sofija/Documents/nginx/v1

Kami membuat 3 replika pod Nginx untuk cluster Kubernetes. Semua pod memiliki label version: "1.0 ". Selain itu, mereka memiliki volume host yang berisi index.html dipasang ke wadah. Contoh file HTML yang terdiri dari:

<html>
<h1>Hello World!</h1>
<p>This is version 1</p>
</html>

3. Simpan dan keluar dari file.

4. Buat penerapan dengan menjalankan:

k apply -f nginx-deployment.yaml

5. Periksa apakah Anda telah berhasil men-deploy Pod dengan:

k get pods -o wide

Outputnya akan menampilkan tiga pod Nginx yang sedang berjalan .

Langkah 3:Buat Layanan

Langkah selanjutnya adalah membuat definisi layanan untuk klaster Kubernetes. Layanan akan mengarahkan permintaan ke pod yang ditentukan.

1. Buat yaml . baru file dengan:

nano nginx-deployment.service.yaml

2. Kemudian, tambahkan konten berikut:

apiVersion: v1
kind: Service
metadata:
 name: nginx-service
spec:
 type: LoadBalancer
selector:
 app: nginx
 version: "1.0"
ports:
- port: 8888
  targetPort: 80

File yaml menentukan jenis layanan – LoadBalancer . Ini menginstruksikan layanan untuk menyeimbangkan beban kerja antara pod dengan label app: nginx dan version: "1.0" . Pod harus memiliki kedua label untuk menjadi bagian dari layanan.

3. Simpan dan keluar dari file layanan.

4. Sekarang, buat layanan:

kubectl apply -f nginx-deployment.service.yaml

Langkah 4:Periksa Cluster Versi Pertama

Untuk memverifikasi layanan berjalan, buka browser web, dan navigasikan ke IP dan nomor port yang ditentukan dalam file layanan.

Untuk melihat alamat IP eksternal layanan, gunakan perintah:

kubectl get service

Jika Anda menjalankan Kubernetes secara lokal , gunakan localhost sebagai IP.

Karena cluster sampel yang kami buat berjalan secara lokal pada port 8888, URL-nya adalah:

http://localhost:8888

Browser akan menampilkan Hello World pesan dari versi 1 .

Langkah 5:Buat Penerapan Canary

Dengan versi 1 dari aplikasi yang ada, Anda menerapkan versi 2 , penyebaran kenari.

1. Mulailah dengan membuat yaml file untuk penyebaran kenari. Jalankan perintah:

nano nginx-canary-deployment.yaml

2. Tambahkan konten berikut ke file:

apiVersion: apps/v1
kind: Deployment
metadata:
 name: nginx-canary-deployment
spec:
 selector:
  matchLabels:
   app: nginx
 replicas: 3
 template:
  metadata:
   labels:
    app: nginx
    version: "2.0"
  spec:
   containers:
    - name: nginx
      image: nginx:alpine
      resources:
      limits:
       memory: "128Mi"
       cpu: "50m"
      ports:
      - containerPort: 80
      volumeMounts:
      - mountPath: /usr/share/nginx/html
        name: index.html
      volumes:
      - name: index.html
        hostPath:
          path: /Users/sofija/Documents/nginx/v2

Isi file penyebaran canary berbeda dengan tiga parameter penting:

  • Nama dalam metadata adalah nginx-canary-deployment .
  • Ini memiliki label version: “2.0” .
  • Ini ditautkan ke file html index.html yang terdiri dari:
<html>
<h1>Hello World!</h1>
<p>This is version 2</p>
</html>

3. Simpan dan keluar dari file.

4. Buat penyebaran canary dengan perintah:

k apply -f nginx-canary-deployment.yaml

5. Pastikan Anda telah berhasil men-deploy tiga pod tambahan:

k get pods -o wide

Outputnya akan menampilkan Pod penyebaran canary Nginx , bersama dengan pod Nginx asli .

Langkah 6:Jalankan Canary Deployment

Buka browser web dan navigasikan ke alamat IP yang sama seperti pada Langkah 4. Anda akan melihat tidak ada perubahan pada halaman web. Ini karena file layanan dikonfigurasi untuk memuat pod hanya keseimbangan dengan label version: "1.0" .

Untuk menguji pod yang diperbarui, Anda perlu memodifikasi file layanan dan mengarahkan sebagian lalu lintas ke version: "2.0" .

1. Untuk melakukannya, buka yaml file dengan:

nano nginx-deployment.service.yaml

2. Temukan dan hapus baris version: “1.0” . File harus menyertakan yang berikut:

apiVersion: v1
kind: Service
metadata:
 name: nginx-service
spec:
 type: LoadBalancer
selector:
 app: nginx
ports:
- port: 8888
  targetPort: 80

3. Simpan perubahan dan keluar dari file.

4. Buat layanan yang diperbarui dengan perintah:

k apply -f nginx-deployment.service.yml

5. Lalu lintas sekarang dibagi antara versi 1 dan versi 2. Jika Anda me-refresh halaman web beberapa kali, Anda akan melihat hasil yang berbeda tergantung di mana layanan mengalihkan permintaan Anda.

Langkah 7:Pantau Perilaku Canary

Dengan kedua penerapan dan berjalan, pantau perilaku penerapan baru. Bergantung pada hasilnya, Anda dapat mengembalikan penerapan atau meningkatkan ke versi yang lebih baru.

Mengembalikan Penerapan Canary

Jika Anda melihat canary tidak berkinerja seperti yang diharapkan, Anda dapat mengembalikan penerapan dan menghapus pod yang ditingkatkan dengan:

kubectl delete deployment.apps/nginx-canary-deployment

Layanan terus menyeimbangkan beban lalu lintas ke pod awal (versi 1).

Meluncurkan Penerapan yang Ditingkatkan

Jika Anda menyimpulkan penerapan canary berjalan seperti yang diharapkan, Anda dapat merutekan semua lalu lintas masuk ke versi yang ditingkatkan. Ada tiga cara untuk melakukannya:

1. Tingkatkan versi pertama dengan memodifikasi image Docker dan membangun penerapan baru. Kemudian, keluarkan burung kenari dengan:

kubectl delete deployment.apps/nginx-canary-deployment

2. Anda dapat menyimpan pod yang ditingkatkan dan menghapus pod dengan versi 1 label:

kubectl delete deployment.apps/nginx

3. Atau, Anda bahkan dapat memodifikasi service.yaml file dan tambahkan versi penentu ke selector label. Ini menginstruksikan penyeimbang beban untuk hanya mengarahkan lalu lintas ke versi 2 pod.


Ubuntu
  1. Cara Mengatur Cluster Kubernetes dengan Rancher

  2. Cara Menghapus Deployment Kubernetes [Tips Cepat K8s]

  3. Cara Menghapus Layanan di Kubernetes

  1. Cara Menyebarkan Elasticsearch di Kubernetes

  2. Cara Menyebarkan Instance WordPress di Kubernetes

  3. Cara Menyebarkan Cluster Redis di Kubernetes

  1. Cara Menginstal Kubernetes di Ubuntu 18.04

  2. Cara Menginstal Jenkins di Kubernetes

  3. Cara Memulai Ulang Pod Kubernetes