魔术桌
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • Package - Kubectl - Kubernetes(k8s)基础知识

文章摘要: Kubernetes通常简称为K8s,是一个开源的容器编排平台,用于自动化计算机容器化应用程序的部署、扩展和管理。

流程图

简介

简要说明

  • 允许你在集群中调度和运行容器,集群可以由物理机或虚拟机组成。
  • Kubernetes隐藏了底层硬件层的复杂性,使得部署和管理容器化的应用程序变得更加简单。

主要功能

  • 自动装箱:基于容器的资源需求,自动决定在哪个节点上运行。
  • 自我修复:如果容器失败,Kubernetes会重启它;如果节点失败,则将容器重新调度到其他节点。
  • 水平扩展:通过简单的命令或基于自动化的CPU等使用情况,可以很容易地增加或减少应用程序的副本数量。
  • 服务发现和负载均衡:Kubernetes可以使用DNS名或自己的IP地址自动发现容器,如果容器的流量过大,可以负载均衡流量,确保部署稳定。
  • 自动部署和回滚:可以描述应用程序的预期状态,Kubernetes可以改变实际状态至预期状态,如果有什么不对,可以回滚到之前的版本。
  • 密钥与配置管理:无需改动镜像配置,就可以更新应用程序配置和密钥。

注意事项

  • 学习曲线:Kubernetes相对复杂,有陡峭的学习曲线。
  • 资源需求:运行Kubernetes集群需要相对较多的计算资源。
  • 安全性:需要确保集群的安全,防止未授权访问。
  • 版本兼容性:在升级Kubernetes版本时,需要确保所有组件都与新版本兼容。
  • 监控和日志:需要设置适当的监控和日志记录机制来确保集群的稳定运行。

适用场景

  • 微服务架构:适用于需要快速、频繁部署的微服务架构。
  • 自动化和弹性:适用于需要高度自动化和弹性伸缩的应用程序。
  • 资源优化:适用于希望最大化资源利用率和降低成本的环境。
  • 多云和混合云:适用于需要在多个云环境或混合云环境中部署应用程序的场景。
  • 持续集成/持续部署(CI/CD):适用于实现CI/CD流程,以支持敏捷开发和持续交付。

命令行工具

命令行工具详细总结:Package-Kubectl

核心概念

Pod

  • Pod是Kubernetes的最小工作单元。
  • 每个Pod包含一个或多个容器。
  • Pod中的容器会作为一个整体被Master调度到一个Node上运行。
  • Pod有自己独立的IP。
  • Pod可以被创建、销毁。
  • 当扩容和缩容时,Pod的数量会发生变化。
  • 当Pod故障时,会创建新的Pod。

注释

  • 将联系紧密的容器封装在一个Pod单元内,以Pod整体进行调度、扩展和实现生命周期管理。
  • Pod内所有容器使用相同的网络和共享存储。容器之间直接通过本地网络直接通讯,提高沟通效率。

控制器(Controller)

  • 负载均衡是在Pod之上的抽象,通过控制器实现一系列基于Pod的高级特性。
  • 我们通常使用控制器来做应用真正的管理,而Pod是组成负载最小的单元。

ReplicationController

  • 用来确保容器应用的副本数始终保持在用户定义的副本数。
  • 如果有容器异常退出,会自动创建新的Pod来替代。
  • 如果有异常多出来的容器也会自动回收。

ReplicaSet

  • 与ReplicationController没有本质的不同,但支持集合式的selector。

建议使用Deployment来自动管理ReplicaSet,这样就无需担心跟其他机制的不兼容问题。

Horizontal Pod Autoscaling 仅限于ReplicaSet和Deployment,对Pod进行水平扩容和缩容。

StatefulSet解决有状态服务的问题

  • 稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC实现。
  • 稳定的网络标志,即Pod重新调度后其PodName和HostName不变,基于Headless Service来实现。
  • 有序部署,有序扩展,即Pod是有序的,在部署或者扩展的时候要依据定义的顺序一次进行,基于init containers来实现。
  • 有序回收,有序删除。

DaemonSet

  • 确保全部(或者一些)Node上运行一个Pod的副本。
  • 当有Node加入集群时,也会为他们新增一个Pod。
  • 当有Node从集群移除时,这些Pod也会被回收。
  • 删除DaemonSet将会删除它创建的所有Pod。

Job

  • 负责批处理任务,即仅执行一次的任务。
  • 保证批处理认为的一个或多个Pod成功结束。

Cron Job管理基于时间的Job

  • 在给定时间点只运行一次。
  • 周期性地在给定时间点运行。

服务(Service)

  • 服务是一种抽象概念,定义了Pod逻辑集合以及访问它们的策略。
  • 服务定义了外界访问一组特定Pod的方式。
  • 服务有自己的IP和端口,
  • 服务为Pod提供了负载均衡。

