<?xml version='1.0' encoding='UTF-8'?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0"><channel><title>Frostnova</title><link>https://sin210.github.io</link><description>I… volunteer to join Rhodes Island.</description><copyright>Frostnova</copyright><docs>http://www.rssboard.org/rss-specification</docs><generator>python-feedgen</generator><image><url>https://avatars.githubusercontent.com/u/264126132?v=4&amp;size=64</url><title>avatar</title><link>https://sin210.github.io</link></image><lastBuildDate>Fri, 13 Mar 2026 07:22:28 +0000</lastBuildDate><managingEditor>Frostnova</managingEditor><ttl>60</ttl><webMaster>Frostnova</webMaster><item><title>为什么需要gitlab作为代码保存</title><link>https://sin210.github.io/post/wei-shen-me-xu-yao-gitlab-zuo-wei-dai-ma-bao-cun.html</link><description>要理解“为什么不能直接向Jenkins提交代码，必须用GitLab（或GitHub/Git）保存代码”，核心是**两者的核心定位完全不同**——GitLab是「代码仓库+版本管理」的基础设施，Jenkins是「自动化执行引擎」，直接向Jenkins提交代码会违背DevOps的核心逻辑，还会引发一系列致命问题。</description><guid isPermaLink="true">https://sin210.github.io/post/wei-shen-me-xu-yao-gitlab-zuo-wei-dai-ma-bao-cun.html</guid><pubDate>Fri, 13 Mar 2026 07:21:53 +0000</pubDate></item><item><title>如何进行代码检查</title><link>https://sin210.github.io/post/ru-he-jin-xing-dai-ma-jian-cha.html</link><description>## 一、先搞懂：代码检查的核心类型
流水线中的代码检查不是单一环节，而是分层的自动化校验，主要分 4 类：

| 检查类型       | 检查目标                                  | 常用工具                          |
|----------------|-------------------------------------------|-----------------------------------|
| 代码格式/规范  | 缩进、命名、注释、代码风格统一            | ESLint（JS/TS）、Pylint（Python）、CheckStyle（Java）、Prettier（通用格式化） |
| 静态代码分析   | 语法错误、逻辑漏洞、未定义变量、空指针等  | SonarQube（多语言）、PMD（Java）、Flake8（Python）、Cppcheck（C++） |
| 安全扫描       | 敏感信息泄露、依赖漏洞、SQL注入、XSS等    | OWASP ZAP、Snyk、Trivy、Bandit（Python） |
| 代码复杂度/规范 | 圈复杂度、重复代码、不符合团队规范的写法  | SonarQube、CodeClimate            |

## 二、核心流程：流水线中代码检查的执行步骤
以最常用的 **GitLab CI/GitHub Actions** 为例，代码检查的通用流程如下：
```mermaid
graph TD
    A[开发者提交代码到Git仓库] --&gt; B[触发CI流水线]
    B --&gt; C[拉取代码+准备环境（安装检查工具）]
    C --&gt; D[第一步：代码格式检查（快速失败）]
    D --&gt;|通过| E[第二步：静态代码分析]
    D --&gt;|失败| F[流水线终止，返回错误信息]
    E --&gt;|通过| G[第三步：安全扫描+依赖检查]
    E --&gt;|失败| F
    G --&gt;|通过| H[进入编译/测试阶段]
    G --&gt;|失败| F
```

### 关键细节：
1. **快速失败（Fast Fail）**：把最快的格式检查放在最前面，一旦失败立刻终止流水线，节省资源。</description><guid isPermaLink="true">https://sin210.github.io/post/ru-he-jin-xing-dai-ma-jian-cha.html</guid><pubDate>Fri, 13 Mar 2026 07:17:12 +0000</pubDate></item><item><title>DevOps 是什么</title><link>https://sin210.github.io/post/DevOps%20-shi-shen-me.html</link><description>**DevOps = Development + Operations**
是一套**文化、流程、工具**的组合，目的是让**开发、测试、运维**高效协作，把软件**更快、更稳、更频繁**地交付上线。</description><guid isPermaLink="true">https://sin210.github.io/post/DevOps%20-shi-shen-me.html</guid><pubDate>Fri, 13 Mar 2026 07:08:34 +0000</pubDate></item><item><title>如何下载openclaw</title><link>https://sin210.github.io/post/ru-he-xia-zai-openclaw.html</link><description>在 Ubuntu 下安装 OpenClaw，优先用**一键脚本**（新手友好），也可手动用 npm 或 Docker 安装。</description><guid isPermaLink="true">https://sin210.github.io/post/ru-he-xia-zai-openclaw.html</guid><pubDate>Fri, 13 Mar 2026 06:58:59 +0000</pubDate></item><item><title>openclaw如何使用</title><link>https://sin210.github.io/post/openclaw-ru-he-shi-yong.html</link><description># CentOS 7 部署 OpenClaw 完整指南
## 一、部署方案对比
|方案|适用场景|优势|劣势|
| ---- | ---- | ---- | ---- |
|Docker 官方镜像|追求快速部署、环境隔离、稳定运行|绕过所有系统依赖限制，一键启动|需要安装 Docker 环境|
|Node.js 原生安装|需要深度定制、开发调试|完全控制源码，可二次开发|依赖复杂，需手动配置 Node.js 22、GCC 9 等|

## 二、方案一：Docker 官方镜像部署（强烈推荐）
此方式为 CentOS 7 上最快速、最稳定的部署方式，可完全绕过 Node.js 版本和系统依赖的限制。</description><guid isPermaLink="true">https://sin210.github.io/post/openclaw-ru-he-shi-yong.html</guid><pubDate>Wed, 11 Mar 2026 12:50:27 +0000</pubDate></item><item><title>redis怎么升级</title><link>https://sin210.github.io/post/redis-zen-me-sheng-ji.html</link><description># Redis 升级超详细笔记（可直接抄到笔记软件）
## 一、升级前必须搞懂的基础
1. **Redis 版本规则**
    - 小版本：如 6.2.5 → 6.2.10，**兼容、无风险**
    - 大版本：如 6.x → 7.x → 8.x，**可能不兼容**，必须先测
2. **升级核心原则**
    - 先备份、再测试、后上线
    - 生产环境：**滚动升级，不停服**
    - 单机：允许短停机
