当前位置: 首页 > article >正文

【模块一】kubernetes容器编排进阶实战之k8s基础概念

kubernetes 基本介绍

kubernetes 组件简介

    - master: 
        主人,并不部署服务,而是管理salve节点。
        后期更名为: controll plane,控制面板。
    
        etcd:
        2379(客户端通信)、2380(集群内部通信)
            KEY-VALUE键值对数据库,基于Go语言开发。并不是K8S官方的组件,而是使用了开源项目etcd数据库。
            主要作用为K8S存储数据,支持以集群的方式部署。
            默认监听的端口: 2379~2380
            
        api-server:
            是K8S集群控制的访问入口,说白了,维护者用于控制K8S的入口。
            默认监听的端口: 8080(http) | 6443(https,默认)
        
        scheduler:
        默认端口:10251
            负责容器调度到哪些worker node节点。
            
        controller manager:
        默认端口:10252
            控制器管理者,维护集群状态。

    - slave:
        奴隶。部署实际的服务,以供客户端访问。
        后期更名为:worker  node, 工作节点
        
        kubelet:
            端口(10248)
            10250(kubelet API)、10255(只读端口,用于获取节点信息)
            负责K8S的容器的生命周期(包括但不限于创建,删除,修改,监控),并监控容器上报给api-server。
            
        
        kube-proxy:
        默认端口:10256(通常用于NodePort服务的端口映射)
            负责为找到容器的IP提供负载均衡,可以理解为用于为容器提供统一的访问入口,优点类似于负载均衡器的效果。
            
            底层支持: iptables和ipvs工作模式,生产环境中推荐大家使用ipvs模式。

    - CNI:
        为容器提供跨主机节点通信的网络。

kubernetes API Server简介

kube-apiserver | Kubernetes简介 Kubernetes API 服务器验证并配置 API 对象的数据, 这些对象包括 pods、services、replicationcontrollers 等。 API 服务器为 REST 操作提供服务,并为集群的共享状态提供前端, 所有其他组件都通过该前端进行交互。kube-apiserver [flags] 选项 --admission-control-config-file string 包含准入控制配置的文件。--advertise-address string 向集群成员通知 apiserver 消息的 IP 地址。 这个地址必须能够被集群中其他成员访问。 如果 IP 地址为空,将会使用 --bind-address, 如果未指定 --bind-address,将会使用主机的默认接口地址。 --aggregator-reject-forwarding-redirect     默认值:true 聚合器拒绝将重定向响应转发回客户端。--allow-metric-labels stringToString     默认值:[] 允许使用的指标标签到指标值的映射列表。键的格式为 ,. 值的格式为 ,...。 例如:metric1,label1='v1,v2,v3', metric1,label2='v1,v2,v3' metric2,label1='v1,v2,v3'。 --allow-metric-labels-manifest string 包含允许列表映射的清单文件的路径。此文件的格式与 --allow-metric-labels 相同。 请注意,--allow-metric-labels 标志将覆盖清单文件。 --allow-privileged 如果为 true,将允许特权容器。[默认值=false] --anonymous-auth     默认值:true 启用针对 API 服务器的安全端口的匿名请求。 未被其他身份认证方法拒绝的请求被当做匿名请求。 匿名请求的用户名为 system:anonymous, 用户组名为 system:unauthenticated。 --api-audiences strings API 的标识符。 服务帐户令牌验证者将验证针对 API 使用的令牌是否已绑定到这些受众中的至少一个。 如果配置了 --service-account-issuer 标志,但未配置此标志, 则此字段默认为包含发布者 URL 的单个元素列表。 --audit-log-batch-buffer-size int     默认值:10000 批处理和写入事件之前用于缓存事件的缓冲区大小。 仅在批处理模式下使用。 --audit-log-batch-max-size int     默认值:1 每个批次的最大大小。仅在批处理模式下使用。 --audit-log-batch-max-wait duration 强制写入尚未达到最大大小的批次之前要等待的时间。 仅在批处理模式下使用。 --audit-log-batch-throttle-burst int 如果之前未使用 ThrottleQPS,则为同时发送的最大请求数。 仅在批处理模式下使用。 --audit-log-batch-throttle-enable 是否启用了批量限制。仅在批处理模式下使用。 --audit-log-batch-throttle-qps float 每秒的最大平均批次数。仅在批处理模式下使用。 --audit-log-compress 若设置了此标志,则被轮换的日志文件会使用 gzip 压缩。 --audit-log-format string     默认值:"icon-default.png?t=O83Ahttps://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-apiserver/

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

 Kubernetes API server 提供了k8s各类资源对象的增删改查及watch等HTTP Rest接口,这些对象包括pods、services、
