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

Kubernetes架构概览

目录

专栏介绍

作者与平台

您将学到什么?

学习特色

Kubernetes架构概览

1.1 Kubernetes简介

1.2 基本架构

1.3 主要组件

1.4 核心功能

组件架构图解

2.1 控制平面组件详解

2.1.1 kube-apiserver

2.1.2 etcd

2.1.3 kube-scheduler

2.1.4 kube-controller-manager

2.1.5 cloud-controller-manager

2.2 工作节点组件详解

2.2.1 kubelet

2.2.2 kube-proxy

2.2.3 容器运行时

2.2.4 网络插件

2.2.5 Node Local Controller

核心概念详解

3.1 Pod

3.1.1 定义

3.1.2 共享环境

3.1.3 设计初衷

3.1.4 生命周期

3.1.5 Pod示例

3.2 Deployment

3.2.1 定义

3.2.2 核心功能

3.2.3 与ReplicaSet的关系

3.2.4 Deployment示例

3.3 Service

3.3.1 定义

3.3.2 核心功能

3.3.3 类型与场景

3.3.4 Service示例

核心概念关系图

4.1 用户 → Deployment

4.2 Deployment → ReplicaSet

4.3 ReplicaSet → Pod

4.4 Pod → Service

4.5 Service → Node

4.6 Node → 容器运行时

实际应用场景

5.1 部署Web应用

5.1.1 创建Deployment

5.1.2 创建Service

5.1.3 访问应用

5.2 微服务架构

5.2.1 前端服务

5.2.2 后端API

5.2.3 数据库服务

5.2.4 架构图


专栏介绍

作者与平台

作者:庸子

用户ID:2401_86478612

第一发表平台:CSDN

欢迎来到《Kubernetes架构师之路:系统化学习与实践》专栏!在这个容器化技术主导的时代,Kubernetes已成为云原生应用编排的事实标准,掌握Kubernetes已成为每位开发者和运维工程师的必备技能。

本专栏采用系统化学习方法,从基础概念到高级实践,循序渐进地带您全面掌握Kubernetes技术栈。无论您是刚接触容器技术的初学者,还是希望深入理解Kubernetes架构的资深工程师,这里都将为您提供清晰的学习路径和实用的实战指导。

您将学到什么?

  • 基础理论:深入理解容器、容器编排、Kubernetes核心概念和架构设计
  • 核心组件:掌握etcd、API Server、Controller Manager、Scheduler等核心组件的工作原理
  • 资源管理:学会Pod、Deployment、Service、Ingress等核心资源的创建与管理
  • 网络与存储:理解Kubernetes网络模型和存储方案,解决实际部署中的网络与存储问题
  • 高可用与扩展:构建高可用的Kubernetes集群,实现应用的自动扩展与故障恢复
  • 监控与日志:掌握集群监控、日志收集与应用性能优化方法
  • CI/CD集成:学习如何将Kubernetes与CI/CD流程结合,实现自动化部署
  • 安全实践:了解Kubernetes安全模型,掌握RBAC、网络策略等安全配置

学习特色

  1. 系统化知识体系:从零开始,构建完整的Kubernetes知识框架
  2. 实战导向:每个知识点都配有实际操作案例,让您"学以致用"
  3. 问题驱动:针对实际部署中常见的问题提供解决方案
  4. 最新版本覆盖:基于最新稳定版Kubernetes,紧跟技术发展趋势
  5. 架构师视角:不仅教您"如何做",更解释"为什么这样设计"

无论您是想提升个人竞争力,还是为企业构建高效的云原生基础设施,本专栏都将助您成为真正的Kubernetes专家。让我们一起开启这段激动人心的Kubernetes学习之旅!

立即订阅,开启您的Kubernetes架构师成长之路!

Kubernetes架构概览

1.1 Kubernetes简介

Kubernetes(简称K8s)是一个开源的容器编排平台,最初由Google设计并捐赠给云原生计算基金会(CNCF)。它用于自动化部署、扩展和管理容器化应用程序,提供了灵活、可扩展的解决方案,帮助开发者和运维人员简化应用程序的管理流程。

