5

一些信息:

  • Kubernetes (1.5.1)
  • AWS
  • 1 个主节点和 1 个节点(均为 ubuntu 16.04)
  • 通过 kubeadm 安装的 k8s
  • 我制作的 Terraform

请不要使用 kube-up、kops 或类似方式回复。这是关于了解 k8s 如何在后台工作。系统中有太多无法解释的魔法,我想了解它。

== 问题:

在 k8s[aws] 上创建负载均衡器类型的服务时(例如):

apiVersion: v1
kind: Service
metadata:
  name: kubernetes-dashboard
  namespace: kube-system
  labels:
    k8s-addon: kubernetes-dashboard.addons.k8s.io
    k8s-app: kubernetes-dashboard
    kubernetes.io/cluster-service: "true"
    facing: external
spec:
  type: LoadBalancer
  selector:
    k8s-app: kubernetes-dashboard
  ports:
  - port: 80

我成功地创建了一个面向内部或外部的 ELB,但没有一台机器被添加到 ELB(我也可以污染主机,但没有任何变化)。我的问题基本上是这样的:

https://github.com/kubernetes/kubernetes/issues/29298#issuecomment-260659722

子网和节点(但不是 VPC)都标有“KubernetesCluster”(再次...... elb 是在正确的位置创建的)。但是没有添加节点。

在日志中

kubectl logs kube-controller-manager-ip-x-x-x-x -n kube-system

后:

aws_loadbalancer.go:63] Creating load balancer for 
kube-system/kubernetes-dashboard with name:
acd8acca0c7a111e69ca306f22de69ae

没有其他输出(它应该打印添加或删除的节点)。我试图理解代码:

https://github.com/kubernetes/kubernetes/blob/master/pkg/cloudprovider/providers/aws/aws_loadbalancer.go 但是不管是什么原因,这个函数不能添加节点。

该文档没有详细解释 k8s 决策背后的“过程”。为了尝试理解 k8s,我尝试/使用了 kops、kube up、kubeadm、kubernetes 艰难的方式回购和阅读该死的代码,但我仍然无法理解 aws 上的 k8s 如何选择要添加到 elb 的节点。

因此,在任何地方也没有更改任何安全组。

它是ec2上的标签吗?Kublet 设置?还要别的吗?

任何帮助是极大的赞赏。

谢谢,F。

4

3 回答 3

1

我认为史蒂夫走在正确的轨道上。确保您的 kubelets、apiserver 和控制器管理器组件都包含--cloud-provider=aws在它们的参数列表中。

您提到您的子网和实例都具有匹配的KubernetesCluster标签。你的控制器和工作人员安全组吗?K8s 将特别修改 worker SG 以允许进出它创建的服务 ELB 的流量。我也标记了我的 VPC,但我想这不是必需的,并且可能会禁止另一个集群存在于同一个 VPC 中。

我还标记了我的私有子网kubernetes.io/role/internal-elb=true和公共子网,kubernetes.io/role/elb=true以确定可以在哪里创建内部和公共 ELB。

标签和注释的完整列表 (AFAIK) 位于https://github.com/kubernetes/kubernetes/blob/master/pkg/cloudprovider/providers/aws/aws.go

于 2017-01-03T23:13:17.473 回答
0

确保您使用 kubeadm ( http://kubernetes.io/docs/admin/kubeadm/ )设置了正确的云提供商设置。

AWS 云提供商自动同步 ELB 可用的节点。我创建了一个类型LoadBalancer,然后扩展了我的集群,最终将新节点添加到 ELB:https ://github.com/kubernetes/kubernetes/blob/master/pkg/cloudprovider/providers/aws/aws_loadbalancer.go#L376

于 2017-01-03T19:45:13.100 回答
0

我认为节点注册是在 Kubernetes 之外进行管理的。我正在使用 kops,如果我在 AWS 中编辑我的 ASG 的大小,则新节点未向我的服务 ELB 注册。但是,如果我使用 kops 编辑节点数,新节点就在那里。

在文档中,kops实例组在 AWS 上运行时映射到 ASG。在代码中,它看起来像是调用 AWS 而不是 k8s API。

我知道您没有使用 kops,但我认为在 Terraform 中您需要复制 kops 正在进行的 AWS API 调用。

于 2017-01-03T19:07:33.860 回答