从零开始搭建阿里云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
使用阿里云云盘作静态PVC
https://help.aliyun.com/document_detail/86612.html?spm=a2c4g.11186623.6.669.76ce43ce8PfQ0v
使用云盘做PVC有最小容量限制(普通5G,高效20G)
NAS作动态StorageClass
https://help.aliyun.com/document_detail/88940.html?spm=a2c4g.11186623.6.668.5dfe3269cBGI5X#h2-url-3
安装插件”的YAML,有一处错误会导致部署不成功,删除即可
使用阿里云OSS做静态PVC
https://help.aliyun.com/document_detail/86543.html?spm=a2c4g.11186623.6.672.39916b80bTWatb
(由于微信限制,以上链接只能手动复制到浏览器中打开)
使用阿里云集群的优势
在此之前,我们团队一直是使用ECS自建集群。在一番评估之后,最终迁移到了阿里云的托管集群,主要有以下几个优势。
与POD网络互通
托管集群,VPC网络和POD网络是互通的,你在ECS机器里,就可以ping通POD IP。
如此,只需要在ECS主机上,搭建一个VPN,我们连入VPC网络的同时,也连入了POD网络。
对于开发调试,直连POD,不要太方便。
也可以使用阿里云的付费VPN网关功能,配置更简单
扩容方便,切支持自动扩缩容
集群的自动伸缩,和容器的HPA功能,可以让集群和应用根据实际使用情况,自动进行扩容和缩容。这极大的解放了运营人员,节假日再也不需要为了扩容紧张值班了!
便捷使用云盘、NAS、OSS作为StorageClass
如题,可直接使用云盘作为PVC,这极大方便了IO性能敏感的应用(例如DB)。
OSS则可作为存储成本非常低廉的方式,并且可以极大缩减我们管理OSS文件的成本。
自动接入阿里云日志系统
只需要在界面上简单的配置,就可以便捷的将容器日志接入阿里云日志系统。
事后搜索、查看、分析日志,简直不要太方便啦。
再也不需要担心日志把硬盘撑爆了。
部署更多服务
如果你对通过Rancher部署包括 Jenkins、 MongoDB、 OpenVPN 等更多服务感兴趣,可以参考这篇文章:
感谢
感谢阿里云徐果、了哥,及相关支持人员的大力协助。