3. **必须确认的信息**
    - 当前版本：`redis-cli INFO server | grep redis_version`
    - 数据目录：`redis-cli CONFIG GET dir`
    - 配置文件：`redis-cli CONFIG GET config-file`
    - 是否开启 AOF：`redis-cli CONFIG GET appendonly`
    - 是否主从/集群/Sentinel

---

## 二、升级前必做准备（任何场景都要）
### 1. 备份数据（强制）
```bash
# 手动触发 RDB 快照
redis-cli SAVE

# 备份数据目录（把 dir 结果填进去）
cp -r /var/lib/redis /var/lib/redis.bak.$(date +%Y%m%d)

# 备份配置文件
cp /etc/redis/redis.conf /etc/redis/redis.conf.bak.$(date +%Y%m%d)
```

### 2. 检查数据完整性
```bash
# 检查 RDB
redis-check-rdb /var/lib/redis/dump.rdb

# 检查 AOF（如果开启）
redis-check-aof /var/lib/redis/appendonly.aof
```

### 3. 停写、观察业务（可选但推荐）
- 观察 QPS、内存、命中率
- 可临时做**流量降级/只读**，避免升级时数据不一致

---

## 三、单机 Redis 升级（最简单，允许停机）
### 步骤
1. **停止旧版 Redis**
    ```bash
    redis-cli SHUTDOWN
    # 或 systemctl stop redis
    ```
2. **安装新版本（源码示例）**
    ```bash
    wget https://download.redis.io/releases/redis-7.2.5.tar.gz
    tar zxf redis-7.2.5.tar.gz
    cd redis-7.2.5
    make -j$(nproc)
    sudo make install
    ```
3. **用旧配置启动**
    ```bash
    redis-server /etc/redis/redis.conf
    # 或 systemctl start redis
    ```
4. **验证**
    ```bash
    redis-cli PING          # 返回 PONG
    redis-cli INFO server | grep redis_version
    redis-cli DBSIZE        # 看数据条数
    ```

---

## 四、主从 + Sentinel 高可用升级（生产最常用）
### 目标：**零停机滚动升级**
### 顺序：
**从节点 → 全部升级 → 切换主节点 → 升级原主节点**

### 1. 升级所有从节点（逐个）
```bash
# 登陆从节点
redis-cli -h 从IP SHUTDOWN

# 安装新版本（同上）

# 启动新版
redis-server /etc/redis/redis.conf

# 检查主从状态
redis-cli -h 从IP INFO replication
# 看到 master_link_status:up 说明同步正常
```

### 2. 手动触发主从切换（Sentinel）
```bash
redis-cli -p 26379 SENTINEL failover 主节点名称
```
- 等待：新主升主，旧主变从
- 检查：`INFO replication`

### 3. 升级原来的主节点
现在它已经是从节点，**直接按从节点步骤升级**。</description><guid isPermaLink="true">https://sin210.github.io/post/redis-zen-me-sheng-ji.html</guid><pubDate>Wed, 11 Mar 2026 08:11:33 +0000</pubDate></item><item><title>Pod 生命周期</title><link>https://sin210.github.io/post/Pod%20-sheng-ming-zhou-qi.html</link><description>Pod 是 Kubernetes（K8s）中最小的部署单元，其生命周期是从**创建到终止**的完整过程，核心包含「阶段划分」「关键钩子」「终止流程」三大核心部分，以下是适合笔记的精简版总结：

## 一、核心阶段（Phase）
Pod 的生命周期会表现为不同阶段，仅反映宏观状态，不代表容器具体状态：
| 阶段         | 含义                                                                 |
|--------------|----------------------------------------------------------------------|
| Pending      | Pod 已被 K8s 接受，但容器尚未创建（或正在创建），如拉取镜像、调度中   |
| Running      | Pod 已调度到节点，所有容器已创建，至少一个容器处于运行/启动/重启状态   |
| Succeeded    | Pod 中所有容器都已正常终止，且不会重启（如一次性任务 Job 类型 Pod）   |
| Failed       | Pod 中所有容器已终止，至少一个容器异常退出（退出码非 0）               |
| Unknown      | K8s 无法获取 Pod 状态（如节点失联）                                 |

## 二、关键生命周期钩子（Hook）
K8s 提供钩子让用户在 Pod 容器生命周期的关键节点执行自定义逻辑，是核心扩展能力：
### 1. 启动钩子（PostStart）
- 触发时机：容器创建完成后（立即触发，不保证在容器进程启动前执行）
- 用途：初始化配置、注册服务、加载数据等
- 示例（YAML 片段）：
  ```yaml
  spec:
    containers:
    - name: nginx
      image: nginx
      lifecycle:
        postStart:
          exec:
            command: ['/bin/sh', '-c', 'echo '容器启动完成' &gt; /tmp/start.log']
  ```

### 2. 终止钩子（PreStop）
- 触发时机：容器终止前（默认有30s宽限期，超时强制杀死）
- 用途：优雅关闭服务、保存数据、通知上下游
- 示例（YAML 片段）：
  ```yaml
  spec:
    containers:
    - name: nginx
      image: nginx
      lifecycle:
        preStop:
          exec:
            command: ['/bin/sh', '-c', 'nginx -s quit'] # 优雅关闭nginx
  ```

## 三、Pod 终止流程（优雅退出）
Pod 不会被直接杀死，K8s 会按固定流程终止，保证服务无感知：
1. K8s 向 Pod 发送终止信号（TERM），并标记 Pod 为 Terminating 状态；
2. Pod 从服务端点（Service）中移除，不再接收新请求；
3. 触发 PreStop 钩子（如果配置）；
4. 等待宽限期（默认30s，可通过 `terminationGracePeriodSeconds` 修改）；
5. 宽限期内容器自行退出，超时则发送 SIGKILL 强制杀死容器；
6. K8s 清理 Pod 资源，删除 Pod 对象。</description><guid isPermaLink="true">https://sin210.github.io/post/Pod%20-sheng-ming-zhou-qi.html</guid><pubDate>Tue, 10 Mar 2026 13:01:09 +0000</pubDate></item><item><title>性能指标中「颗粒度」概念详解</title><link>https://sin210.github.io/post/xing-neng-zhi-biao-zhong-%E3%80%8C-ke-li-du-%E3%80%8D-gai-nian-xiang-jie.html</link><description>## 一、颗粒度核心定义
在OPS/TPS/QPS等系统性能指标中，**颗粒度**指的是**指标统计的最小单位**，本质是衡量性能数据的**统计精细程度**，决定了我们从「微观技术动作」还是「宏观业务流程」维度评估系统能力。</description><guid isPermaLink="true">https://sin210.github.io/post/xing-neng-zhi-biao-zhong-%E3%80%8C-ke-li-du-%E3%80%8D-gai-nian-xiang-jie.html</guid><pubDate>Tue, 10 Mar 2026 12:55:42 +0000</pubDate></item><item><title>面试回答记录</title><link>https://sin210.github.io/post/mian-shi-hui-da-ji-lu.html</link><description>**面试官**：你最近一个项目是某食品数字化零售项目，你在其中用到了哪些技术栈？做了哪些工作？

