Bantu meningkatkan halaman ini
Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Untuk berkontribusi pada panduan pengguna ini, pilih GitHub tautan Edit halaman ini di yang terletak di panel kanan setiap halaman.
Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Memigrasikan aplikasi ke grup node baru
Topik ini menjelaskan bagaimana Anda dapat membuat grup node baru, dengan anggun memigrasikan aplikasi yang ada ke grup baru, dan menghapus grup node lama dari cluster Anda. Anda dapat bermigrasi ke grup simpul baru menggunakan eksctl atau Konsol Manajemen AWS.
eksctl
Migrasikan aplikasi Anda ke grup node baru dengan eksctl
Untuk informasi selengkapnya tentang menggunakan eksctl untuk migrasi, lihat Grup nodegroup yang tidak dikelola dalam dokument eksctl
Prosedur ini membutuhkan eksctl versi 0.215.0 atau yang lebih baru. Anda dapat memeriksa versi Anda dengan perintah berikut:
eksctl version
Untuk petunjuk tentang cara menginstal atau meningkatkaneksctl, lihat Instalasi eksctl dokumentasi.
catatan
Prosedur ini hanya bekerja untuk grup klaster dan simpul yang dibuat dengan eksctl.
-
Ambil nama grup node yang ada, ganti
my-clusterdengan nama cluster Anda.eksctl get nodegroups --cluster=my-clusterContoh output adalah sebagai berikut.
CLUSTER NODEGROUP CREATED MIN SIZE MAX SIZE DESIRED CAPACITY INSTANCE TYPE IMAGE ID default standard-nodes 2019-05-01T22:26:58Z 1 4 3 t3.medium ami-05a71d034119ffc12 -
Luncurkan grup node baru
eksctldengan perintah berikut. Dalam perintah, ganti setiapexample valuedengan nilai Anda sendiri. Nomor versi tidak boleh lebih lambat dari versi Kubernetes untuk pesawat kontrol Anda. Juga, tidak boleh lebih dari dua versi minor lebih awal dari versi Kubernetes untuk pesawat kontrol Anda. Kami menyarankan Anda menggunakan versi yang sama dengan pesawat kontrol Anda.Sebaiknya blokir akses Pod ke IMDS jika kondisi berikut ini benar:
-
Anda berencana untuk menetapkan peran IAM ke semua akun layanan Kubernetes Anda sehingga Pod hanya memiliki izin minimum yang mereka butuhkan.
-
Tidak ada Pod di cluster yang memerlukan akses ke layanan metadata instans EC2 Amazon (IMDS) karena alasan lain, seperti mengambil Wilayah saat ini. AWS
Untuk informasi selengkapnya, lihat Mem batasi akses ke profil instance yang ditetapkan ke node pekerja
. Untuk memblokir akses Pod ke IMDS, tambahkan
--disable-pod-imdsopsi ke perintah berikut.catatan
Untuk lebih banyak bendera yang tersedia dan deskripsinya, lihat https://eksctl.io/.
eksctl create nodegroup \ --cluster my-cluster \ --version 1.37 \ --name standard-nodes-new \ --node-type t3.medium \ --nodes 3 \ --nodes-min 1 \ --nodes-max 4 \ --managed=false -
-
Setelah perintah sebelumnya selesai, verifikasi bahwa semua simpul Anda telah mencapai status
Readydengan perintah berikut:kubectl get nodes -
Hapus grup node asli dengan perintah berikut. Dalam perintah, ganti setiap
example valuedengan nama grup cluster dan node Anda:eksctl delete nodegroup --cluster my-cluster --name standard-nodes-old
Konsol Manajemen AWS and AWS CLI
Migrasikan aplikasi Anda ke grup node baru dengan Konsol Manajemen AWS dan AWS CLI
-
Luncurkan grup node baru dengan mengikuti langkah-langkah yang diuraikan dalam Membuat node Amazon Linux yang dikelola sendiri.
-
Setelah tumpukan Anda selesai dibuat, pilih tumpukan di konsol dan pilih Outputs.
-
Rekam NodeInstanceRole untuk grup node yang dibuat. Anda memerlukan ini untuk menambahkan simpul Amazon EKS baru ke klaster Anda.
catatan
Jika Anda melampirkan kebijakan IAM tambahan apa pun ke peran IAM grup simpul lama, lampirkan kebijakan yang sama ke peran IAM grup simpul baru Anda untuk mempertahankan fungsionalitas tersebut pada grup baru. Ini berlaku untuk Anda jika Anda menambahkan izin untuk Kubernetes Cluster Autosc
aler, misalnya. -
Perbarui grup keamanan untuk kedua grup simpul sehingga mereka dapat berkomunikasi satu sama lain. Untuk informasi selengkapnya, lihat Lihat persyaratan grup keamanan Amazon EKS untuk cluster.
-
Catat ID grup keamanan untuk kedua grup simpul. Ini ditampilkan sebagai NodeSecurityGroup nilai dalam output tum AWS CloudFormation pukan.
Anda dapat menggunakan perintah AWS CLI berikut untuk mendapatkan ID grup keamanan dari nama tumpukan. Dalam perintah ini,
oldNodesadalah nama AWS CloudFormation tumpukan untuk tumpukan simpul lama Anda, dannewNodesmerupakan nama tumpukan yang Anda migrasi. Ganti semuaexample valuedengan nilai-nilai Anda sendiri.oldNodes="old_node_CFN_stack_name" newNodes="new_node_CFN_stack_name" oldSecGroup=$(aws cloudformation describe-stack-resources --stack-name $oldNodes \ --query 'StackResources[?ResourceType==`AWS::EC2::SecurityGroup`].PhysicalResourceId' \ --output text) newSecGroup=$(aws cloudformation describe-stack-resources --stack-name $newNodes \ --query 'StackResources[?ResourceType==`AWS::EC2::SecurityGroup`].PhysicalResourceId' \ --output text) -
Tambahkan aturan masuk ke setiap grup keamanan simpul sehingga mereka menerima lalu lintas dari satu sama lain.
Perintah AWS CLI berikut menambahkan aturan masuk ke setiap grup keamanan yang memungkinkan semua lalu lintas pada semua protokol dari grup keamanan lainnya. Konfigurasi ini memungkinkan Pod di setiap grup node berkomunikasi satu sama lain saat Anda memigrasikan beban kerja Anda ke grup baru.
aws ec2 authorize-security-group-ingress --group-id $oldSecGroup \ --source-group $newSecGroup --protocol -1 aws ec2 authorize-security-group-ingress --group-id $newSecGroup \ --source-group $oldSecGroup --protocol -1
-
-
Edit configmap
aws-authuntuk memetakan peran instans simpul baru di RBAC.kubectl edit configmap -n kube-system aws-authTambahkan entri
mapRolesbaru untuk grup simpul baru.apiVersion: v1 data: mapRoles: | - rolearn: ARN of instance role (not instance profile) username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes> - rolearn: arn:aws: iam::111122223333:role/nodes-1-16-NodeInstanceRole-U11V27W93CX5 username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodesGanti
ARN of instance role (not instance profile)cuplikan dengan NodeInstanceRole nilai yang Anda rekam pada langkah [node-instance-role-step] sebelumnya. Kemudian, simpan dan tutup file untuk menerapkan configmap yang diperbarui. -
Perhatikan status simpul Anda dan tunggu simpul baru Anda bergabung dengan klaster dan mencapai status
Readytersebut.kubectl get nodes --watch -
(Opsional) Jika Anda menggunakan Kubernetes Cluster Autoscaler
, skala penerapan hingga nol (0) replika untuk menghindari tindakan penskalaan yang bertentangan. kubectl scale deployments/cluster-autoscaler --replicas=0 -n kube-system -
Gunakan perintah berikut untuk menodai setiap node yang ingin Anda hapus.
NoScheduleIni agar Pod baru tidak dijadwalkan atau dijadwal ulang pada node yang Anda ganti. Untuk informasi selengkapnya, lihat Taints and Tolerationsdalam dokumentasi Kubernetes. kubectl taint nodes node_name key=value:NoScheduleJika Anda memutakhirkan node Anda ke versi Kubernetes baru, Anda dapat mengidentifikasi dan menodai semua node dari versi Kubernetes tertentu (dalam hal ini,
1.35) dengan cuplikan kode berikut. Nomor versi tidak boleh lebih lambat dari versi Kubernetes dari pesawat kontrol Anda. Ini juga tidak boleh lebih dari dua versi minor lebih awal dari versi Kubernetes dari pesawat kontrol Anda. Kami menyarankan Anda menggunakan versi yang sama dengan pesawat kontrol Anda.K8S_VERSION=1.35 nodes=$(kubectl get nodes -o jsonpath="{.items[?(@.status.nodeInfo.kubeletVersion==\"v$K8S_VERSION\")].metadata.name}") for node in ${nodes[@]} do echo "Tainting $node" kubectl taint nodes $node key=value:NoSchedule done -
Tentukan penyedia DNS cluster Anda.
kubectl get deployments -l k8s-app=kube-dns -n kube-systemContoh output adalah sebagai berikut. Cluster ini menggunakan CoreDNS untuk resolusi DNS, tetapi cluster Anda dapat kembali sebagai gantinya)
kube-dns:NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE coredns 1 1 1 1 31m -
Jika deployment Anda saat ini berjalan kurang dari dua replika, skalakan deployment menjadi dua replika. Ganti
corednsdengankubednsjika output perintah Anda sebelumnya mengembalikannya.kubectl scale deployments/coredns --replicas=2 -n kube-system -
Keluarkan setiap simpul yang Anda ingin hapus dari klaster Anda dengan perintah berikut:
kubectl drain node_name --ignore-daemonsets --delete-emptydir-dataJika Anda memutakhirkan node Anda ke versi Kubernetes baru, identifikasi dan kuras semua node dari versi Kubernetes tertentu (dalam hal ini,
1.35) dengan cuplikan kode berikut.K8S_VERSION=1.35 nodes=$(kubectl get nodes -o jsonpath="{.items[?(@.status.nodeInfo.kubeletVersion==\"v$K8S_VERSION\")].metadata.name}") for node in ${nodes[@]} do echo "Draining $node" kubectl drain $node --ignore-daemonsets --delete-emptydir-data done -
Setelah node lama selesai dikeringkan, cabut aturan masuk grup keamanan yang Anda otorisasi sebelumnya. Kemudian, hapus tum AWS CloudFormation pukan untuk mengakhiri instance.
catatan
Jika Anda melampirkan kebijakan IAM tambahan ke peran IAM grup simpul lama Anda, seperti menambahkan izin untuk Autoscaler Cluster Kubernetes
, lepaskan kebijakan tambahan tersebut dari peran sebelum Anda dapat menghapus tumpukan Anda. AWS CloudFormation -
Cabut aturan masuk yang Anda buat untuk grup keamanan node sebelumnya. Dalam perintah ini,
oldNodesadalah nama AWS CloudFormation tumpukan untuk tumpukan simpul lama Anda, dannewNodesmerupakan nama tumpukan yang Anda migrasi.oldNodes="old_node_CFN_stack_name" newNodes="new_node_CFN_stack_name" oldSecGroup=$(aws cloudformation describe-stack-resources --stack-name $oldNodes \ --query 'StackResources[?ResourceType==`AWS::EC2::SecurityGroup`].PhysicalResourceId' \ --output text) newSecGroup=$(aws cloudformation describe-stack-resources --stack-name $newNodes \ --query 'StackResources[?ResourceType==`AWS::EC2::SecurityGroup`].PhysicalResourceId' \ --output text) aws ec2 revoke-security-group-ingress --group-id $oldSecGroup \ --source-group $newSecGroup --protocol -1 aws ec2 revoke-security-group-ingress --group-id $newSecGroup \ --source-group $oldSecGroup --protocol -1 -
Buka konsol AWS CloudFormation
. -
Pilih tumpukan simpul lama Anda.
-
Pilih Hapus.
-
Di kotak dialog Hapus konfirmasi tumpukan, pilih H apus tumpukan.
-
-
Edit
aws-authconfigmap untuk menghapus peran instans simpul lama dari RBAC.kubectl edit configmap -n kube-system aws-authHapus
mapRolesentri untuk grup simpul lama.apiVersion: v1 data: mapRoles: | - rolearn: arn:aws: iam::111122223333:role/nodes-1-16-NodeInstanceRole-W70725MZQFF8 username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes - rolearn: arn:aws: iam::111122223333:role/nodes-1-15-NodeInstanceRole-U11V27W93CX5 username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes>Simpan dan tutup file untuk menerapkan configmap yang diperbarui.
-
(Opsional) Jika Anda menggunakan Autoscaler Klaster
Kubernetes, skalakan kembali deployment ke satu replika. catatan
Anda juga harus menandai grup Auto Scaling baru Anda dengan tepat (misalnya,
k8s.io/cluster-autoscaler/enabled,k8s.io/cluster-autoscaler/my-cluster) dan memperbarui perintah untuk penerapan Autoscaler Cluster Anda untuk menunjuk ke grup Auto Scaling yang baru ditandai. Untuk informasi selengkapnya, lihat Cluster Autoscaler aktif. AWSkubectl scale deployments/cluster-autoscaler --replicas=1 -n kube-system -
(Opsional) Pastikan Anda menggunakan plugin Amazon VPC CNI versi terbaru untuk Kubernetes.
Anda mungkin perlu memperbarui versi CNI untuk menggunakan jenis instans terbaru yang didukung. Untuk informasi selengkapnya, lihat Tetapkan IP ke Pod dengan Amazon VPC CNI. -
Jika cluster Anda menggunakan
kube-dnsuntuk resolusi DNS (lihat[migrate-determine-dns-step]), skalakube-dnspenerapan ke satu replika.kubectl scale deployments/kube-dns --replicas=1 -n kube-system