Kubernetes权威指南-基础篇

简介: Kubernetes(K8s)是Google开源的容器编排系统,源自Borg,现为CNCF旗舰项目。它自动化部署、扩展和管理容器化应用,提供服务发现、负载均衡、自我修复、配置管理等功能,是云原生时代的基础设施核心。

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入门实例

  • 启动一个Deployment:kubectl 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,负责真正运行容器。

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

    • Pod:K8s调度和管理的最小单位。一个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的自动命令补全功能,极大提升效率。
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
存储 Kubernetes API
Kubernetes权威指南-原理篇
Kubernetes核心组件通过声明式API与调和循环实现自动化管控,API Server为中枢,etcd存储集群状态,Controller Manager驱动控制器维护期望状态,Scheduler负责Pod调度,Kubelet管理Pod生命周期,Kube Proxy实现服务网络代理。安全体系涵盖认证、授权与准入控制,网络基于CNI模型支持多种方案,存储通过PV/PVC解耦并支持动态供给,CSI推动存储生态标准化。
861 42
|
Kubernetes 安全 网络协议
【K8S系列】深入解析k8s网络插件—Calico
【K8S系列】深入解析k8s网络插件—Calico
6357 0
|
Kubernetes 网络协议 调度
Kubernetes权威指南-深入理解Pod & Service
Pod是Kubernetes最小调度单元,将多个紧密协作的容器组合为一个逻辑主机,共享网络、存储与IP。通过YAML定义容器、卷、健康检查等配置,支持静态Pod、Init容器、ConfigMap等高级特性,并借助Service实现稳定的服务发现与负载均衡,Ingress则提供七层流量路由,构建高效、可靠的微服务架构。
1547 3
|
8月前
|
弹性计算 Kubernetes 监控
Kubernetes实战:你的分布式系统“保姆”养成记
Kubernetes就是你的超级餐厅经理:容器倒了?秒级重启!客流量暴涨?自动复制服务员!换新菜单?零停机逐步更新!所有服务的秘方(配置)统一管理。
428 1
|
物联网 虚拟化 Windows
Windows 10 version 22H2 中文版、英文版下载 (2025 年 9 月更新)
Windows 10 version 22H2 中文版、英文版下载 (2025 年 9 月更新)
3485 2
Windows 10 version 22H2 中文版、英文版下载 (2025 年 9 月更新)
|
10月前
|
安全
CSRF攻击
CSRF(跨站请求伪造)攻击利用用户登录态,诱导其发起非自愿的请求,实现盗取资金、冒发帖子等恶意操作。攻击者通过钓鱼页面伪造请求,借助用户身份执行未授权操作。防御手段包括:使用Token验证、SameSite Cookie、检查Referer、避免GET修改数据等,可有效降低风险。
|
SQL XML Java
菜鸟之路Day33一一Mybatis入门
本文是《菜鸟之路Day33——Mybatis入门》的教程,作者blue于2025年5月18日撰写。文章介绍了MyBatis作为一款优秀的持久层框架,如何简化JDBC开发。通过创建SpringBoot工程、数据库表`user`及实体类`User`,引入MyBatis依赖并配置数据库连接信息,使用注解方式编写SQL语句实现查询所有用户数据的功能。此外,还展示了如何通过Lombok优化实体类代码,减少冗余的getter/setter等方法,提高开发效率。最后通过单元测试验证功能的正确性。
529 19
|
人工智能 运维 Kubernetes
2025 超详细!Lens Kubernetes IDE 多平台下载安装与集群管理教程
Lens 是一款企业级 Kubernetes 可视化操作平台,2025版实现了三大技术革新:AI智能运维(异常检测准确率98.7%)、多云联邦管理(支持50+集群)和实时3D拓扑展示。本文介绍其安装环境、配置流程、核心功能及高阶技巧,帮助用户快速上手并解决常见问题。适用于 Windows、macOS 和 Ubuntu 系统,需满足最低配置要求并前置依赖组件如 kubectl 和 Helm。通过 Global Cluster Hub 实现多集群管理,AI辅助故障诊断提升运维效率,自定义监控看板和插件生态扩展提供更多功能。