本Kubernetes实施示例演示了如何在Windows 10上创建单节点群集,以启动并运行容器化的应用程序。
Kubernetes使开发人员和系统管理员可以快速部署应用程序并将其扩展到其需求,而无需停机。Kubernetes系统是高度可配置的,几乎所有内容都围绕四个重要概念:节点,pod,部署和服务。
准备好进入Kubernetes的世界了吗?这是开始的关键步骤和Kubernetes命令。
学习Kubernetes架构的基础知识
首先,了解Kubernetes系统的基础非常有用。运行容器的服务器及其内部的应用程序称为节点。主服务器控制,管理和配置这些节点服务器。主节点还管理Pod或一组驻留在节点上的一个或多个容器。
主服务器充当Kubernetes集群的控制平面。控制平面中各种组件的主要目的是维护所有Kubernetes对象的记录,并通过自动响应变化来连续管理集群的期望状态。
控制平面有四个主要组成部分:
- Etcd:Kubernetes集群etcd的最基本组件是轻量级可用的配置存储。它可以跨多个Kubernetes节点设置。它的主要目的是存储Kubernetes集群中每个节点都可以访问的配置数据。
- Kube-apiserver:这是用于kubectl等命令行工具的RESTful接口,为它们提供了与Kubernetes集群进行交互的方式。简单来说,它充当各种工具的管理点,以通过REST API控制和配置Kubernetes集群。
- Kube控制器管理:该服务的主要作用是维护群集的状态,例如副本数。如果观察到所需状态有任何变化,则kube-controller-manager将运行所需的过程以确保满足所需状态。
- Kube调度器:该组件的主要职责是根据配置,资源需求和特定于工作负载的需求计划群集工作负载。
节点服务器有多个组件,这些组件使主服务器可以使用它们。这些包括:
- 容器运行时:要运行封装在节点上存在的pod中的应用程序,我们需要一个轻量级的,隔离的操作环境:容器。容器运行时是一种工具,例如Docker,用于创建,部署和运行应用程序。
- Kubelet:Kubelet是安装在节点上以与主节点进行通信并从其接收命令的代理或服务。它指导需要在节点上执行的操作,例如创建,缩放和删除容器。
- Kube代理:此代理服务将请求中继到正确的容器并执行负载平衡。Kube-proxy还执行主机级子网划分,以确保其他组件可以访问服务。
Kubernetes实施步骤
在本教程中,我们将创建一个在Windows 10操作系统上运行的单节点群集。
要在Windows上安装和设置Kubernetes,请加载kubectl并安装minikube。Chocolatey软件包管理器在此过程中会提供帮助。命令行工具kubectl对Kubernetes集群运行命令,而minikube是使我们能够在机器上的VM中运行单节点集群的工具。输入命令:
- choco install Kubernetes-cli minikube
这将返回如下所示的输出:
现在,运行以下命令并验证您的计算机上是否安装了kubectl:
- kubectl.exe version --client
必须在以下屏幕截图中看到类似的输出:
接下来,在Kubernetes中启动一个工作机-或节点。它可以是物理机或虚拟机。为此,请使用以下命令启动minikube:
- minikube start
这将返回如下所示的输出:
由于我们在Windows上安装Kubernetes,因此请使用Hyper-V启动VM并在VM上设置Kubernetes集群。
这样就完成了设置。
如何在Kubernetes中运行容器
要启动容器,请使用下面的Kubernetes命令创建部署。提供部署名称和要部署的容器映像。Kubernetes将自动选择Docker作为默认的容器运行时。在这里,我们使用将运行Nginx Web服务器的镜像:
- kubectl.exe create deployment my-nginx --image nginx
创建部署后,Kubernetes将构建Pod来承载应用程序实例。
运行上一条命令后立即输入get pods,以在部署pod时捕获ContainerCreating状态:
- kubectl.exe get pods
这将在几秒钟内完成,并且容器状态应更改为“正在运行”:
如下所示,将describe关键字与部署名称一起使用,以查看有关部署的更多详细信息:
- kubectl.exe get deployment
- kubectl.exe describe deployment helloworld-nginx
这将返回结果,例如副本数,所需状态和时间戳记:
在此Kubernetes实施教程中,我们仅运行一个容器或Nginx服务器,但有时必须适应增加的工作量和流量。在这种情况下,请扩大应用程序实例的数量。这可以通过使用带有--replicas参数的kubectl规模部署来实现:
- kubectl.exe scale deployment helloworld-nginx --replicas 4
检查部署。将观察到已部署了该应用程序实例的四个副本:
现在,检查Kubernetes pod;该节点上应运行四个容器:
启动应用程序并运行
现在,有一个应用程序在具有各自IP地址的多个容器中运行。接下来,将它们公开到群集之外,以便可以访问该应用程序:
- Kubectl.exe expose deployment helloworld-nginx --port=80 --type=NodePort
通过kubectl get services命令进行验证。这将返回NodePort的服务类型,以在Kubernetes集群的每个节点上公开端口80。该服务是一个抽象层,基本上可以实现负载平衡,并在共享IP地址的群集中对一个以上的pod进行分组。
要在Web浏览器中打开此应用程序,请创建一个代理以将本地端口连接到群集端口,我们在上一步中使用NodePort服务公开了该端口:
- kubectl.exe port-forward svc/helloworld-nginx 80:80
如下所示:
转到Web浏览器并打开http://127.0.0.1/或http://localhost/以查看在Kubernetes容器中部署的Nginx Web服务器的主页。
测试Kubernetes控制平面
最后,测试Kubernetes控制平面或主服务器是否能够维持节点服务器上运行的Pod的所需状态。要检查这一点,请使用以下命令来强制删除运行该应用程序实例的一个容器:
- kubectl.exe delete pod helloworld-nginx-67bb76cf46-mks6j
识别出这种不希望的状态,Kubernetes将立即在容器中运行该应用程序的新实例: