Android MUMU 模拟器抓包
搭建基于 VirtualBox 的 Android 模拟器系统
环境信息
- VirtualBox 7.0
- Android-x86 ISO(建议版本:9.0-r2),下载链接
下载 Android-x86 ISO,开始安装 VirtualBox 虚拟机
设置完成后启动虚拟机,选择 Installation - Install Android-x86 to harddisk 开始安装
搭建基于 VirtualBox 的 Android 模拟器系统
环境信息
下载 Android-x86 ISO,开始安装 VirtualBox 虚拟机
设置完成后启动虚拟机,选择 Installation - Install Android-x86 to harddisk 开始安装
Genymotion 是一款强大的 Android 模拟器(基于 VirtualBox 虚拟机),广泛用于开发、测试和自动化场景。相比普通消费级模拟器(如 MuMu、雷电、夜神),Genymotion 更专业、开放,支持更多系统控制与定制。
| 特性 | 说明 |
|---|---|
| ✅ Android 多版本 | 支持从 Android 4.1 到 Android 13 的系统版本,几乎覆盖全部测试需求 |
| ✅ 高度可控 | 系统可写、支持 root、支持安装系统证书(适合抓包和安全测试) |
| ✅ 开发友好 | 集成 ADB、支持拖放 APK、集成 GApps、支持 OpenGL 加速 |
| ✅ 云端支持 | 提供 Genymotion Cloud,可在 AWS/GCP 上运行 Android |
| ✅ 模拟多设备 | 可以模拟不同手机型号、分辨率、GPS、电池、网络等 |
大多数功能(如 修改配置网络代理等)属于收费功能
安装完成后需要首先安装 手机操作系统
推荐你选择的几个设备(常见 + 支持 Android 10):
| 设备名称 | 建议原因 |
|---|---|
| Google Pixel 4 / 4 XL | 稳定且兼容性好 |
| Google Pixel 6 Pro | 新旧系统版本都支持 |
| Samsung Galaxy S9 / A50 | 分辨率接近真实机,调试方便 |
确认选中 Android 10(API 29)版本后,点击右下角 Next 即可安装该镜像。可以选择 镜像名称后继续选择 Android 版本
配置完镜像参数后,即可开始安装
安装完成的 虚拟手机系统 ,开机即可使用

Prerequisite :
环境信息
注意事项
如果使用模拟器的主要目的是对 APP 进行抓包,建议不要使用最新的 MUMU 模拟器,最新的模拟器使用较高的 Android 版本,安全等级较高(如使用各种抓包或者代理软件,需要在客户端安装 SSL 证书,较高版本的 Android 不允许安装证书到系统中), 如果只是需要抓包,可以使用以下版本 :
如果需要自主选择 Android 版本,可以使用 Genymotion 模拟器替代 MUMU 使用。 大多功能需要收费,不付费基本无法使用
Genymotion 是一款强大的 Android 模拟器(基于 VirtualBox 虚拟机),广泛用于开发、测试和自动化场景。相比普通消费级模拟器(如 MuMu、雷电、夜神),Genymotion 更专业、开放,支持更多系统控制与定制。
- Android 多版本 : 支持从 Android 4.1 到 Android 13 的系统版本,几乎覆盖全部测试需求
- 高度可控 : 系统可写、支持 root、支持安装系统证书(适合抓包和安全测试)
- 开发友好 : 集成 ADB、支持拖放 APK、集成 GApps、支持 OpenGL 加速
- 模拟多设备 : 可以模拟不同手机型号、分辨率、GPS、电池、网络等
雷电模拟器 是更好的替换方案。其各个版本都可下载
MUMU 默认开启了和本地主机的共享目录:
$MuMu12Shared ,完整的 Shell 路径为 /mnt/sdcard/$MuMu12SharedC:\Users\local-user\Documents\MuMuSharedFolderSettings --> Network & Internet --> Internet --> WiFi 中选择目标网络配置按钮,点击右上角的 修改 。
Manual,并填入 Charles Proxy 的 IP 和 端口Charles 需要开启 SSL Proxying 才能解密 HTTPS 流量。
在 Charles 中,确保已经启用 SSL Proxying :
进入 Proxy > SSL Proxying Settings
确保勾选了 Enable SSL Proxying 。
然后在 Add 按钮中,确保已经添加了所有请求的域名和端口(可以选择 * 来捕获所有域名和端口)。
确保端口是 443(HTTPS 默认端口)。
查看 Charles 证书并在客户端安装 Charles 证书
在 Charles 的菜单 Help --> SSL Proxying --> Install Charles Certificates on a mobile device 会展示如何获取到 Charles 证书,通常是在已经设置了代理的终端通过链接 http://charlesproxy.com/getssl 下载证书。下载后在 MUMU 模拟器的 Settings --> Network & Internet --> Internet --> Network preferences --> install certificates 中安装已经下载的证书
在 MuMu 模拟器中打开终端(Shell)有多种方法。下面是最推荐的方式:
在 MuMu 模拟器中安装终端 App
在模拟器中打开浏览器或 Play 商店,安装如下 App(任选其一):
Termux(推荐)
Android Terminal Emulator(旧版)
JuiceSSH(适合远程)
打开 Termux,直接输入命令操作

