Untuk meminimalkan perubahan pada file YAML, Elastic Container Instance menyediakan fitur eci-profile. Fitur ini memungkinkan Anda mengonfigurasi sumber daya Elastic Container Instance di tingkat kluster dan mengoordinasikan pod berdasarkan pemilih. Topik ini menjelaskan cara mengonfigurasi sebuah eci-profile.
Fitur dari sebuah eci-profile
Untuk menggunakan Elastic Container Instance dalam Container Service for Kubernetes (ACK), Anda harus menerapkan komponen ack-virtual-node yang terintegrasi dengan teknologi Virtual Kubelet. Hal ini dapat menimbulkan masalah-masalah berikut:
Untuk menjadwalkan pod agar berjalan di Elastic Container Instance, Anda harus memodifikasi file YAML dari bisnis lapisan atas.
Untuk mengaktifkan fitur canggih tertentu dari Elastic Container Instance, Anda juga harus memodifikasi file YAML dari bisnis lapisan atas.
Masalah-masalah di atas mengaburkan batas antara pekerjaan O&M dan pekerjaan bisnis. Untuk membantu menghindari hal tersebut, Elastic Container Instance menyediakan file konfigurasi eci-profile. File ini menyediakan fitur-fitur berikut:
ECI Scheduler
Dalam skenario di mana node nyata dan node virtual diterapkan, Anda dapat menjadwalkan pod Kubernetes untuk berjalan di Elastic Container Instance dengan mengonfigurasi label pod, label namespace, dan penjadwalan berbasis Elastic Container Instance. Untuk melakukan konfigurasi ini, Anda harus memodifikasi sumber daya yang ada di kluster, yang dapat memperkenalkan kerentanan ke dalam sistem.
Untuk mengatasi masalah ini, ECI Scheduler menyediakan mekanisme penjadwalan baru berdasarkan mutating webhooks. Dalam sebuah eci-profile, Anda dapat mengonfigurasi pemilih. Sistem kemudian akan memfilter pod berdasarkan label pod atau label namespace yang ditentukan oleh pemilih. Jika sebuah pod atau namespacenya memiliki label yang sesuai seperti yang ditentukan dalam pemilih, pod tersebut secara otomatis dijadwalkan untuk berjalan di Elastic Container Instance.
ECI Effect
Untuk memungkinkan beberapa fitur Elastic Container Instance berlaku, Anda harus menambahkan anotasi atau label ke pod. Contoh-contoh fitur ini termasuk menentukan tipe instance Elastic Compute Service (ECS), mengaktifkan cache gambar, dan mengonfigurasi layanan Network Time Protocol (NTP). Untuk informasi lebih lanjut, lihat Annotasi Pod ECI.
ECI Effect dapat secara otomatis menambahkan anotasi dan label ke pod. Anda dapat menentukan kriteria filter dan anotasi serta label yang akan ditambahkan saat mengonfigurasi pemilih dalam sebuah eci-profile. Pod yang memenuhi kriteria filter dalam pemilih secara otomatis dijadwalkan untuk berjalan di Elastic Container Instance. Anotasi dan label yang ditentukan ditambahkan ke pod.
Pembaruan panas
Sebuah eci-profile berisi konfigurasi alamat IP kluster, hybrid cloud, pengumpulan log, dan vSwitches. Anda dapat memperbarui konfigurasi berdasarkan kebutuhan Anda.
Anda tidak perlu memulai ulang komponen ack-virtual-node untuk memperbarui konfigurasi.
Konfigurasi yang diperbarui segera diterapkan ke pod Elastic Container Instance yang baru dibuat, tetapi hanya diterapkan ke pod Elastic Container Instance yang sudah ada setelah rolling releases dilakukan pada pod tersebut.
Peringatan
Saat mengonfigurasi sebuah eci-profile, pastikan bahwa komponen ack-virtual-node di kluster adalah versi terbaru. Untuk informasi tentang cara memperbarui ack-virtual-node, lihat Kelola komponen.
Jika Anda ingin menggunakan fitur ECI Scheduler, Anda harus mengaktifkan mutating webhooks. Pod dalam ACK Serverless clusters secara otomatis dijadwalkan untuk berjalan di elastic container instances. Anda tidak perlu menggunakan ECI Scheduler untuk menjadwalkan pod.
Deskripsi Konfigurasi
Saat sistem membuat sebuah pod, sistem membaca file konfigurasi eci-profile (ConfigMap bernama eci-profile) di namespace kube-system. Kemudian, sistem membuat pod berdasarkan konfigurasi bagian data dalam file konfigurasi. Anda dapat menjalankan perintah kubectl get cm -n kube-system eci-profile -o yaml untuk melihat file YAML dari eci-profile. Template file YAML dari eci-profile:
apiVersion: v1
data:
enableClusterIp: "true"
enableHybridMode: "false"
enableLinuxArm64Node: "false"
enableLogController: "false"
enablePVCController: "false"
enablePrivateZone: "false"
enableReuseSSLKey: "false"
featureGates: "WaitForFirstConsumer=false"
securityGroupId: sg-2zeeyaaxlkq9sppl****
selectors: ""
slsMachineGroup: ""
vSwitchIds: vsw-2ze23nqzig8inprou****,vsw-2ze94pjtfuj9vaymf****
vpcId: vpc-2zeghwzptn5zii0w7****
kind: ConfigMap
metadata:
creationTimestamp: "2023-01-11T08:28:14Z"
name: eci-profile
namespace: kube-system
resourceVersion: "356"
uid: b345fa8c-919e-41fc-a981-57864b1a****Anda dapat memodifikasi konfigurasi bagian data dalam eci-profile untuk mengonfigurasi pemilih atau memperbarui parameter lain yang diperlukan.
Parameter dalam bagian data | Deskripsi | Referensi |
pemilih | Anda dapat menambahkan pemilih dan efek untuk mengimplementasikan fitur ECI Scheduler dan ECI Effect. Pemilih mencakup objectSelectors dan namespaceSelectors. Anda dapat mengonfigurasi pemilih berdasarkan kebutuhan Anda. | |
Parameter lain yang diperlukan seperti vpcId dan vSwitchIds | Parameter tingkat kluster. Pembaruan panas dapat dilakukan pada parameter-parameter ini. Anda dapat memperbarui parameter-parameter ini berdasarkan kebutuhan Anda. |
Anda dapat menggunakan salah satu metode berikut untuk memodifikasi eci-profile:
Jalankan perintah kubectl edit:
kubectl edit configmap eci-profile -n kube-systemGunakan konsol Container Service for Kubernetes (ACK).
Masuk ke Konsol ACK Container Service.
Di halaman Kluster, temukan kluster yang ingin Anda kelola dan klik nama kluster tersebut.
Di panel navigasi kiri halaman manajemen kluster, pilih Configurations > ConfigMaps.
Pilih kube-system dari daftar drop-down Namespace.
Temukan eci-profile dan klik Edit YAML di kolom Tindakan yang sesuai.
Konfigurasikan pemilih
Parameter pemilih berisi konfigurasi ECI Scheduler dan ECI Effect. Saat sistem membuat pod, sistem mencocokkan pod berdasarkan pemilih. Jika sebuah pod atau namespacenya memiliki label yang sesuai dalam pemilih, pod tersebut secara otomatis dijadwalkan untuk berjalan di Elastic Container Instance, atau ditambahkan anotasi dan label yang ditentukan untuk membuat fitur canggih Elastic Container Instance berlaku.
Anda dapat mengonfigurasi beberapa pemilih untuk parameter pemilih. Anda harus menentukan nama setiap pemilih. Anda juga dapat menentukan informasi berikut dari setiap pemilih berdasarkan kebutuhan Anda:
namespaceSelector: label namespace yang akan dicocokkan.
objectSelector: label pod yang akan dicocokkan.
effect: anotasi dan label yang akan ditambahkan secara dinamis ke pod.
Template konfigurasi pemilih:
Rancang pemilih berdasarkan skenario bisnis Anda. Hapus komentar saat Anda mengonfigurasi pemilih.
data:
selectors: |
[
{
"name": "selector-demo1", # Nama pemilih. Ini adalah parameter wajib.
"namespaceSelector": { # Filter namespace. Ini adalah parameter opsional berdasarkan label namespace.
"matchLabels": { # Label namespace yang akan dicocokkan. Hubungan logis di antara beberapa label adalah DAN.
"eci": "true"
}
},
"objectSelector": { # Filter objek. Ini adalah parameter opsional berdasarkan label pod.
"matchLabels": { # Label pod yang akan dicocokkan. Hubungan logis di antara beberapa label adalah DAN.
"eci": "true"
}
},
"effect": { # Anotasi dan label yang akan ditambahkan secara dinamis ke pod. Ini adalah parameter opsional.
"annotations": {
"k8s.aliyun.com/eci-use-specs": "ecs.c6.xlarge"
},
"labels": {
"created-by-eci": "true"
}
}
},
{
"name": "selector-demo2",
"objectSelector": {
"matchLabels": {
"eci": "test"
}
}
}
]Dalam template di atas, pemilih bernama selector-demo1 memberikan kemampuan berikut:
Jika sebuah pod dan namespacenya keduanya memiliki label eci: true, pod tersebut secara otomatis dijadwalkan untuk berjalan di Elastic Container Instance. Anotasi "k8s.aliyun.com/eci-use-specs": "ecs.c6.xlarge" dan label created-by-eci: true ditambahkan ke pod.
Kami merekomendasikan Anda mengonfigurasi setidaknya salah satu parameter namespaceSelector dan objectSelector untuk setiap pemilih. Jika kedua namespaceSelector dan objectSelector dikonfigurasi, pod harus cocok dengan nilai kedua parameter tersebut. Jika tidak ada yang dikonfigurasi tetapi parameter effect dikonfigurasi, pengaturan effect diterapkan ke semua pod yang dijadwalkan untuk berjalan di Elastic Container Instance.
Jika Anda mengonfigurasi beberapa pemilih, pemilih tersebut dicocokkan secara berurutan. Setelah pod cocok, anotasi dan label yang ditentukan dalam pengaturan effect secara otomatis ditambahkan ke pod. Anotasi dan label ini tidak menimpa anotasi dan label yang sudah ada pada pod. Jika ada anotasi atau label duplikat, anotasi atau label yang memiliki prioritas lebih tinggi digunakan. Anotasi dan label yang sudah ada pada pod memiliki prioritas lebih tinggi daripada anotasi dan label yang ditentukan dalam pengaturan effect dari pemilih yang cocok. Anotasi atau label dalam pengaturan effect dari pemilih diberi prioritas menurun sesuai urutan pemilih yang cocok.
Setelah Anda mengonfigurasi pemilih, Anda dapat menjalankan perintah berikut untuk memeriksa apakah pemilih berlaku. Jika file YAML yang dikembalikan berisi pemilih yang dikonfigurasi, pemilih tersebut berlaku. Jika file YAML yang dikembalikan tidak berisi pemilih yang dikonfigurasi, periksa apakah pemilih diformat dengan benar.
kubectl get mutatingwebhookconfigurations -o yaml vk-webhookContoh konfigurasi 1: Jadwalkan pod tertentu untuk berjalan di Elastic Container Instance
Dalam kode berikut, namespaceSelector dan objectSelector dikonfigurasi untuk memberikan kemampuan berikut:
Jika sebuah pod memiliki label created-by-eci: true dan namespace pod tersebut memiliki label type: eci, pod tersebut dijadwalkan untuk berjalan di elastic container instance.
data:
selectors: |
[
{
"name":"eci-selector",
"namespaceSelector":{
"matchLabels":{
"type":"eci"
}
},
"objectSelector":{
"matchLabels":{
"created-by-eci":"true"
}
}
}
]Contoh konfigurasi 2: Jadwalkan pod tertentu ke Elastic Container Instance dan gunakan tipe instance ECS dengan akselerasi GPU untuk membuat pod Elastic Container Instance
Dalam kode berikut, namespaceSelector dan effect dikonfigurasi untuk memberikan kemampuan berikut:
Jika namespace tempat pod tersebut milik memiliki label gpu: true, pod tersebut dijadwalkan untuk berjalan di Elastic Container Instance. Pod Elastic Container Instance dibuat berdasarkan tipe instance ECS dengan akselerasi GPU ecs.gn6v-c8g1.2xlarge dan ditambahkan dengan label gpu: test.
data:
selectors: |
[
{
"name":"gpu-namespace-selector",
"namespaceSelector":{
"matchLabels":{
"gpu":"true"
}
},
"effect": {
"annotations": {
"k8s.aliyun.com/eci-use-specs":"ecs.gn6v-c8g1.2xlarge"
},
"labels":{
"gpu":"test"
}
}
}
]Contoh konfigurasi 3: Jadwalkan pod tertentu ke Elastic Container Instance dan aktifkan pencocokan otomatis cache gambar
Dalam kode berikut, objectSelector dan effect dikonfigurasi untuk memberikan kemampuan berikut:
Jika sebuah pod memiliki label imc: auto, pod tersebut dijadwalkan untuk berjalan di Elastic Container Instance. Fitur pencocokan otomatis cache gambar diaktifkan untuk membuat pod tersebut.
data:
selectors: |
[
{
"name":"autoimc-object-selector",
"objectSelector":{
"matchLabels":{
"imc":"auto"
}
},
"effect": {
"annotations": {
"k8s.aliyun.com/eci-auto-imc": "true"
}
}
}
]Perbarui parameter lain yang diperlukan dalam bagian data
Parameter lain yang diperlukan yang terkandung dalam bagian data menentukan informasi yang diperlukan untuk membuat pod. Misalnya, parameter vpcId menentukan virtual private cloud (VPC) tempat pod tersebut milik. Parameter vSwitchIds menentukan vSwitches yang terkait dengan pod. Anda dapat memperbarui parameter yang diperlukan berdasarkan kebutuhan Anda. Konfigurasi yang diperbarui berlaku segera tanpa perlu memulai ulang komponen ack-virtual-node. Parameter berikut dapat diperbarui:
Parameter berikut adalah parameter tingkat kluster. Jika Anda tidak mengonfigurasi parameter ini saat membuat pod Elastic Container Instance, konfigurasi dalam eci-profile digunakan untuk parameter tersebut.
Parameter | Contoh | Deskripsi |
enableClusterIp | "true" | Menentukan apakah mendukung alamat IP kluster. |
enableLinuxArm64Node | "false" | Menentukan apakah mengaktifkan node berbasis ARM. Untuk informasi lebih lanjut, lihat Jadwalkan pod ke node virtual berbasis ARM. |
enableLogController | "false" | Menentukan apakah akan menggunakan Custom Resource Definition (CRD) untuk Simple Log Service guna mengumpulkan log pod. Jika Anda menyetel parameter ini ke true, Anda juga harus mengonfigurasi Parameter slsMachineGroup. |
enablePVCController | "false" | Menentukan apakah mengaktifkan ekstensi disk online. Jika Anda mengatur parameter ini ke true, sistem dapat melakukan ekstensi panas pada PersistentVolumeClaims (PVC) yang terikat dengan disk. |
enablePrivateZone | "false" | Menentukan apakah menggunakan PrivateZone untuk menyelesaikan nama domain. |
enableReuseSSLKey | "false" | Menentukan apakah mengaktifkan penggunaan kembali kunci SSL. Jika Anda mengatur parameter ini ke true, kunci SSL digunakan kembali saat Anda membuat pod Elastic Container Instance. Ini membuat pembuatan pod lebih efisien. Penting Secara default, saat Anda membuat pod Elastic Container Instance, ack-virtual-node menerbitkan sertifikat SSL unik untuk setiap pod. Dalam kasus di mana Anda ingin membuat sejumlah besar pod, perilaku ini sangat memengaruhi efisiensi pembuatan pod. Setelah Anda mengaktifkan penggunaan kembali kunci SSL, ack-virtual-node menerbitkan sertifikat SSL yang sama untuk semua pod. Ini meningkatkan efisiensi dengan mengorbankan keamanan. |
featureGates | "WaitForFirstConsumer=false" | Menentukan fitur canary. Anda hanya dapat mengonfigurasi WaitForFirstConsumer. Jika Anda mengatur WaitForFirstConsumer ke true, StorageClass menggunakan mode WaitForFirstConsumer saat ack-virtual-node diterapkan dalam kluster.
Untuk informasi lebih lanjut, lihat Mode pengikatan volume. |
securityGroupId | sg-2ze0b9o8pjjzts4h**** | Grup keamanan tempat pod Elastic Container Instance milik. |
slsMachineGroup | "test-mg" | Grup mesin tempat pod Elastic Container Instance milik. Jika Anda mengatur parameter enableLogController ke true, Anda harus menentukan parameter ini. |
vSwitchIds | vsw-2zeet2ksvw7f14ryz**** | ID vSwitches yang terkait dengan pod Elastic Container Instance. Pisahkan ID vSwitch dengan koma (,). |
vpcId | vpc-2zeghwzptn5zii0w7**** | ID VPC tempat pod Elastic Container Instance diterapkan. |
Kode contoh berikut menunjukkan cara mengonfigurasi bagian data.
data:
enableClusterIp: "true"
enableHybridMode: "false"
enableLinuxArm64Node: "false"
enableLogController: "false"
enablePVCController: "false"
enablePrivateZone: "false"
enableReuseSSLKey: "false"
securityGroupId: sg-2zeeyaaxlkq9sppl****
selectors: ""
slsMachineGroup: ""
vSwitchIds: vsw-2ze23nqzig8inprou****,vsw-2ze94pjtfuj9vaymf****
vpcId: vpc-2zeghwzptn5zii0w7****