概述
在AWS上安装k8s有很多方式,比如可以用传统的kubeadmin安装,缺点是整个VPC和EC2的环境都得自己先搭建出来;也可以考虑用eksctl安装,优点是快捷省事,而且整个AWS的架构都可以一起安装了,master node节点完全托管给AWS;还有一种比较常用的方式就是kops安装。kops和eksctl类似,安装可以连vpc和ec2 autoscaling等架构一起安装,但是所有的master node和 worker node都是用户自己管理。如果是企业级的安装配置,一般推荐使用eksctl或者 kops安装,前者有AWS官方技术支持,后者有kubernetes的官方技术支持。而且比起eksctl而言,kops可以直接导出对应的terraform code 而不需要手动编写。
下面看看如何实现的。
操作
创建S3 bucket
和terraform state file类似,我们也需要创建一个S3 bucket来存放我们的kops state 文件
aws s3api create-bucket --bucket kops-state-storage-cluster-yl --region ap-southeast-2 --create-bucket-configuration LocationConstraint=ap-southeast-2
创建一个subdomain
kops是基于域名的。我在做测试的时候,我的主域名是存在一个aws的账号的route53中,但是我测试的是另外一个aws账号,因此我把子域名的NS 服务器都在对应的主域名里面添加NS记录。
比如,在当前测试的AWS账号里面我创纪录一个yuanli.exedev.com.au 的hosted zone
在另外一个AWS账号中,在exedev.com.au的hosted zone里面,我需要创建一个NS 记录,添加上面的的NS server
等待一分钟之后,就可以测试了。随便创建一个A 记录,应该在电脑上就能解析出来了。
创建一个集群cluster
接下来,可以创建集群了。命令如下
export KOPS_STATE_STORE=s3://kops-state-storage-cluster-yl
export NAME=yuanli.exedev.com.au
kops create cluster --cloud aws --name ${NAME} --zones ap-southeast-2a kops update cluster --name yuanli.exedev.com.au --yes –admin
他会自动创建VPC,subnet 和 autoscaling group
编辑集群cluster
默认情况下,他会创建一个master和一个worker node
我们可以修改master或者worker node的节点数
kops get instancegroups
kops edit instancegroups nodes-ap-southeast-2a
kops update cluster --name yuanli.exedev.com.au --yes --admin
测试
下面简单的测试一下,起一个deployment,里面是nginx,然后直接用loadbalancer的模式暴露出端口,他会自动创建一个CLB的load balancer。如果需要创建alb或者nlb,那么还需要额外安装alb ingress controller
kubectl get node
kubectl create deployment my-nginx --image=nginx --replicas=1 --port=80;
kubectl expose deployment my-nginx --port=80 --type=LoadBalancer;
kubectl get svc
等待几分钟之后,service 就绪,clb创建成功,我们可以直接访问
删除集群
Kubectl delete svc my-nginx
Kubectl delete deploy my-nginx
Kops delete cluster –name ${NAME} --yes