pod基本概念
- pod是kubernetes里的最小调度单位,所以我们直接创建的是pod,而不是容器,pod里包含容器,所以创建pod也需要镜像。
- Kubernetes中,Pod包含一个或多个相关的容器,是容器的一种延申扩展,一个Pod也是一个隔离体,而Pod内部包含的一组Docker容器又是共享的(包括PID、Network、IPC、UTS等)
- 网络命名空间(NET namespace)。容器间共享网络命名空间,并使用同一个IP地址,通过localhost互相通信。不同Pod之间可以通过IP地址访问。
- 同一个Pod内的应用容器能看到对方容器进程(PID),同一个Pod内的容器能使用System V IPC或POSIX消息队列进行通信,同一个Pod内的应用容器共享主机名(UTS)等。
- 存储卷(volume)。Pod内的所有容器间共享存储卷,Volume还用于Pod中数据持久化,以防止容器重启导致数据丢失。
pod生命周期
- pod被分配到一个node上之后,直到被删除前都不会离开这个node。一旦某个pod失败,Kubernetes会将其清理,然后Replication Controller会在在他机器或本机重建pod。重建后,pod的ID会发生变化,这是一个新pod。
- pod的生命周期简述为:首先pod被创建,紧接着pod被调度到node上进行部署运行。一旦被分配到node上就不会离开这个node,直到被删除,即生命周期结束。
- pod的生命周期被定义为以下几个相位
- Pending:pod已经被创建,但一个或多个容器还未被创建,这包括pod调度阶段以及镜像的下载过程。
- Running:pod已被调度到node,所有容器已经创建,并且至少有一个容器在运行或正在重启。
- Succeeded:pod中所有容器正常退出。
- Failed:pod中所有容器退出,至少有一个容器是一次退出的。
- Pod状体没有获得。这种情况发生在和Node通信失败的情况下。
pod基本操作
- 查看pod
# 查看有多少pod
kubectl get pod
# 查看kube-system命名空间里的pod
kubectl get pod -n kube-system
# 查看所有命名空间里的pod
kubectl get pod --all-namespaces
# 或
kubectl get pod -A
- 创建pod(可带诸多参数,运行kubectl run –h查看更多即可)
kubectl run 名字 --image=镜像 --labels=标签=值 --env="变量名=值" --port=端口号 --image-pull-policy=镜像下载策略
kubectl run pod1 --image=nginx
kubectl run pod2 --image=nginx --port=80
- 集群内每一个pod都会获得一个地址(pod地址是相对临时的,service地址才是相对稳定的)。查看pod运行在哪个节点上
kubectl get pod -o wide
- 删除pod,增加参–force可加快删除速度
kubectl delete pod pod1
- 在pod里执行命令
kubectl exec [POD] -- [COMMAND]
kubectl exec pod2 -- ls /usr/share/nginx/html
- 物理机和pod互拷文件
kubectl cp /path1/file1 pod:/path2/
kubectl cp pod:/path2/file2 /path1/file2
kubectl cp pod:/path2/ /path1/
- 进入pod里并获取bash,如果一个pod有多个容器默认进入的是第一个容器,想进入指定容器用-c指定容器名
kubectl exec -it 名字 -- 命令
kubectl exec -it pod2 -- bash
exit
可见文件互传成功!
- 查看pod里的输出,如果一个pod有多个容器,需要使用-c指定查看哪个容器的输出
kubectl logs pod2
镜像下载策略
- Always:每次都下载镜像(默认值)。
- Never:只使用本地镜像,如本地不存在镜像则报错。
- IfNotPresent:只有当本地没有的时候才下载镜像。
kubectl run pod1 --image=nginx --image-pull-policy=IfNotPresent