打开 MuMu → 右上角「设置齿轮」;
找到 “Root 权限” → 设为「开启」;
重启模拟器使之生效。
Runway ML Gen-4 的关键要点
前所未有的世界一致性 : Gen-4 实现了视频生成中的世界一致性,确保场景、角色和物体在不同镜头之间保持连贯。
更高质量的图像和视频生成 : 相比之前的模型,Gen-4 在生成质量上有了显著提升,能够创造更逼真、更细腻的视觉效果。
增强叙事能力 : 世界一致性的提升,使得创作者能够构建更长的、更连贯的故事叙述。
简化的内容创作流程 : AI 驱动的视频生成技术,降低了视频创作的门槛,让更多人能够参与到内容创作中来。
多样的应用场景 : Gen-4 可以应用于电影制作、广告、营销、教育等多个领域,为各行业带来创新。
Runway ML 的计费是根据调用模型的次数收费的,最新模型通常比较贵,Standard Plan 也用不了几次,需要注意
Erase And Replacement)非常的不理想包含常用工具:
Xshell 7.0.0
使用参考
fiddler-linux.zip
使用参考
Fiddler Everywhere 4.2.1
cwrsync_6.2.4_x64_free
使用参考
FileZilla_3.62.2_win64
openvpn-connect-3.3.7.2979_signed
VMware-workstation-full-17.0.0-20800274
CentOS-7-x86_64-Minimal-2207-02
Python 3.10.12 编译后的安装文件(Python-3.10.12.installed.tar),可以 安装依赖 后,解压直接使用
HttpCanary
可以使用 shell 命令:
$ openssl rand -base64 |
具体示例,生成 8 位随机字符串
$ openssl rand -base64 8 |
版本信息
| 指令 (Prompt) | 说明 | 示例 |
|---|---|---|
/imagine |
画图指令 | a samurai fox warrior in the snow, wearing red armor, cinematic lighting, dramatic pose, by greg rutkowski --ar 3:4 --v 6.0 |
/fast /relax |
模式切换。不同的模式对应画图的速度会因为优先级排队不同而不同 | /fast 切换到 fast 模式 |
/info |
查询 fast 、 relax 等模式的剩余时间 |
/info 指令示例 |
/settings |
配置菜单 | /settings 指令说明 |
/describe image /describe url |
上传本地图片进行编辑 通过链接上传图片进行编辑 |
常见参数
| 参数 | 说明 | 示例 |
|---|---|---|
--ar [4:3] |
图片比例 | /imagine a girl --ar 4:3 |
--s [0-1000] |
Style Midjourney 生成图片时的风格化程度,范围 0-1000,数值越高,AI 自由发挥的风格化程度越强;数值低则更贴近文字描述。 |
/imagine a girl --ar 4:3 --s 1000 |
--q [1/2/0.25] |
quality 控制图像渲染质量与所用时间/计算资源的权衡。 --q 1 :标准质量(默认值)--q 2 :高质量(需要更多时间,图像细节更丰富)--q 0.25 :低质量(快速预览用) |
|
--no [apple] |
生成的图片中 不要出现某个东西 可多重排除,例如: --no text --no logo --no watermark |
|
:: |
表示 :: 后面的为图片的主体比如 hot dog 默认生成的是食物,如果想生成的是一只非常热的狗,需要使用 hot:: dog hot::2 dog 中的 2 也可以用于指定 hot 的程度 |
/imagine hot dog /imagine hot:: dog /imagine hot::2 dog |
--c [0-100] |
chaos 控制图像生成的多样性,越高结果越随机、不拘一格。指定默认生成的 4 张图片的差异程度,数字越小,4 张图片的风格越接近 |
|
--seed |
以已有的图片为种子文件生成图片 | |
--iw [0.1 - 3] |
Image Weight / 图像权重 。用于控制在混合 图像和文本提示时 ,图像的影响力有多大。 当你使用 /imagine 并上传了一张或多张图像,同时添加文字提示, --iw 让你可以决定这些图像在生成结果中的 说话权重 。默认 --iw 1 (图像权重 = 文本提示的权重) 组合使用多张图像和 --iw 参数 |
/imagine https://yourimage.url/abc.jpg A warrior in golden armor --iw 2 --v 6.1 --iw 0.1 到 --iw 10(推荐范围) - --iw 0.5 :图像影响较小,偏重文字描述 - --iw 1 :图像与文字影响力相当 - --iw 3 :图像主导风格和构图 |
--sref urlA::2 urlB::3 --sw [100-1000] |
参考图片的风格以及比重,还可以对各个图片风格指定不同的参考比重(::3) 风格参考比重取值 100-1000 ,值越大,参考风格影响力越大 |
|
--cref urlA::2 urlB::3 --cw [0-100] |
角色一致性参数,比重取值 0-100 ,100 默认值,使用脸部、头发和衣服,保持一致性 0 它只会关注脸部(适合更换服装/头发等) |
/info 指令用于查询账号信息,包括 fast 、 relax 等模式的剩余时间
Subscription: Basic (Active yearly, renews next on May 20, 2026 at 5:30 PM) |
/settings 指令用于显示和配置选项。其中 绿色背景表示启用,灰色背景表示未启用

v7 版本支持 Personalization Mode ,在 Midjourney 提供的 200 张照片中全部选择你选择的照片后,Midjourney 会为你生成专属的 Personalization,创建照片时可使用。
midlibrary.io 这个网站上有很多 Midjourney 的使用的参数,比如 Style 等。可以参考上面的风格进行图片创作。
GitHub MidJourney-Styles-and-Keywords-Reference 中也有很多风格和关键词可以参考
参考已有的图片为种子文件生成图片
... (more) 并选择弹出菜单中的 Add Reaction
:envelope: (信封),并选择下图中的信封点击
seed 840837654


seed 值创建同风格的图片以下方法更为快捷方便,直接在 Midjourney 的 web 页面中查看

掌握 浏览器搜索语法(特别是 Google、Bing、DuckDuckGo 等搜索引擎的高级搜索语法),可以大大提高你获取信息的效率,特别适合运维、程序员、学者等高效人群。
常用搜索语法大全(以 Google 为主)
| 语法 | 说明 | 用法示例 |
|---|---|---|
"关键词" |
精确匹配整个短语 | "nginx配置文件位置" |
关键词1 OR 关键词2 |
匹配任一关键词( 注意大写 OR ) | nginx OR apache |
关键词1 关键词2 关键词1 AND 关键词2 |
同时满足多个关键词,即 AND 关系 这是浏览器默认得语法 | nginx 配置 文件路径 nginx AND 配置 AND 文件路径 |
-关键词 |
排除包含该词的结果 | mysql -mariadb |
site:域名 |
仅搜索特定网站内的内容 | site:stackoverflow.com nginx |
intitle:关键词 |
仅搜索标题中含有关键词的页面 | intitle:nginx |
inurl:关键词 |
仅搜索 URL 中含有关键词的页面 | inurl:config nginx |
filetype:扩展名 |
搜索特定文件类型 | filetype:pdf mysql 教程 |
related:网址 |
查找与该网址类似的网站 | related:github.com |
cache:网址 |
查看网页的缓存快照 | cache:example.com |
*(星号) |
nginx * configuration | 通配符,表示任意词 |
before:YYYY-MM-DD / after: |
搜索某个时间点前或后的内容(Google 支持) | nginx config before:2020-01-01 |
多个关键词之间默认是 AND ,但如果你想控制词组必须连在一起,可以用引号包裹
"nginx 配置" "文件路径" |
表示必须包含:
短语 nginx 配置
短语 文件路径
在 四柱八字 命盘中,以 日干 代表命主本人,周围的干支和日干的关系有十种状态,用 十神 来表示

