k8s之pod的基础(下)

k8s的pod重启策略

Always deployment的yaml文件只能是Always pod的yaml三种模式都可以,不论正常退出还是非正常退出都重启

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

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

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

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

docker的重启策略

docker的默认策略是Never

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

Always 只要容器退出都会重启

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

单机部署 docker 足够了

集群化部署 才使用k8s

yaml文件快速生成
生成deployment的yml文件
kubectl create deployment nginx1 --image=nginx1.22 --replicas=3  --dry-run=client -o yaml > /opt/test1.yaml
#--dry-run=client  只是调用api的对象不执行命令

生成pod的yml文件
kubectl run nginx1 --image=nginx:1.22 --dry-run=client -o yaml > /opt/test2.yml

生成service的yaml文件
kubectl expose deployment nginx --port=80 --target-port=80 --type=NodePort --dry-run=client -o yaml > /opt/test3.yml
pod的生命周期(补充)

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

imagepillbackoff 正在重试拉去镜像

errimagepull 拉取镜像出错了

原因
1、网速太慢
2、镜像名字写错了
3、镜像仓库挂了

Evicte Pod被驱赶

node节点的资源不够部署pod,或者是资源不足,kubelet自动选择一个pod驱逐
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 pod容器内需要的资源

2、limit 最高能占用系统多少资源

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

两种限制
1、cpu		
cpu的限制格式(两种格式)
1  2  0.5  0.2   0.3  
1 可以占用一个cpu 
2 可以占用两个cpu
0.5  半个
0.2	 一个cpu的五分之一
0.1  是最小单位(不能最小)
要么是整数,要么就是小数点后只能跟一位,最小单位0.1
m 来表示cpu
cpu时间分片原理:
cpu时间分片:通过周期性的轮流分配cpu时间给各个进程,多个进程可以在cpu上交替执行
在k8s中就是表示占用的cpu的比率
m  millicores  单位
1000m 表示一个cpu   ....  500m  表示半个cpu


2、内存
内存的单位表示
ki   表示KB 
Mi   表示MB
Gi   表示GB
Ti   表示TB



apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: centos
  name: centos
spec:
  replicas: 1
  selector:
    matchLabels:
      app: centos
  template:
    metadata:
      labels:
        app: centos
    spec:
      containers:
      - image: centos:7
        name: centos
        command: ["/bin/bash","-c","sleep 3600"]
        resources:
          limits:
            memory: "1Gi"
            cpu: "1000m"

在创建pod时,一定要给容器做资源限制
镜像拉取策略
k8s怎么设置拉取镜像的策略
默认策略:
IfNotPresent  如果本地镜像有,就不在拉取,本地没有才会去镜像仓库拉取
Always  不论是否存在,在创建时(重启)都会重新拉取镜像
Never  仅仅使用本地镜像,本地没有也不会主动拉取
都是本地部署,Never
如果涉及到外部部署,默认策略(事前要把docker镜像导入到目标主机)
Always 一般不用
pod的容器健康检查

探针 probe

k8s对容器执行的定期检查,诊断

探针有三种规则

1、存活探针

2、就绪探针

3、启动探针

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

就绪探针  
作用:探测容器是否进入ready状态,并做好接受请求的准备,探测失败  READY  0/1 没有进入ready状态,service 会把这个资源对象的端点从当中剔除,service也不会把请求转发到这个pod
kubectl get endpoints  查看pod的端点

启动探针
只是在容器的启动后开始检测,容器内的应用是否启动成功,在启动探测成功之前,所有的其他的其他探针都会处于禁用状态,但是一旦启动探针结束,后续的操作不再受启动他真的影响

在一个容器当中,可以有多个探针
启动探针:只在容器启动时探测
存活和就绪
probe的检查方法

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

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

2、httpGet: 对指定IP+端口的容器发送一个httpget的请求,响应状态码大于等于200,小于400都是成功(x>=200<400)

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

3、tcpSocket:端口,对指定端口上的容器的IP地址进行tcp检查(三次握手),端口打开,认为探测成功

适用于检查特定容器容器的端口监听状态
诊断结果

1、成功 容器通过了 ,正常运行

2、失败,存活探针会重启

3、未知状态 诊断失败

实验(检查方法)
存活探针

exec方式

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: centos
  name: centos
spec:
  replicas: 1
  selector:
    matchLabels:
      app: centos
  template:
    metadata:
      labels:
        app: centos
    spec:
      containers:
      - image: centos:7
        name: centos
        command: ["/bin/bash","-c","touch /opt/123.txt;sleep 3600"]
        livenessProbe:
          exec:
            command: ["/usr/bin/test", "-e", "/opt/123.txt"]
          initialDelaySeconds: 3
#表示容器启动之后多少秒来进行探测,时间不要设置的太短,可能导致无效探测
          periodSeconds: 2
#表示探针探测的间隔时间,每隔多少秒进行一次检查,应用的延迟敏感度,这个应用非常重要,是一个核心组件
          failureThreshold: 2
#表示如果探测失败,失败几次之后,把容器标记为不健康
          successThreshold: 1
#表示只要成功一个就标记就绪,健康,ready
          timeoutSeconds: 1
#表示每次探测的超时时间,在多少秒内必须完成探测


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

httpGet方式

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: nginx1
  name: nginx1
spec:
  containers:
  - image: tomcat:8.0.52
    name: nginx1
    livenessProbe:
      httpGet:
        scheme: HTTP
        port: 8080
        path: /index.jsp
      initialDelaySeconds: 4
      periodSeconds: 2

tcpSocket方式


apiVersion: v1
kind: Pod
metadata:
  labels:
    run: nginx1
  name: nginx1
spec:
  containers:
  - image: tomcat:8.0.52
    name: nginx1
    livenessProbe:
      tcpSocket:
        port: 8081
      initialDelaySeconds: 4
      periodSeconds: 2

就绪探针

exec方式

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: nginx1
  name: nginx1
spec:
  containers:
  - image: tomcat:8.0.52
    name: nginx1
    command: ["/bin/bash","-c","sleep 3600"]
    readinessProbe:
      exec:
        command: ["/usr/bin/test","-e","/etc/passwd"]
      initialDelaySeconds: 4
      periodSeconds: 2

httpGet

pod的状态是runing ready状态是notready,容器不可以提供正常的业务访问,就绪探针不会重启容器.tcpSocket只是监听容器上的业务端口能否正常通信。8081没有,8080还在,也就是正常的端口还是可以访问。如果更改了容器的启动端口

tcpSocket

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: nginx1
  name: nginx1
spec:
  containers:
  - image: tomcat:8.0.52
    name: nginx1
    readinessProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 4
      periodSeconds: 2

存活探针和就绪探针,会伴随整个pod的生命周期

启动探针
如果探测失败,pod的是notready状态  启动探针探测容器失败,会重启pod
启动探针没有成功之前,后续的探针都不会执行
启动探针成功之后,在pod的生命周期内不会在检测启动探针
重启pod之后,相当于重新部署了一个初始版的新的容器

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: nginx1
  name: nginx1
spec:
  containers:
  - image: tomcat:8.0.52
    name: nginx1
    startupProbe:
      exec:
        command: ["/usr/bin/test","-e","/etc/passwd"]
      initialDelaySeconds: 4
      periodSeconds: 2
    livenessProbe:
      exec:
        command: ["/usr/bin/test","-e","/etc/passwd"]
      initialDelaySeconds: 4
      periodSeconds: 2
    readinessProbe:
      httpGet:
        scheme: HTTP
        port: 8080
        path: /index.jsp
      initialDelaySeconds: 4
      periodSeconds: 2

总结:
1、在一个yaml当中有多个探针,启动  存活 就绪都针对一个容器
2、启动探针的优先级是最高的,只有启动探针“成功”,后续的探针的才会执行
3、启动探针成功之后,后续除非重启pod,不会再触发启动探针了
4、在pod的生命周期当中,一直存在,一直探测的是存活探针和就绪探针
5、zaipod的生命周期当中,后续的条件是满足那个探针的条件,触发那个探针的条件
6、就绪探针,如果不影响容器运行,status:running,这个时候不会重启,但是容器退出的话,就绪探针也会重启的
容器启动和退出时的动作

postStart 容器启动钩子,容器启动之后触发的条件

preStop 容器退出钩子,容器退出之后触发的条件

apiVersion: v1
kind: Pod
metadata:
  name: nginx2
spec:
  containers:
  - name: nginx2
    image: centos:7
    command: ["/bin/bash","-c","sleep 3600"]
    volumeMounts:
    - name: test1
      mountPath: /opt
      readOnly: false
#声明容器内部的挂载目录,要给这个挂载卷取名字,不同的挂载卷的名字不能重复 
#readOnly: false 可读写
    lifecycle:
      postStart:
        exec:
          command: ["/bin/bash","-c","echo hello from start >> /opt/123.test ; sleep 10"]
      preStop:
        exec:
          command: ["/bin/bash","-c","ehco hello from stop >> /opt/123.txt"]
  volumes:
  - name: test1
    hostPath:
      path: /opt/test
      type: DirectoryOrCreate
#声明的是node节点上和容器内的/opt的挂载目录
#挂载卷的名称和要挂载的容器内挂载卷名称要一一对应
#hostPath  指定和容器的挂载目录
#type: DirectoryOrCreate   如果节点上的目录不存在,自动创建该目录
#pod会经常被重启,销毁,一旦容器和node节点做了挂载卷,数据不会丢失

