<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>云原生实践 on IT技术交流</title><link>http://shimamura.vip/categories/%E4%BA%91%E5%8E%9F%E7%94%9F%E5%AE%9E%E8%B7%B5/</link><description>Recent content in 云原生实践 on IT技术交流</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Sun, 02 Aug 2026 17:17:21 +0800</lastBuildDate><atom:link href="http://shimamura.vip/categories/%E4%BA%91%E5%8E%9F%E7%94%9F%E5%AE%9E%E8%B7%B5/index.xml" rel="self" type="application/rss+xml"/><item><title>DQL - 数据库查询操作</title><link>http://shimamura.vip/posts/mysql_dql/</link><pubDate>Sun, 02 Aug 2026 17:17:21 +0800</pubDate><guid>http://shimamura.vip/posts/mysql_dql/</guid><description>&lt;h2 id="示例表格"&gt;示例表格&lt;/h2&gt;
&lt;p&gt;s&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;sno&lt;/th&gt;
 &lt;th&gt;sname&lt;/th&gt;
 &lt;th&gt;sex&lt;/th&gt;
 &lt;th&gt;age&lt;/th&gt;
 &lt;th&gt;createtime&lt;/th&gt;
 &lt;th&gt;address&lt;/th&gt;
 &lt;th&gt;did&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;S01&lt;/td&gt;
 &lt;td&gt;陈宇乐&lt;/td&gt;
 &lt;td&gt;男&lt;/td&gt;
 &lt;td&gt;21&lt;/td&gt;
 &lt;td&gt;2022-02-02 00:00:00&lt;/td&gt;
 &lt;td&gt;浙江义乌&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;S02&lt;/td&gt;
 &lt;td&gt;陈紫樱&lt;/td&gt;
 &lt;td&gt;女&lt;/td&gt;
 &lt;td&gt;20&lt;/td&gt;
 &lt;td&gt;2022-02-10 00:00:00&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;S03&lt;/td&gt;
 &lt;td&gt;杜陈宇&lt;/td&gt;
 &lt;td&gt;男&lt;/td&gt;
 &lt;td&gt;21&lt;/td&gt;
 &lt;td&gt;NULL&lt;/td&gt;
 &lt;td&gt;NULL&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;S04&lt;/td&gt;
 &lt;td&gt;陈宇乐&lt;/td&gt;
 &lt;td&gt;男&lt;/td&gt;
 &lt;td&gt;23&lt;/td&gt;
 &lt;td&gt;NULL&lt;/td&gt;
 &lt;td&gt;NULL&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;S05&lt;/td&gt;
 &lt;td&gt;陈樱&lt;/td&gt;
 &lt;td&gt;女&lt;/td&gt;
 &lt;td&gt;21&lt;/td&gt;
 &lt;td&gt;NULL&lt;/td&gt;
 &lt;td&gt;NULL&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;S06&lt;/td&gt;
 &lt;td&gt;杜佳佳&lt;/td&gt;
 &lt;td&gt;男&lt;/td&gt;
 &lt;td&gt;19&lt;/td&gt;
 &lt;td&gt;NULL&lt;/td&gt;
 &lt;td&gt;NULL&lt;/td&gt;
 &lt;td&gt;NULL&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;d&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;did&lt;/th&gt;
 &lt;th&gt;dname&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;计算机系&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;土木工程系&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;td&gt;英语系&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="一-查询基础"&gt;一、 查询基础&lt;/h2&gt;
