k8w.io
从零开始搭建阿里云ACK集群和Rancher环境
2019-04-29作者:k8w

Rancher 2.x 是我个人非常喜欢的k8s集群管理工具。
通过阿里云Kubernetes容器服务,我们可以快速创建和管理集群。
本文将告诉你,如何从零开始创建一个ACK集群,并安装Rancher,然后管理它们。

创建ACK集群

  1. 首先从阿里云控制台进入容器服务
  2. 点击右上角的创建Kubernetes集群
  3. 选择标准托管集群
  4. 按需求选择配置即可

重要事项!

  1. VPC网络不要选择错,因为一旦选择错不可修改,只能重建集群。
  2. 公网访问强烈建议要勾选,因为如果不勾选,就再也无法从公网访问集群。(只能重建集群)这将导致包括CloudShell在内的服务都不可用。
  3. 如果为了安全起见,确实不需要公网访问,也建议勾选公网访问,之后去自动创建的负载均衡中,将对公网暴露的监听项停止,日后有需要还可以随时开启。
  4. 系统推荐选项强烈建议全部勾选(此时不勾,以后再开启会非常麻烦)

安装Rancher

注意:Rancher运行需要SA权限,所以不能以Deployment的形式在k8s中安装。

以下方式可以二选一

  • 新建一台专用于Rancher的ECS来安装,可参考这篇文章
  • 使用集群刚刚创建的Worker节点来安装

在要安装Rancher的服务器上执行以下脚本:

sudo docker run -d --restart=unless-stopped \
-p 9999:443 \
-v /var/lib/rancher:/var/lib/rancher \
--name rancher-server \
rancher/rancher

如果你的Rancher Server需要从外网访问,需要对外网暴露Rancher服务。
以下方式二选一:

  • 给所在的ECS绑定公网EIP,同时设置阿里云安全组策略(开放9999端口)
  • 使用阿里云SLB

配置Rancher

Rancher可以导入ACK集群的前提条件是,集群的Worker节点必须可以访问到Rancher Server。
可以通过公网访问Rancher Server,亦可以通过内网访问Rancher Server。

这取决于Rancher第一次启动时,你设置的Rancher Server URL。

务必确保,Worker节点可以到此URL的网络是连通的。

该地址与你在网页浏览器中访问Rancher的地址,没有必然的关联。Worker节点将以此处填写的地址连接Rancher,但你依然使用公网域名/IP在浏览器中来访问Rancher。

在Rancher中导入ACK集群

  1. 进入Rancher,点击Add Cluster
  2. 选择 Import existing cluster
  3. 然后你将看到如下图的页面,只需将最后一行命令复制,然后在kubectl中执行即可。

执行kubectl
由于刚刚创建集群时,勾选了公网访问,所以很简单,只需要在CloudShell中执行就可以。

但是注意,由于刚刚设置的Rancher Server URL为内网地址,所以生成的导入命令是这样的:

curl --insecure -sfL https://10.0.148.20:9999/v3/import/8fq8pd9tlbmms5cv84wbvl6xcsdtddr8lhvwxm6f5vmtph56xd52jt.yaml | kubectl apply -f -

10.0.148.20 是我的内网地址,CloudShell并不能访问到。
所以需要将命令中的这个地址改为公网地址。
但通过公网地址访问上述YAML时,其中的ServerURL也会变成公网。(如此Worker节点就是通过公网IP来连接Rancher了)
但我们希望Worker节点通过内网IP来连接RancherServer(速度更快且不需要流量),所以需要做以下处理。

1.先将YAML下载到CloudShell本地:

curl --insecure -sfL https://公网IP:9999/v3/import/8fq8pd9tlbmms5cv84wbvl6xcsdtddr8lhvwxm6f5vmtph56xd52jt.yaml > rancher.yaml

2.然后在CloudShell中,将文件中的公网IP替换为局域网IP。

3.然后手工导入之:

kubectl apply -f rancher.yaml

4.回到Rancher,可以看到刚刚创建的集群,Etcd和Nodes状态已经正常。

但Controller Manager和Scheduler的状态始终为不正常。
经过与阿里云客服确认,由于我们创建的是ACK托管版集群,集群的Master节点并不可见,所以实际是获取不到Controller Manager和Scheduler的状态,所以此处实际没有问题,可以忽略。

之后,就可以正常使用Rancher了。

创建静态PVC和动态StorageClass

使用阿里云集群的优势

在此之前,我们团队一直是使用ECS自建集群。在一番评估之后,最终迁移到了阿里云的托管集群,主要有以下几个优势。

与POD网络互通

托管集群,VPC网络和POD网络是互通的,你在ECS机器里,就可以ping通POD IP。
如此,只需要在ECS主机上,搭建一个VPN,我们连入VPC网络的同时,也连入了POD网络。
对于开发调试,直连POD,不要太方便。

也可以使用阿里云的付费VPN网关功能,配置更简单

扩容方便,切支持自动扩缩容

集群的自动伸缩,和容器的HPA功能,可以让集群和应用根据实际使用情况,自动进行扩容和缩容。这极大的解放了运营人员,节假日再也不需要为了扩容紧张值班了!

便捷使用云盘、NAS、OSS作为StorageClass

如题,可直接使用云盘作为PVC,这极大方便了IO性能敏感的应用(例如DB)。
OSS则可作为存储成本非常低廉的方式,并且可以极大缩减我们管理OSS文件的成本。

自动接入阿里云日志系统

只需要在界面上简单的配置,就可以便捷的将容器日志接入阿里云日志系统。
事后搜索、查看、分析日志,简直不要太方便啦。
再也不需要担心日志把硬盘撑爆了。

一些需要注意的坑

  • 使用云盘做PVC有最小容量限制(普通5G,高效20G)
  • 应用的日志设置只能在阿里云管理后台完成

部署更多服务

如果你对通过Rancher部署包括 Jenkins、 MongoDB、 OpenVPN 等更多服务感兴趣,可以参考这篇文章:
《阿里云搭建Rancher2.0集群》

感谢

感谢阿里云徐果、了哥,及相关支持人员的大力协助。

(正文完)
留言(1条)
马77 说:
大佬就是大佬
2019-05-07 22:22 | 1楼 | 回复
发表新留言
您的大名:
必填
电子邮箱:
不公开,仅用于向你发送回复