一、api-server

  基本概念

  • 该端口默认值为6443,可通过启动参数“--secure-port”的值来修改默认值。
  • 默认IP地址为非本地(Non-Localhost)网络端口,通过启动参数“--bind-address”设置该值。
  • 该端口用于接收客户端、dashboard等外部HTTPS请求。
  • 用于基于Tocken文件或客户端证书及HTTP Base的认证。
  • 用于基于策略的授权。

  kubernetes API测试:

curl --cacert /etc/kubernetes/ssl/ca.pem -H "Authorization: Bearer ${TOKEN}" https://127.0.0.1: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 #指标数据

  API的版本:

  Alpha:预览版,可能包含bug或错误,后期版本会修复且不兼容之前的版本,不建议使用。

  Beta:测试版,如storage.k8s.io/v1beta1,该版本可能存在不稳定或者潜在的bug,不建议生产使用

  v1: 稳定版,如apps/v1,经过验证的stable版本,可以生产环境使用

二、kube-scheduler

  官网介绍:

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

  Kubernetes 调度器是一个控制面进程,负责将 Pods 指派到节点上。

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

  调度策略:

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

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

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

三、controller-manager

  官网介绍:

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会及时发现并执行自动化修复流程,确保集群中的pod副本始终处于预期的工作状态。

  controller-manager控制器每间隔5秒检查一次节点的状态。

  如果controller-manager控制器没有收到自节点的心跳,则将该node节点被标记为不可达。

  controller-manager将在标记为无法访问之前等待40秒。

  如果该node节点被标记为无法访问后5分钟还没有恢复,controller-manager会删除当前node节点的所有pod并在其它可用节点重建这些pod。

  pod高可用机制:

  node monitor period: 节点监视周期,5s

  node monitor grace period: 节点监视器宽限期,40s

  pod eviction timeout: pod驱逐超时时间,5m

四、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 内核模块

  使用iptables模式请求转发图:

  使用ipvs模式请求转发图:

  

  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(不排队调度)等。

  

  配置使用IPVS及指定调度算法:

  官网示例:

  https://kubernetes.io/zh/docs/reference/config-api/kube-proxy-config.v1alpha1/#ClientConnectionConfiguration

  如果k8s集群需要修改调度算法,则每个节点kube-proxy-config都需要修改

cat /var/lib/kube-proxy/kube-proxy-config.yaml
kind: KubeProxyConfiguration
apiVersion: kubeproxy.config.k8s.io/v1alpha1
bindAddress: 172.16.0.120
clientConnection:
kubeconfig: "/etc/kubernetes/kube-proxy.kubeconfig"
clusterCIDR: "10.224.0.0/16"
conntrack:
maxPerCore: 32768
min: 131072
tcpCloseWaitTimeout: 1h0m0s
tcpEstablishedTimeout: 24h0m0s
healthzBindAddress: 172.16.0.120:10256
hostnameOverride: "172.16.0.120"
metricsBindAddress: 172.16.0.120:10249
mode: "ipvs" #指定使用ipvs及调度算法
ipvs:
scheduler: sh

会话保持:service(svc)yaml文件中修改

定义1800s内将同一个客户端请求都转发到某个固定的pod

[root@master01 ~]# kubectl edit svc nginx-deployment  #编辑SVC配置文件
spec:
clusterIP: 10.105.139.198
externalTrafficPolicy: Cluster
ports:
- nodePort: 30401
port: 8080
protocol: TCP
targetPort: 80
selector:
run: nginx-deployment
sessionAffinity: ClientIP
sessionAffinityConfig:
clientIP:
timeoutSeconds: 1800
type: NodePort
五、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集群进行管理的客户端工具。

七、etcd

  kubernetes官网介绍:

  https://kubernetes.io/zh/docs/tasks/administer-cluster/configure-upgrade-etcd/

  etcd官网:

  https://etcd.io/

  etcd github项目

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

  etcd 是CoreOS公司开发目前是Kubernetes默认使用的key-value数据存储系统,用于保存 kubernetes的所有集群数据,etcd支持分布式集群功能,生产环境使用时需要为etcd数据提 供定期备份机制。

