Pod 容器集
Pod 是包含 一个 或 多个 容器的 容器组 (容器的组织单位). 是 K8s 中创建和管理的最小单位.
Pod 的特点:
- 最小调度单位 (原子性).
K8s直接管理Pod, 而不是容器. Pod中的容器总是打包在一起管理: 部署在同一个节点, 一起调度.Pod可以理解为 "逻辑主机",Pod内的容器共享网络, 存储, 配置声明等.- 每个
Pod有一个IP,Pod内的容器共享IP与端口空间. 在一个Pod内部的容器, 可以使用localhost互相访问.
示例: 一个共享文件的 Pod. 该 Pod 中可以有两个容器, 一个提供 Web 服务, 一个边车容器 (sidercar), 用于更新容器内的文件数据, 而文件数据存储于卷中.
操作与管理 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构成一个集合, 命名为副本集. - 副本集组织起来进行协调(控制运行, 例如容器数量, 保持运行使得系统资源占用率维持一定范围), 构成部署.

创建一个部署
kubectl create deployment <部署名> --image=镜像名:tag --replicas=副本集数量
查看部署
kubectl get deploy # deployment 可简写为 deploy

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

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

考虑删除一个 Pod
kubectl delete pod my-nginx-deploy-7f4c9cc599-gpzsf

可以看到又会自动创建一个新的 Pod. 即自愈性.
Deploy 的缩放
使用命令:
kubectl scale deploy <dploy名> --replicas=<数量>
来手动调整副本集的数量. 可以使用 --watch 来观察副本集.

它是动态调整的. 除了手动, 还有 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查看一下版本

这里容器名为 nginx, 镜像名为 nginx:1.22
操作:
- 开启一个新窗口, 使用
kubectl get replicaset --watch来监视副本集状态 - 执行命令:
kubectl set image deployment/部署名 容器名=镜像名
例如:
# 监视副本集 (replicaset 可简写为 rs)
kubectl get rs --watch
# 更新
kubectl set image deploy/my-nginx-deploy nginx=nginx:1.23


版本回滚
使用命令:
kubectl rollout history deploy/部署名
来查看部署的历史版本号. 如果要查看详情, 可以使用 --revision=版本号 选项来查看

回滚使用命令:
kubectl rollout undo deploy/部署名 --to-revision=版本号

