K8S Pod 基本使用

news2024/9/25 21:22:35

K8S Pod 基本使用

Pod基本概念

Pods是在Kubernetes集群中创建和管理最小的部署单元,一个Pod内部可以运行一个或多个容器,多个容器之间具共享的存储和网络资源,共享运行上下文。Pod共享运行时上下文是通过linux 命名空间实现,不同的命名空间存储、网络、CPU相互隔离。Pod基于Docker容器进一步进行了抽象,类似于一组具有共享命名空间、共享文件存储的容器组。

使用Pod

  • Pod 模版文件

    # 版本信息
    apiVersion: v1
    # 对象类型
    kind: Pod
    # pod 元数据定义
    metadata:
      name: nginx
    spec:
    # docker 镜像定义
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
    
  • 创建Pod

    # 根据配置文件创建或更新一个Pod对象
    kubectl apply -f https://k8s.io/examples/pods/simple-pod.yaml
    
  • 查看Pod

    kubectl get po
    

    在这里插入图片描述

  • 查看Pod日志

    # kubectl logs pod-name
    kubectl logs balanced-7f6bc49b89-jzrxr
    

    在这里插入图片描述

  • 查看Pod详细信息

    # nginx 为pod的名称
    kubectl describe pods/nginx
    

    在这里插入图片描述

使用规范

通常情况下,用户并不会直接使用Pod进行作业。一般会使用更加高级的对象如Deployment、RS、RC进行作业。即便如此,学习Pod的底层原理和使用规范,对于学习K8S有很大的帮助。Pod 在K8S集群中通常有两种使用方式

  • Pod 运行单个容器 - “每个Pod一个容器”模型是最常见的Kubernetes用例;在这种情况下,您可以将Pod视为单个容器的包装器;Kubernetes管理Pods,而不是直接管理容器。
  • Pod 运行多个容器 - 运行需要一起工作的多个容器的Pod。Pod可以封装由多个紧密耦合且需要共享资源的位于同一位置的容器组成的应用程序。这些位于同一位置的容器形成了一个统一的服务单元,Pod将这些容器、存储资源和短暂的网络标识包装为一个单元。

Pod生命周期

运行阶段

Pod的状态字段是一个PodStatus对象,它有一个阶段字段。Pod的阶段是对Pod在其生命周期中所处位置的简单、高级概括。

ValueDescription
Pending挂起阶段,Pod已被K8S系统接收,但仍有一个或者多个容器未被创建,可以通过kubectl describe 查看pending 状态原因
Running运行阶段,Pod已经被绑定到一个节点上,并且所有的容器都已经被创建,而且至少有一个是运行状态,正在启动或者重启,可以通过kubectl logs 查看Pod日志
Succeeded成功阶段。所有容器执行成功并终止,并且不会再次重启,可以通过kubectl logs 查看Pod 日志
Failed失败阶段。所有容器都已终止,并且至少有一个容器以失败的方式终止,也就是说这个容器要么以非零状态退出,要么被系统终止,可以通过logs 和 describe 查看Pod日志和状态
Unknown未知阶段,通常由于通信问题造成的无法获取Pod状态

容器状态

除了整个Pod的阶段,Kubernetes还跟踪Pod中每个容器的状态。您可以使用容器生命周期挂钩来触发事件,以在容器生命周期的某些点运行。

一旦调度器将Pod分配给Node,kubelet就开始使用容器运行时为该Pod创建容器。有三种可能的容器状态:等待、运行和终止。

要检查Pod容器的状态,可以使用kubectl describe Pod<name of Pod>。输出显示该Pod中每个容器的状态。

容器探针

生产环境中,进程正常启动并不代表能正产的处理业务请求,所以需要有一套合理的健康检查机制。探针是kubelet在容器上定期执行的诊断。目前K8S有三种方式进行探针检测:

  • ExecAction - 在容器内执行一个指定的命令,如果命令返回为0,则认为容器健康
  • TCPSocketAction - 通过TCP连接检查容器指定端口,如果端口开放,则认为容器健康
  • HTTPGetAction - 对特定的URL进行请求,如果状态码在200-400 之间,则认为容器健康