八、DNS:

  官网链接:

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

  目前使用的DNS空间主要是coredns,在以往的历史版本使用的是sky-dns(已被淘汰)

  DNS组件负责为整个集群的pod提供DNS解析服务,从而实现服务之间的访问。可以为集群中的service(SVC)创建一个域名ip的对应关系。也可以为pod提供一个外部网络访问的一个DNS服务解析

九、Pod概念

  Pod分为自主式Pod和控制器管理的Pod

  自主式Pod:不被控制器管理的Pod,一旦Pod崩溃,则无法自动拉起。

  控制器管理的Pod:被控制器所管理的Pod

  注意:Pod 内的容器之间端口不能冲突,容器间通过Pod可以互相访问

Pod代表一个deployment单元:a single instance of an application in Kubernetes。

运行单个容器的Pod:将pod看作是单个容器的包装器,kubernetes不直接管理容器,而是管理pods。

运行多个容器的Pod:pod可以将多个容器封装一个单个应用。pod中的多个容器作为整体调度到集群中同一物理机或虚拟机上。pod中多个容器共享资源和依赖项,彼此通信。

pod将这些容器、网络资源和存储资源作为一个单一的可管理实体包装在一起。每个pod分配唯一的ip地址,pod中容器共享netns,包括ip地址和port端口。多个容器之间使用localhost通信。当pod中容器与其他pod通信,需要使用共享的网络资源。pod可以使用多个volume,pod中所有容器都可以访问这些卷。

例如:web容器提供文件共享,另外一个容器负责更新文件内容。

Pod是Kubernetes的最重要的概念,每一个pod都有一个特殊的被称为“根容器”的Pause容器。Pause容器对应的镜像属于Kubernetes平台的一部分,除了Pause容器,每个Pod还包含一个或多个紧密相关的用户业务容器。通过pause容器,把其他业务容器加入到Pause容器里面,让所有业务容器在同一名称空间内,可以实现网络共享。

  Pod status

  ContainerCreating 正在创建

  Running 正在运行

  Completed 运行完成

  Error 运行错误

  CrashLoopBackOff 重新创建

  ErrImagePull 获取镜像错误

  ImagePullBackOff 重新获取镜像

  Pending 正在等待某个条件

  container states

  Waiting: 等待某个条件满足变成Running状态,例如下载镜像,更新secrets等。

  通过describe pod查看message和reason详细信息。

  Running: 容器正在运行,没有问题。同时记录Running开始时间。

  Terminated: 容器运行完成,也有可能是运行失败终止

  restartPolicy,针对pod中所有容器生效。

  Always,除了running状态,其他状态总是重启,默认值。

  OnFailure,失败了才重启。

  Never,从不重启。

  imagePullPolicy,镜像下载策略。

  Always,总是从仓库下载镜像,默认值。

  Never,只使用本地镜像,不下载。

  IfNotPresent,优先使用本地镜像,如果没有才从仓库下载镜像。

  以上是kubernetes的基组件介绍。如果对你有帮助或有建议疑问可以评论区留言!

