pod

107 阅读4分钟

简介

Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元..

Pod(就像在鲸鱼荚或者豌豆荚中)是一组(一个或多个) 容器; 这些容器共享存储、网络、以及怎样运行这些容器的声明。 Pod 中的内容总是并置(colocated)的并且一同调度,在共享的上下文中运行。 Pod 所建模的是特定于应用的 “逻辑主机”,其中包含一个或多个应用容器, 这些容器相对紧密地耦合在一起。 在非云环境中,在相同的物理机或虚拟机上运行的应用类似于在同一逻辑主机上运行的云应用

参考:pod

pod 的基本使用

1、基本命令

# 创建一个pod kubectl run pod名字 --image=nginx
kubectl run my-nginx --image=nginx

#查看pod列表
kubectl get pod 
kubectl get pod -A 
kubectl get pod -n kube-system
kubectl get pod -o wide

# 查看具体的pod 
kubectl describe pod my-nginx
# 删除某个pod
kubectl delete pod my-nginx

2、通过yaml文件创建一个pod

simple-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80

基本操作

#创建运行
kubectl apply -f simple-pod.yaml
#查看pod运行日志 kubectl logs pod名字
kubectl logs nginx
#进入pod内部
kubectl exec -it nginx -- /bin/bash

#内部调用
kubectl get pod -owide
# curl pod的IP
curl 10.233.108.17 

3、创建多容器pod

multi-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: myapp
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
  - name: tomcat
    image: tomcat:8.5.68

验证

#tomcat
curl 10.233.108.18:8080 
#nginx
curl 10.233.108.18:80

#进入容器内部
kubectl exec myapp -c tomcat -it  -- /bin/bash
kubectl exec myapp -c nginx -it  -- /bin/bash

# 查看日志
kubectl logs myapp -c nginx 
kubectl logs myapp -c tomcat

pod的生命周期

Kubernetes Pods 遵循预定义的生命周期 例如,当在你的集群中运行了某个 Pod,但是 Pod 所在的 节点 出现致命错误时, 所有该节点上的 Pods 的状态都会变成失败。Kubernetes 将这类失败视为最终状态: 即使该节点后来恢复正常运行,你也需要创建新的 Pod 以恢复应用。

Pod 遵循一个预定义的生命周期,起始于 Pending 阶段,如果至少 其中有一个主要容器正常启动,则进入 Running,之后取决于 Pod 中是否有容器以 失败状态结束而进入 Succeeded 或者 Failed 阶段..

管理 pod

通常不需要直接管理每个pod,而是通过 工作负载资源来管理一组pod.

Kubernetes 提供若干种内置的工作负载资源:

  • Deployment 和 ReplicaSet (替换原来的资源 ReplicationController)。 Deployment 很适合用来管理你的集群上的无状态应用,Deployment 中的所有 Pod 都是相互等价的,并且在需要的时候被替换。

  • StatefulSet 让你能够运行一个或者多个以某种方式跟踪应用状态的 Pods。 例如,如果你的负载会将数据作持久存储,你可以运行一个 StatefulSet,将每个 Pod 与某个 PersistentVolume 对应起来。你在 StatefulSet 中各个 Pod 内运行的代码可以将数据复制到同一 StatefulSet 中的其它 Pod 中以提高整体的服务可靠性。

  • DaemonSet 定义提供节点本地支撑设施的 Pods。这些 Pods 可能对于你的集群的运维是 非常重要的,例如作为网络链接的辅助工具或者作为网络 插件 的一部分等等。每次你向集群中添加一个新节点时,如果该节点与某 DaemonSet 的规约匹配,则控制面会为该 DaemonSet 调度一个 Pod 到该新节点上运行。

  • Job 和 CronJob。 定义一些一直运行到结束并停止的任务。Job 用来表达的是一次性的任务,而 CronJob 会根据其时间规划反复运行。

pod 存储

一个 Pod 可以设置一组共享的存储。 Pod 中的所有容器都可以访问该共享卷,从而允许这些容器共享数据。 卷还允许 Pod 中的持久数据保留下来,即使其中的容器需要重新启动

pod 联网

每个 Pod 都在每个地址族中获得一个唯一的 IP 地址。 Pod 中的每个容器共享网络名字空间,包括 IP 地址和网络端口。 Pod 内的容器可以使用 localhost 互相通信。 当 Pod 中的容器与 Pod 之外的实体通信时,它们必须协调如何使用共享的网络资源(例如端口)。 在同一个 Pod 内,所有容器共享一个 IP 地址和端口空间,并且可以通过 localhost 发现对方。