【Kubernets】Kubernetes 的基础知识,Pod是什么? 和容器的关系?多个容器如何在同一个 Pod 里协作?

1. Kubernetes 的核心概念

(1) Node(节点)

  • 定义:Node 是 Kubernetes 集群中的工作机器,可以是物理机或虚拟机。
  • 类型
    • Master Node:运行控制平面组件(如 API Server、Scheduler)。
    • Worker Node:运行应用负载(如 Pod)。
  • 关键组件
    • Kubelet:负责与 Master Node 通信,管理 Pod 和容器。
    • Kube Proxy:负责网络代理和负载均衡。
    • 容器运行时:负责运行容器(如 Docker、containerd)。

(2) Namespace(命名空间)

  • 定义:Namespace 是 Kubernetes 中用于隔离资源的虚拟集群。
  • 作用
    • 将资源分组,便于管理。
    • 实现多租户环境下的资源隔离。
  • 常见 Namespace
    • default:默认命名空间。
    • kube-system:Kubernetes 系统组件的命名空间。
    • kube-public:公共资源的命名空间。

(3) Label 和 Selector(标签和选择器)

  • Label
    • 键值对,用于标识和分类资源(如 Pod、Service)。
    • 示例:app=web, env=prod
  • Selector
    • 用于根据 Label 选择资源。
    • 示例:选择所有 app=web 的 Pod。

(4) Annotation(注解)

  • 定义:Annotation 是附加到资源上的元数据,用于存储非标识性信息。
  • 作用
    • 记录构建信息、版本号等。
    • 配置工具或库的行为。
  • 示例:build-version: v1.2.3

2. Kubernetes 的核心资源

(1) Pod

  • 定义:Kubernetes 的最小调度单元,包含一个或多个容器。
  • 特点
    • 共享网络和存储资源。
    • 生命周期短暂,通常由控制器(如 Deployment)管理。

(2) Deployment

  • 定义:用于定义 Pod 的副本数和更新策略。
  • 作用
    • 确保指定数量的 Pod 副本始终运行。
    • 支持滚动更新和回滚。
  • 示例
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: web-app
    spec:
      replicas: 3
      template:
        spec:
          containers:
          - name: web
            image: nginx
    

(3) Service

  • 定义:用于定义如何访问 Pod。
  • 作用
    • 提供稳定的 IP 和 DNS 名称。
    • 实现负载均衡和服务发现。
  • 类型
    • ClusterIP:集群内部访问。
    • NodePort:通过节点端口访问。
    • LoadBalancer:通过云提供商的负载均衡器访问。
  • 示例
    apiVersion: v1
    kind: Service
    metadata:
      name: web-service
    spec:
      selector:
        app: web
      ports:
      - protocol: TCP
        port: 80
        targetPort: 80
    

(4) ConfigMap 和 Secret

  • ConfigMap
    • 用于存储配置数据(如环境变量、配置文件)。
    • 示例:
      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: app-config
      data:
        log-level: "info"
      
  • Secret
    • 用于存储敏感数据(如密码、密钥)。
    • 示例:
      apiVersion: v1
      kind: Secret
      metadata:
        name: db-secret
      data:
        username: YWRtaW4=
        password: MWYyZDFlMmU2N2Rm
      

3. Kubernetes 的核心功能

(1) 自动扩展

  • Horizontal Pod Autoscaler (HPA)
    • 根据 CPU 使用率或其他指标自动调整 Pod 的副本数。
  • 示例
    apiVersion: autoscaling/v2beta2
    kind: HorizontalPodAutoscaler
    metadata:
      name: web-app-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: web-app
      minReplicas: 1
      maxReplicas: 10
      metrics:
      - type: Resource
        resource:
          name: cpu
          target:
            type: Utilization
            averageUtilization: 50
    

(2) 自我修复

  • 功能
    • 自动重启失败的容器。
    • 替换不可用的 Pod。
  • 实现
    • 通过控制器(如 Deployment、StatefulSet)确保 Pod 的期望状态。

(3) 滚动更新和回滚

  • 滚动更新
    • 逐步替换旧版本的 Pod,确保应用不中断。
  • 回滚
    • 回滚到之前的版本。
  • 示例
    kubectl set image deployment/web-app web=nginx:1.19
    kubectl rollout undo deployment/web-app
    

