认识kubernetes

认识kubernetes,第1张

认识kubernetes 什么是kubernetes

        kubernetes,名字源于希腊语,意为“舵手”或“飞行员”,因k和s中间有8个字母,所以也叫做k8s。kubernetes是一个开源的容器编排平台,用于让用户更方便的管理容器化应用,包括应用自动部署到合适的节点、应用回滚、应用自我修复、存储编排、秘钥和配置管理、服务发现和负载均衡等。

为什么需要kubernetes

        容器是打包和运行应用程序当前最主流的方式,在生产环境中,需要管理运行应用程序的容器,并确保不会停机。 例如,如果一个容器发生故障,则需要启动另一个容器。kubernetes就是来解决类似于这样的问题的。

kubernetes架构

        kubernetes由一组叫做节点的机器组成,在这些节点上运行容器化应用。节点又分为控制节点和计算节点,控制节点与计算节点的区别是控制节点上运行的是控制平面组件,计算节点上运行的是Node组件和用户业务,另外,在控制节点上也会运行Node组件,即Node组件是运行在所有节点上的。

控制平面组件

        控制平面组件包括kube-apiserver、kube-controller-manager、kube-scheduler、etcd,是由来支撑平台运行的组件,在集群部署完成时即运行在所有的控制节点上。

kube-apiserver

        apiserver是控制面的前端,对所有资源的 *** 作都要经过apiserver,apiserver是无状态的,可以横型扩展,用Haproxy或者负载均衡器让多个apiserver协同工作。

etcd

        etcd 是兼具一致性和高可用性的键值数据库,是用来保存 Kubernetes 所有集群数据的后台数据库。在生产环境中,为了保证高可用性,一般将etcd部署在多个节点上组成集群。

kube-scheduler

        scheduler负责监视新创建的、未指定运行节点(node)的 Pods,选择节点让 Pod 在上面运行。调度决策考虑的因素包括单个 Pod 和 Pod 集合的资源需求、硬件/软件/策略约束、亲和性和反亲和性规范、数据位置、工作负载间的干扰和最后时限。

kube-controller-manager

        controller-manager是一系列控制器的集合,这些控制器在逻辑上属于不同的进程,但为了降低复杂性将这些控制器编译在了同一个可执行文件中,控制器包括:

  • 节点控制器(Node Controller): 负责在节点出现故障时进行通知和响应
  • 任务控制器(Job controller): 监测代表一次性任务的 Job 对象,然后创建 Pods 来运行这些任务直至完成
  • 端点控制器(Endpoints Controller): 填充端点(Endpoints)对象(即加入 Service 与 Pod)
  • 服务帐户和令牌控制器(Service Account & Token Controllers): 为新的命名空间创建默认帐户和 API 访问令牌

以及其他比如Pod管理的Replication控制器、Deployment控制器等数十种类型API对象的控制器。

Node组件

        节点组件在每个节点上运行,维护运行的 Pod 并提供 Kubernetes 运行环境,

kubelet

        kubelet是一个在集群中每个节点(node)上运行的代理,负责接收并处理控制节点发来的指令,以及管理当前node上pod对象的容器,它保证容器(containers)都 运行在 Pod 中。

        kubelet 接收一组通过各类机制提供给它的 PodSpecs,确保这些 PodSpecs 中描述的容器处于运行状态且健康。

        kubelet 不会管理不是由 Kubernetes 创建的容器。

        kubelet支持从API server以配置清单形式接收资源定义,或者从指定的目录加载静态pod配置清单,通过容器运行时创建、启动和监事容器。

kube-proxy

        kube-proxy是集群中每个节点上运行的网络代理, 是实现 Kubernetes 服务(Service) 概念的一部分。

        kube-proxy 维护节点上的网络规则。这些网络规则允许从集群内部或外部的网络会话与 Pod 进行网络通信。

        如果 *** 作系统提供了数据包过滤层并可用的话,kube-proxy 会通过它来实现网络规则。否则, kube-proxy 仅转发流量本身。

        kube-proxy有两种模式实现流量转发,分别是iptables模式和ipvs(IP Virtual Server)模式,默认是iptables模式,是通过每个节点的iptables规则实现的,但随着service数量增大,iptables模式由于线性查找匹配、全量更新等特点,性能会显著下降,因此从Kubernetes的1.8版本开始引入了ipvs模式,ipvs和iptables都是基于netfilter,但ipvs使用hash表并且运行在内核态,可以显著提升性能。

容器运行时(Container Runtime) 

        容器运行时是负责运行容器的软件。Kubernetes 支持多个容器运行环境: Docker、 containerd、CRI-O 以及任何实现 Kubernetes CRI (容器运行环境接口)。

        容器运行时是真正管理容器的组件,容器运行时分为高层运行时和底层运行时,高层运行时主要包括docker、containerd和cri-o,底层运行时主要包括runc、kata-containers和gVisor,因kata-containers和gVisor属于安全容器运行时,是为了使容器不与宿主机使用同一内核或不直接访问宿主机内核而引入的,保证了更高的隔离性和安全性,除非有特殊需求,底层容器运行时必定是使用runc,因此在选择容器运行时时,主要是选择高层容器运行时

插件

        插件使用 Kubernetes 资源(DaemonSet、 Deployment等)实现集群功能。 因为这些插件提供集群级别的功能,插件中命名空间域的资源属于 kube-system 命名空间。

        插件用来扩展kubernetes的基本功能,按照重要程度可分为必要和可选两种类型,其中,网络插件属于必要插件,常用的网络插件包括flannel、calico、canal、cilium和weave net等,DNS通常也是必要插件之一,集群 DNS 是一个 DNS 服务器,和环境中的其他 DNS 服务器一起工作,它为 Kubernetes 服务提供 DNS 记录。Kubernetes 启动的容器自动将此 DNS 服务器包含在其 DNS 搜索列表中。web ui、容器资源监控系统、集群日志系统、ingress controller等属于可选插件。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5691612.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存