pod 基础 2

pod 进阶

探针

poststart

prestop

pod的生命周期开始:

重启:k8s的pod重启策略

deployment的yaml文件只能是Always pod的yaml三种模式都可以。

OnFailure:只有状态码非0才会重启,正常退出是不重启的

Never:正常退出和非正常退出都不重启。

容器退出了,pod才会重启。

pod可以有多个容器,只要有一个容器退出,整个pod都会重启,pod内的所有容器都会重启。

docker的重启策略:

面试题:k8s和docker重启策略有什么不同

docker的默认策略是never。

on-failure: 非正常退出才会重启容器

always:只要容器退出都会重启

unless-stopped:只要容器退出,就会重启。docker的守护进程启动时已经停止的容器,不再重启。

单机部署:就使用docker足够了,

集群化部署:k8s

yaml文件快速生成:

基于模板来改。

基于deployment来创建

--dry-run=client -o yaml >:只是调用方法对象,不是执行命令,不会创建到集群中。

指定输出到opt

基于pod来创建

基于service创建

pod的状态:

crashloopbackoff:pod当中的容器已经退出,kubelet正在重启

imagepullbackoff:正在重试拉取镜像

errimagepull:拉取镜像出错(1,网速太慢。 2,镜像名称写错了。 3,镜像仓库挂了)

Evicte:POD被驱赶(node节点资源不够部署pod,或者是资源不足,kubelet自动选择一个pod驱逐。)

工作遇到资源不足,打电话跟领导申请扩容

CrashLoopBackOff: 容器退出,kubelet正在将它重启

InvalidImageName: 无法解析镜像名称

ImageInspectError: 无法校验镜像

ErrImageNeverPull: 策略禁止拉取镜像

ImagePullBackOff: 正在重试拉取

RegistryUnavailable: 连接不到镜像中心

ErrImagePull: 通用的拉取镜像出错

CreateContainerConfigError: 不能创建kubelet使用的容器配置

CreateContainerError: 创建容器失败

m.internalLifecycle.PreStartContainer 执行hook报错

RunContainerError: 启动容器失败

PostStartHookError: 执行hook报错

ContainersNotInitialized: 容器没有初始化完毕

ContainersNotReady: 容器没有准备完毕

ContainerCreating: 容器创建中

PodInitializing:pod 初始化中

DockerDaemonNotReady: docker还没有完全启动

NetworkPluginNotReady: 网络插件还没有完全启动

Evicte: pod被驱赶

pod内的容器使用节点资源的限制:

1,request:最小占用需要的资源

2,limit:最高能占用需要多少资源

limit:需要多少,最多也只能占用这么多

对容器的两个资源限制:

cpu:

cpu限制的格式:

1,数字加小数点

1 2 0.5 0.2 可以占用几个cpu,最小是0.1单位

要么是整数,要么就是小数点后只能跟一位

2,m来表示cpu

cpu时间分片原理:

cpu时间分片:提供周期性的轮流分配cpu时间给各个进程,多个进程可以在cpu上交替执行。

在k8s中就是表示占用cpu的比率:

m:millicores 单位

1000m 500m 2000m 100m就是最小单位

1000m就是一个cpu

内存:

Ki

Mi(常见)

Gi(常见)

Ti

实验:

做限制条件。

kubectl apply -f test.yaml

进入容器:

kubectl exec -it centos-847ddb86c-ks44p bash

安装epel源

yum -y install epel-release

安装压力测试工具:

yum -y install stress

模拟压力测试:

超过直接杀进程

request 可以不设置,生产中一般不设置,只要不超过,用多少给多少

在master节点直接查看

kubectl describe nodes node02

在创建pod时,一定要给容器做限制。

k8s中怎么设置拉取镜像的策略:

默认策略:(默认策略即可)ifNotPresent

ifNotPresent:如果本地镜像有,就不在拉取,本地没有才会去镜像仓库拉取。

Always:不论镜像是否存在,创建时(重启)都会拉取镜像

