关键词:
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

十四、扩展集群节点

  1. 在AWS面板上修改
    Servers –> EC2 –> Auto Scaling –> Auto Scaling组
    选中节点编辑修改所需容量、最大容量。

  2. 使用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 条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据