目录
Pod基本概念
简介
Pod的两种模式
pod的内部结构
Pod生命周期
编辑使用Pod
创建一个pod
Pod管理常用命令
运行第二个pod
Pod基本概念
简介
Pod是Kubernetes管理的最小基础单元。
一个Pod中封装了:
一个或多个紧耦合的应用容器
存储资源
独立的IP
容器运行的选项
Pod的两种模式
只包含一个应用容器的pod
“一个pod一个容器”的模式是在Kubernetes中主流的使用场景。
在这种场景中,pod可以被看做是一个“包装纸”包着的容器。Kubernetes不能直接管理容器,而是需要通过管理pod来管理容器
包含多个应用的pod
仅当两种容器紧耦合,且需要共享相同的资源时使用这一种模式。
这些在一个pod内的容器形成一个统一的服务单元。例如一个容器从共享卷提供文件,而另一个容器刷新或更新资源。Pod将这些容器和存储资源作为单个可管理的实体包装在一起。
pod的内部结构
一个pod中会分配一个pause容器,这也被称为根容器。
Pause容器的状态代表整个pod的状态
Pod中多个容器共享pause容器的ip和存储,容器间可以通过localhost互访。
Pod生命周期
Pod一旦被创建,会被master调度到某个具体的node上进行绑定。Pod会呈现出不同的状态。
使用Pod
创建一个pod
#创建一个yaml文件
kind: Pod
apiVersion: v1
metadata:
name: mypod
spec:
containers:
- name: mypod
image: busybox
args:
- /bin/sh
- -c
- sleep 30000
#使用create命令由该文件创建pod
kubectl create -f mypod.yaml
#使用get命令查看
root@k8s-master]# kubectl get pod
NAME READY STATUS RESTARTS AGE
mypod 1/1 Running 0 39m
Pod管理常用命令
#查看pod命令时,通过添加“-o=wide”参数获取更多信息
[root@k8s-master]# kubectl get pod -o=wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mypod 1/1 Running 0 40m 192.169.2.42 k8s-node2
#使用describe命令,可以看到pod的完整信息
kubectl describe pod mypod
#删除Pod,使用delete命令
kubectl delete pod mypod
#进入mypod的命令行
kubectl exec -it mypod /bin/sh
#在pod中可能存在多个容器,加入“--container 容器名“参数指定进入容器。
kubectl exec -it mypod --container mypod /bin/sh
#在之前使用命令查看pod状态时,可以检索到Pod所在的位置。
[root@k8s-master]# kubectl get pod -o=wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mypod 1/1 Running 0 40m 192.169.2.42 k8s-node2
#这意味着这个pod被绑定到k8s-node2这台主机上运行,我们可以登录这台主机,通过docker命令查看创建了哪些容器。
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS NAMES
3ad16a2860dc busybox "/bin/sh -c 'sleep 3…" 2 hours ago Up 2 hours k8s_mypod_mypod_default……
29d082178153 k8s.gcr.io/pause:3.1 "/pause" 2 hours ago Up 2 hours k8s_POD_mypod_default……
Busybox 这个容器是我们在创建pod时通过yaml文件定义的容器。
Pause是kubernetes默认会为pod拉起的容器
运行第二个pod
#创建一个yaml文件
kind: Pod
apiVersion: v1
metadata:
name: mypod
spec:
containers:
- name: mypod
image: busybox
args:
- /bin/sh
- -c
- sleep 30000
#使用create命令由该文件创建pod
kubectl create -f mypod.yaml
#使用get命令查看
root@k8s-master]# kubectl get pod
NAME READY STATUS RESTARTS AGE
mypod 1/1 Running 0 39m
Pod管理常用命令
#查看pod命令时,通过添加“-o=wide”参数获取更多信息
[root@k8s-master]# kubectl get pod -o=wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mypod 1/1 Running 0 40m 192.169.2.42 k8s-node2
#使用describe命令,可以看到pod的完整信息
kubectl describe pod mypod
#删除Pod,使用delete命令
kubectl delete pod mypod
#进入mypod的命令行
kubectl exec -it mypod /bin/sh
#在pod中可能存在多个容器,加入“--container 容器名“参数指定进入容器。
kubectl exec -it mypod --container mypod /bin/sh
#在之前使用命令查看pod状态时,可以检索到Pod所在的位置。
[root@k8s-master]# kubectl get pod -o=wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mypod 1/1 Running 0 40m 192.169.2.42 k8s-node2
#这意味着这个pod被绑定到k8s-node2这台主机上运行,我们可以登录这台主机,通过docker命令查看创建了哪些容器。
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS NAMES
3ad16a2860dc busybox "/bin/sh -c 'sleep 3…" 2 hours ago Up 2 hours k8s_mypod_mypod_default……
29d082178153 k8s.gcr.io/pause:3.1 "/pause" 2 hours ago Up 2 hours k8s_POD_mypod_default……
Busybox 这个容器是我们在创建pod时通过yaml文件定义的容器。
Pause是kubernetes默认会为pod拉起的容器
运行第二个pod
使用如下的helloworld.yaml文件创建第二个pod
#Yaml
kind: Pod
apiVersion: v1
metadata:
name: helloworld
spec:
restartPolicy: Never
containers:
- name: helloworld
image: hello-world
#
kubectl get pods
NAME READY STATUS RESTARTS AGE
helloworld 0/1 Completed 0 4s
mypod 1/1 Running 0 160m



