【Kubernetes 基本概念】Kubernetes 的架构和核心概念-CSDN博客

一、Kurbernetes

1.1 简介

Kurbernetes是Google旗下的容器跨主机编排工具

Kurbernetes可以自动化应用容器的部署、扩展和操作提供以容器为中心的基础架构。

1.2 为什么要用K8s?

从生态圈的角度来看

  • Google 的业内最成熟的容器编排管理经验的输出
  • 2017 年战胜 Docker Swarm 和 Apache Mesos成为云原生应用唯一值得绑定的容器编排管理平台
  • 传统云平台提供商的全面支持Google k8s engine、Red Hat 的 OpenShift、Microsoft 的 Azure container service、IBM 的 cloud container service 等j

从云应用角度来看

  • 容器管理、调度和编排的事实标准摆脱锁定支持跨云
  • 先进的 Workload 管理之经验模型Pod 和 Controllers
  • 原生支持微服务抽象服务注册、服务发现和自动负载均衡

在生产环境中使用 Kubernetes 的主要优势在于它提供了在物理机或虚拟机集群上调度和运行容器的平台。

更宽泛地说它能帮你在生产环境中实现可以依赖的基于容器的基础设施。

而且由于 Kubernetes 本质上就是运维任务的自动化平台你可以执行一些其它应用程序平台或管理系统支持的操作只不过操作对象变成了容器。

1.3 K8s的特性

1强大的容器编排能力

作为容器编排管理平台拥有强大的容器编排能力。

Kubernetes 与 Docker 共同发展并且深度集成了 Docker因此适应容器的特点比如容器组合、标签选择和服务发现等可以满足企业级的需求具体表现如下

  • 以 Pod容器组为基本的编排和调度单元以及声明式的对象配置模型控制器、configmap、secret 等
  • 资源配额与分配管理
  • 健康检查、自愈、伸缩与滚动升级

2轻量级

轻量级对微服务架构有很好的支撑。

微服务架构的核心是将一个巨大的单体应用分解为很多小的互相连接的微服务一个微服务可能由多个实例副本支撑副本的数量可以随着系统的负荷变化进行调整。

整个系统划分出各个功能独立的组件组件之间边界清晰、部署简单以及很多功能实现了插件化可以非常方便地进行扩展和替换

  • 服务发现、服务编排与内部路由支持
  • 服务快速部署和自动负载均衡
  • 提供对“有状态”服务的支持

3便携性

无论公有云、私有云、混合云还是多云架构都全面支持可以随时随地地将系统整体进行“搬迁”。

Kubernetes 架构方案中屏蔽了底层网络的细节基于服务的虚拟 IP 地址的设计方式让架构和底层硬件无关无需改变配置文件就可以将系统从物理机迁移到公有云上并且谷歌云GCE、华为云CCE、阿里云ACK和腾讯云TKE都支持 Kubernetes 集群。

二、Kurbernetes集群架构与组件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Kubernetes 采用主从分布式架构节点在角色上分为 MasteNode

Kubernetes Master 是控制节点负责k8s集群的调度、管理等运维工作,组件有apiserver、controller-manager、scheduler、etcd。

Kubernetes Node 是运行节点负责运行工作负载即容器应用组件有kubelet、kuber-proxy、容器引擎/容器运行时docker、containerd等。

三、Kurbernetes的核心组件

3.1 Master组件

在这里插入图片描述

3.1.1 Kube-apiserver

所有服务请求的统一访问入口

提供认证、授权、访问控制、API 注册和发现等机制其中封装了核心对象的增删改查操作。

外部的客户端和内部的组件可以通过调用 REST API 接口的方式获取数据信息这些数据信息都存储到了 Etcd 中。

3.1.2 Kube-controller-manager

负责执行各种控制器。

功能

1作为控制管理器负责管理K8s各种资源对象的控制器

2通过apiserver监控整个K8s集群资源的状态并确保集群始终处于预期的工作状态

常用控制器

