自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 K8s控制平面升级

控制平面(Master 节点):可以理解成集群的 “大脑”,负责管整个集群的状态:比如调度 Pod、维护集群配置、提供 API 接口,核心组件有,还有存数据的 etcd。工作节点(Worker 节点):就是真正跑你业务 Pod 的机器,上面跑kubelet来管理本地的 Pod。先升级控制平面,再升级工作节点。因为控制平面要向下兼容旧版本的工作节点,保证你升控制平面的时候,旧版本的工作节点还能正常工作,业务不会断。

2026-04-18 16:21:04 16

原创 K8s访问控制

Kubernetes 的访问控制,是集群安全的基础,从身份管理,到权限管控,再到网络隔离,这一套体系下来,就能把你的集群的安全管好,避免误操作、避免非法访问,让你的生产集群更安全。

2026-04-18 15:42:02 107

原创 K8s Secret :敏感数据管理的正确姿势

如果你的敏感数据是文件,比如 SSH 私钥、证书,那你可以把 Secret 挂载成容器里的文件,应用直接读文件就能拿到数据,这个方式比环境变量更安全,因为环境变量会被子进程继承,很容易泄露,而文件就不会有这个问题。:很多人以为 Secret 里的数据是加密的,其实不是,它只是做了个 Base64 编码,任何人只要能拿到你的 Secret,一秒就能解码拿到明文,Secret 的安全靠的是权限控制,不是编码。:就算是 Secret 的配置,也别传到公共仓库,会泄露你的敏感数据,最好单独存在本地。

2026-04-17 00:19:54 308

原创 ConfigMap

正式环境一律用 YAML 管理 ConfigMap,纳入 git 版本控制,别用命令行乱建,不然配置丢了你都不知道。敏感配置永远用 Secret,别用 ConfigMap,安全第一。配置文件用 Volume 挂载,启动参数用环境变量,按需选择,别搞混了。需要热更新的配置,一定要用 Volume 挂载,不然改了配置不生效。

2026-04-16 23:36:09 337

原创 K8s存储卷入门

默认的容器里,存储是跟容器绑定的:容器跑着的时候,你能往里面写文件,但是一旦容器崩了、删了,这些文件就全没了 —— 你要是用容器跑个数据库,重启之后数据全没了还有个常见的需求:同一个 Pod 里的两个容器,要共享文件。比如一个容器跑应用,生成日志,另一个容器跑日志收集工具,要把日志传到远程存储,这俩容器得能读到同一份日志文件才行。。容器删了,只要卷还在,数据就还在;同时,卷能被多个容器挂载,实现文件共享。

2026-04-13 17:48:03 723

原创 从HTTP到K8s探针:彻底搞懂HTTPGet健康检查

很多人搞不懂的配置,其实也非常好理解:它和你用 curl 的时候加的参数,是完全一模一样的东西。那 kubelet 发出去的 HTTP 请求,就会自动带上这个请求头,就和你在终端里执行下面这条 curl 命令的效果,100% 完全一样curl -H "Custom-Header: Awesome" http://容器IP:80/health你可能会问,好好的为什么要加这个东西?因为有些服务的健康检查接口,做了特殊的限制: 比如有些服务要求,只有带了。

2026-04-13 15:27:11 305

原创 Kubernetes服务发现

有 NodePort、LoadBalancer 了,为什么还要搞个 Ingress?直到开始部署多个服务,才明白:用 NodePort 的话,每个服务要开一个不同的端口,我有 10 个服务,就要记 10 个端口,太麻烦了用 LoadBalancer 的话,每个服务要一个独立的公网 IP,10 个服务就要 10 个 IP,成本太高了而 Ingress,就是解决这个问题的:它可以让你用一个公网 IP,管理所有的服务的请求,转发到 A 服务的请求,转发到 B 服务test.com/a。

2026-04-12 20:00:13 413

原创 K8s控制器学习难点

学完这六个控制器,我最大的感受就是,K8s 的设计真的特别清晰,不同的场景用不同的控制器,把不同的能力拆分开:无状态应用用 Deployment有状态应用用 StatefulSet节点级组件用 DaemonSet一次性任务用 Job定时任务用 CronJob搞懂这些,K8s 的应用部署就基本通了,希望我的踩坑总结能帮到同样在学习的朋友~

