Bekerja dengan grup simpul - Panduan Pengguna Eksctl

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Bekerja dengan grup simpul

Membuat nodegroup

Anda dapat menambahkan satu atau beberapa nodegroup selain nodegroup awal yang dibuat bersama dengan cluster.

Untuk membuat nodegroup tambahan, gunakan:

eksctl create nodegroup --cluster=<clusterName> [--name=<nodegroupName>]
catatan

--versionflag tidak didukung untuk nodegroup terkelola. Itu selalu mewarisi versi dari bidang kontrol.

Secara default, nodegroup baru yang tidak dikelola mewarisi versi dari control plane (--version=auto), tetapi Anda dapat menentukan versi yang berbeda, Anda juga dapat menggunakan --version=latest untuk memaksa penggunaan versi mana pun yang terbaru.

Selain itu, Anda dapat menggunakan file konfigurasi yang sama yang digunakan untukeksctl create cluster:

eksctl create nodegroup --config-file=<path>

Membuat nodegroup dari file konfigurasi

Nodegroups juga dapat dibuat melalui definisi cluster atau file konfigurasi. Diberikan contoh file konfigurasi berikut dan cluster yang ada disebutdev-cluster:

# dev-cluster.yaml apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: dev-cluster region: eu-north-1 managedNodeGroups: - name: ng-1-workers labels: { role: workers } instanceType: m5.xlarge desiredCapacity: 10 volumeSize: 80 privateNetworking: true - name: ng-2-builders labels: { role: builders } instanceType: m5.2xlarge desiredCapacity: 2 volumeSize: 100 privateNetworking: true

Nodegroups ng-1-workers dan ng-2-builders dapat dibuat dengan perintah ini:

eksctl create nodegroup --config-file=dev-cluster.yaml

Penyeimbangan Beban

Jika Anda sudah siap untuk melampirkan grup or/and target penyeimbang beban klasik yang ada ke nodegroups, Anda dapat menentukannya di file konfigurasi. Grup or/and target penyeimbang beban klasik secara otomatis dikaitkan dengan ASG saat membuat nodegroup. Ini hanya didukung untuk nodegroup yang dikelola sendiri yang ditentukan melalui bidang. nodeGroups

# dev-cluster-with-lb.yaml apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: dev-cluster region: eu-north-1 nodeGroups: - name: ng-1-web labels: { role: web } instanceType: m5.xlarge desiredCapacity: 10 privateNetworking: true classicLoadBalancerNames: - dev-clb-1 - dev-clb-2 asgMetricsCollection: - granularity: 1Minute metrics: - GroupMinSize - GroupMaxSize - GroupDesiredCapacity - GroupInServiceInstances - GroupPendingInstances - GroupStandbyInstances - GroupTerminatingInstances - GroupTotalInstances - name: ng-2-api labels: { role: api } instanceType: m5.2xlarge desiredCapacity: 2 privateNetworking: true targetGroupARNs: - arn:aws:elasticloadbalancing:eu-north-1:01234567890:targetgroup/dev-target-group-1/abcdef0123456789

Pemilihan nodegroup dalam file konfigurasi

Untuk melakukan delete operasi create atau hanya pada subset dari nodegroup yang ditentukan dalam file konfigurasi, ada dua flag CLI yang menerima daftar gumpalan, dan, misalnya: –0— –1—

eksctl create nodegroup --config-file=<path> --include='ng-prod-*-??' --exclude='ng-test-1-ml-a,ng-test-2-?'

Dengan menggunakan contoh file konfigurasi di atas, seseorang dapat membuat semua nodegroup pekerja kecuali yang pekerja dengan perintah berikut:

eksctl create nodegroup --config-file=dev-cluster.yaml --exclude=ng-1-workers

Atau seseorang dapat menghapus nodegroup pembangun dengan:

eksctl delete nodegroup --config-file=dev-cluster.yaml --include=ng-2-builders --approve

