目录
1. Pod 是 Kubernetes 管理的最小基础单元
2. 一个Pod中封装了:
· 一个或多个紧耦合的应用容器
· 存储资源
· 独立的IP
· 容器运行的选项
· “ 一个pod一个容器 ” 的模式是在 Kubernetes 中主流的使用场景
· 在这种场景中,pod 可以被看做是一个 “包着的容器”。
Kubernetes 不能直接管理容器,而是需要通过管理Pod来管理容器
· 仅当两种容器紧耦合,且需要共享相同的资源时使用这一种模式
· 这些在一个pod 内的容器形成一个统一的服务单元。
例如一个容器从共享卷提供文件,而另一个容器刷新或更新资源。
Pod将这些容器和存储资源作为单个可管理的实体包装在一起
一个pod 中会分配一个 pause 容器,这也被称为根容器
· Pause(根容器)容器的状态代表整个 pod 的状态
· Pod 中多个容器共享 pause 容器的 ip 和存储,容器间可以通过 localhost 互访
Pod一旦被创建,会被 master 调度到某个具体的 node 上进行绑定;
Pod会呈现出不同的状态
取值 描述 Pending
(悬决)Pod 已被 Kubernetes 系统接受,但有一个或者多个容器尚未创建亦未运行。此阶段包括等待 Pod 被调度的时间和通过网络下载镜像的时间 Running
(运行中)Pod 已经绑定到了某个节点,Pod 中所有的容器都已被创建。至少有一个容器仍在运行,或者正处于启动或重启状态 Succeeded
(成功)Pod 中的所有容器都已成功终止,并且不会再重启
Failed
(失败)Pod 中的所有容器都已终止,并且至少有一个容器是因为失败终止。也就是说,容器以非 0 状态退出或者被系统终止 Unknown
(未知)因为某些原因无法取得 Pod 的状态。这种情况通常是因为与 Pod 所在主机通信失败
1. 创建一个yaml文件
$ vim mypod.yaml apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: mypod image: nginx:1.14.2 ports: - containerPort: 802. 使用apply 命令由该文件创建pod
$ kubectl apply -f mypod.yaml
3.使用get 命令查看
$ kubectl get pods NAME READY STATUS RESTARTS AGE mypod 1/1 Running 0 7s
1. 查看pod命令时,通过添加 “ -o=wide ” 参数获取更多信息
$ kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES mypod 1/1 Running 0 6m53s 172.16.194.71 k8s-worker12. 使用 describe 命令,可以看到 pod 的完整信息
$ kubectl describe pods mypod
3. 删除Pod,使用 delete 命令
$ kubectl delete pods mypod
4. 进入 mypod 的命令行
$ kubectl exec -it mypod -- /bin/sh
· exec 命令用于在容器中执行命令
· -it 参数使得用户可以直接进入容器进行操作
5. 在pod 中可能存在多个容器,加入 “ --container 容器名 ” 参数指定进入容器
$ kubectl exec -it mypod --container mypod -- /bin/sh
6. 如果希望退出当前所在容器,可以输入 exit 回车退出(或者Ctrl + d)
1. 在之前使用命令查看 pod 状态时,可以检索到 Pod 所在的位置
$ kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES mypod 1/1 Running 0 6m53s 172.16.194.71 k8s-worker12. 意味着这个 pod 被绑定到 k8s-worker1 这台主机上运行,我们可以登录这台主机,
通过 docker 命令查看创建了哪些容器
kiosk@k8s-worker1:~$ sudo docker ps
· Nginx 这个容器是我们在创建 pod 时通过yaml 文件定义的容器
· Pause 是 kubernetes 默认会为 pod 拉起的容器
1. 使用yaml 文件创建第二个pod
$ vim mypod.yaml apiVersion: v1 kind: Pod metadata: name: hello spec: restartPolicy: Never containers: - name: hello image: hello-world $ kubectl apply -f hello.yml2. 查看 pod 状态会发现 “hello”和“mypod”这两个处于不同的状态
$ kubectl get pods NAME READY STATUS RESTARTS AGE hello 0/1 Completed 0 26s mypod 1/1 Running 0 36m第二个服务Pod因为没有持续运行的服务,所以状态为Completed