我正在寻找一种非特定于供应商的选项来实现它。 />
我知道几个选项,例如
Kops
Juju
我找到的其他Github项目...
我想知道是否有人能使用Terraform,Ansible或其他工具来做到这一点的自动化例子。 br />
#1 楼
在工作中,我们目前正在AWS上使用多可用区Kubernetes集群,并且正在使用kops
和Terraform(kops
生成Terraform配置文件)来配置集群。对我来说不清楚的是您是要运行单个多云集群还是要在多个云中运行多个集群。无论如何,我们当前的设置是高度多主机的-可用的多可用区Kubernetes集群。我将尝试逐步解释。
创建集群的第一件事是使用
kops
生成Terraform配置(您可以通过直接使用kops
直接在AWS中应用更改,但是在我们的案例中,我们认为最好将Terraform文件的版本保持为git,以便能够更改有关此配置的详细信息并进行检查)。例如,这可能是我们使用的命令:kops create cluster \
--name=my_new_cluster \
--ssh-public-key=k8s.pub \
--dns-zone=<your-name>.<your-domain> \
--cloud=aws \
--master-size=t2.medium \
--node-size=t2.medium \
--vpc=<vpc-id> \
--zones=us-east-1a,us-east-1b,us-east-1c \
--master-zones=us-east-1a,us-east-1b,us-east-1c \
--out=my_new_cluster \
--target=terraform
这将为Kubernetes集群创建Terraform配置(在
--out
标志指定的目录中),该集群具有节点和主机分布在3个可用区(us-east-1a,us-east-1b和us-east-1c)中。这意味着创建:所有必需的子网,安全组和路由表
IAM角色
AWS Auto Scaling组管理集群节点和主节点(这是魔术在所有这些中,它们是通过在流量增加时启动额外的节点来维护群集的高可用性的节点,并替换有故障的节点)。
所有EC2实例和EBS卷
Route53 DNS记录引用k8的集群API和内部DNS以与Pod通信。
kops
内部使用kubectl
在Kubernetes中创建集群和所有必要的配置。配置,并在AWS中观看所有内容。确实,这非常简单,但是您必须学习Terraform的工作方式。我发现它非常直观。稍后,您可能需要编辑集群。有一个命令:
terraform apply
,让您执行此操作。所有配置均为kops edit cluster <cluster-name>
格式。我不会详细说明,但进行一些更改后,您可能需要yaml
才能应用它们。希望我已经很清楚了。评论
很棒的详细答案。 Kubernetes :-)万岁,谢谢Terraform!
– Eldad Assis
17年9月10日在5:33
@EldadAK很高兴为您提供了帮助。另外:您还可以使用github.com/kubernetes/kops/blob/master/docs/…使用竞价型实例;)构建集群。您只需要设置maxPrice即可。如果您对此有兴趣,我可以在实施时详细说明。
–klaus
17-09-10 18:26
#2 楼
(Kublr CTO)看一下Kublr-https://kublr.com/它是专门为以下用例设计的:集中管理和操作多个和/或多个Kubernetes集群或异构目标环境。当前,它支持AWS,Azure,Google Cloud,vSphere,vCloud Director和本地/ BYOI(自带基础架构模式。
在此响应中-https://devops.stackexchange.com/ a / 9281/17283-我更详细地描述了设计Kublr时我们认为重要的要求。
评论
Kops已经使用Terraform并在IIRC引擎下使用ansible@Tensibai其实没有。如果按原样运行,则kops将直接与AWS API交互。使用--target = terraform标志,它会生成供您应用的配置,正如我在我的答案中详述的那样。
@klaus怪我的错误记忆:)