查看原文
其他

从零开始搭建阿里云ACK集群和Rancher环境

k8w TypeScript全栈开发 2019-12-18

创建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 等更多服务感兴趣,可以参考这篇文章:

《阿里云搭建Rancher2.0集群》


感谢

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


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存