( —基础— ) k8s----介绍,概念,组件(ipvs,iptables(1)
除了简历做到位,面试题也必不可少,整理了些题目,前面有117道汇总的面试到的题目,后面包括了HTML、CSS、JS、ES6、vue、微信小程序、项目类问题、笔试编程类题等专题。网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)一个人可以走的很快,但一群人才能走的更
先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024c (备注前端)
正文
从上图,我们可以看到K8S组件和逻辑及其复杂,但是这并不可怕,我们从宏观上先了解K8S是怎么用的,从上图我们可以看出:
Kubernetes集群主要由Master和Node两类节点组成
-
Master的组件包括:
apiserver
、controller-manager
、scheduler
和etcd
等几个组件,其中apiserver是整个集群的网关。 -
Node主要由
kubelet
、kube-proxy
、docker
引擎等组件组成。kubelet是K8S集群的工作与节点上的代理组件。 -
一个完整的K8S集群,还包括
CoreDNS
、Prometheus
(或HeapSter)、Dashboard
、Ingress
,Controller
等几个附加组件。
其中cAdivsor组件作用于各个节点(master和node节点)之上,用于收集及收集容器及节点的CPU、内存以及磁盘资源的利用率指标数据,这些统计数据由Heapster
聚合后,可以通过apiserver访问。
==========================================================================================
https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-apiserver/
- kube-
api
server:Kubernetes API server为 api 对象验证并配置数据
,包括 pods、services、 replication,controllers 和其它 api 对象,API Server 提供 REST 操作和到集群共享状态的前端,所有其他组件通过它进行交互。
主要作用:组件与组件之间的通信
https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-scheduler/
- Kubernetes
scheduler
:调度器是一个拥有丰富策略、能够感知拓扑变化、支持特定负载的功能组件
,它对集群的可用性、性能表现以及容量都影响巨大。
scheduler 需要考虑独立的和集体的资源需求
、服务质量需求、硬件/软件/策略限制、亲和与反亲和规范、数据位置、内部负载接口、截止时间等等。如有必要,特定的负载需求可以通过 API 暴露出来。
主要作用:依据 它对 CPU、对 memory 请求大小,找一台合适的节点,进行放置
https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-controller-manager/
- kube-
controller
-manager:控制器Controller Manager 作为集群内部的管理控制中心
,负责集群内的 Node、Pod 副本
、服务端点
(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)的管理,当某个 Node意外宕机时,Controller Manager 会及时发现并执行自动化修复流程
,确保集群始终处于预期
的工作状态。
主要用于:自动
对容器进行修复
、水平扩张
https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-proxy/
- kube-proxy : Kubernetes
网 络 代 理
运 行 在 node 上,它反映了 node 上Kubernetes API 中定义的服务,并可以通过一组后端进行简单的 TCP、UDP 流转发或循环模式(round robin))的 TCP、UDP 转发,用户必须使用 apiserver API 创建一个服务来配置代理,其实就是 kube-proxy 通过在主机上维护网络规则并执行连接转发来实现 Kubernetes 服务访问
。
https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kubelet/
- kubelet:是主要的节点代理,它会
监视已分配给节点的 pod
,具体功能如 下:
向 master 汇报 node 节点的状态信息
接受指令并在 Pod 中创建 docker 容器
准备 Pod 所需的数据卷
返回 pod 的运行状态
在 node 节点执行容器健康检查
https://github.com/etcd-io/etcd
- etcd 是 Kubernetes 提供默认的存储系统,
保存所有集群数据
,使用时需要为 etcd数据提供备份计划
,key-value存储
API Server 中所需要的这些原 信息都被放置在 etcd 中,etcd 本身是一个高可用系统,通过 etcd 保证整个 Kubernetes 的 Master 组件的高可用性。
Server端
Server控制端:通过API接受用户指令
创建,删除容器,代码升级
apiserver
controller-manager
scheduler
etcd
kubectl 命令行工具
kube-proxy
node节点
node节点:真正运行容器的地方,是真正运行业务负载的
每个业务负载会以 Pod 的形式运行
kublelet
kube-proxy
在 OS 上去创建容器所需要运行的环境,最终把容器或者 Pod 运行起 来,也需要对存储跟网络进行管理。Kubernetes 并不会直接进行网络存 储的操作,他们会靠 Storage Plugin 或者是网络的 Plugin 来进行操作。 用 户 自 己 或 者 云 厂 商 都 会 去 写 相 应 的 Storage Plugin 或 者 Network Plugin,去完成存储操作或网络操作。 在 Kubernetes 自己的环境中,也会有 Kubernetes 的 Network,它是 为了提供 Service network 来进行搭网组网的。(等一下我们也会去介 绍“service”这个概念。)真正完成 service 组网的组件的是 Kube-proxy
, 它是利用了 iptable 的能力来进行组建 Kubernetes 的 Network,就是 cluster network,以上就是 Node 上面的四个组件。
用户可以通过 UI 或者 CLI 提交一个 Pod 给 Kubernetes 进行部署, 这 个 Pod 请 求 首 先 会 通 过 CLI 或 者 UI 提 交 给 Kubernetes API Server,下一步 API Server 会把这个信息写入到它的存储系统 etcd, 之后 Scheduler 会通过 API Server 的 watch 或者叫做 notification 机制得到这个信息:有一个 Pod 需要被调度。
这个时候 Scheduler 会根据它的内存状态进行一次调度决策,在完成这 次调度之后,它会向 API Server report 说:“OK!这个 Pod 需要被调 度到某一个节点上。”
这个时候 API Server 接收到这次操作之后,会把这次的结果再次写到 etcd 中,然后 API Server 会通知相应的节点进行这次 Pod 真正的执 行 启 动 。 相 应 节 点 的 kubelet 会 得 到 这 个 通 知 , kubelet 就 会 去 调 Container runtime 来真正去启动配置这个容器和这个容器的运行环境, 去调度 Storage Plugin 来去配置存储,network Plugin 去配置网络。
客户端
kubectl
dashboard
部署工具:
使用批量部署工具如(ansible/ saltstack)、手动二进制
、apt-get/yum 等方式安装,以守护进程的方式启动在宿主机上
,类似于是 Nginx 一样使用 service 脚本启动。
- Master:是集群的网关和中枢枢纽,
主要作用
:暴露API接口,跟踪其他服务器的健康状态、以最优方式调度负载,以及编排其他组件之间的通信。单个的Master节点可以完成所有的功能,但是考虑单点故障的痛点,生产环境中通常要部署多个Master节点,组成Cluster。
- Node:是Kubernetes的工作节点,负责接收来自Master的工作指令,并根据指令相应地创建和销毁Pod对象,以及调整网络规则进行合理路由和流量转发。生产环境中,Node节点可以有N个。
================================================================================
k8s API Server提供了k8s各类资源对象(pod
,RC,Service等)的增删改查
及watch等HTTP Rest接口,是整个系统的数据总线和数据中心。
apiserver 目前在master监听两个端口,
- 通过
--insecure-port int
监听一个非安全的127.0.0.1本地端口(默认为8080
)
该端口用于接收HTTP请求;
该端口默认值为8080,可以通过API Server的启动参数“–insecure-port”的值来修改默认值;
默认的IP地址为“localhost”,可以通过启动参数“–insecure-bind-address”的值来修改该IP地址;
非认证或授权的HTTP请求通过该端口访问API Server。
- 通过参数
--bind-address=1.1.1.1
监听一个安全的端口(默认为6443
)
该端口默认值为6443,可通过启动参数“–secure-port”的值来修改默认值;
默认IP地址为非本地(Non-Localhost)网络端口,通过启动参数“–bind-address”设置该值;
该端口用于接收HTTPS请求;
用于基于Tocken文件或客户端证书及HTTP Base的认证;
用于基于策略的授权;
- kubernetes API Server的
功能
与使用:
提供了集群管理的REST API接口(包括认证授权、数据校验以及集群状态变更);
提供其他模块之间的数据交互和通信的枢纽(其他模块通过API
Server查询或修改数据,只有API Server才直 接操作etcd);
是资源配额控制的入口;
拥有完备的集群安全机制.
curl 127.0.0.1:8080/apis #分组api #
curl 127.0.0.1:8080/api/v1 #带具体版本号的api #
curl 127.0.0.1:8080/ #返回核心api列表 #
curl 127.0.0.1:8080/version #api 版本信息 #
curl 127.0.0.1:8080/healthz/etcd #与etcd的心跳监测 #
curl 127.0.0.1:8080/apis/autoscaling/v1 #api的详细信息
启动脚本
cat /etc/systemd/system/kube-apiserver.service
[Service]
ExecStart=/usr/bin/kube-apiserver \
–bind-address=192.168.7.101 \ #外部监听端口
–insecure-bind-address=127.0.0.1 \ #本机监听端口
…
LimitNOFILE=65536
Controller Manager作为集群内部的管理控制中心,
负责集群内的Node、Pod
副本、服务端点(Endpoint
)、命名空间(Namespace
)、服务账号(ServiceAccount
)、资源定额(ResourceQuota
)的管理,当某个Node意外宕机时,Controller Manager会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态。
例如你删一个
kubectl delete pods bet-test-1dsakjfhaskdj
等会会儿他就会自己创建
kubectl get pods
启动脚本:
vim /etc/systemd/system/kube-controller-manager.service
[Service]
ExecStart=/usr/bin/kube-controller-manager \
–master=http://127.0.0.1:8080 \ #调用kube-api-server的本地端口进行通信
…
Scheduler负责Pod调度
,在整个系统中起"承上启下"作用,
承上
:负责接收Controller Manager创建的新的Pod,为其选择一个合适的Node;
启下
:Node上的kubelet接管Pod的生命周期。
通过调度算法为待调度Pod列表
的每个Pod
从可用Node列表中选择一个最适合的Node
,并将信息写入etcd中 node节点上的kubelet通过API Server监听到
kubernetes Scheduler产生的Pod绑定信息
,然后获取对应的 Pod清单,下载Image,并启动容器。
优选策略
-
LeastRequestedPriority
优先从备选节点列表中选择资源消耗最小的节点(CPU+内存)。 -
CalculateNodeLabelPriority
优先选择含有指定Label的节点。 -
BalancedResourceAllocation
优先从备选节点列表中选择各项资源使用率最均衡的节点。
================================================================================
在kubernetes集群中,每个Node节点都会启动kubelet进程,用来处理Master节点下发到本节点的任务,管理Pod和其中的容器。kubelet会在API Server上注册节点信息,定期向Master汇报节点资源使用情况,并通过cAdvisor监控容器和节点资源
。
可以把kubelet理解成Server/Agent架构中的agent,kubelet是Node上的pod管家。
启动脚本:
最后
除了简历做到位,面试题也必不可少,整理了些题目,前面有117道汇总的面试到的题目,后面包括了HTML、CSS、JS、ES6、vue、微信小程序、项目类问题、笔试编程类题等专题。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
了HTML、CSS、JS、ES6、vue、微信小程序、项目类问题、笔试编程类题等专题。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-1xSw1CjQ-1713672223874)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
更多推荐
所有评论(0)