随着Kubernetes社区的不断壮大,其版本不断更迭,新功能及BugFIX也不断更新,促使其部署方式也不断的变化,本文将带您在阿里云上快速的部署一个高可用的Kubernetes集群。并且添加阿里云CloudProvider支持,让您可以方便的自由的使用阿里云上的SLB,NAS,阿里云盘,VPC网络等云资源。
如上图,脚本通过执行SSH命令的方式部署一个M + N节点的Kubernetes集群,M=Number(Master) N=Number(Worker)。
下面示例了3个master节点+2个worker节点部署结构。
假设我们已经选定192.168.0.1作为总控机执行所有命令,首先登录到总控机上。ssh [email protected]
下载部署脚本:
[email protected] # curl https://aliacs-k8s-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/public/pkg/run/1.0/kuberun.sh > kuberun.sh
[email protected] # chmod +x kuberun.sh
一键部署ETCD集群:
[email protected] # ./kuberun.sh --role deploy-etcd \
--hosts 192.168.0.1,192.168.0.2,192.168.0.3 \
--version v3.0.17
上面--hosts
参数指定etcd组件将要在哪几个机器上部署, --version
指定etcd的版本号,目前支持v3.0.17
。命令执行完成后一个高可用ETCD集群就部署完成了,peer证书及客户端证书都存放在/var/lib/etcd/cert下面。
验证:
[email protected] # etcdctl --endpoints=https://192.168.0.1:2379 \
--ca-file=/var/lib/etcd/cert/ca.pem \
--cert-file=/var/lib/etcd/cert/etcd-client.pem \
--key-file=/var/lib/etcd/cert/etcd-client-key.pem \
cluster-health
注:
- 任何时候您部署etcd集群出错后可以通过命令
./kuberun.sh --role destroy-etcd --hosts 192.168.0.1,192.168.0.2,192.168.0.3 --version v3.0.17
来清理etcd部署环境。
这些Master组件包含 kubelet,kube-proxy,kubectl,kube-apiserver,kube-controllermanage,kube-scheduler
一键部署master节点
使用上一步下载的kuberun.sh脚本
[email protected] # export APISERVER_SLB=192.168.0.98 \
KEY=abc.efg \
KEY_SECRET=mntjklouwbkddlam \
HOSTS=192.168.0.1,192.168.0.2,192.168.0.3 \
ETCD_HOSTS=192.168.0.1,192.168.0.2,192.168.0.3
[email protected] # kuberun.sh --role deploy-masters \
--container-cidr 172.16.0.0 \
--hosts ${HOSTS} \
--etcd-hosts ${ETCD_HOSTS} \
--apiserver-lb ${APISERVER_SLB} \
--extra-sans 3.3.3.3 \
--docker-version 17.06.1.ce \
--key ${KEY} \
--key-secret ${KEY_SECRET}
参数解析:
deploy-master deploy-node destroy-node
注:
- 如果本地不存在安装包,则会自动从阿里云官网上下载安装包。
- 任何时候部署出错,可以通过命令
./kuberun.sh --role destroy-nodes --hosts 192.168.142.188,192.168.0.1,192.168.0.2,192.168.0.3
清理整个环境后重新开始- Master被设置了不调度普通应用,因此您还需要为集群添加node节点来运行常规应用负载.
该命令执行完成后,一个包含master节点的集群就运行起来了.可以通过命令kubectl get no ; kubectl get po -n kube-system
来查看集群应用于节点信息了。
现在可以开始加入Node节点了。
添加Worker节点的脚本和部署Master的脚本是同一个。同样在总控机192.168.0.1上执行,假设您要添加的节点IP为192.168.0.168,192.168.0.169
,请运行如下命令将两个节点添加到集群中。
为了能够安全的将节点添加到集群中,你需要在添加节点是携带一个token,并且指明apiserver endpoint的地址。
token可以通过命令 kubeadm token list
获得,假设为TOKEN=d79fd6.b754322ebab94533
。
apiserver endpoint为您上面创建的阿里云SLB地址ENDPOINT=192.168.0.98
。
[email protected] # export TOKEN=d79fd6.b754322ebab94533 \
APISERVER_LB=192.168.0.98 \
HOSTS=192.168.0.168,192.168.0.169
[email protected] # kuberun.sh --role deploy-nodes \
--hosts ${HOSTS} \
--apiserver-lb ${APISERVER_LB} \
--token ${TOKEN} \
--endpoint ${APISERVER_LB}:6443
参数解析:
destroy-nodes
kubeadm token list
获得。验证
通过kubectl get no
命令可以显示出刚添加的节点。
按照以上方法成功部署一个kubernetes集群后,可以参照阿里云容器服务文档连接到该集群。
阿里云提供了非常简单高效的方式让您可以快速的在阿里云上搭建一个高可用的Kubernetes集群,让您从负载的集群部署工作中解放出来,更加专注于上层应用开发。同时,集成了阿里云CloudProvider,可以让您直接通过应用部署描述文件使用诸如阿里云SLB、NAS、阿里云盘等云上资源。
阿里云容器服务将以上过程模板化,让您甚至可以不用输入以上命令即可通过ROS模板一键部署Kubernetes集群。欢迎您试用ROS模板一键创建。
阿里云容器服务团队致力于在阿里云上推广容器技术。想了解更多容器服务内容,请访问https://www.aliyun.com/product/containerservice