Kubernetes的核心价值在于它能够自动化容器化应用的部署、扩展和管理,解决了大规模容器环境中的复杂性问题。它提供了服务发现、负载均衡、存储编排、自动扩缩容、自我修复等关键功能,使开发者能够专注于业务逻辑而非基础设施管理。

1.2 基本架构

Kubernetes集群由一组节点组成,包括一个或多个控制平面节点和若干工作节点。控制平面节点负责管理集群的整体状态,而工作节点负责实际运行容器化的应用程序。

1.3 主要组件

Kubernetes集群由两种类型的节点组成:

  1. 控制平面(Master):负责管理整个集群的状态和配置
  2. 工作节点(Node):负责运行容器化应用程序

1.4 核心功能

Kubernetes提供了一系列核心功能,使其成为容器编排领域的领导者:

容器编排:自动部署、扩展和管理容器化应用

服务发现:自动为容器分配IP和DNS名称

负载均衡:在多个容器之间分配流量

自动扩缩容:根据资源需求自动调整应用实例数量

存储编排:自动挂载和管理存储系统

自我修复:自动替换失败的容器

密钥与配置管理:安全地存储和管理敏感信息

批处理执行:支持一次性任务和批处理工作负载

组件架构图解

2.1 控制平面组件详解

控制平面是Kubernetes集群的大脑,负责管理集群的整体状态和配置。以下是控制平面各组件的详细说明:

2.1.1 kube-apiserver

kube-apiserver是Kubernetes集群的统一入口,负责处理所有REST请求,提供RESTful API接口服务。它是Kubernetes控制平面的核心组件,所有其他组件都通过它进行通信。

主要功能

提供集群操作的唯一入口点

处理认证、授权和准入控制

维护集群状态,并将状态持久化到etcd

提供集群资源对象的CRUD操作接口

关键特性

水平扩展:可以通过部署多个实例实现高可用

RESTful API:支持JSON和Protocol Buffers格式

验证机制:确保所有操作符合Kubernetes API规范

事件通知:支持Watch机制,允许客户端实时监控集群状态变化

2.1.2 etcd

etcd是一个高可用的键值存储系统,用于保存Kubernetes集群的所有状态数据。它是Kubernetes集群的"真相来源",存储了集群中所有资源对象的配置和状态信息。

主要功能

持久化存储集群状态

提供高可用性和一致性保证

支持分布式部署和故障恢复

提供Watch机制,允许客户端监听键值变化

关键特性

强一致性:采用Raft算法确保数据一致性

高可用性:支持多节点部署,自动处理节点故障

快速响应:提供高效的读写性能

版本控制:支持数据的历史版本查询

2.1.3 kube-scheduler

kube-scheduler负责为新创建的Pod选择一个合适的Node节点运行。它根据调度算法和约束条件,评估集群中各个节点的资源状况和Pod的需求,选择最优的节点进行调度。

主要功能

监听未调度的Pod

根据调度算法选择合适的Node

将Pod绑定到选定的Node上

支持多种调度策略和插件

关键特性

多种调度策略:包括资源需求、亲和性/反亲和性、污点容忍等

可扩展性:支持自定义调度器

并行调度:提高大规模集群的调度效率

预选和优选:两阶段调度过程,确保调度质量

2.1.4 kube-controller-manager

kube-controller-manager运行多个控制器进程,负责管理集群状态的控制循环。这些控制器持续监控集群状态,并确保实际状态与期望状态一致。

主要功能

运行各种控制器,如Node Controller、Replication Controller等

监控集群状态变化

自动修复不符合期望状态的资源

处理集群中的各种事件

关键特性

多控制器集成:在一个进程中运行多个控制器

自动修复:自动处理节点故障、Pod崩溃等问题

事件驱动:基于集群状态变化触发相应操作

可扩展性:支持自定义控制器

2.1.5 cloud-controller-manager

cloud-controller-manager是在公有云环境中负责管理与云提供商相关的资源的组件。它抽象了底层云平台的差异,使Kubernetes可在多种云平台上运行。

