当前位置: 首页 > news >正文

Kubernetes权威指南-基础篇

Kubernetes入门

Kubernetes简介

  • 背景与起源
    • Borg系统的开源版本:Kubernetes的思想源于Google内部运行了十几年的大规模集群管理系统Borg,Google将Borg的理念和经验付诸实践,并将其开源,这就是Kubernetes(常简称为K8s)。
    • CNCF与云原生:Kubernetes是云原生计算基金会(CNCF) 的旗舰项目,并且已经成为云原生时代的操作系统
  • 官方定义
    • Kubernetes是一个开源的容器编排引擎,用于自动化部署、扩展和管理容器化应用。
    • 它提供了一个以容器为中心的管理环境,旨在实现生产级别的容器编排和运维能力。

为什么要用Kubernetes?

  • 演进历程
    • 传统部署时代:应用直接运行在物理服务器上,资源分配难以控制,应用之间容易产生资源争用,扩容成本高、周期长。
    • 虚拟化部署时代:通过虚拟机(VM)在单台物理机上运行多个操作系统。提供了更好的资源隔离和安全性,并且更容易扩容。但每个VM都包含一整套操作系统,体积庞大、笨重,资源开销大。
    • 容器化部署时代:容器与宿主机共享操作系统内核,因此更轻量、启动更快、资源效率更高。Docker使容器技术普及,但当容器数量增多、分布 across 多台主机时,如何管理它们的生命周期、网络互联、存储挂载、故障恢复和扩容?这就需要容器编排
  • Kubernetes的核心价值(解决了哪些痛点)
    • 服务发现与负载均衡:K8s可以为容器组提供唯一的域名和虚拟IP地址(Service),并自动将请求负载均衡到多容器实例上。
    • 存储编排:可以自动挂载选择的存储系统,无论是本地存储、云提供商(如AWS EBS)还是网络存储系统(如NFS, Ceph)。
    • 自动部署和回滚:可以描述应用的期望状态,K8s会以可控的速率将实际状态改变为期望状态,如果部署出错,可以轻松回滚。
    • 自动调度:K8s调度器会依据每个容器对CPU和内存(RAM)的资源需求,自动安排到合适的节点上运行以最大化资源利用率。
    • 自我修复:这是最关键的能力之一。K8s能持续监控集群状态。
      • 如果某个容器故障崩溃,它会重启该容器。
      • 如果某个节点宕机,它会将在该节点上运行的容器重新调度到其他健康节点上。
      • 如果服务不响应健康检查,它会终止该容器并在别处重新启动它。
    • 密钥与配置管理:可以存储和管理敏感信息(如密码、OAuth令牌)和应用程序的配置信息(如配置文件),并能在不重建容器镜像的情况下部署和更新这些secret和配置。

Kubernetes入门实例

  • 启动一个Deploymentkubectl create deployment nginx --image=nginx
    • 意图:告诉K8s运行一个名为nginx的应用,它使用nginx这个Docker镜像。
    • K8s的行动:K8s会创建一个Deployment对象,它负责保证Nginx容器的运行。随后,Deployment会创建一个Pod(容器组)来实际运行Nginx容器。
  • 将服务暴露给外部kubectl expose deployment nginx --port=80 --type=NodePort
    • 意图:前文的Nginx只在集群内部可以访问,现在让外部用户也能访问到它。
    • K8s的行动:K8s会创建一个Service对象,其类型为NodePort。这意味着K8s会在集群的每个节点上打开一个端口(如30080),并将访问该端口的所有流量转发到后台的Nginx Pod上。
  • 访问应用:用户可以通过<任意节点的IP地址>:30080来访问Nginx的欢迎页面。

