Pemeriksaan kesehatan EAS menggunakan mekanisme probe Kubernetes untuk secara otomatis mendeteksi dan memulihkan kontainer yang tidak sehat, sehingga hanya instans yang sehat yang menerima traffic.
Batasan
Pemeriksaan kesehatan hanya tersedia saat Anda menyebarlayankan layanan menggunakan custom image yang menyertakan logika pemeriksaan kesehatan.
Cara kerja
Pemeriksaan kesehatan EAS menggunakan mekanisme probe Kubernetes untuk mendeteksi dan mengelola kesehatan layanan. EAS mendukung jenis probe dan metode pemeriksaan kesehatan berikut.
-
Jenis probe yang didukung:
Probe type
Description
Liveness probe
Menentukan apakah sebuah kontainer sedang berjalan. Jika probe mendeteksi kontainer yang tidak sehat, kubelet akan menghentikan kontainer tersebut dan menerapkan restart policy. Jika kontainer tidak memiliki liveness probe yang dikonfigurasi, kubelet menganggap hasil liveness probe-nya selalu Success.
Readiness probe
Menentukan apakah sebuah kontainer siap melayani permintaan. Hanya Pod dalam status Ready yang menerima traffic. Asosiasi antara Service dan Endpoints-nya dikelola berdasarkan kesiapan Pod:
-
Ketika status Ready Pod bernilai False, Kubernetes menghapus alamat IP Pod dari daftar Endpoint yang terkait dengan Service tersebut.
-
Ketika status Ready Pod berubah menjadi True, Kubernetes menambahkan kembali alamat IP Pod ke dalam daftar Endpoint.
Startup probe
Menentukan kapan sebuah kontainer telah selesai melakukan startup. Gunakan probe ini untuk kontainer yang memerlukan waktu lama saat startup agar pemeriksaan liveness dan readiness tidak dijalankan sebelum inisialisasi selesai, yang dapat menyebabkan kontainer dihentikan secara prematur.
-
-
Metode pemeriksaan kesehatan yang didukung:
Health check method
Description
http_getMengirim permintaan HTTP GET untuk memeriksa kesehatan dan ketersediaan layanan. Pemeriksaan berhasil jika kode status respons berada dalam rentang 2xx atau 3xx.
tcp_socketMencoba membuka koneksi TCP untuk memeriksa kesehatan dan ketersediaan layanan.
execMenjalankan perintah tertentu di dalam kontainer. Hasil pemeriksaan ditentukan oleh kode keluar (exit code) perintah tersebut.
Siapkan custom image
Bungkus logika prediksi Anda dengan framework web. Contoh berikut menggunakan Flask:
import json
from flask import Flask, request, make_response
app = Flask(__name__)
@app.route('/', methods = ['GET','POST'])
def process_handle_func():
"""
Parse the request body based on actual requirements
"""
data = request.get_data().decode('utf-8')
body = json.loads(data)
res = process(body)
"""
Set the response based on actual requirements
"""
response = make_response(res)
response.status_code = 200
return response
def process(data):
"""
Your prediction logic
"""
return 'result'
if __name__ == '__main__':
"""
Catatan: host harus diatur ke 0.0.0.0, jika tidak pemeriksaan kesehatan akan gagal saat penyebaran layanan.
port harus sesuai dengan port yang ditentukan dalam file konfigurasi JSON untuk layanan yang diterapkan.
"""
app.run(host='0.0.0.0', port=8000)
Buat Dockerfile untuk menyalin kode prediksi Anda dan menginstal paket yang diperlukan:
# Python example
FROM registry.cn-shanghai.aliyuncs.com/eas/bashbase-amd64:0.0.1
COPY ./process_code /eas
RUN /xxx/pip install 需要的包
CMD ["/xxx/python", "/eas/xxx/app.py"]
Untuk langkah-langkah membuat custom image, lihat Build Images on a Container Registry Enterprise Edition Instance. Tinjau Deploy model services with custom images untuk panduan pembuatan image. Sebagai alternatif, simpan kode Anda di sistem file NAS atau repositori Git dan pasang penyimpanan tersebut saat menyebar (lihat Storage mounts). Topik ini menggunakan pendekatan pertama untuk menunjukkan konfigurasi pemeriksaan kesehatan dalam Configure health checks when deploying a service.
Konfigurasikan pemeriksaan kesehatan saat menyebar layanan
Konfigurasikan pemeriksaan kesehatan dalam penyebaran kustom
Login ke PAI console, pilih wilayah target di bagian atas halaman, pilih ruang kerja target di sebelah kanan, lalu klik Go to EAS.
Pada tab Inference Service, klik Deploy Service. Di bagian Custom Model Deployment, klik Custom Deployment.
-
Pada bagian Environment Information, konfigurasikan parameter kunci berikut. Untuk parameter lainnya, lihat Custom deployment.
Parameter
Description
Image Configuration
Pilih Image Address, lalu masukkan alamat custom image Anda di kolom teks, misalnya,
registry-vpc.cn-shanghai.aliyuncs.com/xxx/yyy:zzz.Command
Perintah entrypoint kontainer. Hanya satu perintah yang didukung — skrip kompleks tidak diizinkan. Perintah harus sesuai dengan yang didefinisikan dalam Dockerfile Anda. Contoh:
/data/eas/ENV/bin/python /data/eas/app.py.Masukkan nomor port tempat kontainer mendengarkan setelah startup, misalnya, 8000.
Penting-
Engine EAS mendengarkan pada port tetap 8080 dan 9090. Hindari menggunakan port-port ini untuk kontainer Anda.
-
Port harus sesuai dengan yang dikonfigurasi dalam file xxx.py yang dirujuk dalam perintah run.
-
-
Pada bagian Features, buka panel Stability guarantee, aktifkan toggle Health Check, konfigurasikan parameter yang dijelaskan di bawah ini, lalu klik OK.
Klik Deploy.
Konfigurasikan pemeriksaan kesehatan dalam penyebaran JSON
Buat file JSON bernama service.json. Contoh file ditunjukkan di bawah ini.
{
"metadata": {
"name": "test",
"instance": 1,
"enable_webservice": true
},
"cloud": {
"computing": {
"instance_type": "ml.gu7i.c16m60.1-gu30"
}
},
"containers": [
{
"image":"registry-vpc.cn-shanghai.aliyuncs.com/xxx/yyy:zzz",
"env":[
{
"name":"VAR_NAME",
"value":"var_value"
}
],
"liveness_check":{
"http_get":{
"path":"/",
"port":8000
},
"initial_delay_seconds":3,
"period_seconds":3,
"timeout_seconds":1,
"success_threshold":2,
"failure_threshold":4
},
"command":"/data/eas/ENV/bin/python /data/eas/app1.py",
"port":8000
}
]
}
Parameter kunci dijelaskan dalam tabel berikut. Untuk parameter lainnya, lihat JSON deployment.
|
Parameter |
Description |
|
|
image |
Alamat custom image yang digunakan untuk menyebar layanan model. EAS tidak mengizinkan akses jaringan publik. Gunakan alamat registri internal VPC, misalnya: |
|
|
env |
name |
Nama variabel lingkungan yang diteruskan ke kontainer saat runtime. |
|
value |
Nilai variabel lingkungan tersebut. |
|
|
command |
Perintah entrypoint kontainer. Hanya satu perintah yang didukung — skrip kompleks tidak diizinkan. Contoh: |
|
|
port |
Port jaringan tempat proses di dalam kontainer mendengarkan, misalnya, 8000. Penting
Port harus sesuai dengan port yang dikonfigurasi dalam file command field xxx.py. |
|
|
liveness_check Catatan
Menentukan liveness probe sebagai jenis probe pemeriksaan kesehatan. Anda juga dapat mengonfigurasi ini sebagai health_check (readiness probe) atau startup_check (startup probe). |
http_get |
Mengirim permintaan HTTP GET ke port 8000. Sub-parameter:
Dua metode pemeriksaan kesehatan tambahan didukung:
|
|
initial_delay_seconds |
Waktu tunda sebelum pemeriksaan kesehatan pertama dijalankan setelah kontainer dimulai. Nilai default-nya adalah 0 detik. |
|
|
period_seconds |
Seberapa sering pemeriksaan kesehatan dijalankan. Nilai default-nya adalah 10 detik. Frekuensi tinggi menambah beban pada Pod; frekuensi rendah menunda deteksi kesalahan kontainer. |
|
|
timeout_seconds |
Waktu timeout untuk setiap pemeriksaan kesehatan. Nilai default-nya adalah 1 detik. Pemeriksaan yang melebihi durasi ini dianggap gagal. |
|
|
success_threshold |
Jumlah pemeriksaan gagal berturut-turut yang diperlukan untuk menandai kontainer yang sebelumnya sehat sebagai tidak sehat. Nilai default-nya adalah 3 untuk readiness probe dan 1 untuk liveness dan startup probe. |
|
|
failure_threshold |
Jumlah pemeriksaan sukses berturut-turut yang diperlukan untuk menandai kontainer yang sebelumnya tidak sehat sebagai sehat. Nilai default-nya adalah 1. |
|