主要功能

管理云提供商特定的资源

处理节点、负载均衡器等云资源

提供统一的接口抽象不同云平台

减少对核心Kubernetes组件的依赖

关键特性

云平台抽象:支持多种云服务提供商

资源隔离:将云相关功能与核心组件分离

安全增强:减少对云凭证的暴露

独立部署:可以独立于其他控制平面组件部署

2.2 工作节点组件详解

工作节点是Kubernetes集群中的执行者,负责实际运行容器化应用程序。以下是工作节点各组件的详细说明:

2.2.1 kubelet

kubelet是运行在每个工作节点上的主要代理进程,负责管理节点上的Pod和容器。它是节点与控制平面的桥梁,确保Pod按照预期运行。

主要功能

管理Pod的生命周期

与容器运行时交互,启动和管理容器

监控节点和容器的资源使用情况

向控制平面报告节点状态

关键特性

Pod管理:负责Pod的创建、更新和删除

容器管理:与容器运行时API交互

健康检查:执行Pod和容器的健康检查

资源监控:收集和报告节点和容器的资源使用情况

2.2.2 kube-proxy

kube-proxy是运行在每个工作节点上的网络代理服务,负责维护网络规则,管理Pod间的网络通信和负载均衡。

主要功能

实现Service的负载均衡

维护节点上的网络规则

处理Service的端口转发

实现集群内的网络通信

关键特性

负载均衡:将流量分发到多个Pod

网络代理:支持多种代理模式(iptables、IPVS等)

服务发现:根据Service规则转发流量

高可用:确保网络服务的连续性

2.2.3 容器运行时

容器运行时是负责创建和管理应用程序容器的软件。Kubernetes支持多种容器运行时,包括Docker、containerd、CRI-O等。

主要功能

启动和管理容器

下载和管理容器镜像

提供容器隔离和资源限制

处理容器的生命周期事件

关键特性

镜像管理:支持多种镜像仓库

资源隔离:提供cgroups和namespaces隔离

安全增强:支持安全容器和镜像扫描

标准接口:遵循OCI和CRI标准

2.2.4 网络插件

网络插件是实现容器之间和容器与外部网络通信的组件。Kubernetes支持多种网络插件,如Flannel、Calico、Weave等。

主要功能

实现Pod间的网络通信

提供跨节点的网络连接

支持网络策略和安全规则

处理服务发现和负载均衡

关键特性

CNI接口:遵循容器网络接口标准

网络策略:支持基于标签的网络访问控制

覆盖网络:支持跨节点的网络通信

性能优化:提供高效的网络转发机制

2.2.5 Node Local Controller

Node Local Controller是负责在每个节点上执行特定控制任务的组件,如本地存储管理、节点健康检查等。

主要功能

管理节点上的本地存储

执行节点健康检查

处理节点特定的资源分配

协助节点故障恢复

关键特性

本地优化:针对节点级别的特定优化

资源管理:高效管理节点本地资源

故障检测:快速检测节点故障

性能监控:收集节点性能指标

核心概念详解

3.1 Pod

3.1.1 定义

Pod是Kubernetes中最小的调度单元,可以包含一个或多个容器。Pod中的容器共享网络和存储资源,被作为一个整体进行调度和管理。

关键特性

最小部署单元:Kubernetes调度的最小单位

多容器支持:一个Pod可以包含多个容器

共享资源:容器共享网络和存储

生命周期管理:Pod有明确的创建、运行和终止生命周期

3.1.2 共享环境

同一Pod内的容器共享IP地址和端口空间,可通过localhost互相通信。这种设计使得容器之间可以高效地交换数据和信息。

共享网络

共享IP地址:所有容器使用相同的IP地址

共享端口空间:容器间不能使用相同的端口

localhost通信:容器间可通过localhost互相访问

域名解析:容器间可以通过容器名互相解析

共享存储

共享卷:Pod可以挂载共享存储卷

数据持久化:容器间共享数据,实现数据持久化

配置共享:通过共享卷共享配置文件

临时存储:支持临时存储需求