Kubernetes的基本概念和术语

  • 集群类

    • Master(控制平面):集群的“大脑”。负责管理、调度、决策和暴露API。通常包含以下核心组件:

      API Server:所有资源操作的唯一入口,是各个组件之间通信的枢纽。

      Scheduler:负责根据资源情况将新创建的Pod调度到合适的Node上。

      Controller Manager:运行着各种控制器,负责维护集群的状态(如故障检测、自动扩展、滚动更新)。

      etcd:一个高可用的键值数据库,持久化存储整个集群的状态和配置数据。

    • Node(工作节点):集群的“工作肌肉”。负责运行容器。每个Node上至少运行:

      Kubelet:负责与Master通信,管理当前节点上Pod的生命周期(如创建、销毁容器)。

      Kube-proxy:负责维护节点上的网络规则,实现Service的负载均衡和流量转发。

      容器运行时:如Docker或containerd,负责真正运行容器。

  • 应用类(最核心的一组概念)

    • PodK8s调度和管理的最小单位。一个Pod可以包含一个或多个紧密关联的容器(如主应用容器和日志收集Sidecar容器)。这些容器共享网络命名空间、IP地址、端口空间和存储卷。Pod是 ephemeral(短暂的),会被频繁地创建和销毁。

    • Label标签,是附加到K8s对象(如Pod)上的键值对,用于标识对象的特定属性,是进行筛选和分组的核心手段。

    • Controller(控制器):通过管理Pod模板来维护应用的期望状态

      Deployment:最常用的控制器,用于部署无状态应用,它管理ReplicaSet,并提供滚动更新、回滚等强大功能。

      ReplicaSet:确保指定数量的Pod副本始终在运行通常由Deployment自动创建和管理,一般不需要直接操作。

      StatefulSet:用于部署有状态应用(如MySQL),它为Pod提供稳定的标识符、有序的部署和扩展、稳定的持久化存储

      DaemonSet:确保每个Node上都运行一个指定的Pod副本,用于运行集群级别的守护进程,如日志收集器(Fluentd)。

      Job/CronJob:用于运行一次性任务定时任务,任务完成后Pod即退出。

    • Service服务发现与负载均衡的核心,定义一个访问Pod的逻辑集合(通常由Label选择器确定)的策略,Service有稳定的IP地址和DNS名称,无论后端的Pod如何重启、迁移,访问方式都保持不变。类型包括:

      ClusterIP:默认类型,仅在集群内部可访问。

      NodePort:通过每个节点的IP和静态端口暴露服务。

      LoadBalancer:使用云服务商提供的负载均衡器对外暴露服务。

    • Ingress:管理外部访问集群服务的API对象,通常是HTTP/HTTPS流量,提供了比Service LoadBalancer更强大的功能,如基于域名和路径的路由、SSL终止等,需要配合Ingress Controller(如Nginx, Traefik)使用。

  • 存储类

    • Volume:卷,解决了Pod内容器共享数据以及数据持久化的问题,但Volume的生命周期与Pod绑定。
    • PersistentVolume:集群级别的存储资源,由管理员预先配置(如NFS卷、云存储盘)。
    • PersistentVolumeClaim:用户对存储资源的申请,Pod通过PVC来使用PV,从而实现了存储与Pod的解耦,使得Pod可以随意调度而不担心数据丢失。
  • 配置与安全类

    • Namespace:命名空间。在物理集群内部提供虚拟的隔离,用于将资源划分到不同的项目、团队或环境(如dev, prod)。
    • ConfigMap:用于将非机密的配置数据(如配置文件、环境变量)与应用代码分离。
    • Secret:用于存储敏感信息,如密码、令牌、密钥。数据以Base64编码存储,提供一定的安全性。

Kubernetes安装配置指南

