亚马逊AWS官方博客
如何在 AWS 中国区上基于 EC2搭建 Kubernetes
一、 AWS基础环境搭建
1.1 为k8s集群创建一个VPC
参考:
https://docs.amazonaws.cn/vpc/latest/userguide/getting-started-ipv4.html
1.1.1 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/
1.1.2 点击Create VPC按钮
1.1.3 输入IPv4 CIDR block,再点击Create
1.2 创建一个Internet Gateway,并绑定刚创建的VPC
参考:
https://docs.amazonaws.cn/vpc/latest/userguide/VPC_Internet_Gateway.html
1.2.1 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/
1.2.2 在导航窗格中,选择 Internet Gateways (Internet 网关),然后选择 Create internet gateway (创建 Internet 网关)
1.2.3 选择刚刚创建的 Internet 网关,然后选择 Actions, Attach to VPC (操作,附加到 VPC)。
1.2.4 从列表中选择 VPC,然后选择 Attach (附加)
1.3 在本机上安装AWS CLI
参考:
https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/cli-chap-install.html
1.4 通过AWS CLI创建AWS IAM User
在AWS CLI中执行以下命令
aws iam create-group --group-name kops
aws iam attach-group-policy --policy-arn arn:aws-cn:iam::aws:policy/AmazonEC2FullAccess --group-name kops
aws iam attach-group-policy --policy-arn arn:aws-cn:iam::aws:policy/AmazonRoute53FullAccess --group-name kops
aws iam attach-group-policy --policy-arn arn:aws-cn:iam::aws:policy/AmazonS3FullAccess --group-name kops
aws iam attach-group-policy --policy-arn arn:aws-cn:iam::aws:policy/IAMFullAccess --group-name kops
aws iam attach-group-policy --policy-arn arn:aws-cn: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
aws iam create-access-key --user-name kops
1.5 创建一个S3 Bucket
参考:
https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/gsg/CreatingABucket.html
1.5.1 登录 AWS 管理控制台并通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
1.5.2 选择 Create bucket (创建存储桶)
1.5.3 在 Bucket name 字段中,为新存储桶键入一个符合 DNS 标准的唯一名称,对于 Region,选择作为要将存储桶放置到的区域,选择下一步
1.5.4 选择下一步
1.5.5 选择下一步
1.5.6 选择创建存储桶
1.6 生成一个SSH ID
执行ssh-keygen命令,生成SSH ID,默认为 ~/.ssh/id_rsa.pub
1.7 配置AWS CLI
创建kops用户的aksk,并记录保存,参考:
https://docs.amazonaws.cn/IAM/latest/UserGuide/id_credentials_access-keys.html
aws iam create-access-key –user-name kops
配置AWS CLI
aws configure
AWS Access Key ID:
AWS Secret Access Key:
Default region name:
Default output format:
二、下载kops-cn项目及相关工具
2.1 安装kops and kubectl(可以在Mac或EC2上)
2.1.1 安装kops
Linux:
curl -Lo kops curl -Lo kops https://github.com/kubernetes/kops/releases/download/1.14.0/kops-linux-amd64
chmod +x ./kops
sudo mv ./kops /usr/local/bin/
Mac:
curl -Lo kops curl -Lo kops https://github.com/kubernetes/kops/releases/download/1.14.0/kops-linux-amd6chmod +x ./kops
sudo mv ./kops /usr/local/bin/
验证:
kops version
2.1.2 安装kubectl
Linux:
curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/v1.17.0/bin/linux/amd64/kubectlchmod +x ./kubectlsudo mv ./kubectl /usr/local/bin/kubectl
MacOS:
curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/v1.17.0chmod +x ./kubectlsudo mv ./kubectl /usr/local/bin/kubectl
验证:
kubectl version
2.2 下载kops-cn项目到本地
curl https://github.com/nwcdlabs/kops-cn/archive/master.zip -L -o kops-cn.zip
unzip kops-cn
cd kops-cn-master
三、创建k8s集群
3.1 编辑 Makefile文件
vi Makefile
您需要设置如下变量
Name | Description | values |
TARGET_REGION | 选择将集群部署在aws北京或宁夏区域 | cn-north-1 or cn-northwest-1 |
AWS_PROFILE | 选择制定其他不同的AWS_PROFILE | default |
KOPS_STATE_STORE | 您需要提供一个S3桶给KOPS存放配置信息 | s3://YOUR_S3_BUCKET_NANME |
VPCID | 选择将您的集群部署在哪个VPC中 | vpc-xxxxxxxx |
MASTER_COUNT | master节点的机器数量 | 3 (建议不要修改) |
MASTER_SIZE | master节点的机器类型 | 例如m5.large |
NODE_SIZE | 工作节点的机器类型 | 例如c5.large |
NODE_COUNT | 工作节点的机器数量 | 例如3 |
SSH_PUBLIC_KEY | 本地ssh公钥的存放路径 | ~/.ssh/id_rsa.pub [default] |
KUBERNETES_VERSION | 指定kubernetes版本 | 1.14.6 |
KOPS_VERSION | 指定kops版本 | 1.14.0 |
AMI | 指定Master和Node的AMI | AMI ID(注意AMI ID和Region有关) |
3.2 创建集群文件
make create-cluster (有可能会因为网络原因而失败,多重试几次)
3.3 编辑集群文件
make edit-cluster
将 以下内容贴到spec 下并保存退出
assets:
containerRegistry: 937788672844---dkr---ecr---cn-north-1.amazonaws.com.rproxy.goskope.com.cn
fileRepository: https://s3---cn-north-1.amazonaws.com.rproxy.goskope.com.cn/kops-bjs/fileRepository/
docker:
logDriver: ""
registryMirrors:
- https://registry.docker-cn.com
如果要修改集群名,请不要修改后缀k8s.local
如果要自定义子网CIDR,可以修改subnets的CIDR,子网名称请不要修改
3.4 更新和创建集群
make update-cluster
(有可能会因为网络原因而失败,多重试几次)
3.5 验证集群
make validate-cluster
或者
export KOPS_STATE_STORE=s3://YOUR_S3_BUCKET_NANMEexport AWS_REGION=cn-north-1 or cn-northwest-1kops validate cluster
四、删除集群
make delete-cluster
五、常见问题
5.1 完成kopscn的步骤后,kops validate cluster不能使用,提示需要KOPS_STATE_STORE参数
这是因为参数缺失,执行以下命令后就可以正常使用:
export KOPS_STATE_STORE=s3://YOUR_S3_BUCKET_NANMEexport AWS_REGION= cn-north-1 or cn-northwest-1
5.2 如何在其他的机器上查看和维护环境?
首先,按照上面文档的操作装步骤,在机器上完成配置AK/SK,配置SSH ID,安装awscli、kubectl、kops(不需要下载kops-cn)。首先执行以下命令配置参数:
export KOPS_STATE_STORE=s3://YOUR_S3_BUCKET_NANMEexport AWS_REGION= cn-north-1 or cn-northwest-1kops export kubecfg nlp-test.k8s.local
然后可以正常使用kops管理集群
5.3 配置文件如何同步?
集群的配置文件存放在之前指定的S3目录下,可以使用kops相关命令进行修改。
修改cluster信息(k8s.local这个后缀不难修改):
kops edit cluster --name=cluster.zhy.k8s.local
修改master实例组:
kops edit ig --name=cluster.zhy.k8s.local master-cn-northwest-1a
修改node实例组:
kops edit ig --name=cluster.zhy.k8s.local nodes
5.4 如何修改AutoScaling参数?
执行以下命令修改实例组信息:
kops edit ig --name=cluster.zhy.k8s.local nodes
修改实例组的实例类型和容量,比如:
machineType: c5.large
maxSize: 5
minSize: 1
保存修改后执行以下命令:
kops update cluster cluster.zhy.k8s.local --yes
5.5 如何增加新的AutoScaling组?
可以执行以下命令创建新的实例组(可能会失败,多试几次):
kops create ig --name=cluster.zhy.k8s.local nodes2 --role node
填写实例组配置,比如:
apiVersion: kops/v1alpha2
kind: InstanceGroup
metadata:
creationTimestamp: 2019-12-16T15:01:45Z
generation: 1
labels:
kops.k8s.io/cluster: cluster.k8s.local
name: nodes2
spec:
image: ami-0d8487330873f710c
machineType: m5.large
maxSize: 5
minSize: 1
nodeLabels:
kops.k8s.io/instancegroup: nodes
role: Node
subnets:
- cn-northwest-1a
- cn-northwest-1b
- cn-northwest-1c
保存退出后,执行以下命令更新集群:
kops update cluster --name=cluster.zhy.k8s.local --yes
5.6 如何卸载指定的node节点?
首先,可以通过kubectl列出所有节点:
kubectl get nodes
然后,通过drain命令卸载指定的节点:
kubectl drain <node name>
5.7 如何在现有的子网中搭建k8s?
首先编辑 Makefile文件
vi Makefile
再在creat-cluster中添加如下信息:
--ssh-public-key=$(SSH_PUBLIC_KEY) \
--zones=zone name, zone name, zone name \
--subnets=子网ID, 子网ID,子网ID
5.8 如何SSH Master节点和Node节点?
默认Debian AMI ssh方式为 ssh -i ~/.ssh/id_rsa admin@IP
六、参考
https://github.com/nwcdlabs/kops-cn/blob/master/README.md