3.1.3 设计初衷

Pod的设计初衷是支持紧密耦合的容器组或临时任务。例如:

主容器+Sidecar容器

主容器:运行主要应用程序

Sidecar容器:辅助主容器,如日志收集、监控等

共享资源:通过共享网络和存储实现高效通信

生命周期一致:Pod中的容器一起启动和终止

临时任务

短期运行:执行一次性任务后自动终止

资源隔离:与其他任务隔离运行

结果收集:通过共享存储收集任务结果

自动清理:任务完成后自动清理资源

3.1.4 生命周期

Pod有明确的生命周期状态,反映了其内部容器的运行状态:

Pending(创建中)

Pod已被接受,但尚未创建

可能正在下载镜像或调度节点

用户可以通过kubectl get pods查看状态

Running(运行中)

Pod已被绑定到节点,且至少一个容器正在运行

如果容器启动失败,Pod可能处于此状态但容器未运行

用户可以通过kubectl describe pods查看详细信息

Succeeded(成功)

所有容器已成功终止

适用于一次性任务

容器退出码为0

Failed(失败)

所有容器已终止,至少一个容器以非零退出码终止

适用于一次性任务

用户可以通过kubectl logs查看容器日志

Unknown(未知)

无法确定Pod状态

通常是由于与节点通信失败

3.1.5 Pod示例

以下是一个Pod的YAML配置示例:

apiVersion: v1

kind: Pod

metadata:

  name: nginx-pod

  labels:

    app: nginx

spec:

  containers:

  - name: nginx

    image: nginx:1.23

    ports:

- containerPort: 80

关键配置说明

apiVersion: 指定API版本

kind: 资源类型,这里是Pod

metadata: 元数据,包括名称和标签

spec: Pod规格,包括容器定义

containers: 容器列表,每个容器指定镜像和端口

3.2 Deployment

3.2.1 定义

Deployment是用于管理Pod副本集(ReplicaSet)的控制器,确保指定数量的Pod始终运行。它提供了一种声明式的方式来部署和管理应用,支持声明式配置和自动更新。

关键特性

声明式配置:用户只需声明期望状态

自动更新:支持滚动更新和回滚

扩缩容:支持手动和自动扩缩容

版本管理:支持多版本管理和回滚

3.2.2 核心功能

Deployment提供了一系列核心功能,简化了应用的部署和管理:

滚动更新(Rolling Update)

逐步替换旧Pod,实现零停机部署

通过控制更新速率,确保应用在更新过程中仍然可用

支持更新策略(如Recreate、RollingUpdate)

可配置更新最大不可用时间和最大 surge 数量

回滚(Rollback)

快速恢复到历史版本

Deployment会保留历史版本,允许用户在出现问题时快速回滚

支持回滚到特定修订版本

记录每次变更,便于问题排查

扩缩容(Scaling)

手动或自动调整Pod副本数

支持水平Pod自动扩缩容(HPA)

根据CPU、内存等指标自动调整副本数

支持自定义指标和外部指标

3.2.3 与ReplicaSet的关系

Deployment管理ReplicaSet,ReplicaSet管理Pod。每次更新Deployment会生成新的ReplicaSet,旧ReplicaSet保留以便回滚。

关系说明

Deployment:定义应用的期望状态(副本数、镜像等)

ReplicaSet:确保Pod数量符合预期,并管理Pod的标签选择器

Pod:实际运行容器的工作负载单元

更新过程

  1. 用户更新Deployment的配置(如镜像版本)
  2. Deployment创建一个新的ReplicaSet
  3. 新ReplicaSet根据滚动更新策略逐步创建新Pod
  4. 旧ReplicaSet逐步终止旧Pod
  5. 更新完成后,旧ReplicaSet保留(默认保留10个历史版本)

回滚过程

  1. 用户执行回滚命令,指定要回滚的修订版本
  2. Deployment创建一个新的ReplicaSet,使用历史配置
  3. 新ReplicaSet根据滚动更新策略逐步创建Pod
  4. 旧ReplicaSet逐步终止当前Pod
  5. 回滚完成,当前ReplicaSet更新为新的版本