控制器名称作用补充说明
Node Controller节点控制器负责在节点出现故障时发现和响应定期检查 Node 的健康状态标识出失效的 Node
Replication Controller副本控制器保证Replication Controller 定义的副本数量与实际运行 Pod 的数量一致可以理解成确保集群中有且仅有N个Pod实例N是RC中定义的Pod副本数量
Endpoints Controller端点控制器填充端点对象即连接Services和Pods负责监听Service和对应的Pod副本的变化端点是一个服务暴露出来的访问点如果需要访问一个服务则必须知道它的endpoint
Service Account & Token Controllers服务账户和令牌控制器为新的命名空间创建默认账户和API访问令
ResourceQuota Controller资源配额控制器确保指定的资源对象在任何时候都不会超量占用系统物理资源
Namespace Controller命名空间控制器管理namespace的声明周期定期清理无效的 Namespace以及 Namespace 下的 API 对象比如Pod、Service、Secrte 等
Service Controller服务控制器属于K8S集群与外部的云平台之间的一个接口控制器

3.1.3 Kube-scheduler

功能

可视为资源调度器负责集群中的Pod资源调度通过调度算法预选策略和优选策略为要部署的Pod选择最适合的Node节点。

调度过程

在这里插入图片描述

预选策略predicate和 优选策略priorities

首先是过滤掉不满足条件的节点这个过程称为预选predicate

然后对通过的节点按照优先级排序这个是优选priority

最后从中选择优先级最高的节点。

如果中间任何一步骤有错误就直接返回错误。

3.2 配置存储中心——etcd

在这里插入图片描述

可以看作K8s集群的数据库是一种键值对存储结构的分布式数据库负责存储K8s集群的所有重要信息只有apiserver有读写权限

Etcd 是高可用的键值存储系统通过 Raft 一致性算法处理日志复制来保证强一致性。

Kubernetes 中的重要数据都持久化到 Etcd 中所有架构中的各个组件都是无状态的。

3.3 Node组件

在这里插入图片描述

3.3.1 Kubelet

1接收master的apiserver发来的请求创建和管理Pod与容器和容器引擎交换来实现容器的生命周期的管理

2收集node节点的资源信息和Pod的运行状态发送给apiserver。

3.3.2 Kube-Proxy

作为service资源的载体实现对Pod的网络代理负责维护Pod集群的网络规则和四层负载均衡工作。

3.3.3 容器引擎/容器运行时

用于运行容器。

Kubernetes Container Runtime容器运行时Node 是使用容器运行的节点可以使用多种容器。

3.4 推荐的插件补充知识

  • CoreDNS为整个集群提供 DNS 服务。
  • Ingress Controller为服务提供外网入口。
  • Dashboard提供 GUI图形用户界面。
  • Federation提供跨可用区的集群。
  • Fluentd日志收集。

四、Kurbernetes创建Pod资源的工作流程重要

在这里插入图片描述

1用户通过客户端发送创建Pod的请求apiserver

2Apiserver接收到请求后会先把请求信息写入到etcd中保存再找controller-manager根据请求信息中的资源预设模板创建Pod资源

3Controller-manager会通过apiserver找到scheduler调度新创建的Pod资源

4Scheduler通过调度算法的预选策略及优选策略筛选出最适合的Node节点进行调度

5 再通过apiserver找到对应的node节点上的Kubelet创建和管理Pod

6Kubelet会跟容器引擎交互来管理Pod和容器的生命周期

7用户还可以通过apiserver在kube-proxy写入iptables/ipvs网络规则创建service资源实现对Pod集群的网络代理

五、Kubernetes核心概念之资源对象

5.1 Pod

Pod是K8s能够创建和管理的最小单位一个Pod里可以包含一个或者多个容器应用Pod里的容器之间共享网络、存储等资源
在这里插入图片描述

一个 Pod 里可以运行多个容器又叫边车模式SideCar。

而在生产环境中一般都是单个容器或者具有强关联互补的多个容器组成一个 Pod。

同一个 Pod 之间的容器可以通过 localhost 互相访问并且可以挂载 Pod 内所有的数据卷

但是不同的 Pod 之间的容器不能用 localhost 访问也不能挂载其他 Pod 的数据卷。

5.2 Pod控制器

Pod 控制器是 Pod 启动的一种模版用来保证在K8S里启动的 Pod 应始终按照用户的预期运行副本数、生命周期、健康状态检查等。
在这里插入图片描述

