首页 > 其他分享 >【模块一】kubernetes容器编排进阶实战之k8s基础概念

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

时间:2024-11-08 13:48:43浏览次数:6  
标签:kube 进阶 reference -- https 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 或
者使用向导创建新的应用。

 

 

 

标签:kube,进阶,reference,--,https,kubernetes,k8s,节点
From: https://blog.csdn.net/weixin_74814027/article/details/143624618

相关文章

  • 大模型(LLMs)学习笔记——进阶知识
    一.生成式大模型简介1.什么是生成式大模型前排提示,文末有大模型AGI-CSDN独家资料包哦!生成式大模型(一般简称大模型LLMs)是指能用于创作新内容,例如文本、图片、音频以及视频的一类深度学习模型。相比普通深度学习模型,主要有两点不同:模型参数量更大,参数量都在Billion......
  • 第三十四章 Vue路由进阶之声明式导航(导航高亮)
    目录一、导航高亮1.1.基于语法1.2.主要代码 二、声明式导航的两个类名2.1.声明式导航类名匹配方式2.2.声明式导航类名样式自定义 ​2.3.核心代码一、导航高亮1.1.基于语法在Vue中通过VueRouter插件,我们可以非常简单的实现实现导航高亮效果VueRouter提......
  • 【K8s安全】K8s污点横向渗透
    原创Al1ex七芒星实验室污点是K8s高级调度的特性,用于限制哪些Pod可以被调度到某一个节点,一般主节点包含一个污点,这个污点是阻止Pod调度到主节点上面,除非有Pod能容忍这个污点,而通常容忍这个污点的Pod都是系统级别的Pod,例如:kube-system基本原理攻击者在获取到node节点的权限......
  • 【k8s安全】etcd未授权到控制k8s集群
    免责声明本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者及本公众号团队不为此承担任何责任。在安装完K8s后,默认会安装etcd组件,etcd是一个高可用的key-value数据库,它为k8s集群提供底层数据存储,保存了......
  • Kubernetes 中实现 MySQL 的读写分离
    Kubernetes中实现MySQL的读写分离在Kubernetes中实现MySQL的读写分离,可以通过主从复制架构来实现。在这种架构中,MySQL主节点(Master)负责处理所有写操作,而MySQL从节点(Slave)负责处理所有读操作。下面是一个详细的步骤指南:步骤1:创建Kubernetes集群确保你有一个运行良......
  • 36套Web前端全栈Vue3项目实战P7架构-入门篇+项目篇+进阶篇+架构篇
    36套Web前端全栈Vue3项目实战P7架构-入门篇+项目篇+进阶篇+架构篇36套eb前端全栈Vue3项目实战-入门篇+项目篇+进阶篇+架构篇,P7前端架构,高薪面试,Vue3源码剖析视频课程-技术栈-TypeScript+Vute+ElementPlus+Koa2+Node.js+Pinia+EChart4.0+Uni-App+React18+Flutter+Web3D+Vant+UI,项......
  • 【K8S问题系列】Kubernetes Pod节点CrashLoopBackOff 状态【已解决】
    在Kubernetes中,Pod的状态为CrashLoopBackOff表示某个容器在启动后崩溃,Kubernetes尝试重启该容器,但由于持续崩溃,重启的间隔时间逐渐增加。下面将详细介绍CrashLoopBackOff状态的原因、解决方案及相关命令的输出解释。一、CrashLoopBackOff状态的详细介绍描述C......
  • 代码随想录算法训练营 day37 day38| 卡码网52.完全背包 518. 零钱兑换 II 377.
    学习资料:https://programmercarl.com/背包问题理论基础完全背包.html#算法公开课相比于01背包,完全背包中每个物品都可以无限次的放入组合:先遍历物品,再逆序遍历背包排列:先逆序遍历背包,再遍历物品学习记录卡码网52.携带研究资料(dp[i]代表当重量为i时的最大价值)点击查看代码n......
  • HTML静态页面进阶版
    目录1.文档的嵌入2.嵌入矢量图形上篇提到了制作一个静态网页基本的一些元素,而本文则会介绍更多的元素来完善你的页面!1.文档的嵌入在上篇文章中提到了如何用某些标签来进行图片、音频、视频的嵌入,但如果我们想在我们的页面中显示别人的页面或者自己的一个文档呢?这时候就......
  • 鸿蒙进阶篇-网格布局 Grid/GridItem(二)
    hello大家好,这里是鸿蒙开天组,今天让我们来继续学习鸿蒙进阶篇-网格布局Grid/GridItem,上一篇博文我们已经学习了固定行列、合并行列和设置滚动,这一篇我们将继续学习Grid的用法,实现翻页滚动、自定义滚动条样式,并实现一个小案例。1.翻页滚动到这里就需要用到控制器对象了,核心步......