当前位置:首页 > 科技  > 软件

Kubernetes新手完全指南

来源: 责编: 时间:2023-10-10 18:32:27 364观看
导读运行应用程序通常需要使用服务器。然而,传统的服务器模式存在一些限制,无法有效定义和强制执行应用程序的边界,也无法确保资源利用的公平性,导致资源利用率低下。为了克服这些问题,虚拟化技术应运而生。虚拟化技术允许在一

运行应用程序通常需要使用服务器。然而,传统的服务器模式存在一些限制,无法有效定义和强制执行应用程序的边界,也无法确保资源利用的公平性,导致资源利用率低下。Kv528资讯网——每日最新资讯28at.com

为了克服这些问题,虚拟化技术应运而生。虚拟化技术允许在一台物理服务器上创建多个虚拟机(VM)。Kv528资讯网——每日最新资讯28at.com

虚拟机(VM)是由软件管理的虚拟化计算机系统的实例,也被称为hypervisor。每个虚拟机都是独立且隔离的实体,拥有自己的虚拟资源。多个虚拟机可以共存于同一台物理服务器上,这样就提高了资源利用率。每个虚拟机都是完全隔离的,并且有自己的操作系统。虚拟化技术有一些限制,其中之一是每台物理系统可以承载的虚拟机数量的限制。Kv528资讯网——每日最新资讯28at.com

图片虚拟机和容器Kv528资讯网——每日最新资讯28at.com

与虚拟机相比,容器提供了一种轻量级的虚拟化解决方案,因为在托管物理系统上运行的多个容器共享操作系统。与虚拟机类似,每个容器都有自己的资源集,包括CPU共享,但它与其他容器共享操作系统。Docker是广泛用于管理容器的容器运行时。Kv528资讯网——每日最新资讯28at.com

与虚拟机相比,容器具有多个优点,并且被广泛用于打包应用程序。然而,在生产环境中管理容器并提供容错和负载均衡等服务是一项具有挑战性的任务。Kv528资讯网——每日最新资讯28at.com

图片Kv528资讯网——每日最新资讯28at.com

这就是Kubernetes发挥作用的地方。它是一个开源且可扩展的容器编排平台。该项目由Google于2014年开源。它自动化容器化应用程序的部署、扩展和管理。Kubernetes允许管理和协调跨多个主机的容器集群,提供容错性和可伸缩性等服务。Kv528资讯网——每日最新资讯28at.com

注意:Kubernetes通常被称为K8s,因为在“K”和“s”之间有八个字母。Kv528资讯网——每日最新资讯28at.com

1 架构和组件

一个Kubernetes部署被称为一个Kubernetes集群,具有两种类型的资源:控制平面和节点。每个集群都有一个工作节点池,在Pod上运行容器化应用程序,Pod代表一个或多个共存的容器。这些节点由控制平面管理,如下图所示。在生产环境中,集群将包含多个工作节点,控制平面将在多台机器上运行,确保高可用性和容错性。Kv528资讯网——每日最新资讯28at.com

1.1 控制平面组件

控制平面的主要组件如下所述:Kv528资讯网——每日最新资讯28at.com

  • etcd:这是用于存储Kubernetes集群数据、服务发现详细信息和API对象的键值存储。
  • kube-scheduler:它在工作节点上调度新创建的Pod。
  • kube-controller-manager:它运行控制器进程,如处理节点故障的节点控制器和作业控制器。云集成有一个单独的控制器组件。
  • kube-apiserver:Kubernetes API服务器是集群的主要管理实体,接收所有REST请求。

Kubernetes架构Kubernetes架构Kv528资讯网——每日最新资讯28at.com

1.2 节点组件

Kubernetes集群中的每个工作节点都会运行一些组件。这里选择了Docker作为容器运行时,但Kubernetes还支持其他多种运行时。以下是这些运行时的高级概述:Kv528资讯网——每日最新资讯28at.com

  • Kubelet:它管理Pod中的容器,并确保它们运行并保持健康状态。
  • Kube-proxy:它允许来自互联网或集群内部的Pod之间进行网络通信。

