K8S实战(三)| Pod 的本质

本文深入探讨了Kubernetes(K8S)中的Pod,揭示了Pod作为最小执行单元的本质,包括其封装的容器、共享资源(如网络和存储)、特点、Pod模板、镜像拉取策略、常用参数以及Init容器的使用。Pod提供了容器间的共享网络和存储,允许多容器通过localhost通信,并通过Deployment进行管理,实现故障恢复。
摘要由CSDN通过智能技术生成

前言

上一节发布了一个容器到 K8S 中,但其实实际操作的是 Pod ,那么为什么是 Pod,而不是容器。

更新历史

Pod 的本质

Pod 包装了一个或多个容器。
Pod 是 K8S 的最小执行单元。
Pod 是 K8S 中的一个进程。
Pod 可包装 Docker,也支持包装其他类型容器。
Pod 包含封装的容器、存储资源、网络资源、以及指导容器如何运行的配置。

可以把容器理解为一个无挂钩的光秃秃的集装箱,K8S 这艘大船无法直接挂载它,通过给集装箱(容器)加装挂钩(IP地址)等形成一个 Pod,方便 K8S 来操作。

也可以把 Pod 理解为传统的虚拟机,而容器是传统虚拟机中运行的程序,只不过虚拟机是一个实体,而 Pod 是一个逻辑概念。

K8S 通过编排 Pod 来调度容器,而不是直接操作容器,K8S 无法直接操纵容器。

Pod 中的共享资源

Pod 为其中运行的多容器提供共享的网络、存储资源、命名空间。

网络

Pod 具有唯一 IP 地址,Pod 中的多个容器共享一个 IP 地址和网络端口等网络资源
Pod 中多容器可使用 localhost 通信
Pod 中容器和外部通信时候,多容器需要协调网络端口
Pod 中的容器获取的系统主机名与为 Pod 配置的 name 相同

存储

Pod 可指定一组存储卷
Pod 中多容器均可以访问该存储卷,以便互相共享数据
Pod 中的共享卷可以持久保存,防止容器重启丢失数据

Pod 的特点

如果使用 kind: Pod 的 yaml 文件来创建 Pod,当前节点服务器出现问题后,Pod 不能被自动调度到其他可用服务器。

一般使用 kind: Deployment 的 yaml 来创建 Pod。

Deployment 是一种控制器,可以用来创建、管理 Pod。如创建多副本 Pod,滚动更新 Pod。

当 Pod 所在节点出现问题,Deployment 控制器可以在集群中其他节点启动新 Pod。

Pod 模板

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox
    command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600']

镜像拉取策略

不具体指定的情况下,imagePullPolicy 是 Always,即 kubelet 会尝试从指定的仓库拉取每个镜像。
如果容器属性 imagePullPolicy 设置为 IfNotPresent , 则会优先使用本地镜像。
如果容器属性 imagePullPolicy 设置为 IfNotPresent  Never, 则会一定使用本地镜像。

apiVersion: v1
kind: Pod
metadata:
  name: private-image-test-1
spec:
  containers:
    - name: uses-private-image
      im
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值