4. Kubernetes 的常用命令

(1) 查看资源

  • 查看 Pod:
    kubectl get pods
    
  • 查看 Deployment:
    kubectl get deployments
    

(2) 创建资源

  • 通过 YAML 文件创建:
    kubectl apply -f deployment.yaml
    

(3) 删除资源

  • 删除 Pod:
    kubectl delete pod <pod-name>
    

(4) 查看日志

  • 查看 Pod 日志:
    kubectl logs <pod-name>
    

Pod定义,和容器的关系

  • Pod 是 Kubernetes 中的最小部署单位,它封装了一个或多个容器,这些容器共享 存储、网络、生命周期
  • Pod 是对容器的抽象,它解决了单个容器无法满足的需求,比如 多个进程协作、共享存储、共享网络

可以简单理解为:

Pod 是一个“容器组”,里面可以有 1 个或多个容器,但这些容器是相互依赖的,需要协作完成任务。


多个容器如何在同一个 Pod 里协作?

在同一个 Pod 里的容器,可以通过以下 三种方式协作

1. 共享网络(Network)
  • Pod 里的所有容器共享同一个 IP 地址(Pod IP)
  • 容器之间可以用 localhost 直接通信
  • 适用于:一个主应用 + 辅助应用(如 Nginx + PHP)

示例

# 在 Pod 里,两个容器可以这样通信:
curl http://localhost:8080

不需要跨 Pod 访问,容器间直接使用 localhost 访问


2. 共享存储(Storage)
  • Pod 内的容器可以共享 Volume(存储卷),用于共享数据
  • 适用于:日志收集、数据缓存、共享配置等

示例

apiVersion: v1
kind: Pod
metadata:
  name: shared-volume-pod
spec:
  volumes:
    - name: shared-storage
      emptyDir: {}  # 共享存储
  containers:
    - name: app
      image: my-app
      volumeMounts:
        - mountPath: /data
          name: shared-storage
    - name: sidecar
      image: log-collector
      volumeMounts:
        - mountPath: /data
          name: shared-storage

两个容器(app 和 log-collector)共享 /data 目录,可以用于日志处理。


3. Sidecar 模式(辅助容器)
  • 在同一个 Pod 里运行一个 主容器 和一个 辅助容器(Sidecar)
  • Sidecar 负责 日志处理、监控、数据同步等任务
  • 适用于:日志收集、代理服务、自动更新等场景

示例:日志收集

apiVersion: v1
kind: Pod
metadata:
  name: sidecar-pod
spec:
  containers:
    - name: app
      image: my-app
    - name: log-agent
      image: fluentd

Fluentd(日志收集器)和业务容器一起运行,专门处理日志


总结

协作方式作用适用场景
共享网络容器之间可以用 localhost 直接通信主应用 + 代理(如 Nginx + PHP)
共享存储共享 Volume 数据日志收集、数据缓存
Sidecar 模式辅助主容器日志收集、自动更新

Pod 中多容器协作的实际示例

示例 1:Web 应用与日志收集

  • 场景
    • 一个 Web 应用需要将日志发送到集中式日志系统。
  • Pod 配置
    • 主容器:运行 Web 应用。
    • Sidecar 容器:运行日志收集工具(如 Fluentd)。
  • 协作方式
    • Web 应用容器将日志写入共享存储卷。
    • Sidecar 容器从共享存储卷读取日志并发送到日志系统。

示例 2:数据预处理与应用

  • 场景
    • 一个应用需要处理大量数据,但数据需要先进行预处理。
  • Pod 配置
    • Init 容器:运行数据预处理工具。
    • 主容器:运行应用。
  • 协作方式
    • Init 容器从远程存储下载数据并进行预处理。
    • 预处理完成后,主容器启动并使用处理后的数据。

示例 3:Web 应用与代理

  • 场景
    • 一个 Web 应用需要通过代理访问外部服务。
  • Pod 配置
    • 主容器:运行 Web 应用。
    • Sidecar 容器:运行代理(如 Envoy)。
  • 协作方式
    • Web 应用容器通过 localhost 访问代理容器。
    • 代理容器负责将请求转发到外部服务。

https://github.com/0voice

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/984851.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

