k8s - container

1、容器的生命周期:

(1) 简介:

Kubernetes 会跟踪 Pod 中每个容器的状态,就像它跟踪 Pod 总体上的阶段一样。 可以使用容器生命周期回调,在容器生命周期中的特定状态点触发事件。

● 容器生命周期回调:

在容器的生命周期中,可以利用容器生命周期回调来安排特定时间点执行某些任务或触发事件,例如在容器停止时进行清理操作。

(2) 容器状态:

① 种类:

容器的状态有三种: Waiting (等待)、Running (运行中) 和 Terminated (已终止)。

要检查 Pod 中容器的状态,可以使用 kubectl describe pod <pod 名称> 。

② 状态含义:

● Waiting:如果容器并不处在 Running 或 Terminated 状态之一,它就处在 Waiting 状态。 处于 Waiting 状态的容器仍在运行它完成启动所需要的操作。

当使用 kubectl 来查询包含 Waiting 状态的容器的 Pod 时,可以看到一个 Reason 字段,其中给出了容器处于等待状态的原因。

● Running:Running 状态表明容器正在执行状态并且没有问题发生。 如果配置了 postStart 回调,那么该回调已经执行且已完成。

如果 kubectl 来查询包含 Running状态的容器的 Pod 时,可以看到关于容器进入 Running 状态的信息。

● Terminated:处于 Terminated 状态的容器已经开始执行或者正常结束或者因为某些原因失败。

如果使用 kubectl 来查询包含 Terminated 状态的容器的 Pod 时, 可以看到容器进入此状态的原因、退出代码以及容器执行期间的起止时间。

如果容器配置了 preStop 回调,则该回调会在容器进入 Terminated 状态之前执行。

2、容器生命周期回调:

(1) 两个回调:

① postStart:postStart 是一个容器的生命周期事件,用于在容器完全启动之后运行的命令或操作。可以利用 postStart 执行容器启动后的初始化工作,例如准备环境、加载数据、连接外部服务等,确保容器已经启动并且可以处理请求。

② preStop:与 postStart 相对,preStop 是容器停止之前的生命周期事件。当收到停止信号时,在容器正式停止之前,Kubernetes 会调用 preStop ,允许容器在终止之前执行一些清理工作或保存状态。

(2) 示例:

apiVersion: v1
kind: Pod
metadata:name: lifecyclelabels:app: lifecycle
spec:containers:- name: nginximage: nginx:1.19lifecycle:postStart:exec:command: ["/bin/sh","-c","echo postStart >> /start.txt"]#-c:执行命令  在容器创建后输出 postStart 到 start.txtpreStop:exec:command: ["/bin/sh","-c","echo preStop >> /stop.txt && sleep 30"]#在容器停止前输出 preStop 到 stop.txt,等待30秒后再停止容器imagePullPolicy: IfNotPresentrestartPolicy: Always

3、容器重启策略:

(1) 简介:

Pod 的 spec 中包含一个 restartPolicy 字段,其作用在于控制在容器终止后 Kubernetes 如何处理容器的重启,取值包括 Always(总是重启)、OnFailure(容器异常退出重启) 和 Never ,默认值是 Always 。

restartPolicy 适用于 Pod 中的所有容器。

(2) 示例:

spec:containers:- name: nginximage: nginx:1.19imagePullPolicy: IfNotPresentrestartPolicy: Always

4、自定义容器启动命令:

(1) 简介:

k8s中可以修改容器启动默认执行命令以及传递相关参数。推荐使用 command 修改启动命令,args 为启动命令传递参数。

(2) 示例:

apiVersion: v1
kind: Pod
metadata:name: redislabels:app: redis
spec:containers:- name: redisimage: redis:5.0.10command: ["redis-server"]args: ["--appendonly yes"]imagePullPolicy: IfNotPresentrestartPolicy: Always

5、容器探针:

(1) 概念:

probe 是由 kubelet 对容器执行的定期诊断。 要执行诊断,kubelet 既可以在容器内执行代码,也可以发出⼀个网络请求。(用于定期对容器进行健康检查)

(2) 探针类型:

① livenessProbe (存活探针):指示容器是否正在运行。如果存活态探测失败,则 kubelet 会杀死容器,容器将根据其重启策略决定是否重启。