3.2.4 Deployment示例

以下是一个Deployment的YAML配置示例:

apiVersion: apps/v1

kind: Deployment

metadata:

  name: nginx-deployment

  labels:

    app: nginx

spec:

  replicas: 3

  selector:

    matchLabels:

      app: nginx

  template:

    metadata:

      labels:

        app: nginx

    spec:

      containers:

      - name: nginx

        image: nginx:1.23

        ports:

        - containerPort: 80

关键配置说明

apiVersion: 指定API版本(apps/v1)

kind: 资源类型,这里是Deployment

metadata: 元数据,包括名称和标签

spec: Deployment规格,包括副本数和Pod模板

replicas: 期望的Pod副本数

selector: 用于选择要管理的Pod的标签选择器

template: Pod模板,定义Pod的规格

3.3 Service

3.3.1 定义

Service是Kubernetes中用于定义一组Pod访问策略的抽象资源,为动态变化的Pod提供稳定的访问端点(IP/DNS)。Pod的IP地址是动态分配的,可能会随着Pod的重新调度而改变,Service通过为一组Pod提供一个稳定的虚拟IP地址和DNS名称,使得其他应用程序可以通过该IP地址或DNS名称与这组Pod进行通信。

关键特性

稳定访问:为动态变化的Pod提供稳定的访问端点

负载均衡:将流量分发到多个Pod

服务发现:通过DNS名称访问服务,避免依赖Pod IP

会话保持:支持会话亲和性,将来自同一客户端的请求定向到同一Pod

3.3.2 核心功能

Service提供了一系列核心功能,简化了服务间的通信:

负载均衡

将流量分发到多个Pod

支持多种负载均衡算法(轮询、最少连接等)

支持会话亲和性(基于客户端IP)

支持流量权重分配

服务发现

通过DNS名称访问服务,避免依赖Pod IP

支持内网DNS解析

支持服务别名和端口映射

支持服务端点健康检查

网络策略

控制Pod间的网络访问

支持基于标签的网络访问控制

支持基于端口的网络访问控制

支持基于命名空间的网络访问控制

3.3.3 类型与场景

Service支持多种类型,适用于不同的场景:

ClusterIP(内部服务通信)

默认类型,仅在集群内部可访问的虚拟IP

适用于内部微服务通信

不直接暴露给外部客户端

通过kube-proxy实现负载均衡

NodePort(通过节点端口暴露服务)

在ClusterIP基础上,在每个节点开放静态端口

适用于开发测试环境

可以通过节点IP和端口访问服务

可以与LoadBalancer类型结合使用

LoadBalancer(通过云平台负载均衡器暴露服务)

使用云提供商的负载均衡器

适用于生产环境公网访问

自动分配外部IP地址

支持多种云服务提供商

Headless(直接获取Pod IP)

不分配ClusterIP,直接返回Pod的IP地址

适用于StatefulSet或DNS发现场景

支持自定义DNS记录

适用于需要直接访问Pod的场景

3.3.4 Service示例

以下是一个Service的YAML配置示例:

apiVersion: v1

kind: Service

metadata:

  name: nginx-service

spec:

  selector:

    app: nginx

  ports:

    - protocol: TCP

      port: 80

      targetPort: 80

  type: ClusterIP

关键配置说明

apiVersion: 指定API版本(v1)

kind: 资源类型,这里是Service

metadata: 元数据,包括名称

spec: Service规格,包括选择器、端口和类型

selector: 用于选择要关联的Pod的标签选择器

ports: 定义服务的端口映射

type: Service类型,这里使用ClusterIP

核心概念关系图

4.1 用户 → Deployment

用户通过Deployment定义Pod模板和副本数,声明应用的期望状态。用户只需关心"想要什么",而不需要关心"如何实现"。

交互过程

  1. 用户创建或更新Deployment资源
  2. Deployment控制器监听资源变化
  3. Deployment根据Pod模板创建ReplicaSet
  4. ReplicaSet根据副本数创建和管理Pod