2026-04-12 18:05:41 516

原创 kubernetes Pod难点

Pod 一直卡 Init?别慌,查看 Init 容器的日志,看看初始化任务哪里出错了,改了就好。进入容器改了内容,重启就没了?因为你改的是容器的临时可写层,镜像本身没变,容器重建就会丢,要永久改的话,要么改镜像,要么用持久化存储。Pod 删了又回来?大概率是静态 Pod,别用 kubectl 删了,去节点上把配置文件删掉才行。别啥容器都往一个 Pod 里塞!只有紧密耦合的才放一起,独立的程序分开做 Pod。。

2026-04-12 15:15:19 342

原创 K8s 标签

完整标签键(冒号前)值(冒号后)用途versionv1.1.0标记应用版本releasestable标记版本状态(正式版 / 测试版)env: devenvdev标记运行环境(开发 / 生产)app: nginxappnginx标记应用名称标签是key: value的键值对,冒号前是「分类的维度(键)」,冒号后是「分类的具体值(值)」;键分「可选前缀 + 必须名称」,值规则宽松,核心作用是给资源打标记、方便筛选和批量管理;

2026-04-11 11:19:26 662

原创 K8s 不部署源代码、不构建应用

CD 工具(比如 Argo CD、Jenkins)从 Harbor 拉取更新 K8s 的 Deployment YAML,把镜像版本改成K8s 收到更新请求后,执行滚动更新拉取新镜像创建新 Pod,启动容器销毁旧 Pod确保最终运行的 Pod 数量符合期望这里 K8s 只做「运行容器」的事,完全不关心镜像怎么来的。K8s 是「容器的运行平台」,不是「代码的构建平台」。它只负责运行已经打包好的容器,不负责把代码变成容器的过程。

2026-04-10 18:35:42 485 1

原创 一个 Pod 从无到有的完整创建过程

K8s 的,是一个的抽象。它代表 “一台虚拟机”,里面有独立的网络、存储。:运行在这台 “虚拟机” 里的。一个 Pod 里至少有一个业务容器,通常还会有一个pause基础容器来共享网络命名空间。。前面的控制流程都是在处理 “房子”,最后一步才是在房子里启动 “家具”。

2026-04-10 01:30:00 915

原创 CGroup 资源限制原理

摘要: CGroup(控制组)是Linux内核的资源管理机制,用于解决容器资源限制问题。Namespace仅提供视图隔离,无法限制资源使用,而CGroup通过子系统(如memory、cpu)为进程组设置资源上限(如内存100M、CPU 50%),防止单个容器耗尽宿主机资源,确保系统稳定性。实验通过创建内存控制组并限制为100M,验证了CGroup对进程内存占用的有效管控。Docker和K8s的资源限制(如--memory、--cpus)均基于CGroup实现,与Namespace共同构成容器技术的核心支柱。

2026-04-09 23:30:00 360

原创 手工模拟一个容器

光有隔离(Namespace)还不够,容器还要有独立的文件视图和网络设备,这才是完整的 “手工容器”。你会发现,虽然用了--pid隔离,但如果不挂载新的 proc,执行ps -ef还是能看到宿主机进程。原理/proc目录是内核给进程看的资源列表。操作:效果:重新执行ps -ef你只能看到自己的 bash 进程了!PID 命名空间彻底生效。“进程本质上是 /proc 挂载点中的文件描述符”。容器需要独立的网络,但又要能和宿主机通信。所以用Veth Pair(虚拟网线)。原理。

2026-04-09 19:00:34 550

原创 OCI 镜像标准 ↔ Docker 镜像分层原理

容器镜像是一个分层存储的归档文件(通常为 Tar 格式),包含运行容器所需的所有静态文件和元数据。其核心设计遵循开放容器倡议(OCI)标准,主要包含以下两部分容器镜像不是 Docker 发明的,而是有全球统一的行业标准(OCI 标准),Docker 只是这个标准的一个实现。核心对应:Docker 镜像完全遵循 OCI 标准OCI 标准定义了容器镜像的本质:分层存储的归档文件,由layer.tar(分层文件)、(分层索引)、(运行配置)组成;