② readinessProbe (就绪探针):指示容器是否准备好为请求提供服务。如果就绪态探测失败,端点控制器将从与 Pod 匹配的所有服务的端点列表中删除该 Pod 的 IP 地址。

③ startupProbe 1.7+ (启动探针):指示容器中的应用是否已经启动。如果提供了启动探针,其他探针都会被禁用,直到此探针成功为止。如果启动探测失败, kubelet 将杀死容器,容器依其重启策略进行重启。

(3) 探针机制:

① exec:在容器内执行指定命令。如果命令退出时返回码为 0 则认为诊断成功。

② grpc:使用 grpc 执行远程过程调用。 如果响应的状态是 "SERVING",则认为诊断成功。

③ httpGet:对容器的 IP 地址上指定端口和路径执行 HTTP GET 请求。如果响应的状态码大于等于 200 且小于 400,则诊断被认为是成功的。

④ tcpSocket:对容器的 IP 地址上的指定端口执行 TCP 检查。如果端口打开,则诊断被认为是成功。

(4) 探针结果:

Success:成功,容器通过了诊断。

Failure:失败,容器未通过诊断。

Unknown:未知,诊断失败,不会采取任何行动。

(5) 探针参数:

① initialDelaySeconds:初始延迟时间,等待多久后开始第一次探针检测。

② periodSeconds:探测周期,指定探针检测的时间间隔,定义了连续进行健康状态检查的频率。

③ timeoutSeconds:超时时间,探针等待容器响应的最长时间,如果在此时间内没有得到响应,则该探测被视为失败。

④ failureThreshold:失败阈值,定义了连续失败的次数,达到该次数后探测器将认定探测失败。

⑤ successThreshold:成功阈值,定义了连续成功的次数,达到该次数后探测器将认定探测成功。

(6) 探针使用:

① exec:

apiVersion: v1
kind: Pod
metadata:name: nginxlabels:app: nginx
spec:containers:- name: nginximage: nginx:1.19imagePullPolicy: IfNotPresentlivenessProbe:exec:  #使用 exec 机制执行命令,通过查看是否有 pid 文件来检测容器状态。command:- ls- /var/run/nginx.pidinitialDelaySeconds: 5   #初始化时间 5speriodSeconds: 4         #检测间隔时间 4stimeoutSeconds: 1        #默认检测超时时间为 1sfailureThreshold: 3      #默认失败次数为 3次,达到 3次后重启 podsuccessThreshold: 1      #默认成功次数为 1次,1次代表成功restartPolicy: Always

② tcpsocker:

apiVersion: v1
kind: Pod
metadata:name: nginxlabels:app: nginx
spec:containers:- name: nginximage: nginx:1.19imagePullPolicy: IfNotPresentlivenessProbe:tcpSocket:port: 80initialDelaySeconds: 5   #初始化时间 5speriodSeconds: 4         #检测间隔时间 4stimeoutSeconds: 1        #默认检测超时时间为 1sfailureThreshold: 3      #默认失败次数为 3次,达到 3次后重启 podsuccessThreshold: 1      #默认成功次数为 1次,1次代表成功restartPolicy: Always

6、容器资源限制:

(1) 种类:

① 内存资源限制: 内存请求 (request) 和内存限制 (limit) 分配给一个容器,保障容器拥有它请求数量的内存,但不允许使用超过限制数量的内存。

② CPU 资源限制: 为容器设置 CPU request 和 CPU limit。 给容器分配其所请求数量的 CPU 资源,容器使用的 CPU 不能超过所配置的限制。

● 请求:基础资源 ;限制:最大资源

(2) metrics-server:

① 简介:

Kubernetes Metrics Server (Kubernetes指标服务器),是一个可扩展的、高效的容器资源度量源。Metrics Server 用于监控每个 Node 和 Pod 的负载。Metrics Server 从 Kubelets 收集资源指标,并通过 Metrics API 在 Kubernetes apiserver中公开。

Metrics API 可以通过kubectl top 访问,使其更容易调试自动扩缩管道。

② 安装 metrics-server:

vim components.yaml