启动和退出的作用
1、启动可以自定义配置容器的内的环境变量
2、通知机制,告诉用户容器启动完毕
3、退出时,可以执行自定义命令,删除或者生成一些必要的程序,自定义销毁方式以及容器的退出等待时间


在这个pod的生命周期时间当中,把启动探针,存活探针和就绪探针加入到yaml文件当中

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: tomcat1
  name: tomcat1
spec:
  containers:
  - image: tomcat:8.0.52
    name: tomcat1
    volumeMounts:
    - name: test1
      mountPath: /opt
      readOnly: false
    livenessProbe:
      exec:
        command: ["/usr/bin/test","-e","/etc/passwd"]
      initialDelaySeconds: 4
      periodSeconds: 2
    readinessProbe:
      httpGet:
        scheme: HTTP
        port: 8080
        path: /index.jsp
      initialDelaySeconds: 4
      periodSeconds: 2
    startupProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 4
      periodSeconds: 2
    lifecycle:
      postStart:
        exec:
          command: ["/bin/bash","-c","echo hello from start >> /opt/123.txt ; sleep 10"]
      preStop:
        exec:
          command: ["/bin/bash","-c","echo hello from stop >> /opt/123.txt"]
  volumes:
  - name: test1
    hostPath:
      path: /opt/xiaobu
      type: DirectoryOrCreate
                                   
模拟故障

删除存活探针检测/etc/passwd

没有检测到有把etc/passwd目录删除了,但是几秒时候就会重新拉取镜像

节点上查看

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【软件测试】软件开发各阶段的自动测试技术

说到自动化测试&#xff0c;你可能最为熟悉的就是GUI自动化测试了。比如&#xff0c;早年的C/S架构&#xff0c;通常就是用自动化测试脚本打开被测应用&#xff0c;然后在界面上以自动化的方式执行一系列的操作&#xff1b;再比如&#xff0c;现今的Web站点测试&#xff0c;也是…

模板元编程简介

从引入 template 关键字开始&#xff0c;C里就出现了泛型编程&#xff0c;而又泛型编程衍生出的模板元编程&#xff08;template meta_programming&#xff0c;简称“元编程”&#xff09;则是众多编程范式中最复杂、最强大和最具有权威的一种。所谓“元编程”——metaprogramm…

学习笔记——C++ 逢七过 问题

试用for循环语句解决以下案例&#xff1a; 案例描述&#xff1a;从1开始数到数字100&#xff0c;如果数字个位含有7&#xff0c;或者数字十位含有7&#xff0c;或者该数字是7的倍数&#xff0c;我们打印敲桌子&#xff0c;过&#xff0c;其余数字直接打印输出。 思路&#xf…

C++进阶--map和set的介绍及使用

map和set的介绍及使用 一、关联式容器与键值对关联式容器键值对pair树形结构的关联式容器 二、set2.1 set的介绍2.2 set的使用2.2.1 set的模板参数列表2.2.2 set的构造2.2.3 set的迭代器2.2.4 set的容量2.2.5 set修改操作2.2.6 set的使用举例 三、multiset3.1 multiset的介绍3.…

MySQL——用户管理

目录 一.用户管理 二.用户 1.用户信息 2.创建用户 3.删除用户 4. 修改用户密码 三.数据库的权限 1.给用户授权 2.回收权限 一.用户管理 如果我们只能使用root用户&#xff0c;root的权限非常大,这样存在安全隐患。这时&#xff0c;就需要使用MySQL的用户管理&#xff…

强化学习5——动态规划在强化学习中的应用

动态规划在强化学习中的应用 基于动态规划的算法优良 &#xff1a;策略迭代和价值迭代。 策略迭代分为策略评估和策略提升&#xff0c;使用贝尔曼期望方程得到一个策略的状态价值函数&#xff1b;价值迭代直接使用贝尔曼最优方程进行动态规划&#xff0c;得到最终的最优状态价…

windows下载官方正版notepad++

一、前言 notepad是一款非常好用的编辑器&#xff0c;简洁、快速、高效。可是很多时候我们想去官网下载时&#xff0c;百度出来的都是一堆第三方下载地址&#xff0c;捆绑流氓软件&#xff0c;要么就是付费&#xff0c;作为一款优秀开源软件&#xff0c;我们必须要知道正确的下…

蓝桥杯练习题(一)

&#x1f4d1;前言 本文主要是【算法】——蓝桥杯练习题&#xff08;一&#xff09;的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 …

物联网产品中,终端、网关、协议、PaaS、SaaS之间的关系