| 十神 | 关系 | 正偏 | 说明 |
|---|---|---|---|
| 财星 | 我克者为财 | - 异性者为 正财(财) - 同性者为 偏财(才) |
|
| 官杀 | 克我者为官杀 | - 异性者为 正官(官) - 同性者为 偏官(七杀、杀) |
|
| 印枭 | 生我者为印枭 | - 异性者为 正印(印) - 同性者为 偏印(枭) |
|
| 比劫 | 同我者为比劫 | - 异性者为 劫财(劫) - 同性者为 比肩(比) |
|
| 食伤 | 我生者为食伤 | - 异性者为 伤官(伤) - 同性者为 食神(食) |
十神类象
| 十神 | 优点 | 缺点 | 其他 |
|---|---|---|---|
| 比肩 | 自信 | 坚持己见,不听劝 | 比肩多容易合伙做事,帮身抗杀(杀克比肩)克财(比肩克财)助食伤(比劫生食伤) |
| 劫财 | 勇猛 | 粗暴自负;容易狂 | 劫财多,容易破财 |
| 正印 | 优雅仁慈 | 依赖心,不爱动,懒 | 正印多,容易懒,得母亲偏爱,生我泄官杀克食伤 |
| 偏印(枭) | 思维细腻 | 内向多疑 | |
| 食神 | 口才好,想法多 | 空想幻想纠结 | 泄我生财克官杀 |
| 伤官 | 聪明,悟性高,创造力强 | 桀骜不驯,高冷,挑剔 | |
| 正官 | 正直保守,秉公尚义 | 胆小怕事,过于谨慎 | 官主贵,有情(自律)约束。引财生印制劫 |
| 偏官(杀,七杀) | 坚决果断,天生王者 | 个性偏激,招惹小人 | 杀主祸,事业名气权力,耗财生印功身制劫 |
| 正财 | 精打细算,勤俭持家 | 因小失大,不大气 | 财不大,稳定。生官杀,克印枭,泄伤食,坏印 |
| 偏财 | 慷慨豪爽,不拘小节 | 虚荣心强,炫富,花心 | 财大,不固定,众人财 |
偏财
正财
在八字命理体系中,判断一个人的八字是身强还是身弱是非常关键的一步,它犹如一把关键的钥匙,是开启后续分析如 性格特征、运势走向、用神、喜忌 等诸多方面的基础。
在八字命令体系中, 四柱八字 是分析命理的基本盘,它由 年柱 、 月柱 、 日柱 、 时柱 构成,分别代表了人出生时的 年 、 月 、 日 、 时 的天干地支纪时。
| 年柱 | 月柱 | 日柱 | 时柱 | |
|---|---|---|---|---|
| 天干 | 己 | 丙 | 戊 | 壬 |
| 地支 | 卯 | 子 | 午 | 子 |
| 藏干(继承 / 余气) 藏干(长生 / 中气) 藏干(本气) |
- - 乙木 |
- - 癸水 |
- 己土 丁火 |
- - 癸水 |
日主 , 也称 日元 、 本命元神 或者 日干, 是 日柱中的天干 ,如以上 四柱八字中的 戊 。 日主 代表命主本身,是整个八字的核心所在
月令 , 也称 月支 , 在判断八字身强身弱的诸多因素中, 月令 占据这举足轻重的地位,是决定先天旺衰的关键所在。不同的季节对应着不同的五行旺相状态,而出生月份的地支所代表的五行,对日主五行的力量有着先天性的影响。 若 日主 的五行处于 当令 旺相状态,日主便处于 得令 状态,力量相对较强
通根 , 天干中的五行,在地支也能找到对应的五行
比如 甲木 ,在地支中能找到 寅木 、 卯木 既是有根,并且是 强根 ;如果有 未土 ,因为 未藏己丁乙 为 中气根 相比 本气根 会弱些;如果有 辰 , 因为 辰藏戊乙癸 ,为 余气根 属于最弱的根。
透干 , 地支中存在的五行,在天干中有对应的五行,则属于透干。 存在通根,也会存在透干 。如果 地支中存在的属性,天干中没有对应的属性(即不存在透干),则会比存在透干的属性弱一些
无根 / 天干虚浮 / 虚浮无根 指天干对应的五行在地支中没有对应的属性
天干的五行能量强于地干,天干代表会表现出来的特性,地支通常处于 伏藏 状态,不易被发现
四柱八字对应的信息
| 年柱 | 月柱 | 日柱 | 时柱 | |
|---|---|---|---|---|
| 天干 | 父亲 | 兄弟 | 命主 | 儿子 |
| 地支 | 母亲 | 姐妹 | 配偶 | 女儿 |
| 宫 | 父母宫 | 兄弟姐妹宫 | 夫妻宫 | 子女宫 |
| 年龄 | 1 - 18 岁 | 19 - 35 岁 | 36 - 54 岁 | 54 岁以后 |
| 身体部位 | 头部 | 胸背 | 腰腹 | 阴部、下肢、足 |
年柱主要代表了 父母 及 祖上 的信息
兄弟宫也可以代表父母,但是更偏向于 母亲
天干所表现的通常是能看得到的,地支通常存在 伏藏
年月日时之间的关联互动关系
| 关联 | 关系 | 说明 |
|---|---|---|
| 年月 | 父母关系或者祖父辈关系,主三十六之前的状态 年柱如果代表父亲,则月柱代表母亲 |
年月相合 : 父母关系好,三十岁前多贵人相助,年轻时做事容易成功 年月相冲 : 青年时期多奔波,不安稳,多白手起家,难得祖业,起点比较低 |
| 年日 | - 父母与配偶的关系 年柱代表父母,日柱代表配偶,如婆媳关系,女婿和岳父岳母关系 - 也代表命主和祖业的关系 |
年日相合 : 父母和配偶关系融洽,也可能会得到祖业祖产 年日相冲 : 和祖辈关系不好,婆媳/翁婿关系不好,容易远离家乡发展 |
| 年时 | - 子女关系 - 命主年轻时的事业和将来的事业状态好坏是否相同 |
年时相合 : 事业能够持续有成,事业能一直做到老;也代表后继有人,子女能成材 年冲时 : 家业难留,手下无强兵,自立自强 |
| 月日 | - 兄弟姐妹和配偶的关系 - 18-55 岁之间 为人生事业、婚姻、感情最为重要的阶段 |
月日相合 : 出社会后,事业关系和夫妻关系都不错,夫妻间能互相扶持,多贵人帮扶 月柱为兄弟宫, 月日相合 也表示能得到兄弟朋友的帮扶 月冲日 : 家庭纠纷多,婚姻不稳定,是非多 |
| 月时 | - 交友、合作伙伴、工作等 | 月时相合 : 容易和朋友合作投资赚钱,能有不错的表现 月冲时 : 看交友、合作伙伴; 子嗣凶顽,难管教,意外较多 |
| 日时 | - 夫妻关系 - 亲子关系 |
日时相合 : 亲子关系和谐,子女能达到父母期望 日时相冲 : (工作等)变动大;子女不好管,长大后聚少离多 |
不同属性的日主会代表命主本人有不同的性格特征,这些天干出现命盘的其他地方也会产生作用,无需一定是 日主 ,只是出现在日主能量更强。出现在地支通常代表命主内心的想法(伏藏),不一定会直接显现出来
| 日干 | 特点 |
|---|---|
| 甲木 | 甲木为阳 ,为参天大树,上进,专一,有组织领导能力 |
| 乙木 | 乙木为阴 ,为花草藤曼,善于借势借力,重视朋友 |
| 丙火 | 丙火为阳火 ,为太阳之火,热烈(热情)耿直 |
| 丁火 | 丁火为阴火 ,为烛火炉火,黑暗中的明灯(光明),温暖,随遇而安,持久性较强 |
| 戊土 | 戊土为阳土 ,为大地高山城墙,稳重可靠,包容万物;固执,很难被改变 |
| 己土 | 己土为阴土 ,为田园之土,可塑性和包容性强,有牺牲精神,注重义气 |
| 庚金 | 庚金为阳金 ,为刀斧之金,刚直不屈,坚韧果断,一根筋,不懂变通 |
| 辛金 | 辛金为阴金 ,为珠玉之金,好面子,自尊心极强,一般会长得漂亮,爱好打扮,形象好 |
| 壬水 | 壬水为阳水 ,为江海河湖泊之水,宽宏大量,变化快,不稳定,适应能力强 |
| 癸水 | 癸水为阴水 ,为雨露之水,滋润万物,愿意帮助别人并会得到反哺,足智多谋,阴柔十足 |
旺衰强弱 是指八字中 日主(日干,日元,本命,身) 的状态
论命以日干为主,称之曰 身,身之强弱,关系最为紧要,故首论之。 《千里命稿》
判断强弱主要是为了判断 日干的状态 和 取用神
日主强弱大致可以分为其中状态:
判断强弱使用以下步骤:
是否得令
传统廿四节气歌
春雨惊春清谷天,夏满芒夏暑相连。 |
论节气歌 《渊海子平》
正月立春雨水节,二月惊蛰及春风。 |
| 寅月 | 卯月 | 辰月 | 巳月 | 午月 | 未月 | 申月 | 酉月 | 戌月 | 亥月 | 子月 | 丑月 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 节 | 立春 | 惊蛰 | 清明 | 立夏 | 芒种 | 小暑 | 立秋 | 白露 | 寒露 | 立冬 | 大雪 | 小寒 |
| 气 / 候 | 雨水 | 春风 | 谷雨 | 小满 | 夏至 | 大暑 | 处暑 | 秋风 | 霜降 | 小雪 | 冬至 | 大寒 |
*需要注意的是,天干地支中表示的月份,都是以节气中的节为分割,而不是公历或者农历中的整月分割,例如正月的开始是 立春,而不是正月初一*
比如公元 1993 年 2 月 4 号,为农历 正月十三 ,为节气 立春 ,那么子天干地支纪年法中, 正月初一到正月十二不属于正月( 甲寅月 )而是属于前一年的腊月( 癸丑月 ),正月十三到二月十二属于正月( 甲寅月 )
| 节 | 气 | 说明 | 解释 |
|---|---|---|---|
| 立春 | 斗指东北,斗柄指向 寅 ,立春是干支历 寅 月的起始 。 | 立,是开始之意。万物复苏、生机勃勃,立春期间,气温上升,日照、降雨趋于增多 古代将立春分为三候: 一候东风解冻,二候蜇虫始振,三候鱼陟负冰 [1] |
|
| 雨水 | 降雨开始,但降雨量级以小雨或毛毛细雨为主,太阳的直射点由南半球逐渐向赤道靠近。这时的北半球,日照时数和强度都在增加,气温回升较快,来自海洋的暖湿气流开始活跃,并渐渐向北挺进;冷暖交汇形成降雨。 雨水三候是: 一候獭祭鱼,二候鸿雁来,三候草木萌动 雨水三候对应的花信是 一候菜花,二候棠棣,三候李花 |
||
| 惊蛰 | 惊蛰是干支历 卯 月的起始 | 时至惊蛰,阳气上升、气温回暖、春雷乍动、雨水增多,万物生机盎然 惊蛰三候为: 一候桃始华;二候仓庚鸣;三候鹰化为鸠 花信为: 一候桃花,二候杏花, 三候蔷薇 |
|
| 春风 | 春分又称为 日中、日夜分、仲春之月、升分 等。这一天太阳直射地球赤道,南北半球昼夜平分。 |
||
| 清明 | 清明是干支历 辰 月的起始 | 清明后雨水增多,大地呈现春和景明之象。草木始发新枝芽,万物开始生长,农民忙于春耕春种。 三候: 桐始华,田鼠化为鴽,虹始见,萍始生。 清明花信为: 一候桐花,二候麦花,三候柳花。 |
|
| 谷雨 | 谷雨就是 雨水生五谷 的意思,由于雨水滋润大地五谷得以生长,所以,谷雨就是 雨生百谷 。谚云 谷雨前后,种瓜种豆 。三候: 第一候萍始生;第二候鸣鸠拂其羽;第三候为戴胜降于桑。 谷雨时节正值暮春,是牡丹花开的重要时段,因此,牡丹花也被称为 谷雨花 ,民间有 谷雨三朝看牡丹 的说法。 |
| 节 | 气 | 说明 | 解释 |
|---|---|---|---|
| 立夏 | 斗指东南,斗柄指向 巳 ,立夏是干支历 巳 月的起始 。 | 盛夏时节的正式开始 | |
| 小满 | 气温升高,降雨增多。 三候是: 一候苦菜秀,二候靡草死,三候麦秋至 |
||
| 芒种 | 芒种是干支历 午 月的起始 | 芒 字指麦类等作物的收获,种 字是指谷黍类作物的播种, 芒种 二字表明一切作物都在 忙种 了,是农事最为繁忙的时节 。 三候: 一候螳螂生;二候鹏始鸣;三候反舌无声 |
|
| 夏至 | 太阳直射地面的位置到达一年的最北端,几乎直射北回归线,此时,北半球的白昼达最长。 夏至日阴气生而阳气始衰 三候: 一候鹿角解;二候蝉始鸣;三候半夏生。 |
||
| 小暑 | 小暑是干支历 未 月的起始 | 小暑意为天气开始炎热,但还没到最热。 三候: 一候温风至;二候蟋蟀居宇;三候鹰始鸷。 |
|
| 大暑 | 炎热至极 三候为: 一候腐草为萤;二候土润溽暑;三候大雨时行。 |
| 节 | 气 | 说明 | 解释 |
|---|---|---|---|
| 立秋 | 斗指西南,斗柄指向 申 ,立秋是干支历 申 月的起始 。 | 三候为: 初候凉风至,二候白露降,三候寒蝉鸣 |
|
| 处暑 | 即为 出暑 ,是炎热离开的意思。 气温由炎热向寒冷过渡的节气 三候: 一候鹰乃祭鸟;二候天地始肃;三候禾乃登。 |
||
| 白露 | 白露是干支历 酉 月的起始 | 自白露节气开始,季风交替,夏季季风逐渐被冬季季风代替,冷空气逐步南移,天气明显变得凉爽。 三候是: 一候鸿雁来;二候玄鸟归;三候群鸟养羞。 |
|
| 秋风 | 秋分当日太阳直射赤道,全球各地昼夜等长。 三候: 一候雷始收声;二候蛰虫坯户;三候水始涸 |
||
| 寒露 | 小暑是干支历 戌 月的起始 | 寒露节气是天气转凉的象征,如俗语所说, 寒露寒露,遍地冷露 ,寒露时的气温比白露时更低,地面的露水快要凝结成霜了。 三候: 一候鸿雁来宾;二候雀入大水为蛤;三候菊有黄华 |
|
| 霜降 | 天气渐冷、初霜出现。 三候: 一候豺乃祭兽;二候草木黄落;三候蜇虫咸俯 |
| 节 | 气 | 说明 | 解释 |
|---|---|---|---|
| 立冬 | 斗指西北,斗柄指向 亥 ,立冬是干支历 亥 月的起始 。 | 意味着生气开始闭蓄,万物进入休养、收藏状态。 三候: 一候水始冰;二候地始冻;三候雉入大水为蜃 |
|
| 小雪 | 三候: 一候虹藏不见;二候天气上升地气下降;三候闭塞而成冬 |
||
| 大雪 | 大雪是干支历 子 月的起始 | 三候为: 一候鹖鴠不鸣;二候虎始交;三候荔挺出 |
|
| 冬至 | 太阳直射地面的位置到达一年的最南端,几乎直射南回归线,这一天北半球的白昼最短,且越往北越短,黑夜最长。 冬至三候为: 一候蚯蚓结,二候麋角解,三候水泉动 |
||
| 小寒 | 小寒是干支历 丑 月的起始 | 一年中最寒冷的时节 三候为: 一候雁北乡,二候鹊始巢,三候雉始鸲 |
|
| 大寒 | 三候: 一候鸡乳;二候征鸟厉疾;三候水泽腹坚 |
GIMP(GNU Image Manipulation Program) 是一个开源的专业的图像处理工具 [1]
选择颜色拾取器工具
在左侧工具栏中,点击 颜色拾取工具(吸管图标),或快捷键 O 。接着鼠标点击图片上你想匹配的颜色。
将拾取的颜色用于新内容
拾色后,GIMP 会自动将该颜色设为 前景色(在工具箱左下角可见) 。
如果你是使用:
文字工具 : 输入新文字后,在工具选项中点击 颜色 ,然后点击刚才的前景色。
画笔/填充工具 : 直接使用前景色即可绘制或填充。
使用矩形选择工具
在左侧工具栏选择 矩形选择工具(快捷键:R)。在图像中框选你要复制的区域。
复制或剪切该区域
Ctrl + C(或 菜单:编辑 > 复制 )。 Ctrl + X(或 菜单:编辑 > 剪切 )。粘贴到新位置
按 Ctrl + V (或 菜单:编辑 > 粘贴 )。 此时会出现一个名为 浮动选择(浮动图层) 的新图层,附着在原图上。
移动
在左侧工具栏选择 移动工具(十字箭头图标,快捷键:M)。 拖动粘贴的内容到你想要放置的位置。
锚定或新建图层
如果你满意现在的位置,可以:
Ctrl + H 或 图层 > 锚定图层 ,粘贴内容会并入原图。浮动图层 > 转为新图层 ,便于后续调整。要测量图片中指定元素的精确大小(Pixel),可以参考以下方法
使用 测量工具(Measure Tool)
测量工具 (图标像一个圆规),或按快捷键 Shift + M , 鼠标点击图片上你要测量的起点 → 拖动到终点。状态栏会实时显示 距离(以像素为单位) ,如 Distance: XXX px 。使用 矩形选择工具 看宽高
矩形选择工具 (快捷键 R), 用鼠标拖出一个区域(框住你要测量的元素), 在 工具选项 面板或 状态栏 里,会显示所选区域的Position: X, Y |
图片经常会出现某个角较低或较高的情况,此时想要调整图片是所有角处于完美的矩形状态,可以使用 透视工具(Perspective Tool)
透视工具(Perspective Tool) 或使用快捷键 Shift + P Centos 7 默认的内核版本 3.10 在运行 kubernetes 时存在不稳定性,建议升级内核版本到新版本
Linux 升级内核
Centos 7 默认的内核版本 3.10 使用的 cgroup 版本为 v1,Kubernetes 的部分功能必须使用
cgroup v2来进行增强的资源管理和隔离 [13]使用以下命令检查系统使用的
cgroup版本
stat -fc %T /sys/fs/cgroup/如果输出是
cgroup2fs, 表示使用 cgroup v2如果输出是
tmpfs, 表示使用 cgroup v1
User Namespaces功能需要 Linux 6.3 以上版本,tmpfs才能支持idmap挂载。并且其他功能(如 ServiceAccount 的挂载)也需要此功能的支持 [14]Kubernetes v1.32 需要 Linux Kernel >= 4.19, 建议 5.8+ 以更好的支持 cgroups v2
Rocky Linux 8 或者 Centos 8 默认使用
cgroup v1,需要升级到cgroup v2,执行命令grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=1"后重启即可升级到cgroup v2。 使用以下命令检查:
# stat -fc %T /sys/fs/cgroup/
cgroup2fs若 CRI 使用 Containerd,需要 配置启用 CRI 以及配置其使用
cgroup v2。
kubernetes 目前未实现对 SELinux 的支持,因此必须要关闭 SELinux
sudo setenforce 0 |
配置集群所有节点的防火墙,确保所有集群节点之间具有完全的网络连接。
FORWARD 链的流量*filter |
此文档中的配置主要针对基于部署在裸机(安装通用 Linux 发行版的物理机或者云主机系统)上的 Kebernetes 集群
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.3.1/deploy/static/provider/cloud/deploy.yaml |
编辑 ingress-nginx-controller 的 Deployment 配置文件,在 Deployment 中的 .spec.template.spec 下添加字段 hostNetwork: true,以使 ingress-nginx-controller 可以使用节点的主机网络提供对外访问
Kubernetes 对任何网络实现都规定了以下要求: [1]
所有 Pod 都可以在不使用网络地址转换 (NAT) 的情况下与所有其他 Pod 通信。
容器之间直接通信,不需要额外的 NAT,不存在源地址伪装的情况
所有节点都可以在没有 NAT 的情况下与所有 Pod 通信。
Node 与容器直接通信,不需要额外的 NAT
Pod 认为自己的 IP 与其他人认为的 IP 相同。
CNI 是 Kubernetes 容器网络的标准,CNI 是 Kubernetes 和底层网络插件之间的一个抽象层,为 Kubernetes 屏蔽了底层网络实现的负责度,同时解耦了 Kubernetes 和具体的网络插件实现。
$ yum install kubernetes-cni |
Kubernetes 要使用 CNI,需要在 kubelet 启动时配置启动参数 --network-plugin=cni(默认配置,可使用 systemctl status kubelet -l 查看启动参数)。
kubelet 从 --cni-config-dir (默认为 /etc/cni/net.d/)中读取网络插件的配置文件,并使用该文件中的 CNI 配置来配置每个 Pod 网络。如果该目录 (/etc/cni/net.d/)中有多个配置文件,则使用文件名字典序列中的第一个文件。
CNI 插件的二进制文件放置的目录是通过 kubelet 的 --cni-bin-dir 参数指定,默认为 /opt/cni/bin/
wget https://github.com/etcd-io/etcd/releases/download/v3.5.9/etcd-v3.5.9-linux-amd64.tar.gz |
启动 etcd
# etcd |
# etcd --version |
etcd 创建集群涉及参数说明
| name | 说明 | 命令行参数 |
|---|---|---|
name |
每个集群成员的唯一名称 | --name=etcd0 |
initial-advertise-peer-urls |
群成员广播给集群其他成员(用于连接本节点)的 URL 默认为 http://IP:2380 |
--initial-advertise-peer-urls=http://10.0.0.10:2380 |
listen-peer-urls |
在这些(一个或多个) URL 上监听其他集群成员的连接请求 通信包括了集群管理任务、数据同步和心跳检测等 |
http://10.0.0.10:2380,http://127.0.0.1:2380 |
listen-client-urls |
该成员监听客户端连接的 URL。 默认端口 2379 | --listen-client-urls=http://10.0.0.10:2379,http://127.0.0.1:2379 |
advertise-client-urls |
该成员广播给客户端的 URL | --advertise-client-urls=http://10.0.0.10:2379 |
initial-cluster |
所有 etcd 成员的初始列表 |
--initial-cluster=etcd0=http://10.0.0.10:2380,etcd1=http://10.0.0.11:2380,etcd2=http://10.0.0.12:2380 |
data-dir |
etcd 数据的存储目录。 |
--data-dir=/var/lib/etcd |
initial-cluster-token |
初始集群的唯一标识符,用于区分不同的 etcd 集群 |
--initial-cluster-token=my-etcd-token |
initial-cluster-state |
初始集群状态,可以是 new 或 existing。通常在引导新集群时使用 new,而在添加或删除成员时使用 existing。 |
--initial-cluster-state=new |
quota-backend-bytes |
etcd 的后端数据库大小的硬限制,默认是 2GB |
--quota-backend-bytes=3000000000 |
cert-filekey-file |
用于 HTTPS 的证书和私钥 | --cert-file=/etc/kubernetes/pki/etcd/server.crt --key-file=/etc/kubernetes/pki/etcd/server.key |
trusted-ca-file |
客户端和对等体的验证所需的 CA 证书 | --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt |
client-cert-auth |
启用客户端证书验证,默认为 false |
--client-cert-auth |
listen-peer-urls 和 initial-advertise-peer-urls 的区别说明:
listen-peer-urls
这个参数指定了 etcd 成员应该在哪些地址和端口上监听来自其他 etcd 成员的请求(数据同步、领导选举、集群更改等相关)
主要用途是定义哪个网络接口和端口号应该被 etcd 服务绑定,以便它可以接收来自其他成员的连接
initial-advertise-peer-urls
这个参数告诉 etcd 该如何 通告自己 给集群中的其他成员。这是其他集群成员用来联系此 etcd 成员的地址。
主要用途是 当新成员加入集群时,它需要通知其他成员自己的存在,以及如何与自己通信,因此它必须是个其他节点可达的 Endpoints,如 http://0.0.0.0:2380 就不行。
listen-client-urls和advertise-client-urls的区别同理
示例环境说明
| 主机 | IP | 角色 |
|---|---|---|
| etcd1 | 172.17.0.2/16 | etcd node |
| etcd2 | 172.17.0.3/16 | etcd node |
| etcd3 | 172.17.0.4/16 | etcd node |
分别在 3 个节点上执行以下 3 条命令,创建集群
etcd1 执行命令:
etcd --data-dir=data.etcd --name etcd1 \ |
etcd2 执行命令:
etcd --data-dir=data.etcd --name etcd2 \ |
etcd3 执行命令:
etcd --data-dir=data.etcd --name etcd3 \ |
检查节点健康状态
# ENDPOINT=http://172.17.0.3:2380,http://172.17.0.2:2380,http://172.17.0.4:2380 |
# etcdctl version |
Kubernetes 中查看 etcd 集群成员列表使用如下命令
# kubectl exec -n kube-system -it etcd-k8s-master1 -- sh -c "ETCDCTL_API=3 etcdctl member list --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key" |
指定输出格式为 table
# etcdctl member list --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key --write-out=table |
输出内容说明如下:
3c087bf12db7a0f : 集群中每一个成员的唯一 ID。started : 集群成员的当前状态。started 表示活动的。k8s-master2 : etcd 集群成员的名字,通常与其主机名或节点名相对应https://172.31.30.115:2380 : Peer URLs,其他 etcd 成员用于与该成员通信的 URL。默认为 本地 IP 的 2380 端口https://172.31.30.123:2379 : Client URLs ,客户端用于与 etcd 成员通信的 URL。默认为 本地 IP 的 2379 端口Is Learner : 表示该成员是否是一个 learner。Learner 是 etcd 的一个新功能,允许一个成员作为非投票成员加入集群,直到它准备好成为一个完全参与的成员。false 表示它们都不是 learners检查单个节点的集群配置状态
# etcdctl --write-out=table endpoint status --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key |
查看所有节点的集群配置状态
# ENDPOINTS=https://172.31.30.115:2379,https://172.31.29.250:2379,https://172.31.30.123:2379 |
适用以下版本
环境息息
如果是 Centos 7 ,参考以下命令安装 centos-kernel 源
elrepo-kernel中已经没有 Centos 7 相关的内核安装包
yum install centos-release |
如果是 Centos 8 或 Rocky Linux 8,参考以下命令安装 elrepo 源
# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org |
strace 命令示例,详细使用说明请参考 man strace
# strace ls |
strace 跟踪输出中包含
execve 、 openat 等"/usr/bin/ls" 、 AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC= -1 EINVAL (Invalid argument) 、 -1 ENOENT (No such file or directory) 、 = 0| 选项 | 说明 | 示例 |
|---|---|---|
-o filename--output=filename |
将跟踪内容写入指定文件而不是 STDOUT(默认值) | |
-p pid--attach=pid |
追踪 PIDs 对应的进程,Ctrl + C 结束追踪。 支持 , 、 空格 ( ) 、 TAB 键( \t )分割的多个 PID |
|
-e expr |
追踪表达式匹配的系统调用,表达式语法请参考 man strace |
|
-c--summary-only |
仅输出调用的统计数据,不输出常规跟踪内容 | |
-C--summary |
输出常规跟踪内容后,输出统计信息 |
ansible-core 版本及 Python 版本支持对应关系
| ansible-core Version | Control Node Python | Target Python / PowerShell |
|---|---|---|
| 2.16 | Python 3.10 - 3.12 | Python 2.7 Python 3.6 - 3.12 Powershell 3 - 5.1 |
为了环境部署方便灵活,可以选择使用 python:3.12.3 的 Docker 镜像,以其为基础环境安装 ansible-core 2.16 或者直接使用 ansible 镜像启动。
# docker run --rm -it python:3.12.3 bash |
Ansible 主配置文件为 /etc/ansible/ansible.cfg,其中的配置都可以被 ansible-playbook 或者命令行参数覆盖。
ansible 默认会读取环境变量
ANSIBLE_CONFIG指定的配置文件,当前路径下的ansible.cfg,以及用户家目录下的.ansible.cfg,以及/etc/ansible/ansible.cfg作为配置文件,已第一个找到的为准
常用配置说明
| 配置项 | 说明 | 示例 |
|---|---|---|
inventory |
指定 inventory (主机列表)文件的路径,默认为 /etc/ansible/hosts |
|
remote_user |
(未指定用户时)连接远程主机时使用的用户 | |
remote_port |
连接远程主机时使用的(默认)端口 | |
host_key_checking |
默认启用。检查主机密钥可以防止服务器欺骗和中间人攻击。 如果主机重新安装并且在 know_hosts 中拥有不同的密钥,ansible 会提示确认密钥。如果要禁用此行为,可以配置为 False |
|
ask_pass |
默认为 False。当设置为 True 时,ansible 要求输入远端服务器的密码,即使配置了免密登录 | |
log_path |
日志文件,默认 /var/log/ansible.log |
|
pattern |
当没有给出 pattern 时的默认 pattern,默认值是 * 即所有主机 |
配置示例
[defaults] |
默认的 inventory 配置文件路径为 /etc/ansible/hosts,主要用来配置 Managed Hosts 列表 [3]
在命令行中,可以使用选项 -i <path> 指定不同的 inventory 或者可以在 ansible 配置文件 ansible.cfg 中使用指令 inventory 指定 inventory 文件位置。
命令行中可以使用
-i <path1> -i <path2> ...指定多个inventory
inventory 文件支持多种格式,最常见的是 INI 和 YAML 格式。
all : 包含所有主机ungrouped : 包含所有不在其他组(all 除外)中的所有主机。任何一个主机都会至少在 2 个组中,要么 在
all和某个组中,要么 在all和ungrouped组。
parent/child 组,child 组被包含在 parent 组中。:children 后缀配置 parentchildren: 配置 parent
- 任何在
child组中的主机自动成为parent组中的一员- 一个组可以包括多个
parent和child组,但是不能形成循环关系- 一个主机可以在多个组中,但是在运行时,只能有一个实例存在,Ansible 会自动将属于多个组的主机合并。
[webservers] |
# ... |
范围格式 的第一项和最后一项也包括在内。即匹配
www01和www50
在主机数量较多,或者组织结构较复杂的情况下,使用单个 Inventory 配置文件会导致主机管理较为复杂。将单个 Inventory 配置文件按照项目或者组织或其他规则进行分割会显著降低维护复杂度。
Inventory 多配置文件支持,可以使用以下方法之一
-i <path1> -i <path2> ... 指定多个 inventory/etc/ansible/inventory/),在命令行中使用选项 -i /etc/ansible/inventory/ 或者在 Ansible 配置文件(ansible.cfg)中使用指令 inventory 配置目录。注意事项: Ansible 使用字典顺序加载配置文件,如果在不同的配置文件中配置了
parent groups和child groups,那么定义child groups的配置要先用定义parent groups的文件加载,否则 Ansible 加载配置会报错:Unable to parse /path/to/source_of_parent_groups as an inventory source[4]
group_vars 和 host_vars 目录分别存储组变量和主机变量 [7]注意事项: 组变量和主机变量必须使用 YAML 格式,合法的文件扩展名包括:
.yaml、yml、.json或者无文件扩展名
主机列表中的主机可以单独出现,也可以位于某个或者多个 组([] 开头的行)中
ansible-demo1.local |
连接主机使用的常用配置说明 [6]
| 配置项 | 说明 | 示例 |
|---|---|---|
ansible_host |
远程主机地址 | |
ansible_port |
远程主机端口 | |
ansible_user |
连接远程主机的 ssh 用户 Ansible 默认使用 control node 上执行 ansible 的用户名来连接远程主机 [9] |
|
ansible_password |
连接远程主机的 ssh 用户密码,建议使用 key 连接 | |
ansible_ssh_private_key_file |
连接远程主机的 ssh 私钥文件路径 | |
ansible_become ansible_sudo ansible_su |
用户权限提升 | |
ansible_become_method |
用户权限提升(escalation)的方式 | |
ansible_become_user ansible_sudo_user ansible_su_user |
用户权限提升(escalation)后的用户 | |
ansible_become_password ansible_sudo_password ansible_su_password |
sudo 密码(这种方式并不安全,强烈建议使用 --ask-sudo-pass) |
|
ansible_become_exeansible_sudo_exe ansible_su_exe |
设置用户权限提升(escalation)后的可执行文件 | |
ansible_connection |
与主机的连接类型.比如:local, ssh 或者 paramikoAnsible 1.2 以前默认使用 paramiko。1.2 以后默认使用 smart,smart 方式会根据是否支持 ControlPersist, 来判断 ssh 方式是否可行. |
|
ansible_shell_type |
目标系统的 shell 类型.默认情况下,命令的执行使用 sh 语法,可设置为 csh 或 fish. |
|
ansible_python_interpreter |
目标主机的 python 路径 系统中有多个 Python, 或者命令路径不是 /usr/bin/python |
containerd 服务默认配置文件为 /etc/containerd/config.toml
#root = "/var/lib/containerd" |
Containerd 有两个不同的存储路径,一个用来保存持久化数据,一个用来保存运行时状态。 [1]
#root = "/var/lib/containerd" |
root - 用来保存持久化数据,包括 Snapshots, Content, Metadata 以及各种插件的数据。每一个插件都有自己单独的目录,Containerd 本身不存储任何数据,它的所有功能都来自于已加载的插件。state - 用来保存临时数据,包括 sockets、pid、挂载点、运行时状态 以及不需要持久化保存的插件数据。#oom_score = 0 |
Containerd 是容器的守护者,一旦发生内存不足的情况,理想的情况应该是先杀死容器,而不是杀死 Containerd。所以需要调整 Containerd 的 OOM 权重,减少其被 OOM Kill 的几率。oom_score 其取值范围为 -1000 到 1000,如果将该值设置为 -1000,则进程永远不会被杀死,建议 Containerd 将该值设置为 -999 到 0 之间。如果作为 Kubernetes 的 Worker 节点,可以考虑设置为 -999。
默认的 containerd 服务的配置为 /usr/lib/systemd/system/containerd.service
[Unit] |
Delegate - 这个选项允许 Containerd 以及运行时自己管理自己创建的容器的 cgroups。如果不设置这个选项,systemd 就会将进程移到自己的 cgroups 中,从而导致 Containerd 无法正确获取容器的资源使用情况。
KillMode - 这个选项用来处理 Containerd 进程被杀死的方式。默认情况下,systemd 会在进程的 cgroup 中查找并杀死 Containerd 的所有子进程,这肯定不是我们想要的。KillMode 字段可以设置的值如下:
control-group -(默认值)当前控制组里面的所有子进程,都会被杀掉process - 只杀主进程。mixed - 主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号none - 没有进程会被杀掉,只是执行服务的 stop 命令。 需要将 KillMode 的值设置为 process,这样可以确保升级或重启 Containerd 时不杀死现有的容器。
Containerd 默认配置文件为 /etc/containerd/config.toml,未在配置文件中配置的则使用默认配置,为了方便修改,可以使用以下命令将默认配置写入配置文件中
containerd config default | sudo tee /etc/containerd/config.toml |
在作为 Kubernetes 的 CRI 时,需要修改以下配置:
disabled_plugins = ['cri']),要启用 cri ,将其注释或删除cgroup v2, Kubernetes 的很多功能需要 cgroup v2 支持,Kubernetes 节点通常使用 cgroup v2,要配置 containerd 使用 cgroup v2,修改配置文件的 plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options 部分,将 SystemdCgroup 配置为 true 后重启 containerd 服务[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] |
ctr image pull docker.io/library/nginx:alpine |
$ ctr image ls |
$ ctr image mount docker.io/library/nginx:alpine /mnt |
卸载已挂载的镜像
ctr image unmount /mnt |
ctr container create docker.io/library/nginx:alpine nginx |
容器创建后,并没有开始运行,只是分配了容器运行所需的资源及配置的数据结构,这意味着 namespaces、rootfs 和容器的配置都已经初始化成功了,只是用户进程(这里是 nginx)还没有启动,容器(进程)状态的变化由 Task 对象实现,通过命令 ctr task 来管理。
启动 ctr container create 创建的容器
ctr task start nginx |
以上命令启动之前创建的容器 nginx,未指定其他参数时,容器中的进程在系统前台运行,如需后台运行,可以使用选项 -d
ctr task start nginx -d |
也可以直接使用 run 命令,创建并启动容器
ctr run --rm -d docker.io/library/nginx:alpine nginx1 |
ctr container ls |
查看容器中进程的状态
$ ctr task ls |
查看容器中运行的所有的进程
$ ctr task ps nginx1 |
这里的 PID 是宿主机看到的 PID,不是容器中看到的 PID。
ctr container info nginx |
停止/删除容器中的进程
ctr task delete nginx -f |
以上命令删除/停止容器中的进程,但是并不删除容器,执行以上命令后再执行以下命令,可删除容器
ctr container delete nginx |
ctr 没有 stop 容器的功能,只能暂停或者杀死容器。
ctr task exec -t --exec-id 1 nginx1 sh |
执行 ctr task exec 进入容器,必须制定 --exec-id,值可以随便指定。
Containerd 相比于 Docker ,多了 Namespace 的概念,使用以下命令,查看所有的 Namespace
$ ctr ns ls |
docker 默认使用 moby 的 Namespace,要使用 ctr 命令查看 docker 创建的容器,需要使用选项 -n moby 指定命名空间,否则 ctr 默认使用 default 命名空间,无法看到 moby 命名空间中的资源
ctr -n moby container ls |
Kubernetes 默认使用 k8s.io 命名空间。
ctr 没有配置或者环境变量可以来配置默认的 Namespace,在 Kubernetes 场景中,可以使用 alias 命令配置 ctr,使其自动指向 k8s.io 的 Namespace
alias ctr='ctr -n k8s.io' |
nerdctl 是为 Containerd 开发的完全兼容 Docker 命令行的工具,它可以使用和 docker 命令一样的语法来操作 containerd 中的容器。
如果要使用 nerdctl 调试 Kubernetes 环境中的容器,需要指定 Namespace,示例如下:
# nerdctl --namespace k8s.io ps -a |
如果是在 Kubernetes 环境中使用,为方便起见,可以添加环境变量:
# alias nerdctl='nerdctl --namespace k8s.io' |