在本文中,我将介绍容器,解释Kubernetes,并教你如何使用CircleCI将应用程序容器化和部署到Kubernetes集群。
Docker?什么是Docker?
使用容器,开发人员可以轻松将镜像(重新)部署到任何操作系统。 只需安装Docker,执行命令,你的应用程序即可启动并运行。哦,不要担心主机操作系统中新版本库的任何不一致。此外,您可以在同一主机上启动很多容器——不管是相同的应用程序还是其他应用程序,都没关系。
看起来Docker是一个很棒的工具。但是我应该如何以及在何处启动容器?运行容器的方式有很多选择:
AWS Elastic Container Service(AWS Fargate或具有水平和垂直自动伸缩的预留实例);
Azure或Google Cloud中具有预定义Docker镜像的云实例(包含模板,实例组和自动缩放);
在你自己的服务器上;
当然还有Kubernetes!Kubernetes是2014年由Google工程师专门为虚拟化和容器创建的。
Kubernetes?那是什么?
那我为什么要用Kubernetes呢?
看起来很有前途,特别是如果它会省钱!让我们来谈谈它!
Kubernetes日复一日地更加受欢迎。让我们更深入地研究一下这幕后的内容。
译者注:上图有个小错误,kubectl写成了kubecti。
Kubernetes是整个系统的名称,但与你的汽车一样,有许多小部件可以完美地彼此协同工作以使Kubernetes发挥其各种作用。让我们来了解它们分别是什么。
主节点(Master Node)——整个Kubernetes集群的控制面板。主节点的组件可以在群集中的任何节点上运行。关键组成部分是:
API Server:所有REST命令的入口点,是用户可以访问的主节点的唯一组件。
Datastore:Kubernetes群集使用的强大,一致且高可用的键值存储。
Scheduler:监视新创建的Pod并将它们分配给节点。Pod和Services部署到节点上主要由Scheduler来控制。
Controller manager:管理着处理集群中日常任务的所有控制器。
Worker Node:主要的节点代理,也称为minion(旧版本Kubernetes的叫法)。Pod在这里运行。工作节点包含所有必要的服务,这些服务包括管理容器之间的网络,与主节点通信以及将资源分配给已调度容器等。
Docker:运行在每个工作节点上,用来下载镜像和启动容器。
Kubelet:监视Pod的状态并确保容器已启动并运行。它还与数据存储通信,获取有关服务的信息并记录新创建的服务的详细信息。
Kube-proxy:单个工作节点上的服务的网络代理和负载均衡。它负责流量路由。
Kubectl:一个CLI工具,供用户与Kubernetes API Server进行通信。
那什么是Pod和Services?
Service是在多个Pod之上的抽象,通常需要在它上面有层代理,以便其他服务通过虚拟IP地址与其通信。
一个简单部署例子
我将使用简单的Ruby on Rails应用程序和GKE作为运行Kubernetes的平台。实际上,你可以在AWS或Azure中使用Kubernetes,甚至可以在你自己的硬件中创建集群,或使用你minikube在本地运行Kubernetes,所有的选项你都可以在这个页面Setup - Kubernetes[1]上找到。
这个app的源码你可以在GitHub - d-kononov/simple-rails-app-in-k8s[2]里找到。
要创建新的Rails应用程序,请执行:
rails new blog
在 config/database.yml文件中配置生产MySQL连接:
production:
adapter: mysql2
encoding: utf8
pool: 5
port: 3306
database: <%= ENV['DATABASE_NAME'] %>
host: 127.0.0.1
username: