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

  • 启动一个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的自动命令补全功能,极大提升效率。
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
25天前
|
Kubernetes 网络协议 调度
Kubernetes权威指南-深入理解Pod & Service
Pod是Kubernetes最小调度单元,将多个紧密协作的容器组合为一个逻辑主机,共享网络、存储与IP。通过YAML定义容器、卷、健康检查等配置,支持静态Pod、Init容器、ConfigMap等高级特性,并借助Service实现稳定的服务发现与负载均衡,Ingress则提供七层流量路由,构建高效、可靠的微服务架构。
|
24天前
|
存储 Kubernetes API
Kubernetes权威指南-原理篇
Kubernetes核心组件通过声明式API与调和循环实现自动化管控,API Server为中枢,etcd存储集群状态,Controller Manager驱动控制器维护期望状态,Scheduler负责Pod调度,Kubelet管理Pod生命周期,Kube Proxy实现服务网络代理。安全体系涵盖认证、授权与准入控制,网络基于CNI模型支持多种方案,存储通过PV/PVC解耦并支持动态供给,CSI推动存储生态标准化。
|
Kubernetes 关系型数据库 MySQL
k8s教程(基础篇)-入门及案例
k8s教程(基础篇)-入门及案例
4357 0
|
22天前
|
SQL 前端开发 关系型数据库
如何开发一套研发项目管理系统?(附架构图+流程图+代码参考)
研发项目管理系统助力企业实现需求、缺陷与变更的全流程管理,支持看板可视化、数据化决策与成本优化。系统以MVP模式快速上线,核心功能包括需求看板、缺陷闭环、自动日报及关键指标分析,助力中小企业提升交付效率与协作质量。
|
25天前
|
存储 数据可视化 容灾
开发PACS系统的技术难点解析:从数据管理到性能优化
开发PACS系统面临多重技术与合规挑战:海量影像数据的高效存储与分层管理、高并发下的实时调阅性能、DICOM标准的深度兼容、专业级图像处理与Web化可视化、与HIS/RIS/EMR系统的无缝集成、7×24小时高可用与数据安全,以及严格的医疗设备注册与网络安全认证。需融合存储架构、协议解析、临床流程与法规合规,构建稳定可靠的临床级系统,技术壁垒极高。
138 3
|
25天前
|
弹性计算 监控 网络安全
如何轻松使用AWS Web应用程序防火墙?
AWS WAF是Web应用防火墙,可防护常见网络攻击。通过创建Web ACL并设置规则,保护CloudFront、API网关、负载均衡器等资源。支持自定义规则与OWASP预定义规则集,结合CloudWatch实现监控日志,提升应用安全性和稳定性。
|
3月前
|
人工智能 大数据 开发者
让AI时代的卓越架构触手可及,阿里云技术解决方案开放免费试用
阿里云推出基于场景的解决方案免费试用活动,新老用户均可领取100点试用点,完成部署还可再领最高100点,相当于一年可获得最高200元云资源。覆盖AI、大数据、互联网应用开发等多个领域,支持热门场景如DeepSeek部署、模型微调等,助力企业和开发者快速验证方案并上云。
4850 170
让AI时代的卓越架构触手可及,阿里云技术解决方案开放免费试用
|
25天前
|
监控 Java 关系型数据库
HikariCP 高性能数据库连接池技术详解与实践指南
本文档全面介绍 HikariCP 高性能数据库连接池的核心概念、架构设计和实践应用。作为目前性能最优异的 Java 数据库连接池实现,HikariCP 以其轻量级、高性能和可靠性著称,已成为 Spring Boot 等主流框架的默认连接池选择。本文将深入探讨其连接管理机制、性能优化策略、监控配置以及与各种框架的集成方式,帮助开发者构建高性能的数据访问层。
101 8
|
5月前
|
负载均衡 应用服务中间件 nginx
Nginx配置与命令
Nginx 是一款高性能的 HTTP 和反向代理服务器,其配置文件灵活且功能强大。本文介绍了 Nginx 配置的基础结构和常用指令,包括全局块、Events 块、HTTP 块及 Server 块的配置方法,以及静态资源服务、反向代理、负载均衡、HTTPS 和 URL 重写等功能实现。此外,还提供了常用的 Nginx 命令操作,如启动、停止、重载配置和日志管理等,帮助用户高效管理和优化服务器性能。