核心安装方案详解

  • 创建TLS证书和秘钥:需要为etcd、API Server、kubelet等各个组件以及管理员分别创建证书,并确保它们被正确的CA签名。。
  • 部署高可用的etcd集群:在多个节点上部署etcd,配置其对等证书加密通信,并组成集群,这是整个集群的“数据库”,必须先部署。
  • 部署Master组件(控制平面)
    • API Server:配置其连接etcd的证书、服务端证书、以及用于认证的token文件等。
    • Controller Manager:配置其kubeconfig文件以安全地访问API Server。
    • Scheduler:同样配置其kubeconfig文件。
    • 这些组件通常通过systemd守护进程来管理。
  • 部署Node组件
    • kubelet:配置最复杂。需要其bootstrap kubeconfig文件(用于首次申请证书)、证书轮换、连接容器运行时等参数。
    • kube-proxy:配置其kubeconfig文件以访问API Server。
  • 部署集群插件:同样需要手动部署DNS和网络插件。

关键配置与运维指南

  • 使用私有镜像库:企业环境中通常使用私有Harbor或Nexus仓库。
    • 需要在所有节点上登录私有仓库docker login)。
    • 创建Kubernetes Secret,并在Pod定义中通过imagePullSecrets字段引用它,这样kubelet才有权限拉取私有镜像。
  • Kubernetes的版本升级
    • 介绍如何安全地进行集群升级,通常遵循“先Master,后Node”的顺序。
    • 对于kubeadm集群,会介绍kubeadm upgrade命令的使用。
    • 强调升级前一定要备份etcd和数据。
  • CRI详解
    • 解释容器运行时接口的概念。Kubernetes并不直接操作Docker,而是通过CRI这个抽象接口与容器运行时交互。
    • 这使得Kubernetes可以支持多种运行时(Docker, containerd, CRI-O)。书中会解释如何配置kubelet来使用不同的CRI。
  • kubectl命令行工具用法详解
    • 语法格式kubectl [command] [TYPE] [NAME] [flags]
    • 常用命令get, describe, create, apply, delete, logs, exec
    • 输出格式-o wide, -o yaml, -o json, -o name 等。
    • kubectl补全:如何启用bash/zsh的自动命令补全功能,极大提升效率。
http://www.hskmm.com/?act=detail&tid=10686

相关文章:

  • 【IEEE出版、已连续6届EI稳定检索】第七届机器学习、大数据与商务智能国际会议 (MLBDBI 2025)
  • office2024安装教程(附安装包)Office 2024 专业增强版下载安装激活详细图文步骤
  • Gitflow 工作流程
  • 魔改chromium真正通杀全网debugger检测
  • C#依赖注入
  • 完整教程:Docker Compose 一键启动多容器服务
  • 【截稿倒计时、高录用、稳检索】2025年教育创新与信息技术国际学术会议(EIIT 2025)
  • 低代码 + AI 构建智慧校园系统:某高校宿舍报修平台的48小时构建全流程
  • [MCP][07]logging和progress等功能说明
  • 端口命令
  • Microsoft OLE漏洞致远程代码执行安全公告解析
  • 写代码还是写提示词?——Prompt 工程是不是程序员的新技能树
  • c-store发送dcm文件超时
  • 解码C语言模块化编程
  • redis存储漂流瓶信息
  • hashcat高效爆破Wi-Fi密码方法(比aircrack-ng快)
  • 更新到macOS Sequoia后,chrome无法用ip访问192.168.*
  • Typora标题自动显示序号,大纲中也显示序号
  • 【IEEE出版、格林威治大学主办】第六届信息科学与并行、分布式处理国际学术会议(ISPDS 2025)
  • Day18面向对象的基本认识与回顾方法的定义
  • 【2025-09-19】连岳摘抄
  • 【2025-09-18】工作情绪
  • Ubuntu 系统部署 LNMP 环境详细教程(附shell脚本一键部署↓) - 指南
  • 详细介绍:7HTMLCSS高级
  • MAUI和Android、IOS的互操作之IOS篇
  • OBS Studio视频直播录制软件下载安装教程(录屏直播软件下载)
  • 【Java】Hashtable讲解
  • 使用Inno Setup打包安装程序exe流程
  • 攻防世界 web
  • 批判 vs 审判