**你**：这个项目是食品行业线上线下一体化零售平台，我主要负责**后端服务、容器化部署、CI/CD 与运维保障**这块。</description><guid isPermaLink="true">https://sin210.github.io/post/mian-shi-hui-da-ji-lu.html</guid><pubDate>Tue, 10 Mar 2026 02:49:19 +0000</pubDate></item><item><title>pod的生命周期总结（对话版）</title><link>https://sin210.github.io/post/pod-de-sheng-ming-zhou-qi-zong-jie-%EF%BC%88-dui-hua-ban-%EF%BC%89.html</link><description># Pod生命周期 面试对话版（带笔记标注，适合总结）
## 场景设定
**场景**：云计算/运维岗位面试，针对K8s核心概念的深度提问
**你**：（提前梳理好逻辑，结合笔记关键词回应，语气专业且流畅）

### 对话正文
**面试官**：您好，请结合实际应用，详细说说Pod的完整生命周期，包括关键阶段、核心机制和常见状态变化。</description><guid isPermaLink="true">https://sin210.github.io/post/pod-de-sheng-ming-zhou-qi-zong-jie-%EF%BC%88-dui-hua-ban-%EF%BC%89.html</guid><pubDate>Tue, 10 Mar 2026 02:35:02 +0000</pubDate></item><item><title>Shell脚本核心符号体系</title><link>https://sin210.github.io/post/Shell-jiao-ben-he-xin-fu-hao-ti-xi.html</link><description>---

# Shell脚本核心符号（Linux运维必备）
Shell符号是脚本的'键盘魔法'，按功能分类梳理如下：

## 一、引号符号（字符转义/命令替换）
| 符号 | 语法示例 | 输出结果 | 核心作用 |
|------|----------|----------|----------|
| 单引号 `'` | `name='World'`&lt;br&gt;`echo 'Hello $name'` | `Hello $name` | 完全转义，所有特殊字符原样输出 |
| 双引号 `'` | `name='World'`&lt;br&gt;`echo 'Hello $name'` | `Hello World` | 保留变量引用，转义大部分特殊字符 |
| 反引号 `` ` `` | `current_date=`date`&lt;br&gt;`echo '当前时间: $current_date'` | `当前时间: 2026-03-06 10:00:00` | 命令替换（推荐用 `$()` 替代） |

&gt; 🌟 最佳实践：优先用 `$()` 替代反引号，可读性更强且支持嵌套

## 二、变量符号（变量引用/运算）
### 1. 基础变量符号
| 符号 | 语法示例 | 说明 |
|------|----------|------|
| `$` | `name='John'&lt;br&gt;echo $name` | 引用变量（基础用法） |
| `${}` | `name='web'&lt;br&gt;echo ${name}server` | 规范的变量引用，明确变量边界 |
| `$()` | `files=$(ls *.txt)&lt;br&gt;count=$(ls -1 *.txt | wc -l)` | 命令替换（替代反引号） |

### 2. 大括号 `${}` 扩展用法
```bash
# 1. 数组操作
arr=(1 2 3)
echo ${arr[0]}    # 输出1（取第1个元素）
echo ${arr[@]}    # 输出1 2 3（所有元素）
echo ${#arr[@]}   # 输出3（数组长度）

# 2. 参数默认值/赋值
echo ${name:-'匿名用户'}  # name为空时显示默认值
echo ${count:=0}          # count为空时赋值为0并输出

# 3. 字符串截取
filepath='/path/to/file.txt'
echo ${filepath##*/}      # 输出file.txt（从左删除最长匹配）
echo ${filepath%.*}       # 输出/file.tar（从右删除最短匹配）
```

### 3. 算术运算符号
| 符号/命令 | 语法示例 | 输出结果 | 说明 |
|-----------|----------|----------|------|
| `$(( ))` | `echo $((1+2))`&lt;br&gt;`echo $((10%3))` | `3`&lt;br&gt;`1` | 整数算术扩展（支持+、-、*、/、%） |
| `expr` | `result=$(expr 1 + 2)` | `3` | 老式算术命令（注意运算符前后空格） |
| `let` | `let 'sum = 1 + 2'` | `3` | 直接执行算术赋值 |

## 三、重定向符号（输入输出控制）
| 符号 | 语法示例 | 核心作用 |
|------|----------|----------|
| `&gt;` | `echo '内容' &gt; file.txt` | 标准输出覆盖写入文件 |
| `&gt;&gt;` | `echo '新内容' &gt;&gt; file.txt` | 标准输出追加写入文件 |
| `&lt;` | `mysql -u root -p &lt; backup.sql` | 从文件读取输入 |
| `2&gt;` | `command 2&gt; error.log` | 错误输出覆盖写入文件 |
| `2&gt;&gt;` | `command 2&gt;&gt; error.log` | 错误输出追加写入文件 |
| `&amp;&gt;` | `command &amp;&gt; all.log` | 标准输出+错误输出合并覆盖 |
| `2&gt;&amp;1` | `command &gt; output.log 2&gt;&amp;1` | 错误输出重定向到标准输出 |
| `&lt;&gt;` | `exec 3&lt;&gt;file.txt`&lt;br&gt;`read -u 3 line` | 打开文件描述符，支持读写 |

&gt; 💡 常用组合：`command &gt; /dev/null 2&gt;&amp;1`（屏蔽所有输出）

