k8s Pod基础(概念,容器功能及分类,镜像拉取和容器重启策略)

您所在的位置:网站首页 镜像拉取策略设置为Always k8s Pod基础(概念,容器功能及分类,镜像拉取和容器重启策略)

k8s Pod基础(概念,容器功能及分类,镜像拉取和容器重启策略)

2024-07-10 14:05| 来源: 网络整理| 查看: 265

目录

pod概念

Kubernetes设计Pod概念和特殊组成结构的用意

Pod内部结构:

网络共享:

存储共享:

pause容器主要功能

pod创建方式

pod使用方式

pod分类

pod的容器分类

基础容器(infrastructure container):

查看pause容器的基础镜像

配置kubelet使用阿里云的镜像

初始化容器(init containers):

Init 容器和普通容器的区别

应用容器(业务容器 main container):

官方示例

完整执行示例

注意

pod 镜像拉取策略(image PullPolicy)

镜像拉取的三种策略

官方示例

测试示例

pod 容器重启策略

重启策略的三种格式

示例

pod状态

Container生命周期

pod概念

Pod是Kubernetes中最小的部署单位,它可以包含一个或多个容器,并共享相同的网络命名空间、IP地址和存储卷。Pod通常用于运行一个单一应用程序实例或者一组相互关联的应用程序实例。其他Kubernetes组件,如Deployment、StatefulSet、Service等,都是围绕Pod来管理和扩展应用的功能。Deployment和StatefulSet用于管理Pod的生命周期,Service用于暴露Pod内部的应用程序服务,而PersistentVolume用于提供Pod的持久化存储。

Kubernetes设计Pod概念和特殊组成结构的用意

解决容器组状态管理问题:

引入Pause容器作为Pod的基础容器,使得整个Pod的生命周期可以由Pause容器的状态来代表。这种设计可以简化对容器组状态的判断和管理,当一个容器死亡时,Pause容器的状态可以反映整个Pod的状态,从而触发相应的处理措施,例如重启Pod或者执行其他故障恢复操作。

简化容器间通信和资源共享:

Pod中的多个应用容器共享Pause容器的IP地址和挂载的Volume,这样可以简化应用容器之间的通信问题,使它们能够通过localhost直接通信。同时,共享Volume也解决了容器之间的文件共享问题,使得容器能够共享数据和状态,从而更轻松地进行协作和共享资源。

综合而言,Pod的设计使得容器化应用程序在Kubernetes中能够更加方便地进行管理和部署,同时提供了更高的灵活性和可靠性,使得容器组能够更加高效地运行和协作。

Pod内部结构:

每个Pod都包含一个特殊的被称为“基础容器”的Pause容器,该容器负责管理Pod内部容器的共享操作。

除了Pause容器外,Pod还包含一个或多个紧密相关的用户应用容器。

网络共享:

Pod中的所有容器共享同一个网络命名空间,拥有相同的IP地址和端口空间。

容器之间可以通过localhost进行通信,而与外部通信时,需要分配共享网络资源,例如使用宿主机的端口映射。

存储共享:

Pod可以指定多个共享的Volume,所有容器都可以访问这些共享的Volume。

Volume也可以用于持久化Pod中的存储资源,以防止容器重启导致文件丢失。

这种设计使得Pod成为了Kubernetes中的最小调度单位,为容器化应用程序提供了便捷的管理和共享资源的机制。

pause容器主要功能

提供Linux命名空间共享的基础:

Pause容器负责管理Pod中的网络命名空间等共享资源,确保所有容器在Pod内部共享相同的网络环境,从而实现容器间的通信和协作。

启用PID命名空间,充当init进程:

Pause容器在Pod中作为PID命名空间的第一个进程(PID 1),类似于Linux系统中的init进程。它负责监控和管理其他容器的生命周期,例如处理僵尸进程等。

协调其他容器的生命周期:

Pause容器负责协调Pod中其他容器的生命周期,确保它们能够按照预期启动、停止和重启,从而实现整个Pod的稳定运行。

提供健康检查和生存探针:

Pause容器通常也会提供健康检查和生存探针服务,以确保Pod中的其他容器处于健康状态,并在必要时进行故障恢复或重启操作。

pod创建方式 通过命令行工具kubectl创建Pod:您可以使用kubectl命令行工具创建Pod,并指定Pod的配置文件或直接提供Pod的定义。 kubectl create -f 通过Deployment或StatefulSet创建Pod:Deployment和StatefulSet是Kubernetes中的控制器对象,它们管理Pod的生命周期,可以自动创建、扩展、更新和删除Pod。 kubectl create deployment --image= kubectl create statefulset --image= 通过Pod模板创建Pod:您可以定义一个Pod模板,然后使用该模板创建多个Pod实例。 apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: mycontainer image: nginx 通过命令行工具kubectl管理Pod:使用kubectl命令行工具,您可以管理Pod的各种操作,如获取Pod信息、删除Pod、调试Pod等。 kubectl get pods kubectl describe pod kubectl delete pod 通过调度器将Pod调度到集群节点:Kubernetes调度器负责将Pod调度到集群中的节点上,并确保Pod的资源需求得到满足。 pod使用方式

在Kubernetes集群中,Pod有两种主要的使用方式:

一个Pod中运行一个容器: 这是最常见的用法,每个Pod中只包含一个容器。在这种模式下,Pod可以被视为是封装了单个容器的最小部署单元。Kubernetes管理的是Pod,而不是直接管理容器。这种方式适用于运行独立的应用程序或服务,例如一个Web服务器或一个数据库。

在一个Pod中同时运行多个容器: 一个Pod中也可以同时封装多个需要紧密耦合互相协作的容器。这些容器共享相同的网络命名空间、IP地址和存储卷,它们可以协同工作成为一个服务单元。例如,一个容器可以负责运行主要的应用程序,而另一个"sidecar"容器可以处理日志收集、监控或其他辅助任务。Pod将这些容器作为一个实体来管理,它们共享Pod的资源,可以方便地相互通信和共享数据。

pod分类

自主式Pod:

这种类型的Pod本身不具备自我修复的能力。一旦创建后,Pod会被调度到集群的Node上,并保持在该节点上,直到满足终止条件,如进程终止、被手动删除、因缺少资源而被驱逐或节点故障等。Pod不会自动迁移或恢复。

如果Pod所在的Node发生故障,或者调度器出现故障,Pod将被删除。同样地,如果Pod所在Node缺少资源或处于维护状态,Pod也会被驱逐。

控制器管理的Pod:

Kubernetes引入了更高级的抽象层称为Controller来管理Pod实例。Controller可以管理多个Pod,并提供副本管理、滚动升级和集群级别的自愈能力。

通过使用Controller,可以实现对Pod的自动化管理,例如在节点故障时自动迁移Pod到其他健康的节点上。通常情况下,Kubernetes推荐使用Controller来管理Pod,而不是直接操作Pod。

pod的容器分类 基础容器(infrastructure container):

基础容器负责维护整个Pod的网络和存储空间,是Pod中的一个特殊容器。

每当创建一个Pod时,Kubernetes会自动启动一个基础容器,通常使用Pause容器作为基础容器。

查看pause容器的基础镜像 docker images #node01节点上

配置kubelet使用阿里云的镜像 cat /etc/sysconfig/kubelet #node01节点上查看pause配置镜像文件

空值即为默认官方镜像,修改为阿里pause镜像源

cat > /etc/sysconfig/kubelet


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3