关键词:
1. aws
2. kops
3. vpc
4. subnet
5. nlb
6. elb
7. kubernetes k8s
8. aws-cli
9. ingress
10. api gateway
11. vpc link
目录
一、安装kops工具
curl -Lo kops 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-amd64
chmod +x ./kops
sudo mv ./kops /usr/local/bin/
kops version
二、安装kubectl
wget -O kubectl https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
sudo chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
kubectl version
三、安装awscli
sudo apt-get install awscli
aws --version
四、生成SSH密钥
生成ssh key方便登陆集群的主机。
ssh-keygen
五、创建kops账号
配置AWS账号,为aws客户端授权控制
aws configure
# AWS Access Key ID [None]: <your-accesskeyID>
# AWS Secret Access Key [None]: <your-secretAccessKey>
# Default region name [None]: ap-northeast-1
# Default output format [None]:
其中ap-northeast-1为aws云所在地区代号,注:不需要后面字母,例如ap-northeast-1c,不需要后面字母c。output format使用默认即可。
六、为kops创建一个IAM用户kops,并分配相应的权限
aws iam create-group --group-name kops
aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonEC2FullAccess --group-name kops
aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonRoute53FullAccess --group-name kops
aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess --group-name kops
aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/IAMFullAccess --group-name kops
aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonVPCFullAccess --group-name kops
aws iam create-user --user-name kops
aws iam add-user-to-group --user-name kops --group-name kops
七、为kops用户创建密钥
aws iam create-access-key --user-name kops
得到kops用户的AccessKeyID和SecretAccessKey,修改awscli的配置,让它使用新创建的kops用户的密钥。
aws configure
# AWS Access Key ID [None]: <accesskeyID-of-kops-user>
# AWS Secret Access Key [None]: # <secretAccessKey-of-kops-user>
# Default region name [None]: ap-northeast-1
# Default output format [None]:
同时将kops用户的密钥导出到命令行的环境变量,方便后面使用。
export AWS_ACCESS_KEY_ID=$(aws configure get aws_access_key_id)
export AWS_SECRET_ACCESS_KEY=$(aws configure get aws_secret_access_key)
export AWS_REGION=$(aws configure get region)
八、配置S3
为了让kops创建是基于gossip的集群,集群的命名需要使用.k8s.local作为后缀(例如wequant.k8s.local)。
# 导出集群名称环境变量
export NAME=wgy.k8s.local
#创建一个S3 bucket,用来给用户存储集群的数据,例如bucket命名为wequant.k8s.local-state-store
aws s3api create-bucket --bucket ${NAME}-state-store --create-bucket-configuration LocationConstraint=$AWS_REGION
# 导出到环境变量
export KOPS_STATE_STORE=s3://${NAME}-state-store
九、配置k8s集群
创建集群之前,查看一下有哪些可用的AZ
aws ec2 describe-availability-zones --region ap-northeast-1
kops create cluster \
--name=${NAME} \
--image=ami-04e12bea2c2c42a10 \
--zones=ap-northeast-1c \
--master-count=1 \
--master-size=t2.medium \
--node-count=1 \
--node-size=t2.medium \
--networking=calico \
--kubernetes-version=1.11.5 \
--ssh-public-key=~/.ssh/id_rsa.pub \
--associate-public-ip=true \
--api-loadbalancer-type=internal \
--topology=private \
-v 10
参数方面比较多坑,容易互相冲突,尽量不要太多参数。
kops create cluster --name=${NAME} --image=ami-01e615cf581dfdcd9 --zones=ap-northeast-1c --master-count=1 --master-size=t2.medium --node-count=1 --node-size=t2.medium --networking=calico --ssh-public-key=~/.ssh/id_rsa.pub
默认使用aws的debain系统,其中–image是虚拟机EC2安装的系统代号,注意系统需要已经安装k8s相关工具,不是空白的系统,例如:ami-082b12ea07eaf50af代表k8s-1.10-debian-jessie-amd64-hvm-ebs-2018-08-17
对于网络模型,使用calico,因为在线上都会自己进行网络规划,当使用k8s默认的kubenet时,k8s会修改AWS路由表,这意味着k8s需要有自己的路由表所有需要有自己的子网,如果在生产环境已经做好了网络规划,使用指定subnet,k8s网络将无法正常运行。
具体配置参数说明可以查看帮助说明:
kops create cluster --help
十、检查集群的配置文件是否正确
kops edit cluster ${NAME}
# 修改安装k8s版本:改为 kubernetesversion: 1.11.5
最好确认一下master节点的数量。建议实际部署的时候,最起码制定三台。
因为后续增加master节点比增加node节点麻烦多了。
# 具体的名字可以通过 kops validate cluster ${NAME} 来查看。
kops edit ig --name= master-ap-northeast-1c
kops edit ig --name= nodes
# 设置 min 和 max的值,然后
kops update cluster ${NAME} --yes
kops rolling-update cluster ${NAME}
十一、创建集群
kops update cluster ${NAME} --yes
创建集群需要一段时间,可以去控制面板查看新创建的EC2是否初始化完毕。
十二、验证集群是否创建成功
kops validate cluster
如果出现下面错误,说明集群还在启动中,需要等待集群初始化完毕再执行命令。
Using cluster from kubectl context: cluster02.k8s.local
Validating cluster cluster02.k8s.local
unexpected error during validation: error listing nodes: Get https://api-cluster02-k8s-local-gp9eoi-972287479.ap-northeast-1.elb.amazonaws.com/api/v1/nodes: EOF
kubectl get nodes
创建完之后,有可能防火墙(安全组)的原因导致无法访问了。
所以,可以尝试把aws上面由kops创建的安全组,都设置为全部放行
十三、销毁集群
# 在销毁集群之前,需要先确认一下kops会删除哪些资源
kops delete cluster --name ${NAME}
# 如果确认没问题,就可以真正删除集群
kops delete cluster --name ${NAME} --yes
十四、扩展集群节点
在AWS面板上修改
Servers –> EC2 –> Auto Scaling –> Auto Scaling组
选中节点编辑修改所需容量、最大容量。使用kops修改
kops edit ig nodes # 修改maxSize和minSize数量
# 然后更新,使用rolling-update可以保证在更新的时候业务不会中断
kops update cluster --yes
kops rolling-update cluster
# 查看集群资源
kops get ig
十五、验证一下
# 启动三个nginx
kubectl run my-nginx --image=nginx --replicas=3 --port=80
# 查看是否启动
kubectl get pods
kubectl get deployments
# 关闭刚刚启动的nginx
kubectl delete deployment my-nginx
http://xzh.i3geek.com
0 条评论