## 四、管道与分隔符（命令执行控制）
| 符号 | 语法示例 | 核心作用 |
|------|----------|----------|
| 管道 `|` | `ps aux | grep nginx`&lt;br&gt;`cat file.txt | grep 'error' | wc -l` | 前命令输出作为后命令输入 |
| 命令分隔 `;` | `cd /tmp; ls; pwd` | 依次执行多个命令（无论前序是否成功） |
| 后台执行 `&amp;` | `long_command &amp;`&lt;br&gt;`nohup command &amp;` | 命令后台运行，不阻塞终端 |
| 错误管道 `|&amp;` | `command |&amp; grep error` | 错误输出+标准输出都进入管道 |

## 五、逻辑运算符（条件执行）
| 符号 | 语法示例 | 逻辑规则 |
|------|----------|----------|
| 逻辑与 `&amp;&amp;` | `cd /tmp &amp;&amp; ls` | 前命令执行成功（返回0），才执行后命令 |
| 逻辑或 `||` | `cd /nonexistent || echo '目录不存在'` | 前命令执行失败（非0），才执行后命令 |
| 逻辑非 `!` | `! command` | 反转命令的退出状态（成功变失败，失败变成功） |

&gt; 📌 示例：`[ -f file.txt ] &amp;&amp; echo '文件存在' || echo '文件不存在'`

## 六、通配符（文件匹配）
| 符号 | 语法示例 | 匹配规则 |
|------|----------|----------|
| `*` | `ls *.txt`&lt;br&gt;`rm /tmp/*` | 匹配任意长度的任意字符 |
| `?` | `ls file?.txt` | 匹配单个任意字符 |
| `[]` | `ls file[1-3].txt`&lt;br&gt;`ls file[abc].txt` | 匹配指定字符/字符范围 |
| `{}` | `touch file{1..5}.txt`&lt;br&gt;`mkdir -p dir{a,b,c}` | 生成字符序列（扩展） |

## 七、比较运算符（条件判断）
### 1. 字符串比较（用 `[ ]` 包裹）
| 运算符 | 语法示例 | 含义 |
|--------|----------|------|
| `=` | `[ '$a' = '$b' ]` | 字符串相等 |
| `!=` | `[ '$a' != '$b' ]` | 字符串不相等 |
| `-z` | `[ -z '$a' ]` | 字符串为空 |
| `-n` | `[ -n '$a' ]` | 字符串非空 |

### 2. 数值比较（用 `[ ]` 包裹）
| 运算符 | 语法示例 | 含义 |
|--------|----------|------|
| `-eq` | `[ $a -eq $b ]` | 等于（equal） |
| `-ne` | `[ $a -ne $b ]` | 不等于（not equal） |
| `-gt` | `[ $a -gt $b ]` | 大于（greater than） |
| `-lt` | `[ $a -lt $b ]` | 小于（less than） |
| `-ge` | `[ $a -ge $b ]` | 大于等于（greater equal） |
| `-le` | `[ $a -le $b ]` | 小于等于（less equal） |

### 3. 文件测试（用 `[ ]` 包裹）
| 运算符 | 语法示例 | 含义 |
|--------|----------|------|
| `-f` | `[ -f file ]` | 文件存在且为普通文件 |
| `-d` | `[ -d dir ]` | 目录存在 |
| `-r` | `[ -r file ]` | 文件可读 |
| `-w` | `[ -w file ]` | 文件可写 |
| `-x` | `[ -x file ]` | 文件可执行 |
| `-s` | `[ -s file ]` | 文件存在且不为空 |

## 八、特殊变量（脚本运行上下文）
| 变量 | 示例 | 含义 |
|------|------|------|
| `$?` | `command; echo $?` | 上一个命令的退出状态（0=成功，非0=失败） |
| `$$` | `echo '当前PID: $$'` | 当前脚本/进程的PID |
| `$#` | `echo '参数个数: $#'` | 脚本接收的参数总数 |
| `$*` | `echo '$*'` | 所有参数作为单个字符串 |
| `$@` | `echo '$@'` | 所有参数作为独立字符串（推荐） |
| `$0` | `echo '脚本名: $0'` | 当前脚本的名称 |
| `$1-$9` | `echo '第一个参数: $1'` | 脚本接收的第1~9个参数 |

## 九、模式匹配与注释符号
### 1. 模式匹配（`[[ ]]` 中使用）
```bash
# 通配符匹配
if [[ $filename == *.txt ]]; then
    echo '文本文件'
fi

# 正则匹配
if [[ $email =~ ^[a-z]+@[a-z]+\.[a-z]+$ ]]; then
    echo '有效邮箱'
fi
```

### 2. 注释符号
```bash
# 单行注释
echo 'Hello'  # 行尾注释

# 多行注释（常用写法）
: &lt;&lt; 'EOF'
这是多行注释
可以写任意内容
EOF
```

---

## 十、实战示例（符号组合运用）
### 示例1：文件备份脚本
```bash
#!/bin/bash
# 备份脚本（综合使用变量、重定向、条件判断）
backup_dir='/backup'
source_dir='/data'
date_str=$(date +%Y%m%d_%H%M%S)  # 命令替换

# 目录存在性判断
if [ -d '$source_dir' ]; then
    echo '开始备份: $source_dir'
    # 压缩备份，错误输出追加到日志
    tar -czf '$backup_dir/backup_$date_str.tar.gz' '$source_dir' 2&gt;&gt; backup.log
    
    # 判断备份是否成功
    if [ $? -eq 0 ]; then
        echo '备份成功: backup_$date_str.tar.gz'
    else
        echo '备份失败，请查看日志' &gt;&amp;2  # 错误输出到标准错误
    fi
else
    echo '源目录不存在' &gt;&amp;2
    exit 1
fi
```

### 示例2：系统监控脚本
```bash
#!/bin/bash
# 系统监控脚本（综合使用算术运算、循环、条件判断）
while true; do
    # CPU使用率（管道+变量提取）
    cpu_usage=$(top -bn1 | grep 'Cpu(s)' | awk '{print $2}' | cut -d'%' -f1)
    
    # 内存使用率（浮点运算）
    mem_info=$(free | awk '/Mem/{printf '%.2f', $3/$2*100}')
    
    # 磁盘使用率
    disk_usage=$(df -h / | awk 'NR==2 {print $5}' | cut -d'%' -f1)
    
    echo 'CPU: ${cpu_usage}%, 内存: ${mem_info}%, 磁盘: ${disk_usage}%'
    
    # CPU告警（浮点比较）
    if (( $(echo '$cpu_usage &gt; 80' | bc -l) )); then
        echo 'CPU使用率过高: ${cpu_usage}%' | mail -s '告警' admin@example.com
    fi
    
    sleep 60  # 休眠60秒
done
```

