Pod的基本介绍
pod的特征:
- Pod类似虚拟机,容器相当于虚拟机中的进程,一个Pod可以运行多个容器,只需声明多个image即可实现。
- 容器不仅仅是拥有实际功能的主容器,还有类似init初始化的容器。初始化容器就是配置好主容器的配置。
- (网络)Pod是有IP地址的,加入pod不是共享物理机ip,由网络插件(calico、flannel、weave)划分的ip,每个pod都被分配唯一的IP地址。
- (存储)创建Pod的试试可以指定挂载的存储卷,POD中的所有容器都可以访问共享卷volume,允许这些容器共享卷数据,Pod只要挂载持久化数据卷,pod重启之后数据还是会存在的。
pod和容器的区别
- pod是由一组紧耦合的容器组成的容器组,目前最流行的就是docker、containerd、podman容器,pod就可以作为1或者多个容器的载体。
- pod中的所用容器会被一致调度、统计点部署,并且在一个“共享环境”中运行,这里就的"共享环境包括一下几点":
- 所有容器共享一个IP地址和端口空间,意味着容器之间可以通过localhost高效访问,不能有端口冲突。
- 允许容器之间共享存储卷,通过文件系统交互信息。
- 有些容器需要紧密联系,需要一起工作。pod提供了比容器更高层次的抽象,pod中所有的容器使用同一个网络的namespace,即相同的IP地址和Port空间。他们可以直接用localhost通信,同样的,这些容器可以共享存储,当K8sVolume到pod上,本质上是将volume挂载到pod中的每个容器里。
pod的实际应用:
- 代码的自动发行和更新
- 收集业务日志
Pod工作方式
pod的创建:yaml文件创建 ;kubectl run 命令行创建
1.自主式pod
# 编写yaml文件
# 导入镜像
# k8s 1.25版本以后,使用containerd的指令集
ctr -n=k8s.io images import tomcat.tar.gz
# k8s 1.25版本以前,使用docker的指令集
docker load -i tomcat.tar.gz
# 应用
kubectl apply -f pod-tomcat.yaml
# 检查
kubectl get pods -o wide
kubectl get pods -l app=tomcat
# 删除
kubectl delete pods xxx
2.控制器管理pod
常见的管理pod的控制器: Replicaset、Deployment、Job、CronJob、Daemonset、Statefulset。
控制器管理的pod可以确保pod始终维持在指定的副本数运行。
3.命令行创建pod
kubectl run tomcat --image=xxx/xxx:v1 --image-pull-policy='IfNotPresent' --port=8080