K8s的基本概念与架构

K8S的基础概念和架构

k8s具有强大的功能:

  • 批处理
  • 弹性伸缩
  • 故障自我修复
  • 存储编排
  • 机密和配置管理
  • 自动部署和回滚
  • 服务发现和负载均衡

K8s具有强大的功能:

  1. 功能齐全的UI界面
  2. 全方位的立体监控系统
  3. 功能完备的日志手机系统

K8s基础介绍

为什么叫k8s?

K8s全程叫Kubernetes,在k和s之间有八个字母,简称为K8s

下图为K8s的logo:

image-20241229224522295

Kubernetes是可移植的、可扩展、开源的容器管理平台,是谷歌的Borg的开源版本。

K8s可以创建应用、更新应用、回滚应用,也可以实现应用的扩容和缩容,做到故障自回复。

  • 可移植:镜像可以从一个环境迁移到另一个环境
  • 可扩展:K8s集群可以横向拓展,根据流量实现自动扩容缩容
  • 开源的:源代码已经被公开,可以被用户免费使用,也可以进行二开
  • 可以对容器自动化部署、自动化扩缩容、跨主机管理等;
  • 可以对代码进行灰度发布、金丝雀发布、蓝绿发布、滚动更新等;
  • 具有完整的监控系统和日志收集平台,具有故障自恢复的能力。

Borg是谷歌内部的一个容器编排工具,谷歌的业务百分之90以上都在Borg上运行,Borg已经在谷歌内部已经使用了十数年。

K8s就是在Borg的基础上开发出来的轻量级容器编排工具,所以K8s的基础非常牢固,得益于Borg多年的经验积累和教训,K8s就是站在巨人肩膀上开发出来的产物,以至于在发行不久后,便迅速占领了容器编排的市场。

K8s架构

K8s的物理架构是master/node模式:

K8s集群至少需要一个主节点(Master)和多个工作节点(Worker);

Master节点是集群的控制节点,负责整个集群的管理和控制,主要用于暴露API、调度部署和对节;

工作节点主要是运行容器的。

下图为单Master节点架构图:

image-20241229231407634

控制节点组件介绍:

Kubectl是管理K8s命令行的工具,可以操作K8s的资源对象。当kubectl在使用的时候,会生成一个config的安全上下文,这里保存了kubectl调用的资源。【安装位置一般都可以,但一般安装在控制节点】

APIserver:提供了访问整个K8s集群的接口,当我的kubectl需要访问集群的时候,就会跟他交互。【所有的操作需要跟他交互,是整个系统的数据中心,并提供了一些认证授权,访问控制、api注册等功能】其产生的操作信息保存在ETCD中

ETCD:分布式键值对数据库,存储K8s资源信息,操作信息,网络信息等

Scheduler调度器:决定pod调度到哪个工作节点

POD:最小调度单元

Controller-Manager:控制器管理器,K8s集群内管理控制中心,负责node、endpoint等,作用:使资源可以按照期望的状态运行

如果我使用kubeadm安装的,则上述组件都是用pod跑的。

工作节点组件介绍:

kubelet:在scheduler调度pod到工作节点后,kubelet负责管理pod的状态,如启动、重启等

kube-proxy: 提供网络代理和负载均衡

coredns:提供DNS的服务

calico:网络插件,可以做到跨节点通信,提供pod的ip,还可以使用网络策略 【不一定得是他】

无论是docker还是containerd都是为了pod提供容器运行时

多master节点架构图:

image-20241230153028906

K8s组件:

master节点的组件:

  • apiserver
  • scheduler
  • controller-manager

上面三个是二进制时候会安装的组件

  • ETCD # 此组件可以单独部署一个节点,所以在master上不一定要部署这个组件

在master节点上还有两个组件需要部署,不过那是用kubeadm部署的时候需要安装

  • calico
  • docker

Work 节点的组件:

  • kubelet
  • kube-proxy
  • calico
  • coredns
  • docker

K8s的核心资源

  1. POD:POD是k8s中的最小调度单元、k8s是通过定义一个Pod的资源,然后在Pod里面运行容器,容器需要指定镜像,用来运行具体的服务。Pod代表集群上正在运行的一个进程,一个Pod封装一个容器(也可以封装多个容器),Pod里的容器共享存储、网络等。也就是说,可以把整个pod看作虚拟机,然后每个容器相当于运行在虚拟机的进程。
  2. label:标签 ,k8s中的资源对象大都可以打上标签,如Node、Pod、Service 等, 创建一个 Pod,给定一个 Label是app=tomcat,那么service可以通过label selector选择拥有app=tomcat的pod,和其相关联,也可通过 app=tomcat 删除拥有该标签的 Pod 资源。
    image-20241230183956374
  3. deployment: 控制器
    Replicaset是K8s中的副本控制器,管理pod,是pod副本数量始终维持在预设的个数
    deployment是管理replicaset和pod的副本控制器,Deployment可以管理多个replicaset,比replicaset更高级
    deployment可以对pod扩容、缩容、滚动更新和回滚等
  4. service:一组pod的逻辑集合
    Pod是有生命周期的,如果Pod重启IP很有可能会发生变化。如果我们的服务都是将Pod的IP地址写死,Pod的挂掉或者重启,和刚才重启的pod相关联的其他服务将会找不到它所关联的Pod,为了解决这个问题,在kubernetes中定义了service资源对象,Service 定义了一个服务访问的入口,客户端通过这个入口即可访问服务背后的应用集群实例,service是一组Pod的逻辑集合,这一组 Pod 能够被 Service 访问到,通常是通过 Label Selector实现的。
    image-20241230184800942
posted @ 2025-04-12 21:35  super派大星  阅读(54)  评论(0)    收藏  举报