k8s-Pod

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 命名空间名称

k8s-Pod_第1张图片

③ 查看所有命名空间的 pod:

kubectl get pods / pod / po -A

k8s-Pod_第2张图片

④ 查看默认命名空间下 pod 的详细信息:

kubectl get pods -o wide

⑤ 查看所有命名空间下 pod 的详细信息:

kubectl get pods -o wide -A

k8s-Pod_第3张图片

⑥ 实时监控 pod 的状态:

kubectl get pod -w

k8s-Pod_第4张图片

(2) 创建 Pod:

① 以命令方式创建:

pod:kubectl run nginx(pod名) --image=nginx:1.19

container:docker run --name nginx nginx:1.19

k8s-Pod_第5张图片

② 声明式创建:

把创建 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)。

k8s-Pod_第6张图片

③ 使用 IDEA 插件生成 pod 模版:

在 IDEA 中下载 k8s 插件:

k8s-Pod_第7张图片

k8s-Pod_第8张图片

自动生成 pod 模版:

k8s-Pod_第9张图片

(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 中指定容器的日志)

k8s-Pod_第10张图片

④ 查看 pod 描述信息:

kubectl describe pod pod名

3、Pod 运行多个容器:

① 创建 pod:

在 IDEA 中远程连接master,编写好 yml 文件后再拖动文件上传到服务器对应的文件夹中

k8s-Pod_第11张图片

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) 语法:

k8s-Pod_第12张图片

(3) 标签基本操作:

① 查看标签:

kubectl get pods --show-labels

② 添加标签键值对:

kubectl label pod pod名称 标签键值对

k8s-Pod_第13张图片

③ 覆盖标签:

kubectl label --overwrite pod mypod env=test

④ 删除标签 (标签键-):

kubectl label pod mypod env-

k8s-Pod_第14张图片

5、pod 的生命周期:

(1) 概念:

Pod 遵循预定义的生命周期,起始于 Pending 阶段,如果 pod 中至少其中有一个容器正常启动,进入 Running 阶段,之后 Pod 中如果没有容器启动失败则进入 Succeeded 阶段,否则进入 Failed 阶段。Pod 在其生命周期中只会被调度一次(要么是 Succeeded,要么是 Failed)。

(2) pod 阶段:

Pod 的阶段(Phase)是 Pod 在其生命周期中所处位置的简单宏观概述。

k8s-Pod_第15张图片

当一个 Pod 被删除时,执行一些 kubectl 命令会展示这个 Pod 的状态为 Terminating(终止)。Terminating 并不是 Pod 阶段之一,而是 Pod 终止的期限,默认为 30 秒。

你可能感兴趣的:(kubernetes,容器,云原生,k8s,docker)