健康检查方法

使用探针检查容器有四种不同的方法。每个探针必须精确定义以下四种机制之一:

  • exec - 在容器内执行指定的命令。如果命令退出时状态代码为0,则认为诊断成功
  • grpc - 使用gRPC执行远程过程调用。目标应实现gRPC运行状况检查。如果响应状态为 SERVING,则认为诊断成功。gRPC探测是alpha功能,只有在启用GRPContainerProbe功能门时才可用
  • httpGet - 对指定端口和路径上的Pod的IP地址执行HTTP GET请求。如果响应的状态代码在200-400之间,则认为诊断成功
  • tcpSocket - 在指定端口上对Pod的IP地址执行TCP检查。如果端口打开,则认为诊断成功。如果远程系统(容器)在连接打开后立即关闭连接,则视为正常

Pod探针检查,容器返回的结果

  • Success - 容器通过检测
  • Failure - 容器检测失败
  • Unknown - 检测失败 状态未知

Pod探针检查种类

  • startupProbe - 用于判断容器内的应用程序是否启动成功。如果配置了startupProbe,就会先禁用其他探针,直至它成功为止。如果检测失败,kubelet会杀死容器,之后根据重启策略进行处理
  • livenessProbe - 用于探测容器是否在运行,如果探测失败,kubelet会杀死容器并根据重启策略进行相应的处理。如果未指定该探针,默认为Success
  • readinessProbe - 用于检测容器内的程序是否健康,即判断容器是否为就绪(Ready)状态. 如果是,则可以处理请求,否则Endpoints Controller 将从所有Service 的Endpoints 中删除此容器所在的Pod的IP地址。如果未指定,将默认为 Success

重启策略

yaml Pod定义文件中 spec下有一个restartPolicy属性,可能值为Always、OnFailure和Never。默认值为 Always

该属性 - restartPolicy适用于Pod中的所有容器,作用是当Pod容器遇到意外状况奔溃时,指定重启的策略。restartPolicy仅指kubelet在同一节点上重新启动容器。在Pod中的容器退出后,kubelet会以指数级延迟(10s、20s、40s…)重新启动它们,延迟上限为5分钟。一旦容器执行了10分钟而没有任何问题,kubelet就会重置该容器的重新启动回退计时器。如下

apiVersion: batch/v1
kind: Job
metadata:
  name: hello
spec:
  template:
    # This is the pod template
    spec:
      containers:
      - name: hello
        image: busybox:1.28
        command: ['sh', '-c', 'echo "Hello, Kubernetes!" && sleep 3600']
      restartPolicy: OnFailure # 指定重启策略
    # The pod template ends here

终止进程

因为Pods表示在集群中的节点上运行的进程,所以允许这些进程在不再需要时优雅地终止是很重要的(而不是突然被KILL信号停止,没有机会清理)。

设计目标是让您能够请求删除并知道进程何时终止,同时也能够确保删除最终完成。当您请求删除Pod时,集群会记录并跟踪Pod被强制终止之前的预期宽限期。随着强有力的停机跟踪到位,kubelet尝试优雅的停机。

# 使用kubectl delete 命令删除pod对象
kubectl delete pods/nginx

# 支持指定时间范围删除pod对象
# 默认30秒内优雅的关闭pod对象 此处设置为10秒
kubectl delete pods/nginx --grace-period=10

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/140253.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

项目管理工具dhtmlxGantt甘特图入门教程(五):甘特图实例特点

DHTMLX专注于JavaScript和HTML5 UI小部件和库,以帮助开发人员更快地构建功能丰富的、交互式的Web界面。 遵循现代网络开发的标准和做法,DHTMLX提供针对桌面和移动设备定制的顶级Web应用程序框架。 本文重点介绍使用Gantt Instance的主要功能。 DhtmlxG…