&lt;h3 id="11-select-操作"&gt;1.1 select 操作&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;#&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;查询所有学生信息&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;SELECT&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;FROM&lt;/span&gt; student
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;#&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;查询学生表中的学号与姓名&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;SELECT&lt;/span&gt; sno,sname &lt;span style="color:#66d9ef"&gt;FROM&lt;/span&gt; student
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;#&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;查询学生表中的学号与姓名，并且给一个字段别名&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;SELECT&lt;/span&gt; sno &lt;span style="color:#66d9ef"&gt;AS&lt;/span&gt; studentNO,sname &lt;span style="color:#66d9ef"&gt;AS&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;姓名&amp;#39;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;FROM&lt;/span&gt; student
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;#&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;查询学生表中的姓名信息，并过滤掉相同姓名信息&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;SELECT&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;DISTINCT&lt;/span&gt; sname &lt;span style="color:#66d9ef"&gt;FROM&lt;/span&gt; student
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;#&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;查询学生个数，年龄总和，平均年龄，最大年龄，最小年龄，并给他们一个别名&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;SELECT&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;COUNT&lt;/span&gt;(&lt;span style="color:#f92672"&gt;*&lt;/span&gt;) &lt;span style="color:#66d9ef"&gt;AS&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;学生个数&amp;#39;&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;，&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;SUM&lt;/span&gt;(age) &lt;span style="color:#66d9ef"&gt;AS&lt;/span&gt; sumage &lt;span style="color:#66d9ef"&gt;FROM&lt;/span&gt; student
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="12-where"&gt;1.2 where&lt;/h3&gt;
&lt;p&gt;参考SQL&lt;/p&gt;</description></item><item><title>AI 日志分析模块实现记录</title><link>http://shimamura.vip/posts/ai_model_1/</link><pubDate>Sat, 01 Aug 2026 23:30:47 +0800</pubDate><guid>http://shimamura.vip/posts/ai_model_1/</guid><description>&lt;p&gt;项目中增加了 AI 运维辅助模块，通过 Python 调用 Kubernetes API 获取应用 Pod 日志，并结合阿里云百炼大模型进行日志分析，实现异常原因定位和处理建议生成，降低人工排障成本。（本项目中采用阿里云百炼）&lt;/p&gt;
&lt;h2 id="一部署openai-sdk"&gt;一、部署OpenAI SDK&lt;/h2&gt;
&lt;p&gt;保持如下结构：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt; Gitea
 │
 ▼
 Jenkins
 │
 ▼
 Kubernetes
 / \
 k8s-node1 k8s-node2
 \ /
 \ /
 API Server
 ▲
 │
 kubectl logs
 │
 AI Log Assistant
 （devops 主机）
 │
 ▼
 阿里云百炼
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="11-安装依赖"&gt;1.1 安装依赖&lt;/h3&gt;
&lt;p&gt;百炼现在推荐兼容 OpenAI SDK 的方式调用，这样以后切换模型也方便。&lt;/p&gt;
&lt;p&gt;安装：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;pip3 install -U openai
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;如果没有 python3或者pip3可以参考上一篇文章《在CentOS 7.9.2009上安装部署 Python3.9》。&lt;/p&gt;
&lt;p&gt;检查：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;python3 -c &amp;#34;import openai;print(openai.__version__)&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h3 id="12-配置-api-key"&gt;1.2 配置 API Key&lt;/h3&gt;
&lt;p&gt;不要把 Token 写死到代码里。&lt;/p&gt;
&lt;p&gt;创建：&lt;/p&gt;</description></item><item><title>在CentOS 7.9.2009上安装部署 Python3.9</title><link>http://shimamura.vip/posts/python3.9_deployment/</link><pubDate>Sat, 01 Aug 2026 14:21:20 +0800</pubDate><guid>http://shimamura.vip/posts/python3.9_deployment/</guid><description>&lt;p&gt;CentOS 上自带的 Python 版本是2.7.5，过于老旧，而现在许多项目诸如 AIOps 需要新的Python3环境，所以我们需要手动部署 Python3.9 来避免各种版本不匹配的问题，现以下是手动安装部署Python3.9 的操作记录。&lt;/p&gt;
&lt;h2 id="一安装依赖"&gt;一、安装依赖&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make libffi-devel
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="二下载python39安装包"&gt;二、下载python3.9安装包&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;yum install wget -y
wget https://www.python.org/ftp/python/3.9.0/Python-3.9.0.tgz
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="三解压并安装"&gt;三、解压并安装&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# 解压压缩包
tar -zxvf Python-3.9.0.tgz

# 进入文件夹
cd Python-3.9.0

# 配置安装位置
./configure prefix=/usr/local/python3

# 安装
make &amp;amp;&amp;amp; make install
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="四添加软连接"&gt;四、添加软连接&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ln -s /usr/local/python3/bin/python3.9 /usr/bin/python3