---

## 学习建议（循序渐进）
1. **优先掌握核心符号**：`$`、`'`、`&gt;`、`&gt;&gt;`、`|`、`&amp;&amp;`、`||`（日常80%场景够用）；
2. **实践验证**：每个符号亲自写小脚本测试，比如 `echo 'test' &gt; file.txt` 查看文件内容；
3. **组合运用**：比如 `ps aux | grep nginx | grep -v grep`（过滤nginx进程，排除自身）；
4. **查阅手册**：通过 `man bash` 查看符号的官方说明，了解边界场景。</description><guid isPermaLink="true">https://sin210.github.io/post/Shell-jiao-ben-he-xin-fu-hao-ti-xi.html</guid><pubDate>Fri, 06 Mar 2026 03:08:53 +0000</pubDate></item><item><title>Linux运维核心知识体系</title><link>https://sin210.github.io/post/Linux-yun-wei-he-xin-zhi-shi-ti-xi.html</link><description>---

# Linux运维核心知识体系（从基础到进阶）
## 一、磁盘管理与LVM
### 1. 磁盘分区
磁盘分区是将物理硬盘划分为独立的逻辑区域，Linux中核心工具及适用场景：
- **fdisk**：MBR分区格式，支持2TB以下磁盘
- **parted**：GPT分区格式，支持大容量磁盘

#### 常用操作
```bash
# 查看磁盘整体情况
fdisk -l

# 进入分区交互操作（以/dev/sdb为例）
fdisk /dev/sdb
# 交互流程：
# n → 新建分区
# p → 选择主分区（扩展分区选e）
# 1 → 分区编号（自定义）
# 回车 → 使用默认起始扇区
# 回车 → 使用默认结束扇区（或指定大小如+100G）
# w → 保存分区表并退出
```

### 2. LVM逻辑卷管理
LVM（Logical Volume Manager）提供动态调整卷大小的灵活磁盘管理方案，核心概念：
| 组件 | 说明 |
|------|------|
| PV（物理卷） | 物理磁盘/分区（如/dev/sdb1） |
| VG（卷组） | 多个PV的集合，形成统一存储池 |
| LV（逻辑卷） | 从VG中划分的可动态调整的逻辑存储单元 |

#### 核心操作流程
```bash
# 1. 创建物理卷(PV)
pvcreate /dev/sdb1

# 2. 创建卷组(VG)，命名为vg01
vgcreate vg01 /dev/sdb1

# 3. 创建逻辑卷(LV)，大小10G，命名为lv01
lvcreate -L 10G -n lv01 vg01

# 4. 格式化并挂载LV
mkfs.ext4 /dev/vg01/lv01
mount /dev/vg01/lv01 /data

# 5. 扩容LV（增加5G）
lvextend -L +5G /dev/vg01/lv01  # 调整逻辑卷大小
resize2fs /dev/vg01/lv01        # 同步文件系统大小
```

## 二、网络管理
### 1. iptables filter表核心链区别
filter表是iptables最常用表，核心链功能：
- **INPUT**：处理进入本机的数据包
- **OUTPUT**：处理从本机发出的数据包
- **FORWARD**：处理经过本机转发的数据包（本机作为路由器时生效）

#### FORWARD链典型配置
```bash
# 启用IP转发（临时生效）
echo 1 &gt; /proc/sys/net/ipv4/ip_forward

# 配置转发规则
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT  # 允许eth0→eth1转发
iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT  # 允许回应包
```

### 2. IP与网关配置
#### 临时配置（重启网络失效）
```bash
# 添加IP地址
ip addr add 192.168.1.100/24 dev eth0

# 添加默认网关
ip route add default via 192.168.1.1
```

#### 永久配置（CentOS/RHEL）
编辑网卡配置文件 `/etc/sysconfig/network-scripts/ifcfg-eth0`：
```ini
BOOTPROTO=static       # 静态IP（dhcp为动态）
IPADDR=192.168.1.100   # 本机IP
NETMASK=255.255.255.0  # 子网掩码
GATEWAY=192.168.1.1    # 默认网关
ONBOOT=yes             # 开机自启
```

## 三、RAID技术对比
| RAID级别 | 优势 | 劣势 | 磁盘利用率 | 适用场景 |
|----------|------|------|------------|----------|
| RAID 0 | 读写速度最快，容量最大化 | 无冗余，单盘故障数据全丢 | 100% | 临时数据、缓存、非重要数据 |
| RAID 1 | 完全冗余，读取性能好 | 写入性能下降，成本高 | 50% | 系统盘、重要数据存储 |
| RAID 5 | 平衡性能和冗余，成本适中 | 写入性能一般，故障重建慢 | (n-1)/n（n为磁盘数） | 文件服务器、通用数据存储 |

#### RAID 5创建示例
```bash
# 创建RAID 5（3块磁盘）
mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd

# 格式化并挂载
mkfs.ext4 /dev/md0
mount /dev/md0 /raid
```

## 四、OSI七层模型
| 层级 | 名称 | 核心协议/技术 |
|------|------|---------------|
| 7 | 应用层 | HTTP、FTP、SSH、DNS |
| 6 | 表示层 | SSL/TLS、JPEG、MPEG |
| 5 | 会话层 | RPC、NetBIOS |
| 4 | 传输层 | TCP、UDP |
| 3 | 网络层 | IP、ICMP、ARP |
| 2 | 数据链路层 | Ethernet、MAC地址 |
| 1 | 物理层 | 网线、光纤、电信号 |

## 五、系统优化要点
### 1. 内核参数优化
编辑 `/etc/sysctl.conf`，添加/修改以下关键参数：
```ini
# 重用TIME-WAIT状态的TCP连接
net.ipv4.tcp_tw_reuse = 1
# 扩大本地端口范围（解决端口耗尽）
net.ipv4.ip_local_port_range = 10000 65000
# 降低swap使用优先级（优先使用物理内存）
vm.swappiness = 10
# 增加系统最大文件描述符数
fs.file-max = 65535
```
生效配置：`sysctl -p`

