全栈架构师39套K8s云原生实战视频教程K8s+Docker+DevOps+Jenkins
全栈架构师39套K8s云原生实战视频教程K8s+Docker+DevOps+Jenkins39套云原生实战训练营K8s,挑战年薪50万(K8s+Docker+DevOps+Jenkins+CICD+Git+Istio+Service Mesh)视频教程
39套云原生技术包含:云原生实战训练营K8s,挑战年薪50万(K8s+Docker+DevOps+Jenkins+CICD+Git+Istio+Service Mesh)云计算,微服务,容器架构师,全栈架构师,集群实战,部署落地,服务治理,服务网格,原理剖析,实战应用,云原生架构,CKA认证实战班,平台设计与开发等视频教程。
总目录:39套云原生实战训练营K8s,挑战年薪50万(K8s+Docker+DevOps+Jenkins+CICD+Git+Istio+Service Mesh)云计算,微服务,容器架构师,全栈架构师,集群实战,部署落地,服务治理,服务网格,原理剖析,实战应用,云原生架构,CKA认证实战班,平台设计与开发视频教程
第01套:云原生高薪课,挑战年薪50万,从零到一构建开源的企业级PaaS平台视频教程
第02套:拥抱云原生从无到有搭建企业自己的私有云平台实现云上亿级流Kubernetes+DevOps+Jenkins+Istio
第03套:云原生实战Docker+K8s+Kubeshere+DevOps云原生实战架构师必修课
第04套:云原生微服务架构实战精讲,微服务架构的迁移和落地视频教程
第05套:云原生微信小程序开发实战-云开发已经成为小程序开发的标配
第06套:云原生+边缘计算项目实战-KubeEdge打造边缘管理平台,实战云边端一体化设计,迈向高阶人才
第07套:真架构!真正的云原生架构与云IDC实操业务 腾讯架构师工程师TCP认证课程 含DevOps
第08套:Kubernetes全栈架构师:基于世界500强的k8s实战课程
第09套:K8S微服务与容器云架构师(Linux云计算微服务架构师) 讲解实际生产内容知识体系视频课程
第10套:KubernetesK8s CKA认证实战班(完整版)BAT大厂基于K8s构建企业容器云平台
第11套:Kubernetes 原理剖析与实战应用-进阶高级架构师的必须选项视频教程
第12套:K8S集群实战,k8s各种扩展组件的部署和使用,k8s持久化存储,k8s代码自动发布教程
第13套:Docker与Kubernetes最佳实践-架构师必备技能docker入门到专精高阶视频教程
第14套:全面Docker系统性入门+进阶实战(Docker 知识体系及使用指南&最佳实践)
第15套:DevOps实战笔记-DevOps平台设计和开发视频教程
第16套:大厂进阶篇Docker与微服务实战-技术点从入门到高级全面覆盖视频教程
第17套:DevOps落地笔记视频教程-优化研发流程,提高研发效率和产品质量,解决企业实际遇到问题
第18套:微服务Service Mesh实战 Service Mesh实践和落地的学习内容视频教程
第19套:火遍大厂的Service Mesh服务实战课程 从组件到架构全方位解读微服务之Service Mesh
第20套:Istio服务网格服务治理微服务架构与设计全面解析视频教程
第21套:大厂Istio基础与实践 云原生“薪”能力合集,一线大厂实战分享视频教程
第22套:KubernetesK8s CKS 认证实战班-架构+网络+存储+安+监控+日志+QCD视频教程
第23套:Kubernetes网络训练营,为运维和开发打造的进阶体系课Flannel+Calico+Multus+Cilium
第24套:Kubernetes实战与源码剖析体系进阶班MSB,自动化运维管理多个跨机器Docker的集群
第25套:基于阿里云平台,从0构建云原生应用架构设计与开发实战,掌握云原生技术架构开发全流程
第26套:百万云原生架构师4期-掌握云原生架构师的9大顶级架构设计思维模型,架构设计哲学本质
第27套:基于Jenkins的DevOps工程实践 使用Jenkins完成DevOps交付流水线实践落地视频教程
第28套:Jenkins核心功能快速上手Jenkins企业级持续集成持续部署CICD(DI)视频教程
第29套:P7云原生架构师剑指未来,一站式搞定企业级云原生-专业技能+核心原理+方案设计+系统分析
第30套:前端配置化+后端Serverless开发个人博客(全栈+实战)HOOKS+Redux+Webpack+Immer
第31套:玩转Serverless架构 概念篇+开发基础篇+开发进阶篇+场景案例篇视频教程
第32套:Serverless进阶实战课 成为会Serverless懂 Serverless的工程师,云原生技术要红利
第33套:kubernetesk8s各个版本高可用集群灵活安装 掌握k8s日常运维视频教程
第34套:新版K8S+DevOps云原生全栈技术——基于世界500强的高薪实战Kubernetes课
第35套:基于GO语言,K8s+gRPC实战云原生微服务开发与治理实战,完整掌握K8s微服务治理
第36套:新版容器编排k8s最佳实践kubernetes-Rancher2.x–第一季最佳实践
第37套:诸葛老师-电商项目K8S部署与性能优化实战,基于K8S集群电商微服务项目性能优化实战
第38套:Docker入门到进阶教程(Docker从零走向实战),7个深度3个全面 基础篇+提升篇+高级篇
第39套:Golang企业级运维 融合DevOps运维开发实战,高级运维必修视频课程(76课)
将 脚本之家 设为“星标⭐”
第一时间收到文章更新
作者 | 小白
出品 | 小白debug(ID:xiaobaidebug)
你是一个程序员,你用代码写了一个博客应用服务,并将它部署在了云平台上。
但应用服务太过受欢迎,访问量太大,经常会挂。
所以你用了一些工具自动重启挂掉的应用服务,并且将应用服务部署在了好几个服务器上,总算抗住了。
后来你又上线了商城应用服务和语音应用服务,随着应用服务变多,需求也千奇百怪。有的应用服务不希望被外网访问到,有的部署的时候要求内存得大于 xxGB 才能正常跑。
你每次都需要登录到各个服务器上,执行手动操作更新。不仅容易出错,还贼浪费时间。
原本就没时间找女朋友的你,现在哭得更大声了。
那么问题就来了,有没有一个办法,可以解决上面的问题?当然有,没有什么是加一个中间层不能解决的,如果有,那就再加一层。
这次我们要加的中间层,叫 Kubernetes。
Kubernetes的位置 Kubernetes 是什么?
Kubernetes,它是开源的神器,因为单词太长,所以我们习惯省略中间 8 个字母,简称它为 k8s。
k8s名称的由来
它介于应用服务和服务器之间,能够通过策略,协调和管理多个应用服务,只需要一个 yaml文件配置,定义应用的部署顺序等信息,就能自动部署应用到各个服务器上,还能让它们挂了自动重启,自动扩缩容。
听起来有些厉害,它是怎么实现这些功能的呢?
Kubernetes 架构原理
为了实现上面的功能,Kubernetes 会将我们的服务器划为两部分,一部分叫控制平面(control plane,以前叫master),另一部分叫工作节点,也就是 Node。简单来说它们的关系就是老板和打工人, 用现在流行的说法就是训练师和帕鲁。控制平面负责控制和管理各个 Node,而 Node 则负责实际运行各个应用服务。
k8s控制平面和Node的关系
我们依次看下这两者的内部架构。
控制平面内部组件
- • 以前我们需要登录到每台服务器上,手动执行各种命令,现在我们只需要调用 k8s 的提供的 api 接口,就能操作这些服务资源,这些接口都由 API Server 组件提供。
- • 以前我们需要到处看下哪台服务器 cpu 和内存资源充足,然后才能部署应用,现在这部分决策逻辑由 Scheduler(调度器)来完成。
- • 找到服务器后,以前我们会手动创建,关闭服务,现在这部分功能由 Controller Manager(控制器管理器)来负责。
- • 上面的功能都会产生一些数据,这些数据需要被保存起来,方便后续做逻辑,因此 k8s 还会需要一个存储层,用来存放各种数据信息,目前是用的 etcd,这部分源码实现的很解耦,后续可能会扩展支持其他中间件。
以上就是控制平面内部的组件。
k8s控制平面组件
我们接下来再看看 Node 里有哪些组件。
Node 内部组件
Node 是实际的工作节点,它既可以是裸机服务器,也可以是虚拟机。它会负责实际运行各个应用服务。多个应用服务共享一台 Node 上的内存和 CPU 等计算资源。
Node可以是裸机服务器或虚拟机
在文章开头,我们聊到了部署多个应用服务的场景。以前我们需要上传代码到服务器,而用了 k8s 之后,我们只需要将服务代码打包成Container Image(容器镜像),就能一行命令将它部署。
如果你不了解容器镜像的含义,你可以简单理解为它其实就是将应用代码和依赖的系统环境打了个压缩包,在任意一台机器上解压这个压缩包,就能正常运行服务。为了下载和部署镜像,Node 中会有一个 Container runtime组件。
将容器镜像粗略理解为压缩包
每个应用服务都可以认为是一个 Container(容器), 并且大多数时候,我们还会为应用服务搭配一个日志收集器 Container 或监控收集器 Container,多个 Container 共同组成一个一个 Pod,它运行在 Node 上。
一个pod内有多个容器
k8s 可以将 pod 从某个 Node 调度到另一个 Node,还能以 pod 为单位去做重启和动态扩缩容的操作。
所以说 Pod 是 k8s 中最小的调度单位。
Node调度Pod
另外,前面提到控制平面会用 Controller Manager(通过API Server)控制 Node 创建和关闭服务,那 Node 也得有个组件能接收到这个命令才能去做这些动作,这个组件叫 kubelet,它主要负责管理和监控 Pod。最后,Node 中还有个 Kube Proxy,它负责 Node 的网络通信功能,有了它,外部请求就能被转发到 Pod 内。
控制平面和Node的组件 Cluster
控制平面和Node共同构成了一个 Cluster,也就是集群。在公司里,我们一般会构建多个集群, 比如测试环境用一个集群,生产环境用另外一个集群。同时,为了将集群内部的服务暴露给外部用户使用,我们一般还会部署一个入口控制器,比如 Ingress 控制器(比如Nginx),它可以提供一个入口让外部用户访问集群内部服务。
生产和测试环境 kubectl 是什么
上面提到说我们可以使用 k8s 提供的 API 去创建服务,但问题就来了,这是需要我们自己写代码去调用这些 API 吗?答案是不需要,k8s 为我们准备了一个命令行工具 kubectl,我们只需要执行命令,它内部就会调用 k8s 的 API。
kubectl调用k8s的API
接下来我们以部署服务为例子,看下 k8s 是怎么工作的。
怎么部署服务?
首先我们需要编写 YAML 文件,在里面定义 Pod 里用到了哪些镜像,占用多少内存和 CPU 等信息。然后使用 kubectl 命令行工具执行 kubectl apply -f xx.yaml ,此时 kubectl 会读取和解析 YAML 文件,将解析后的对象通过 API 请求发送给 Kubernetes 控制平面内 的 API Server。API Server 会根据要求,驱使 Scheduler通过 etcd提供的数据寻找合适的 Node, Controller Manager会通过 API Server 控制 Node 创建服务,Node 内部的 kubelet在收到命令后会开始基于 Container runtime组件去拉取镜像创建容器,最终完成 Pod的创建。
至此服务完成创建。
部署应用服务
整个过程下来,我们只需要写一遍 yaml 文件,和执行一次 kubectl 命令,比以前省心太多了!部署完服务后,我们来看下服务是怎么被调用的。
怎么调用服务?
以前外部用户小明,直接在浏览器上发送 http 请求,就能打到我们服务器上的 Nginx,然后转发到部署的服务内。用了 k8s 之后,外部请求会先到达 Kubernetes 集群的 Ingress 控制器,然后请求会被转发到 Kubernetes 内部的某个 Node 的 Kube Proxy上,再找到对应的 pod,然后才是转发到内部容器服务中,处理结果原路返回,到这就完成了一次服务调用。
用户调用k8s内应用服务的流程
到这里我们就大概了解了 k8s 的工作原理啦,它本质上就是应用服务和服务器之间的中间层,通过暴露一系列 API 能力让我们简化服务的部署运维流程。
并且,不少中大厂基于这些 API 能力搭了自己的服务管理平台,程序员不再需要敲 kubectl 命令,直接在界面上点点几下,就能完成服务的部署和扩容等操作,是真的嘎嘎好用。
总结
- • k8s 是 G 家开源的神器,用于管理海量容器服务。
- • k8s 集群内分为控制平面和 Node,控制平面是大脑,负责发指令,Node 是手脚,负责执行任务。
- • 控制平面内有 API Server,Scheduler,Controller Manager 以及 etcd 等组件。Node 中含有 Pod,Kubelet,Container runtime, Kube Proxy 等组件。控制平面和 Node 共同构成一个 Cluster。
- • 文章通过怎么部署服务和怎么调用服务两个例子将这些组件串联了起来,方便大家加深理解。
最后给大家留一个问题,我们提到 k8s 的时候,一般会提一下 docker, 但为了避免大家混淆,我在写这篇文章的时候,只字不提 docker,你知道 docker 和 k8s 之间是什么关系吗?欢迎评论区聊聊。
-
程序解Bug最常用的K8s命令,外加使用窍门
-
一人抵一城!这个中国开发者小哥火了!!
-
80岁图灵奖得主再度出山,打造基于数据库的云原生操作系统 DBOS
-
养成15个好的代码小习惯,让老大对你刮目相看
-
微软就改了个「字」,怎么就引来全网群嘲? 返回搜狐,查看更多
责任编辑:
<article class="article" id="mp-editor">
<!-- 政务处理 -->
<p data-role="original-title" style="display:none">原标题:k8s 到底是什么,架构是怎么样的?</p>
<p><span style="font-size: 16px;">将 </span><strong>脚本之家 </strong><span style="font-size: 16px;">设为“</span><strong>星标</strong><strong>⭐</strong><span style="font-size: 16px;">”</span></p>
<p>第一时间收到文章更新</p>
<p style="text-align: right;"><span style="font-size: 16px;">作者 | 小白</span></p>
<p style="text-align: right;"><span style="font-size: 16px;">出品 | <span>小白debug</span>(ID:xiaobaidebug)</span></p>
<p>你是一个程序员,你用代码写了一个博客应用服务,并将它部署在了云平台上。 </p>
<p>但应用服务太过受欢迎,访问量太大,经常会挂。 </p>
<p><img src="//q9.itc.cn/q_70/images03/20240320/c769debe77cb45cb94e3df698efb65be.jpeg"></p>
<p style="text-align: left;">所以你用了一些工具自动重启挂掉的应用服务,并且将应用服务部署在了好几个服务器上,总算抗住了。</p>
<p><img src="//q1.itc.cn/q_70/images03/20240320/a2585c62edd64921aa323051a9bfec79.jpeg"></p>
<p><span style="font-size: 16px;">后来你又上线了商城应用服务和语音应用服务,随着</span><strong>应用服务变多</strong><span style="font-size: 16px;">,需求也千奇百怪。有的应用服务不希望被外网访问到,有的部署的时候要求内存得大于 xxGB 才能正常跑。</span></p>
<p><span style="font-size: 16px;">你每次都需要登录到各个服务器上,执行</span><strong>手动</strong><span style="font-size: 16px;">操作更新。不仅容易出错,还贼</span><strong>浪费时间</strong><span style="font-size: 16px;">。</span></p>
<p style="text-align: left;"><strong>原本就没时间找女朋友的你,现在哭得更大声了。</strong></p>
<p style="text-align: left;">那么问题就来了,有没有一个办法,可以解决上面的问题?当然有,<strong>没有什么是加一个中间层不能解决的,如果有,那就再加一层</strong>。</p>
<p>这次我们要加的中间层,叫 <strong>Kubernetes</strong>。</p>
<p><img src="//q5.itc.cn/q_70/images03/20240320/f00ed45573cb4acb9c46033e800259da.jpeg"></p>
<p>Kubernetes的位置 Kubernetes 是什么? </p>
<p style="text-align: left;">Kubernetes,它是开源的神器,因为单词太长,所以我们习惯省略中间 8 个字母,简称它为 <strong>k8s</strong>。</p>
<p><img src="//q4.itc.cn/q_70/images03/20240320/6dfe591695554796a4e993d5373c7d60.jpeg"></p>
<p>k8s名称的由来 </p>
<p><span style="font-size: 16px;">它介于</span><strong>应用服务</strong><span style="font-size: 16px;">和</span><strong>服务器</strong><span style="font-size: 16px;">之间,能够通过策略,协调和管理多个应用服务,只需要一个 </span><strong>yaml</strong><span style="font-size: 16px;">文件配置,定义应用的部署顺序等信息,就能自动部署应用到各个服务器上,还能让它们挂了自动重启,自动扩缩容。</span></p>
<p style="text-align: left;">听起来有些厉害,它是怎么实现这些功能的呢?</p>
<p>Kubernetes 架构原理 </p>
<p style="text-align: left;"><span style="font-size: 16px;">为了实现上面的功能,Kubernetes 会将我们的服务器划为两部分,一部分叫</span><strong>控制平面</strong><span style="font-size: 16px;">(control plane,以前叫master),另一部分叫</span><strong>工作节点</strong><span style="font-size: 16px;">,也就是 </span><strong>Node</strong><span style="font-size: 16px;">。简单来说它们的关系就是老板和打工人, 用现在流行的说法就是训练师和帕鲁。控制平面负责控制和管理各个 Node,而 Node 则负责实际运行各个应用服务。</span></p>
<p><img data-src="wxcWD3sAnMjy6azFPk/mHxcVdx0qvcow2yhWDxXMsJ2SkVcb1ZtC0AvXG4GTAkXs40KDjZ33U0QQAgbA4ooPvV+/TqkKjs1Q0cb75FJ1ZQw="></p>
<p>k8s控制平面和Node的关系 </p>
<p><span style="font-size: 16px;">我们依次看下这两者的内部架构。</span></p>
<p>控制平面内部组件 </p>
<ul>
<li>• 以前我们需要登录到每台服务器上,手动执行各种命令,现在我们只需要调用 k8s 的提供的 api 接口,就能操作这些服务资源,这些接口都由 API Server 组件提供。</li>
<li>• 以前我们需要到处看下哪台服务器 cpu 和内存资源充足,然后才能部署应用,现在这部分决策逻辑由 Scheduler(调度器)来完成。</li>
<li>• 找到服务器后,以前我们会手动创建,关闭服务,现在这部分功能由 Controller Manager(控制器管理器)来负责。</li>
<li>• 上面的功能都会产生一些数据,这些数据需要被保存起来,方便后续做逻辑,因此 k8s 还会需要一个存储层,用来存放各种数据信息,目前是用的 etcd,这部分源码实现的很解耦,后续可能会扩展支持其他中间件。</li>
</ul>
<p style="text-align: left;">以上就是控制平面内部的组件。</p>
<p><img data-src="1yUEsxyfsUpaAj7lfsOvAxcVdx0qvcow2yhWDxXMsJ3P4YiRV2HH5p8S0CbQVrnr577CWun1JnjJCuIlKN1o7jj0RC+vk6sFSNaTClwI5hc="></p>
<p>k8s控制平面组件 </p>
<p><span style="font-size: 16px;">我们接下来再看看 Node 里有哪些组件。</span></p>
<p>Node 内部组件 </p>
<p style="text-align: left;">Node 是实际的工作节点,它既可以是<strong>裸机服务器</strong>,也可以是<strong>虚拟机</strong>。它会负责实际运行各个应用服务。多个应用服务<strong>共享</strong>一台 Node 上的内存和 CPU 等计算资源。</p>
<p><img data-src="wXdZHLbub1cJf8KN0C5vfRcVdx0qvcow2yhWDxXMsJ2sJLn4JTm076aPUV8PKCOss4xARfggIAacRct3QkVsr2QPO9gCZjQlXvTj3gOEWdQ="></p>
<p>Node可以是裸机服务器或虚拟机 </p>
<p><span style="font-size: 16px;">在文章开头,我们聊到了部署多个应用服务的场景。以前我们需要上传代码到服务器,而用了 k8s 之后,我们只需要将服务代码打包成</span><strong>Container Image</strong><span style="font-size: 16px;">(容器镜像),就能一行命令将它部署。</span></p>
<p style="text-align: left;">如果你不了解容器镜像的含义,你可以简单理解为它其实就是将<strong>应用代码</strong>和依赖的<strong>系统环境</strong>打了个压缩包,在任意一台机器上解压这个压缩包,就能正常运行服务。为了下载和部署镜像,Node 中会有一个 <strong>Container runtime</strong>组件。</p>
<p><img data-src="AdrUyzrPRqQ3SLRqyklRvRcVdx0qvcow2yhWDxXMsJ1I7RAPRh+X4K7dyIJHpkfbAOU4nC6H06Vv/yz9BlnZDeRrYKqJV2Cy48aCO6M37qs="></p>
<p>将容器镜像粗略理解为压缩包 </p>
<p><span style="font-size: 16px;">每个应用服务都可以认为是一个 </span><strong>Container</strong><span style="font-size: 16px;">(容器), 并且大多数时候,我们还会为应用服务搭配一个日志收集器 Container 或监控收集器 Container,多个 Container 共同组成一个一个 </span><strong>Pod</strong><span style="font-size: 16px;">,它运行在 Node 上。</span></p>
<p><img data-src="1yUEsxyfsUpaAj7lfsOvAxcVdx0qvcow2yhWDxXMsJ1D5nvK/OiL7hBA0UnyReN/aGmPPQTTeseRVsTRS0NUMi6IeyB+vBv6iMJ1Qh40ZQA="></p>
<p>一个pod内有多个容器 </p>
<p style="text-align: left;">k8s 可以将 pod 从某个 Node 调度到另一个 Node,还能以 pod 为单位去做重启和动态扩缩容的操作。</p>
<p>所以说 <strong>Pod 是 k8s 中最小的调度单位</strong>。</p>
<p><img data-src="AdrUyzrPRqQ3SLRqyklRvRcVdx0qvcow2yhWDxXMsJ1kHLXVhHa9Ce/wrlGYXPT1q/kZC0BNJNt6oGAd+HPQYn9NSEpX6Mw6ECjfQvoPFGo="></p>
<p>Node调度Pod </p>
<p><span style="font-size: 16px;">另外,前面提到控制平面会用 </span><strong>Controller Manager</strong><span style="font-size: 16px;">(通过API Server)控制 Node 创建和关闭服务,那 Node 也得有个组件能接收到这个命令才能去做这些动作,这个组件叫 </span><strong>kubelet</strong><span style="font-size: 16px;">,它主要负责管理和监控 Pod。最后,Node 中还有个 </span><strong>Kube Proxy</strong><span style="font-size: 16px;">,它负责 Node 的网络通信功能,有了它,外部请求就能被转发到 Pod 内。</span></p>
<p><img data-src="r/h2ojJAPR4iF07g/Pz9WxcVdx0qvcow2yhWDxXMsJ2tvTcwTKW01WgnW+0rWAw6uQM5t5wRb0FUvcdR7IgrrL/jMNGodqua3Q0xFapnpso="></p>
<p>控制平面和Node的组件 Cluster </p>
<p style="text-align: left;"><strong>控制平面和Node</strong>共同构成了一个 <strong>Cluster</strong>,也就是<strong>集群</strong>。在公司里,我们一般会构建多个集群, 比如测试环境用一个集群,生产环境用另外一个集群。同时,为了将集群内部的服务暴露给外部用户使用,我们一般还会部署一个入口控制器,比如 <strong>Ingress 控制器(比如Nginx)</strong>,它可以提供一个入口让外部用户访问集群内部服务。</p>
<p><img data-src="r/h2ojJAPR4iF07g/Pz9WxcVdx0qvcow2yhWDxXMsJ02Sq/BX9ZLYWxjDPo0K4mQCCYzT083SP8Th5ceyPu34MXleJV3Po+l+Wy8Ol++VQk="></p>
<p>生产和测试环境 kubectl 是什么 </p>
<p style="text-align: left;">上面提到说我们可以使用 k8s 提供的 API 去创建服务,但问题就来了,这是需要我们自己写代码去调用这些 API 吗?答案是不需要,k8s 为我们准备了一个命令行工具 <strong>kubectl</strong>,我们只需要执行命令,它内部就会调用 k8s 的 API。</p>
<p><img data-src="AdrUyzrPRqQ3SLRqyklRvRcVdx0qvcow2yhWDxXMsJ3tpfMrLjJR8n/zmEwt0NJwuphWowTHr32hNo7vs7vdb66rJPJD2bIOMuSpMIoysds="></p>
<p>kubectl调用k8s的API </p>
<p style="text-align: left;">接下来我们以部署服务为例子,看下 k8s 是怎么工作的。</p>
<p>怎么部署服务? </p>
<p style="text-align: left;">首先我们需要编写 <strong>YAML 文件</strong>,在里面定义 Pod 里用到了哪些镜像,占用多少内存和 CPU 等信息。然后使用 kubectl 命令行工具执行 kubectl apply -f xx.yaml ,此时 kubectl 会读取和解析 YAML 文件,将解析后的对象通过 API 请求发送给 Kubernetes 控制平面内 的 <strong>API Server</strong>。API Server 会根据要求,驱使 <strong>Scheduler</strong>通过 <strong>etcd</strong>提供的数据寻找合适的 <strong>Node</strong>, <strong>Controller Manager</strong>会通过 API Server 控制 Node 创建服务,Node 内部的 <strong>kubelet</strong>在收到命令后会开始基于 <strong>Container runtime</strong>组件去拉取镜像创建容器,最终完成 <strong>Pod</strong>的创建。</p>
<p style="text-align: left;">至此服务完成创建。</p>
<p><img data-src="lEVudsxXQilkQo3OKeq3UxcVdx0qvcow2yhWDxXMsJ0khiBi1/JAupTVTTTK1hU4tAUpaZ9Wfh5gyZe94h7tTAVkhzSK/MkgpUrwdpLxPTU="></p>
<p>部署应用服务 </p>
<p><span style="font-size: 16px;">整个过程下来,我们只需要写一遍 yaml 文件,和执行一次 kubectl 命令,比以前省心太多了!部署完服务后,我们来看下服务是怎么被调用的。</span></p>
<p>怎么调用服务? </p>
<p style="text-align: left;">以前外部用户小明,直接在浏览器上发送 http 请求,就能打到我们服务器上的 Nginx,然后转发到部署的服务内。用了 k8s 之后,外部请求会先到达 Kubernetes 集群的 Ingress 控制器,然后请求会被转发到 Kubernetes 内部的某个 Node 的 <strong>Kube Proxy</strong>上,再找到对应的 pod,然后才是转发到内部<strong>容器服务</strong>中,处理结果原路返回,到这就完成了一次服务调用。</p>
<p><img data-src="/L19E/drXjGfZ2kuFxSZZRcVdx0qvcow2yhWDxXMsJ34jIa0gkEXhNKl9wq6upoKOgpaF8kgK1quTsB/KqgcJMFFACtr344O3WlyWzZrQDE="></p>
<p>用户调用k8s内应用服务的流程 </p>
<p style="text-align: left;">到这里我们就大概了解了 k8s 的工作原理啦,它本质上就是应用服务和服务器之间的<strong>中间层</strong>,通过暴露一系列 API 能力让我们简化服务的部署运维流程。</p>
<p style="text-align: left;">并且,不少中大厂基于这些 API 能力搭了自己的服务管理平台,程序员不再需要敲 kubectl 命令,直接在界面上点点几下,就能完成服务的部署和扩容等操作,是真的嘎嘎好用。</p>
<p>总结 </p>
<ul>
<li>• k8s 是 G 家开源的神器,用于管理海量容器服务。</li>
<li>• k8s 集群内分为控制平面和 Node,控制平面是大脑,负责发指令,Node 是手脚,负责执行任务。</li>
<li>• 控制平面内有 API Server,Scheduler,Controller Manager 以及 etcd 等组件。Node 中含有 Pod,Kubelet,Container runtime, Kube Proxy 等组件。控制平面和 Node 共同构成一个 Cluster。</li>
<li>• 文章通过怎么部署服务和怎么调用服务两个例子将这些组件串联了起来,方便大家加深理解。</li>
</ul>
<p style="text-align: left;"><span style="font-size: 16px;">最后给大家留一个问题,我们提到 k8s 的时候,一般会提一下 </span><strong>docker</strong><span style="font-size: 16px;">, 但为了避免大家混淆,我在写这篇文章的时候,只字不提 docker,你知道 </span><strong>docker 和 k8s 之间是什么关系吗?</strong><span style="font-size: 16px;">欢迎评论区聊聊。</span><span></span></p>
<ol>
<li><p>程序解Bug最常用的K8s命令,外加使用窍门 </p></li>
<li><p>一人抵一城!这个中国开发者小哥火了!! </p></li>
<li><p>80岁图灵奖得主再度出山,打造基于数据库的云原生操作系统 DBOS </p></li>
<li><p>养成15个好的代码小习惯,让老大对你刮目相看 </p></li>
<li><p>微软就改了个「字」,怎么就引来全网群嘲? <a href="https://www.sohu.com/?strategyid=00001&spm=smpc.content.content.2.1714093010062Oq2NSdG" target="_blank" title="点击进入搜狐首页" id="backsohucom" style="white-space: nowrap;" data-spm-data="2"><span class="backword"><i class="backsohu"></i>返回搜狐,查看更多</span></a></p></li>
</ol> <!-- 政务账号添加来源标示处理 -->
<!-- 政务账号添加来源标示处理 -->
<p data-role="editor-name">责任编辑:<span></span></p>
</article>全栈架构师39套K8s云原生实战视频教程K8s+Docker+DevOps+Jenkins全栈架构师39套K8s云原生实战视频教程K8s+Docker+DevOps+Jenkins全栈架构师39套K8s云原生实战视频教程K8s+Docker+DevOps+Jenkins全栈架构师39套K8s云原生实战视频教程K8s+Docker+DevOps+Jenkins全栈架构师39套K8s云原生实战视频教程K8s+Docker+DevOps+Jenkins全栈架构师39套K8s云原生实战视频教程K8s+Docker+DevOps+Jenkins
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!