2 关键概念

熟悉一些与Kubernetes相关的关键概念:Kv528资讯网——每日最新资讯28at.com

  • Pods:Kubernetes的基本构建块。Pod是Kubernetes中最小的可部署单位,代表一个或多个共存的容器。
  • ReplicaSets:确保始终运行指定数量的Pod副本。通常,我们不直接管理ReplicaSets,而是使用高级概念Deployments。
  • Deployments:一个更高级的抽象,用于管理ReplicaSets。Deployments允许我们以声明方式定义和更新应用程序的期望状态。
  • Services:同一主机上的Pod可以与其他Pod进行通信。但是,如果我们希望将运行在Pod上的应用程序暴露给外部世界(或集群内部),我们可以使用Service API。Service允许我们抽象出底层的Pod IP,并提供诸如负载均衡之类的服务。
  • 命名空间:提供一种逻辑上划分集群资源的方式,因此,命名空间内的资源名称需要是唯一的。

3 部署示例应用程序

本节将在minikube上部署一个示例应用程序,minikube是一个本地的Kubernetes集群。开发人员需要遵循minikube网站上提到的步骤,在本地系统上安装minikube。然后,使用以下命令启动集群:Kv528资讯网——每日最新资讯28at.com

minikube start

要与Kubernetes集群交互,可以使用kubectl命令行工具使用Kubernetes API对集群进行各种操作。请按照Kubernetes网站上提供的说明安装kubectl CLI。或者,minikube也附带了kubectl,可以使用minikube kubectl -- [commands]来访问。本文假设已经安装了kubectl。Kv528资讯网——每日最新资讯28at.com

kubectl命令的一般结构是提供要在<resource>上执行的<action>。要获取节点列表,可以使用以下命令。这里还提供了一些其他常见示例,以帮助开发人员入门。请注意,通过在命令的末尾添加--help,可以获取有关其用法的更多信息。Kv528资讯网——每日最新资讯28at.com

kubectl get nodeskubectl get nodes --helpkubectl get podskubectl describe pods nginx-pod

3.1 创建一个Pod

实际上,这里不会直接创建Pods,而是使用工作负载资源(例如Deployments)来创建它们。不过,为了帮助入门,以下是创建Pod的YAML模板:Kv528资讯网——每日最新资讯28at.com

apiVersion: v1kind: Podmetadata:  name: nginx-podspec:  containers:  - name: nginx    image: nginx:1.25.1    ports:    - containerPort: 80

上面显示的YAML文件更容易理解。将Pod命名为nginx-pod,并指定它包含一个运行nginx的单个容器。重申一下,Pods是Kubernetes的基本构建块。Pod是Kubernetes中最小的可部署单元,最常见的用例是每个Pod运行一个单独的容器的模型。Kv528资讯网——每日最新资讯28at.com

kubectl可以以两种不同的方式使用:命令式或声明式。在声明式使用时,提供一个描述所需状态的清单,例如上面显示的YAML文件,并且kubectl将其提交给集群,确定如何实现它。另一方面,在命令式使用时,提供特定于集群的命令来指示kubectl要执行的操作。Kv528资讯网——每日最新资讯28at.com

要创建上述文件中显示的Pod,请将内容保存到名为nginx-pod的文件中,然后使用以下命令运行kubectl apply:Kv528资讯网——每日最新资讯28at.com

kubectl apply -f nginx-pod.yaml kubectl get pods

Pod的状态从ContainerCreating更改为Running可能需要几秒钟的时间。在READY列中应该能够看到1/1。Kv528资讯网——每日最新资讯28at.com

第二个命令获取Pod列表,如果一切顺利,会在列表中找到Pod。Kv528资讯网——每日最新资讯28at.com

