欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > 【Kubernets】Kubernetes 的基础知识,Pod是什么? 和容器的关系?多个容器如何在同一个 Pod 里协作?

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

2025/3/12 7:08:04 来源:https://blog.csdn.net/m0_74282926/article/details/146165964  浏览:    关键词:【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: 3template:spec:containers:- name: webimage: nginx
    

(3) Service

  • 定义:用于定义如何访问 Pod。
  • 作用
    • 提供稳定的 IP 和 DNS 名称。
    • 实现负载均衡和服务发现。
  • 类型
    • ClusterIP:集群内部访问。
    • NodePort:通过节点端口访问。
    • LoadBalancer:通过云提供商的负载均衡器访问。
  • 示例
    apiVersion: v1
    kind: Service
    metadata:name: web-service
    spec:selector:app: webports:- protocol: TCPport: 80targetPort: 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/v1kind: Deploymentname: web-appminReplicas: 1maxReplicas: 10metrics:- type: Resourceresource:name: cputarget:type: UtilizationaverageUtilization: 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-storageemptyDir: {}  # 共享存储containers:- name: appimage: my-appvolumeMounts:- mountPath: /dataname: shared-storage- name: sidecarimage: log-collectorvolumeMounts:- mountPath: /dataname: shared-storage

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


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

示例:日志收集

apiVersion: v1
kind: Pod
metadata:name: sidecar-pod
spec:containers:- name: appimage: my-app- name: log-agentimage: 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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词