replicationcontrollers等,API Server为REST操作提供服务,并为集群的共享状态提供前端,所有其他组件都通过该前端进行交互。
 RESTful API: 是REST风格的网络接口,REST描述的是在网络中client和server的一种交互形式
 REST:是一种软件架构风格,或者说是一种规范,其强调HTTP应当以资源为中心,并且规范了URI的风格,规范了HTTP请求动作
(GET/PUT/POST/DELETE/HEAD/OPTIONS)的使用,具有对应的语义。
 https://github.com/Arachni/arachni/wiki/REST-API



该端口默认值为6443,可通过启动参数“-- secure-port”的值来修改默认值。
 默认监听IP为0.0.0.0及本机所有IP,可以通过
启动参数“--bind-address”设置监听指定的
内网IP。
 该端口用于接收客户端、dashboard等外部
HTTPS请求。
 实现基于Tocken文件或客户端证书及HTTP
Base的认证。
 实现基于策略的账户鉴权及准入。
 客户端通过API Server实现对kubernetes的API
远程以实现对kubernetes内部资源的增删改查
等管理任务的分发
 

#API的版本:
 Alpha:预览版,可能包含bug或错误,后期版本会修复且不兼容之前的版本,不建议使用。
 Beta:测试版,如storage.k8s.io/v1beta1,该版本可能存在不稳定或者潜在的bug,不建议生产使用
 v1/v2/vX: 稳定版,如apps/v1,经过验证的stable版本,可以生产环境使用
 kubernetes API测试

 # curl --cacert /etc/kubernetes/ssl/ca.pem -H "Authorization: Bearer ${TOKEN}" https://172.31.7.101:6443
 # curl 127.0.0.1:6443/ #返回所有的API列表
 # curl 127.0.0.1:6443/apis #分组API
 # curl 127.0.0.1:6443/api/v1 #带具体版本号的API
 # curl 127.0.0.1:6443/version #API版本信息
 # curl 127.0.0.1:6443/healthz/etcd #与etcd的心跳监测
 # curl 127.0.0.1:6443/apis/autoscaling/v1 #指定API的详细信息
 # curl 127.0.0.1:6443/metrics #指标数据

kube-scheduler简介

kube-scheduler | Kubernetes简介 Kubernetes 调度器是一个控制面进程,负责将 Pods 指派到节点上。 调度器基于约束和可用资源为调度队列中每个 Pod 确定其可合法放置的节点。 调度器之后对所有合法的节点进行排序,将 Pod 绑定到一个合适的节点。 在同一个集群中可以使用多个不同的调度器;kube-scheduler 是其参考实现。 参阅调度以获得关于调度和 kube-scheduler 组件的更多信息。kube-scheduler [flags] 选项 --allow-metric-labels stringToString      默认值:[] 这个键值映射表设置度量标签所允许设置的值。 其中键的格式是 ,。 值的格式是 ,。 例如:metric1,label1='v1,v2,v3', metric1,label2='v1,v2,v3' metric2,label1='v1,v2,v3'。 --allow-metric-labels-manifest string 包含允许列表映射的清单文件的路径。此文件的格式与 --allow-metric-labels 标志相同。 请注意,--allow-metric-labels 标志将覆盖此清单文件。 --authentication-kubeconfig string 指向具有足够权限以创建 tokenaccessreviews.authentication.k8s.io 的 Kubernetes 核心服务器的 kubeconfig 文件。 这是可选的。如果为空,则所有令牌请求均被视为匿名请求,并且不会在集群中查找任何客户端 CA。 --authentication-skip-lookup 如果为 false,则 authentication-kubeconfig 将用于从集群中查找缺少的身份验证配置。 --authentication-token-webhook-cache-ttl duration     默认值:10s 缓存来自 Webhook 令牌身份验证器的响应的持续时间。 --authentication-tolerate-lookup-failure     默认值:true 如果为 true,则无法从集群中查找缺少的身份验证配置是致命的。 请注意,这可能导致身份验证将所有请求视为匿名。 --authorization-always-allow-paths strings     默认值:"/healthz,/readyz,/livez" 在授权过程中跳过的 HTTP 路径列表,即在不联系 “core” kubernetes 服务器的情况下被授权的 HTTP 路径。 --authorization-kubeconfig string 指向具有足够权限以创建 subjectaccessreviews.icon-default.png?t=O83Ahttps://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-scheduler/

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

kube-scheduler:
 https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-scheduler/
 
 kube-scheduler是一个控制面(管理)进程,负责将 Pods 按照一定的调度策略指派到目的节点上。
 

 

阶段一:预选策略


 NoDiskConflict:
Pod所需的卷是否和节点已存在的卷冲突。
 PodFitsResources:
判断备选节点的资源是否满足备选Pod的需求。
 PodSelectorMatches:
