Kubernetes中的容器生命周期回调

在介绍Kubernetes容器生命周期回调前,展示一个案例。

有个私有化部署的项目需要跑一个redis用作缓存,因redis中的数据不需要持久化,选择在Kubernetes中通过deployment的方式部署,下面是deployment的代码片段,

......        
- image: arm64v8/redis:6.0-alpineimagePullPolicy: IfNotPresentname: redislifecycle:# 使用k8s回调机制给redis配置访问凭据postStart:exec:command: [ "/bin/sh", "-c", "redis-cli config set requirepass 'verylongpwd'" ]ports:- containerPort: 6379name: redisprotocol: TCPresources:limits:cpu: 500mmemory: 1024Mirequests:cpu: 100mmemory: 100Mi
......

为了满足业主的安全需求,redis配置了密码访问。这里通过容器的生命周期回调“postStart”来实现。pod启动后,都很正常,一段时间后,业主那边反馈,服务连接redis异常,并提供了日志,

连接Redis异常日志

为什么会出现这个问题?

这里直接给出结论,因为redis使用的内存量超过1024M,进程被kubernetes杀死后又重启了,配置的密码失效,后端程序通过带凭据的方式访问redis,导致访问失败。通过“postStart”回调的方式配置redis密码是问题的原因。

“postStart”回调指定的命令会在容器被创建后立即执行。如果redis进程被重启,通过“redis-cli”配置的密码就会失效,此时容器已经产生,“postStart”指定的命令就不会再次执行,此时运行的redis是没有配置访问密码的。进入pod,在redis交互式命令行,输入“info”命令直接输出结果,也印证个这个判断。

那么什么是Kubernetes的生命周期回调?

Kubernetes有两种类型的回调:“PostStart”和“PreStop”。什么是回调,它是一种事件执行机制,将指定的函数注册到特定事件上,在事件发生前或发生后执行注册的函数。

PostStart:回调在容器产生后立即执行,不保证运行在容器的“ENTRYPOINT”之前。

PreStop:容器终止前立即执行。

上面的回调有三类实现,

  • Exec,直接执行命令,比如上面配置redis访问密码的命令。退出状态码是0表示成功,否则表示失败。
  • httpGet,执行http请求,访问配置的http服务,http返回状态码在[200,400)表示成功,否则表示失败。
  • TcpSocket,执行tcp探测(笔者使用的k8s版本是1.20,提示TCP回调还不支持)

如果有使用blackbox的同学,对这个应该不会陌生。需要注意,httpGet和tcpSocket由kubelet进程执行,而exec在容器中直接执行。

本文对Kubernetes的容器生命周期回调做了简单介绍,希望对你有所帮助。如果需要更进一步了解,请访问官方网站。

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

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

相关文章

基于STM32的工业仓库环境智能监控系统设计

文章目录 一、前言1.1 项目介绍【1】项目开发背景【2】设计实现的功能【3】项目硬件模块组成【4】设计意义【5】市面上同类产品研究现状【6】摘要 1.2 设计思路1.3 系统功能总结1.4 开发工具的选择【1】设备端开发【2】上位机开发 1.5 模块的技术详情介绍【1】ESP8266-WIFI模块…

如何在 Manjaro Linux 上启用 AUR 仓库来安装软件包

Manjaro 是基于 Arch 的系统,是了解和学习 Arch Linux 命令的绝佳方式。它自带所有流行的桌面环境界面,无论是 XFCE 还是 Gnome 的爱好者,都可以在 Manjaro 中直接使用。 Manjaro 或 Arch Linux 的默认软件包管理器是 Pacman,我们…

有限上升时间信号的反射波形

有限上升时间信号的反射波形: 从上一节讨论中我们知道,阻抗不连续的点处,反射信号是入射信号的一个副本,并讨论了上升时间为0的信号的反射情况。这些规律对于上升时间不为0的信号同样适用,只不过入射信号和反射信号的叠加稍稍复杂…

Vue 3.4+ defineModel 全面详解 + 实战最佳实践

🌟 前言:为什么要关注 defineModel? 过去我们在 Vue 组件中使用 v-model 时,常需要这样写: // 子组件 defineProps([modelValue]) defineEmits([update:modelValue])function update(val) {emit(update:modelValue, …

MySQL事物隔离级别详解

目录 事物隔离级别总结 实际情况演示 脏读(未提交) 避免脏读(读已提交) 不可重复读 可重复读 幻读 事物隔离级别总结 SQL标准定义了四种事物隔离级别,用来平衡事物的隔离性(Isolation)和…

【安卓开发】Kotlin入门教程

一、Kotlin 基础入门 1.1 Kotlin 简介 Kotlin 是一种由 JetBrains 开发的静态类型编程语言,运行在 Java 虚拟机上,也可以编译为 JavaScript 或原生代码。它于 2017 年被 Google 宣布为 Android 官方开发语言。 主要特点: 简洁:…

工业机器人保护气体节约方法