apiVersion: v1
kind: ServiceAccount
metadata:labels:k8s-app: metrics-servername: metrics-servernamespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:labels:k8s-app: metrics-serverrbac.authorization.k8s.io/aggregate-to-admin: "true"rbac.authorization.k8s.io/aggregate-to-edit: "true"rbac.authorization.k8s.io/aggregate-to-view: "true"name: system:aggregated-metrics-reader
rules:- apiGroups:- metrics.k8s.ioresources:- pods- nodesverbs:- get- list- watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:labels:k8s-app: metrics-servername: system:metrics-server
rules:- apiGroups:- ""resources:- nodes/metricsverbs:- get- apiGroups:- ""resources:- pods- nodesverbs:- get- list- watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:labels:k8s-app: metrics-servername: metrics-server-auth-readernamespace: kube-system
roleRef:apiGroup: rbac.authorization.k8s.iokind: Rolename: extension-apiserver-authentication-reader
subjects:- kind: ServiceAccountname: metrics-servernamespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:labels:k8s-app: metrics-servername: metrics-server:system:auth-delegator
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: system:auth-delegator
subjects:- kind: ServiceAccountname: metrics-servernamespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:labels:k8s-app: metrics-servername: system:metrics-server
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: system:metrics-server
subjects:- kind: ServiceAccountname: metrics-servernamespace: kube-system
---
apiVersion: v1
kind: Service
metadata:labels:k8s-app: metrics-servername: metrics-servernamespace: kube-system
spec:ports:- name: httpsport: 443protocol: TCPtargetPort: httpsselector:k8s-app: metrics-server
---
apiVersion: apps/v1
kind: Deployment
metadata:labels:k8s-app: metrics-servername: metrics-servernamespace: kube-system
spec:selector:matchLabels:k8s-app: metrics-serverstrategy:rollingUpdate:maxUnavailable: 0template:metadata:labels:k8s-app: metrics-serverspec:containers:- args:- --cert-dir=/tmp- --secure-port=4443- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname- --kubelet-use-node-status-port- --metric-resolution=15s- --kubelet-insecure-tls #修改去掉证书验证image: dyrnq/metrics-server:v0.6.2 #修改官方无法下载imagePullPolicy: IfNotPresentlivenessProbe:failureThreshold: 3httpGet:path: /livezport: httpsscheme: HTTPSperiodSeconds: 10name: metrics-serverports:- containerPort: 4443name: httpsprotocol: TCPreadinessProbe:failureThreshold: 3httpGet:path: /readyzport: httpsscheme: HTTPSinitialDelaySeconds: 20periodSeconds: 10resources:requests:cpu: 100mmemory: 200MisecurityContext:allowPrivilegeEscalation: falsereadOnlyRootFilesystem: truerunAsNonRoot: truerunAsUser: 1000volumeMounts:- mountPath: /tmpname: tmp-dirhostNetwork: true  #必须指定这个才行nodeSelector:kubernetes.io/os: linuxpriorityClassName: system-cluster-criticalserviceAccountName: metrics-servervolumes:- emptyDir: {}name: tmp-dir
---
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:labels:k8s-app: metrics-servername: v1beta1.metrics.k8s.io
spec:group: metrics.k8s.iogroupPriorityMinimum: 100insecureSkipTLSVerify: trueservice:name: metrics-servernamespace: kube-systemversion: v1beta1versionPriority: 100

kubectl top pod pod名:

(3) 指定内存请求和限制:

① 简介:

为容器指定内存请求,可以在容器资源清单中包含 resources:requests 字段 ;要指定内存限制,可以包含 resources:limits。

内存资源的基本单位是字节(byte)。可以使用这些后缀之⼀,将内存表示为 纯整数或定点整数:E、P、T、G、M、K、Ei、Pi、Ti、Gi、Mi、Ki。

② 示例:

apiVersion: v1
kind: Pod
metadata:name: nginxlabels:app: nginx
spec:containers:- name: nginximage: nginx:1.19imagePullPolicy: IfNotPresentresources:requests:      #请求memory: "100Mi"limits:        #限制memory: "200Mi"restartPolicy: Always

③ 内存请求和限制的目的:

通过为集群中运行的容器配置内存请求和限制,可以有效利用集群节点上可用的内存资源;将 Pod 的内存请求保持在较低水平,可以更好安排 Pod 调度。

