1、Pod 简介:
(1) 概念:
Pod 是 Kubernetes 中创建和管理的,最小的可部署的计算单元。Pod中存储了一组(一个或多个)容器,以及怎样运行这些容器的声明,这些容器共享存储、网络和环境(Pod 中的容器不是隔离的,而是被统一调度的)。
Pod 中的容器通常被自动安排到集群中的同一物理机或虚拟机上,并可以一起进行调度。
(2) 如何使用 Pod:
① 运行单个容器的 Pod:"一个 Pod 一个容器" 模型,可以将 Pod 看作单个容器的包装器,并由 Kubernetes 直接管理 Pod。
② 运行多个协同工作的容器 的 Pod: 位于同一 Pod的容器形成单个内聚的服务单元,例如一个容器将文件从共享卷提供给公众, 另一个容器则刷新或更新这些文件。 Pod 将这些容器和存储资源打包为一个可管理的实体。
2、Pod 基本操作:
(1) 常用命令:
① 查看默认命名空间的 pod:
kubectl get pods / pod / po
● k8s集群创建后存在两个命名空间:default 和 kube-system
② 查看指定命名空间的 pod:
kubectl get pods / pod / po -n 命名空间名称
③ 查看所有命名空间的 pod:
kubectl get pods / pod / po -A
④ 查看默认命名空间下 pod 的详细信息:
kubectl get pods -o wide
⑤ 查看所有命名空间下 pod 的详细信息:
kubectl get pods -o wide -A
⑥ 实时监控 pod 的状态:
kubectl get pod -w
(2) 创建 Pod:
① 以命令方式创建:
pod:kubectl run nginx(pod名) --image=nginx:1.19
container:docker run --name nginx nginx:1.19
② 声明式创建:
把创建 pod 的信息放到配置文件中,一次编写可在任意文件上运行。
● 配置文件需要填写的信息:
apiVersion:指定api版本;
kind:指定配置文件所声明的类型;
metadata:指定pod的元数据,可以指定 pod 名和命名空间;
spec:描述容器的详细信息。
● 编写示例:
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:1.19
ports:
- containerPort: 80
● 运行配置文件:
kubectl create -f nginx-pod.yml
kubectl apply -f nginx-pod.yml
create 仅是 pod 不存在时创建,如果已存在则报错 ;apply 不存在创建,存在则更新配置(推荐使用 apply)。
③ 使用 IDEA 插件生成 pod 模版:
在 IDEA 中下载 k8s 插件:
自动生成 pod 模版:
(3) Pod 进阶命令:
① 删除 pod:
根据 pod 名:kubectl delete pod pod名称(kubectl delete pod nginx)
根据配置文件:kubectl delete -f pod.yml
② 进入 pod 中的容器:
kubectl exec -it pod名 -- bash (只进入 pod 中第一个容器)
kubectl exec -it pod名 -c 容器名 -- bash (进入 pod 中指定容器)
③ 查看 pod 日志:
kubectl logs -f pod名
kubect logs -f pod名 -c 容器名(查看 pod 中指定容器的日志)
④ 查看 pod 描述信息:
kubectl describe pod pod名
3、Pod 运行多个容器:
① 创建 pod:
在 IDEA 中远程连接master,编写好 yml 文件后再拖动文件上传到服务器对应的文件夹中
apiVersion: v1
kind: Pod
metadata:
name: mypod
labels:
app: mypod
spec:
containers:
- name: nginx
image: nginx:1.19
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
- name: redis
image: redis:5.0.10
imagePullPolicy: IfNotPresent
ports:
- containerPort: 6379
restartPolicy: Always
② 运行 pod:
kubectl apply -f mypod.yml
4、pod 的 labels(标签):
(1) 概念:
标签是附加到 Kubernetes 对象(例如 Pod)上的键值对,相当于起一个别名,有了别名可以对 pod 进行过滤和筛选。每个对象都可以定义一组键(key)/值(value)标签,但是每个键(key)对于给定对象必须是唯一的。
(2) 语法:
(3) 标签基本操作:
① 查看标签:
kubectl get pods --show-labels
② 添加标签键值对:
kubectl label pod pod名称 标签键值对
③ 覆盖标签:
kubectl label --overwrite pod mypod env=test
④ 删除标签 (标签键-):
kubectl label pod mypod env-
5、pod 的生命周期:
(1) 概念:
Pod 遵循预定义的生命周期,起始于 Pending 阶段,如果 pod 中至少其中有一个容器正常启动,进入 Running 阶段,之后 Pod 中如果没有容器启动失败则进入 Succeeded 阶段,否则进入 Failed 阶段。Pod 在其生命周期中只会被调度一次(要么是 Succeeded,要么是 Failed)。
(2) pod 阶段:
Pod 的阶段(Phase)是 Pod 在其生命周期中所处位置的简单宏观概述。
当一个 Pod 被删除时,执行一些 kubectl 命令会展示这个 Pod 的状态为 Terminating(终止)。Terminating 并不是 Pod 阶段之一,而是 Pod 终止的期限,默认为 30 秒。