如何使用 Terraform 配置 AWS EKS 自动扩缩器?
Posted
技术标签:
【中文标题】如何使用 Terraform 配置 AWS EKS 自动扩缩器?【英文标题】:How can I configure an AWS EKS autoscaler with Terraform? 【发布时间】:2020-01-15 15:26:47 【问题描述】:我正在使用 AWS EKS 提供商 (github.com/terraform-aws-modules/terraform-aws-eks )。我正在使用 https://learn.hashicorp.com/terraform/aws/eks-intro
跟随教程但是,这似乎没有启用自动缩放...似乎缺少cluster-autoscaler
pod / daemon?
Terraform 是否能够提供此功能?还是我需要按照以下指南进行设置:https://eksworkshop.com/scaling/deploy_ca/
【问题讨论】:
我极力推荐利用这个:github.com/terraform-aws-modules/terraform-aws-eks 这就是我正在使用的(教程使用的) 【参考方案1】:您可以使用 Terraform 部署 Kubernetes 资源。既有 Kubernetes 提供者,也有 Helm 提供者。
data "aws_eks_cluster_auth" "authentication"
name = "$var.cluster_id"
provider "kubernetes"
# Use the token generated by AWS iam authenticator to connect as the provider does not support exec auth
# see: https://github.com/terraform-providers/terraform-provider-kubernetes/issues/161
host = "$var.cluster_endpoint"
cluster_ca_certificate = "$base64decode(var.cluster_certificate_authority_data)"
token = "$data.aws_eks_cluster_auth.authentication.token"
load_config_file = false
provider "helm"
install_tiller = "true"
tiller_image = "gcr.io/kubernetes-helm/tiller:v2.12.3"
resource "helm_release" "cluster_autoscaler"
name = "cluster-autoscaler"
repository = "stable"
chart = "cluster-autoscaler"
namespace = "kube-system"
version = "0.12.2"
set
name = "autoDiscovery.enabled"
value = "true"
set
name = "autoDiscovery.clusterName"
value = "$var.cluster_name"
set
name = "cloudProvider"
value = "aws"
set
name = "awsRegion"
value = "$data.aws_region.current_region.name"
set
name = "rbac.create"
value = "true"
set
name = "sslCertPath"
value = "/etc/ssl/certs/ca-bundle.crt"
【讨论】:
很公平,但教程中缺少它似乎很奇怪。我试试看! hashicorp 教程主要侧重于部署 EKS,而不是专门针对完全启动和运行的 kubernetes 集群。 metrics-server 仍在 kubernetes 项目中孵化。 出于某种奇怪的原因,它给了我这个错误:``` * helm_release.cluster_autoscaler: error installation: Post ABB06A6EE62F55C039BB284DD4BB2DB3.gr7.us-west-2.eks.amazonaws.co…: dial tcp:lookup ABB06A6EE62F55C039BB284DD4BB2DB3.gr7.us-west-2.eks。 amazonaws.com:没有这样的主机```但我根本不认识那个端点?它也不在 tfstate 文件中。 遇到helm_release.cluster_autoscaler: context deadline exceeded
的错误...不确定是否与github.com/terraform-providers/terraform-provider-helm/issues/…有关
嗯,我以前没有遇到过这个问题。【参考方案2】:
下面的这个答案仍然不完整......但至少它让我更进一步......
1.
kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default
helm install stable/cluster-autoscaler --name my-release --set "autoscalingGroups[0].name=demo,autoscalingGroups[0].maxSize=10,autoscalingGroups[0].minSize=1" --set rbac.create=true
然后手动修复证书路径:
kubectl edit deployments my-release-aws-cluster-autoscaler
替换以下内容:
path: /etc/ssl/certs/ca-bundle.crt
有
path: /etc/ssl/certs/ca-certificates.crt
2.
在 AWS 控制台中,将AdministratorAccess
策略赋予terraform-eks-demo-node
角色。
3.
使用 (kubectl edit deployments my-release-aws-cluster-autoscaler
) 更新 nodes
参数
- --nodes=1:10:terraform-eks-demo20190922124246790200000007
【讨论】:
以上是关于如何使用 Terraform 配置 AWS EKS 自动扩缩器?的主要内容,如果未能解决你的问题,请参考以下文章
如何将“–kubelet-extra-args”传递给 Terraform aws_eks_node_group 创建的 AWS EKS 节点组?
带有 ALB 入口控制器的 Terraform AWS Kubernetes EKS 资源不会创建负载均衡器
Terraform AWS EKS ALB Kubernetes Ingress 不会创建侦听器或目标组