### 2. 系统资源限制
编辑 `/etc/security/limits.conf`：
```ini
* soft nofile 65535  # 软限制：最大打开文件数
* hard nofile 65535  # 硬限制：最大打开文件数
* soft nproc 65535   # 软限制：最大进程数
* hard nproc 65535   # 硬限制：最大进程数
```

## 六、Dockerfile指令对比
| 指令 | 功能 | 特点 |
|------|------|------|
| COPY | 复制文件到镜像 | 简单直接，仅支持本地文件/目录 |
| ADD | 复制文件到镜像 | 支持URL下载、自动解压tar文件 |

#### 使用建议
- 普通文件复制优先用 `COPY`（更清晰、稳定）
- 需要解压压缩包/下载远程文件时用 `ADD`

## 七、虚拟机快照管理（KVM/QEMU）
```bash
# 创建快照
virsh snapshot-create-as vm_name snapshot_name

# 恢复快照
virsh snapshot-revert vm_name snapshot_name

# 查看快照列表
virsh snapshot-list vm_name

# 删除快照
virsh snapshot-delete vm_name snapshot_name

# 基础虚拟机管理
virsh start vm_name      # 开机
virsh shutdown vm_name   # 正常关机
virsh destroy vm_name    # 强制关机（类似拔电源）
```

## 八、Linux常用命令
### 1. 文件操作
```bash
ls -lah                  # 以人类可读格式详细列出所有文件
cd /path/to/directory   # 切换目录
pwd                      # 显示当前工作路径
cp -r source dest       # 递归复制目录/文件
mv source dest          # 移动/重命名文件
rm -rf file              # 强制递归删除（慎用）
find /path -name '*.log' # 按名称查找文件
```

### 2. 系统监控
```bash
top                      # 实时进程/资源监控
htop                     # 增强版top（需安装）
ps aux                   # 查看所有进程详情
df -h                    # 磁盘使用情况（人类可读）
free -h                  # 内存/交换分区使用情况
netstat -tlnp           # 查看监听的TCP端口及对应进程
```

### 3. 文本处理
```bash
grep 'pattern' file      # 搜索文本内容
awk '{print $1}' file    # 提取文本第1列
sed 's/old/new/g' file   # 全局替换文本
cat file | head -n 10    # 查看文件前10行
```

## 九、Shell巡检脚本
```bash
#!/bin/bash
# 系统状态巡检脚本

echo '=== 系统巡检报告 $(date) ==='

# 1. CPU使用率
echo -e '\n1. CPU使用率：'
top -bn1 | grep 'Cpu(s)' | awk '{print 'CPU使用率: ' $2 '%'}'

# 2. 内存使用情况
echo -e '\n2. 内存使用情况：'
free -h | awk '/Mem/{printf '总内存: %s, 已用: %s, 使用率: %.2f%%\n', $2,$3,$3/$2*100}'

# 3. 磁盘使用情况（根分区）
echo -e '\n3. 磁盘使用情况：'
df -h | awk '$NF=='/'{printf '根分区: 总量 %s, 已用 %s, 使用率 %s\n', $2,$3,$5}'

# 4. IO性能
echo -e '\n4. IO性能：'
iostat -x 1 2 | tail -n +4 | awk 'NR==1{print '设备', '利用率', '等待时间'} NR&gt;1{print $1, $14'%', $10'ms'}'

# 5. 网络连接数（按状态统计）
echo -e '\n5. 网络连接数：'
netstat -an | awk '/^tcp/{++S[$NF]} END {for(a in S) print a, S[a]}'
```

## 十、批量管理50台服务器
### 1. 批量修改主机名
#### 方法1：SSH循环脚本
```bash
#!/bin/bash
# 服务器列表
servers=(server1 server2 server3 ... server50)
new_hostname_prefix='web-server'

# 循环修改主机名
for i in '${!servers[@]}'; do
    ssh root@${servers[$i]} 'hostnamectl set-hostname ${new_hostname_prefix}-$(($i+1))'
done
```

#### 方法2：Ansible Playbook（推荐）
```yaml
---
- hosts: all
  become: yes  # 提权执行
  tasks:
    - name: 批量设置主机名
      hostname:
        name: 'web-server-{{ inventory_hostname.split('-')[-1] }}'
```

### 2. SSH免密配置（管理机执行）
```bash
# 1. 生成密钥对（无密码）
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

# 2. 分发公钥到所有服务器（需输入密码）
for server in server1 server2 ... server50; do
    ssh-copy-id root@$server
done

# 3. 验证免密登录
ssh root@server1 'hostname'
```

### 3. 批量部署脚本（读取服务器列表）
```bash
#!/bin/bash
# 从server_list.txt读取服务器列表
while read server; do
    echo '正在配置 $server ...'
    # 免密分发公钥（自动输入密码，需安装sshpass）
    sshpass -p 'your_password' ssh-copy-id -o StrictHostKeyChecking=no root@$server
done &lt; server_list.txt
```

---

## 学习建议
1. **循序渐进**：从基础命令入手，掌握后再学习服务配置、自动化工具
2. **实验环境**：用虚拟机（VMware/KVM）搭建测试环境，避免直接操作生产机
3. **文档记录**：整理个人操作手册，记录常用命令、配置和排错经验
4. **自动化思维**：优先掌握Shell脚本、Ansible等工具，提升运维效率

### 总结
1. Linux运维核心围绕**存储（磁盘/LVM/RAID）、网络（iptables/IP配置）、系统优化、自动化管理**四大核心方向展开；
2. 实操是掌握Linux的关键，需结合实验环境反复练习命令和配置；
3. 批量管理场景优先使用Ansible等自动化工具，替代手动SSH循环，提升效率和稳定性。</description><guid isPermaLink="true">https://sin210.github.io/post/Linux-yun-wei-he-xin-zhi-shi-ti-xi.html</guid><pubDate>Fri, 06 Mar 2026 01:33:36 +0000</pubDate></item><item><title>3 Master + 多 Worker 高可用 K8s 集群搭建步骤（kubeadm 官方标准）</title><link>https://sin210.github.io/post/3%20Master%20%2B%20-duo-%20Worker%20-gao-ke-yong-%20K8s%20-ji-qun-da-jian-bu-zou-%EF%BC%88kubeadm%20-guan-fang-biao-zhun-%EF%BC%89.html</link><description># 一、架构（3 Master 高可用）
- **k8s-master-1：192.168.1.10**
- **k8s-master-2：192.168.1.11**
- **k8s-master-3：192.168.1.12**
- （可选）Worker 节点随便加

