本篇内容主要讲解“怎么用KOps在AWS上部署和管理Kubernetes”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用KOps在AWS上部署和管理Kubernetes”吧!
Kubernetes作为容器编排的领导者地位已经不容置疑,可是Kubernetes还是面临这一些问题,一个是学习曲线非常陡峭,从容器到K8s你仍然要学习很多东西,另一个是部署,要在部署一套K8s并不容易,你有一些选择:
minikube minikube在你的本机的VM中安装一个单节点的K8s集群,但是这个只能用于本地测试和学习,不能用于真正的生产和大规模使用。
裸机 bare metal 可以自己在裸机(或者虚机)上安装,但是要自己管理物理资源,配置网络和驱动,很麻烦。如果想挑战自己的话可以去参考官方文档
云服务 (cloud hosted solution),各大云厂商都推出了自己的K8s的云方案。云服务优势明显,但通常云服务的master是由云厂商控制,用户自己对集群的控制比较少,而且,云服务使得用户把自己的业务绑定在某个云厂商。例如:
Google GKE
Azure AKS
Amazon EKS
IBM Cloud Kubernetes Service
阿里 容器服务
最后,我们希望使用云,但是又不想受到云厂商的限制,这个时候我们可以使用例如以下个工具在云上部署自己的K8s。例如:
Kops
Kubespray
我们今天就看看如何使用kops在AWS上部署一个K8s的cluster。
假定所有操作在Linux客户端中完成,Mac或者其它客户端自行搜索。
假定你有一个拥有对应权限的AWS account。
安装客户端
安装kubectl,kubectl是K8s的命令行客户端,Kops会使用该客户端进行k8s的配置。
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectlchmod +x ./kubectlsudo mv ./kubectl /usr/local/bin/kubectl
安装kops
curl -LO https://github.com/kubernetes/kops/releases/download/$(curl -s https://api.github.com/repos/kubernetes/kops/releases/latest | grep tag_name | cut -d '"' -f 4)/kops-linux-amd64chmod +x kops-linux-amd64sudo mv kops-linux-amd64 /usr/local/bin/kops
配置AWS资源
首先要安装AWS cli
实现我们需要一个AWS用户用于运行Kops,该用户需要具有以下的权限:
AmazonEC2FullAccessAmazonRoute53FullAccessAmazonS3FullAccessIAMFullAccessAmazonVPCFullAccess
用CLI创建对应的用户组,用户和access key:
aws iam create-group --group-name kopsaws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonEC2FullAccess --group-name kopsaws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonRoute53FullAccess --group-name kopsaws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess --group-name kopsaws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/IAMFullAccess --group-name kopsaws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonVPCFullAccess --group-name kopsaws iam create-user --user-name kopsaws iam add-user-to-group --user-name kops --group-name kopsaws iam create-access-key --user-name kops
记录下最后一步创建的用户SecretAccessKey 和 AccessKeyID,并在客户端中配置,导出到环境变量
# configure the aws client to use your new IAM useraws configure # Use your new access and secret key hereaws iam list-users # you should see a list of all your IAM users here# Because "aws configure" doesn't export these vars for kops to use, we export them nowexport AWS_ACCESS_KEY_ID=$(aws configure get aws_access_key_id)export AWS_SECRET_ACCESS_KEY=$(aws configure get aws_secret_access_key)
用户配置好了可以配置DNS,这个是可选项,我们先略过。
Kops把K8s集群的配置存储在AWS的S3中,每一个集群的配置对应于一个S3文件,所有我们创建一个S3的bucket用于存储集群的配置。
export BUCKET=<bucket-name>aws s3api create-bucket \ --bucket $BUCKET \ --region us-west-2 \ --create-bucket-configuration LocationConstraint=us-west-2aws s3api put-bucket-versioning --bucket $BUCKET --versioning-configuration Status=Enabled
好了,准备完毕,我们可以开始创建K8s集群了。
创建集群
首先, 如果你的客户端没有ssh key,创建一个
ssh-keygen -t rsa -C "your_email@example.com"
配置环境变量,定义集群的名字和配置的url
export NAME= <cluster-name>.k8s.localexport KOPS_STATE_STORE=s3://$BUCKET
创建集群之前,查看一下有哪些可用的AZ
aws ec2 describe-availability-zones --region us-west-2
我当前在使用 us-west-2的region可用的az是这三个
{ "AvailabilityZones": [ { "State": "available", "Messages": [], "RegionName": "us-west-2", "ZoneName": "us-west-2a" }, { "State": "available", "Messages": [], "RegionName": "us-west-2", "ZoneName": "us-west-2b" }, { "State": "available", "Messages": [], "RegionName": "us-west-2", "ZoneName": "us-west-2c" } ]}
那么我们就选则在us-west-2a中创建
kops create cluster \ --zones us-west-2a \ ${NAME}
注意这一步只是生成了集群的配置文件,并存储在S3中。
可以使用kops命令,修改配置:
kops edit cluster ${NAME}
如果配置没有问题,就可以部署了:
kops update cluster ${NAME} --yes
缺省的情况下,kops会创建所有对应的AWS资源,包含VPC,子网,EC2,Auto Scaling Group,ELB,安全组等等。
如果需要安装在特定的子网,在创建集群时可以指定子网的id。另外,也支持跨AZ的HA配置。
集群安装好之后,需要几分钟时间启动,我们可以用kubectl来查看一下状态(Kops会自动把cluster的配置写到~/.kube/config 文件中作为缺省配置):
kubectl cluster-info
建议安装kube-dashboard,可以用UI来管理集群,Linux终端狂人自行略过。
在集群不需要的时候,可以用kops删除集群:
kops delete cluster --name ${NAME}
扩展和暂停集群
在云上的K8s集群可以很方便的扩展,如果你的集群的计算资源都用的差不多了,你希望扩展你的集群的时候,有两种办法。
一是直接修改AWS的auto scaling group。KOps会在AWS上创建两个auto scaling group,一个用于Node,另一用于Master,通常我们只要修改Node所在的Auto Scaling Group的number就好了。
Kops的缺省设置是2,你可以把对应的数值设置成自己需要的数字。
另一个就是通过Kops来修改
kops edit ig nodes
把maxSize和minSize都设置成需要的值,然后更新
kops update cluster --yeskops rolling-update cluster
使用rolling-update可以保证在更新的时候业务不会中断。
另外,有人可能会问,我希望不用的时候能把集群暂停,这样就不会使用很多的AWS系统资源了,这要怎么办。因为Auto Scaling Group的存在,如果直接stop对应的EC2实例,Auto Scaling Group会创建新的实例的取代,所以这个方法是不管用的。其实办法很简单,只要把对应的Auto Scaling Group的数值设置为0就好了。
同样可以在AWS中直接修改Master和Node所在的Auto Scaling Group,或者在Kops中修改。
注意在Kops中修改,需要调用如下的命令来获得Master所在group的名字。
$ kops get igUsing cluster from kubectl context: staging.cluster-name.comNAMEROLEMACHINETYPEMINMAXSUBNETSmaster-us-west-2aMasterm3.medium00us-west-2anodesNodet2.medium00us-west-2a
到此,相信大家对“怎么用KOps在AWS上部署和管理Kubernetes”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!