2026-04-07 18:20:58 393

原创 K8s 容器启动全流程:从 kubelet 到 Linux 内核

kubelet 只负责 "我要启动一个容器",至于底层用什么运行时、怎么启动,kubelet 完全不关心,只要你符合 CRI 标准,就能对接,这也是 K8s 能支持这么多容器运行时的原因。这也是容器为什么这么轻量的原因:容器不是虚拟化,它就是一个被内核隔离、限制的普通进程,所有能力都是内核早就有的,Docker/CRI-O 只是把这些能力打包成了好用的工具而已。runc 启动完容器内的进程之后,容器就正式运行起来了,这时候它就是一个独立的、被隔离的进程,有自己的环境,跑我们的业务应用。

2026-04-07 16:00:13 426

原创 NFS 自动挂载:autofs 与 systemd.automount

autofs 是通用方案,支持复杂场景(多共享、通配符),但需要理解「主 + 子」映射文件的层级;systemd.automount 是极简方案,仅支持单共享,无需额外安装,改 fstab 即可;无论哪种方案,挂载选项优先加 soft(避免服务器断网卡死),sync(保证数据同步)。

2026-04-01 19:17:15 383

原创 Linux 启动过程

如果没有 initramfs 的支撑,内核启动后根本无法识别系统盘,直接卡在 “找不到根文件系统” 的致命阶段。很多人对 “内核启动” 有基础认知,却极易忽略 initramfs(临时初始化文件系统)的核心作用,甚至系统启动失败后,都想不到问题根源出在这里。新手重置 root 密码时,往往只记得核心的 “改密码” 步骤,却忽略 SELinux 安全上下文的自动重标记,导致重启后密码修改无效、无法登录系统。这一步是重置密码的 “收尾关键”,跳过则必然导致密码修改无效,这也是 90% 新手踩坑的核心点。

2026-04-01 17:50:08 459

原创 SELinux

SELinux 给进程、文件、端口等所有资源分配的一个身份标签核心字段type(类型)——SELinux 策略主要通过type来判断访问是否合法。httpd进程的类型是httpd_t,网站根目录文件的类型是,只有这两个类型匹配时,httpd才能读取网站文件。查看方式ls -Zps -Z端口上下文:给自定义端口打标签,让服务能监听文件上下文:给自定义目录设置安全类型(如前文/custom示例)模块策略:用从日志生成策略模块,解决特殊拦截场景。

2026-03-30 17:30:00 341

原创 Linux管理基本存储重难点

操作差异记1点:GPT创建分区时可以给分区起名字(如mkpart usersdata xfs 2048s 1000MB),MBR不能起名,只能选primary(主分区)或logical(逻辑分区)。创建Swap后忘记激活,或者没写入fstab,导致重启后Swap失效;:创建分区时,开始位置固定填2048s(2048个扇区),这是标准的分区对齐方式,能最大化硬盘性能,不用记其他数值,直接用2048s即可。:删除分区后,忘记删除/etc/fstab中对应的挂载配置,导致开机时系统找不到分区,报错无法启动。

2026-03-30 13:10:04 173

原创 Linux 日志系统最容易混淆的核心难点:journal 与 rsyslog 到底啥关系

journald管「全量采集 + 高速检索」,rsyslog管「分类归档 + 文本存储」默认 journal 日志存在内存,重启就丢,必须配置才会持久化到磁盘排查实时问题用journalctl,回溯历史问题看/var/log下的文本日志。

2026-03-27 20:30:00 207

原创 使用正则表达式匹配文本

正则表达式是,用于在文本(日志、配置文件、命令输出)中快速查找、筛选符合规则的内容,结合grep命令是系统管理中的核心工具,vim/less 等工具也支持正则表达式。

2026-03-27 15:59:50 312

原创 shell脚本中的循环和条件结构

纯命令组合的脚本无法处理和,Bash 提供了for循环(处理重复任务)和if/then系列条件结构(处理分支判断),并通过和实现脚本的逻辑控制,是脚本从 “简单命令组合” 到 “智能程序” 的核心。