关键特性

  • 声明式配置:用户只需声明期望状态
  • 自动化:系统自动实现期望状态
  • 版本管理:支持多版本管理和回滚
  • 扩缩容:支持手动和自动扩缩容

4.2 Deployment → ReplicaSet

Deployment控制ReplicaSet,确保Pod数量符合预期。每次更新Deployment会生成新的ReplicaSet,旧ReplicaSet保留以便回滚。

交互过程

  1. 用户更新Deployment的配置(如镜像版本)
  2. Deployment创建一个新的ReplicaSet
  3. 新ReplicaSet根据滚动更新策略逐步创建新Pod
  4. 旧ReplicaSet逐步终止旧Pod
  5. 更新完成后,旧ReplicaSet保留(默认保留10个历史版本)

关键特性

分层管理:Deployment管理ReplicaSet,ReplicaSet管理Pod

版本控制:每次更新创建新的ReplicaSet

回滚支持:保留历史版本,支持快速回滚

滚动更新:支持零停机更新

4.3 ReplicaSet → Pod

ReplicaSet管理Pod,确保Pod数量符合预期,并管理Pod的标签选择器。ReplicaSet通过标签选择器关联Pod,并监控Pod的状态。

交互过程

  1. ReplicaSet根据副本数创建Pod
  2. Pod被调度到合适的节点上运行
  3. ReplicaSet监控Pod的状态
  4. 如果Pod失败,ReplicaSet会创建新的Pod替代
  5. 如果副本数变化,ReplicaSet会相应增加或减少Pod数量

关键特性

自动修复:自动替换失败的Pod

标签选择:通过标签选择器关联Pod

副本管理:确保Pod数量符合预期

状态监控:持续监控Pod的状态

4.4 Pod → Service

Pod通过标签关联Service,提供访问入口。Service通过标签选择器关联一组Pod,为这组Pod提供统一的访问入口。

交互过程

  1. 用户创建Service,指定标签选择器
  2. Service控制器根据标签选择器查找匹配的Pod
  3. Service创建端点(Endpoints),记录Pod的IP和端口
  4. 客户端通过Service的IP或DNS名称访问服务
  5. kube-proxy将流量分发到后端的Pod

关键特性

动态发现:自动发现新创建的Pod

负载均衡:将流量分发到多个Pod

服务抽象:为客户端提供稳定的访问入口

会话保持:支持会话亲和性

4.5 Service → Node

Service关联Node,运行Pod的物理机/虚拟机。Node是Kubernetes集群中的工作节点,负责运行容器化应用程序。

交互过程

  1. Pod被调度到Node上运行
  2. Service通过kube-proxy在Node上设置网络规则
  3. 客户端请求到达Node,根据网络规则转发到Pod
  4. kube-proxy维护Node上的网络规则,确保流量正确转发
  5. 如果Node故障,Pod会被重新调度到其他Node

关键特性

负载均衡:在多个Node之间分配流量

故障转移:自动处理Node故障

网络代理:实现Service的负载均衡

资源管理:管理Node上的资源使用情况

4.6 Node → 容器运行时

Node关联容器运行时,实际运行容器。容器运行时是负责创建和管理应用程序容器的软件,如Docker、containerd等。

交互过程

  1. kubelet在Node上接收Pod规格
  2. kubelet与容器运行时API交互
  3. 容器运行时下载镜像并创建容器
  4. 容器运行时启动容器并管理其生命周期
  5. kubelet监控容器的状态和资源使用情况

关键特性

容器管理:创建、启动、停止和删除容器

镜像管理:下载和管理容器镜像

资源隔离:提供cgroups和namespaces隔离

生命周期管理:管理容器的生命周期事件

实际应用场景

5.1 部署Web应用

部署一个简单的Web应用是Kubernetes最常见的使用场景之一。以下是一个完整的部署流程:

5.1.1 创建Deployment

首先,创建一个Deployment来定义Nginx Pod的模板和副本数:

apiVersion: apps/v1

kind: Deployment

metadata:

  name: nginx-deployment

  labels:

    app: nginx

