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: {}
- What features cloud provider gives to kubernetes?
我知道的一些功能:external loadbalancer, the persistent volumes。
- 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 我可以方便地显示所需内容。
幸运的是,该问题的答案以及我将要讨论的问题都以 apiserver
和 controller-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 守护进程)。
一旦我附加了一个名为 KubernetesCluster
的 Tag
并将 Tag
的每个实例设置为相同的字符串(它可以是任何东西,AFAIK),然后 aws_loadbalancer
能够在 VPC 中找到子网,并将节点附加到 ELB,一切都很酷——除了关于它的部分现在只能创建 面向互联网的 ELB。 :-(
为了清楚起见:aws.cfg
包含一个名为 KubernetesClusterTag
的字段,允许您 重新定义 Kubernetes 将查找的 Tag
; 如果该文件中没有任何值,Kuberenetes 将使用 Tag
名称 KubernetesCluster
.
希望这对您有所帮助,也希望对其他人有所帮助,因为一旦 Kubernetes 启动,它绝对是惊人的。
我在 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: {}
- What features cloud provider gives to kubernetes?
我知道的一些功能:external loadbalancer, the persistent volumes。
- 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 我可以方便地显示所需内容。
幸运的是,该问题的答案以及我将要讨论的问题都以 apiserver
和 controller-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 守护进程)。
一旦我附加了一个名为 KubernetesCluster
的 Tag
并将 Tag
的每个实例设置为相同的字符串(它可以是任何东西,AFAIK),然后 aws_loadbalancer
能够在 VPC 中找到子网,并将节点附加到 ELB,一切都很酷——除了关于它的部分现在只能创建 面向互联网的 ELB。 :-(
为了清楚起见:aws.cfg
包含一个名为 KubernetesClusterTag
的字段,允许您 重新定义 Kubernetes 将查找的 Tag
; 如果该文件中没有任何值,Kuberenetes 将使用 Tag
名称 KubernetesCluster
.
希望这对您有所帮助,也希望对其他人有所帮助,因为一旦 Kubernetes 启动,它绝对是惊人的。