Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 使用jenkins-x创建Amazon EKS群集,cluster autoscaler在偶数个节点上提供故障进入_Amazon Web Services_Kubernetes_Amazon Eks_Jenkins X - Fatal编程技术网

Amazon web services 使用jenkins-x创建Amazon EKS群集,cluster autoscaler在偶数个节点上提供故障进入

Amazon web services 使用jenkins-x创建Amazon EKS群集,cluster autoscaler在偶数个节点上提供故障进入,amazon-web-services,kubernetes,amazon-eks,jenkins-x,Amazon Web Services,Kubernetes,Amazon Eks,Jenkins X,我正在使用jenkins-x创建一个Amazon EKS群集,其中包括: jx create cluster eks -n demo --node-type=t3.xlarge --nodes=1 --nodes-max=5 --nodes-min=1 --skip-installation 之后,根据指南,我添加了用于自动发现的群集autoscaler IAM策略,以及在autoscaling组和创建的实例上添加的标记 我用这个文件(kubectl create-f rbac config.

我正在使用jenkins-x创建一个Amazon EKS群集,其中包括:

jx create cluster eks -n demo --node-type=t3.xlarge --nodes=1 --nodes-max=5 --nodes-min=1 --skip-installation
之后,根据指南,我添加了用于自动发现的群集autoscaler IAM策略,以及在autoscaling组和创建的实例上添加的标记

我用这个文件(
kubectl create-f rbac config.yaml
)为tiller和autoscaler添加了rbac角色:

我安装了舵柄:

helm init——服务帐户舵柄

并安装了群集自动缩放器:

helm install stable/cluster autoscaler-f cluster-autoscaler-values.yaml--名称群集autoscaler--命名空间kube系统

然后我安装jenkins-x系统:

jx安装--provider=eks--domain=mydomain.com--default environment prefix=demo--skip setup tiller

我只接受所有问题的默认设置(nginx ingress是为我创建的)

然后我创建了一个默认的spring boot rest prometheus应用程序:

jx创建快速启动

同样,接受所有默认值。 这很好,应用程序由jenkins拾取并编译,我可以在中看到:

http://jenkins.jx.mydomain.com

我可以通过以下方式访问该应用程序:

http://spring-boot-rest-prometheus.jx-staging.mydomain.com

然后,我运行一个测试,看看autoscaler是否正常工作,因此我打开
图表/spring boot rest prometheus/values.yaml中的文件,并将
replicaCount:1
更改为
replicaCount:8
。提交并推送。这将启动Jenkins管道并启动一个新节点,因为autoscaler发现第一个节点上没有足够的cpu资源

在第二个节点出现后,我无法再通过域名联系Jenkins和应用程序。所以出于某种原因,我的入口不再工作了

我已经在这方面做了很多尝试,并直接在EC2上手动更改所需的节点数,当节点数为偶数时,域是不可访问的,当节点数为奇数时,域是可访问的

我不认为这与autoscaler有关,因为放大和缩小都可以正常工作,如果手动更改服务器所需的节点,问题也会出现

是什么导致偶数个节点的进入失败?我如何进一步调查这个问题


所有入口部件的日志和描述器都已发布。

您可以通过查看(自动缩放组)和(ELB)目标实例来调试

您可以看到实例正在添加到ASG:

然后,您可以在负载平衡器中看到实例正在使用中:


可能是偶数个实例中的某些实例未投入使用。它们是否恰好位于不同的可用性区域?是否从ELB中删除“奇数”数字?流量没有被转发给他们吗?

FWIW,我似乎遇到了这个问题:


仍在与AWS支持部门核实EKS是否也是如此,但这似乎非常合理

奇怪!双关语:)
kubectl描述一下你的入口,看看外面发生了什么,这将是一个好的开始。发布入口控制器的日志,并在这里描述入口控制器的所有部分:啊!“它们是否恰好位于不同的可用区?”是的。他们绝对是。这是ELB的问题吗?下面是如何启用跨区域负载平衡。如果这是个问题,我明天会调查的。唯一的可能是,流量没有被转发到另一个avzone中的流量,它们是否在服务中?它应该得到支持。请注意,AWS对不同av区域之间的流量收取一定的费用。这是nginx ingress helm图表为我做的。:)使NLB多分区并没有解决问题。但是,在缩放到两个节点后,我确实看到了不健康的目标。删除入口服务并重新创建后,目标恢复正常。但这也需要更新53号公路的CNAME。我越来越近了,但还是没有白烟。
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