报表控件stimulsoft操作:使用 Angular 应用程序的报告查看器组件

Stimulsoft Ultimate &#xff08;原Stimulsoft Reports.Ultimate&#xff09;是用于创建报表和仪表板的通用工具集。该产品包括用于WinForms、ASP.NET、.NET Core、JavaScript、WPF、PHP、Java和其他环境的完整工具集。无需比较产品功能&#xff0c;Stimulsoft Ultimate包含了…

【网络编程】WSAAsyncSelect 模型

十、基于I/O模型的网络开发 接着上次的博客继续分享&#xff1a;select模型 10.8 异步选择模型WSAAsyncSelect 10.8.1 基本概念 WSAAsyncSelect模型是Windows socket的一个异步I/O 模型&#xff0c;利用这个模型&#xff0c;应用程序 可在一个套接字上接收以Windows 消息为基…

从0开始的操作系统手搓教程43——实现一个简单的shell

目录 添加 read 系统调用&#xff0c;获取键盘输入 :sys_read putchar和clear 上班&#xff1a;实现一个简单的shell 测试上电 我们下面来实现一个简单的shell 添加 read 系统调用&#xff0c;获取键盘输入 :sys_read /* Read count bytes from the file pointed to by fi…

鸿蒙应用开发—数据持久化之SQLite

文章目录 SQLite简介创建数据库添加数据查询数据更新数据删除数据升级数据库使用事务参考 SQLite简介 SQLite是一个轻量级关系数据库&#xff0c;占用资源很少&#xff0c;只有几百KB的大小&#xff0c;无需服务器支撑&#xff0c;是一个零配置、事务性的SQL数据库引擎。 相对…

应急响应--流量分析

&#xff08;一&#xff09;Cobalt Strike流量特征分析 1.HTTP特征 源码特征&#xff1a; 在流量中&#xff0c;通过http协议的url路径&#xff0c;在checksum8解密算法计算后&#xff0c;32位的后门得到的结果是92&#xff0c;64位的后门得到的结果是93&#xff0c;该特征符…

初始化E9环境,安装Sqlserver数据库

title: 初始化E9环境,安装Sqlserver数据库 date: 2025-03-10 19:27:19 tags: E9SqlServer初始化E9环境,安装Sqlserver数据库 安装E9本地环境安装Sql server 数据库1、检查SQL Server服务是否开启2、检查SQL Server网络网络配置是否开启创建一个ecology数据库点击初始化数据库…

自然语言处理:无监督朴素贝叶斯模型

介绍 大家好&#xff0c;博主又来和大家分享自然语言处理领域的知识了&#xff0c;今天给大家介绍的是无监督朴素贝叶斯模型。 在自然语言处理这个充满挑战又极具魅力的领域&#xff0c;如何从海量的文本数据中挖掘有价值的信息&#xff0c;一直是研究者们不断探索的课题。无…

API调试工具的无解困境:白名单、动态IP与平台设计问题

引言 你是否曾经在开发中遇到过这样的尴尬情形&#xff1a;你打开了平台的API调试工具&#xff0c;准备一番操作&#xff0c;结果却发现根本无法连接到平台&#xff1f;别急&#xff0c;问题出在调试工具本身。今天我们要吐槽的就是那些神奇的开放平台API调试工具&#xff0c;…

VSCode 2025最新前端开发必备插件推荐汇总(提效指南)

&#x1f31f;前言: 如果你是一名前端开发工程师&#xff0c;合适的开发工具能大大提高工作效率。Visual Studio Code (VSCode) 凭借其轻量级、高扩展性的特点&#xff0c;已成为众多前端开发者在win系电脑的首选IDE。 名人说&#xff1a;博观而约取&#xff0c;厚积而薄发。—…

小程序事件系统 —— 33 事件传参 - data-*自定义数据

事件传参&#xff1a;在触发事件时&#xff0c;将一些数据作为参数传递给事件处理函数的过程&#xff0c;就是事件传参&#xff1b; 在微信小程序中&#xff0c;我们经常会在组件上添加一些自定义数据&#xff0c;然后在事件处理函数中获取这些自定义数据&#xff0c;从而完成…

初阶数据结构(C语言实现)——4.2队列