注释

  • 在Kubernetes中,Pod副本发生迁移或伸缩的时候会发生变化,IP也会发生变化。
  • 服务会监听Pod的IP变化,并统一对外提供IP。

容量(Volume)

  • 用来管理Kubernetes存储。
  • 声明在Pod中的容器可以访问的文件目录。
  • 可以被挂载在Pod中一个或多个容器的指定路径下。
  • 支持多种后端存储(本地存储、分布式存储、云存储)。

标签(Label)

  • 通过标签来实现资源分类管理。

命名空间(Namespace)

  • 命名空间是对一组资源和对象的抽象整合。
  • 在同一个集群内容可创建不同的命名空间,不同命名空间中的数据彼此隔离,实现共享同一个集群服务并且互不干扰。

集群默认存在以下命名空间:

  • default:所有未指定命名空间的对象都会被分配在名为default的命名空间。
  • kube-public:在命名空间下的资源可以被所有人访问(包含未认证用户),用来部署公共插件、容器模板等。
  • kube-system:所有由 Kubernetes 系统创建的资源都处于这个命名空间。
  • kube-nade-lease:每个节点在该命名空间中都有一个关联的标签对象,该对象由节点定期更新,被用来记录Note节点的心跳信号。

架构

  • 一个基础的Kubernetes集群(Cluster)通常包含一个Master节点和多个Note节点。
  • 每个阶段都是一台物理机,也可以是一台虚拟机。

Master节点

  • 提供集群控制,对集群做出全局性决策。
  • Kube-apiserver:前端控制层,Kubernetes API,水平扩展架构,通过部署更多实例来承载业务。
  • etcd:后端存储,存储集群数据,提供数据备份。
  • Kube-controller-manager:控制器,负责策略控制,针对不同的工作负载执行不同的策略。
  • Kube-scheduler:任务调度,监控没有分配节点的新创建的Pod,选择一个节点供Pod运行。

Node节点

  • 运行容器应用,由Master管理,负责健康并汇总容器状态,同时根据Master的要求管理容器的生命周期。
  • Kubelet:在集群内每个节点中运行的一个代理,用于保证Pod的与性能,接受Master的指令,负责管理容器(Pod)。
  • Kube-proxy:负责做负载均衡工作,管理Service的访问入口。
  • Add-ons:插件,用于扩展Kubernetes的功能。
  • Container runtime:通常使用Docker来运行容器。

注释

  • 通常在Master节点上不运行用户容器。为了提高高可用可以创建多个Master节点。

架构图

开放接口

注释

  • Kubernetes作为云原生应用的基础调度平台,相当于云原生的操作系统。
  • 为了便于系统的扩展,Kubernetes中开放来以下接口,可以分别对接不同的后端,实现自己的业务逻辑。

CRI(Container Runtime Interface)

  • 容器运行时接口。
  • 提供计算能力,定义来容器和镜像的服务接口。
  • 常见的CRI后端有Docker、rkt、kata-containers等。

CNI(Container Network Interface)

  • 容器网络接口。
  • 提供网络能力,由一组用于配置Linux容器的网络接口的规范和库组成。
  • 仅关注容器创建是的网络分配和当容器被删除是释放网络资源。

CSI(Container Storage Interface)

  • 容器存储接口。
  • 提供存储能力,Kubernetes可以将任意存储系统暴露给自己的容器工作负载。

工作负载对象

分类

无状态

管理的Pod集合是相互等价的,需要的时候可以被替换。

  • Deployment(部署)
  • ReplicaSet(副本设置)

有状态

为每个Pod维护一个唯一的ID,能够保证Pod的顺序性和唯一性,每个Pod是不可替代的。可以使用持久存储来保存服务产生的状态。

  • StatefulSet(状态设置)

守护进程

保证每个节点上运行着守护进程。

  • DaemonSet(守护程序设置)

批处理:

一次性的任务。

  • Job(任务)
  • CronJob(定时任务)

Deployment

简要说明

  • 不具有唯一标识的多个Pod的集合。

主要功能

  • 确保集群中期望数量的Pod运行。
  • 提供多种升级策略以及意见回滚能力。
  • 提供暂停/恢复的能力。

适用场景

  • Web Server等无状态应用。

ReplicaSet

简要说明

主要功能

  • Pod有稳定的网格标识符,Pod重新调度后Pod名称和Host名称不变。
  • 每个Pod有单独存储,保证Pod重新调度后还是能访问到相同的数据。

适用场景

  • 在某些分布式的场景,要求每个Pod都有自己单独的状态时。

服务发现

Pod生命周期

更新时间: 2025/10/6 10:37