ln -s /usr/local/python3/bin/pip3.9 /usr/bin/pip3

#检查是否添加成功
python3 --version

pip3 --version
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>Hugo发布文章脚本编写</title><link>http://shimamura.vip/posts/scripts_writing/</link><pubDate>Mon, 27 Jul 2026 16:08:17 +0800</pubDate><guid>http://shimamura.vip/posts/scripts_writing/</guid><description>&lt;p&gt;在本项目中，因为Hugo以Docker的方式进行部署，所以想要发布文章在操作流程上可能有些繁琐复杂而不人性化，因此我们可以编写Shell脚本来将这个流程简化&lt;/p&gt;
&lt;h1 id="一-原本发布-hugo-文章的完整流程"&gt;一、 原本发布 Hugo 文章的完整流程&lt;/h1&gt;
&lt;p&gt;当前目录结构类似：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;/root/HybridBlog

├── Dockerfile
├── Jenkinsfile
└── blog
 ├── content
 │ └── posts
 │ ├── devops-platform.md
 │ └── xxx.md
 ├── themes
 │ └── PaperMod
 ├── hugo.toml
 └── public
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;所以以后发布文章需要修改 Git 仓库里的 &lt;code&gt;blog/content/posts&lt;/code&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="11-创建新文章"&gt;1.1 创建新文章&lt;/h2&gt;
&lt;p&gt;进入项目目录：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cd /root/HybridBlog
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;进入 blog：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cd blog
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;使用 Harbor 里的 Hugo 镜像生成文章：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;docker run --rm \
-v $(pwd):/src \
-w /src \
192.168.10.20/hybridblog/hugo:exts \
hugo new content posts/4_Harbor_registry_deployment.md
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;成功：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Content &amp;#34;/src/content/posts/4_Harbor_registry_deployment.md&amp;#34; created
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h1&gt;&lt;/h1&gt;
&lt;h2 id="12-编辑文章"&gt;1.2 编辑文章&lt;/h2&gt;
&lt;p&gt;例如：&lt;/p&gt;</description></item><item><title>Kubernetes回滚导致Git代码与线上版本不一致问题分析</title><link>http://shimamura.vip/posts/kubernetes_version_drift/</link><pubDate>Mon, 27 Jul 2026 15:28:53 +0800</pubDate><guid>http://shimamura.vip/posts/kubernetes_version_drift/</guid><description>&lt;p&gt;在基于 Kubernetes 的 CI/CD 流程中，版本管理是非常重要的一环。&lt;/p&gt;
&lt;p&gt;在实际搭建 HybridBlog 混合云 DevOps 平台过程中，我遇到了一个典型问题：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Git仓库中的文章已经删除，但是通过 Kubernetes 版本回滚后，线上网站中的文章又重新出现。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这个问题表面看起来像是 Kubernetes 回滚异常，实际上属于 &lt;strong&gt;源码版本与运行环境版本不一致问题&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;本文记录问题产生原因、排查过程以及解决方案。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="一项目cicd流程"&gt;一、项目CI/CD流程&lt;/h2&gt;
&lt;p&gt;当前博客系统采用以下发布流程：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Gitea
 |
 | git push
 ↓
 Jenkins
 |
 | docker build
 ↓
 Harbor
 |
 | image push
 ↓
 Kubernetes Deployment
 |
 ↓
 Hugo静态博客
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;具体过程：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;开发者修改 Hugo Markdown 文件&lt;/li&gt;
&lt;li&gt;提交代码到 Gitea&lt;/li&gt;
&lt;li&gt;Gitea Webhook 触发 Jenkins&lt;/li&gt;
&lt;li&gt;Jenkins 拉取代码并构建 Docker 镜像&lt;/li&gt;
&lt;li&gt;镜像上传到 Harbor&lt;/li&gt;
&lt;li&gt;Jenkins 使用 kubectl 更新 Kubernetes Deployment&lt;/li&gt;
&lt;li&gt;Pod 使用新镜像提供网站服务&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;正常情况下：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Git代码

Docker镜像

Kubernetes运行版本
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;三者保持一致。&lt;/p&gt;</description></item></channel></rss>