Saat menerapkan StatefulSet dengan volume disk terpasang di kluster Container Service for Kubernetes (ACK), sistem mungkin gagal membuat StatefulSet karena masalah konfigurasi zona atau kategori disk. Topik ini memberikan konfigurasi yang direkomendasikan untuk aplikasi lintas zona guna mencegah masalah dan meminimalkan risiko gangguan rilis.
Informasi Latar Belakang
Kubernetes menyediakan orkestrasi kontainer yang kuat untuk membantu pengguna mengembangkan aplikasi stateful berskala besar menggunakan StatefulSets. Meskipun demikian, abstraksi perangkat keras dapat menyebabkan masalah berikut:
Aplikasi diterapkan di zona yang salah, seperti Zona B alih-alih Zona A.
Gagal membuat PV secara dinamis untuk pemasangan disk, dengan pesan kesalahan seperti InvalidDataDiskCatagory.NotSupported.
Pesan kesalahan saat memasang disk:
The instanceType of the specified instance does not support this disk category.Pesan kesalahan saat debugging:
0/x node are available, x nodes had volume node affinity conflict.
Masalah ini dapat mengganggu rilis aplikasi. Untuk mengurangi risiko, gunakan konfigurasi yang direkomendasikan dalam topik ini.
Konfigurasi yang Direkomendasikan
Persyaratan
Gunakan disk alih-alih Sistem File NAS (NAS) untuk penyimpanan persisten karena disk lebih stabil dan menawarkan bandwidth lebih tinggi.
Terapkan kluster di tiga zona untuk memastikan sumber daya node dan penyimpanan mencukupi.
Aktifkan penskalaan otomatis node agar node baru dapat ditambahkan saat semua node tidak tersedia.
Tentukan beberapa kategori disk dalam StorageClass untuk menghindari kegagalan pemasangan.
Distribusikan pod aplikasi secara merata ke node di zona berbeda.
Konfigurasi Pool Node yang Direkomendasikan
Terapkan setiap pool node hanya di satu zona.
Untuk menambahkan node di zona baru, buat pool node baru di zona tersebut. Lihat Buat dan kelola pool node untuk informasi lebih lanjut.
Pastikan setiap pool node diterapkan di zona terpisah dan identifikasi zona melalui ID zona dalam nama pool node.
Aktifkan penskalaan otomatis untuk pool node. Lihat Aktifkan penskalaan otomatis node untuk detailnya.
Setelah diaktifkan, sistem akan menambahkan node ke pool node saat semua node tidak tersedia untuk penjadwalan pod.

Gunakan jenis Instance Elastic Compute Service (ECS) yang sama atau instance ECS yang mendukung jenis penyimpanan blok serupa di zona berbeda.
Jenis instance ECS tempat disk cloud dapat dilampirkan bergantung pada kategori disk. Kegagalan peluncuran pod dapat terjadi jika kategori disk tidak didukung oleh instance ECS meskipun berada di zona yang sama.
Tambahkan taint ke semua node dalam pool node untuk mencegah penjadwalan aplikasi yang tidak relevan.

Konfigurasi Kluster yang Direkomendasikan
Pastikan versi Kubernetes kluster adalah 1.20 atau lebih baru.
Pastikan versi Plugin Antarmuka Penyimpanan Kontainer (CSI) adalah 1.22 atau lebih baru. Lihat Kelola komponen csi-plugin dan csi-provisioner untuk informasi lebih lanjut.
Tentukan beberapa kategori disk dalam StorageClass.
Contoh template YAML:
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-disk-topology-alltype parameters: type: cloud_essd,cloud_ssd,cloud_efficiency provisioner: diskplugin.csi.alibabacloud.com reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true allowedTopologies: - matchLabelExpressions: - key: topology.diskplugin.csi.alibabacloud.com/zone values: - cn-beijing-a - cn-beijing-bDeskripsi parameter:
type: cloud_essd,cloud_ssd,cloud_efficiency: Sistem mencoba membuat disk dalam urutan berikut: SSD Perusahaan (ESSD), SSD standar, dan ultra disk. Hal ini mengurangi risiko kegagalan pembuatan disk akibat inventaris yang tidak mencukupi.volumeBindingMode: WaitForFirstConsumer: Setelah pod dijadwalkan ke node, sistem mencoba membuat disk di zona tempat node berada, mengurangi risiko ketidaksesuaian zona.allowedTopologies: Parameter ini membatasi domain topologi volume yang diprovision menggunakan StorageClass pada wilayah dan zona tertentu. Jika Anda menetapkanvolumeBindingModekeWaitForFirstConsumer, penjadwal akan menjadwalkan pod yang menggunakan StorageClass di domain topologi yang ditentukan untuk memenuhi persyaratan pembuatan disk.
Konfigurasi Aplikasi yang Direkomendasikan
Contoh kode berikut adalah template StatefulSet standar yang dapat disesuaikan sesuai kebutuhan bisnis Anda.
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
serviceName: "mysql"
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
topologySpreadConstraints:
- labelSelector:
matchLabels:
app: mysql
maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: ScheduleAnyway
containers:
- image: mysql:5.6
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: "mysql"
volumeMounts:
- name: disk-csi
mountPath: /var/lib/mysql
tolerations:
- key: "app"
operator: "Exists"
effect: "NoSchedule"
volumeClaimTemplates:
- metadata:
name: disk-csi
spec:
accessModes: [ "ReadWriteMany" ]
storageClassName: alicloud-disk-topology-alltype
resources:
requests:
storage: 40GiDeskripsi parameter:
topologySpreadConstraints: Menyebarkan pod ke zona berbeda. Lihat Kendala Penyebaran Topologi untuk detailnya.volumeClaimTemplates: Membuat disk secara otomatis untuk setiap replika pod, mempercepat penskalaan aplikasi.
File YAML PV berisi informasi zona node tempat PV dipasang. PV dan PVC yang terikat hanya dapat dikaitkan dengan pod di zona node yang sama, memastikan pemasangan disk berhasil.
Referensi
Lihat Praktik Terbaik untuk Keamanan Data Volume Disk untuk meningkatkan keamanan data volume disk.
Lihat Ikhtisar Pemantauan Penyimpanan Kontainer untuk melihat penggunaan disk real-time.
Lihat Perluas Volume Disk untuk memperluas disk saat ukuran tidak mencukupi.
Lihat FAQ tentang Volume Disk untuk informasi lebih lanjut tentang masalah pemasangan disk.