图片图片Kv528资讯网——每日最新资讯28at.com

至此已经在Kubernetes上创建了第一个Pod!Kv528资讯网——每日最新资讯28at.com

可以看到Pod正在运行一个监听端口80的nginx容器。然而,无法通过http://127.0.0.1:80访问它。这是可以理解的,Pod在集群内部运行,默认情况下无法直接访问。Kv528资讯网——每日最新资讯28at.com

通常,不会直接访问Pods,但是为了帮助入门,可以使用kubectl的port-forward功能,它可以在主机和Pod上指定端口之间建立隧道。Kv528资讯网——每日最新资讯28at.com

kubectl port-forward nginx-pod 8080:80

运行以上命令后,在浏览器中浏览到http://127.0.0.1:8080,应该能够看到nginx服务器的欢迎页面。按下“Ctrl + C”结束端口转发会话。现在可以删除这个Pod,因为将通过创建Deployments来管理它们。Kv528资讯网——每日最新资讯28at.com

kubectl delete pod nginx-podkubectl get pods

3.2 创建一个部署

在前面的部分中,创建了第一个Pod,但在实践中,通常不直接创建Pod,而是使用工作负载资源,如Deployments。在本部分中,将使用下面的清单创建第一个Deployment:Kv528资讯网——每日最新资讯28at.com

apiVersion: apps/v1kind: Deploymentmetadata:  name: nginx-deployment  labels:    app: nginxspec:  replicas: 2  selector:    matchLabels:      app: nginx-pod  template:    metadata:      labels:        app: nginx-pod    spec:      containers:      - name: nginx        image: nginx:1.25.1        ports:        - containerPort: 80

该清单有三个重要部分。将部署命名为nginx-deployment,然后通过指定副本数为2创建一个ReplicaSet。之前学到过,ReplicaSets确保指定数量的Pod副本始终运行。部署名称将指导副本的命名,稍后会看到。最后,在第12-21行中指定Pods模板。这是一个示例,重申下通常不直接创建Pods,而是使用更高级的概念(如Deployments)管理它们。Kv528资讯网——每日最新资讯28at.com

将清单保存到名为nginx-deployment.yaml的文件中,然后使用以下命令创建一个部署:Kv528资讯网——每日最新资讯28at.com

kubectl apply -f nginx-deployment.yamlkubectl get deployments

如果一切顺利,应该能够在列表中看到部署。可以注意到READY列中的2/2与ReplicaSet规范相匹配。还可以获取Pod列表来确认这一点。Kv528资讯网——每日最新资讯28at.com

现在,可以通过删除Pods来测试部署的可用性,并观察它如何通过启动新的Pods自动实现期望的状态。需要使用以下命令:Kv528资讯网——每日最新资讯28at.com

kubectl get podskubectl delete pod nginx-deployment-7d6955794c-s8c2hkubectl get pods

被删除的Pod的名称对您来说可能会有所不同,但是您会注意到一旦删除一个Pod,就会实例化另一个具有不同名称的Pod。可以观察AGE列来确认这种行为。Kv528资讯网——每日最新资讯28at.com

现在已经成功创建了第一个部署!Kv528资讯网——每日最新资讯28at.com

3.3 创建一个服务

开发人员可以使用服务API将运行在Pods上的应用程序暴露给外部世界。服务允许我们抽象底层的Pod IP,并提供负载均衡等服务。通常,可以创建多种类型的服务,并存在许多相关的用例。可以使用以下命令为部署创建一个服务:Kv528资讯网——每日最新资讯28at.com

kubectl expose deployment nginx-deployment --type=LoadBalancer --name=nginx-service --port=80

kubectl expose允许将Kubernetes对象(在我们的情况下是部署)作为新的Kubernetes服务暴露出来。可以在服务列表中看到新创建的服务,并使用describe命令获取有关服务的更多详细信息,如下所示:Kv528资讯网——每日最新资讯28at.com