spec:

  replicas: 3

  selector:

    matchLabels:

      app: nginx

  template:

    metadata:

      labels:

        app: nginx

    spec:

      containers:

      - name: nginx

        image: nginx:1.23

        ports:

        - containerPort: 80

关键配置说明

replicas: 期望的Pod副本数,这里设置为3,实现高可用

selector: 用于选择要管理的Pod的标签选择器

template: Pod模板,定义Pod的规格

containers: 容器列表,这里使用Nginx镜像

5.1.2 创建Service

接下来,创建一个Service来暴露Nginx应用,使其能够被访问:

apiVersion: v1

kind: Service

metadata:

  name: nginx-service

spec:

  selector:

    app: nginx

  ports:

    - protocol: TCP

      port: 80

      targetPort: 80

  type: ClusterIP

关键配置说明

selector: 用于选择要关联的Pod的标签选择器,与Deployment的标签匹配

ports: 定义服务的端口映射,将80端口映射到容器的80端口

type: Service类型,这里使用ClusterIP,仅在集群内部可访问

如果需要从外部访问,可以将type改为LoadBalancer:

apiVersion: v1

kind: Service

metadata:

  name: nginx-service

spec:

  selector:

    app: nginx

  ports:

    - protocol: TCP

      port: 80

      targetPort: 80

  type: LoadBalancer

5.1.3 访问应用

创建Service后,可以通过以下方式访问应用:

集群内部访问

使用Service的名称:kubectl exec -it <pod-name> -- curl http://nginx-service

使用Service的ClusterIP:kubectl get svc nginx-service -o jsonpath='{.spec.clusterIP}'

集群外部访问

如果使用NodePort类型,可以通过节点IP和端口访问:http://<node-ip>:<node-port>

如果使用LoadBalancer类型,可以通过外部负载均衡器的IP访问:http://<external-ip>

DNS访问

在集群内部,可以通过DNS名称访问:http://nginx-service.default.svc.cluster.local

在同一命名空间内,可以直接使用服务名:http://nginx-service

5.2 微服务架构

Kubernetes非常适合部署和管理微服务架构。以下是一个典型的微服务架构示例:

5.2.1 前端服务

前端服务通常需要暴露给外部用户,因此使用LoadBalancer类型的Service:

apiVersion: apps/v1

kind: Deployment

metadata:

  name: frontend-deployment

  labels:

    app: frontend

spec:

  replicas: 2

  selector:

    matchLabels:

      app: frontend

  template:

    metadata:

      labels:

        app: frontend

    spec:

      containers:

      - name: frontend

        image: my-frontend-app:1.0

        ports:

        - containerPort: 80

        env:

        - name: API_URL

          value: "http://api-service"

---

apiVersion: v1

kind: Service

metadata:

  name: frontend-service

spec:

  selector:

    app: frontend

  ports:

    - protocol: TCP

      port: 80

      targetPort: 80

  type: LoadBalancer

关键配置说明

前端应用通过环境变量API_URL配置后端API的地址

使用LoadBalancer类型,将服务暴露给外部用户

副本数设置为2,确保高可用

5.2.2 后端API

后端API通常只在集群内部被访问,因此使用ClusterIP类型的Service:

apiVersion: apps/v1

kind: Deployment

metadata:

  name: api-deployment

  labels:

    app: api

spec:

  replicas: 3

  selector:

    matchLabels:

      app: api

  template:

    metadata:

      labels:

        app: api

    spec:

      containers:

      - name: api

        image: my-api-app:1.0

        ports:

        - containerPort: 8080

        env:

        - name: DB_HOST

          value: "database-service"

        - name: DB_PORT

          value: "5432"

---

apiVersion: v1

kind: Service

metadata:

  name: api-service

spec:

  selector:

    app: api

  ports:

    - protocol: TCP

      port: 80

      targetPort: 8080

      targetPort: 8080

关键配置说明

后端API通过环境变量配置数据库连接信息

使用ClusterIP类型,仅在集群内部可访问

副本数设置为3,确保高可用和负载均衡

5.2.3 数据库服务

