【模块一】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 默认值:"https://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.https://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/https://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/https://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/https://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/https://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/https://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/https://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 或

者使用向导创建新的应用。

相关推荐
feng_blog668813 分钟前
【docker-1】快速入门docker
java·docker·eureka
贾贾202342 分钟前
配电自动化系统“三区四层”数字化架构
运维·科技·架构·自动化·能源·制造·智能硬件
远方 hi2 小时前
linux如何修改密码,要在CentOS 7系统中修改密码
linux·运维·服务器
元气满满的热码式2 小时前
K8S中Service详解(一)
云原生·容器·kubernetes
资讯分享周4 小时前
过年远控家里电脑打游戏,哪款远控软件最好用?
运维·服务器·电脑
chaodaibing4 小时前
记录一次k8s起不来的排查过程
运维·服务器·k8s
mcupro5 小时前
提供一种刷新X410内部EMMC存储器的方法
linux·运维·服务器
不知 不知5 小时前
最新-CentOS 7 基于1 Panel面板安装 JumpServer 堡垒机
linux·运维·服务器·centos
BUG 4045 小时前
Linux--运维
linux·运维·服务器
MXsoft6186 小时前
华为E9000刀箱服务器监控指标解读
大数据·运维