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=版本号