**前提：**
- 3 台都是 Master
- 必须有一个 **VIP/负载均衡（LB）** 地址：`192.168.1.100`（用来统一接入 apiserver）

---

# 二、所有节点统一初始化（3 Master + 所有 Worker 都执行）
```bash
# 1. 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 2. 关闭 SELinux
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

# 3. 关闭 swap（必须关）
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab

# 4. 内核参数（桥接、流量转发）
cat &lt;&lt;EOF &gt; /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF
sysctl --system

# 5. 安装 docker/containerd（这里用 containerd）
yum install -y containerd.io
systemctl enable --now containerd

# 6. 添加 k8s 源
cat &lt;&lt;EOF &gt; /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

# 7. 安装 kubeadm kubelet kubectl
yum install -y kubelet kubeadm kubectl
systemctl enable --now kubelet
```

---

# 三、在 **第一台 Master（k8s-master-1）** 执行：初始化集群
```bash
kubeadm init \
  --apiserver-advertise-address=192.168.1.10 \
  --control-plane-endpoint=192.168.1.100 \  # 这里是 LB/VIP
  --kubernetes-version=v1.28.2 \
  --pod-network-cidr=10.244.0.0/16 \
  --upload-certs
```

执行完会输出**两条关键命令**，你要保存好：
1. **加入 Master 节点的命令**（带 --control-plane）
2. **加入 Worker 节点的命令**

---

# 四、配置 kubectl（所有 Master 都要做）
```bash
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
```

---

# 五、安装网络插件（Calico/Flannel）
```bash
kubectl apply -f https://docs.projectcalico.org/v3.26/manifests/calico.yaml
```

---

# 六、把 **Master2、Master3** 加入集群（高可用）
在 **master2、master3** 上执行 init 生成的 **join 命令**，类似：
```bash
kubeadm join 192.168.1.100:6443 \
  --token xxx \
  --discovery-token-ca-cert-hash sha256:xxx \
  --control-plane \
  --certificate-key xxx
```
只要带 `--control-plane`，就是**加入 Master 节点**。</description><guid isPermaLink="true">https://sin210.github.io/post/3%20Master%20%2B%20-duo-%20Worker%20-gao-ke-yong-%20K8s%20-ji-qun-da-jian-bu-zou-%EF%BC%88kubeadm%20-guan-fang-biao-zhun-%EF%BC%89.html</guid><pubDate>Wed, 04 Mar 2026 08:11:19 +0000</pubDate></item><item><title>K8S 高可用实现机制（新手易懂版）</title><link>https://sin210.github.io/post/K8S%20-gao-ke-yong-shi-xian-ji-zhi-%EF%BC%88-xin-shou-yi-dong-ban-%EF%BC%89.html</link><description>K8S 的高可用是“分层保障”的思路，从**集群层面**到**应用层面**都有对应的解决方案，下面我会从核心组件到应用部署，一步步讲清楚。</description><guid isPermaLink="true">https://sin210.github.io/post/K8S%20-gao-ke-yong-shi-xian-ji-zhi-%EF%BC%88-xin-shou-yi-dong-ban-%EF%BC%89.html</guid><pubDate>Wed, 04 Mar 2026 08:01:52 +0000</pubDate></item><item><title>如何通过yaml的形式安装监控</title><link>https://sin210.github.io/post/ru-he-tong-guo-yaml-de-xing-shi-an-zhuang-jian-kong.html</link><description>### 最终方案：纯手动创建 YAML + 部署监控（无任何外部依赖）
#### 步骤 1：创建 Grafana 部署文件（复制完整内容）
执行 `vi /root/grafana.yaml`，按 `i` 进入编辑模式，粘贴以下完整内容：
```yaml
apiVersion: v1
kind: Namespace
metadata:
  name: monitoring
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: grafana
  namespace: monitoring
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: grafana
  namespace: monitoring
  labels:
    app: grafana
spec:
  replicas: 1
  selector:
    matchLabels:
      app: grafana
  template:
    metadata:
      labels:
        app: grafana
    spec:
      serviceAccountName: grafana
      containers:
      - name: grafana
        image: grafana/grafana:9.5.2
        ports:
        - containerPort: 3000
          protocol: TCP
        env:
        - name: GF_SECURITY_ADMIN_USER
          value: 'admin'
        - name: GF_SECURITY_ADMIN_PASSWORD
          value: 'admin123'
        - name: GF_USERS_ALLOW_SIGN_UP
          value: 'false'
        volumeMounts:
        - name: grafana-data
          mountPath: /var/lib/grafana
        resources:
          limits:
            cpu: 500m
            memory: 512Mi
          requests:
            cpu: 100m
            memory: 128Mi
      volumes:
      - name: grafana-data
        emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
  name: grafana
  namespace: monitoring
  labels:
    app: grafana
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 3000
    nodePort: 30001  # 固定端口，方便访问
  selector:
    app: grafana
```
粘贴完成后，按 `Esc` → 输入 `:wq` 保存退出。</description><guid isPermaLink="true">https://sin210.github.io/post/ru-he-tong-guo-yaml-de-xing-shi-an-zhuang-jian-kong.html</guid><pubDate>Tue, 03 Mar 2026 02:09:49 +0000</pubDate></item><item><title>K8S怎么搭建高可用集群</title><link>https://sin210.github.io/post/K8S-zen-me-da-jian-gao-ke-yong-ji-qun.html</link><description>### 一、先明确：K8s 高可用集群核心架构（3/5节点，推荐3节点）
高可用的核心是**控制平面（Master）多副本** + **etcd 集群高可用**（etcd 是 K8s 核心数据库，需至少3节点），避免单点故障。</description><guid isPermaLink="true">https://sin210.github.io/post/K8S-zen-me-da-jian-gao-ke-yong-ji-qun.html</guid><pubDate>Mon, 02 Mar 2026 11:12:24 +0000</pubDate></item><item><title>常见专有名词（系统）</title><link>https://sin210.github.io/post/chang-jian-zhuan-you-ming-ci-%EF%BC%88-xi-tong-%EF%BC%89.html</link><description># HIS系统 是什么（运维/面试 极简易懂版）
**HIS = Hospital Information System**
**医院信息系统**