Never:仅仅使用本地镜像。本地没有也不会拉取

都是本地部署,Never

如果涉及到外部部署,默认策略(事前要把docker的镜像导入到目标主机)

Always:不用

默认就是ifNotPresent,可以不加。

设置为Never

(本地有没有都不拉)不拉:

设置为:Always

本地有还是拉取

pod内容器的健康检查:

探针:

probe

k8s对容器执行的定期诊断。

探针有三种规则:

1,存活探针:livenessProbe 探测容器是否正常运行,如果发现探测失败,会杀容器,容器会根据重启策略来决定是否重启,不是杀掉pod

2,就绪探针:探测容器是否进入ready状态,并做好接受请求的准备。

探测失败 READY 0/1 没有进入ready状态。service会把这个资源对象的端点从ENDPOINTS中剔除。service也不会把请求转发到这个pod

3,启动探针

只是在容器的启动后开始检测,容器内的应用是否启动成功。在启动探测成功之前,所有的其他探针都会处于禁用状态。

但是,一旦启动探针结束,后续的操作不再受探针影响。

在一个容器当中可以有多个探针。

启动探针:只在容器启动时探测

存活探针:

就绪探针:

livenessprobe的检查方法:

1,exec探针:在容器内部执行命令,如果命令的返回码是0,表示成功。

适用于需要在容器内自定义命令来检查容器的健康情况。

相当于执行了一条命令行命令

2,httpGet:对指定ip+端口的容器发送一个httpget的请求。响应状态码大于或者等于200,小于400都是成功。

200

相当于发放http请求

适用于检查容器能否响应http的请求,web容器(nginx,tomcat)

3,tcpSocket:端口,对指定端口上的容器的IP地址进行的tcp检查(三次握手),端口打开认为 探测成功。检查特点容器的打开济安泰状态。

就是检查端口

检查结果:

1:成功容器提供,正常运行

2:失败存活探针会重启

3:未知结果

实验:

1,exec探针

initialDelaySeconds: 3

#表示容器启动之后多少秒来进行探测,时间不要设置的太短,可能导致无效探测

periodSeconds: 2

#表示探针探测的间隔时间。每隔多少秒进行一次检查。应用的延迟敏感度。这个应用非常重要,是核心组件。

failureThreshold: 2

#表示如果探测失败,失败几次之后,把容器标记为不健康。

successThreshold: 1

#只要成功一次就标记为就绪,健康,

timeoutSeconds: 1

#表示每次探测的超时时间,在多少秒内必须完成探测。

间隔的时间一定要比检测时间长。

前三个面试时要说出来。

成功次数可以不加,默认1次就成功,失败默认是3次

kubectl apply -f test.yaml

进入容器删除

kubectl exec -it centos-797bc57596-ghkvm -- rm -rf /opt/123.txt

探针检测不健康

在创建回去

kubectl exec -it centos-797bc57596-ghkvm -- touch /opt/123.txt

探测健康

liveness杀死容器重启。所有的探针策略伴随整个pod的生命周期。除了启动探针

2,httpGET

scheme:HTTP

协议是http

port: 80 端口为80

成功:

把80换成81,检测3次失败,就重启容器。

加上path:/index.html

加路径,检测访问资源是否存在。

kubectl describe pod nginx1

404 3次失败杀掉容器,继续重启

一直重启

改成对的

成功

3,tcpSocket 查看端口服务的监听状态

通过三次握手检测端口

改端口:

检测失败

总结:

探针的三个方法:

存活探针:检测失败,会杀死容器,然后重启。

探针将伴随整个生命周期

exec 相当于执行了一个shell命令:容器里面执行

shell命令执行成功:

返回码:0表示成功。

成功一次结束探测成功

httpGet:对web容器发起一次get请求,可以添加path,指定访问的资源。返回码大于等于200,小于400的范围之内都算成功

tcpSocket:相当于telnet,指定的容器济安泰端口是否打开。是否能和指定的容器监听

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言刷题每日一题#牛客网BC107】矩阵转置