springBoot集成阿里云短信

第一步导入依赖 <dependencies><dependency><groupId>com.atguigu</groupId><artifactId>service-base</artifactId><version>0.0.1-SNAPSHOT</version></dependency><dependency><groupId>org.springfram…

【3】SCI易中期刊推荐——人工智能领域(中科院1区)

🚀🚀🚀NEW!!!SCI易中期刊推荐栏目来啦 ~ 📚🍀 SCI即《科学引文索引》(Science Citation Index, SCI),是1961年由美国科学信息研究所(Institute for Scientific Information, ISI)创办的文献检索工具,创始人是美国著名情报专家尤金加菲尔德(Eugene Garfield…

百货商场用户画像描绘与价值分析在线实习项目

通过实习可以让学生通过实践进行检验&#xff0c;它是衔接学生在校学习与步入社会两个阶段的重要桥梁。一个好的实习机会可以帮助学生积累工作经验&#xff0c;验证职业宣传同时提升综合素质。 在线实习项目重点是让学生巩固并拓展已学到的数据分析理论知识&#xff0c;对…

【无标题】测试开发 | TestNG 与 Junit 对比,测试框架如何选择?

TestNG 和 Junit 作为两大流行的测试框架&#xff0c;有哪些区别&#xff1f;各有哪些优缺点&#xff1f;该如何选择呢&#xff1f;这里简要总结下&#xff1a; 1. Junit 更适合隔离性比较强的单元测试&#xff1b; 2. TestNG 是比 Junit 涵盖功能更全面的测试框架&#xff0c…

【自学Java】Java for循环

Java for循环 Java for循环 在 Java 语言 中&#xff0c;关键字 for 用来操作已经知道了循环次数的循环操作&#xff0c;前面我们介绍过 while 和 do while 循环控制&#xff0c;他们一般情况下用于循环次数不知道的情况下。 Java for语句详解 语法 for(赋值初值 : 判断条…

第七章:使用Netlify零成本部署组件文档

第七章&#xff1a;使用Netlify无成本发布组件文档 为什么使用Netlify&#xff1f; 一开始一共有三个方案&#xff1a; 1、Github Page 2、Netlify 3、Vercel Github Page只支持一个repo发布一个网站&#xff0c;而我们的项目是一个mononrepo项目&#xff0c;后续可能还有其他…

数字转汉字支持负数和小数

private static String numToChinese(String str) {if(strnull)return null;boolean isPositivetrue;//判断是不是负数if(str.charAt(0)-)isPositivefalse;StringBuffer sbnew StringBuffer();if(!isPositive)sb.append("负");//整数部分和小数部分&#xff08;如果有…

2023年1月实时获取地图边界数据方法,省市区县多级联动【附区县乡镇街道geoJson文件下载】

首先&#xff0c;来看下效果图 在线体验地址&#xff1a;https://geojson.hxkj.vip&#xff0c;并提供实时geoJson数据文件下载 可下载的数据包含省级geojson行政边界数据、市级geojson行政边界数据、区/县级geojson行政边界数据、省市区县街道行政编码四级联动数据&#xff0…

QT 学习笔记(十三)

文章目录一、QDataStream 二进制文件读写1. QDataStream 简介2. QDataStream 实际演示2.1 QDataStream 读写文件操作2.2 实现代码——主窗口头文件 widget.h2.3 实现代码——主窗口源文件 widget.cpp二、QTextStream 文本文件读写1. QTextStream 简介2. QTextStream 实际演示2.…

【王道操作系统】3.2.3 页面置换算法(最佳置换算法、先进先出置换算法、最近最久未使用置换算法、普通时钟置换算法、改造型时钟置换算法)

页面置换算法(最佳置换算法、先进先出置换算法、最近最久未使用置换算法、普通时钟置换算法、改造型时钟置换算法) 文章目录页面置换算法(最佳置换算法、先进先出置换算法、最近最久未使用置换算法、普通时钟置换算法、改造型时钟置换算法)1.最佳置换算法---OPT2.先进先出置换算…

[安洵杯 2019]不是文件上传(文件名不能用“,数据库可识别hex编码)

打开题目尝试上传文件发现只能上传图片&#xff0c;然后看见了图片的路径&#xff0c;但是图片码连不上蚁键&#xff0c;结合题目&#xff0c;然后看到了题目给出的github源码 <?php include("./helper.php"); $show new show(); if($_GET["delete_all&qu…

STS安装,SVN配置及WEB工程配置简单说明_1.0.0

Spring Tool Suite构建java web项目概述1, 下载安装Spring Tool Suite Spring Tool Suite 简称为sts, 为构建基于Spring企业应用&#xff0c;提供了最好的Eclipse开发环境。STS 提供了最新基于Java和Spring应用所需要的所有工具,STS官网主页地址为http://spring.io/tools/sts/,…

画布创作,签名大致就是起笔落笔

画布创作&#xff0c;签名大致就是起笔落笔 前言 在画布创作过程中&#xff0c;签名手的基本形态是&#xff0c;不停的点、划。 就像我们写字一样&#xff0c;字越写越大&#xff0c;但是我们不知道笔画的大小。 一个字是一个非常小的点、横&#xff0c;一个横就把这个字给分…

JVM学习(一):简单聊聊性能调优这门艺术

一、性能调优背景说明1.1 生产环境中的问题生产环境发生了内存溢出该如何处理&#xff1f;生产环境应该给服务器分配多少内存合适&#xff1f;如何对垃圾回收器的性能进行调优&#xff1f;生产环境CPU负载飙高该如何处理&#xff1f;生产环境应该给应用分配多少线程合适&#x…

2-2进程管理-处理机调度

文章目录一.调度的层次二.进程调度的时机、切换与过程、调度方式三.调度器、闲逛进程四.调度算法的评价指标五.调度算法&#xff08;一&#xff09;先来先服务SCFS&#xff08;二&#xff09;短作业优先算法SJF&#xff08;三&#xff09;高响应比优先HRRN&#xff08;四&#…

cas6.6关于redis连接问题的一次记录,主要问题 1远程主机强迫关闭了一个现有的连接,主要问题2ERR unknown command `HELLO`

项目背景&#xff1a; 公司要求用cas单点登录&#xff0c;这个cas需要引入redis当做ticket缓存&#xff0c;但是出现连接不上的问题由于用redismanager可视化软件看了是可以连接的&#xff0c;进行了查询是redis配置文件中需要配置参数问题截图如下 问题输出如下 2023-01-04…

192:vue+openlayers: 选择feature,弹窗操作,删除所选feature

第192个 点击查看专栏目录 本示例的目的是介绍如何在vue+openlayer中使用select来选择feature元素,选择的过程中弹窗出现删除和关闭按钮,删除的内容是selected的feature,关闭的是功能浮窗。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果; 注意如果Ope…

《设计模式》模板方法模式

《设计模式》模板方法模式定义&#xff1a; 模板方法模式又叫模板模式&#xff0c;在一个抽象类中公开定义了执行它的方法的模板&#xff0c;子类可以根据需要重写方法实现&#xff0c;但是调用将按照抽象类中定义的方式进行。模板方法模式相当于定义了一个操作中算法的骨架&a…

回归预测 | MATLAB实现CNN-GRU卷积门控循环单元多输入多输出

回归预测 | MATLAB实现CNN-GRU卷积门控循环单元多输入多输出 目录回归预测 | MATLAB实现CNN-GRU卷积门控循环单元多输入多输出预测效果基本介绍程序设计往期精彩参考资料预测效果 基本介绍 MATLAB实现CNN-GRU卷积门控循环单元多输入多输出&#xff0c;运行环境Matlab2020及以上…