## 一句话解释
HIS 是医院**核心业务管理系统**，把医院所有业务流程**电子化、信息化、一体化**。</description><guid isPermaLink="true">https://sin210.github.io/post/chang-jian-zhuan-you-ming-ci-%EF%BC%88-xi-tong-%EF%BC%89.html</guid><pubDate>Mon, 02 Mar 2026 09:14:21 +0000</pubDate></item><item><title>oracle基本使用一</title><link>https://sin210.github.io/post/oracle-ji-ben-shi-yong-yi.html</link><description>### 一、前置准备：连接 Oracle 数据库
Oracle 连接方式主要有两种（以 Windows/Linux 通用的 `sqlplus` 为例），先确保环境已配置好 Oracle 客户端。</description><guid isPermaLink="true">https://sin210.github.io/post/oracle-ji-ben-shi-yong-yi.html</guid><pubDate>Mon, 02 Mar 2026 07:22:18 +0000</pubDate></item><item><title>CDN是什么</title><link>https://sin210.github.io/post/CDN-shi-shen-me.html</link><description>我直接把你这段 **完整 CDN 基础讲解** 和之前那篇 **CDN 回源详细解释** 合并成**一篇连贯、从头到尾、适合学习/面试/背诵的完整版文章**，你直接复制就能用：

---

# CDN 基础 + 回源 完整学习笔记

## CDN 是什么
**CDN = 内容分发网络**
本质就是：**把你的网站/文件，提前放到离用户最近的节点上，让用户访问更快、更稳、源站压力更小。</description><guid isPermaLink="true">https://sin210.github.io/post/CDN-shi-shen-me.html</guid><pubDate>Mon, 02 Mar 2026 01:48:04 +0000</pubDate></item><item><title>redis的使用技巧2</title><link>https://sin210.github.io/post/redis-de-shi-yong-ji-qiao-2.html</link><description>### 一、日常巡检/状态查看（最核心）
这类命令用于快速了解 Redis 实例的运行状态、资源占用、连接情况，是运维的基础操作。</description><guid isPermaLink="true">https://sin210.github.io/post/redis-de-shi-yong-ji-qiao-2.html</guid><pubDate>Mon, 02 Mar 2026 01:34:37 +0000</pubDate></item><item><title>redis的使用技巧一</title><link>https://sin210.github.io/post/redis-de-shi-yong-ji-qiao-yi.html</link><description>### 一、Redis 是什么？
Redis（Remote Dictionary Server）是一款**开源的、高性能的键值对（Key-Value）内存数据库**，同时支持数据持久化（把内存数据写到硬盘），常用来做缓存、分布式锁、消息队列、排行榜等场景。</description><guid isPermaLink="true">https://sin210.github.io/post/redis-de-shi-yong-ji-qiao-yi.html</guid><pubDate>Mon, 02 Mar 2026 01:29:56 +0000</pubDate></item><item><title>mysql常用命令</title><link>https://sin210.github.io/post/mysql-chang-yong-ming-ling.html</link><description>### 一、连接与基础操作（最常用）
#### 1. 登录MySQL
```bash
# 本地登录（默认端口3306）
mysql -u 用户名 -p
# 示例：mysql -u root -p（回车后输密码，密码不显示）

# 远程登录（指定IP+端口）
mysql -h 192.168.1.100 -P 3306 -u root -p
```
- 口述：登录用mysql -u用户名 -p，远程加-h指定IP、-P指定端口，密码回车后输入更安全。</description><guid isPermaLink="true">https://sin210.github.io/post/mysql-chang-yong-ming-ling.html</guid><pubDate>Fri, 27 Feb 2026 12:04:11 +0000</pubDate></item><item><title>CI/CD自动化流水线过程</title><link>https://sin210.github.io/post/CI-CD-zi-dong-hua-liu-shui-xian-guo-cheng.html</link><description>### 一、先搞懂核心概念（避免混淆）
- **CI（持续集成）**：开发人员频繁将代码合并到主干，每次合并后自动执行「编译、测试、代码检查」，快速发现问题，核心目标是**减少集成风险**；
- **CD（持续交付/持续部署）**：
  - 持续交付：CI通过后，自动将代码打包成可部署的制品（如Docker镜像），手动触发部署到测试/生产环境；
  - 持续部署：交付环节完全自动化，制品直接部署到生产环境（适合互联网高频迭代场景）；
- 流水线核心：**代码变更→自动触发→多阶段验证→自动部署**，全程无需人工干预（或仅少量人工审批）。</description><guid isPermaLink="true">https://sin210.github.io/post/CI-CD-zi-dong-hua-liu-shui-xian-guo-cheng.html</guid><pubDate>Fri, 27 Feb 2026 11:35:57 +0000</pubDate></item><item><title>nginx的使用技巧</title><link>https://sin210.github.io/post/nginx-de-shi-yong-ji-qiao.html</link><description>### 一、配置相关技巧（最常用，避坑+提效）
#### 1. 配置文件模块化拆分（避免单文件臃肿）
新手常把所有配置写在`nginx.conf`里，维护困难。</description><guid isPermaLink="true">https://sin210.github.io/post/nginx-de-shi-yong-ji-qiao.html</guid><pubDate>Fri, 27 Feb 2026 11:10:23 +0000</pubDate></item><item><title>K8S相关知识点总结</title><link>https://sin210.github.io/post/K8S-xiang-guan-zhi-shi-dian-zong-jie.html</link><description>你需要的是K8s（Kubernetes）核心知识点总结，我会按「基础概念→核心组件→核心资源→核心流程→高频考点」的逻辑梳理，既适合面试记忆，也能快速掌握核心框架，每个知识点都用「一句话核心+补充说明」的形式，新手也能快速理解。</description><guid isPermaLink="true">https://sin210.github.io/post/K8S-xiang-guan-zhi-shi-dian-zong-jie.html</guid><pubDate>Thu, 26 Feb 2026 09:42:26 +0000</pubDate></item></channel></rss>