在互联网产品中&#xff0c;经常提到的终端、网关、协议、PaaS、SaaS之间&#xff0c;到底有什么关系呢&#xff1f; 一、基本概念 在百度/其他地方搜集的信息中&#xff0c;对于终端、网关、协议、PaaS、SaaS的解释各有不同&#xff0c;整理如下&#xff1a; 终端&#xff1…

AQS 抽象队列同步器

AQS AQS &#xff08;抽象队列同步器&#xff09;&#xff1a; AbstractQueuedSynchronizer 是什么 来自jdk1.5&#xff0c;是用来实现锁或者其他同步器组件的公共基础部分的抽象实现&#xff0c;是重量级基础框架以及JUC的基石&#xff0c;主要用于解决锁分配给谁的问题整体…

5年经验之谈 —— 探索自动化测试用例设计粒度!

自动化测试用例的粒度指的是测试用例的细致程度&#xff0c;即每个测试用例检查的功能点的数量和范围。 通常&#xff0c;根据测试用例的粒度&#xff0c;可以被分为3种不同的层次&#xff0c;从更低层次的细粒度到更高层次的粗粒度。 第一种&#xff1a;单元测试 - 细粒度 单…

编译ZLMediaKit(win10+msvc2019_x64)

前言 因工作需要&#xff0c;需要ZLMediaKit&#xff0c;为方便抓包分析&#xff0c;最好在windows系统上测试&#xff0c;但使用自己编译的第三方库一直出问题&#xff0c;无法编译通过。本文档记录下win10上的编译过程&#xff0c;供有需要的小伙伴使用 一、需要安装的软件…

2024年【化工自动化控制仪表】报名考试及化工自动化控制仪表考试技巧

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 化工自动化控制仪表报名考试是安全生产模拟考试一点通生成的&#xff0c;化工自动化控制仪表证模拟考试题库是根据化工自动化控制仪表最新版教材汇编出化工自动化控制仪表仿真模拟考试。2024年【化工自动化控制仪表】…

outlook邮件群发单显技巧?群发怎么单显?

outlook邮件群发单显如何设置&#xff1f;QQ邮箱怎么群发单显&#xff1f; 在群发邮件时&#xff0c;如何让每个收件人只看到自己的名字&#xff0c;而不是其他人的名字&#xff0c;这就涉及到所谓的“单显”技巧。下面蜂邮EDM就为大家揭秘Outlook邮件群发单显的奥秘。 outlo…

DBSCAN聚类模型

目录 介绍&#xff1a; 一、数据 二、建模 三、评价指标 3.1metrics.homogeneity_score 3.2metrics.completeness_score 3.3metrics.v_measure_score 3.4metrics.adjusted_rand_score 3.5metrics.adjusted_mutual_info_score 3.6metrics.silhouette_score 四、画图…

聊天Demo

文章目录 参考链接使用前端界面消息窗口平滑滚动至底部vue使用watch监听vuex中的变量变化 参考链接 vue.js实现带表情评论功能前后端实现&#xff08;仿B站评论&#xff09; vue.js实现带表情评论仿bilibili&#xff08;滚动加载效果&#xff09; vue.js支持表情输入 vue.js表…

【Java】2023年Java语言盘点

2023年Java语言盘点 前言语言排行榜JDK 各个版本使用情况主流框架支持情况JDK 21其他项目参考 前言 星河流转&#xff0c;日月更替&#xff0c;在2023这年里&#xff0c;Java也迎来了它的第28个年头。在这一年里&#xff0c;Java生态系统发生了许多让人瞩目的变化&#xff0c;…

计算机Java项目|Springboot疫情网课管理系统

项目编号&#xff1a;L-BS-ZXBS-07 一&#xff0c;环境介绍 语言环境&#xff1a;Java: jdk1.8 数据库&#xff1a;Mysql: mysql5.7 应用服务器&#xff1a;Tomcat: tomcat8.5.31 开发工具&#xff1a;IDEA或eclipse 二&#xff0c;项目简介 疫情网课也都将通过计算机…

智能计价器Scratch-第14届蓝桥杯Scratch省赛真题第5题

5. 智能计价器&#xff08;80分&#xff09; 背景信息&#xff1a;A城市的出租车计价&#xff1a;3公里以内13元&#xff0c;基本单价每公里2.3元(超过3公里的部分&#xff0c;不满1公里按照1公里收费&#xff09;&#xff0c;燃油附加费每运次1元。例如&#xff1a;3.2公里的…

1875_如何提升开关应用中的EMI表现

Grey 全部学习内容汇总&#xff1a; https://github.com/GreyZhang/g_hardware_basic 1875_如何提升开关应用中的EMI表现 看了一份ST的应用笔记&#xff0c;简单了解了一下EMI相关的一些设计&#xff0c;感觉还比价有收获。整理一下自己的收获点。 资料整理过程说明 参考资…