上篇 docker-compose使用笔记 ,简单介绍了docker容器编排,演示了集群应用一键编排部署的过程,其中重点就是 docker-compose文件的配置,另一个重点当然也就是每个app的dockerfile的定义。
因为容器编排过程必须依赖于每个镜像中定义好的dockerfile,以完成每个应用的容器创建过程。
本篇将介绍一个便利的可视化容器布署工具: Rancher。首先我们要了解rancher,以及与kubernates的区别,rancher 和 Kubernetes有什么区别?
文中很重要的一句提到 “用户可以在不熟悉k8s概念的情况下轻松的通过Rancher来部署容器到k8s集群当中”,事实是否如此呢?
关于rancher server 如果自建部署,请看 TeamCity+Rancher+Docker实现.Net Core项目DevOps(目前成本最小的DevOps实践)
1. 创建集群
无论你是要部署一个单点应用,还是集群应用,在rancher下面你首先都必须先创建一个集群。创建集群,可以是导入的方式,如果要部署多集群应用,这个导入功能就显得非常便捷。
创建集群的重点是为集群创建主机,这是集群的基础,按照上几篇关于consul集群的实践,这里至少是要有3台主机,反正是要3台的,不作解释也不再做先搞两台试试以证明至少必须3台。
通过rancher界面创建主机引导,最终rancher给我们实时生成了创建主机的命令,这句命令是必须复制后去到主机上运行的,告诉主机:你将加入某某集群中(集群URL),你将在这个集群中扮演苦工的角色,例如下面这句命令
sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.3.2
--server https://x.x.x.x:4433
--token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--ca-checksum xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --worker、
注意: 角色选择(每台主机可以运行多个角色。每个集群至少需要一个Etcd角色、一个Control角色、一个Worker角色),这是kubernate的硬性要求,由不得你。
什么是etcd,controller,work,借此补补一下kubernate的基础知识吧。
特别是etcd,无etcd不集群,用于集群监控,服务发现,大佬(leader)选举,类似consul。
至于什么是controller,学习webapi的程序员都知道controller,没错就是webapi的controller,因为kubernate集群框架是基于api server实现与集群中各成员信息同步的。创建主机时,命令为什么有个token,那就是主机成员与集群中心的api访问令牌
到这里,为什么创建一个kubernate集群,至少需要一个Etcd角色、一个Control角色、一个Worker角色。
使用rancher是可以不熟悉kubernate,这句话一点BUG都没有,因为熟悉kubernate的也不需用用rancher。但使用ranchger,是需要了解kubernate的。
2. 部署应用和服务
创建完集群之后,接下来要部署应用
一个集群有多个项目,也即命名空间,一个命名空间有多个工作负载,也即应用或服务,每个工作负载对应一个负载均衡配置
首先创建一个工作负载
最重要的就是选择docker镜像,一般我们会将应用的docker镜像发布云空间,例如阿里云的镜像仓库中,此处如果输入一次新的镜像链接后,以后就可以下拉选项中选中
另一个重要的部署是设置工作部署有多少个pod,OK,我们了解一下什么是kubernate的pod, pod是一个抽像概念,最常见的就是单容器pod,如果是单容器的pod,不妨可以理解为一个容器,
也就是这个应用将部署在多少个容器上面。
3. 设置负载均衡量规则
我们创建好一个应用之后,其实还只是一个空架子,现在必须设置这个应用的具体组成,首先配置应用的域名,然后是负载节点,每个负载节点其实就是一个容器,需要在此配置容器端口,这个端口是容器运行时向外暴露的监听端口。
如果有过nginx应用部署的经历,就完全不难理解这个负载节点的配置。
设置完负载节点之后,一个应用最其本搭建起来了。以后每次应用有更新,只需要升级即可,以此达到一键发布的目标。
3. 关于rancher中yaml文件编辑
反正我试过直接编辑yaml文件是没用的,可能这机制就是可视化配置生成yaml文件,所以还是乖乖的做可视化配置吧
4. 关于负载升级操作
如果想直接在主机里面,使用 docker -exce 这些命令去直接修改容器里面文件的配置,是没有用的。因为工作负载升级的过程是,移除pod,然后生成新的pod,也就是说每次升级docker容器都是新的,所以一时的直接修改完全会被recover。
5. 关于安全证书
rancher是可以为应用安装安全证书的,需要在密文中添加证书,然后在负载均衡规则配置中,为具体某个应用添加安全证书。相比直接在linux上为一个运行在docker上的应用安装证书,是非常便利的。
6. 关于运行日志
可以点击查看每个pod的运行日志,这个非常重要,也快捷,工作负载升级如果失败,都能在日志上看到。
7. 容器启动命令
容器启动是除了dockerfile设置之外,我们是可以在工作负载中自定义启动命令的,便如运行测试环境,npm run test
总结:使用rancher之前,我觉得一些必备的条件如下:对集群部署,容器化部署的基本知识有一定的理解,有过手动通过命令行部署过简单集群的经历,对kubernate的基本框架和概念有一定的理解。
理解了这些基础,再使用这个工具,就舒服了。 让我们一起 devpos吧!