Kubernetes组件介绍的更多相关文章

  1. k8s功能、各组件介绍以及pod创建流程

    一.什么是Kubernetes Kubernetes(k跟s中间隔了8个字母又称k8s) 是谷歌开源的容器集群管理系统,是 Google 多年大规模容器管理技术Borg 的开源版本,主要功能包括: 基 ...

  2. Kubernetes组件与架构

    转载请标明出处: 文章首发于>https://www.fangzhipeng.com/kubernetes/2018/09/30/k8s-basic1/ 本文出自方志朋的博客 Kubernete ...

  3. ceph-csi组件源码分析(1)-组件介绍与部署yaml分析

    更多ceph-csi其他源码分析,请查看下面这篇博文:kubernetes ceph-csi分析目录导航 ceph-csi组件源码分析(1)-组件介绍与部署yaml分析 基于tag v3.0.0 ht ...

  4. Kubernetes 组件简介

    关于Kubernetes是什么??? Kubernetes是致力于提供跨主机集群的自动部署.扩展.高可用以及运行应用程序容器的平台. Kubernets集群组成有哪些??? k8s由master和no ...

  5. 使用 C# 开发 Kubernetes 组件,获取集群资源信息

    写什么呢 前段时间使用 C# 写了个项目,使用 Kubernetes API Server,获取信息以及监控 Kubernetes 资源,然后结合 Neting 做 API 网关. 体验地址 http ...

  6. 三十五、kubernetes NameSpace介绍

    Kubernetes NameSpace 介绍 Kubernetes使用命名空间的概念帮助解决集群中在管理对象时的复杂性问题.命名空间允许将对象分组到一起,便于将它们作为一个单元进行筛选和控制.无论是 ...

  7. 三十四、kubernetes证书介绍

    Kubernetes 证书介绍 一.证书机制说明 Kubernetes 作为一个分布式集群的管理工具,保证集群的安全性是其一个重要的任务.API Server 是集群内部各个组件通信的中介,也是外部控 ...

  8. 开源免费且稳定实用的.NET PDF打印组件itextSharp(.NET组件介绍之八)

    在这个.NET组件的介绍系列中,受到了很多园友的支持,一些园友(如:数据之巅. [秦时明月]等等这些大神 )也给我提出了对应的建议,我正在努力去改正,有不足之处还望大家多多包涵.在传播一些简单的知识的 ...

  9. 免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)

    前面介绍了六种.NET组件,其中有一种组件是写文件的压缩和解压,现在介绍另一种文件的解压缩组件SharpZipLib.在这个组件介绍系列中,只为简单的介绍组件的背景和简单的应用,读者在阅读时可以结合官 ...

随机推荐

  1. 记录在EF Core级联更新时出现的错误The database operation was expected to affect 1 row(s), but actually affected 0 row(s) (低级错误导致)

    错误提示:The database operation was expected to affect 1 row(s), but actually affected 0 row(s); data ma ...

  2. 将MySQL查询结果导出到Excel

    总结将mysql的查询结果导出到文件的方法 总结 使用命令 select user, host, password from mysql.user into outfile '/tmp/user.xl ...

  3. Java类包

    学习内容:Java类包 一.Java类包 1.一个完整的类名需要包名和类名的组合,每一个类都隶属于一个包. 例:完整类名--java.sql.Date 2.同一个包中类相互访问时可以不指明包名. 3. ...

  4. mysql外键与表查询

    目录 自增特性 外键 外键关系 外键创建 外键的约束效果 级联更新级联删除 多对多关系 一对一关系 表查询关键字 select与from where筛选 group by分组 练习 关系练习 查询练习 ...

  5. 【雅礼集训 2017 Day2】棋盘游戏

    loj 6033 description 给一个\(n*m\)的棋盘,'.'为可通行,'#'为障碍.Alice选择一个起始点,Bob先手从该点往四个方向走一步,Alice再走,不能走走过的点,谁不能动 ...

  6. (C++)读取一个输入的int型十进制数字的位数,并正序输出每个位上的值(不同数位的值用1个空格字符间隔)

    1 /* 2 程序功能:读取一个输入的int型十进制数字的位数,并正序输出每个位上的值(不同数位的值用1个空格字符间隔). 3 例如:当输入985这个数字时,显示如下信息: 4 985是一个3位数字! ...

  7. 使用 KubeKey 搭建 Kubernetes/KubeSphere 环境的"心路(累)历程"

    目录 今天要干嘛? 在哪里干? 从哪里开始干? 快速开干! 解决依赖问题再继续干! 如何干翻重来? 连着 KubeSphere 一起干! 干不过,输了. 重整旗鼓,继续干! 再次重整旗鼓,继续干! 一 ...

  8. Xmind头脑风暴

    下图导出到excel后 上图对应的excel表格如下:

  9. QT 基于QScrollArea的界面嵌套移动

    在实际的应用场景中,经常会出现软件界面战场图大于实际窗体大小,利用QScrollArea可以为widget窗体添加滚动条,可以实现小窗体利用滚动条显示大界面需求.实现如下: QT创建一个qWidget ...

  10. SQL Server导出MDF数据库文件

    更新日志 2022年6月13日 发布. 2022年6月2日 开始. 一句话总结:先分离,然后复制. 先分离要导出mdf数据库文件的数据库. 在Microsoft SQL Server Manageme ...