数据库服务通常需要持久化存储和稳定的网络标识,因此使用StatefulSet和Headless Service:

apiVersion: apps/v1

kind: StatefulSet

metadata:

  name: database-statefulset

spec:

  serviceName: database-service

  replicas: 1

  selector:

    matchLabels:

      app: database

  template:

    metadata:

      labels:

        app: database

    spec:

      containers:

      - name: database

        image: postgres:13

        ports:

        - containerPort: 5432

        env:

        - name: POSTGRES_PASSWORD

          valueFrom:

            secretKeyRef:

              name: postgres-secret

              key: password

        volumeMounts:

        - name: database-storage

          mountPath: /var/lib/postgresql/data

  volumeClaimTemplates:

  - metadata:

      name: database-storage

    spec:

      accessModes: [ "ReadWriteOnce" ]

      resources:

        requests:

          storage: 10Gi

---

apiVersion: v1

kind: Service

metadata:

  name: database-service

spec:

  clusterIP: None

  selector:

    app: database

  ports:

    - protocol: TCP

      port: 5432

      targetPort: 5432

关键配置说明

使用StatefulSet管理有状态应用,提供稳定的网络标识和持久化存储

使用Headless Service(clusterIP: None),直接返回Pod的IP地址

通过volumeClaimTemplates自动创建持久化存储

使用Secret管理敏感信息(如数据库密码)

5.2.4 架构图

以下是这个微服务架构的示意图:

Kubernetes作为云原生时代的核心技术,正在改变软件开发和运维的方式。作为一名架构师,深入理解Kubernetes的架构和核心概念,不仅能够更好地设计和管理云原生应用,还能够为企业数字化转型提供技术支持。

本文系统性地介绍了Kubernetes架构概览、组件架构图解以及核心概念,希望能够帮助读者构建扎实的Kubernetes知识体系。随着技术的不断发展,K8s生态系统也在不断演进,读者需要持续学习,跟上技术发展的步伐。

在未来的技术道路上,愿读者能够不断探索、实践和创新,成为真正的Kubernetes架构师,为云原生技术的发展和应用做出贡献。

http://www.dtcms.com/a/308933.html

相关文章:

  • 2025虚幻5光明之魂开发思考1——借鉴软件工程
  • Dify 从入门到精通(第 6/100 篇):配置你的第一个 LLM:OpenAI、Claude 和 Ollama
  • kafka使用kraft
  • QT 动态属性和静态属性
  • Spring框架与AutoCAD结合应用
  • 2025年6月人工智能领域研究热点扫描|人工智能顶级期刊TPAMI
  • vue3 v-html绑定数据,点击sub实现popover效果
  • kamailio uac_req_send()
  • 项目中如何定义项目范围
  • 【Kiro Code 从入门到精通】重要的功能
  • 删除无效索引:提升写入性能的维护技巧
  • Linux日志管理与时间同步
  • 05 GWAS表型数据处理原理
  • Protobuf动态解析
  • 蓝牙耳机充不进去电怎么办?以换代修更简单!
  • 八股训练--Spring
  • Spring Batch参数校验失败问题分析:JobParametersValidator校验了两次JobParametersIncrementer的参数
  • 详解Vite 配置中的代理功能
  • JavaScript内存管理完全指南:从入门到精通
  • 智能化问题分析(Cherry Stdio+ MCP)
  • VS2022将.net4.8工程升级到.net6.0
  • 蚂蚁财富招Java高级研发
  • 基于deepseek的文本解析 - 超长文本的md结构化
  • AD域设计与管理-域策略-进阶
  • logging格式化输出日志asctime等详解
  • YOLOv13 汉化优化部署版本:超图增强自适应视觉感知的目标检测系统
  • 人工智能概念之十一:常见的激活函数与参数初始化
  • Python Day20 os模块 和 文件操作 及 例题分析
  • 【源力觉醒 创作者计划】对比与实践:基于文心大模型 4.5 的 Ollama+CherryStudio 知识库搭建教程
  • 免费数据恢复软件推荐:Wise Data Recovery 6.2.0 激活版使用指南