Pod控制器功能
Deployment部署无状态应用同时也负责管理replicaset维持Pod副本数量符合预期数量和Pod容器化的应用进程
Statefulset部署有状态服务/应用
Daemonset在所有的node节点上部署同一类型的Pod
Job一次性的部署短期任务的Pod执行完任务后会自动退出的Pod
Cronjob周期性的部署短期任务的Pod执行完任务后会自动退出的Pod

有状态和无状态服务的区别

从是否需要数据的实时存储数据同步来区分。

有状态服务
1有实时的数据需要存储

2集群服务中把某一台服务器抽离出去过一段时间再加入到集群中如果服务集群无法正常工作(相互之间需要数据同步)。

无状态服务
1没有实时的数据需要存储

2集群服务中把某一台服务器抽离出去过一段时间再加入到集群中如果服务集群还是正常工作(相互之间不用数据同步)。

5.3 Service

5.3.1 为什么要用到Service(服务)

因为 Deployment 的 Pod 可能有多个并且这些 Pod 所在的 Node 并不固定因此无法使用固定的 IP 和端口去访问

Kubernetes 使用 Service 来解决此问题一个 Service 对应一个应用代表该应用提供的服务。

5.3.2 Service

在这里插入图片描述

在K8S集群内部为通过标签选择器相关联的一组Pod提供一个统一的访问入口clusterIP只支持四层代理转发

虚拟IP只在集群内部有效

客户端通过cluster IP 来请求应用服务时kube-proxy 会将请求转发给 Deployment 中的某个 Pod。

当 Pod 位置发生变化时kube-proxy 能够及时感知到。

通过 kube-proxy 就解决了单个 Pod 服务的注册和发现问题同时也实现了负载均衡。

5.4 Ingress

在这里插入图片描述

作为K8S集群外部接入层可自定义ingress规则根据用户请求的域名或URL请求路径转发给指定的service支持七层代理转发

#举个例子
客户端请求 http://www.xxx.com:port  ---> Ingress ---> Service ---> Pod

六、Kubernetes核心概念之资源配置信息

apiVersion: group/version  ## api资源属于的组和版本同一个组可以有多个版本       
kind:     ##  标记创建的资源类型
##  k8s主要支持以下资源类别Pod,ReplicaSet,Deployment,StatefulSet,DaemonSet,Job,Cronjob    
metadata: ## 元数据
        name  ## 对像名称
        namespace  ## 对象所属命名空间
        labels    ##指定资源标签标签是一种键值数据

spec:    ## 定义目标资源的期望状态
status   ## 显示资源的当前状态应该与spec 一致

6.1 apiversion

资源对象在K8S中使用的api接口版本

6.2 kind

资源对象的类型

6.3 metadata

资源对象的元数据信息比如 name资源名称、annotation注释、namespace命名空间、label标签

6.3.1 label

标签将一个键值对关联到某个资源对象用于资源对象的分组查询和筛选

有效的标签值必须为63个字符或更少并且必须为空或以字母数字字符[a-z0-9A-Z]开头和结尾中间可以包含横杠-、下划线_、点.和字母或数字。

6.3.2 laber selector

标签选择器用于查询和筛选拥有某个标签的资源对象

标签选择器目前有两种基于等值关系等于、不等于和基于集合关系属于、不属于、存在。

6.3.3 annotation

注释用于作资源对象的注释信息或在一些特殊的资源对象里用于作额外的功能特性配置

注释值没有字符长度限制。

6.3.4 name

资源名称通常定义在 “资源” 的 “元数据” 信息里。

6.3.5 namespance

命名空间在同一个命名空间中同类型的资源对象的名称是唯一的

6.4 spec

资源对象的资源配置清单配置属性比如 副本数、镜像、数据卷、标签选择器

6.5 status

资源对象的当前运行状态信息

cornflowerblue’>注释用于作资源对象的注释信息或在一些特殊的资源对象里用于作额外的功能特性配置。

注释值没有字符长度限制。

6.3.4 name

资源名称通常定义在 “资源” 的 “元数据” 信息里。

6.3.5 namespance

命名空间在同一个命名空间中同类型的资源对象的名称是唯一的

6.4 spec

资源对象的资源配置清单配置属性比如 副本数、镜像、数据卷、标签选择器

6.5 status

资源对象的当前运行状态信息

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: k8s