● 内存限制大于内存请求的作用:

Pod 可以进行一些突发活动,从而更好的利用可用内存。

Pod 在突发活动期间,可使用的内存被限制为合理的数量。

(4) 指定CPU请求和限制:

① 简介:

CPU 资源以 CPU 单位度量。小数值是可以使用的。一个请求 0.5 CPU 的容器会获得请求 1 个 CPU 的容器的 CPU 的一半。 可以使用后缀 m 表示毫。例如 100mCPU、100 milliCPU 和 0.1 CPU 都相同。

② 示例:

apiVersion: v1
kind: Pod
metadata:name: nginxlabels:app: nginx
spec:containers:- name: nginximage: nginx:1.19imagePullPolicy: IfNotPresentresources:requests:cpu: 100mlimits:cpu: 200mrestartPolicy: Always

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

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

相关文章

数据结构之<图>的介绍

图&#xff08;Graph&#xff09;的概念&#xff1a; 在数据结构中&#xff0c;图是由节点&#xff08;顶点&#xff09;和边组成的非线性数据结构。图用于表示不同对象之间的关系&#xff0c;其中节点表示对象&#xff0c;边表示对象之间的连接或关系。 1.图的基本组成元素&a…

人生感悟 | 当前经济形势,给25~35岁的年轻人一点建议

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 这两年经济情况怎么样呢&#xff1f;相信大家都有自己的感觉。 且不说网上看到的“裁员裁到大动脉”“设计院欠薪”等各种新闻。 说自己和家人的亲身经历吧&#xff0c;这两年经历了被拖欠工资、公司缩编、换工作、公…

Vue中插槽的使用

目录 一、默认插槽 &#xff08;1&#xff09;概念 &#xff08;2&#xff09;代码展示 &#xff08;3&#xff09;后备内容 二、具名插槽 &#xff08;1&#xff09;概念 &#xff08;2&#xff09;代码展示 三、作用域插槽 &#xff08;1&#xff09;概念 &#xff0…

一个 tomcat 下如何部署多个项目?附详细步骤

一个tomcat下如何部署多个项目&#xff1f;Linux跟windows系统下的步骤都差不多&#xff0c;以下linux系统下部署为例。windows系统下部署同理。 1 不修改端口&#xff0c;部署多个项目 清楚tomcat目录结构的应该都知道&#xff0c;项目包是放在webapps目录下的&#xff0c;那…

vue2 echarts不同角色多个类型数据的柱状图

前端代码&#xff1a; 先按照echarts插件。在页面里引用 import * as echarts from "echarts";设置div <div style"width:100%;height:250px;margin-top: 4px;" id"addressChart"></div>方法: addressEcharts() {const option {g…

RabbitMQ搭建集群环境、配置镜像集群、负载均衡

RabbitMQ集群搭建 Linux安装RabbitMQ下载安装基本操作命令开启管理界面及配置 RabbitMQ集群搭建确定rabbitmq安装目录启动第一个节点启动第二个节点停止命令创建集群查看集群集群管理 RabbitMQ镜像集群配置启用HA策略创建一个镜像队列测试镜像队列 负载均衡-HAProxy安装HAProxy…

【精选】计算机网络教程(第3章数据链路层)

目录 前言 第3章数据链路层 1、差错检测&#xff08;CRC&#xff09; 2、点对点协议&#xff08;了解应用场景&#xff09; 3、什么是碰撞域&#xff0c;什么是广播域 碰撞域&#xff08;Collision Domain&#xff09;&#xff1a; 广播域&#xff08;Broadcast Domain&a…

计算机组成原理学习(输入输出系统)

目录 输入输出系统&#xff08;i/o系统&#xff09; 一.现代计算机的结构 二.常见的&#xff08;I/O设备或者是外部设备&#xff09; ​ 三.主机如何与I/O设备进行交互 四.I/O控制方式简介 五.I/O系统的基本组成 输入输出系统&#xff08;i/o系统&#xff09; 一.现代计算…

一键安装下载3ds Max!别墅还是宫殿?3ds Max助你建造梦幻般的艺术建筑