目录 问题描述 思路逐步分析 完整代码实现 结果测试 问题描述 思路逐步分析 首先,根据输入的描述,第一行输入的是两个整数n和m,分别表示一个矩阵(二维数组)的行和列,并且行和列不超过10 根据要求&…

【Java并发】深入浅出 synchronized关键词原理-下

上一篇文章,简要介绍了syn的基本用法和monter对象的结构,本篇主要深入理解,偏向锁、轻量级锁、重量级锁的本质。 对象内存布局 Hotspot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header)、实例数据 (Instance Da…

两步带你解决IDEA 插件下载安装慢、超时、不成功问题

两步带你解决IDEA 插件下载安装慢、超时、不成功问题 1. 查找 国内插件的节点IP地址2. 修改本地hosts文件 > 今天在安装idea中的插件时,又双叒叕出现了这个问题,下载一个几MB的插件巨慢,所以写一下它的解决方案 1. 查找 国内插件的节点IP地…

深入理解Java中资源加载的方法及Spring的ResourceLoader应用

在Java开发中,资源加载是一个基础而重要的操作。本文将深入探讨Java中两种常见的资源加载方式:ClassLoader的getResource方法和Class的getResource方法,并介绍Spring框架中的ResourceLoader的应用。 1. 资源加载的两种方式 1.1 ClassLoader…

【代码随想录】刷题笔记Day45

前言 早上又赖了会床......早睡早起是奢望了现在,新一年不能这样!支棱起来! 377. 组合总和 Ⅳ - 力扣(LeetCode) 这一题用的就是完全背包排列数的遍历顺序:先背包再物品,从前往后求的也是有几…

kali-Linux安装ARL灯塔教程以及timeout of 20000ms exceeded 的解决方法

FLAG:别和妈妈诉苦,她帮不上,也睡不着。 专研方向: docker,ARL资产灯塔系统 每日emo:天冷了,你还在坚持吗? 欢迎各位与我这个菜鸟交流学习 kali安装ARL灯塔教程 1.安装docker环境,…

Pytorch的GPU版本安装,在安装anaconda的前提下安装pytorch

本文基于conda安装GPU版本的PyTorch 一、CUDA 1.下载CUDA 点击下载 找到对应的版本进行下载 (1)打开命令提示符查看自己的版本,输入 nvidia-smi 根据自己的版本进行下载 (2)点击适合自己的版本进行下载 &#…

HackTheBox - Medium - Linux - Awkward

Awkward Awkward 是一款中等难度的机器,它突出显示了不会导致 RCE 的代码注入漏洞,而是 SSRF、LFI 和任意文件写入/追加漏洞。此外,该框还涉及通过不良的密码做法(例如密码重用)以及以纯文本形式存储密码来绕过身份验…

阿里后端实习一面面经

阿里后端实习一面面经 项目中使用到了es,es的作用? elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 es中的重要概念? 群集:一个或多个节点…

Visual Studio 2022进行文件差异比较

前言 Visual Studio 2022在版本17.7.4中发布在解决方案资源管理器中比较文件的功能,通过使用此功能,可以轻松地查看两个文件之间的差异,包括添加、删除和修改的代码行。可以逐行查看差异,并根据需要手动调整和编辑文件内容以进行…

5分钟搞懂AI的可解释性

大家好啊,我是董董灿。 想象一下,如果有一天,有人跑过来突然告诉你,他搞懂了人类大脑记忆的运行机制,你会是什么反应? 你可能会和我一样,把他当做疯子。 因为我觉得这个课题太深奥了&#xf…

MySQL数据库期末知识点总结(复习版)

一、数据库基本知识 数据库中的数据有什么特点 1、数据是按某种结构组织的 2、数据有整体性、共享性和较高的独立性 数据管理技术经历了哪三个阶段 1、手工管理 2、文件管理 3、数据库管理 数据库管理系统的主要功能有哪些 数据库管理系统的主要功能包括数据定义、数据…