深入了解Pod

深入了解Pod

介绍Pod

  • Pod是Kubernetes中的最小调度单元,k8s是通过定义一个Pod的资源,然后在Pod里面运行容器,容器需要指定一个镜像,这样就可以用来运行具体的服务。
  • 一个Pod封装一个容器(也可以封装多个容器),Pod里的容器共享存储、网络等。

什么是pause容器

  • 在Kubernetes中,每个Pod里面还会运行着一个特殊的容器,称之为Pause容器或根容器。其他容器 则为业务容器,这些业务容器共享Pause容器的网络和Volume存储卷。
    在Pod里,可以在根容器上设置IP地址,其它容器都共享此IP,以实现Pod内部的网络通信,同一个Pod里的容器之间通过localhost就能互相通信。
    pause容器使Pod中的所有容器共享两种资源:网络和存储。

网络

  • 每个Pod都会被分配一个唯一的IP地址。Pod中的所有容器共享网络命名空间,包括IP地址和端口。Pod内部的容器可以使用localhost互相通信。当Pod中的容器与外界通信时,必须分配共享网络资源(例如使用宿主机的端口映射)。

存储

  • 创建Pod的时候指定挂载的存储卷volume,Pod中的所有容器都可以访问共享的volume。存储卷volume也可以用来持久化Pod中的存储资源,以防Pod容器重启后文件丢失。
    在这里插入图片描述

Pod的特点

容器共享网络命名空间:

Pod中的容器共享相同的IP地址和端口范围,可以通过localhost相互通信。

存储卷共享:

Pod 中的容器可以访问相同的存储卷,方便数据共享和通信。

逻辑单元:

Pod提供了一个逻辑上独立、紧密耦合的单元,容器在同一个Pod 中可以方便地进行通信和数据共享。

生命周期:

Pod有自己的生命周期,当Pod 中的所有容器都终止时,Pod才会终止。

Pod的用途

应用组合:

将相互关联的应用容器组合到一个Pod 中,以便它们可以直接通信。

共享存储:

多个容器可以访问相同的存储卷,实现数据共享。

单元部署:

Pod 作为一个单元进行部署,确保相关容器共同运行和调度。

微服务:

将微服务架构中的一组相关服务打包在一个Pod中,以简化部署和管理。

Pod类型

控制器管理的Pod:

由kube-scheduler进行调度,被控制器管理;有自愈能力,一旦Pod挂掉了,会被重新拉起;有副本管理、滚动更新等功能。

自主式Pod:

由kube-scheduler进行调度,不被控制器管理;没有自愈能力,一旦Pod挂掉了,不会被重新拉起;没有副本管理、滚动更新等功能。

静态Pod:

不由scheduler调度,而是由kubelet自行管理;始终与kubelet运行在同一个Node节点上,不能被直接删除。

创建Pod

命令行

使用 nginx 镜像,创建一个叫 nginx-test 的 pod,使用–port 指定端口号为 80

[root@master ~] kubectl run nginx-test --image=nginx --port=80
[root@master ~] kubectl get pod
NAME    READY   STATUS    RESTARTS   AGE
nginx      1/1     Running      0        2m8s

使用-o wide可以查看更详细的信息,比如ip地址,pod所在的节点
[root@master ~] kubectl get pod -o wide
NAME    READY   STATUS    RESTARTS   AGE     IP           NODE    NOMINATED NODE   READINESS GATES
nginx   1/1     Running   0          2m40s   10.244.2.2   node2   <none>           <none>

使用--show-labels选项可以查看pod的标签
[root@master ~] kubectl get pod --show-labels
NAME    READY   STATUS    RESTARTS   AGE     LABELS
nginx      1/1     Running       0      4m38s   run=nginx-test

使用-l选项后面跟标签,可以查询带有指定标签的pod
[root@master ~] kubectl get pod -l run=nginx-test
NAME    READY   STATUS    RESTARTS   AGE
nginx      1/1     Running     0        6m26s

查看pod 日志
[root@master ~] kubectl logs nginx-test
进入pod容器
[root@master ~] kubectl exec -it nginx-test -- bash

删除pod
[root@master ~] kubectl delete pod nginx-test
pod "nginx-test" deleted

使用-n指定命名空间
[root@master ~] kubectl get pod -n default
NAME     READY   STATUS    RESTARTS   AGE
nginx-test   1/1     Running      0       7m35s