Dalam hal ini, kita juga perlu menyediakan --approve perintah untuk benar-benar menghapus nodegroup.

Sertakan dan kecualikan aturan

  • jika tidak --exclude ada --include atau ditentukan semuanya disertakan

  • jika hanya --include ditentukan, hanya grup simpul yang cocok dengan gumpalan tersebut yang akan disertakan

  • jika hanya --exclude ditentukan, semua nodegroup yang tidak cocok dengan gumpalan tersebut disertakan

  • jika keduanya ditentukan maka --exclude aturan lebih diutamakan --include (yaitu nodegroup yang cocok dengan aturan di kedua grup akan dikecualikan)

Daftar nodegroup

Untuk membuat daftar detail tentang nodegroup atau semua nodegroup, gunakan:

eksctl get nodegroup --cluster=<clusterName> [--name=<nodegroupName>]

Untuk mencantumkan satu atau beberapa nodegroup dalam format YAMB atau JSON, yang menampilkan lebih banyak info daripada tabel log default, gunakan:

# YAML format eksctl get nodegroup --cluster=<clusterName> [--name=<nodegroupName>] --output=yaml # JSON format eksctl get nodegroup --cluster=<clusterName> [--name=<nodegroupName>] --output=json

Kekekalan nodegroup

Secara desain, nodegroup tidak dapat diubah. Ini berarti bahwa jika Anda perlu mengubah sesuatu (selain penskalaan) seperti AMI atau tipe instance nodegroup, Anda perlu membuat nodegroup baru dengan perubahan yang diinginkan, memindahkan beban dan menghapus yang lama. Lihat bagian Menghapus dan menguras nodegroups.

Penskalaan nodegroup

Penskalaan nodegroup adalah proses yang dapat memakan waktu hingga beberapa menit. Ketika --wait flag tidak ditentukan, eksctl secara optimis mengharapkan nodegroup untuk diskalakan dan kembali segera setelah permintaan AWS API dikirim. Untuk eksctl menunggu sampai node tersedia, tambahkan --wait bendera seperti contoh di bawah ini.

catatan

Penskalaan nodegroup down/in (yaitu mengurangi jumlah node) dapat mengakibatkan kesalahan karena kami hanya mengandalkan perubahan pada ASG. Ini berarti bahwa node yang removed/terminated tidak terkuras secara eksplisit. Ini mungkin area untuk perbaikan di masa depan.

Penskalaan nodegroup terkelola dicapai dengan langsung memanggil EKS API yang memperbarui konfigurasi grup node terkelola.

Menskalakan satu nodegroup

Sebuah nodegroup dapat diskalakan dengan menggunakan perintah: eksctl scale nodegroup

eksctl scale nodegroup --cluster=<clusterName> --nodes=<desiredCount> --name=<nodegroupName> [ --nodes-min=<minSize> ] [ --nodes-max=<maxSize> ] --wait

Misalnya, untuk menskalakan nodegroup ng-a345f4e1 cluster-1 menjadi 5 node, jalankan:

eksctl scale nodegroup --cluster=cluster-1 --nodes=5 ng-a345f4e1

Nodegroup juga dapat diskalakan dengan menggunakan file konfigurasi yang diteruskan ke --config-file dan menentukan nama nodegroup yang harus diskalakan. --name Eksctl akan mencari file konfigurasi dan menemukan nodegroup serta nilai konfigurasi penskalaannya.

Jika jumlah node yang diinginkan NOT berada dalam kisaran minimum saat ini dan jumlah maksimum node saat ini, satu kesalahan spesifik akan ditampilkan. Nilai-nilai ini juga dapat diteruskan dengan flag --nodes-min dan --nodes-max masing-masing.

Menskalakan beberapa nodegroup

Eksctl dapat menemukan dan menskalakan semua nodegroup yang ditemukan dalam file konfigurasi yang diteruskan. --config-file

