在 K8S 中, pod 是一个非常关键的存在,我们一起来看看 pod 具体是个什么?
pod 是个什么呢?pod 是 K8S中的一个核心概念
每一个 pod 都会有一个特殊的根容器,叫做 pause 容器,pause 容器对应的镜像也是属于 K8S 的一部分的
pod 里面可不仅仅只有 pause 容器,还可以有其他多个容器
之前文章我们稍微提到过 pod,每一个 pod ,都是一个具体应用的实例,pod 有自己独自的 IP,主机名,进程等等
一个 pod 里面可以有多个容器,多个容器彼此共享网络和存储资源
我们都是通过 pod 中的 pause 容器 来管理其他容器的, 因为 pause 容器会存储所有的容器状态
pod 存在于节点中,不同节点的 pod 相互通信,是通过二层网络通信的
pod 自身还分成普通的 pod,和静态的 pod
在 K8S 中定义一个 pod 也是比较简单的,就是写一个 yaml 文件,只不过我们刚开始需要多加尝试和练习
yaml 文件大体是这样的,纯手写 , 下面的配置,我把不太容易理解的或者说是容易误解的名词解释一下,其他的自行看英文即可理解
apiVersion: v1 // 版本号
kind: Pod // 类型
metadata:
name: pod name
namespace: pod namespace
labels:
- name: pod label
annotations:
- name: pod annotation // 自定义注释列表
spec: // pod 中容器的详细定义
container:
- name: container name
image: container image
imagesPullPolicy: [Always|Never|IfNotPresent] // 镜像拉取策略
command: command list
agrs: app start params
workingDir: work dir
volumeMounts:
- name: volume name
mountPath: volume absolutely path
readonly: boolean
ports:
- name: ports list name
containerPort: 8888
hostPort: 9999
protocol: TCP // 可以是 TCP 和 UDP
env:
- name: env name
value: string
resources:
limits:
cpu: string
memory: string
requeste:
cpu: string
memory: string
livenessProbe: // 健康检查设置
exec:
command: [string]
httpGet: // 通过 httpGet 方式检查
path: string
port: string
host: string
scheme: string
httpHeaders:
- name: httpHeaders name
value: string
tcpSocket: // 通过 tcpSocket 方式检查
port: 80
initialDelaySeconds: 0 // 首次检查时间
timeoutSeconds: 0 // 超时检查时间
periodSeconds: 0 // 检查间隔时间
successTreshold: 0
failuerTreshold: 0
securityContext: // 安全配置
privileged: false
restartPolicy: [Always|Never|OnFailure]
nodeSelector: object
imagePullSecrets:
- name: string
hostNetwork: false // 是否使用主机网络模式?
volumes: // 存储卷
- name: volumes list name
emptyDir: {}
hostPath: // pod 所在主机的目录,用于挂载
path: string
secret: // secret 类型 存储卷
secretName: secret name
item:
- key: specific key
path: key path
configMap: // configmap 类型存储卷
name: string
items:
- key: specific key
path: string
看了上面的这个 yaml ,起初可能会觉得有点多,一下子记不住, xdm ,没有让你记住,咱们只需要知道 pod 的 yaml 是长 这个样子,里面都有哪些用法即可
在 K8S 中对 pod 中的容器运行也是有要求的
我们分享创建的pod,可以是里面放 1 个容器,也可以是放多个容器的,根据我们需要去处理即可
例如我们 1 个 pod 里面放 1 个 mongdb 的容器,可以这样来写
例如我们 1 个 pod 里面放 1 个 mongodb 和 1 个 redis 容器,可以这样来写
image-20211124224424388
kubectl create -f yaml文件
例如这样的
、
查看所有命名空间下面的 pod
查看 pod 的更多信息
查看 pod 的详情
kubectl delete pod --all
删除所有的 pod