kubernetes===》理论介绍、架构图

一、Kubernetes 入门

Kubernetes是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。Kubernetes拥有一个庞大且快速增长的生态系统。Kubernetes的服务、支持和工具广泛可用。

二、Kubernetes简介

  • Kubernetes是一个全新的基于容器技术的分布式领先方案。简称:k8s。它是Google开源的容器集群管理系统,它的设计灵感来自于Google内部的一个叫做Borg的容器管理系统。继承了Google十余年的容器集群使用经验,它为容器化的应用提供了部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,极大的提高了大规模容器集群管理的便捷性。
  • Kubernetes是一个完备的分布式系统支撑平台,具有完备的集群管理能力,多扩多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和发现机制、內建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制以及多粒度的资源配额管理能力。
  • 在集群管理方面,Kubernetes将集群中的机器划分为一个 Master 节点和一群工作节点 Node,其中,在 Master节点运行着集群管理相关的一组进程 kube-apiserver、kube-controller-manager 和 kube-scheduler,这些进程实现了整个集群的资源管理、Pod 调度、弹性伸缩、安全控制、系统监控和纠错等管理能力,并且都是全自动完成的。Node 作为集群中的工作节点,运行真正的应用程序,在 Node 上 Kubernetes 管理的最小运行单元是 Pod。Node 上运行着 Kubernetes 的kubelet、kube-proxy 服务进程,这些服务进程负责 Pod 的创建、启动、监控、重启、销毁以及实现软件模式的负载均衡器。
  • 在 Kubernetes 集群中,它解决了传统 IT 系统中服务扩容和升级的两大难题。如果今天的软件并不是特别复杂并且需要承载的峰值流量不是特别多,那么后端项目的部署其实也只需要在虚拟机上安装一些简单的依赖,将需要部署的项目编译后运行就可以了。但是随着软件变得越来越复杂,一个完整的后端服务不再是单体服务,而是由多个职责和功能不同的服务组成,服务之间复杂的拓扑关系以及单机已经无法满足的性能需求使得软件的部署和运维工作变得非常复杂,这也就使得部署和运维大型集群变成了非常迫切的需求。
  • Kubernetes 的出现不仅主宰了容器编排的市场,更改变了过去的运维方式,不仅将开发与运维之间边界变得更加模糊,而且让 DevOps 这一角色变得更加清晰,每一个软件工程师都可以通过 Kubernetes 来定义服务之间的拓扑关系、线上的节点个数、资源使用量并且能够快速实现水平扩容、蓝绿部署等在过去复杂的运维操作

三、架构

Kubernetes 遵循非常传统的客户端服务端架构,客户端通过 RESTful 接口或者直接使用 kubectl 与Kubernetes 集群进行通信,这两者在实际上并没有太多的区别,后者也只是对 Kubernetes 提供的 RESTfulAPI 进行封装并提供出来。每一个 Kubernetes 集群都由一组 Master 节点和一系列的 Worker 节点组成,其中 Master 节点主要负责存储集群的状态并为 Kubernetes 对象分配和调度资源。

1.Master(主要用来管理集群)

它主要负责接受客户端的请求,安排容器的执行并且运行控制循环,将集群的状态向目标状态进行迁移,Master节点内部由7个组件构成:

#1.API Server(kube-apiserver : 中央管理器,调度管理集群)
负责处理来自用户的请求,其主要作用就是对外提供RESTful的接口
包括用于查看集群状态的读请求以及改变集群状态的写请求,也是唯一一个于etcd集群通信的组件。

#2.Controller(kube-controller-manager :控制器: 管理容器,监控容器)
管理器运行了一系列的控制器进程,这些进程会按照用户的期望状态在后台不断地调节整个集群中的对象
当服务的状态发生改变,控制器就会发现这个改变并且开始向目标状态迁移。

#3.Scheduler(kube-scheduler:调度器:调度容器)
调度器其实为kubernetes中运行的Pod选择部署的Worker节点
它会根据用户的需要选择最能满足请求的节点来运行Pod,它会在每次需要调度Pod时执行。

#4.Flannel(提供集群间网络)

#5.Etcd(数据库)

#6.kubelet(部署容器,监控容器)

#7.kube-proxy(提供容器间的网络)

2.Node(主要用来部署应用)

#1.kubelet(部署容器,监控容器)
kubelet是一个节点上的主要服务,他周期性的从APIServer接受新的或者修改的pod规范并且保证节点上的pod和其容器的正常运行
还会保证节点会向目标状态迁移,该节点仍然会向Master节点发送宿主机的健康状态。

#2.kube-proxy(提供容器间的网络)
负责宿主机的子网管理,同时也能将服务暴露给外部
其原理就是在多个隔离的网络中把请求转发给正确的Pod或者容器。

3.Kubernetes架构图

在这里插入图片描述

在架构图中,我们把服务分为运行在工作节点上的服务和组成在集群级别控制板的服务
Kubernetes主要由以下几个核心组件组成:

 1. etcd保存整个集群的状态
 2. apiserver提供了资源的唯一入口,并提供认证、授权、访问控制、API注册和发现等
 3. controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
 4. scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上
 5. kubelet负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理
 6. Container runtime负责镜像的管理以及Pod和容器的真正运行(CRI)
 7. kube-poxy负责为Service提供cluster内部的服务发现和负载均衡
 
除了核心组件,还有一些推荐的组件:

 8. kube-dns负责为整个集群提供DNS服务
 9. Ingress Controller 为服务提供外网入口
 10. Heapster提供资源监控
 11. Dashboard提供GUIFederation提供跨可用区的集群
 12. Fluentd-elasticsearch提供集群日志采集,存储与查询

猜你喜欢

转载自blog.csdn.net/weixin_52492280/article/details/115268823