2026-03-26 21:15:00 323

原创 编写简单的shell

空格等),默认会被 shell 解析为特殊含义,若需使用字符的。表示将输出从 STDOUT 重定向到 STDERR。,便于日志分离(正常信息和错误信息分开存储)。命令直接输出,内容会显示在终端,例。(原始含义),需通过。

2026-03-26 17:01:15 219

原创 Linux 文件系统

Linux 用于管理存储设备上数据的组织方式,RHEL 9 有明确的文件系统使用规范:本地默认:XFS(高性能,适合企业级本地存储)兼容支持:ext4(经典 Linux 文件系统,向下兼容)可移动介质:exFAT(RHEL 9 新增,解决 U 盘 / 移动硬盘跨系统兼容问题)集群共享:GFS2(多节点服务器集群的共享磁盘管理,支持并发访问)(mount point):Linux 中目录是文件系统的访问入口,将文件系统关联到目录的操作叫挂载,该目录即为挂载点。

2026-03-23 20:39:40 395 1

原创 系统负载与性能排查

负载 = 等待 CPU 的进程数(R 状态) + 等待 I/O 的进程数(D 状态) 的排队长度。uptime 或 w 命令能看到 3 个数字:load average: 0.45, 0.32, 0.28第一个:1 分钟平均负载第二个:5 分钟平均负载第三个:15 分钟平均负载。

2026-03-19 20:32:54 16

原创 特殊权限(SUID / SGID / Sticky)与默认权限:umask

只对可执行文件有效运行时以文件所有者身份执行,不是以当前用户身份。

2026-03-19 20:06:31 29

原创 更改 Shell 环境

定义:Shell 会话中临时存储数据的容器,仅当前 Shell 生效(关闭终端后丢失)。语法规则:变量名:仅包含字母、数字、下划线,区分大小写,不能以数字开头(如 FILE1 有效,1FILE 无效)。赋值:变量名=值(等号前后无空格,值含空格需用引号包裹,如 NAME="John Doe")。取值:$变量名 或 ${变量名}(推荐用 ${} 避免歧义,如 ${COUNT}x 不会误判为 $COUNTx)。

2026-03-17 00:58:57 44

原创 快速上手 Ansible Playbook 实施

每个 Play 可单独配置remote_user(远程用户)、become(是否提权)、become_method(提权方式,如 sudo)、become_user(提权目标用户),覆盖全局配置;

2026-03-10 21:32:39 370

原创 Shell中的sed

其中,“sed” 是核心的流编辑器指令,“s” 代表替换操作符,第一个 “/” 之后的 “pattern” 是需要查找的目标模式,第二个 “/” 后的 “REPLACEMENT” 是用于替换的内容,最后一个 “/” 标志着命令结束。“/first/,/last/” 是动态的模式范围,即从包含 “first” 的行开始,到包含 “last” 的行结束,“s/line/LINE/g” 命令会在该范围内将所有 “line” 替换为 “LINE”,范围的确定基于文本内容。

2026-01-30 08:03:59 724

原创 LVM创建逻辑卷:-L和-l选项到底该用哪个?

使用`-l`选项创建LV 命令:`lvcreate -n test2 -l 100 servera_group` 结果:`lvdisplay`显示LV大小为400.00 MiB(100×4M/PE),与`-L 400M`效果完全相同。什么时候用`-L 400M`,什么时候用`-l 100`?3. 避坑点:使用`-l`时,必须先通过`vgdisplay`查看卷组的PE大小,否则会因PE大小不同导致实际容量与预期不符(比如PE=8MiB时,`-l 100`会创建800MiB的LV,而非400MiB)。

2026-01-22 23:25:22 372

原创 当系统存在多个swap分区时,系统会优先使用哪个?能不能手动调整使用顺序?

总结:1. 多个swap分区的使用顺序由优先级决定,通过/etc/fstab的pri参数可手动调整,数值越高优先级越高。2. 配置持久化时,无论是文件系统挂载还是swap激活,都要精准掌握配置格式,建议配置后用相应命令验证(如mount -a、swapon -a)。多个swap分区共存时,系统会根据优先级(PRIO值)决定使用顺序,优先级数值越高,越先被使用。编辑编辑 /etc/fstab 文件,添加优先级配置 /etc/fstab 文件,添加优先级配置。验证结果 用swapon --show命令查看。

