( —基础— ) k8s----介绍,概念,组件(ipvs,iptables(1)

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注前端)
img

正文

从上图,我们可以看到K8S组件和逻辑及其复杂,但是这并不可怕,我们从宏观上先了解K8S是怎么用的,从上图我们可以看出:

Kubernetes集群主要由Master和Node两类节点组成

  1. Master的组件包括:apiservercontroller-managerscheduleretcd等几个组件,其中apiserver是整个集群的网关。

  2. Node主要由kubeletkube-proxydocker引擎等组件组成。kubelet是K8S集群的工作与节点上的代理组件。

  3. 一个完整的K8S集群,还包括CoreDNSPrometheus(或HeapSter)、DashboardIngressController等几个附加组件。

其中cAdivsor组件作用于各个节点(master和node节点)之上,用于收集及收集容器及节点的CPU、内存以及磁盘资源的利用率指标数据,这些统计数据由Heapster聚合后,可以通过apiserver访问。

在这里插入图片描述

二. k8s 组件介绍(kubernetes)

==========================================================================================

查看组件

https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-apiserver/

  1. kube-apiserver:Kubernetes API server 为 api 对象验证并配置数据,包括 pods、services、 replication,controllers 和其它 api 对象,API Server 提供 REST 操作和到集群共享状态的前端,所有其他组件通过它进行交互。

主要作用:组件与组件之间的通信

https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-scheduler/

  1. Kubernetes scheduler调度器是一个拥有丰富策略、能够感知拓扑变化、支持特定负载的功能组件,它对集群的可用性、性能表现以及容量都影响巨大。

scheduler 需要考虑独立的和集体的资源需求、服务质量需求、硬件/软件/策略限制、亲和与反亲和规范、数据位置、内部负载接口、截止时间等等。如有必要,特定的负载需求可以通过 API 暴露出来。

主要作用:依据 它对 CPU、对 memory 请求大小,找一台合适的节点,进行放置

https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-controller-manager/

  1. 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/

  1. 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/

  1. kubelet:是主要的节点代理,它会监视已分配给节点的 pod,具体功能如 下:

向 master 汇报 node 节点的状态信息

接受指令并在 Pod 中创建 docker 容器

准备 Pod 所需的数据卷

返回 pod 的运行状态

在 node 节点执行容器健康检查

https://github.com/etcd-io/etcd

  1. etcd 是 Kubernetes 提供默认的存储系统保存所有集群数据,使用时需要为 etcd数据提供备份计划,key-value存储

API Server 中所需要的这些原 信息都被放置在 etcd 中,etcd 本身是一个高可用系统,通过 etcd 保证整个 Kubernetes 的 Master 组件的高可用性。

在这里插入图片描述

Server端 和node端 组件有哪些


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,node作用


  • Master:是集群的网关和中枢枢纽,

主要作用:暴露API接口,跟踪其他服务器的健康状态、以最优方式调度负载,以及编排其他组件之间的通信。单个的Master节点可以完成所有的功能,但是考虑单点故障的痛点,生产环境中通常要部署多个Master节点,组成Cluster。

  • Node:是Kubernetes的工作节点,负责接收来自Master的工作指令,并根据指令相应地创建和销毁Pod对象,以及调整网络规则进行合理路由和流量转发。生产环境中,Node节点可以有N个。

三. master运行机制

================================================================================

1. kube-apiserver:


k8s API Server提供了k8s各类资源对象(pod,RC,Service等)的增删改查及watch等HTTP Rest接口,是整个系统的数据总线和数据中心。

apiserver 目前在master监听两个端口,

  1. 通过 --insecure-port int 监听一个非安全的127.0.0.1本地端口(默认为8080

该端口用于接收HTTP请求;

该端口默认值为8080,可以通过API Server的启动参数“–insecure-port”的值来修改默认值;

默认的IP地址为“localhost”,可以通过启动参数“–insecure-bind-address”的值来修改该IP地址;

非认证或授权的HTTP请求通过该端口访问API Server。

  1. 通过参数--bind-address=1.1.1.1 监听一个安全的端口(默认为6443

该端口默认值为6443,可通过启动参数“–secure-port”的值来修改默认值;

默认IP地址为非本地(Non-Localhost)网络端口,通过启动参数“–bind-address”设置该值;

该端口用于接收HTTPS请求;

用于基于Tocken文件或客户端证书及HTTP Base的认证;

用于基于策略的授权;

  1. 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

2. kube-controller-manager


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的本地端口进行通信

3. kube-scheduler


Scheduler负责Pod调度,在整个系统中起"承上启下"作用,

承上:负责接收Controller Manager创建的新的Pod,为其选择一个合适的Node;

启下:Node上的kubelet接管Pod的生命周期。

通过调度算法为待调度Pod列表的每个Pod从可用Node列表中选择一个最适合的Node,并将信息写入etcd中 node节点上的kubelet通过API Server监听到kubernetes Scheduler产生的Pod绑定信息,然后获取对应的 Pod清单,下载Image,并启动容器。

优选策略

  1. LeastRequestedPriority 优先从备选节点列表中选择资源消耗最小的节点(CPU+内存)。

  2. CalculateNodeLabelPriority 优先选择含有指定Label的节点。

  3. BalancedResourceAllocation 优先从备选节点列表中选择各项资源使用率最均衡的节点。

在这里插入图片描述

四. node节点运行机制

================================================================================

1. kubelet


在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 (备注前端)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

了HTML、CSS、JS、ES6、vue、微信小程序、项目类问题、笔试编程类题等专题。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-1xSw1CjQ-1713672223874)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 13
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值