在Azure上创建托管的Kubernetes(AKS)集群
据我所知,目前Azure中国区版没有官方的AKS服务,网上也有一些资料,帮助读者在Azure中国区版中部署Kubernetes集群,但是过程也相对比较繁杂。在这里,我会使用Azure国际版进行介绍。 首先,登录Azure国际版,点击Create a resource按钮,在新建资源的列表中输入Kubernetes进行搜索,在搜索结果中点击Kubernetes Service选项:- Subscription:选择你的Azure订阅
- Resource Group:为Kubernetes集群选择一个Azure的资源组(Resource Group),之后为Kubernetes创建的所有资源都会被划入该资源组中,便于管理。你也可以点击Create new按钮新建一个资源组
- Kubernetes cluster name:新创建的Kubernetes集群的名称
- Region:创建资源所属的Region
- Kubernetes version:Kubernetes的版本,选择默认的即可
- DNS name prefix:所创建集群的DNS名称前缀
- Node size:集群中每个节点的虚拟机配置,可以根据自己的实际情况进行选择,当然,配置越高费用也越高。这里我只选择Standard B2s,一个月40美金的样子
- Node count:集群中的节点个数,为了演示,我选择2个节点,于是,Node size * Node count,费用大概一个月80美金的样子
- 首先确保已经安装Azure命令行工具(Azure CLI)2.0.27或以上版本,有关Azure CLI的安装,可以参考:https://docs.microsoft.com/zh-cn/cli/azure/install-azure-cli?view=azure-cli-latest
- 使用以下命令安装kubectl命令行工具:
az aks install-cli
- Kubectl工具安装完成之后,可以将kubectl的路径添加到PATH环境变量中,方便今后使用。然后,执行下面的命令,以下载集群的登录连接凭证:
az aks get-credentials --resource-group <resource_group> --name <k8s_cluster_name>
此处<resource_group>表示在创建Kubernetes集群时指定的资源组名称,<k8s_cluster_name>则是创建集群时指定的Kubernetes集群名称 - 执行以下命令,即可打开Kubernetes集群的仪表盘(Dashboard),其中参数如上所述:
az aks browse --resource-group<resource_group> --name <k8s_cluster_name>
tasklist容器的部署
在前一篇文章中,我们已经将构建生成的容器镜像推送到Docker Hub中,并将用于部署的yml文件复制到了构建输出目录。简便起见,我已经将yml文件保存到了代码库中,在tasklist的代码库中,目前有三个yml文件:docker-compose.pki.yml,docker-compose.yml以及k8s.deployment.yml。前两个文件都是用于构建或者运行容器的(docker-compose.pki.yml文件是我私人使用的,这里可以忽略),只有k8s.deployment.yml才是真正用来实现部署的。接下来,我们将使用这个k8s.deployment.yml,将tasklist容器部署到Kubernetes集群中。Compose?Kompose?
在Kubernetes上部署容器应用,需要使用YAML格式的配置文件,然后使用kubectl apply命令实现部署。通过阅读官方网站的文档,你会发现其实编写这些YAML文件还是有一定工作量的。对于tasklist案例,我使用Google官方的Kompose命令行工具,它可以很方便地将Docker Compose文件转为Kubernetes的部署文件。官方的解释就是:Kubernetes + Compose = Kompose。不过可惜的是,Kompose的网站在国内是打不开的,不过可以通过Kompose的代码库来了解这个工具。tasklist所使用的k8s.deployment.yml文件,正是通过Kompose生成的,不过我也基于自己的需要进行了一些简单的定制。在Azure Pipeline中创建部署任务
打开Azure DevOps管理界面,选择我们在上一讲中创建的tasklist-demo项目,然后,在Pipelines下选择Releases,然后点击New pipeline按钮,新建一个Release Pipeline。- Display name:当前任务的名称,随便起一个有意义的名字就行了
- Kubernetes service connection:选择所需部署的k8s集群的连接信息。目前我们没有可用的连接,所以需要创建一个。点击New按钮即可创建:
- 在Add a Kubernetes service connection对话框中,可以选择两种认证模式:Kubeconfig和Service account。前者需要使用由Azure k8s集群提供的认证配置文件;后者则是直接通过Azure的服务账号来创建连接。这里,我们选用Kubeconfig
- 在Connection name中,输入名称
- 打开Azure Portal,进入tasklist-demo Kubernetes集群的主页,找到API server address项,将内容复制到剪贴板:
- 回到Add a Kubernetes service connection对话框,将复制的内容粘贴到Service URL中,注意前面加上https://的前缀
- 打开Azure Portal,进入tasklist-demo Kubernetes集群的主页,点击View Kubernetes dashboard连接,在Windows命令行中执行获取credential的命令,这个内容在上文也已经介绍过了,这里就贴个截图示意一下:
- 在操作系统中,打开当前用户目录(比如,Windows下为C:\Users\daxnet,Linux下为/home/daxnet),找到.kube文件夹,然后用文本编辑器打开config文件
- 复制config文件的所有内容,然后回到Add a Kubernetes service connection对话框,将内容粘贴到KubeConfig项
- 目前我们暂时不涉及证书的问题,所以勾选Accept untrusted certificates复选框
- 点击Verify connection链接,确保连接Kubernetes集群成功:
- 回到Deploy to Kubernetes页面,此时Kubernetes service connection会自动选中刚刚所创建的Kubernetes连接
- 勾选Use Configuration file复选框,在Configuration file文本框右边点击省略号按钮:
- 在Select a file or folder对话框中,选择k8s.deployment.yml。还记得上面我们选择Build作为Artifact的类型吗?这个k8s.deployment.yml就是从那边复制过来的:
- 对于其它的配置选项,我们暂且使用默认值,然后点击Save按钮,保存我们的Release Pipeline设置