使--all-namespaces指定所有命名空间,简写为-A
[root@master ~] kubectl get pod --all-namespaces
NAMESPACE      NAME             READY   STATUS    RESTARTS      AGE
default         nginx-test             1/1     Running    0            8m25s
kube-flannel   kube-flannel-ds-654tl    1/1     Running   1 (40m ago)   41m
kube-flannel   kube-flannel-ds-vrcgm   1/1     Running   1 (40m ago)   41m
kube-flannel   kube-flannel-ds-zbw9t   1/1     Running   1 (40m ago)   41m
kube-system  coredns-6d8c4cb4d-9f5nf  1/1     Running   1 (40m ago)   41m
kube-system  coredns-6d8c4cb4d-l565c  1/1     Running   1 (40m ago)   41m
kube-system    etcd-master             1/1     Running   1 (40m ago)   41m
kube-system    kube-apiserver-master   1/1     Running   1 (40m ago)   41m
kube-system   kube-controller-manager-master   1/1     Running   1 (40m ago)   41m
kube-system    kube-proxy-2sxmj                 1/1     Running   1 (40m ago)   41m
kube-system    kube-proxy-2xhxd                 1/1     Running   1 (40m ago)   41m
kube-system    kube-proxy-hmg6s                 1/1     Running   1 (40m ago)   41m
kube-system    kube-scheduler-master            1/1     Running   1 (40m ago)   41m

资源清单

在Kubernetes中,资源清单是一种用YAML格式描述的文件,用于定义Kubernetes资源的配置。这些资源可以是Pods、Deployments、Services、ReplicaSets、StatefulSets等。
以下是一个创建Pod的yaml示例

[root@master ~] vim nginx_pod.yaml 
 定义 Kubernetes API 版本
apiVersion: v1

指定 Kubernetes 资源类型(在本例中为 Pod)
kind: Pod

Pod 的元数据,包括名称、命名空间和标签
metadata:
  name: nginx
  namespace: default
  labels:
    app: nginx  # 标识应用为 nginx 的标签

Pod 的规格,包括容器及其配置
spec:
  restartPolicy: Never # 设置重启策略
  # Pod 中的容器列表
  containers:
  - name: nginx  # 容器名称
    ports:
    - containerPort: 80  # 容器中暴露服务的端口
    image: nginx:1.20  # 用于容器的 Docker 镜像
imagePullPolicy: IfNotPresent  # 容器镜像拉取策略

Pod容器镜像拉取策略

Kubernetes中的容器镜像拉取策略(imagePullPolicy)有以下三种:

Always(总是):

表示 Kubernetes 将始终尝试从指定的镜像仓库拉取容器镜像。即使节点上已经存在相同版本的镜像,也会尝试拉取最新的版本。

IfNotPresent(如果不存在则拉取):

这是默认策略。表示如果节点上不存在指定的容器镜像,那么就拉取该镜像。如果本地已经存在容器镜像,则不再拉取。

Never(从不拉取):

表示 Kubernetes 不会尝试拉取指定的容器镜像。它要求节点上必须存在所需版本的镜像,否则启动容器会失败。
容器镜像拉取策略默认值
如果省略imagePullPolicy字段,镜像的名称没有指定标签,或镜像标签tag指定为latest则拉取策略默认为Always;
如果镜像标签tag指定为具体版本号,则默认策略为IfNotPresent。

Pod容器重启策略

Pod 容器重启策略定义了在容器退出时Kubernetes 应该采取的操作,这对于确保应用程序的可用性和稳定性非常重要,使用restartPolicy字段进行配置。
Pod容器重启策略有以下3种:

Always:

默认策略;在任何情况下,当Pod中的容器退出时,就自动重启容器,无论容器退出状态码如何;

OnFailure:

当Pod中的容器异常退出时(容器退出状态码为非0)才自动重启容器;正常退出的容器(容器退出状态码为0)不会重启;

Never:

当Pod中的容器退出时,总是不重启容器,无论容器退出状态码如何;

部署Pod资源

[root@master ~]# kubectl apply -f nginx_pod.yaml 
pod/nginx created

[root@master ~]# kubectl get pod
NAME    READY   STATUS    RESTARTS   AGE
nginx     1/1     Running      0          31s

删除Pod资源

[root@master ~]# kubectl delete -f nginx_pod.yaml 
pod "nginx" deleted

[root@master ~]# kubectl get pod
No resources found in default namespace.
  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值