使用Rancher在Microsoft Azure上搭建Kubernetes集群

By | 2019年9月14日

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。

image

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的订阅。

image

Subscription ID

使用你的Microsoft Account登录Azure Portal,在左侧的列表中,选择Cost Management + Billing,然后选择Subscriptions,在主界面中你就能看到你的Subscription ID:

image

Client ID

使用你的Microsoft Account登录Azure Portal,在左侧的列表中,选择Azure Active Directory,然后选择App registrations,点击New registration按钮,添加一个新的App registration:

image

在Register an application页面中,输入App registration的名字,在Supported account types中,选择第二个或者第三个选项,Redirect URL不需要填写:

image

然后点击Register按钮开始创建。成功之后,可以在App registrations中Owned applications选项卡下找到刚创建的registration:

image

点击这个app registration即可看到Client ID和Tenant ID。将这两个ID复制下来备用,并将Client ID填入Add Cloud Credential界面中:

image

Client Secret

仍然在上面这一步的界面中,点击Certificates & secrets选项:

image

然后在Client secrets下点击New client secret按钮新建一个Secret。新建成功后,会在表格中出现Client secret,点击复制按钮将其复制下来。Client secret只有在初次被创建的时候才会显示出来。

image

同样,将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)后,点击添加按钮:

image

在“添加”界面中,进行如下配置:

image

在进行完以上操作后,Azure部分的配置也就完成了。接下来创建Node Template以及Kubernetes集群。

创建基于Azure的Node Template

回到Rancher,在用户菜单中选择Node Templates,然后点击Add Template按钮:

image

在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,这将简化之后的应用程序的部署,我会在后篇文章中介绍。

image

接下来,在Node Pools部分,填写Kubernetes节点机器(Nodes)的相关信息:为集群节点机器的名称设置一个前缀,选择节点个数,选择所使用的Node Template,然后勾选etcd、Control Plane和Worker三个选项:

image

然后,在Cluster Options中,将Cloud Provider设置为Azure,其它选项默认:

image

此时又会有一系列的选项需要填写。重点填写如下几个:

  • aadClientId:上文中创建的Client ID
  • aadClientSecret:上文中创建的Client Secret
  • subscriptionId:MSDN Subscription ID
  • tenantId:上文中创建的Tenant ID

全部填写后,点击Create按钮创建集群。等待片刻后,Azure Kubernetes集群就会以Active状态出现在Clusters列表中:

image

进入Azure Portal,找到集群所对应的资源组,可以看到Rancher所创建的、集群所需的所有资源:

image

开始使用Kubernetes集群

在Rancher中点击集群的名称,就可以进入集群的Dashboard,在Dashboard的右上方,有个Kubeconfig File的按钮,点击这个按钮,Rancher就会把该集群的Kubeconfig文件内容显示出来。

image

将Kubeconfig文件的内容复制到剪贴板,然后粘贴到C:\Users\<当前用户名>\.kube\config文件中(如果是Linux机器,那就是~\.kube\config文件)并保存,此时打开命令行,执行kubectl config get-contexts,将看到类似下面的结果:

image

然后可以执行一下kubectl get namespaces,可以得到类似如下的结果:

image

由此证明,集群连接成功。

总结

本文介绍了使用Rancher在Microsoft Azure上部署Kubernetes集群的过程。Rancher不仅支持Azure,而且还支持AWS、Google GKE、DigitalOcean甚至是本地Kubernetes集群的部署,非常方便易用。在下一篇文章中,我会介绍如何使用HELM创建Kubernetes应用程序包,然后将我们已有的应用程序部署到Kubernetes集群中。

(总访问量:845;当日访问量:1)

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据