Rancher是一种简化Kubernetes集群部署的方案,它的理念是,在任何地方运行Kubernetes集群。由于在最近的工作中需要用到,因此,就写一篇文章介绍一下Rancher的使用,以及通过Rancher在Azure上搭建Kubernetes集群的方式。
开始使用Rancher
Rancher的基本使用非常简单,英语比较好的可以直接翻看Rancher官网上的文档,我们先从Rancher的安装开始。Rancher的安装非常简单,在装有docker的机器上直接运行以下命令,就可以启动Rancher。
sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher
启动完成后,打开浏览器,使用http或者https访问运行Rancher容器的主机,就可以看到用户界面。第一次使用时,Rancher会提示为admin用户设置新的密码,输入密码后,就可以开始使用Rancher了。进入主界面后,页面会显示Add Cluster的按钮,点击该按钮就可以开始创建一个新的Kubernetes集群。但在开始创建集群前,有些配置是需要预先设置好的,因此,我们不急于点击这个Add Cluster按钮,我们先点击界面右上方的用户头像,然后可以看到两个重要的菜单项:Cloud Credentials以及Node Templates。
Cloud Credentials允许用户添加多个用于访问云端资源的凭证,例如,用户可以将AWS或者Azure的访问凭证添加到Rancher,在部署Kubernetes集群时,Rancher会使用指定的Cloud Credential在云端创建各种资源。
Node Templates定义了集群部署时每个节点机器的配置模板,Rancher会使用指定的Node Template创建集群节点。接下来,我就以Microsoft Azure为例,介绍Rancher的使用和Kubernetes集群的管理。
在Azure上搭建集群
创建基于Azure的Client Credential
点击Cloud Credentials菜单项,进入Cloud Credentials主界面,然后点击Add Cloud Credential按钮开始添加凭证,在弹出的Add Cloud Credential对话框中,输入Cloud Credential的名称,Cloud Credential Type选择Azure,然后填入Subscription ID、Client ID以及Client Secret。这三个值需要到Microsoft Azure中获取,因此,你需要有Microsoft Azure的订阅。
Subscription ID
使用你的Microsoft Account登录Azure Portal,在左侧的列表中,选择Cost Management + Billing,然后选择Subscriptions,在主界面中你就能看到你的Subscription ID:
Client ID
使用你的Microsoft Account登录Azure Portal,在左侧的列表中,选择Azure Active Directory,然后选择App registrations,点击New registration按钮,添加一个新的App registration:
在Register an application页面中,输入App registration的名字,在Supported account types中,选择第二个或者第三个选项,Redirect URL不需要填写:
然后点击Register按钮开始创建。成功之后,可以在App registrations中Owned applications选项卡下找到刚创建的registration:
点击这个app registration即可看到Client ID和Tenant ID。将这两个ID复制下来备用,并将Client ID填入Add Cloud Credential界面中:
Client Secret
仍然在上面这一步的界面中,点击Certificates & secrets选项:
然后在Client secrets下点击New client secret按钮新建一个Secret。新建成功后,会在表格中出现Client secret,点击复制按钮将其复制下来。Client secret只有在初次被创建的时候才会显示出来。
同样,将Client secret填入Add Cloud Credential对话框中。
再次回到Add Cloud Credential界面,此时Subscription ID、Client ID和Client Secret都已经填写完毕,点击Create按钮即可。
将App registration设置为Azure的Contributor
这一步非常重要,否则Rancher无法在Azure上创建资源。首先,打开Cost Management + Billing,然后点击你所使用的Subscription,在边栏中选择Access Control (IAM)后,点击添加按钮:
在“添加”界面中,进行如下配置:
在进行完以上操作后,Azure部分的配置也就完成了。接下来创建Node Template以及Kubernetes集群。
创建基于Azure的Node Template
回到Rancher,在用户菜单中选择Node Templates,然后点击Add Template按钮:
在Add Node Template对话框中,选择Azure,然后依次填入以下信息(此处仅列出需要注意的选项,其它选项可以使用默认值):
- Cloud Credentials:使用上文中创建的Azure Credential
- Placement部分:
- Environment:使用AzurePublicCloud
- Region:选择所需的Region
- Availability Set和Resource Group:自己取个名字即可
- Network部分:按需设置即可
- Instance部分:选择所需的Size,这关系到每月的费用,其它的默认即可
- Name:为Node Template取一个名字
上述配置完成之后,点击Create按钮,即可创建Node Template。至此,我们已经为在Azure中创建Kubernetes集群做好了准备。
Azure中Kubernetes集群的创建
现在,我们就可以到Rancher的主界面,点击Add Cluster按钮开始创建集群了。在Add Cluster界面中,首先选择Azure,然后给Cluster取一个名字。这里我们没有选择Azure AKS,因为我所介绍的是基于Azure VM的集群创建方式。在Azure中创建Kubernetes集群主要有两种方式:直接使用Azure的托管服务Azure Kubernetes Services(AKS),或者自己组建子网自己搭虚拟机自己部署。当然,使用AKS部署更加方便,不过使用Rancher的话,Rancher会帮助用户搭建并管理集群,并提供统一的使用体验和专业的工具和监控服务。更为重要的是,Rancher会在基于VM的部署中启用Ingress Controller,这将简化之后的应用程序的部署,我会在后篇文章中介绍。
接下来,在Node Pools部分,填写Kubernetes节点机器(Nodes)的相关信息:为集群节点机器的名称设置一个前缀,选择节点个数,选择所使用的Node Template,然后勾选etcd、Control Plane和Worker三个选项:
然后,在Cluster Options中,将Cloud Provider设置为Azure,其它选项默认:
此时又会有一系列的选项需要填写。重点填写如下几个:
- aadClientId:上文中创建的Client ID
- aadClientSecret:上文中创建的Client Secret
- subscriptionId:MSDN Subscription ID
- tenantId:上文中创建的Tenant ID
全部填写后,点击Create按钮创建集群。等待片刻后,Azure Kubernetes集群就会以Active状态出现在Clusters列表中:
进入Azure Portal,找到集群所对应的资源组,可以看到Rancher所创建的、集群所需的所有资源:
开始使用Kubernetes集群
在Rancher中点击集群的名称,就可以进入集群的Dashboard,在Dashboard的右上方,有个Kubeconfig File的按钮,点击这个按钮,Rancher就会把该集群的Kubeconfig文件内容显示出来。
将Kubeconfig文件的内容复制到剪贴板,然后粘贴到C:Users<当前用户名>.kubeconfig文件中(如果是Linux机器,那就是~.kubeconfig文件)并保存,此时打开命令行,执行kubectl config get-contexts,将看到类似下面的结果:
然后可以执行一下kubectl get namespaces,可以得到类似如下的结果:
由此证明,集群连接成功。
总结
本文介绍了使用Rancher在Microsoft Azure上部署Kubernetes集群的过程。Rancher不仅支持Azure,而且还支持AWS、Google GKE、DigitalOcean甚至是本地Kubernetes集群的部署,非常方便易用。在下一篇文章中,我会介绍如何使用HELM创建Kubernetes应用程序包,然后将我们已有的应用程序部署到Kubernetes集群中。