Demikian pula dengan penskalaan satu nodegroup, kumpulan validasi yang sama berlaku untuk setiap nodegroup. Misalnya, jumlah node yang diinginkan harus berada dalam kisaran jumlah node minimum dan maksimum.

Menghapus dan menguras nodegroups

Untuk menghapus nodegroup, jalankan:

eksctl delete nodegroup --cluster=<clusterName> --name=<nodegroupName>

Termasuk dan kecualikan aturan juga dapat digunakan dengan perintah ini.

catatan

Ini akan menguras semua pod dari nodegroup tersebut sebelum instance dihapus.

Untuk melewati aturan penggusuran selama proses pembuangan, jalankan:

eksctl delete nodegroup --cluster=<clusterName> --name=<nodegroupName> --disable-eviction

Semua node dikepung dan semua pod dikeluarkan dari nodegroup saat dihapus, tetapi jika Anda perlu menguras nodegroup tanpa menghapusnya, jalankan:

eksctl drain nodegroup --cluster=<clusterName> --name=<nodegroupName>

Untuk membuka kordon nodegroup, jalankan:

eksctl drain nodegroup --cluster=<clusterName> --name=<nodegroupName> --undo

Untuk mengabaikan aturan penggusuran seperti PodDisruptionBudget pengaturan, jalankan:

eksctl drain nodegroup --cluster=<clusterName> --name=<nodegroupName> --disable-eviction

Untuk mempercepat proses pembuangan, Anda dapat menentukan --parallel <value> jumlah node yang akan mengalir secara paralel.

Fitur lainnya

Anda juga dapat mengaktifkan SSH, akses ASG, dan fitur lainnya untuk nodegroup, misalnya:

eksctl create nodegroup --cluster=cluster-1 --node-labels="autoscaling=enabled,purpose=ci-worker" --asg-access --full-ecr-access --ssh-access

Perbarui label

Tidak ada perintah khusus eksctl untuk memperbarui label nodegroup, tetapi dapat dengan mudah dicapai dengan menggunakankubectl, misalnya:

kubectl label nodes -l alpha.eksctl.io/nodegroup-name=ng-1 new-label=foo

Akses SSH

Anda dapat mengaktifkan akses SSH untuk nodegroups dengan mengonfigurasi salah satu daripublicKey, publicKeyName dan publicKeyPath dalam konfigurasi nodegroup Anda. Atau Anda dapat menggunakan AWS Systems Manager (SSM) ke SSH ke node, dengan mengonfigurasi nodegroup dengan: enableSsm

managedNodeGroups: - name: ng-1 instanceType: m5.large desiredCapacity: 1 ssh: # import public key from file publicKeyPath: ~/.ssh/id_rsa_tests.pub - name: ng-2 instanceType: m5.large desiredCapacity: 1 ssh: # use existing EC2 key publicKeyName: ec2_dev_key - name: ng-3 instanceType: m5.large desiredCapacity: 1 ssh: # import inline public key publicKey: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDqZEdzvHnK/GVP8nLngRHu/GDi/3PeES7+Bx6l3koXn/Oi/UmM9/jcW5XGziZ/oe1cPJ777eZV7muEvXg5ZMQBrYxUtYCdvd8Rt6DIoSqDLsIPqbuuNlQoBHq/PU2IjpWnp/wrJQXMk94IIrGjY8QHfCnpuMENCucVaifgAhwyeyuO5KiqUmD8E0RmcsotHKBV9X8H5eqLXd8zMQaPl+Ub7j5PG+9KftQu0F/QhdFvpSLsHaxvBzA5nhIltjkaFcwGQnD1rpCM3+UnQE7Izoa5Yt1xoUWRwnF+L2TKovW7+bYQ1kxsuuiX149jXTCJDVjkYCqi7HkrXYqcC1sbsror someuser@hostname" - name: ng-4 instanceType: m5.large desiredCapacity: 1 ssh: # enable SSH using SSM enableSsm: true