AWS 云提供商上的 Kubernetes

Kubernetes on AWS cloud provider

我在 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: {}
  1. What features cloud provider gives to kubernetes?

我知道的一些功能:external loadbalancer, the persistent volumes

  1. How to configure AWS cloud provider?

有一个名为 KUBERNETES_PROVIDER 的环境变量,但似乎环境变量仅在人们启动 k8s 集群时才重要。既然你说 "everything works fine",我 猜想 你不需要任何进一步的配置来使用我上面提到的功能。

我不能说 ProjectAtomic 位,也不能说 KUBERNETES_PROVIDER env-var,因为我的经验是使用 CoreOS 供应商。我将谈谈我的经验,看看是否能帮助您更深入地了解您的设置。

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

幸运的是,该问题的答案以及我将要讨论的问题都以 apiservercontroller-manager 为中心。它们的配置和输出的日志。

apiserver and the controller-manager have an argument that points to an on-disk cloud configuration file that regrettably isn't documented anywhere except for the source。根据我的经验,Zone 字段是可选的(就像他们在评论中所说的那样)。但是,是看到了 KubernetesClusterTag 让我在代码中跟踪该字段以查看它的作用。

如果您的经历和我一样,您会在 controller-manager 的 docker 日志中看到一堆关于如何创建 ELB 但找不到任何子网的错误消息附加到它; (当然,"docker logs" 位假设 ProjectAtomic 也使用 docker 到 运行 Kubernetes 守护进程)。

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

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

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