判断备选节点是否包含备选pod的标签选择器指定的标签
 MatchInterPodAffinity:
节点亲和性筛选
 PodToleratesNodeTaints
 根据 taints 和 toleration 的关系判断Pod是否可以调度到节点上Pod是否
满足节点容忍的一些条件。
 

阶段二:优选策略


 LeastRequestedPriority
 优先从备选节点列表中选择资源消耗最小的节点(CPU+内存)。
 CalculateNodeLabelPriority
 优先选择含有指定Label的节点。
 BalancedResourceAllocation
 优先从备选节点列表中选择各项资源使用率最均衡的节点。
 TaintTolerationPriority
 使用 Pod 中 tolerationList 与 节点 Taint 进行匹配并实现pod调度

 

kube-controller-manager简介

https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-controller-manager/icon-default.png?t=O83Ahttps://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-controller-manager/

kube-controller-manager:


  kube-controller-manager:Controller Manager还包括一些子控制器(副本控制器、节点控制器、命名空间控制器和服务账号控制器等),
控制器作为集群内部的管理控制中心,负责集群内的Node、Pod副本、服务端点(Endpoint)、命名空间(Namespace)、服务账号
(ServiceAccount)、资源定额(ResourceQuota)的管理,当某个Node意外宕机时,Controller Manager会及时发现并执行自动化修复
流程,确保集群中的pod副本始终处于预期的工作状态。
 controller-manager控制器每间隔5秒检查一次节点的状态。
 如果controller-manager控制器没有收到自节点的心跳,则将该node节点被标记为不可达。
 controller-manager将在标记为无法访问之前等待40秒。
 如果该node节点被标记为无法访问后5分钟还没有恢复,controller-manager会删除当前node节点的所有pod并在其它可用节点重建这些
pod。


 kube-controller-manager基于--leader-elect=true 启动参数实现多节点高可用,会自动选举leader,
原理是有一把分布式锁,哪个节点先抢到锁谁就是leader(基于hostname设置为锁的持有者),leader需要定
期更新自己持有的锁状态,如超时未更新则会触发新的leader选举。
 pod 高可用机制:
  node monitor period: 节点监视周期,5s
  node monitor grace period: 节点监视器宽限
期,40s
  pod eviction timeout: pod驱逐超时时间,5m

 

etcd简介

https://kubernetes.io/zh/docs/tasks/administer-cluster/configure-upgrade-etcd/icon-default.png?t=O83Ahttps://kubernetes.io/zh/docs/tasks/administer-cluster/configure-upgrade-etcd/

  etcd:
 https://kubernetes.io/zh/docs/tasks/administer-cluster/configure-upgrade-etcd/
  etcd 是CoreOS公司开发目前是Kubernetes默认使用的key-value数据存储系统,用于保存kubernetes的所有集群数据,etcd支持
分布式集群功能,生产环境使用时需要为etcd数据提供定期备份机制。
 https://etcd.io/ #官网
 https://github.com/etcd-io/etcd #github
 

kube-proxy简介

https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-proxy/icon-default.png?t=O83Ahttps://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-proxy/
 

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

kube-proxy:Kubernetes 网络代理运行在 node 上,它反映了 node 上 Kubernetes API 中定义的服务,并可以通过一组后端进行简单的 TCP、UDP 
和 SCTP 流转发或者在一组后端进行循环 TCP、UDP 和 SCTP 转发,用户必须使用 apiserver API 创建一个服务来配置代理,其实就是kube-proxy通过
在主机上维护网络规则并执行连接转发来实现Kubernetes服务访问。
 kube-proxy 运行在每个节点上,监听 API Server 中服务对象的变化,再通过管理 IPtables或者IPVS规则 来实现网络的转发。
 Kube-Proxy 不同的版本可支持三种工作模式:
 UserSpace:k8s v1.1之前使用,k8s 1.2及以后就已经淘汰
 IPtables : k8s 1.1版本开始支持,1.2开始为默认
 IPVS: k8s 1.9引入到1.11为正式版本,需要安装ipvsadm、ipset 工具包和加载 ip_vs 内核模块




IPVS 相对 IPtables 效率会更高一些,使用 IPVS 模式需要在运行 Kube-Proxy 的节点上安装 ipvsadm、ipset 工具包和加载 ip_vs 内
核模块,当 Kube-Proxy 以 IPVS 代理模式启动时,Kube-Proxy 将验证节点上是否安装了 IPVS 模块,如果未安装,则 Kube-Proxy
将回退到 IPtables 代理模式。
 使用IPVS模式,Kube-Proxy会监视Kubernetes Service对象和Endpoints,调用宿主机内核Netlink接口以相应地创建IPVS规则并定
