在 K8S 中, pod 是一个非常关键的存在,我们一起来看看 pod 具体是个什么?
pod 是个啥?
pod 是个什么呢?pod 是 K8S中的一个核心概念
每一个 pod 都会有一个特殊的根容器,叫做 pause 容器,pause 容器对应的镜像也是属于 K8S 的一部分的
pod 里面可不仅仅只有 pause 容器,还可以有其他多个容器
之前文章我们稍微提到过 pod,每一个 pod ,都是一个具体应用的实例,pod 有自己独自的 IP,主机名,进程等等
- pod 与 容器是 1 对多的关系
一个 pod 里面可以有多个容器,多个容器彼此共享网络和存储资源
我们都是通过 pod 中的 pause 容器 来管理其他容器的, 因为 pause 容器会存储所有的容器状态
- pod 和节点的关系
pod 存在于节点中,不同节点的 pod 相互通信,是通过二层网络通信的
- 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 是长 这个样子,里面都有哪些用法即可
pod 基本用法使用示例
在 K8S 中对 pod 中的容器运行也是有要求的
- 容器的主程序是在前台运行,而不是后台,因此,应用需要改造成前台运行的方式
- 若 pod 中包含的容器是一个后台执行程序,那么执行完命令之后,pod 就会被销毁
- 若 pod 是一个 rc ,rc 就是 replicationController ,那么 pod 就会处于一个 创建,销毁的循环中 需注意
我们分享创建的pod,可以是里面放 1 个容器,也可以是放多个容器的,根据我们需要去处理即可
1 个 pod 放 1 个容器
例如我们 1 个 pod 里面放 1 个 mongdb 的容器,可以这样来写
1 个 pod 放 多个 容器
例如我们 1 个 pod 里面放 1 个 mongodb 和 1 个 redis 容器,可以这样来写
如何操作 pod
根据已有 yaml 创建 pod
kubectl create -f yaml文件
查看 pod 和 查看 pod 详情
例如这样的
- kubectl get pod -A
查看所有命名空间下面的 pod
- kubectl get pod pod名字
- Kubectl get pod pod名字 -o wide
查看 pod 的更多信息
- kubectl describe pod pod名字
查看 pod 的详情
删除 pod
- kubectl delete pod pod名字
- kubectl delete pod pod名字 -n 命名空间
kubectl delete pod --all
删除所有的 pod
今天就到这里,学习所得,若有偏差,还请斧正
欢迎点赞,关注,收藏
朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力
好了,本次就到这里
技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。
我是阿兵云原生,欢迎点赞关注收藏,下次见~
更多的可以查看 零声每晚八点直播:https://ke.qq.com/course/417774