焊接在现代工业生产中作为一项关键技术,其效率和质量直接影响着产品的最终性能和生产成本。随着智能制造的不断推进,工业焊接机器人在自动化生产线中扮演着越来越重要的角色。焊接过程中的气体调节一直是一个技术难题,它直接关系到焊接质量的…

java中集合API

集合API 一、简述二、Collection(1).List1.ArrayList:2. LinkedList (2) Set 三、Map1.HashMap2. TreeMap 三、Iterator接口Collections工具类1.对集合元素进行排序2.基于Comparator,自定义方法(内部类)进行…

Oracle 用户权限与对象权限详解

一、权限体系概述 Oracle 数据库的权限管理是保障数据安全的核心机制,主要分为系统权限(System Privileges) 和对象权限(Object Privileges) 两大类: 系统权限:赋予用户在数据库中执行特定操作…

kubectl get pods 时 “client-side throttling, not priority and fairness“ 原因初探

1. 问题起源 在kubernetes里,使用kubectl get pods 时,返回 I0508 05:43:04.655602 100742 request.go:668] Waited for 1.178494016s due to client-side throttling, not priority and fairness, request: GET:https://10.103.0.1:443/apis/cert-ma…

力扣网C语言编程题:位运算来解决 “寻找重复数”

一. 简介 前面两篇文章解决力扣网上"查找重复数"的题目,提供了三种思路:哈希表、二分法和快慢指针。文章如下: 力扣网C语言编程题:“寻找重复数”的两种思路-CSDN博客 力扣网C语言编程题:快慢指针来解决 …

3D视觉感知

目录 3D视觉感知任务 单目3D感知 单目3D物体检测 – 直接预测3D信息 单目3D物体检测 – 总结 单目深度估计 双目3D感知 多目3D感知 3D视觉感知任务  输入:单摄像头或多摄像头生成的图像数据  单张图像  图像序列  输出  稀疏&#xff1a…

es中常规的根据字段查询时走什么索引(说明:「常规的根据字段查询」不包含分词查询)

在Elasticsearch中,“常规的根据字段查询”且不涉及分词的查询(如精确匹配、范围查询),主要依赖以下索引机制: 一、核心索引类型及适用场景 字段类型索引结构典型查询方式应用场景keyword倒排索引(未分词…

MYSQL如何插入数据,效率会更高

在MySQL中,插入数据的效率可以通过多种方式逐步提升。以下是从简单到复杂的优化路径,帮助你逐步提高数据插入的性能: 一、基础插入:逐条插入 这是最基础的插入方式,适用于少量数据的插入操作。虽然简单,但…

Rabbitmq的五种消息类型介绍,以及集成springboot的使用

交换机类型 Fanout Exchange 扇型交换机,这个交换机没有路由键概念,就算你绑了路由键也是无视的。 这个交换机在接收到消息后,会直接转发到绑定到它上面的所有队列 Direct Exchange 直连型交换机,根据消息携带的路由键将消息投递…

日语学习-日语知识点小记-进阶-JLPT-真题训练-N2阶段(4):2022年12月2023年12月

日语学习-日语知识点小记-进阶-JLPT-真题训练-N2阶段(4):2022年12月&2023年12月 1、前言(1)情况说明(2)工程师的信仰(3)真题训练 2、2个卷的单词部分1、 真题-2023年…

从代码学习深度强化学习 - Actor-Critic 算法 PyTorch版

文章目录 前言算法原理1. 从策略梯度到Actor-Critic2. Actor 和 Critic 的角色3. Critic 的学习方式:时序差分 (TD)4. Actor 的学习方式:策略梯度5. 算法流程代码实现1. 环境与工具函数2. 构建Actor-Critic智能体3. 组织训练流程4. 主程序:启动训练5. 实验结果总结前言 在深…

Python 数据分析与可视化 Day 8 - Pandas 高级操作技巧

✅ 今日目标 掌握 Pandas 的索引体系(Index / MultiIndex)使用 set_index() 和 reset_index() 管理数据索引理解 pivot_table 与 melt、stack/unstack 重塑数据形态初步理解“宽表”与“长表”在数据分析与可视化中的应用场景 📚 一、深入理…

Spring Boot整合百度AI人脸比对实战

目录 一、简述 二、依赖 三、代码步骤 3.1 实体注入 3.2 服务实现 3.3 其它实现 四、小结 欢迎来到 盹猫(>^ω^<)的博客 本篇文章主要介绍了 [Spring Boot整合百度AI人脸比对实战] ❤博主广交技术好友&#xff0c;喜欢文章的可以关注一下❤ 一、简述 人脸识别在日…

使用 pip 安装 numpy 包卡在 Preparing metadata 阶段问题解决

TOC 1 问题描述 使用 pip 安装numpy卡在下面最后一行的阶段&#xff1a; Collecting numpy1.26.4 (from -r requirements.txt (line 2))Using cached https://mirrors.aliyun.com/pypi/packages/65/6e/09db70a523a96d25e115e71cc56a6f9031e7b8cd166c1ac8438307c14058/numpy-…