使用 jenkins-x 和 cluster-autoscaler 创建一个 Amazon EKS 集群,在偶数个节点上无法进入
Create a Amazon EKS cluster with jenkins-x and cluster-autoscaler gives fails ingress on even number of nodes
我正在使用 jenkins-x 创建一个 Amazon EKS 集群:
jx create cluster eks -n demo --node-type=t3.xlarge --nodes=1 --nodes-max=5 --nodes-min=1 --skip-installation
之后,根据 this 指南,我添加了用于自动发现的 cluster-autoscaler IAM 策略以及在自动缩放组和创建的实例上添加的标签。
我使用此文件 (kubectl create -f rbac-config.yaml
) 添加了 tiller 和 autoscaler 的 rbac 角色:
apiVersion: v1
kind: ServiceAccount
metadata:
name: tiller
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: tiller
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: tiller
namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: autoscaler
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: autoscaler
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: autoscaler
namespace: kube-system
我安装了舵机:
helm init --service-account tiller
并安装了集群自动缩放器:
helm install stable/cluster-autoscaler -f cluster-autoscaler-values.yaml --name cluster-autoscaler --namespace kube-system
然后我安装jenkins-x系统:
jx install --provider=eks --domain=mydomain.com --default-environment-prefix=demo --skip-setup-tiller
我只接受问题的所有默认设置(nginx-ingress 是为我创建的)。
然后我创建一个默认的 spring-boot-rest-prometheus 应用程序:
jx create quickstart
再次接受所有默认值。
这工作正常,应用程序由 jenkins 挑选并编译,我可以在以下位置看到:
http://jenkins.jx.mydomain.com
我可以通过以下方式访问该应用程序:
http://spring-boot-rest-prometheus.jx-staging.mydomain.com
然后我 运行 测试了自动缩放器是否正常工作,所以我打开 charts/spring-boot-rest-prometheus/values.yaml
中的文件并将 replicaCount: 1
更改为 replicaCount: 8
。承诺并推动。这将启动 Jenkins 管道并启动一个新节点,因为自动缩放器发现第一个节点上没有足够的 cpu 资源。
第二个节点出现后,我无法通过域名访问Jenkins 和应用程序。所以出于某种原因,我的入口不再工作了。
这个我玩过很多次,直接在EC2上手动修改想要的节点数,节点数为偶数时域不可达,节点数为奇数时这些域是可访问的。
我认为这与自动缩放器无关,因为放大和缩小都可以正常工作,如果我手动更改所需的服务器节点也会出现问题。
是什么导致偶数个节点的入口失败?我该如何进一步调查这个问题?
已发布所有入口部分的日志和描述符here。
您可以通过查看 AWS ASG (AutoScaling Group) and the load balancer (ELB) 目标实例来调试它。
您可以看到正在将实例添加到 ASG:
然后您可以在您的负载均衡器中看到实例正在服务中:
可能偶数个实例中有一些不在服务中。他们碰巧在不同的可用区吗? 'odd' 号码的号码是否已从 ELB 中删除?流量没有被转发给他们吗?
FWIW,我似乎 运行 关注这个问题:
https://github.com/kubernetes/kubernetes/issues/64148
仍在与 AWS Support 核实 EKS 是否也是这种情况,但这似乎很有道理。
我正在使用 jenkins-x 创建一个 Amazon EKS 集群:
jx create cluster eks -n demo --node-type=t3.xlarge --nodes=1 --nodes-max=5 --nodes-min=1 --skip-installation
之后,根据 this 指南,我添加了用于自动发现的 cluster-autoscaler IAM 策略以及在自动缩放组和创建的实例上添加的标签。
我使用此文件 (kubectl create -f rbac-config.yaml
) 添加了 tiller 和 autoscaler 的 rbac 角色:
apiVersion: v1
kind: ServiceAccount
metadata:
name: tiller
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: tiller
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: tiller
namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: autoscaler
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: autoscaler
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: autoscaler
namespace: kube-system
我安装了舵机:
helm init --service-account tiller
并安装了集群自动缩放器:
helm install stable/cluster-autoscaler -f cluster-autoscaler-values.yaml --name cluster-autoscaler --namespace kube-system
然后我安装jenkins-x系统:
jx install --provider=eks --domain=mydomain.com --default-environment-prefix=demo --skip-setup-tiller
我只接受问题的所有默认设置(nginx-ingress 是为我创建的)。
然后我创建一个默认的 spring-boot-rest-prometheus 应用程序:
jx create quickstart
再次接受所有默认值。 这工作正常,应用程序由 jenkins 挑选并编译,我可以在以下位置看到:
http://jenkins.jx.mydomain.com
我可以通过以下方式访问该应用程序:
http://spring-boot-rest-prometheus.jx-staging.mydomain.com
然后我 运行 测试了自动缩放器是否正常工作,所以我打开 charts/spring-boot-rest-prometheus/values.yaml
中的文件并将 replicaCount: 1
更改为 replicaCount: 8
。承诺并推动。这将启动 Jenkins 管道并启动一个新节点,因为自动缩放器发现第一个节点上没有足够的 cpu 资源。
第二个节点出现后,我无法通过域名访问Jenkins 和应用程序。所以出于某种原因,我的入口不再工作了。
这个我玩过很多次,直接在EC2上手动修改想要的节点数,节点数为偶数时域不可达,节点数为奇数时这些域是可访问的。
我认为这与自动缩放器无关,因为放大和缩小都可以正常工作,如果我手动更改所需的服务器节点也会出现问题。
是什么导致偶数个节点的入口失败?我该如何进一步调查这个问题?
已发布所有入口部分的日志和描述符here。
您可以通过查看 AWS ASG (AutoScaling Group) and the load balancer (ELB) 目标实例来调试它。
您可以看到正在将实例添加到 ASG:
然后您可以在您的负载均衡器中看到实例正在服务中:
可能偶数个实例中有一些不在服务中。他们碰巧在不同的可用区吗? 'odd' 号码的号码是否已从 ELB 中删除?流量没有被转发给他们吗?
FWIW,我似乎 运行 关注这个问题:
https://github.com/kubernetes/kubernetes/issues/64148
仍在与 AWS Support 核实 EKS 是否也是这种情况,但这似乎很有道理。