一些信息:
请不要回复使用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。
答案 0 :(得分:1)
我认为史蒂夫正走在正确的轨道上。确保您的kubelet,apiserver和controller-manager组件在其参数列表中都包含--cloud-provider=aws
。
您提到您的子网和实例都具有匹配的KubernetesCluster
标记。做你的控制器&工人安全小组? K8s将特别修改工作者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
答案 1 :(得分:0)
我认为节点注册是在Kubernetes之外进行管理的。我正在使用kops,如果我在AWS中编辑ASG的大小,则新节点不会注册到我的服务ELB。但是,如果我使用kops编辑节点数,那么新节点就在那里。
在文档中,当在AWS上运行时,kops instance group映射到ASG。在code中,它看起来像是调用AWS而不是k8s API。
我知道你没有使用kops,但我认为在Terraform中你需要复制kops正在进行的AWS API调用。
答案 2 :(得分: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