2026-01-22 08:25:36 84

原创 IPv6 网络

【代码】IPv6 网络。

2025-08-06 22:15:00 689

原创 IPv4网络

子网掩码是 32 位二进制数,与 IP 地址配合使用子网掩码中 “1” 的位置对应 IP 地址的 “网络位”,“0” 对应 “主机位”。例:IP+ 子网掩码(二进制→ 网络位:前 24 位(192.168.1),主机位:后 8 位(10IPv4 是互联网的 “基石”,其核心是通过 32 位地址标识设备,并通过子网划分、路由选择实现数据跨网络传输。

2025-08-06 13:45:00 1303

原创 Linux 系统中的密钥对(公钥 + 私钥)

免密码登录:提升效率,避免密码泄露风险。安全加密:确保数据只能被目标方解密,或验证数据来源真实性。

2025-08-06 08:00:00 1062

原创 Linux 系统中 “特殊权限”

它是 Linux 里除了读(r)、写(w)、执行(x)这些基础权限外,更 “特殊” 的权限类型,能实现一些额外、更细粒度的访问控制逻辑。suid:让执行文件的人,临时获得 “文件所有者身份”,常用于需要提权的系统命令(如passwdsgid:对文件是 “继承所属组身份执行”;对目录是 “新建文件继承目录的所属组”,适合多用户协作的共享目录。sticky:给目录加 “保护”,让用户只能删自己的文件,避免目录里文件被乱删,典型场景就是/tmp。

2025-08-05 22:27:12 287

原创 Linux中的 进程 服务 服务单元

进程:程序运行的实例,是系统资源分配的最小单位。服务:后台长期运行的功能程序,由进程实现,需被管理。服务单元:systemd 管理服务的配置文件,定义服务的启动规则和进程控制策略。三者协同工作:通过服务单元配置服务,服务通过进程提供功能,进程的生命周期由服务单元和服务管理逻辑共同控制,最终实现系统的稳定运行。

2025-07-29 17:07:59 829

原创 Linux 中进程状态的转换

1. 初始创建(new) - 通过 `fork` 系统调用创建新进程,此时进程刚诞生,资源未完全就绪,是“新生待调度”状态,下一步会经 `schedule`(调度器安排)进入 **Runnable(就绪)** ,等待 CPU 分配。(5)Zombie(僵尸,Z) - 进程执行完(`exit` 后),残留“PCB 控制块”,保存退出状态等信息,等父进程通过 `wait` 系列调用“收割”(`reap`),之后彻底销毁(X 状态,图中简化为最终清理 )。**Linux 进程状态转换图**

2025-07-27 14:39:41 430

原创 Linux中 进程的生命周期

变成僵尸(zombie):子进程退出后,并不会立刻“消失”,而是残留 **PCB(进程控制块),保存“退出状态、返回值”等信息,变成“僵尸进程”,等待 父进程“收尸”(父进程通过 `wait`/`waitpid` 读取状态,释放资源 )。1. 进程创建(fork) - 初始有一个 `process`(可理解为“父进程原型”),通过 `fork` 系统调用** ,“复制”出两个关联进程: - parent process(父进程):原进程继续执行,逻辑上“继承”原流程,后续可监控、管理子进程。

2025-07-23 13:52:17 277

原创 红帽企业Linux入门

Fedora:针对开发者和技术爱好者,让他们能体验最新的开源技术和软件,为开发者提供测试新特性和开发应用的平台。更注重新技术和新特性的引入,更新速度快。三者都以 Red Hat 公司的技术为支撑,都依赖于 Linux 内核,并且在安全、性能和兼容性等方面继承了 Red Hat 严格的质量标准和开发流程。这类发行版把稳定性、安全性和技术支持放在首位,会经过严格测试和优化,能确保在长时间运行中保持稳定,降低系统故障和安全风险。不过,其稳定性和技术支持相对有限,适合技术爱好者、开发者和对新技术有追求的用户。

2025-03-30 01:07:00 399 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除