Google创建了Kubernetes,以帮助开发人员更好地跨集群管理其容器化应用程序。尽管测试版于2014年发布,但Kubernetes的第一个稳定版本于2018年9月推出,以下将介绍这个流行的新工具的基本架构和用途。

集群管理的必要性

今天的互联网用户不能容忍停机时间,因此开发人员不得不在不中断服务的情况下找到执行维护和更新的方法。容器或包含应用程序运行所需的所有内容的隔离环境使开发人员可以轻松地动态编辑和部署应用程序。因此,容器化已成为打包,部署和更新分布式Web应用程序的首选方法。

当然,跨多台计算机管理此类应用程序可能会很快变得复杂,这就是谷歌开始开发一个开源系统的原因,该系统可以简化跨多个主机的容器化应用程序的“部署,扩展和操作”。Kubernetes允许开发人员创建和管理物理和虚拟机的“集群”,以便通过共享网络协调合作。

Kubernetes的优势

Kubernetes减轻了在大规模生产环境中手动管理容器的负担,如果设置正确,Kubernetes可以通过自动化基础架构资源管理为开发人员节省时间和金钱。例如,当实例失败时,Kubernetes会自动重新创建,最终结果是更顺畅的用户体验和更少的应用停机时间,使用Kubernetes带来了学习曲线。

Kubernetes集群

Kubernetes集群是一个能够相互通信的容器网络,您可以拥有一个仅在一台计算机上运行的小型集群,或者您可以创建跨多台计算机运行的大型集群。集群中的计算机分配了特定角色,Kubernetes集群通常包括:

主服务器

主服务器是主要机器,负责促进集群的不同组件之间的通信,主服务器使用所谓的声明性计划,使用可用的基础架构最有效地运行应用程序。

节点

Kubernetes集群中的其他计算机充当在本地和外部资源的帮助下执行工作负载的节点,节点通过称为kubelet的代理与主节点通信,每个节点的配置数据存储在称为etcd的分布式键值存储中。

一个容器运行时

每个节点必须具有容器运行时(例如Docker)来处理来自主服务器的指令,Docker的工作当然是创建和管理容器。

网络

容器需要网络和IP地址以促进通信,Web开发人员可以选择几个Kubernetes网络

Kubernetes API

最终用户可以通过主API与集群交互,开发人员使用名为kubectl的命令行工具控制其容器化应用程序。这些组件一起工作以确保应用程序的所需状态与群集的状态匹配。

对象和工作量

Kubernetes对象模型提供了原语,允许开发人员定义工作负载,促进扩展和与对象交互,这些是您将要处理的主要对象类型和工作负载:

Pods

容器本身包含在称为pods的对象中,Pod由一个或多个容器组成,这些容器协同工作并在同一节点上共享生命周期。例如,pod可以包含运行应用程序服务器的主容器和负责在检测到外部存储库更改时检索文件的帮助程序容器。Kubernetes集群将每个pod作为一个单元进行管理。

复制控制器和集

通过定义pod模板和创建副本以分配工作负载,复制控制器和复制集可以实现水平扩展。

部署

部署是开发人员直接管理pod的生命周期的高级对象,它们描述了应用程序的所需状态。部署修改后,Kubernetes会自动调整所有副本集,从而可以在不影响应用程序可用性的情况下执行更新。

服务

Pod只能在其Kubernetes集群中访问,因此要使您的应用程序可用于外部单词,pod必须作为服务公开。Kubernetes服务将相关的pod组合在一起,并将它们作为单个实体呈现给最终用户。

Kubernetes入门

在开始使用Kubernetes创建集群之前,必须先下载并安装几个东西,出于本教程的目的,我们需要:

Minikube,一个轻量级的发行版,可让您在本地运行Kubernetes集群

VirtualBox这样的虚拟化软件

KubectlKubernetes的命令行客户端

Docker这样的容器运行时

创建群集

我们将使用Minikube创建一个小型虚拟机,并使用一个节点部署一个集群。

1.安装VirtualBox

下载VirtualBox并按照操作系统的安装说明进行操作,或者,您可以使用KVM2或您喜欢的任何管理程序。

2安装Kubectl

Kubectl是开发人员与集群交互的方式,您可以在Kubernetes网站上下载kubectl并查找安装说明。

3.安装Docker

请下载并安装适用于Windows的Docker或适用于Mac的Docker,Linux用户可以查阅Docker文档以查找其分发的安装说明。

4.安装Minikube

有关设置适用于Windows,Mac或Linux 的Minikube所需的一切,请参阅Minikube文档

5.运行Minikube

完成所有设置后,创建群集只需要一个步骤,从命令行输入:

minikube start

现在,要确认您的集群正在运行,请输入:

kubectl get nodes

如果操作正确,您应该会看到有关群集的一些信息,例如其状态和版本号。

配置Kubectl

如果您按照上述步骤安装了Minikube,那么kubectl应该自动配置自己以访问您创建的集群,您可以使用以下命令进行确认:

kubectl cluster-info

~/.kube/config文件定义了kubectl可以访问的哪些API端点和集群,确定哪个集群kubectl与之交互称为“setting the context.”。要查看所有可用上下文,请使用以下命令:

kubectl config use-context minikube

您可以使用KUBECONFIG变量更改上下文,如果一切都配置正确,您应该能够使用以下命令在浏览器中打开Kubernetes仪表板:

minikube dashboard

Kubernetes仪表板

Kubernetes仪表板会告诉您需要了解的有关群集的所有信息,要确定仪表板是否已启动并运行,请输入以下命令:

kubectl get pods -n kube-system

寻找以kubernetes-dashboard,开头的条目,在您可以查看仪表板之前,必须运行以下命令来代理API:

kubectl proxy

现在,Kubernetes API将在http://localhost:8001,要在浏览器中打开信息中心,请访问以下网址:

http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

创建服务

如前所述,pod最初只能通过集群中的内部IP地址访问,为了使您的容器可以在Kubernetes之外访问,必须将容器作为服务公开。Kubernetes服务基本上是一个内部负载平衡器,要公开pod,请使用以下kubectl命令:

kubectl expose deployment hello-node –type=LoadBalancer

–type=LoadBalancer标志让Kubernetes知道您希望向公众公开该服务,只需替换hello-node应用程序容器的名称即可,您可以使用以下命令查看新创建的服务:

kubectl get services

如果您的云提供商支持负载均衡器,则可能会为您提供外部IP地址来访问该服务。如果您使用的是Minikube,则–type=LoadBalancer标志可通过minikube服务命令访问您的服务。

结论

考虑到该工具的复杂性和实用性,很难相信Kubernetes是一个开源工具。不要被看似复杂的架构和令人困惑的拼写所吓倒,如果您正在跨多台机器开展大型项目,Kubernetes可以让您的工作更轻松。