EAS menyediakan fitur pemeriksaan kesehatan berbasis mekanisme pemeriksaan kesehatan Kubernetes untuk secara otomatis mendeteksi dan memulihkan kontainer yang gagal. Fitur ini memastikan hanya instans yang sehat yang menerima traffic serta mencegah alokasi sumber daya ke instans yang tidak sehat. Topik ini menjelaskan cara mengonfigurasi fitur pemeriksaan kesehatan tersebut.
Batasan
Fitur pemeriksaan kesehatan hanya tersedia saat Anda menyebar layanan menggunakan custom image yang mencakup logika pemeriksaan kesehatan.
Cara kerja
Fitur pemeriksaan kesehatan EAS memanfaatkan mekanisme pemeriksaan kesehatan Kubernetes dengan menggunakan probe dan metode pemeriksaan kesehatan untuk memantau kesehatan serta ketersediaan layanan Anda. Fitur ini mencakup komponen-komponen berikut:
Jenis probe yang didukung:
Probe type
Description
Liveness probes
Menentukan apakah sebuah kontainer sedang berjalan. Jika pemeriksaan liveness probe gagal, kubelet akan menghentikan kontainer tersebut dan menerapkan kebijakan restart yang telah dikonfigurasi. Jika sebuah kontainer tidak memiliki liveness probe, kubelet mengasumsikan bahwa probe selalu mengembalikan
Successdan kontainer tersebut dalam keadaan hidup.Readiness probes
Menentukan apakah sebuah kontainer siap melayani permintaan. Hanya Pod yang siap yang dapat menerima traffic. Asosiasi antara Service dan Endpoints-nya bergantung pada kesiapan Pod tersebut:
Jika sebuah Pod tidak siap, alamat IP-nya dihapus dari daftar Endpoint Service terkait.
Ketika Pod menjadi siap, alamat IP-nya ditambahkan kembali ke daftar Endpoint.
Startup probes
Menentukan kapan aplikasi dalam kontainer telah dimulai. Probe ini menunda pemeriksaan liveness dan readiness hingga kontainer sepenuhnya diinisialisasi, sehingga mencegah sistem menghentikan kontainer yang memerlukan waktu lama untuk startup sebelum siap.
Metode pemeriksaan kesehatan yang didukung:
Health check method
Description
http_getMengirim permintaan HTTP GET untuk memeriksa kesehatan layanan. Kode status respons menentukan apakah pemeriksaan berhasil.
tcp_socketMencoba membuka koneksi TCP untuk memeriksa kesehatan layanan.
execMenjalankan perintah tertentu di dalam kontainer. Pemeriksaan dianggap berhasil jika perintah tersebut keluar dengan kode 0.
Siapkan custom image
Anda dapat menggunakan framework web untuk mengenkapsulasi logika prediksi Anda. Contoh berikut menggunakan framework Flask dan file app.py:
import json
from flask import Flask, request, make_response
app = Flask(__name__)
@app.route('/', methods = ['GET','POST'])
def process_handle_func():
"""
Parsing badan permintaan sesuai kebutuhan Anda.
"""
data = request.get_data().decode('utf-8')
body = json.loads(data)
res = process(body)
"""
Atur respons sesuai kebutuhan Anda.
"""
response = make_response(res)
response.status_code = 200
return response
def process(data):
"""
Logika prediksi Anda
"""
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 penyebaran JSON untuk layanan tersebut.
"""
app.run(host='0.0.0.0', port=8000)Anda dapat menulis Dockerfile sederhana untuk menyalin kode prediksi dan menginstal paket yang diperlukan. Berikut adalah contoh Dockerfile:
# Contoh ini menggunakan Python.
FROM registry.cn-shanghai.aliyuncs.com/eas/bashbase-amd64:0.0.1
COPY ./process_code /eas
RUN /xxx/pip install required_packages
CMD ["/xxx/python", "/eas/xxx/app.py"] Untuk langkah-langkah detail tentang cara membuat custom image, lihat Build Images on a Container Registry Enterprise Edition Instance. Untuk informasi lebih lanjut tentang pembuatan custom image, lihat Custom images. Sebagai alternatif, Anda dapat menyimpan kode Anda di sistem file NAS atau repositori Git dan menyambungkannya ke instans layanan melalui storage mount selama penyebaran. Untuk informasi lebih lanjut, lihat Storage mount. Topik ini menjelaskan cara menggunakan metode pertama untuk mengonfigurasi fitur pemeriksaan kesehatan selama penyebaran layanan.
Konfigurasikan pemeriksaan kesehatan
Penyebaran kustom
Masuk ke PAI console. Pilih wilayah di bagian atas halaman, lalu pilih ruang kerja yang diinginkan dan klik Elastic Algorithm Service (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 informasi tentang parameter lainnya, lihat Deploy a custom inference service.
Parameter
Description
Image Configuration
Pilih Image Address dan masukkan alamat custom image Anda. Misalnya,
registry-vpc.cn-shanghai.aliyuncs.com/xxx/yyy:zzz.Command
Perintah entri untuk image. Hanya perintah tunggal yang didukung, bukan skrip kompleks. Perintah ini harus konsisten dengan perintah dalam Dockerfile Anda. Misalnya,
/data/eas/ENV/bin/python /data/eas/app.py.Anda juga harus memasukkan nomor port. Ini adalah port HTTP lokal tempat image mendengarkan setelah dimulai, seperti 8000.
PentingEngine EAS mendengarkan pada port tetap 8080 dan 9090. Port kontainer Anda tidak boleh 8080 atau 9090.
Port ini harus sesuai dengan port yang ditentukan dalam file xxx.py yang dirujuk oleh perintah run.
Health Check
Aktifkan sakelar Health Check, konfigurasikan parameter, lalu klik OK. Untuk detail parameter, lihat tabel Health check parameters.
CatatanAnda dapat menambahkan hingga tiga pemeriksaan kesehatan, masing-masing dengan jenis probe yang unik.
Setelah mengonfigurasi parameter, klik Deploy.
Penyebaran JSON
Buat file baru dalam format JSON bernama service.json. Berikut adalah contoh isi file tersebut.
{
"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
}
]
}Tabel berikut menjelaskan parameter kunci. Untuk informasi tentang parameter lainnya, lihat JSON deployment.
Parameter | Description | |
image | Alamat custom image yang digunakan untuk menyebar layanan model. Karena EAS tidak menyediakan akses jaringan publik, Anda perlu menggunakan alamat registri internal VPC untuk penyebaran. Misalnya, | |
env | name | Nama variabel lingkungan. |
value | Nilai variabel lingkungan. | |
command | Perintah entri untuk image hanya mendukung format perintah tunggal dan tidak mendukung skrip kompleks. Misalnya: | |
port | Port jaringan tempat proses dalam image mendengarkan. Misalnya, 8000. Penting Port ini harus sesuai dengan port yang dikonfigurasi dalam file xxx.py yang ditentukan dalam command. | |
liveness_check Catatan Contoh ini menggunakan liveness probe. Anda juga dapat menggunakan | http_get | Menggunakan metode HTTP GET untuk memeriksa port tertentu. Parameter berikut didukung:
Dua metode pemeriksaan kesehatan berikut juga didukung:
|
initial_delay_seconds | Waktu tunda (dalam detik) setelah kontainer dimulai sebelum pemeriksaan kesehatan pertama dijalankan. Default: 0. | |
period_seconds | Interval (dalam detik) antara pemeriksaan kesehatan. Default: 10. Interval yang pendek dapat meningkatkan overhead Pod, sedangkan interval yang panjang dapat menunda deteksi kegagalan. | |
timeout_seconds | Jumlah detik setelah pemeriksaan kesehatan timeout. Default: 1. Timeout dianggap sebagai kegagalan. | |
failure_threshold | Jumlah kegagalan berturut-turut setelah keberhasilan yang diperlukan untuk menandai kontainer sebagai gagal. Nilai default adalah 3 untuk readiness probe, dan 1 untuk liveness dan startup probe. | |
success_threshold | Jumlah keberhasilan berturut-turut yang diperlukan setelah kegagalan untuk menandai kontainer sebagai berhasil. Default: 1. | |