目录 2.队列2.1队列的概念及结构2.2队列的实现2.2.1 初始化队列2.2.2 销毁队列2.2.3 队尾入队列2.2.4 队头出队列2.2.5获取队列头部元素2.2.6 获取队列队尾元素2.2.7获取队列中有效元素个数2.2.8 检测队列是否为空&#xff0c;如果为空返回非零结果&#xff0c;如果非空返回0 3…

linux 命令 cat

cat 是 Linux 中用于查看、创建和合并文件的常用命令&#xff0c;全称 concatenate&#xff08;连接&#xff09;。其核心功能是将文件内容输出到终端或重定向到其他文件/命令中。以下是详细用法及场景示例&#xff1a; 基本语法 cat [选项] [文件1] [文件2] ... 选项…

TON基金会确认冠名赞助2025香港Web3嘉年华,并将于4月8日重磅呈现“TON生态日”

近日&#xff0c;由万向区块链实验室与HashKey Group联合推出的Web3年度盛典——2025香港Web3嘉年华正式宣布&#xff0c;TON基金会确认成为本届嘉年华的冠名赞助商&#xff0c;并将于4月8日在主会场特别举办“TON生态日”专题Side Event&#xff0c;集中展现TON生态的最新技术…

【Java代码审计 | 第七篇】文件上传漏洞成因及防范

未经许可&#xff0c;不得转载。 文章目录 文件上传漏洞漏洞成因未验证文件类型和扩展名未限制文件上传路径 防范验证文件类型和扩展名验证文件内容限制文件上传路径使用安全的文件上传库 标准代码 文件上传漏洞 文件上传漏洞是指攻击者通过上传恶意文件&#xff08;如可执行脚…

【无人机路径规划】基于麻雀搜索算法(SSA)的无人机路径规划(Matlab)

效果一览 代码获取私信博主基于麻雀搜索算法&#xff08;SSA&#xff09;的无人机路径规划&#xff08;Matlab&#xff09; 一、算法背景与核心思想 麻雀搜索算法&#xff08;Sparrow Search Algorithm, SSA&#xff09;是一种受麻雀群体觅食行为启发的元启发式算法&#xff0…

狮子座大数据分析(python爬虫版)

十二星座爱情性格 - 星座屋 首先找到一个星座网站&#xff0c;作为基础内容&#xff0c;来获取信息 网页爬取与信息提取 我们首先利用爬虫技术&#xff08;如 Python 中的 requests 与 BeautifulSoup 库&#xff09;获取页面内容。该页面&#xff08;xzw.com/astro/leo/&…

DeepSeek教我写词典爬虫获取单词的音标和拼写

Python在爬虫领域展现出了卓越的功能性&#xff0c;不仅能够高效地抓取目标数据&#xff0c;还能便捷地将数据存储至本地。在众多Python爬虫应用中&#xff0c;词典数据的爬取尤为常见。接下来&#xff0c;我们将以dict.cn为例&#xff0c;详细演示如何编写一个用于爬取词典数据…

AI智能导航站HTML5自适应源码帝国cms7.5模板

源码名称&#xff1a;AI导航站HTML5自适应源码帝国cms7.5模板 开发环境&#xff1a;帝国cms 7.5 安装环境&#xff1a;phpmysql var code "4d33ef8e-9e38-43b9-b37b-38f75944ecc9" 带软件采集&#xff0c;可以挂着自动采集发布&#xff0c;无需人工操作&#xff0…

【贪心算法】将数组和减半的最小操作数

1.题目解析 2208. 将数组和减半的最少操作次数 - 力扣&#xff08;LeetCode&#xff09; 2.讲解算法原理 使用当前数组中最大的数将它减半&#xff0c;&#xff0c;直到数组和减小到一半为止&#xff0c;从而快速达到目的 重点是找到最大数&#xff0c;可以采用大根堆快速达到…

Apache XTable:在数据湖仓一体中推进数据互作性

Apache XTable 通过以多种开放表格式提供对数据的访问&#xff0c;在增强互作性方面迈出了一大步。移动数据很困难&#xff0c;在过去&#xff0c;这意味着在为数据湖仓一体选择开放表格式时&#xff0c;您被锁定在该选择中。一个令人兴奋的项目当在数据堆栈的这一层引入互作性…