【问题标题】:Kubernetes on AWS cloud providerAWS 云提供商上的 Kubernetes
【发布时间】:2016-03-31 06:00:48
【问题描述】:

我在 AWS 上安装了 CentOS Atomic Host 作为 kubernetes 的操作系统。

一切正常,但似乎我错过了什么。

我没有配置云提供商,也找不到任何相关文档。

在这个问题中,我想知道: 1、云服务商赋予kubernetes什么特性? 2. 如何配置AWS云提供商?

UPD 1:外部负载均衡器不起作用;我还没有测试过awsElasticBlockStore,但我也怀疑它不起作用。

UPD 2: 服务详情:

$ kubectl get svc nginx-service-aws-lb -o yaml
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: 2016-01-02T09:51:40Z
  name: nginx-service-aws-lb
  namespace: default
  resourceVersion: "74153"
  selfLink: /api/v1/namespaces/default/services/nginx-service-aws-lb
  uid: 6c28b718-b136-11e5-9bda-06c2feb29b0d
spec:
  clusterIP: 10.254.172.185
  ports:
  - name: http-proxy-protocol
    nodePort: 31385
    port: 8080
    protocol: TCP
    targetPort: 8080
  - name: https-proxy-protocol
    nodePort: 31370
    port: 8443
    protocol: TCP
    targetPort: 8443
  selector:
    app: nginx
  sessionAffinity: None
  type: LoadBalancer
status:
  loadBalancer: {}

【问题讨论】:

    标签: amazon-ec2 kubernetes amazon-elb amazon-ebs


    【解决方案1】:
    1. 云提供商为 Kubernetes 提供了哪些功能?

    我知道的一些功能:external loadbalancerpersistent volumes

    1. 如何配置 AWS 云提供商?

    有一个名为KUBERNETES_PROVIDER 的环境变量,但它似乎只在人们启动 k8s 集群时才重要。既然你说“一切正常”,我你不需要任何进一步的配置来使用我上面提到的功能。

    【讨论】:

    • 感谢您的回答。我测试了外部 LB,但它不起作用。
    • 您是否遵循了 aws 的入门指南? github.com/kubernetes/kubernetes/blob/release-1.1/docs/…。另请参阅github.com/kubernetes/kubernetes/blob/…。如果使用 Type=Loadbalancer 创建服务不会在 AWS 上创建外部负载均衡器,这听起来像是一个错误。正如“幕后”文档中所述,Kubernetes 确实支持 ELB。
    • 你能说更多你的意思是LB不工作吗?执行以下命令时是否显示:kubectl get svc -o yaml 并查看它是否返回 hostname 属性?问题是 AWS 不给 ELB 的 IP 地址,只是主机名。
    • 是的,我阅读了该指南。使用http://www.projectatomic.io 指南创建的集群。
    • 您不必配置云提供商。您可以粘贴您的服务 .yaml 文件吗?另外,您可以粘贴您的 kubernetes 版本(master 和 node)吗? kubctl get version
    【解决方案2】:

    我不能谈论 ProjectAtomic 位,也不能谈论 KUBERNETES_PROVIDER env-var,因为我的经验是使用 CoreOS 配置器。我将谈谈我的经验,看看这是否有助于您深入了解您的设置。

    最重要的是,控制器 EC2 和工作 EC2 机器必须具有正确的 IAM role,这将使机器能够代表您的账户进行 AWS 调用。这包括诸如配置 ELB 和使用 EBS 卷(或在工作人员的情况下将 EBS 卷附加到自身)之类的事情。没有它,您的云配置体验将一事无成。我很确定 IAM 有效负载是在那些难以阅读的 .go 文件之外的地方定义的,但这是我方便显示所需内容的最快链接。

    幸运的是,这个问题的答案,以及我即将谈到的问题,都以apiservercontroller-manager 为中心。它们的配置和它们输出的日志。

    apiservercontroller-manager 都有一个参数指向磁盘上的云配置文件,遗憾的是除了the source 之外的任何地方都没有记录。根据我的经验,Zone 字段是可选的(就像他们在 cmets 中所说的那样)。但是,正是看到 KubernetesClusterTag 导致我在代码中跟踪该字段以查看它的作用。

    如果您的经验与我的相似,您会在controller-manager 的 docker 日志中看到一堆错误消息,说明它是如何创建 ELB 但找不到任何子网附加到它的; (当然,“docker logs”位是假设 ProjectAtomic 也使用 docker 来运行 Kubernetes 守护进程)。

    一旦我附加了一个名为KubernetesClusterTag 并将Tag 的每个实例设置为相同的字符串(它可以是任何东西,AFAIK),那么aws_loadbalancer 就能够在 VPC 中找到子网并且它将节点连接到 ELB,一切都很酷——除了关于它的部分,现在只能创建 面向 Internet 的 ELB。 :-(

    为了清楚起见:aws.cfg 包含一个名为 KubernetesClusterTag 的字段,允许您重新定义 Kubernetes 将查找的 Tag没有该文件中的任何值,Kuberenetes 将使用 Tag 名称 KubernetesCluster

    我希望这对你有帮助,也希望对其他人有所帮助,因为一旦 Kubernetes 启动,它绝对是惊人的。

    【讨论】:

    猜你喜欢
    • 2021-11-04
    • 2020-03-24
    • 2020-01-17
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 2020-04-21
    • 1970-01-01
    相关资源
    最近更新 更多