Bantu tingkatkan halaman ini
Ingin berkontribusi pada panduan pengguna ini? Gulir ke bagian bawah halaman ini dan pilih Edit halaman ini GitHub. Kontribusi Anda akan membantu membuat panduan pengguna kami lebih baik untuk semua orang.
Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Memecahkan masalah dengan EKS cluster dan node Amazon
Bab ini mencakup beberapa kesalahan umum yang mungkin Anda lihat saat menggunakan Amazon EKS dan cara mengatasinya. Jika Anda perlu memecahkan masalah EKS area Amazon tertentu, lihat bagian terpisah Pemecahan masalah IAMMemecahkan masalah Konektor Amazon EKS, dan Pemecahan Masalah untuk ADOT
Untuk informasi pemecahan masalah lainnya, lihat konten Pusat Pengetahuan tentang Amazon Elastic Kubernetes Service di
Kapasitas tidak mencukupi
Jika Anda menerima kesalahan berikut saat mencoba membuat EKS klaster Amazon, maka salah satu Availability Zone yang Anda tentukan tidak memiliki kapasitas yang cukup untuk mendukung klaster.
Cannot create cluster 'example-cluster' because region-1d, the targeted
Availability Zone, does not currently have sufficient capacity to support the cluster. Retry
and choose from these Availability Zones: region-1a, region-1b, region-1c
Coba lagi membuat klaster Anda dengan subnet di klaster Anda VPC yang di-host di Availability Zones yang ditampilkan oleh pesan galat ini.
Ada Availability Zone dimana cluster tidak dapat berada. Bandingkan Availability Zones tempat subnet Anda berada dengan daftar Availability Zone di. Persyaratan dan pertimbangan subnet
Simpul gagal untuk bergabung dengan klaster
Ada beberapa alasan umum yang mencegah simpul bergabung dengan klaster:
-
Jika node adalah node yang dikelola, Amazon EKS menambahkan entri ke
aws-auth
ConfigMap
saat Anda membuat grup node. Jika entri dihapus atau dimodifikasi, maka Anda perlu menambahkannya kembali. Untuk informasi lebih lanjut, masukkaneksctl create iamidentitymapping --help
di terminal Anda. Anda dapat melihataws-auth
ConfigMap
entri Anda saat ini dengan menggantimy-cluster
dalam perintah berikut dengan nama cluster Anda dan kemudian menjalankan perintah yang dimodifikasi:eksctl get iamidentitymapping --cluster
. ARNPeran yang Anda tentukan tidak dapat menyertakan jalur selainmy-cluster
/
. Misalnya, jika nama peran Andadevelopment/apps/my-role
, Anda harus mengubahnya menjadimy-role
saat menentukan ARN untuk peran tersebut. Pastikan Anda menentukan IAM peran node ARN (bukan profil instanceARN).Jika node dikelola sendiri, dan Anda belum membuat entri akses untuk IAM peran node, jalankan perintah yang sama yang terdaftar untuk node terkelola. ARN Jika Anda telah membuat entri akses untuk IAM peran node Anda, maka itu mungkin tidak dikonfigurasi dengan benar dalam entri akses. ARN Pastikan bahwa IAM peran node ARN (bukan profil instanceARN) ditentukan sebagai prinsipal ARN dalam
aws-auth
ConfigMap
entri atau entri akses Anda. Untuk informasi selengkapnya tentang entri akses, lihatBerikan akses kepada IAM pengguna Kubernetes dengan entri EKS akses. -
AWS CloudFormation Template ClusterNamedi node Anda tidak sama persis dengan nama cluster yang Anda inginkan untuk bergabung dengan node Anda. Memasukkan nilai yang salah ke bidang ini menyebabkan konfigurasi yang salah pada file
/var/lib/kubelet/kubeconfig
simpul, dan simpul tidak akan bergabung dengan klaster. -
Simpul tidak ditandai sebagai dimiliki oleh klaster. Simpul Anda harus memiliki tanda berikut yang diterapkan untuk mereka, di mana
diganti dengan nama klaster Anda.my-cluster
Kunci Nilai kubernetes.io/cluster/
my-cluster
owned
-
Simpul mungkin tidak dapat mengakses klaster menggunakan alamat IP publik. Pastikan bahwa simpul yang di-deploy di subnet publik memiliki alamat IP publik. Jika tidak, Anda dapat mengaitkan alamat IP Elastis ke simpul setelah diluncurkan. Untuk informasi selengkapnya, lihat Mengaitkan alamat IP Elastis dengan instans berjalan atau antarmuka jaringan. Jika subnet publik tidak diatur secara otomatis untuk menetapkan alamat IP publik ke instans yang di-deploy untuk itu, maka kami merekomendasikan untuk mengaktifkan pengaturan tersebut. Untuk informasi selengkapnya, lihat Memodifikasi atribut
IPv4
pengalamatan publik untuk subnet Anda. Jika node dikerahkan ke subnet pribadi, maka subnet harus memiliki rute ke NAT gateway yang memiliki alamat IP publik yang ditetapkan untuk itu. -
AWS STS Titik akhir untuk tempat Wilayah AWS Anda menerapkan node tidak diaktifkan untuk akun Anda. Untuk mengaktifkan wilayah, lihat Mengaktifkan dan menonaktifkan AWS STS dalam file. Wilayah AWS
-
Node tidak memiliki DNS entri pribadi, sehingga
kubelet
log berisinode "" not found
kesalahan. Pastikan bahwa VPC tempat node dibuat memiliki nilai yang ditetapkan untukdomain-name
dandomain-name-servers
sepertiOptions
dalam aDHCP options set
. Nilai defaultnya adalahdomain-name:<region>.compute.internal
dandomain-name-servers:AmazonProvidedDNS
. Untuk informasi selengkapnya, lihat set DHCP opsi di Panduan VPC Pengguna Amazon. -
Jika node dalam grup node terkelola tidak terhubung ke cluster dalam waktu 15 menit, masalah kesehatan “NodeCreationFailure” akan dipancarkan dan status konsol akan disetel ke.
Create failed
Untuk Windows AMIsyang memiliki waktu peluncuran lambat, masalah ini dapat diselesaikan menggunakan peluncuran cepat.
Untuk mengidentifikasi dan memecahkan masalah penyebab umum yang mencegah node pekerja bergabung dengan cluster, Anda dapat menggunakan runbook. AWSSupport-TroubleshootEKSWorkerNode
Untuk informasi selengkapnya, lihat AWSSupport-TroubleshootEKSWorkerNode
di referensi buku runbook Otomatisasi AWS Systems Manager
.
Tidak sah atau akses ditolak (kubectl
)
Jika Anda menerima salah satu kesalahan berikut saat menjalankan kubectl
perintah, maka Anda belum kubectl
mengonfigurasi dengan benar untuk Amazon EKS atau kredensi untuk IAM prinsipal (peran atau pengguna) yang Anda gunakan jangan dipetakan ke Kubernetes nama pengguna yang memiliki izin yang cukup untuk Kubernetes objek di EKS cluster Amazon Anda.
-
could not get token: AccessDenied: Access denied
-
error: You must be logged in to the server (Unauthorized)
-
error: the server doesn't have a resource type "svc"
Ini bisa disebabkan oleh salah satu alasan berikut:
-
Cluster dibuat dengan kredensi untuk satu IAM prinsipal dan
kubectl
dikonfigurasi untuk menggunakan kredensi untuk prinsipal yang berbeda. IAM Untuk mengatasi hal ini, perbaruikube config
file Anda untuk menggunakan kredensyal yang membuat klaster. Untuk informasi selengkapnya, lihat Hubungkan kubectl ke sebuah EKS cluster dengan membuat kubeconfig file. -
Jika klaster Anda memenuhi persyaratan platform minimum di bagian prasyaratBerikan akses kepada IAM pengguna Kubernetes dengan entri EKS akses, entri akses tidak ada dengan kepala sekolah Anda. IAM Jika ada, itu tidak memiliki yang diperlukan Kubernetes nama grup ditentukan untuk itu, atau tidak memiliki kebijakan akses yang tepat terkait dengannya. Untuk informasi selengkapnya, lihat Berikan akses kepada IAM pengguna Kubernetes dengan entri EKS akses.
-
Jika klaster Anda tidak memenuhi persyaratan platform minimum diBerikan akses kepada IAM pengguna Kubernetes dengan entri EKS akses, entri dengan IAM kepala sekolah Anda tidak ada di
aws-auth
ConfigMap
. Jika ada, itu tidak dipetakan ke Kubernetes nama grup yang terikat pada KubernetesRole
atauClusterRole
dengan izin yang diperlukan. Untuk informasi lebih lanjut tentang Kubernetes objek otorisasi berbasis peran (RBAC), lihat Menggunakan RBACotorisasi di Kubernetes dokumentasi. Anda dapat melihat aws-auth
ConfigMap
entri Anda saat ini dengan menggantimy-cluster
dalam perintah berikut dengan nama cluster Anda dan kemudian menjalankan perintah yang dimodifikasi:eksctl get iamidentitymapping --cluster
. Jika entri untuk dengan IAM kepala sekolah Anda tidak ada dimy-cluster
ConfigMap
, masukkaneksctl create iamidentitymapping --help
di terminal Anda untuk mempelajari cara membuatnya. ARN
Jika Anda menginstal dan mengonfigurasi AWS CLI, Anda dapat mengonfigurasi IAM kredensyal yang Anda gunakan. Untuk informasi lebih lanjut, lihat Mengonfigurasi AWS CLI di Panduan Pengguna AWS Command Line Interface . Anda juga dapat mengonfigurasi kubectl
untuk menggunakan IAM peran, jika Anda mengambil IAM peran untuk mengakses Kubernetes objek di cluster Anda. Untuk informasi selengkapnya, lihat Hubungkan kubectl ke sebuah EKS cluster dengan membuat kubeconfig file.
hostname doesn't match
Versi Python sistem Anda harus 2.7.9
atau lebih baru. Jika tidak, Anda menerima hostname doesn't match
kesalahan dengan AWS CLI panggilan ke AmazonEKS. Untuk informasi selengkapnya, lihat Apa itu kesalahan “nama host tidak cocok”?
getsockopt: no route to
host
Docker berjalan dalam 172.17.0.0/16
CIDR kisaran di EKS cluster Amazon. Kami menyarankan agar VPC subnet klaster Anda tidak tumpang tindih dengan rentang ini. Jika tidak, Anda akan menerima kesalahan berikut:
Error: : error upgrading connection: error dialing backend: dial tcp 172.17.<nn>.<nn>:10250: getsockopt: no route to host
Instances failed to join the Kubernetes
cluster
Jika Anda menerima kesalahan Instances failed to join the Kubernetes cluster
dalam AWS Management Console, pastikan bahwa akses endpoint pribadi kluster diaktifkan, atau bahwa Anda telah mengonfigurasi CIDR blok dengan benar untuk akses titik akhir publik. Untuk informasi selengkapnya, lihat Kontrol akses jaringan ke titik akhir API server cluster.
Kode kesalahan grup node terkelola
Jika grup node terkelola Anda mengalami masalah kesehatan perangkat keras, Amazon EKS mengembalikan kode kesalahan untuk membantu Anda mendiagnosis masalah tersebut. Pemeriksaan kesehatan ini tidak mendeteksi masalah perangkat lunak karena didasarkan pada pemeriksaan EC2 kesehatan Amazon. Daftar berikut menjelaskan kode kesalahan.
- AccessDenied
-
Amazon EKS atau satu atau beberapa node terkelola Anda gagal mengautentikasi atau mengotorisasi dengan Anda Kubernetes APIserver kluster. Untuk informasi lebih lanjut tentang menyelesaikan penyebab umum, lihatMemperbaiki penyebab umum AccessDenied kesalahan untuk grup node terkelola. Privat Windows AMIsjuga dapat menyebabkan kode kesalahan ini di samping pesan
Not authorized for images
kesalahan. Untuk informasi selengkapnya, lihat Not authorized for images. - AmiIdNotFound
-
Kami tidak dapat menemukan AMI ID yang terkait dengan template peluncuran Anda. Pastikan bahwa AMI ada dan dibagikan dengan akun Anda.
- AutoScalingGroupNotFound
-
Kami tidak dapat menemukan grup Auto Scaling yang terkait dengan grup node terkelola. Anda dapat membuat ulang grup Auto Scaling dengan pengaturan yang sama untuk memulihkan.
- ClusterUnreachable
-
Amazon EKS atau satu atau beberapa node terkelola Anda tidak dapat berkomunikasi dengan Anda Kubernetes APIserver kluster. Ini dapat terjadi jika ada gangguan jaringan atau jika API server menghentikan waktu pemrosesan permintaan.
- Ec2 SecurityGroupNotFound
-
Kami tidak dapat menemukan grup keamanan cluster untuk cluster. Anda harus membuat ulang klaster Anda.
- Ec2 SecurityGroupDeletionFailure
-
Kami tidak dapat menghapus grup keamanan akses jarak jauh untuk grup node terkelola Anda. Menghapus dependensi dari grup keamanan.
- Ec2 LaunchTemplateNotFound
-
Kami tidak dapat menemukan template EC2 peluncuran Amazon untuk grup node terkelola Anda. Anda harus membuat ulang grup node Anda untuk memulihkan.
- Ec2 LaunchTemplateVersionMismatch
-
Versi template EC2 peluncuran Amazon untuk grup node terkelola Anda tidak cocok dengan versi yang EKS dibuat Amazon. Anda mungkin dapat kembali ke versi yang EKS dibuat Amazon untuk dipulihkan.
- IamInstanceProfileNotFound
-
Kami tidak dapat menemukan profil IAM instance untuk grup node terkelola Anda. Anda mungkin dapat membuat ulang profil instans dengan pengaturan yang sama untuk memulihkan.
- IamNodeRoleNotFound
-
Kami tidak dapat menemukan IAM peran untuk grup node terkelola Anda. Anda mungkin dapat membuat ulang IAM peran dengan pengaturan yang sama untuk memulihkan.
- AsgInstanceLaunchFailures
-
Grup Auto Scaling Anda mengalami kegagalan saat mencoba meluncurkan instance.
- NodeCreationFailure
-
Instans yang diluncurkan tidak dapat mendaftar dengan EKS kluster Amazon Anda. Penyebab umum kegagalan ini adalah izin IAMperan node yang tidak mencukupi atau kurangnya akses internet keluar untuk node. Node Anda harus memenuhi salah satu dari persyaratan berikut:
-
Mampu mengakses internet menggunakan alamat IP publik. Kelompok keamanan yang terkait dengan subnet tempat node berada harus mengizinkan komunikasi. Untuk informasi selengkapnya, silakan lihat Persyaratan dan pertimbangan subnet dan Lihat persyaratan grup EKS keamanan Amazon untuk klaster.
-
Node Anda dan VPC harus memenuhi persyaratan diMenyebarkan kluster pribadi dengan akses internet terbatas.
-
- InstanceLimitExceeded
-
AWS Akun Anda tidak dapat meluncurkan instance lagi dari jenis instans yang ditentukan. Anda mungkin dapat meminta peningkatan batas EC2 instans Amazon untuk dipulihkan.
- InsufficientFreeAddresses
-
Satu atau beberapa subnet yang terkait dengan grup node terkelola Anda tidak memiliki cukup alamat IP yang tersedia untuk node baru.
- InternalFailure
-
Kesalahan ini biasanya disebabkan oleh masalah sisi EKS server Amazon.
Penyebab paling umum kesalahan AccessDenied
saat melakukan pengoperasian pada grup simpul yang terkelola adalah hilangnya eks:node-manager
ClusterRole
atau ClusterRoleBinding
. Amazon EKS menyiapkan sumber daya ini di klaster Anda sebagai bagian dari orientasi dengan grup node terkelola, dan ini diperlukan untuk mengelola grup node.
ClusterRole
mungkin berubah seiring berjalannya waktu, tetapi seharusnya terlihat serupa dengan contoh berikut:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: eks:node-manager rules: - apiGroups: - '' resources: - pods verbs: - get - list - watch - delete - apiGroups: - '' resources: - nodes verbs: - get - list - watch - patch - apiGroups: - '' resources: - pods/eviction verbs: - create
ClusterRoleBinding
mungkin berubah seiring berjalannya waktu, tetapi seharusnya terlihat serupa dengan contoh berikut:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: eks:node-manager roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: eks:node-manager subjects: - apiGroup: rbac.authorization.k8s.io kind: User name: eks:node-manager
Verifikasi bahwa eks:node-manager
ClusterRole
ada.
kubectl describe clusterrole eks:node-manager
Jika ada, membandingkan output dengan contoh ClusterRole
sebelumnya.
Verifikasi bahwa eks:node-manager
ClusterRoleBinding
ada.
kubectl describe clusterrolebinding eks:node-manager
Jika ada, bandingkan output dengan contoh ClusterRoleBinding
sebelumnya.
Jika Anda telah mengidentifikasi ClusterRole
atau ClusterRoleBinding
yang hilang atau rusak sebagai penyebab AcessDenied
ketika meminta pengoperasian grup simpul yang terkelola, Anda dapat mengembalikannya. Simpan isi berikut ke file bernama
.eks-node-manager-role.yaml
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: eks:node-manager rules: - apiGroups: - '' resources: - pods verbs: - get - list - watch - delete - apiGroups: - '' resources: - nodes verbs: - get - list - watch - patch - apiGroups: - '' resources: - pods/eviction verbs: - create --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: eks:node-manager roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: eks:node-manager subjects: - apiGroup: rbac.authorization.k8s.io kind: User name: eks:node-manager
Terapkan file.
kubectl apply -f
eks-node-manager-role.yaml
Coba lagi mengoperasikan grup simpul untuk melihat apakah itu menyelesaikan masalah Anda.
Not authorized for
images
Salah satu penyebab potensial pesan Not authorized for images
kesalahan adalah menggunakan Amazon pribadi EKS Windows AMIuntuk meluncurkan Windows kelompok simpul terkelola. Setelah merilis baru Windows AMIs, AWS membuat AMIs yang lebih tua dari 4 bulan pribadi, yang membuat mereka tidak lagi dapat diakses. Jika grup node terkelola Anda menggunakan private Windows AMI, pertimbangkan untuk memperbarui Windows grup simpul terkelola. Meskipun kami tidak dapat menjamin bahwa kami dapat menyediakan akses ke AMIs yang telah dibuat pribadi, Anda dapat meminta akses dengan mengajukan tiket ke AWS Support. Untuk informasi selengkapnya, lihat Tambalan, pembaruan keamanan, dan AMI IDs di Panduan EC2 Pengguna Amazon.
Node dalam NotReady
keadaan
Jika node Anda memasuki NotReady
status, ini mungkin menunjukkan bahwa node tidak sehat dan tidak tersedia untuk menjadwalkan baru Pods. Hal ini dapat terjadi karena berbagai alasan, seperti node kekurangan sumber daya yang cukup untukCPU, memori, atau ruang disk yang tersedia.
Untuk Amazon EKS dioptimalkan Windows AMIs, tidak ada reservasi untuk sumber daya komputasi yang ditentukan secara default dalam
konfigurasi. Untuk membantu mencegah masalah sumber daya, Anda dapat memesan sumber daya komputasi untuk proses sistem kubelet
dengan memberikan nilai konfigurasi untuk kubelet
kube-reserved
system-reserved
-KubeletExtraArgs
baris perintah dalam skrip bootstrap. Untuk informasi selengkapnya, lihat Reserve Compute Resources for System Daemon
CNIalat pengumpulan log
Bagian Amazon VPC CNI plugin for Kubernetes memiliki skrip pemecahan masalah sendiri yang tersedia di node di. /opt/cni/bin/aws-cni-support.sh
Anda dapat menggunakan skrip untuk mengumpulkan log diagnostik untuk kasus dukungan dan pemecahan masalah umum.
Menggunakan perintah berikut ini untuk menjalankan skrip di simpul Anda:
sudo bash /opt/cni/bin/aws-cni-support.sh
catatan
Jika skrip tidak ada di lokasi itu, maka CNI penampung gagal dijalankan. Anda dapat mengunduh dan menjalankan skrip secara manual dengan perintah berikut:
curl -O https://raw.githubusercontent.com/awslabs/amazon-eks-ami/master/log-collector-script/linux/eks-log-collector.sh sudo bash eks-log-collector.sh
Skrip mengumpulkan informasi diagnostik berikut. CNIVersi yang telah Anda gunakan bisa lebih awal dari versi skrip.
This is version 0.6.1. New versions can be found at https://github.com/awslabs/amazon-eks-ami
Trying to collect common operating system logs...
Trying to collect kernel logs...
Trying to collect mount points and volume information...
Trying to collect SELinux status...
Trying to collect iptables information...
Trying to collect installed packages...
Trying to collect active system services...
Trying to collect Docker daemon information...
Trying to collect kubelet information...
Trying to collect L-IPAMD information...
Trying to collect sysctls information...
Trying to collect networking information...
Trying to collect CNI configuration information...
Trying to collect running Docker containers and gather container data...
Trying to collect Docker daemon logs...
Trying to archive gathered information...
Done... your bundled logs are located in /var/log/eks_i-0717c9d54b6cfaa19_2020-03-24_0103-UTC_0.6.1
.tar.gz
Informasi diagnostik dikumpulkan dan disimpan di:
/var/log/
eks_i-0717c9d54b6cfaa19_2020-03-24_0103-UTC_0.6.1
.tar.gz
Jaringan waktu aktif kontainer belum siap
Anda mungkin mendapatkan kesalahan Container runtime network not ready
dan otorisasi kesalahan yang mirip dengan berikut ini:
4191 kubelet.go:2130] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
4191 reflector.go:205] k8s.io/kubernetes/pkg/kubelet/kubelet.go:452: Failed to list *v1.Service: Unauthorized
4191 kubelet_node_status.go:106] Unable to register node "ip-10-40-175-122.ec2.internal" with API server: Unauthorized
4191 reflector.go:205] k8s.io/kubernetes/pkg/kubelet/kubelet.go:452: Failed to list *v1.Service: Unauthorized
Ini dapat terjadi karena salah satu alasan berikut:
-
Anda juga tidak memiliki
aws-auth
ConfigMap
di klaster Anda atau tidak menyertakan entri untuk IAM peran yang Anda konfigurasikan dengan node Anda.ConfigMap
Entri ini diperlukan jika node Anda memenuhi salah satu kriteria berikut:-
Node terkelola dalam cluster dengan apa pun Kubernetes atau versi platform.
-
Node yang dikelola sendiri di cluster yang lebih awal dari salah satu versi platform yang tercantum di bagian prasyarat topik. Berikan akses kepada IAM pengguna Kubernetes dengan entri EKS akses
Untuk mengatasi masalah ini, lihat entri yang ada di Anda
ConfigMap
dengan menggantimy-cluster
dalam perintah berikut dengan nama cluster Anda dan kemudian menjalankan perintah yang dimodifikasi:eksctl get iamidentitymapping --cluster
. Jika Anda menerima pesan kesalahan dari perintah, itu mungkin karena klaster Anda tidak memiliki filemy-cluster
aws-auth
ConfigMap
. Perintah berikut menambahkan entri keConfigMap
. JikaConfigMap
tidak ada, perintah juga membuatnya. Ganti111122223333
dengan Akun AWS ID untuk IAM peran danmyAmazonEKSNodeRole
dengan nama peran node Anda.eksctl create iamidentitymapping --cluster
my-cluster
\ --arn arn:aws:iam::111122223333
:role/myAmazonEKSNodeRole
--group system:bootstrappers,system:nodes \ --username system:node:{{EC2PrivateDNSName}}ARNPeran yang Anda tentukan tidak dapat menyertakan jalur selain
/
. Misalnya, jika nama peran Anda adalahdevelopment/apps/my-role
, Anda harus mengubahnya menjadimy-role
saat menentukan ARN peran. Pastikan Anda menentukan IAM peran node ARN (bukan profil instanceARN). -
Node yang dikelola sendiri berada dalam klaster dengan versi platform pada versi minimum yang tercantum dalam prasyarat dalam Berikan akses kepada IAM pengguna Kubernetes dengan entri EKS akses topik, tetapi entri tidak tercantum dalam
aws-auth
ConfigMap
(lihat item sebelumnya) untuk peran node atau entri akses tidak ada untuk IAM peran tersebut. Untuk mengatasi masalah ini, lihat entri akses yang ada dengan menggantimy-cluster
dalam perintah berikut dengan nama cluster Anda dan kemudian menjalankan perintah yang dimodifikasi:aws eks list-access-entries --cluster-name
. Perintah berikut menambahkan entri akses untuk IAM peran node. Gantimy-cluster
111122223333
dengan Akun AWS ID untuk IAM peran danmyAmazonEKSNodeRole
dengan nama peran node Anda. Jika Anda memiliki node Windows, gantiEC2_Linux
denganEC2_Windows
. Pastikan Anda menentukan IAM peran node ARN (bukan profil instanceARN).aws eks create-access-entry --cluster-name
my-cluster
--principal-arn arn:aws:iam::111122223333
:role/myAmazonEKSNodeRole
--typeEC2_Linux
TLSbatas waktu jabat tangan
Ketika sebuah node tidak dapat membuat koneksi ke titik akhir API server publik, Anda mungkin melihat kesalahan yang mirip dengan kesalahan berikut.
server.go:233] failed to run Kubelet: could not init cloud provider "aws": error finding instance i-1111f2222f333e44c
: "error listing AWS instances: \"RequestError: send request failed\\ncaused by: Post net/http: TLS handshake timeout\""
kubelet
Proses ini akan terus respawn dan menguji endpoint server. API Kesalahan juga dapat terjadi sementara selama prosedur yang performa update klaster bergulir di bidang kendali, seperti perubahan konfigurasi atau versi update.
Untuk mengatasi masalah itu, memeriksa tabel rute dan grup keamanan untuk memastikan bahwa lalu lintas dari simpul dapat mencapai titik akhir publik.
InvalidClientTokenId
Jika Anda menggunakan IAM peran untuk akun layanan untuk Pod atau DaemonSet
diterapkan ke cluster di China Wilayah AWS, dan belum menyetel variabel AWS_DEFAULT_REGION
lingkungan dalam spesifikasi, Pod atau DaemonSet
mungkin menerima kesalahan berikut:
An error occurred (InvalidClientTokenId) when calling the GetCallerIdentity operation: The security token included in the request is invalid
Untuk mengatasi masalah ini, Anda perlu menambahkan variabel AWS_DEFAULT_REGION
lingkungan ke Pod atau DaemonSet
spesifikasi, seperti yang ditunjukkan pada contoh berikut Pod spesifikasi.
apiVersion: v1 kind: Pod metadata: name: envar-demo labels: purpose: demonstrate-envars spec: containers: - name: envar-demo-container image: gcr.io/google-samples/node-hello:1.0 env: - name: AWS_DEFAULT_REGION value: "
region-code
"
Grup node harus cocok Kubernetes versi sebelum memutakhirkan bidang kontrol
Sebelum Anda meng-upgrade pesawat kontrol ke yang baru Kubernetes versi, versi minor dari node terkelola dan Fargate di cluster Anda harus sama dengan versi versi pesawat kontrol Anda saat ini. Amazon EKS update-cluster-version
API menolak permintaan hingga Anda memutakhirkan semua node yang EKS dikelola Amazon ke versi cluster saat ini. Amazon EKS menyediakan APIs untuk memutakhirkan node terkelola. Untuk informasi tentang memutakhirkan grup node terkelola Kubernetes versi, lihatMemperbarui grup node terkelola untuk klaster Anda. Untuk memutakhirkan versi simpul Fargate, hapus pod yang diwakili oleh node dan menerapkan kembali pod setelah Anda meng-upgrade pesawat kontrol Anda. Untuk informasi selengkapnya, lihat Perbarui klaster yang ada ke versi Kubernetes baru.
Saat meluncurkan banyak node, ada Too
Many Requests
kesalahan
Jika Anda meluncurkan banyak node secara bersamaan, Anda mungkin melihat pesan kesalahan di log eksekusi data EC2 pengguna Amazon yang mengatakanToo Many
Requests
. Ini dapat terjadi karena bidang kontrol sedang kelebihan beban dengan describeCluster
panggilan. Kelebihan beban mengakibatkan pelambatan, node gagal menjalankan skrip bootstrap, dan node gagal bergabung dengan cluster sama sekali.
Pastikan bahwa--apiserver-endpoint
,--b64-cluster-ca
, dan --dns-cluster-ip
argumen sedang diteruskan ke skrip bootstrap node. Saat memasukkan argumen ini, skrip bootstrap tidak perlu melakukan describeCluster
panggilan, yang membantu mencegah bidang kontrol kelebihan beban. Untuk informasi selengkapnya, lihat Berikan data pengguna untuk meneruskan argumen ke bootstrap.sh file yang disertakan dengan Amazon yang EKS dioptimalkanLinux/BottlerocketAMI.
HTTP401 respons kesalahan tidak sah pada Kubernetes APIpermintaan server
Anda melihat kesalahan ini jika PodToken akun layanan telah kedaluwarsa pada sebuah cluster.
EKSCluster Amazon Anda Kubernetes APIserver menolak permintaan dengan token yang lebih tua dari 90 hari. Di sebelumnya Kubernetes versi, token tidak memiliki kedaluwarsa. Ini berarti bahwa klien yang mengandalkan token ini harus menyegarkannya dalam waktu satu jam. Untuk mencegah Kubernetes APIserver dari menolak permintaan Anda karena token tidak valid, Kubernetes SDK
Versi Go
0.15.7
dan yang lebih baruVersi
12.0.0
Python dan yang lebih baruVersi Java
9.0.0
dan yang lebih baruJavaScript versi
0.10.3
dan yang lebih baruCabang Ruby
master
Versi Haskell
0.3.0.0
C# versi
7.0.5
dan yang lebih baru
Anda dapat mengidentifikasi semua yang ada Pods di cluster Anda yang menggunakan token basi. Untuk informasi selengkapnya, silakan lihat Kubernetes akun layanan.
Versi EKS platform Amazon lebih dari dua versi di belakang versi platform saat ini
Ini dapat terjadi ketika Amazon EKS tidak dapat memperbarui versi platform cluster Anda secara otomatis. Meskipun ada banyak penyebab untuk ini, beberapa penyebab umum mengikuti. Jika salah satu dari masalah ini berlaku untuk cluster Anda, mungkin masih berfungsi, versi platformnya tidak akan diperbarui oleh AmazonEKS.
Masalah
IAMPeran cluster telah dihapus — Peran ini ditentukan ketika cluster dibuat. Anda dapat melihat peran mana yang ditentukan dengan perintah berikut. Ganti my-cluster
dengan nama cluster Anda.
aws eks describe-cluster --name
my-cluster
--query cluster.roleArn --output text | cut -d / -f 2
Contoh output adalah sebagai berikut.
eksClusterRole
Solusi
Buat IAMperan cluster baru dengan nama yang sama.
Masalah
Subnet yang ditentukan selama pembuatan cluster telah dihapus — Subnet yang digunakan dengan cluster ditentukan selama pembuatan cluster. Anda dapat melihat subnet mana yang ditentukan dengan perintah berikut. Ganti my-cluster
dengan nama cluster Anda.
aws eks describe-cluster --name
my-cluster
--query cluster.resourcesVpcConfig.subnetIds
Contoh output adalah sebagai berikut.
[
"subnet-EXAMPLE1
",
"subnet-EXAMPLE2
"
]
Solusi
Konfirmasikan apakah subnet IDs ada di akun Anda.
vpc_id=$(aws eks describe-cluster --name
my-cluster
--query cluster.resourcesVpcConfig.vpcId --output text) aws ec2 describe-subnets --filters "Name=vpc-id,Values=$vpc_id" --query "Subnets[*].SubnetId"
Contoh output adalah sebagai berikut.
[
"subnet-EXAMPLE3
",
"subnet-EXAMPLE4
"
]
Jika subnet yang IDs dikembalikan dalam output tidak cocok dengan subnet IDs yang ditentukan saat cluster dibuat, maka jika Anda EKS ingin Amazon memperbarui cluster, Anda perlu mengubah subnet yang digunakan oleh cluster. Ini karena jika Anda menentukan lebih dari dua subnet saat membuat klaster, Amazon EKS secara acak memilih subnet yang Anda tentukan untuk membuat antarmuka jaringan elastis baru. Antarmuka jaringan ini memungkinkan bidang kontrol untuk berkomunikasi dengan node Anda. Amazon EKS tidak akan memperbarui cluster jika subnet yang dipilihnya tidak ada. Anda tidak memiliki kendali atas subnet mana yang Anda tentukan pada pembuatan klaster yang EKS dipilih Amazon untuk membuat antarmuka jaringan baru.
Ketika Anda memulai Kubernetes pembaruan versi untuk cluster Anda, pembaruan dapat gagal karena alasan yang sama.
Masalah
Grup keamanan yang ditentukan selama pembuatan klaster telah dihapus - Jika Anda menentukan grup keamanan selama pembuatan klaster, Anda dapat melihatnya IDs dengan perintah berikut. Ganti my-cluster
dengan nama cluster Anda.
aws eks describe-cluster --name
my-cluster
--query cluster.resourcesVpcConfig.securityGroupIds
Contoh output adalah sebagai berikut.
[
"sg-EXAMPLE1
"
]
Jika []
dikembalikan, maka tidak ada grup keamanan yang ditentukan saat cluster dibuat dan grup keamanan yang hilang bukanlah masalahnya. Jika grup keamanan dikembalikan, maka konfirmasikan bahwa grup keamanan ada di akun Anda.
Solusi
Konfirmasikan apakah grup keamanan ini ada di akun Anda.
vpc_id=$(aws eks describe-cluster --name
my-cluster
--query cluster.resourcesVpcConfig.vpcId --output text) aws ec2 describe-security-groups --filters "Name=vpc-id,Values=$vpc_id" --query "SecurityGroups[*].GroupId"
Contoh output adalah sebagai berikut.
[
"sg-EXAMPLE2
"
]
Jika grup keamanan yang IDs ditampilkan dalam output tidak cocok dengan grup keamanan IDs yang ditentukan saat kluster dibuat, maka jika Anda EKS ingin Amazon memperbarui klaster, Anda perlu mengubah grup keamanan yang digunakan oleh cluster. Amazon EKS tidak akan memperbarui klaster jika grup keamanan IDs yang ditentukan pada pembuatan klaster tidak ada.
Ketika Anda memulai Kubernetes pembaruan versi untuk cluster Anda, pembaruan dapat gagal karena alasan yang sama.
Alasan lain mengapa Amazon EKS tidak memperbarui versi platform cluster Anda
-
Anda tidak memiliki setidaknya enam (meskipun kami merekomendasikan 16) alamat IP yang tersedia di setiap subnet yang Anda tentukan saat Anda membuat cluster Anda. Jika Anda tidak memiliki cukup alamat IP yang tersedia di subnet, Anda perlu membebaskan alamat IP di subnet atau Anda perlu mengubah subnet yang digunakan oleh cluster untuk menggunakan subnet dengan alamat IP yang cukup tersedia.
-
Anda mengaktifkan enkripsi rahasia saat membuat klaster dan AWS KMS kunci yang Anda tentukan telah dihapus. Jika Anda EKS ingin Amazon memperbarui cluster, Anda perlu membuat cluster baru
Kesehatan cluster FAQs dan kode kesalahan dengan jalur resolusi
Amazon EKS mendeteksi masalah dengan EKS klaster dan infrastruktur klaster Anda dan menyimpannya di kesehatan klaster. Anda dapat mendeteksi, memecahkan masalah, dan mengatasi masalah klaster lebih cepat dengan bantuan informasi kesehatan klaster. Ini memungkinkan Anda untuk membuat lingkungan aplikasi yang lebih aman dan up-to-date. Selain itu, mungkin tidak mungkin bagi Anda untuk meningkatkan ke versi yang lebih baru Kubernetes atau bagi Amazon EKS untuk menginstal pembaruan keamanan pada klaster yang terdegradasi sebagai akibat dari masalah dengan infrastruktur atau konfigurasi cluster yang diperlukan. Amazon EKS dapat memakan waktu 3 jam untuk mendeteksi masalah atau mendeteksi bahwa masalah telah teratasi.
Kesehatan EKS cluster Amazon adalah tanggung jawab bersama antara Amazon EKS dan penggunanya. Anda bertanggung jawab atas infrastruktur prasyarat peran IAM dan VPC subnet Amazon, serta infrastruktur lain yang diperlukan, yang harus disediakan terlebih dahulu. Amazon EKS mendeteksi perubahan dalam konfigurasi infrastruktur ini dan cluster.
Untuk mengakses kesehatan klaster Anda di EKS konsol Amazon, cari bagian yang disebut Masalah Kesehatan di tab Ikhtisar halaman detail EKS klaster Amazon. Data ini juga akan tersedia dengan memanggil DescribeCluster
tindakan di EKSAPI, misalnya dari dalam AWS Command Line Interface.
- Mengapa saya harus menggunakan fitur ini?
-
Anda akan mendapatkan peningkatan visibilitas ke dalam kesehatan EKS cluster Amazon Anda, dengan cepat mendiagnosis dan memperbaiki masalah apa pun, tanpa perlu menghabiskan waktu debugging atau membuka AWS kasus dukungan. Misalnya: Anda secara tidak sengaja menghapus subnet untuk EKS cluster Amazon, Amazon EKS tidak akan dapat membuat antarmuka jaringan lintas akun dan Kubernetes AWS CLI perintah seperti
kubectl
exec ataukubectl
log. Ini akan gagal dengan kesalahan:Error from server: error dialing backend: remote error: tls: internal error.
Sekarang Anda akan melihat masalah EKS kesehatan Amazon yang mengatakan:subnet-da60e280 was deleted: could not create network interface
. - Bagaimana fitur ini berhubungan atau bekerja dengan AWS layanan lain?
-
IAMperan dan VPC subnet Amazon adalah dua contoh infrastruktur prasyarat yang mendeteksi masalah kesehatan klaster. Fitur ini akan mengembalikan informasi terperinci jika sumber daya tersebut tidak dikonfigurasi dengan benar.
- Apakah cluster dengan masalah kesehatan menimbulkan biaya?
-
Ya, setiap EKS cluster Amazon ditagih dengan EKS harga Amazon standar. Fitur kesehatan cluster tersedia tanpa biaya tambahan.
- Apakah fitur ini berfungsi dengan EKS cluster Amazon? AWS Outposts
-
Ya, masalah klaster terdeteksi untuk EKS cluster di AWS Cloud termasuk kluster yang diperluas AWS Outposts dan kluster lokal aktif. AWS Outposts Kesehatan cluster tidak mendeteksi masalah dengan Amazon EKS Anywhere atau Amazon EKS Distro (EKS-D).
- Bisakah saya mendapatkan pemberitahuan ketika masalah baru terdeteksi?
-
Tidak, Anda perlu memeriksa EKS Konsol Amazon atau menelepon EKS
DescribeCluster
API. - Apakah konsol memberi saya peringatan untuk masalah kesehatan?
-
Ya, setiap cluster dengan masalah kesehatan akan menyertakan spanduk di bagian atas konsol.
Dua kolom pertama adalah apa yang dibutuhkan untuk nilai API respons. Bidang ketiga dari ClusterIssue objek Kesehatan adalah resourceIds, pengembaliannya tergantung pada jenis masalah.
Kode | Pesan | ResourceIds | Cluster Dapat Dipulihkan? |
---|---|---|---|
SUBNET_NOT_FOUND |
Kami tidak dapat menemukan satu atau lebih subnet yang saat ini terkait dengan cluster Anda. Hubungi Amazon EKS update-cluster-config APIuntuk memperbarui subnet. |
Id Subnet | Ya |
SECURITY_GROUP_NOT_FOUND | Kami tidak dapat menemukan satu atau lebih grup keamanan yang saat ini terkait dengan klaster Anda. Panggil Amazon EKS update-cluster-config API untuk memperbarui grup keamanan | Id grup keamanan | Ya |
IP_NOT_AVAILABLE | Satu atau beberapa subnet yang terkait dengan cluster Anda tidak memiliki cukup alamat IP yang tersedia bagi Amazon EKS untuk melakukan operasi manajemen klaster. Kosongkan alamat di subnet, atau kaitkan subnet yang berbeda ke klaster Anda menggunakan Amazon. EKS update-cluster-config API | Id Subnet | Ya |
VPC_NOT_FOUND | Kami tidak dapat menemukan yang VPC terkait dengan cluster Anda. Anda harus menghapus dan membuat ulang cluster Anda. | VPCid | Tidak |
ASSUME_ROLE_ACCESS_DENIED | Cluster Anda tidak menggunakan Amazon EKS service-linked-role. Kami tidak dapat mengambil peran yang terkait dengan klaster Anda untuk melakukan operasi EKS manajemen Amazon yang diperlukan. Periksa peran yang ada dan memiliki kebijakan kepercayaan yang diperlukan. | IAMPeran cluster | Ya |
PERMISSION_ACCESS_DENIED |
Cluster Anda tidak menggunakan Amazon EKS service-linked-role. Peran yang terkait dengan klaster Anda tidak memberikan izin yang cukup bagi Amazon EKS untuk melakukan operasi manajemen yang diperlukan. Periksa kebijakan yang dilampirkan pada peran klaster dan jika ada kebijakan penolakan terpisah yang diterapkan. | IAMPeran cluster | Ya |
ASSUME_ROLE_ACCESS_DENIED_USING_SLR |
Kami tidak dapat mengasumsikan manajemen EKS cluster Amazon service-linked-role. Periksa peran yang ada dan memiliki kebijakan kepercayaan yang diperlukan. | Amazon EKS service-linked-role | Ya |
PERMISSION_ACCESS_DENIED_USING_SLR |
Manajemen EKS klaster Amazon service-linked-role tidak memberikan izin yang cukup bagi Amazon EKS untuk melakukan operasi manajemen yang diperlukan. Periksa kebijakan yang dilampirkan pada peran klaster dan jika ada kebijakan penolakan terpisah yang diterapkan. |
Amazon EKS service-linked-role |
Ya |
OPT_IN_REQUIRED |
Akun Anda tidak memiliki langganan EC2 layanan Amazon. Perbarui langganan akun Anda di halaman pengaturan akun Anda. |
N/A | Ya |
STS_REGIONAL_ENDPOINT_DISABLED |
Bagian STS titik akhir regional dinonaktifkan. Aktifkan titik akhir Amazon EKS untuk melakukan operasi manajemen klaster yang diperlukan. |
N/A | Ya |
KMS_KEY_DISABLED |
AWS KMS Kunci yang terkait dengan cluster Anda dinonaktifkan. Aktifkan kembali kunci untuk memulihkan cluster Anda. |
Bagian KMS Key Arn |
Ya |
KMS_KEY_NOT_FOUND |
Kami tidak dapat menemukan AWS KMS kunci yang terkait dengan cluster Anda. Anda harus menghapus dan membuat ulang cluster. |
Bagian KMS Key ARN |
Tidak |
KMS_GRANT_REVOKED |
Hibah untuk AWS KMS Kunci yang terkait dengan cluster Anda dicabut. Anda harus menghapus dan membuat ulang cluster. |
Bagian KMS Key Arn |
Tidak |