Halaman ini menunjukkan cara membuat node pool di GKE di AWS dan cara menyesuaikan konfigurasi node menggunakan file konfigurasi.
Untuk membuat node pool, Anda harus menyediakan resource berikut:
- Nama cluster AWS yang ada untuk membuat node pool
- Profil instance IAM untuk VM node pool
- Subnet tempat VM node pool akan berjalan
Jika ingin akses SSH ke node, Anda dapat Membuat pasangan kunci EC2.
Halaman ini ditujukan bagi administrator dan Operator IT yang ingin menyiapkan, memantau, dan mengelola infrastruktur cloud. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam Google Cloud konten, lihat Peran dan tugas pengguna GKE umum.
Membuat node pool standar
Setelah resource ini tersedia, Anda dapat membuat node pool dengan perintah berikut:
gcloud container aws node-pools create NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--instance-type INSTANCE_TYPE \
--root-volume-size ROOT_VOLUME_SIZE \
--iam-instance-profile NODEPOOL_PROFILE \
--node-version NODE_VERSION \
--min-nodes MIN_NODES \
--max-nodes MAX_NODES \
--max-pods-per-node MAX_PODS_PER_NODE \
--location GOOGLE_CLOUD_LOCATION \
--subnet-id NODEPOOL_SUBNET \
--ssh-ec2-key-pair SSH_KEY_PAIR_NAME \
--config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
--tags "Name=CLUSTER_NAME-NODE_POOL_NAME"
Ganti kode berikut:
NODE_POOL_NAME
: nama yang Anda pilih untuk node poolCLUSTER_NAME
: nama cluster tempat node pool akan dilampirkanINSTANCE_TYPE
: jenis instance mesin AWS yang diinginkan untuk node pool ini—misalnya,m5.large
ROOT_VOLUME_SIZE
: ukuran yang diinginkan untuk volume root setiap node, dalam GbNODEPOOL_PROFILE
: profil instance IAM untuk VM node pool. Untuk mengetahui detail tentang cara memperbarui profil instance IAM, lihat Memperbarui profil instance IAM AWS.NODE_VERSION
: versi Kubernetes yang akan diinstal di setiap node dalam node pool (misalnya, "1.32.4-gke.200")MIN_NODES
: jumlah minimum node yang dapat dimuat node poolMAX_NODES
: jumlah maksimum node yang dapat dimuat node poolMAX_PODS_PER_NODE
: jumlah maksimum pod yang dapat dibuat di satu node dalam poolGOOGLE_CLOUD_LOCATION
: nama lokasi Google Cloud tempat node pool ini akan dikelolaNODEPOOL_SUBNET
: ID subnet tempat node pool akan berjalan.- Tidak boleh ada tumpang-tindih antara rentang IP Pod/Layanan cluster dan jaringan subnet kumpulan node. Untuk mengetahui informasi selengkapnya tentang memilih rentang IP Pod dan Service untuk cluster Anda, lihat Memilih rentang CIDR untuk cluster Anda
- Jika subnet ini berada di luar blok CIDR utama VPC, beberapa langkah tambahan diperlukan. Untuk mengetahui informasi selengkapnya, lihat grup keamanan.
SSH_KEY_PAIR_NAME
: nama pasangan kunci SSH AWS yang dibuat untuk akses SSH (opsional)CONFIG_KMS_KEY_ARN
: Amazon Resource Name (ARN) dari kunci AWS KMS yang mengenkripsi data pengguna
Jika ada, parameter --tags
akan menerapkan tag yang diberikan ke semua node di
node pool Anda. Contoh ini memberi tag pada semua node dalam pool dengan nama cluster
dan node pool tempat node berada.
Menyesuaikan konfigurasi sistem node
Anda dapat menyesuaikan konfigurasi node menggunakan berbagai metode. Misalnya, Anda dapat menentukan parameter seperti batas CPU Pod saat membuat node pool.
Anda dapat menggunakan konfigurasi sistem node guna menentukan setelan kustom untuk agen node Kubernetes (kubelet
) dan konfigurasi kernel Linux level rendah (sysctl
) di node pool.
Mengonfigurasi agen kubelet
Untuk menyesuaikan konfigurasi node menggunakan kubelet
, gunakan Google Cloud CLI atau Terraform.
gcloud
Anda dapat menentukan setelan kustom untuk agen node Kubernetes
(kubelet
)
saat membuat node pool. Misalnya, untuk mengonfigurasi kubelet
agar menggunakan
kebijakan pengelolaan CPU statis, jalankan perintah berikut:
gcloud container aws node-pools create POOL_NAME \
--cluster CLUSTER_NAME \
--location=LOCATION \
--kubelet_config_cpu_manager_policy=static
Ganti kode berikut:
POOL_NAME
: nama untuk node pool Anda.CLUSTER_NAME
: nama cluster tempat Anda ingin menambahkan node pool.LOCATION
: zona atau region komputasi cluster.
Untuk mengetahui daftar lengkap kolom yang dapat Anda tambahkan ke perintah sebelumnya, lihat Opsi konfigurasi Kubelet.
Terraform
Anda dapat mempelajari lebih lanjut Terraform di lingkungan AWS dalam referensi node pool Terraform.
Tetapkan variabel Terraform dengan menyertakan blok berikut dalam file
variables.tf
:variable "node_pool_kubelet_config_cpu_manager" { default = "none" } variable "node_pool_kubelet_config_cpu_cfs_quota" { default = "true" } variable "node_pool_kubelet_config_cpu_cfs_quota_period" { default = "100ms" } variable "node_pool_kubelet_config_pod_pids_limit" { default = -1 }
Tambahkan blok berikut ke konfigurasi Terraform Anda:
resource "google_container_aws_node_pool" "NODE_POOL_RESOURCE_NAME" { provider = google cluster = CLUSTER_NAME name = POOL_NAME subnet_id = SUBNET_ID version = CLUSTER_VERSION location = CLUSTER_LOCATION kubelet_config { cpu_manager_policy = var.node_pool_kubelet_config_cpu_manager cpu_cfs_quota = var.node_pool_kubelet_config_cpu_cfs_quota cpu_cfs_quota_period = var.node_pool_kubelet_config_cpu_cfs_quota_period pod_pids_limit = var.node_pool_kubelet_config_pod_pids_limit } }
Ganti kode berikut:
NODE_POOL_RESOURCE_NAME
: nama resource node pool dalam template Terraform.CLUSTER_NAME
: nama cluster yang ada.POOL_NAME
: nama node pool yang akan disesuaikan.SUBNET_ID
: subnet yang ditetapkan ke node pool.CLUSTER_VERSION
: versi untuk bidang kontrol dan node cluster GKE di AWS.CLUSTER_LOCATION
: region atau zona Compute Engine cluster.
Mengonfigurasi utilitas sysctl
Untuk menyesuaikan konfigurasi sistem node menggunakan sysctl
, buat permintaan POST
ke metode
awsClusters.awsNodePools.create
.
Permintaan POST ini membuat node pool dengan penyesuaian yang Anda tentukan. Dalam
contoh berikut, parameter busy_poll
dan busy_read
dikonfigurasi ke
5.000 mikrodetik:
POST https://ENDPOINT/v1/projects/PROJECT_ID/locations/GOOGLE_CLOUD_LOCATION/CLUSTER_NAME/awsNodePools
{
"name": NODE_POOL_NAME,
"version": CLUSTER_VERSION,
"config": {
"linuxNodeConfig": {
"sysctls": {
"net.core.busy_poll": "5000",
"net.core.busy_read": "5000",
}
}
}
}
Ganti kode berikut:
ENDPOINT
: Google Cloud Endpoint layanan Anda.PROJECT_ID
: ID project Google Cloud Anda.GOOGLE_CLOUD_LOCATION
: Google Cloud lokasi untuk cluster.CLUSTER_NAME
: nama cluster tempat Anda ingin menambahkan node pool.NODE_POOL_NAME
: nama untuk node pool Anda.CLUSTER_VERSION
: nomor versi cluster Anda, misalnya, 1.31.0-gke.500.
Untuk mengetahui daftar lengkap key-value pair yang dapat Anda tambahkan ke permintaan JSON di atas, lihat Opsi konfigurasi Sysctl.
Opsi konfigurasi untuk agen kubelet
Tabel berikut menampilkan opsi kubelet
yang dapat Anda ubah.
Setelan konfigurasi Kubelet | Pembatasan | Setelan default | Deskripsi |
---|---|---|---|
kubelet_config_cpu_manager_policy |
Nilai harus none atau static
|
"none"
|
Setelan ini mengontrol kebijakan CPU Manager kubelet. Nilai default-nya adalah none yang merupakan skema afinitas CPU default, yang tidak memberikan afinitas di luar apa yang dilakukan scheduler OS secara otomatis.Jika nilai ini ditetapkan ke static , Pod dalam class Guaranteed QoS dengan permintaan CPU bilangan bulat akan ditetapkan untuk menggunakan CPU secara eksklusif. |
kubelet_config_cpu_cfs_quota |
Nilai harus true atau false
|
true
|
Setelan ini memberlakukan batas CPU Pod. Jika nilai ini ditetapkan ke false , batas CPU untuk Pod akan diabaikan.Dalam skenario tertentu, batas CPU dapat diabaikan jika Pod sensitif terhadap batas CPU. Risiko menonaktifkan cpuCFSQuota adalah bahwa Pod yang bermasalah dapat memakai resource CPU lebih banyak daripada yang semestinya.
|
kubelet_config_cpu_cfs_quota_period | Nilai harus berupa durasi waktu |
"100ms"
|
Setelan ini menetapkan nilai periode kuota CFS CPU, cpu.cfs_period_us , yang menentukan periode seberapa sering akses cgroup ke resource CPU harus dialokasikan ulang. Dengan opsi ini, Anda dapat menyesuaikan perilaku throttling CPU. |
kubelet_config_pod_pids_limit | Nilai harus antara 1024 dan 4194304 |
-1
|
Setelan ini menetapkan jumlah maksimum ID proses (PID) yang dapat digunakan oleh setiap Pod. Jika disetel pada nilai default, batas PID akan diskalakan secara otomatis berdasarkan ukuran mesin pokok. |
Opsi konfigurasi untuk utilitas sysctl
Untuk menyesuaikan performa sistem, Anda dapat mengubah atribut berikut:
net.core.busy_poll
net.core.busy_read
net.core.netdev_max_backlog
net.core.rmem_max
net.core.wmem_default
net.core.wmem_max
net.core.optmem_max
net.core.somaxconn
net.ipv4.tcp_rmem
net.ipv4.tcp_wmem
net.ipv4.tcp_tw_reuse
net.ipv6.conf.all.disable_ipv6
net.ipv6.conf.default.disable_ipv6
vm.max_map_count
Node pool Instance Spot
GKE di AWS mendukung node pool instance spot AWS sebagai fitur Pratinjau. Kumpulan node instance spot adalah kumpulan Instance Spot Amazon EC2 yang tersedia di AWS dengan biaya lebih rendah.
Instance Spot dapat memberikan penghematan biaya untuk aplikasi stateless, fault-tolerant, dan fleksibel. Namun, VM ini tidak cocok untuk workload yang tidak fleksibel, stateful, tidak toleran terhadap kesalahan, atau sangat terkait antara node instance. Instance Spot dapat diinterupsi oleh Amazon EC2 saat EC2 memerlukan kapasitas kembali, sehingga tunduk pada fluktuasi di pasar Spot. Jika workload Anda memerlukan kapasitas yang dijamin dan tidak dapat mentoleransi periode tidak tersedia sesekali, pilih node pool standar, bukan node pool instance spot.
Strategi alokasi yang digunakan di GKE di AWS berfokus pada pemilihan kumpulan Instance Spot dengan ketersediaan kapasitas tertinggi, sehingga meminimalkan risiko gangguan. Pendekatan ini sangat bermanfaat untuk workload dengan biaya gangguan yang lebih tinggi, seperti rendering gambar dan media atau Deep Learning.
Secara khusus, strategi alokasi capacityOptimized
telah diterapkan,
seperti yang dijelaskan dalam
Strategi alokasi untuk Instance Spot.
Membuat node pool Spot
Untuk membuat node pool Instance Spot, jalankan perintah berikut:
gcloud container aws node-pools create NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--spot-instance-types INSTANCE_TYPE_LIST \
--root-volume-size ROOT_VOLUME_SIZE \
--iam-instance-profile NODEPOOL_PROFILE \
--node-version NODE_VERSION \
--min-nodes MIN_NODES \
--max-nodes MAX_NODES \
--max-pods-per-node MAX_PODS_PER_NODE \
--location GOOGLE_CLOUD_LOCATION \
--subnet-id NODEPOOL_SUBNET \
--ssh-ec2-key-pair SSH_KEY_PAIR_NAME \
--config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
--tags "Name=CLUSTER_NAME-NODE_POOL_NAME"
Ganti kode berikut:
- NODE_POOL_NAME: nama yang ingin Anda tetapkan ke node pool ini.
- CLUSTER_NAME: nama cluster tempat Anda ingin melampirkan node pool ini.
- INSTANCE_TYPE_LIST: daftar jenis instance AWS EC2 yang dipisahkan koma. Node pool menyediakan instance Spot dengan jenis instance ini. Jenis instance harus memiliki arsitektur CPU yang sama, jumlah CPU yang sama, dan jumlah memori yang sama. Misalnya: "c6g.large,c6gd.large,c6gn.large,c7g.large,t4g.medium". Anda dapat menggunakan alat Amazon EC2 Instance Selector untuk menemukan jenis instance yang memiliki konfigurasi CPU dan memori yang identik.
ROOT_VOLUME_SIZE
: ukuran yang diinginkan untuk volume root setiap node, dalam GbNODEPOOL_PROFILE
: profil instance IAM untuk VM node poolNODE_VERSION
: versi Kubernetes yang akan diinstal di setiap node dalam node pool (misalnya, "1.32.4-gke.200")MIN_NODES
: jumlah minimum node yang dapat dimuat node poolMAX_NODES
: jumlah maksimum node yang dapat dimuat node poolMAX_PODS_PER_NODE
: jumlah maksimum pod yang dapat dibuat di satu node dalam poolGOOGLE_CLOUD_LOCATION
: nama lokasi Google Cloud tempat node pool ini akan dikelolaNODEPOOL_SUBNET
: ID subnet tempat node pool akan berjalan.- Tidak boleh ada tumpang-tindih antara rentang IP Pod/Layanan cluster dan jaringan subnet kumpulan node. Untuk mengetahui informasi selengkapnya tentang memilih rentang IP Pod dan Service untuk cluster Anda, lihat Memilih rentang CIDR untuk cluster Anda
- Jika subnet ini berada di luar blok CIDR utama VPC, beberapa langkah tambahan diperlukan. Untuk mengetahui informasi selengkapnya, lihat grup keamanan.
SSH_KEY_PAIR_NAME
: nama pasangan kunci SSH AWS yang dibuat untuk akses SSH (opsional)CONFIG_KMS_KEY_ARN
: Amazon Resource Name (ARN) dari kunci AWS KMS yang mengenkripsi data pengguna
Praktik terbaiknya adalah mencantumkan sejumlah jenis instance di kolom INSTANCE_TYPE_LIST. Praktik terbaik ini penting karena jika node pool dikonfigurasi hanya dengan satu jenis instance, dan jenis instance tersebut tidak tersedia di salah satu Zona Ketersediaan yang diinginkan, maka node pool tidak dapat menyediakan node baru. Hal ini dapat memengaruhi ketersediaan aplikasi Anda dan dapat menyebabkan gangguan layanan.
Perhatikan bahwa kolom spot-instance-types
tidak bisa ada pada saat yang sama dengan
kolom instance-type
. Artinya, Anda hanya dapat memberikan salah satu kolom ini, bukan keduanya.