jk's notes
  • Pod 容器集

Pod 容器集

Pod 是包含 一个 或 多个 容器的 容器组 (容器的组织单位). 是 K8s 中创建和管理的最小单位.

Pod 的特点:

  • 最小调度单位 (原子性). K8s 直接管理 Pod, 而不是容器.
  • Pod 中的容器总是打包在一起管理: 部署在同一个节点, 一起调度.
  • Pod 可以理解为 "逻辑主机", Pod 内的容器共享网络, 存储, 配置声明等.
  • 每个 Pod 有一个 IP, Pod 内的容器共享 IP 与端口空间. 在一个 Pod 内部的容器, 可以使用 localhost 互相访问.

示例: 一个共享文件的 Pod. 该 Pod 中可以有两个容器, 一个提供 Web 服务, 一个边车容器 (sidercar), 用于更新容器内的文件数据, 而文件数据存储于卷中.

img

操作与管理 Pod

Pod 相关的命令:

kubectl run pod名称 --image=容器镜像名称:tag # 创建容器, 如果是一次性任务, 可以加上 --rm 选项, 关闭 pod 时会自动删除 pod
kubectl get pod # 查看容器 (Pod), 可带上 -owide 查看详细信息
kubectl logs -f pod名称 # 查看 pod 运行日志
kubectl describe pod pod名称 # 查看 pod 的详细信息

kubectl exec -it pod名称 -- 需要在Pod中执行的命令 # 进入 pod 中指向命令, 退出使用 exit

简单小结一下:

  • 什么是 Pod, 它是干什么的. Pod 中有什么.
  • 怎么创建 Pod, 查看 Pod
  • 怎么进入 Pod 内的容器中 (如果是多个容器呢???)
  • 怎么删除 Pod
  • 怎么查看 Pod 的描述信息, 怎么查看 Pod 的执行日志

部署与副本集

Deployment 与 ReplicaSet

ReplicaSet 副本集, 字面意思即由副本构成的集合. 即是 Pod 的集合.

Deployment 是对 Pod 与 ReplicaSet 的抽象.

它使得 Pod 可以具有: 多副本, 自愈, 扩缩容, 滚动升级等能力.

逻辑上:

  • Pod 运行容器: 通常一个主容器, 一个卷, 和一个边车容器(协调管理). 简单的情况一个 Pod 就是一个容器.
  • 多个 Pod 构成一个集合, 命名为副本集.
  • 副本集组织起来进行协调(控制运行, 例如容器数量, 保持运行使得系统资源占用率维持一定范围), 构成部署.

image-20230728142044980

创建一个部署

kubectl create deployment <部署名> --image=镜像名:tag --replicas=副本集数量

查看部署

kubectl get deploy # deployment 可简写为 deploy

image-20230728094346205

查看副本集 (deployment 不是直接管理 Pod, 而是管理 ReplocaSet)

kubectl get replicaset

image-20230728094548491

注意这里的名字:

  • 副本集的名字后缀是 7f4c9cc599
  • 而副本集下有 3 个 pod, 命名也使用该散列值作为中缀, 然后有三个后缀.
    • 这里分别是: gpzsf, 2jqbk, 9kzld.

image-20230728095506868

考虑删除一个 Pod

kubectl delete pod my-nginx-deploy-7f4c9cc599-gpzsf

image-20230728095951634

可以看到又会自动创建一个新的 Pod. 即自愈性.

Deploy 的缩放

使用命令:

kubectl scale deploy <dploy名> --replicas=<数量>

来手动调整副本集的数量. 可以使用 --watch 来观察副本集.

image-20230728103805982

它是动态调整的. 除了手动, 还有 kubectl autoscale 来自动缩放.

kubectl autoscale deploy <名字> --min=<数量> --max=<数量> --cpu-percent=<0-100CPU占用率>

查看与删除使用命令

kubectl get hpa
kubectl delete hoa <名字>

自动伸缩需要声明 Pod 资源限制, 同时使用 Metrics Server 服务 (K3s 默认已安装).

滚动更新

使用命令 kubectl set 来调整容器的镜像版本.

首先使用 kubectl get deploy --owide 查看一下版本

image-20230728112823256

这里容器名为 nginx, 镜像名为 nginx:1.22

操作:

  1. 开启一个新窗口, 使用 kubectl get replicaset --watch 来监视副本集状态
  2. 执行命令: kubectl set image deployment/部署名 容器名=镜像名

例如:

# 监视副本集 (replicaset 可简写为 rs)
kubectl get rs --watch

# 更新 
kubectl set image deploy/my-nginx-deploy nginx=nginx:1.23

image-20230728114405674

image-20230728114641086

版本回滚

使用命令:

kubectl rollout history deploy/部署名

来查看部署的历史版本号. 如果要查看详情, 可以使用 --revision=版本号 选项来查看

image-20230728125002384

回滚使用命令:

kubectl rollout undo deploy/部署名 --to-revision=版本号

image-20230728125130947

image-20230728125146873

Last Updated:
Contributors: jk