kubectl get serviceskubectl describe service nginx-service

NodePort字段的值指定了一个随机端口,可以用于访问服务。由于在本文中使用minikube,可以使用以下命令访问服务:Kv528资讯网——每日最新资讯28at.com

minikube service nginx-service

这将打开nginx的欢迎页面。但是,我们不直接访问Pods,可以通过删除现有的Pods并重新访问服务来确认这一行为。Kv528资讯网——每日最新资讯28at.com

4 总结

Kubernetes是一个开源的、可扩展的容器编排平台。Kubernetes允许管理和协调跨多个主机的容器集群,提供容错和可扩展性等服务。Kv528资讯网——每日最新资讯28at.com

本文详细介绍了Kubernetes的架构和组件,结合了各种关键概念的简介。本文提供了一个实践指南,介绍了如何在本地的Kubernetes集群minikube上部署样例应用程序。Kv528资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-12755-0.htmlKubernetes新手完全指南

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 更强大的 React 错误处理方式!

下一篇: 超越React,JS代码体积减少90%!它为何是2023年最好的Web框架?

标签:
  • 热门焦点
  • Find N3入网:最高支持16+1TB

    OPPO将于近期登场的Find N3折叠屏目前已经正式入网,型号为PHN110。本次Find N3在外观方面相比前两代有很大的变化,不再是小号的横向折叠屏,而是跟别的厂商一样采用了较为常见的
  • K60 Pro官方停产 第三方瞬间涨价

    虽然没有官方宣布,但Redmi的一些高管也已经透露了,Redmi K60 Pro已经停产且不会补货,这一切都是为了即将到来的K60 Ultra铺路,属于厂家的正常操作。但有意思的是该机在停产之后
  • 直屏旗舰来了 iQOO 12和K70 Pro同台竞技

    旗舰机基本上使用的都是双曲面屏幕,这就让很多喜欢直屏的爱好者在苦等一款直屏旗舰,这次,你们等到了。据博主数码闲聊站带来的最新爆料称,Redmi下代旗舰K70 Pro和iQOO 12两款手
  • 7月安卓手机性能榜:红魔8S Pro再夺榜首

    7月份的手机市场风平浪静,除了红魔和努比亚带来了两款搭载骁龙8Gen2领先版处理器的新机之外,别的也想不到有什么新品了,这也正常,通常6月7月都是手机厂商修整的时间,进入8月份之
  • 从 Pulsar Client 的原理到它的监控面板

    背景前段时间业务团队偶尔会碰到一些 Pulsar 使用的问题,比如消息阻塞不消费了、生产者消息发送缓慢等各种问题。虽然我们有个监控页面可以根据 topic 维度查看他的发送状态,
  • 不容错过的MSBuild技巧,必备用法详解和实践指南

    一、MSBuild简介MSBuild是一种基于XML的构建引擎,用于在.NET Framework和.NET Core应用程序中自动化构建过程。它是Visual Studio的构建引擎,可在命令行或其他构建工具中使用
  • 为什么你不应该使用Div作为可点击元素

    按钮是为任何网络应用程序提供交互性的最常见方式。但我们经常倾向于使用其他HTML元素,如 div span 等作为 clickable 元素。但通过这样做,我们错过了许多内置浏览器的功能。
  • 每天一道面试题-CPU伪共享

    前言:了不起:又到了每天一到面试题的时候了!学弟,最近学习的怎么样啊 了不起学弟:最近学习的还不错,每天都在学习,每天都在进步! 了不起:那你最近学习的什么呢? 了不起学弟:最近在学习C
  • 东方甄选单飞:有些鸟注定是关不住的

    文/彭宽鸿编辑/罗卿东方甄选创始人俞敏洪带队的&ldquo;7天甘肃行&rdquo;直播活动已在近日顺利收官。成立后一年多时间里,东方甄选要脱离抖音自立门户的传闻不绝于耳,&ldquo;7
Top