不再浪费时间在网上寻找3ds Max的安装包了&#xff01;因为你所需要的一切都可以在这里找到&#xff01;作为一款全球领先的3D设计工具&#xff0c;3ds Max为创作者们带来了前所未有的便利和创作灵感。无论是建筑设计、影视特效还是游戏开发&#xff0c;3ds Max都能帮助你实现想…

C++——C++11(1)

时至今日&#xff0c;C标准已经到了C23&#xff0c;但是你要说哪一次提出的标准最经 典&#xff0c;那C11一定会被人提及&#xff0c;C11带来了数量可观的变化&#xff0c;其中包 含了约140个新特性&#xff0c;以及对C03标准中约600个缺陷的修正&#xff0c;这使得 C11更像是从…

一个神奇的Python库:Evidently,机器学习必备

Evidently 是一个面向数据科学家和机器学习工程师的开源 Python 库。它有助于评估、测试和监控从验证到生产的数据和 ML 模型。它适用于表格、文本数据和嵌入。 简介 Evidently 是一个开源的 Python 工具&#xff0c;旨在帮助构建对机器学习模型的监控&#xff0c;以确保它们的…

博客动态校验+静态校验二次开发方式

静态校验&#xff1a; 1&#xff1a;将需要静态校验的参数继承BaseReqeust类重写validate方法&#xff1a; 动态校验&#xff1a; 1&#xff1a;在需要校验的实现类上加&#xff1a; BizValidate注解 2&#xff1a;写一个校验类&#xff0c;方法命名规范为&#xff1a;需要校…

修改npm源码解决服务端渲染环境中localstorage报错read properties of undefined (reading getItem)

现象&#xff1a; 这个问题是直接指向了我使用的第三方库good-storage&#xff0c;这是一个对localStorage/sessionStorage做了简单封装的库&#xff0c;因为项目代码有一个缓存cache.ts有用到 原因分析&#xff1a; 从表象上看是storage对象找不到getItem方法&#xff0c; 但…

Android--Jetpack--数据库Room详解一

人生何须万种愁&#xff0c;千里云烟一笑收 一&#xff0c;定义 Room也是一个ORM框架&#xff0c;它在SQLite上提供了一个抽象层&#xff0c;屏蔽了部分底层的细节&#xff0c;使用对象对数据库进行操作&#xff0c;进行CRUD就像对象调用方法一样的简单。 二&#xff0c;角色介…

基于YOLOv8深度学习的路面标志线检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

docker容器-compose单机容器编排

目录 yaml文件使用的注意事项 yaml文件的基本数据结构 docker-compose单机容器编排 docker-compose的常用命令 安装docker-compose docker-compose部署nginx nginx文件 yml文件 docker-compose创建镜像和容器 docker-compose构建lnmp nginx文件 mysql文件 php文件…

华为组播配置案例

igmp-snooping主要用于生成二层组播表项&#xff0c;防止交换机全部接口都发组播报文 PC端配置&#xff1a; 组播源配置&#xff1a; R1 interface GigabitEthernet0/0/0 ip address 10.0.0.1 255.255.255.0 pim dm interface GigabitEthernet0/0/1 ip address 192.168.0…

UE5 C++(三)— 基本用法(生命周期、日志、基础变量)

文章目录 生命周期日志打印Outlog打印屏幕打印 基础变量类型FString、FName 和 FText&#xff0c;三者之间的区别 基础数据类型打印 忘记说了每次在Vscode修改后C脚本后&#xff0c;需要编译一下脚本&#xff0c;为了方便我是点击这里编译脚本 生命周期 Actor 生命周期官方文档…

年底总结-基于战略落地的年度经营计划

到了年底&#xff0c;今年不管经济如何&#xff0c;形势多么不好&#xff0c;这个月也要结束2023年了&#xff0c;在这个阶段最关键的是做好今年的总结以及明年的计划。 总结是为了更好地做明年的计划和形势的预判。 借用数据表作为工具&#xff0c;科学理性地对自身公司的经…

基于Java+Swingt学生信息管理系统

基于JavaSwing学生信息管理系统 一、系统介绍二、功能展示四、其他系统实现五、获取源码 一、系统介绍 1.用户登陆&#xff1a;在帮助按钮处&#xff0c;可以查看登陆账号及密码&#xff1a; 账号admin,密码123456 在未输入的情况下&#xff0c;会提示用户名不能为空&#xff…