期与Kubernetes Service对象 Endpoints对象同步IPVS规则,以确保IPVS状态与期望一致,访问服务时,流量将被重定向到其中一
个后端 Pod,IPVS使用哈希表作为底层数据结构并在内核空间中工作,这意味着IPVS可以更快地重定向流量,并且在同步代理规则时
具有更好的性能,此外,IPVS 为负载均衡算法提供了更多选项,例如:rr (轮询调度)、lc (最小连接数)、dh (目标哈希)、sh (源哈希)、
sed (最短期望延迟)、nq(不排队调度)等。
 kubernetes v1.11之后默认使用IPVS,默认调度算法为rr。

kubelet简介 

https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kubelet/icon-default.png?t=O83Ahttps://kubernetes.io/zh/docs/reference/command-line-tools-reference/kubelet/

 kubelet:
https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kubelet/
 kubelet是运行在每个worker节点的代理组件,
它会监视已分配给节点的pod,具体功能如下:
 向master汇报node节点的状态信息
 接受指令并在Pod中创建 docker容器
 准备Pod所需的数据卷
 返回pod的运行状态
 在node节点执行容器健康检查

kubectl简介

https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kubelet/icon-default.png?t=O83Ahttps://kubernetes.io/zh/docs/reference/command-line-tools-reference/kubelet/

 kubelet:
https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kubelet/
  kubelet是运行在每个worker节点的代理组件,
它会监视已分配给节点的pod,具体功能如下:
 向master汇报node节点的状态信息
 接受指令并在Pod中创建 docker容器
 准备Pod所需的数据卷
 返回pod的运行状态
 在node节点执行容器健康检查




 kubectl:
 https://kubernetes.io/zh/docs/reference/kubectl/kubectl/
 是一个通过命令行对kubernetes集群
进行管理的客户端工具。
 kubectl 在 $HOME/.kube 目录中查
找一个名为 config 的配置文件。 你
可以通过设置 KUBECONFIG 环境变
量或设置 --kubeconfig参数来指定其
它 kubeconfig 文件。

DNS组件

https://kubernetes.io/zh/docs/tasks/administer-cluster/dns-custom-nameservers/

 DNS:
 https://kubernetes.io/zh/docs/tasks/administer-cluster/dns-custom-nameservers/
  DNS负责为整个集群提供DNS服务,从而实现服务之间的访问。
 coredns
  kube-dns: 1.18
  sky-dns
     

Dashboard组件

https://kubernetes.io/zh/docs/tasks/access-application-cluster/web-ui-dashboard/icon-default.png?t=O83Ahttps://kubernetes.io/zh/docs/tasks/access-application-cluster/web-ui-dashboard/

  Dashboard:
https://kubernetes.io/zh/docs/tasks/access-application-cluster/web-ui-dashboard/
  Dashboard是基于网页的Kubernetes用户界面,可以使用Dashboard获取运行在集群中的应用的概览信息,也可以创建或者修改
Kubernetes资源(如 Deployment,Job,DaemonSet 等等),也可以对Deployment实现弹性伸缩、发起滚动升级、删除 Pod 或
者使用向导创建新的应用。

 

 

 


http://www.kler.cn/a/390571.html

相关文章:

  • 2024版本IDEA创建Sprintboot项目下载依赖缓慢
  • 如何用WordPress和Shopify提升SEO表现?
  • 词嵌入方法(Word Embedding)
  • 软件测试项目实战
  • Java 堆内存管理详解:`-Xms` 和 `-Xmx` 参数的使用与默认内存设置
  • 【2024最新】math-expression-evaluator 动态计算表达式的使用
  • Java 后端开发框架总结笔记:
  • Python 爬虫运行状态监控:进度、错误与完成情况
  • 智能零售:AI赋能电商行业的全面升级与高效运营
  • Spring Boot实战:编程训练系统开发手册
  • ssm+vue710的线上招聘问答系统的设计与实现
  • 云计算答案
  • 使用ThorUi
  • @SpringBootApplication源码解析
  • 【ComfyUI +BrushNet+PowerPaint】图像修复(根据题词填充目标)——ComfyUI-BrushNet
  • shodan7(泷羽sec)
  • SystemVerilog学习笔记(一):数据类型
  • (C++)验证累加非原子操作以及vector和thread的结合使用(附fitten code插件安装方法,AI插件,帮忙填充代码)
  • Layui layui.treeTable 树表格组件 去除图标展示
  • rust模式和匹配
  • Redis经典面试题-深度剖析
  • Android dagger的使用
  • spring -第十四章 spring事务
  • D-Link NAS account_mgr.cgi 未授权RCE漏洞复现(CVE-2024-10914)
  • 48651
  • uni-app 封装刘海状态栏(适用小程序, h5, 头条小程序)