<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>ylxs</title><description>blog</description><link>http://blog.cnylxs.xyz/</link><templateTheme>Firefly</templateTheme><templateThemeVersion>1.0.0</templateThemeVersion><templateThemeUrl>https://github.com/CuteLeaf/Firefly</templateThemeUrl><lastBuildDate>2026年8月26日 10:33:05</lastBuildDate><item><title>prometheus面试题</title><link>http://blog.cnylxs.xyz/posts/interview_prometheus-20260825-01/</link><guid isPermaLink="true">http://blog.cnylxs.xyz/posts/interview_prometheus-20260825-01/</guid><description>prometheus面试题</description><pubDate>Tue, 25 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h1&gt;一、 Prometheus 基础与架构&lt;a href=&quot;#一-prometheus-基础与架构&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Prometheus 的核心架构由哪些组件组成？各自职责是什么？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Prometheus Server&lt;/strong&gt;：核心，负责指标抓取（scrape）、存储（TSDB）、PromQL 查询与告警规则评估。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Exporters&lt;/strong&gt;：暴露监控指标的采集端（node-exporter、mysql-exporter 等）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pushgateway&lt;/strong&gt;：临时任务的指标推送入口（短期 Job 场景）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alertmanager&lt;/strong&gt;：处理告警（去重、分组、路由、抑制、静默、通知）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Web UI / Grafana&lt;/strong&gt;：可视化查询界面。&lt;/li&gt;
&lt;li&gt;工作流：&lt;code&gt;Exporter 暴露指标 → Prometheus 定时 pull → 存储 TSDB → 规则评估触发告警 → Alertmanager 通知&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Prometheus 的数据模型是什么？时间序列由什么组成？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;数据模型：&lt;strong&gt;基于标签的多维时间序列数据模型&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;一条时间序列 = &lt;strong&gt;指标名（metric name）+ 标签集（labels）+ 时间戳与样本值&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;唯一标识：&lt;code&gt;指标名 + 标签键值对集合&lt;/code&gt;（相同标识的多次采集构成时间序列）。&lt;/li&gt;
&lt;li&gt;示例：&lt;code&gt;http_requests_total{method=&quot;GET&quot;, code=&quot;200&quot;}&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;标签作用：维度筛选、聚合、告警分组。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Prometheus 的四种指标类型是什么？各自适用什么场景？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Counter&lt;/strong&gt;：只增不减的计数器（请求总数、错误总数），用 &lt;code&gt;rate()&lt;/code&gt; 计算速率。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gauge&lt;/strong&gt;：可增可减的瞬时值（CPU 使用率、内存占用、在线人数）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Histogram&lt;/strong&gt;：直方图，统计分布（请求延迟分位数），支持 &lt;code&gt;histogram_quantile&lt;/code&gt; 计算 P99。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Summary&lt;/strong&gt;：摘要，客户端直接计算分位数（延迟 P50/P99），无法跨实例聚合。&lt;/li&gt;
&lt;li&gt;选型：计数用 Counter、瞬时值用 Gauge、延迟分布优先 Histogram（可聚合）。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;二、 数据采集&lt;a href=&quot;#二-数据采集&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Prometheus 为什么采用 pull 模式？Pushgateway 的适用场景和缺点？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;pull 模式&lt;/strong&gt;：Prometheus 主动从目标抓取，优势：采集端更易发现故障（目标挂了直接抓不到）、配置集中管理、天然避免指标重复。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pushgateway&lt;/strong&gt; 适用场景：短期任务（批处理 Job）在运行结束时推指标，因为任务生命周期太短 pull 来不及抓取。&lt;/li&gt;
&lt;li&gt;缺点：Pushgateway 是&lt;strong&gt;单点&lt;/strong&gt;、无法感知任务实例是否存活、指标可能长期残留（需主动清理）、多实例指标聚合困难。&lt;/li&gt;
&lt;li&gt;建议：能 pull 就 pull，Pushgateway 只用于必要的短生命周期任务。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Prometheus 支持哪些服务发现方式？K8s 场景如何配置？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;常见方式：&lt;strong&gt;file_sd&lt;/strong&gt;（文件列表）、&lt;strong&gt;consul_sd&lt;/strong&gt;、&lt;strong&gt;dns_sd&lt;/strong&gt;、&lt;strong&gt;ec2_sd&lt;/strong&gt; 等云平台发现、&lt;strong&gt;kubernetes_sd&lt;/strong&gt;（K8s 原生发现）。&lt;/li&gt;
&lt;li&gt;K8s 发现：通过 &lt;code&gt;kubernetes_sd_configs&lt;/code&gt; 的 role（node、pod、service、endpoints、ingress）动态发现目标。&lt;/li&gt;
&lt;li&gt;优势：Pod 弹性扩缩容时自动增减采集目标，无需手工维护 target 列表。&lt;/li&gt;
&lt;li&gt;配合：&lt;code&gt;relabel_configs&lt;/code&gt; 对发现的目标进行标签改写与过滤（如只采集带特定注解的 Pod）。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;scrape_configs 中常见的采集参数有哪些？分别什么作用？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;job_name&lt;/strong&gt;：采集任务名（一组目标的逻辑集合）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;scrape_interval / scrape_timeout&lt;/strong&gt;：抓取间隔与超时（默认 15s / 10s）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;metrics_path&lt;/strong&gt;：指标路径（默认 /metrics）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;static_configs / kubernetes_sd_configs&lt;/strong&gt;：目标列表或服务发现配置。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;relabel_configs&lt;/strong&gt;：目标标签的增删改（过滤、合并、从元数据提取标签）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;metric_relabel_configs&lt;/strong&gt;：采集后对指标本身的标签过滤（常用于降低基数）。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;三、 PromQL 查询&lt;a href=&quot;#三-promql-查询&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;PromQL 的查询类型有哪些？有什么区别？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;瞬时向量（Instant Vector）&lt;/strong&gt;：查询某一时刻的指标值（如 &lt;code&gt;up&lt;/code&gt;），用于告警规则、仪表盘瞬时值。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;范围向量（Range Vector）&lt;/strong&gt;：查询一段时间内的指标序列（如 &lt;code&gt;up[5m]&lt;/code&gt;），配合 rate 等函数计算速率。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;标量（Scalar）&lt;/strong&gt;：单一数值（如 &lt;code&gt;10&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;字符串&lt;/strong&gt;：查询语句中的常量。&lt;/li&gt;
&lt;li&gt;核心区别：范围向量带时间窗口，是计算速率/趋势的前提。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;rate、irate、increase、count_over_time 等常用函数的作用与区别？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;rate()&lt;/strong&gt;：计算区间内每秒平均增长率（&lt;code&gt;rate(counter[5m])&lt;/code&gt;），对 Counter 使用，平滑抗抖动。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;irate()&lt;/strong&gt;：区间内最后两个样本的&lt;strong&gt;瞬时增长率&lt;/strong&gt;，更敏感但曲线波动大，适合突增告警。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;increase()&lt;/strong&gt;：区间内的增量（&lt;code&gt;increase(counter[1h])&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;count_over_time()&lt;/strong&gt;：区间内样本数量统计（如判断指标是否一直存在）。&lt;/li&gt;
&lt;li&gt;选型：趋势分析用 rate，突增检测用 irate；&lt;strong&gt;Counter 必须用 rate/increase 换算成速率才有意义&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;PromQL 的聚合操作有哪些？二元运算注意什么？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;聚合函数：&lt;strong&gt;sum、avg、min、max、count、quantile&lt;/strong&gt;（分位数）、topk/bottomk 等，配合 &lt;code&gt;by&lt;/code&gt;/&lt;code&gt;without&lt;/code&gt; 按标签分组。&lt;/li&gt;
&lt;li&gt;示例：&lt;code&gt;sum(rate(http_requests_total[5m])) by (instance)&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;二元运算：算术（+ - * / %）、比较（&amp;gt; &amp;lt; ==）、逻辑（and or unless）。&lt;/li&gt;
&lt;li&gt;注意：&lt;strong&gt;向量匹配&lt;/strong&gt;（一对一、一对多、多对一，用 on/ignoring 指定匹配标签）、标签一致性、以及除法时防止除零。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;四、 存储&lt;a href=&quot;#四-存储&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Prometheus 本地存储的架构与写入流程？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;基于自研 &lt;strong&gt;TSDB&lt;/strong&gt;，数据按**块（Block）**组织（2 小时一个块），块内按指标分片。&lt;/li&gt;
&lt;li&gt;写入流程：样本先写入 &lt;strong&gt;WAL（预写日志）&lt;/strong&gt; → 定期压缩成块 → 块合并/压缩（compaction）→ 定期删除过期块（retention）。&lt;/li&gt;
&lt;li&gt;查询时按块读取并合并。&lt;/li&gt;
&lt;li&gt;特点：本地存储简单高效，但&lt;strong&gt;单机容量有限&lt;/strong&gt;、不可水平扩展、节点故障数据即丢失。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;数据保留（retention）与压缩策略如何配置？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;—storage.tsdb.retention.time&lt;/strong&gt;：保留时长（如 15d、30d），超过自动删除旧块。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;—storage.tsdb.retention.size&lt;/strong&gt;：按磁盘容量限制（如 50GB）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;—storage.tsdb.wal-compression&lt;/strong&gt;：WAL 压缩（默认开启）。&lt;/li&gt;
&lt;li&gt;注意：本地存储上限受磁盘限制，规划容量 = 样本数 × 时间跨度 × 样本大小；长期保留建议上远程存储。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Prometheus 远程存储方案有哪些？Thanos 和 VictoriaMetrics 的区别？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;方案：&lt;strong&gt;Thanos&lt;/strong&gt;（Prometheus 官方生态）、&lt;strong&gt;VictoriaMetrics&lt;/strong&gt;、&lt;strong&gt;Mimir/Cortex&lt;/strong&gt;、云厂商托管（云监控）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Thanos&lt;/strong&gt;：Sidecar 上传块到对象存储（S3），支持全局查询、压缩去重、长期存储；保留 Prometheus 原生查询语义。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VictoriaMetrics&lt;/strong&gt;：高性能、低资源占用，兼容 PromQL，支持集群模式与降采样，运维更简单。&lt;/li&gt;
&lt;li&gt;选型：已有生态选 Thanos；追求性能与省资源选 VictoriaMetrics。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;五、 告警&lt;a href=&quot;#五-告警&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;告警的完整流程是怎样的？Alertmanager 在其中扮演什么角色？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;流程：&lt;strong&gt;规则评估 → 告警产生 → 发送给 Alertmanager → 分组/去重/抑制 → 路由 → 通知&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;Prometheus 侧：&lt;code&gt;rules&lt;/code&gt; 文件定义告警规则（expr 表达式 + for 持续时间 + labels/annotations），评估后进入 Pending → Firing。&lt;/li&gt;
&lt;li&gt;Alertmanager：负责&lt;strong&gt;告警分组&lt;/strong&gt;（同类合并）、&lt;strong&gt;去重&lt;/strong&gt;（同一告警不重复通知）、&lt;strong&gt;抑制&lt;/strong&gt;（严重告警压制次要告警）、&lt;strong&gt;静默&lt;/strong&gt;（临时屏蔽）、&lt;strong&gt;路由&lt;/strong&gt;（按标签分发到不同接收器）。&lt;/li&gt;
&lt;li&gt;高可用：多实例 Alertmanager 组成集群（Gossip 同步去重状态）。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;告警规则中的 for（持续时间）参数有什么作用？如何避免告警风暴？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;for&lt;/strong&gt;：指标持续满足条件多久才触发告警（如 &lt;code&gt;for: 5m&lt;/code&gt;），避免瞬时抖动误报。&lt;/li&gt;
&lt;li&gt;避免告警风暴：设置合理的 for、Alertmanager 分组聚合、抑制规则（父告警压制子告警）、静默窗口、通知限流（repeat_interval）。&lt;/li&gt;
&lt;li&gt;实践：故障升级时先告警核心指标，避免每个节点每个指标都发一条。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Alertmanager 的路由树（route）如何配置？静默与抑制的区别？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;route&lt;/strong&gt;：树形路由，按告警标签（severity、team、instance）匹配分发到不同 receiver（邮件、钉钉、Webhook）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;静默（Silence）&lt;/strong&gt;：主动屏蔽指定告警（按标签匹配），常用于已知维护窗口（如发版、维护）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;抑制（Inhibit）&lt;/strong&gt;：当严重告警存在时，自动抑制相关联的次要告警（如节点挂了就抑制该节点所有 Pod 告警）。&lt;/li&gt;
&lt;li&gt;区别：静默是”手工/计划”屏蔽，抑制是”规则自动”压制。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;六、 监控对象&lt;a href=&quot;#六-监控对象&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;node-exporter 监控宿主机，常用的核心指标有哪些？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CPU&lt;/strong&gt;：&lt;code&gt;node_cpu_seconds_total&lt;/code&gt;（rate 计算使用率）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;内存&lt;/strong&gt;：&lt;code&gt;node_memory_MemTotal_bytes&lt;/code&gt; / &lt;code&gt;MemAvailable_bytes&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;磁盘&lt;/strong&gt;：&lt;code&gt;node_filesystem_avail_bytes&lt;/code&gt; / &lt;code&gt;node_filesystem_size_bytes&lt;/code&gt;（使用率、inode）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;磁盘 IO&lt;/strong&gt;：&lt;code&gt;node_disk_read_bytes_total&lt;/code&gt; / &lt;code&gt;node_disk_writes_completed_total&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网络&lt;/strong&gt;：&lt;code&gt;node_network_receive_bytes_total&lt;/code&gt; / &lt;code&gt;node_network_transmit_bytes_total&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;系统负载：&lt;code&gt;node_load1/5/15&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;配合 Blackbox Exporter（探活）、Process Exporter（进程监控）。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;K8s 场景监控容器与工作负载，核心指标来源有哪些？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;cAdvisor&lt;/strong&gt;（内置 kubelet）：容器 CPU/内存/网络指标（&lt;code&gt;container_cpu_usage_seconds_total&lt;/code&gt;、&lt;code&gt;container_memory_usage_bytes&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;kube-state-metrics&lt;/strong&gt;：集群对象状态指标（Pod 重启次数 &lt;code&gt;kube_pod_container_status_restarts_total&lt;/code&gt;、Deployment 副本 &lt;code&gt;kube_deployment_status_replicas&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;kubelet 指标&lt;/strong&gt;：节点资源。&lt;/li&gt;
&lt;li&gt;关键告警：Pod 频繁重启、容器 OOMKilled、节点磁盘/内存压力、Deployment 副本不可用。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;数据库与中间件监控常见的 Exporter 有哪些？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;MySQL：&lt;strong&gt;mysqld_exporter&lt;/strong&gt;（连接数、慢查询、主从延迟）。&lt;/li&gt;
&lt;li&gt;Redis：&lt;strong&gt;redis_exporter&lt;/strong&gt;（命中率、内存、阻塞客户端）。&lt;/li&gt;
&lt;li&gt;PostgreSQL：&lt;strong&gt;postgres_exporter&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;Kafka：&lt;strong&gt;kafka_exporter / JMX Exporter&lt;/strong&gt;（消费延迟）。&lt;/li&gt;
&lt;li&gt;消息队列、ES、Nginx（nginx_exporter）等均有对应 exporter；统一通过 Prometheus pull 采集。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;七、 可视化&lt;a href=&quot;#七-可视化&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Grafana 如何与 Prometheus 集成？数据源配置要点？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;添加数据源：类型选 Prometheus，填 Prometheus 地址（如 &lt;code&gt;http://prometheus:9090&lt;/code&gt;），测试连通。&lt;/li&gt;
&lt;li&gt;配置要点：URL、Access（Server 模式代理或 Browser 直连）、时间范围、TLS/认证（token）、版本。&lt;/li&gt;
&lt;li&gt;使用：面板用 PromQL 查询、变量（模板）联动（如按集群/命名空间切换）、告警面板与 Alertmanager 联动。&lt;/li&gt;
&lt;li&gt;生产：多集群用 &lt;strong&gt;Grafana 数据源变量 + Thanos 全局查询&lt;/strong&gt;统一展示。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;如何设计一套好的监控面板与告警规则？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;USE / RED 方法论&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;基础设施：USE（Utilization 使用率、Saturation 饱和度、Errors 错误）。&lt;/li&gt;
&lt;li&gt;业务/服务：RED（Rate 速率、Errors 错误、Duration 延迟）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;面板分层：总览（集群/服务健康）→ 明细（单节点/单服务）→ 排障（日志/追踪联动）。&lt;/li&gt;
&lt;li&gt;告警规则要点：明确阈值与 for、区分 Warning/Critical、annotations 写清处理指引（runbook）。&lt;/li&gt;
&lt;li&gt;避免”仪表盘堆砌”：每个面板有明确目的，定期 review 无用面板。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;告警通知如何对接钉钉、企业微信、邮件？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;统一经 &lt;strong&gt;Alertmanager Webhook&lt;/strong&gt; 对接：钉钉机器人、企业微信机器人、飞书机器人（自定义 Webhook URL + 签名）。&lt;/li&gt;
&lt;li&gt;邮件：Alertmanager 内置 email receiver（SMTP 配置）。&lt;/li&gt;
&lt;li&gt;自定义渠道：&lt;code&gt;webhook_configs&lt;/code&gt; 发送 JSON 到自建网关，再分发到 IM。&lt;/li&gt;
&lt;li&gt;实践：通知内容模板化（告警名、级别、值、触发时间、处理链接）、按团队路由、避免通知轰炸（repeat_interval 控制）。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;八、 性能与优化&lt;a href=&quot;#八-性能与优化&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;什么是高基数（High Cardinality）问题？如何优化？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;高基数&lt;/strong&gt;：标签取值组合过多导致时间序列数量爆炸（如把请求 URL、用户 ID、容器 ID 作为标签）。&lt;/li&gt;
&lt;li&gt;危害：内存/磁盘暴涨、查询变慢、TSDB 写放大。&lt;/li&gt;
&lt;li&gt;优化：
&lt;ul&gt;
&lt;li&gt;避免高变化值做标签（动态值用 &lt;strong&gt;Label&lt;/strong&gt; 而非常量，禁止业务维度入库）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;metric_relabel_configs&lt;/code&gt; 丢弃高基数标签。&lt;/li&gt;
&lt;li&gt;降低采集频率、聚合再存储（recording rule 预聚合）。&lt;/li&gt;
&lt;li&gt;容量评估：序列数 = 指标数 × 标签组合数 × 实例数。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Prometheus 查询慢、资源占用高，如何排查与优化？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;排查：&lt;code&gt;/api/v1/status/tsdb&lt;/code&gt; 看序列数与块大小、查看高 CPU/内存进程、慢查询（Grafana 面板逐个试）。&lt;/li&gt;
&lt;li&gt;优化：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Recording Rule 预聚合&lt;/strong&gt;高频查询，减少实时计算。&lt;/li&gt;
&lt;li&gt;控制查询时间范围与步长（step）。&lt;/li&gt;
&lt;li&gt;降低采集频率、限制指标数量（drop 无用指标）。&lt;/li&gt;
&lt;li&gt;升级硬件/用远程存储（VictoriaMetrics 更省资源）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Prometheus 的分片（Sharding）与联邦（Federation）是什么？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;分片&lt;/strong&gt;：把采集目标按 job/区域分散到多个 Prometheus 实例（如按命名空间或区域），每个实例只采集一部分，缓解单机压力。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;联邦&lt;/strong&gt;：分层架构——叶子 Prometheus 采集明细，上层 Prometheus 通过 &lt;code&gt;/federate&lt;/code&gt; 聚合或按需拉取（&lt;code&gt;match[]&lt;/code&gt; 过滤指标）。&lt;/li&gt;
&lt;li&gt;场景：多机房/多集群统一监控视图、全局告警。&lt;/li&gt;
&lt;li&gt;注意：联邦本身也有规模上限，超大规模建议 Thanos/Mimir 全局视图。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;九、 故障排查&lt;a href=&quot;#九-故障排查&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;采集目标显示 DOWN 或数据缺失，排查思路是什么？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;查看 target 状态：&lt;code&gt;/targets&lt;/code&gt; 页面 → 看 Scrape Duration、Last Scrape、错误信息。&lt;/li&gt;
&lt;li&gt;逐层排查：网络连通（curl 目标 /metrics）→ 端口与路径 → 防火墙/网络策略 → exporter 进程是否存活 → 认证/证书（TLS、Basic Auth）→ 服务发现是否正确（relabel 后 target 地址）。&lt;/li&gt;
&lt;li&gt;注意：&lt;code&gt;up&lt;/code&gt; 指标为 0 表示抓取失败，先看抓取错误的具体文本。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;指标查询结果为空（no data），可能的原因有哪些？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;指标名拼写错误或标签筛选条件不存在。&lt;/li&gt;
&lt;li&gt;时间范围问题：查询时间点超出数据保留期（retention）。&lt;/li&gt;
&lt;li&gt;采集目标 DOWN（数据源没有新样本）。&lt;/li&gt;
&lt;li&gt;指标被 relabel 丢弃（&lt;code&gt;metric_relabel_configs&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;范围查询窗口与抓取间隔不匹配（如 &lt;code&gt;[5m]&lt;/code&gt; 内样本太少）。&lt;/li&gt;
&lt;li&gt;标签匹配大小写/引号问题。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;收到告警但实际没问题（误报），如何排查？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;检查 PromQL 表达式是否合理（阈值单位、rate 窗口）。&lt;/li&gt;
&lt;li&gt;检查 for 持续时间（是否过短导致瞬时抖动触发）。&lt;/li&gt;
&lt;li&gt;检查数据源本身（exporter 采集值是否异常、是否跨时区/单位换算错误）。&lt;/li&gt;
&lt;li&gt;检查告警标签（多实例聚合是否把正常实例误并）。&lt;/li&gt;
&lt;li&gt;检查 Alertmanager 抑制/分组是否失效。&lt;/li&gt;
&lt;li&gt;用 Query 页面回看触发时刻的实际值曲线。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;十、 生产实践&lt;a href=&quot;#十-生产实践&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Kubernetes 集群的 Prometheus 监控方案如何搭建？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;部署方式：&lt;strong&gt;kube-prometheus-stack&lt;/strong&gt;（Helm 一键：Prometheus + Alertmanager + Grafana + node-exporter + kube-state-metrics + 默认告警规则）。&lt;/li&gt;
&lt;li&gt;采集面：节点（node-exporter）、容器（cAdvisor）、集群对象（kube-state-metrics）、APIServer/etcd（control-plane 指标）、业务应用（自定义 exporter + ServiceMonitor）。&lt;/li&gt;
&lt;li&gt;持久化：PVC 挂载 TSDB、长期数据接远程存储。&lt;/li&gt;
&lt;li&gt;认证：K8s 的 RBAC + Prometheus ServiceAccount 授权访问 kubelet/APIServer 指标。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Prometheus 版本升级与迁移需要注意什么？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;升级前：备份配置（prometheus.yml、rules）、记录版本与参数、检查兼容性（PromQL/存储格式跨大版本可能有变化）。&lt;/li&gt;
&lt;li&gt;升级：替换二进制 → 校验配置（&lt;code&gt;promtool check config&lt;/code&gt;）→ 平滑重启（SIGHUP 重载配置）。&lt;/li&gt;
&lt;li&gt;迁移：停写 → 拷贝 TSDB 数据目录 → 新实例启动 → 校验数据连续性；或通过 remote_write/读重建。&lt;/li&gt;
&lt;li&gt;告警规则迁移：&lt;code&gt;promtool check rules&lt;/code&gt; 校验语法，注意新版废弃的 PromQL 函数。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;如何设计一套完整的监控体系（指标分层）？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;四层指标体系&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;基础设施层：CPU、内存、磁盘、网络（node-exporter）。&lt;/li&gt;
&lt;li&gt;容器/云原生层：容器资源、Pod 状态、集群对象（cAdvisor、kube-state-metrics）。&lt;/li&gt;
&lt;li&gt;中间件/数据库层：MySQL、Redis、Kafka 等 exporter。&lt;/li&gt;
&lt;li&gt;业务应用层：RED（速率、错误、延迟）、业务埋点（Prometheus 客户端库）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;配套：统一标签规范（集群/环境/应用）、告警分级（P1-P4）、值班与 Runbook、定期容量规划与规则 review。&lt;/li&gt;
&lt;li&gt;目标：从”能监控”到”能告警、能定位、能预防”。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;</content:encoded></item><item><title>k8s面试题</title><link>http://blog.cnylxs.xyz/posts/interview_k8s-20260823-01/</link><guid isPermaLink="true">http://blog.cnylxs.xyz/posts/interview_k8s-20260823-01/</guid><description>k8s面试题</description><pubDate>Sun, 23 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h1&gt;一、 基础概念与集群架构&lt;a href=&quot;#一-基础概念与集群架构&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Kubernetes 控制面的核心组件有哪些？各自的作用是什么？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;kube-apiserver&lt;/strong&gt;：集群的入口与唯一网关，所有组件和 kubectl 的请求都经它处理，负责认证、鉴权、准入控制。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;etcd&lt;/strong&gt;：集群的”数据库”，保存所有对象的状态（声明式期望状态）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;kube-controller-manager&lt;/strong&gt;：运行各类控制器（Deployment、Node、Namespace 等），不断把实际状态收敛到期望状态。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;kube-scheduler&lt;/strong&gt;：为新 Pod 选择最合适的节点。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cloud-controller-manager&lt;/strong&gt;：对接云厂商 API（负载均衡、路由、存储卷），可选组件。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;kubelet 的作用是什么？它与容器运行时如何交互？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;kubelet&lt;/strong&gt; 是每个节点上的”代理”，负责：接收 apiserver 下发的 Pod 期望状态 → 通过 &lt;strong&gt;CRI（容器运行时接口）&lt;/strong&gt; 调用容器运行时（containerd/docker）创建/启停容器 → 上报节点与 Pod 状态 → 执行探针（liveness/readiness）。&lt;/li&gt;
&lt;li&gt;交互链路：&lt;code&gt;apiserver → kubelet → CRI → containerd → runc&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;etcd 在集群中扮演什么角色？为什么需要它？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;etcd 是集群的&lt;strong&gt;唯一数据源&lt;/strong&gt;，存储所有 API 对象（Pod、Service、ConfigMap 等）和集群元数据，是分布式一致性键值存储（基于 Raft）。&lt;/li&gt;
&lt;li&gt;重要性：apiserver 的所有读写都经过 etcd；etcd 挂了，集群”只读不可改”，节点不可调度新 Pod。&lt;/li&gt;
&lt;li&gt;运维要点：定期备份（&lt;code&gt;etcdctl snapshot save&lt;/code&gt;）、控制面节点上独立部署、磁盘 IO 要求高。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;二、 Pod 与容器编排&lt;a href=&quot;#二-pod-与容器编排&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;为什么 Kubernetes 的最小调度单位是 Pod 而不是容器？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Pod 是&lt;strong&gt;共享网络命名空间和存储卷&lt;/strong&gt;的容器集合，是调度的最小单元。&lt;/li&gt;
&lt;li&gt;同一个 Pod 内的容器共享 IP、端口空间、hostname，可通过 localhost 互访；适合”主容器 + 伴生容器（sidecar）“场景（如日志采集、代理注入）。&lt;/li&gt;
&lt;li&gt;调度、网络、存储都以 Pod 为边界，容器只是 Pod 内的进程。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Pod 的常见状态有哪些？分别代表什么？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pending&lt;/strong&gt;：已创建但未调度成功（资源不足、污点、调度器异常）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Running&lt;/strong&gt;：至少一个容器正在运行。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Succeeded / Failed&lt;/strong&gt;：Pod 正常/异常退出（Job 场景常见）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Unknown&lt;/strong&gt;：节点失联，apiserver 无法获取状态。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CrashLoopBackOff&lt;/strong&gt;：容器启动后崩溃，kubelet 按指数退避重启。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ImagePullBackOff&lt;/strong&gt;：镜像拉取失败。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Pod 一直处于 Pending 或 CrashLoopBackOff，排查思路是什么？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Pending：&lt;code&gt;kubectl describe pod&lt;/code&gt; 看 Events → 检查节点资源（&lt;code&gt;kubectl top node&lt;/code&gt;）、污点容忍、PVC 绑定、调度器日志。&lt;/li&gt;
&lt;li&gt;CrashLoopBackOff：&lt;code&gt;kubectl logs&lt;/code&gt; 看容器输出 → &lt;code&gt;kubectl describe pod&lt;/code&gt; 看 Last State 的退出码与原因 → 检查探针配置、启动命令、资源限制是否过低（OOMKilled）。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;三、 控制器&lt;a href=&quot;#三-控制器&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Deployment、StatefulSet、DaemonSet 的区别与适用场景？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Deployment&lt;/strong&gt;：无状态应用，管理 ReplicaSet，支持滚动更新/回滚，Pod 可被随意替换（无身份）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;StatefulSet&lt;/strong&gt;：有状态应用（数据库、中间件），Pod 有稳定网络标识和稳定存储（PVC 按序绑定），支持有序部署/缩容。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DaemonSet&lt;/strong&gt;：每个节点运行一个副本（日志采集、监控 Agent、网络插件），新节点加入自动部署。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Deployment 的滚动更新策略如何配置？如何回滚？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;策略：&lt;code&gt;strategy.type: RollingUpdate&lt;/code&gt;，参数 &lt;code&gt;maxUnavailable&lt;/code&gt;（最大不可用数）与 &lt;code&gt;maxSurge&lt;/code&gt;（最大额外数）。&lt;/li&gt;
&lt;li&gt;更新：修改镜像后 &lt;code&gt;kubectl set image&lt;/code&gt; 或 apply 新 YAML，控制器逐步替换 Pod。&lt;/li&gt;
&lt;li&gt;回滚：&lt;code&gt;kubectl rollout undo deployment/xxx&lt;/code&gt;（回滚到上一版本），&lt;code&gt;--to-revision=N&lt;/code&gt; 指定版本；&lt;code&gt;kubectl rollout status&lt;/code&gt; 查看进度。&lt;/li&gt;
&lt;li&gt;金丝雀发布：可创建第二个 Deployment 或利用 &lt;code&gt;maxSurge&lt;/code&gt; 逐步放量，再配合 Service 权重/Ingress 灰度。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Job 和 CronJob 的适用场景？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Job&lt;/strong&gt;：一次性任务（数据迁移、批量计算），保证任务完成指定次数，失败自动重试（backoffLimit）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CronJob&lt;/strong&gt;：定时任务（定时备份、报表），基于 Cron 表达式调度，管理多个 Job。&lt;/li&gt;
&lt;li&gt;运维常配合：任务完成后清理（TTL 机制）、并发策略（Allow/Forbid/Replace）。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;四、 服务发现与网络&lt;a href=&quot;#四-服务发现与网络&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Service 的类型有哪些？各自适用什么场景？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ClusterIP&lt;/strong&gt;：集群内部虚拟 IP，默认类型，仅供集群内访问。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NodePort&lt;/strong&gt;：在每个节点开放固定端口（30000-32767），集群外通过 &lt;code&gt;节点IP:NodePort&lt;/code&gt; 访问。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LoadBalancer&lt;/strong&gt;：对接云厂商 LB，自动创建外部负载均衡（需 cloud-provider）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Headless&lt;/strong&gt;（clusterIP: None）：无虚拟 IP，直接返回后端 Pod IP 列表，供 StatefulSet 稳定域名、自定义负载均衡场景使用。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Ingress 的作用是什么？与 Service 的关系？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ingress&lt;/strong&gt; 是集群的&lt;strong&gt;七层（HTTP/HTTPS）入口&lt;/strong&gt;，负责根据域名/路径把外部请求路由到集群内 Service。&lt;/li&gt;
&lt;li&gt;关系：Ingress → Ingress Controller（如 Nginx、Traefik）→ Service → Endpoints → Pod。&lt;/li&gt;
&lt;li&gt;能力：域名与路径路由、TLS 证书、重写、限流、灰度（canary）。&lt;/li&gt;
&lt;li&gt;与 NodePort/LoadBalancer 的区别：Ingress 是七层智能路由，Service 是四层负载均衡。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Pod 内 DNS 解析失败，如何排查？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;检查 CoreDNS Pod 是否正常：&lt;code&gt;kubectl get pods -n kube-system | grep coredns&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;检查 Pod 的 DNS 配置：&lt;code&gt;/etc/resolv.conf&lt;/code&gt; 是否指向 kube-dns（ClusterDNS）。&lt;/li&gt;
&lt;li&gt;验证 Service 名解析：&lt;code&gt;nslookup &amp;lt;service&amp;gt;.&amp;lt;namespace&amp;gt;.svc.cluster.local&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;常见原因：CoreDNS 副本不足/CPU 限制、kubelet 的 &lt;code&gt;--cluster-dns&lt;/code&gt; 配置错误、网络插件（CNI）与 DNS 策略冲突、Pod 使用 hostNetwork。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;五、 存储&lt;a href=&quot;#五-存储&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;PV、PVC、StorageClass 三者的关系？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;PV&lt;/strong&gt;：集群级存储资源（管理员预先创建或动态供给）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PVC&lt;/strong&gt;：用户的存储”申请”，声明需要的容量与访问模式（ReadWriteOnce/ReadOnlyMany/ReadWriteMany）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;StorageClass&lt;/strong&gt;：动态供给模板，PVC 指定 storageClassName 后自动创建 PV（如云盘、NFS）。&lt;/li&gt;
&lt;li&gt;关系：&lt;code&gt;PVC 绑定 PV → Pod 引用 PVC&lt;/code&gt;；无 StorageClass 时需手动创建 PV 静态供给。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;emptyDir、hostPath、云盘等卷类型的区别？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;emptyDir&lt;/strong&gt;：Pod 生命周期内的临时目录，Pod 删除数据即消失；适合缓存、sidecar 共享数据。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;hostPath&lt;/strong&gt;：挂载宿主机目录，数据持久但绑定节点（节点故障数据不迁移），适合 DaemonSet（如日志目录）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;云盘/CSI&lt;/strong&gt;（如 AWS EBS、阿里云云盘）：真正的持久化存储，支持动态供给、快照、跨节点迁移，适合数据库。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NFS&lt;/strong&gt;：网络共享存储，支持多节点读写（ReadWriteMany），适合共享文件场景。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;StatefulSet 如何保证数据持久化？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;每个副本绑定&lt;strong&gt;独立的 PVC&lt;/strong&gt;（通过 &lt;code&gt;volumeClaimTemplates&lt;/code&gt; 自动创建），Pod 重建后重新挂载同名 PVC，数据不丢失。&lt;/li&gt;
&lt;li&gt;Pod 有稳定标识（&lt;code&gt;statefulset-0&lt;/code&gt;、&lt;code&gt;statefulset-1&lt;/code&gt;），删除后重建仍挂载原 PVC。&lt;/li&gt;
&lt;li&gt;注意：删除 StatefulSet 默认不删除 PVC（数据保留），需手动清理；缩容时 PVC 保留，扩容时复用。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;六、 配置管理&lt;a href=&quot;#六-配置管理&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;ConfigMap 和 Secret 的区别？Secret 的加密机制？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ConfigMap&lt;/strong&gt;：存储非敏感配置（配置文件、环境变量）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Secret&lt;/strong&gt;：存储敏感数据（密码、Token、证书），值要求 base64 编码。&lt;/li&gt;
&lt;li&gt;Secret 的”加密”：默认只做 base64 编码（&lt;strong&gt;非真正加密&lt;/strong&gt;）；生产建议开启 &lt;strong&gt;KMS 加密&lt;/strong&gt;（etcd 中加密存储）或使用外部密钥管理（Vault、Sealed Secrets）。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;ConfigMap 更新后，Pod 中的配置为什么没有生效？如何解决？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;原因：&lt;strong&gt;环境变量注入是创建时一次性写入的&lt;/strong&gt;，ConfigMap 更新不会自动更新环境变量。&lt;/li&gt;
&lt;li&gt;解决：挂载为&lt;strong&gt;卷&lt;/strong&gt;（volume mount）时，kubelet 会定期同步（约 1 分钟）配置文件；环境变量方式需滚动重启 Pod（&lt;code&gt;kubectl rollout restart&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;生产实践：用 &lt;code&gt;reloader&lt;/code&gt; 等工具监听 ConfigMap 变化自动触发滚动更新。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;给 Pod 注入配置有哪些方式？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;环境变量&lt;/strong&gt;：&lt;code&gt;env.valueFrom.configMapKeyRef/secretKeyRef&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;卷挂载&lt;/strong&gt;：把 ConfigMap/Secret 挂载为文件（文件级更新生效）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;命令行参数&lt;/strong&gt;：通过 args 引用环境变量。&lt;/li&gt;
&lt;li&gt;注意事项：Secret 以 volume 挂载时建议设置 &lt;code&gt;defaultMode&lt;/code&gt; 权限、开启 &lt;code&gt;optional&lt;/code&gt; 容忍缺失。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;七、 调度&lt;a href=&quot;#七-调度&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Pod 的调度流程是怎样的？nodeSelector、nodeAffinity、污点容忍有什么区别？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;调度流程：&lt;code&gt;Pod 创建 → 调度器 Filtering（过滤节点）→ Scoring（打分）→ 绑定节点&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;nodeSelector&lt;/strong&gt;：最简单的节点标签匹配（精确等于）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;nodeAffinity&lt;/strong&gt;：更灵活的节点亲和（支持 In/NotIn/Exists、软硬约束 requiredDuringScheduling/preferredDuringScheduling）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;污点（Taint）与容忍（Toleration）&lt;/strong&gt;：节点打污点排斥 Pod，Pod 加容忍才能调度上去；用于隔离专用节点、驱逐维护。&lt;/li&gt;
&lt;li&gt;组合使用：节点打标签 + nodeAffinity 定向调度 + 污点防止普通 Pod 误调度。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Pod 的资源请求（requests）与限制（limits）？QoS 等级有哪些？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;requests&lt;/strong&gt;：调度保证值，节点按 requests 累计判断能否容纳。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;limits&lt;/strong&gt;：运行上限，超过可能被 OOM Kill（内存）或限流（CPU）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;QoS 三等级&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Guaranteed&lt;/strong&gt;：requests == limits（最高优先，最不易被杀）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Burstable&lt;/strong&gt;：requests &amp;lt; limits（部分保证）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BestEffort&lt;/strong&gt;：不设置 requests/limits（最先被杀）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;运维建议：核心业务设置 Guaranteed，避免内存突发导致节点 OOM。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;如何把 Pod 固定调度到指定节点？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;nodeSelector&lt;/code&gt;：节点打标签（如 &lt;code&gt;disktype=ssd&lt;/code&gt;）+ Pod 指定。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nodeAffinity&lt;/code&gt;：required 硬约束。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nodeName&lt;/code&gt;：直接指定节点名（绕过调度器，仅调试用）。&lt;/li&gt;
&lt;li&gt;配合污点：目标节点打污点 + Pod 加对应容忍，防止其他 Pod 调度上去。&lt;/li&gt;
&lt;li&gt;注意：固定调度会影响故障转移，高可用业务慎用。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;八、 安全&lt;a href=&quot;#八-安全&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;RBAC 的核心对象有哪些？如何实现最小权限？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;核心对象：&lt;strong&gt;Role/ClusterRole&lt;/strong&gt;（权限定义）、&lt;strong&gt;RoleBinding/ClusterRoleBinding&lt;/strong&gt;（权限绑定）、&lt;strong&gt;ServiceAccount&lt;/strong&gt;（Pod 身份）。&lt;/li&gt;
&lt;li&gt;最小权限实践：按角色创建 ServiceAccount → 绑定最小操作权限（只授予需要的资源与方法）→ Pod 指定 &lt;code&gt;serviceAccountName&lt;/code&gt; → 定期审计（&lt;code&gt;kubectl auth can-i&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;示例：只读权限用 &lt;code&gt;resources: pods, services&lt;/code&gt; + &lt;code&gt;verbs: get, list, watch&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;NetworkPolicy 的作用与实现原理？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;NetworkPolicy&lt;/strong&gt;：集群内&lt;strong&gt;网络隔离&lt;/strong&gt;策略，控制 Pod 之间的流量（入站/出站），基于标签选择器。&lt;/li&gt;
&lt;li&gt;原理：需要 CNI 支持（Calico、Cilium、Weave），在节点上通过 iptables/IPVS/eBPF 实现规则下发。&lt;/li&gt;
&lt;li&gt;默认行为：未定义策略时 Pod 全互通；定义后按策略白名单放行。&lt;/li&gt;
&lt;li&gt;典型场景：隔离命名空间、数据库只允许应用 Pod 访问、禁止跨环境互通。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Pod 的安全上下文（SecurityContext）有哪些常用配置？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;runAsUser/runAsGroup&lt;/code&gt;：指定运行用户（避免 root）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;readOnlyRootFilesystem&lt;/code&gt;：只读根文件系统。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;capabilities&lt;/code&gt;：丢弃/添加 Linux 能力（如 &lt;code&gt;drop: [ALL]&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;allowPrivilegeEscalation: false&lt;/code&gt;：禁止提权。&lt;/li&gt;
&lt;li&gt;配合 &lt;strong&gt;PodSecurity 准入&lt;/strong&gt;（baseline/restricted）与容器镜像扫描，构建纵深防御。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;九、 运维实践&lt;a href=&quot;#九-运维实践&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Kubernetes 集群的日志方案有哪些？容器日志如何采集？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;常见方案：&lt;strong&gt;EFK/ELK&lt;/strong&gt;（Elasticsearch + Fluentd/Filebeat + Kibana）、&lt;strong&gt;Loki&lt;/strong&gt;（轻量，配合 Grafana）、云厂商日志服务。&lt;/li&gt;
&lt;li&gt;采集原理：容器日志写入 &lt;code&gt;/var/log/containers/*.log&lt;/code&gt;（软链到 Docker/containerd 的 json 或 CRI 日志格式）→ DaemonSet 方式的 Agent（Filebeat/Fluent Bit）采集 → 汇聚。&lt;/li&gt;
&lt;li&gt;多行日志、时间戳、按命名空间/应用打标签是常见运维配置点。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;基于 Prometheus 的监控方案如何搭建？需要关注哪些核心指标？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;组件：&lt;strong&gt;Prometheus Server + kube-state-metrics + node-exporter + 云原生 exporter + Alertmanager + Grafana&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;核心指标：节点（CPU/内存/磁盘/网络）、Pod（CPU/内存使用率、重启次数）、容器、API Server 延迟与错误率、etcd 延迟、调度失败数。&lt;/li&gt;
&lt;li&gt;关键告警：节点 NotReady、Pod 频繁重启、PVC 磁盘使用率超阈值、证书过期、集群资源不足。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;节点 NotReady、Pod 无法调度、服务不通，分别如何排查？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;节点 NotReady&lt;/strong&gt;：&lt;code&gt;kubectl describe node&lt;/code&gt; 看 Conditions → 检查 kubelet 状态（&lt;code&gt;systemctl status kubelet&lt;/code&gt;）、容器运行时、磁盘空间（/var/lib 满）、网络插件。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pod 无法调度&lt;/strong&gt;：&lt;code&gt;kubectl describe pod&lt;/code&gt; 看 Events → 资源不足（requests 超出）、污点未容忍、节点亲和不满足、PVC 无法绑定。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;服务不通&lt;/strong&gt;：从内到外排查——Pod 本身健康？→ Service 的 Endpoints 是否有 Pod？→ &lt;code&gt;kubectl get endpoints&lt;/code&gt; → DNS 解析？→ 网络策略/防火墙？→ Ingress/LB 配置？&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;十、 高可用与升级&lt;a href=&quot;#十-高可用与升级&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;控制面（Master）高可用方案如何设计？etcd 集群注意什么？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;控制面 HA&lt;/strong&gt;：至少 3 个 Master（奇数）运行 apiserver/controller-manager/scheduler，前面加负载均衡（云 LB 或 keepalived + VIP）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;etcd 集群&lt;/strong&gt;：3/5 节点奇数（Raft 多数派），部署在独立磁盘（SSD），网络延迟低；&lt;code&gt;--initial-cluster&lt;/code&gt; 与证书配置一致。&lt;/li&gt;
&lt;li&gt;验证：&lt;code&gt;kubectl get --raw=&apos;/healthz&apos;&lt;/code&gt;、&lt;code&gt;etcdctl endpoint health&lt;/code&gt;；定期备份 etcd 快照并演练恢复。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;集群升级的流程与注意事项？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;流程：先升级&lt;strong&gt;控制面&lt;/strong&gt;再升级&lt;strong&gt;节点&lt;/strong&gt;（小版本可跳过中间版本）；&lt;code&gt;kubeadm upgrade plan/apply&lt;/code&gt; → 节点 &lt;code&gt;drain&lt;/code&gt; → 升级 kubelet/kubeadm → &lt;code&gt;uncordon&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;注意事项：备份 etcd、确认镜像与二进制版本兼容、滚动升级节点（一次一个）、观察关键工作负载健康、升级前检查 API 兼容性（废弃 API 移除）。&lt;/li&gt;
&lt;li&gt;生产建议：先在测试集群验证，升级窗口避开业务高峰。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;节点维护（cordon/uncordon/drain）的作用？Pod 如何优雅驱逐？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;cordon&lt;/strong&gt;：标记节点不可调度（新 Pod 不上去），已有 Pod 不受影响。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;drain&lt;/strong&gt;：驱逐节点上所有 Pod（&lt;code&gt;kubectl drain node --ignore-daemonsets&lt;/code&gt;），先调用 &lt;strong&gt;PreStop Hook&lt;/strong&gt; 优雅停止 → 超时后强制删除。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;uncordon&lt;/strong&gt;：恢复调度。&lt;/li&gt;
&lt;li&gt;优雅驱逐关键：Pod 配置 &lt;code&gt;terminationGracePeriodSeconds&lt;/code&gt;（宽限期）、&lt;code&gt;preStop&lt;/code&gt; 执行反注册/刷盘；PDB（PodDisruptionBudget）保证业务最小可用副本数。&lt;/li&gt;
&lt;li&gt;运维习惯：&lt;code&gt;cordon → drain → 维护 → uncordon&lt;/code&gt;，先排空再动节点。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;</content:encoded></item><item><title>zabbix面试题</title><link>http://blog.cnylxs.xyz/posts/interview_zabbix-20260820-01/</link><guid isPermaLink="true">http://blog.cnylxs.xyz/posts/interview_zabbix-20260820-01/</guid><description>zabbix面试题</description><pubDate>Thu, 20 Aug 2026 00:00:00 GMT</pubDate><content:encoded/></item><item><title>prometheus学习笔记</title><link>http://blog.cnylxs.xyz/posts/study-prometheus.md-20260820-01/</link><guid isPermaLink="true">http://blog.cnylxs.xyz/posts/study-prometheus.md-20260820-01/</guid><description>prometheus学习笔记</description><pubDate>Thu, 20 Aug 2026 00:00:00 GMT</pubDate><content:encoded/></item><item><title>zabbix学习笔记</title><link>http://blog.cnylxs.xyz/posts/study-zabbix-20260820-01/</link><guid isPermaLink="true">http://blog.cnylxs.xyz/posts/study-zabbix-20260820-01/</guid><description>zabbix学习笔记</description><pubDate>Thu, 20 Aug 2026 00:00:00 GMT</pubDate><content:encoded/></item><item><title>liunx面试题</title><link>http://blog.cnylxs.xyz/posts/interview_linux-20260815-01/</link><guid isPermaLink="true">http://blog.cnylxs.xyz/posts/interview_linux-20260815-01/</guid><description>liunx面试题</description><pubDate>Sat, 15 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h1&gt;一、 系统基础与启动流程&lt;a href=&quot;#一-系统基础与启动流程&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;Linux系统完整的启动流程是怎样的？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;BIOS/UEFI：硬件自检，加载CMOS中的启动顺序，找到引导设备。&lt;br /&gt;
BootLoader（GRUB）：加载内核选择菜单，加载内核和initrd（初始内存盘）到内存。
内核初始化：挂载根文件系统（只读模式），启动内核进程（PID=0的swapper）。&lt;br /&gt;
systemd（或SysV init）：作为PID=1的进程启动，执行默认运行级别下的所有服务。&lt;br /&gt;
用户登录：显示getty登录提示符。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;Linux的运行级别（Runlevel）有哪些？systemd中对应的target是什么？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：
SysV init时代：0（关机）、1（单用户维护）、2（多用户无NFS）、3（完整多用户文本模式）、4（未使用）、5（图形界面）、6（重启）。&lt;br /&gt;
systemd时代：用target替代运行级别，对应关系：runlevel3 → multi-user.target，runlevel5 → graphical.target。使用systemctl get-default查看当前默认target。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;/etc/fstab 文件的作用是什么？挂载时常见的字段有哪些？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：fstab用于配置开机自动挂载的文件系统。每行包含6个字段：&lt;/p&gt;&lt;p&gt;设备名（如/dev/sdb1）或UUID。&lt;br /&gt;
挂载点（如/data）。&lt;br /&gt;
文件系统类型（如ext4、xfs）。&lt;br /&gt;
挂载选项（defaults、noatime等）。&lt;br /&gt;
dump备份标志（0或1）。&lt;br /&gt;
fsck检查顺序（0表示不检查，根目录为1，其他为2）。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;二、 进程管理与性能排查&lt;a href=&quot;#二-进程管理与性能排查&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;PID=1的进程是什么？它在系统中的作用是什么？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：在systemd系统中，PID=1是systemd进程，它是所有其他进程的祖先进程。职责包括：启动所有系统服务、管理运行级别、监控子进程状态、回收孤儿进程（孤儿进程会被systemd收养）。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;top命令中，load average的三个数值分别代表什么？如何判断系统负载过高？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：三个数值分别代表1分钟、5分钟、15分钟的平均负载（正在运行+等待运行的进程数，包含不可中断IO等待）。判断标准：如果负载值持续超过CPU核心数（如nproc查到的逻辑核数），说明系统过载。需结合%us（用户态CPU）、%sy（内核态CPU）、%wa（IO等待）综合分析瓶颈。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;ps aux和ps -ef的区别？如何查看某个进程的实时资源占用？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;ps aux：使用BSD风格输出（显示USER、PID、%CPU、%MEM、VSZ、RSS、TTY、STAT、START、TIME、COMMAND）。&lt;br /&gt;
ps -ef：使用System V风格输出（显示UID、PID、PPID、C、STIME、TTY、TIME、CMD）。
实时查看：使用top -p 或htop（更直观），也可用pidstat -p  1（每秒输出）。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;kill -9和kill -15的区别是什么？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;kill -15（SIGTERM，默认）：优雅终止信号，进程收到后可自行清理资源（如关闭文件、释放锁）、保存状态后退出，进程可捕获此信号执行收尾逻辑。&lt;br /&gt;
kill -9（SIGKILL）：强制杀死信号，进程无法捕获或忽略，内核直接回收进程资源，可能导致数据丢失或僵尸进程残留。生产环境应优先使用-15，-9作为最后手段。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;系统中出现大量“僵尸进程”（Zombie Process）如何排查和清理？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;成因：子进程退出后，父进程未调用wait()/waitpid()回收子进程的退出状态，导致子进程退出后变成僵尸态（）。&lt;/p&gt;&lt;p&gt;排查：ps aux | grep ‘Z’ 或 top查看僵尸数量。&lt;/p&gt;&lt;p&gt;清理：无法直接kill僵尸进程（已死亡）。需找到其父进程（PPID），通过kill -15杀掉父进程，僵尸进程会被PID=1的systemd收养并释放。若父进程是系统关键进程，则需重启系统或升级程序代码。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;三、 内存与磁盘管理&lt;a href=&quot;#三-内存与磁盘管理&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;free -m输出中，buff/cache占用过高怎么办？如何手动释放？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：buff（缓冲区，块设备元数据）+ cache（缓存，文件内容）是Linux提升IO性能的机制，正常情况下无需手动释放。若确需释放（如做性能测试）：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;bash&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sync  # 将缓存数据同步到磁盘&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;echo 1 &amp;gt; /proc/sys/vm/drop_caches  # 释放页缓存&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;echo 2 &amp;gt; /proc/sys/vm/drop_caches  # 释放dentries和inodes缓存&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;echo 3 &amp;gt; /proc/sys/vm/drop_caches  # 释放全部缓存&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;但生产环境不建议轻易执行，会导致磁盘IO瞬时飙升影响业务。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;如何查看系统内存的实际可用量（考虑buff/cache可回收部分）？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：执行free -m，看available列（而非free列）。available = free + 可回收的buff/cache（未被应用程序锁定的部分），这是新进程真正能申请到的内存量。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;df -h和du -sh的区别和使用场景？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;df -h：查看文件系统级别的磁盘分区总容量、已用、可用、挂载点。统计维度基于磁盘超级块（superblock）。&lt;br /&gt;
du -sh &amp;lt;目录&amp;gt;：查看目录级别的实际文件大小总和。常用于排查“/目录空间不足但找不到大文件”的问题。&lt;br /&gt;
注意：df显示已删但未被释放的文件占用空间（可通过&lt;code&gt;lsof | grep deleted&lt;/code&gt;排查），du不计算已删除但进程仍持有的文件。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;lsof命令的常见应用场景有哪些？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：lsof（List Open Files）是运维排障利器：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;查看端口占用：lsof -i :8080（查哪个进程占用了端口）。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;查看已删除但仍被进程占用的文件（占磁盘空间）：lsof | grep deleted。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;查看某个PID打开了哪些文件：lsof -p &amp;lt;PID&amp;gt;。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;查看某个用户打开的文件：lsof -u username。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;四、 网络管理与故障排查&lt;a href=&quot;#四-网络管理与故障排查&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;netstat和ss命令的区别？生产环境推荐用哪个？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;netstat：传统工具，通过遍历/proc/net获取信息，性能差，大并发场景卡顿。&lt;br /&gt;
ss：新一代工具，直接通过Netlink从内核获取socket统计，速度快、开销小。生产环境强烈推荐用ss替代netstat。&lt;br /&gt;
常用命令：ss -tunlp（显示所有TCP/UDP监听端口及进程）。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;ping不通目标主机，排查思路是什么？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;检查本地网卡状态：ip addr/ifconfig确认IP配置正确。&lt;br /&gt;
检查网关连通性：ping 网关IP，不通则查路由表route -n。&lt;br /&gt;
检查DNS解析：nslookup或dig域名，确认域名解析正确。&lt;br /&gt;
检查防火墙：iptables -L -n或firewall-cmd —list-all，确认ICMP未被DROP。&lt;br /&gt;
检查目标主机是否禁ping：sysctl net.ipv4.icmp_echo_ignore_all。&lt;br /&gt;
检查网络设备（交换机ACL、安全组策略）。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;traceroute（或mtr）命令的作用是什么？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;traceroute：通过发送TTL递增的UDP/ICMP包，探测到达目标IP所经过的每一跳路由器，用于定位网络中断点或延迟瓶颈。&lt;br /&gt;
mtr（My TraceRoute）：结合ping和traceroute，持续发送探测包并统计每一跳的丢包率和延迟，是更强大的网络质量诊断工具。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;/etc/resolv.conf文件的作用是什么？如何配置DNS？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：配置Linux系统的DNS域名解析。关键参数：&lt;/p&gt;&lt;p&gt;nameserver 114.114.114.114：指定DNS服务器IP（最多3个）。&lt;br /&gt;
search example.com：指定域名搜索后缀（解析短域名时自动补全）。&lt;br /&gt;
注意：在NetworkManager管理的系统中，手动修改resolv.conf可能被覆盖，应通过nmcli或网卡配置文件（/etc/sysconfig/network-scripts/ifcfg-eth0）中的DNS1=xxx来配置。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;iptables的五个链（chain）和四个表（table）分别是什么？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;五链（数据包流向路径）：PREROUTING（路由前）、INPUT（入站）、FORWARD（转发）、OUTPUT（出站）、POSTROUTING（路由后）。&lt;br /&gt;
四表（按功能划分）：raw（连接跟踪）、mangle（包标记）、nat（网络地址转换）、filter（包过滤，默认）。&lt;br /&gt;
优先级顺序：raw → mangle → nat → filter。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;五、 文件权限与安全&lt;a href=&quot;#五-文件权限与安全&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;Linux文件权限rwx分别代表什么？目录的x权限有何特殊含义？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;r（读）：文件可查看内容；目录可列出目录下文件名（ls）。&lt;br /&gt;
w（写）：文件可修改内容；目录可在其中创建/删除文件（需同时有x）。&lt;br /&gt;
x（执行）：文件可执行；目录可进入（cd）及访问目录下文件的inode信息。目录若无x权限，即使有r也无法ls查看文件属性。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;chmod命令中，数字权限755和644分别表示什么？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;755：属主有rwx（7），属组有r-x（5），其他人有r-x（5）。常用于目录或可执行文件。&lt;br /&gt;
644：属主有rw-（6），属组有r—（4），其他人有r—（4）。常用于普通文件（配置文件、日志等）。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;sudo和su的区别是什么？如何配置sudo权限？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;su -：切换用户身份，需知道目标用户的密码。su - root表示切换到root并加载root的环境变量。&lt;br /&gt;
sudo：以其他用户（默认root）的权限执行单条命令，需输入当前用户的密码，通过/etc/sudoers文件（用visudo编辑）精细化授权。&lt;br /&gt;
配置示例：username ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx（允许某用户免密重启nginx）。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;六、 文本处理与Shell脚本（运维必会）&lt;a href=&quot;#六-文本处理与shell脚本运维必会&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;grep、sed、awk被称为“三剑客”，请简述各自的核心用途。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;grep：文本过滤，根据正则表达式输出匹配的行（查日志神器）。&lt;br /&gt;
sed：流编辑器，对文本进行替换、删除、插入操作（非交互式修改配置文件）。&lt;br /&gt;
awk：文本格式化/报告生成器，擅长按列处理、统计分析（如awk ‘{print $1}‘提取第一列）。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;如何用sed在配置文件中替换/修改某个参数？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;br /&gt;
&lt;code&gt;sed -i &apos;s/原字符串/新字符串/g&apos; 文件名&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;示例：sed -i &apos;s/^SELINUX=.*/SELINUX=disabled/g&apos; /etc/selinux/config（修改SELinux配置）。&lt;/code&gt;&lt;/p&gt;&lt;p&gt;-i表示直接修改文件，-i.bak会先备份再修改。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;如何用awk统计nginx访问日志中每个IP的访问次数并排序？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：经典运维考题：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;bash&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;awk &apos;{print $1}&apos; access.log | sort | uniq -c | sort -nr | head -10&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;解释：awk提取第一列（IP），sort排序使相同IP相邻，uniq -c去重并统计次数，sort -nr按次数降序排序，head -10取Top 10。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;Shell脚本中&lt;code&gt;$?、$0、$#、$@&lt;/code&gt;分别代表什么？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$?:上一条命令的退出状态码 (0表示成功，非0表示失败)。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$0:脚本本身的文件名。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$#:传递给脚本的参数个数。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$@:所有参数列表（作为独立的字符串）。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;如何编写一个Shell脚本定时清理7天前Nginx日志的cron任务？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;bash&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#!/bin/bash&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;find /var/log/nginx/ -name &quot;*.log&quot; -mtime +7 -exec rm -f {} \;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;添加cron：0 2 * * * /usr/local/bin/clean_nginx_log.sh（每天凌晨2点执行）。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;七、 系统调优与故障应急
26. 修改Linux系统最大文件打开数（ulimit -n）的方法有哪些？&lt;/p&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;临时生效：&lt;code&gt;ulimit -n 65535&lt;/code&gt;（仅当前会话）。&lt;/p&gt;&lt;p&gt;永久生效（系统级）：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;修改/etc/security/limits.conf：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;text&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;soft nofile 65535&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;hard nofile 65535&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;进程级：在服务的systemd unit文件中设置LimitNOFILE=65535。&lt;br /&gt;
注意：需退出当前shell重新登录生效，用ulimit -a验证。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;如何查看Linux系统当前的内核参数（如TCP TIME_WAIT数量）？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;br /&gt;
查看TCP连接状态统计：&lt;br /&gt;
&lt;code&gt;ss -s 或 netstat -ant | awk &apos;{print $1}&apos; | sort | uniq -c。&lt;/code&gt;&lt;/p&gt;&lt;p&gt;查看具体内核参数：&lt;br /&gt;
&lt;code&gt;sysctl net.ipv4.tcp_tw_reuse、sysctl net.ipv4.tcp_fin_timeout。&lt;/code&gt;&lt;/p&gt;&lt;p&gt;临时修改：&lt;code&gt;sysctl -w net.ipv4.tcp_tw_reuse=1。&lt;/code&gt;&lt;/p&gt;&lt;p&gt;永久修改：&lt;code&gt;vim /etc/sysctl.conf 后 sysctl -p加载。&lt;/code&gt;&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;系统时间不准如何同步？NTP和Chrony的区别？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;手动同步：&lt;code&gt;date -s &quot;2026-08-15 10:00:00&quot;&lt;/code&gt;&lt;/p&gt;&lt;p&gt;自动同步：生产环境使用NTP（Network Time Protocol）或Chrony（更快、更适合间歇性网络环境，RHEL 7+默认）。&lt;br /&gt;
操作：ntpdate ntp.aliyun.com（一次性同步）；或配置/etc/ntp.conf，启动ntpd服务持续微调。&lt;br /&gt;
Chrony优势：初始同步速度快，对虚拟机/云主机更友好，支持硬件时间戳。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;服务器磁盘IO负载高（%util接近100%），排查步骤是什么？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;br /&gt;
使用iostat -x 1查看各设备的%util、await、svctm，定位繁忙磁盘。&lt;br /&gt;
使用iotop查看哪个进程在大量读写磁盘。&lt;br /&gt;
使用lsof查看进程打开了哪些文件，定位具体日志或数据文件。&lt;br /&gt;
排查是否有慢查询（MySQL）或大文件拷贝、日志切割等操作。&lt;br /&gt;
优化：换SSD、调整IO调度器（cfq改noop/deadline）、分散IO负载。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;服务器无法SSH登录，可能的原因及排查路径？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：这是高频故障场景。&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;网络层面：检查IP能否ping通，安全组/防火墙是否放行22端口（telnet IP 22测试）。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;服务层面：systemctl status sshd看服务是否运行，ss -tunlp | grep 22确认监听。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;认证层面：密码错误/密钥权限不对（.ssh/authorized_keys权限应为600），/etc/ssh/sshd_config中PasswordAuthentication是否为yes。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;资源层面：系统内存/CPU耗尽或/var分区满（df -h检查），导致无法创建登录进程。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;安全层面：/etc/hosts.deny或fail2ban是否封禁了客户端IP。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;终极方案：通过服务器带外管理（BMC/控制台）登录排查。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;如何在Linux上快速查找一个文件？find和locate的区别？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;find：实时遍历目录树查找，精确但慢，支持按名称、大小、时间、权限等复杂条件搜索。示例：find / -name “nginx.conf” 2&amp;gt;/dev/null。&lt;br /&gt;
locate：查预构建的数据库（/var/lib/mlocate/mlocate.db），速度极快，但数据库默认每天更新一次，新建文件查不到。需先执行updatedb更新库。&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>mysql面试题</title><link>http://blog.cnylxs.xyz/posts/interview_mysql-20260815-01/</link><guid isPermaLink="true">http://blog.cnylxs.xyz/posts/interview_mysql-20260815-01/</guid><description>mysql面试题</description><pubDate>Sat, 15 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h1&gt;一、基础架构与存储引擎&lt;a href=&quot;#一基础架构与存储引擎&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;请简述MySQL的基础架构分为哪几层？各层的核心职责是什么？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：MySQL采用分层插件式架构，核心分为Server层和存储引擎层。&lt;/p&gt;&lt;p&gt;Server层：是MySQL的核心逻辑处理层，所有存储引擎共享。涵盖连接器（管理连接、权限验证）、分析器（词法/语法分析）、优化器（生成执行计划、索引选择）、执行器（操作引擎返回结果）。同时包含内置函数、视图、触发器、binlog日志等。&lt;/p&gt;&lt;p&gt;存储引擎层：负责数据的物理读写与持久化。插件式设计，支持InnoDB、MyISAM等。Server层通过统一的Handler API与存储引擎交互，不感知底层细节。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;InnoDB和MyISAM引擎的核心区别是什么？生产环境为什么普遍推荐InnoDB？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：这是运维面试的必考题。&lt;/p&gt;&lt;p&gt;事务：InnoDB支持ACID事务；MyISAM不支持。&lt;/p&gt;&lt;p&gt;锁粒度：InnoDB默认行级锁（高并发友好）；MyISAM表级锁（并发写入性能差）。&lt;/p&gt;&lt;p&gt;崩溃恢复：InnoDB通过Redo/Undo日志支持崩溃恢复；MyISAM不支持，易损坏。&lt;/p&gt;&lt;p&gt;索引结构：InnoDB是聚簇索引（数据与主键索引存储在一起）；MyISAM是非聚簇索引（索引与数据分离）。&lt;/p&gt;&lt;p&gt;推荐理由：电商、交易等高并发、写密集场景，InnoDB的行锁和事务能力是刚需。MyISAM仅适用于历史归档等极少量只读场景。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;MySQL连接建立后，管理员修改了用户权限，为什么当前已建立的连接不生效？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：MySQL在连接建立时，连接器会一次性将用户的全量权限加载到该连接的内存上下文中。后续该连接内的所有操作均基于这份内存副本做校验，不会重新读取权限表。只有新建立的连接才会加载新的权限。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;长连接可能导致内存溢出，生产环境如何优化？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：MySQL执行SQL过程中的临时内存（如结果集、排序缓冲）会附着在连接对象上，只有连接断开才释放。长期使用长连接且执行大查询会导致内存持续累积。优化方案包括：合理设置wait_timeout自动释放空闲连接，或定期执行mysql_reset_connection重置连接状态（无需重连）。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;二、索引设计与查询优化&lt;a href=&quot;#二索引设计与查询优化&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;索引有哪些常见类型？B+树索引和哈希索引的区别是什么？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;索引类型：普通索引、唯一索引、主键索引、全文索引、组合索引。&lt;/p&gt;&lt;p&gt;B+树 vs 哈希：B+树支持范围查询和排序（叶子节点有序链表），磁盘IO友好（一次加载多个索引页）；哈希索引只支持等值查询，冲突时性能不稳定，不支持范围查询。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;什么是组合索引的最左前缀原则？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：在(a, b, c)上建立组合索引，查询条件必须从索引最左列开始且不跳过中间列才能生效。例如：WHERE a=1 AND b=2生效；WHERE b=2 AND c=3（未命中a）不生效。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;请列举索引失效的常见场景。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;对索引字段使用函数或表达式：WHERE DATE(create_time) = ‘2023-01-01’。&lt;/p&gt;&lt;p&gt;隐式类型转换：如字段是varchar但条件写where phone = 123。&lt;/p&gt;&lt;p&gt;LIKE查询以%开头：WHERE name LIKE ‘%张三’。&lt;/p&gt;&lt;p&gt;OR连接非索引列：WHERE name = ‘a’ OR age = 20（若age无索引则全表扫描）。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;如何分析一条SQL的性能？EXPLAIN结果中重点看哪些字段？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：使用EXPLAIN查看执行计划。重点看：&lt;/p&gt;&lt;p&gt;type：访问类型，从好到差依次是system &amp;gt; const &amp;gt; eq_ref &amp;gt; ref &amp;gt; range &amp;gt; index &amp;gt; ALL（全表扫描），至少应达到range级别。&lt;/p&gt;&lt;p&gt;key：实际命中的索引，判断是否用了预期索引。&lt;/p&gt;&lt;p&gt;rows：预估扫描行数，越少越好。&lt;/p&gt;&lt;p&gt;Extra：是否出现Using filesort（文件排序，需优化）或Using temporary（临时表，需优化）。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;三、事务、隔离级别与锁机制&lt;a href=&quot;#三事务隔离级别与锁机制&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;MySQL的事务隔离级别有哪些？MySQL默认是哪个？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;读未提交（Read Uncommitted）：存在脏读、不可重复读、幻读。&lt;/p&gt;&lt;p&gt;读已提交（Read Committed, RC）：解决脏读，存在不可重复读和幻读（Oracle默认）。&lt;/p&gt;&lt;p&gt;可重复读（Repeatable Read, RR）：MySQL默认，解决脏读和不可重复读（通过MVCC），但存在幻读。&lt;/p&gt;&lt;p&gt;串行化（Serializable）：解决所有问题，性能最低（通过锁表）。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;MVCC（多版本并发控制）是如何实现“读不加锁”的？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：MVCC是InnoDB实现高并发的核心。&lt;/p&gt;&lt;p&gt;核心组件：每行数据有隐藏列（事务IDDB_TRX_ID、回滚指针DB_ROLL_PTR）指向Undo Log版本链；每个事务生成Read View（包含当前活跃事务ID列表）。&lt;/p&gt;&lt;p&gt;可见性规则：通过对比DB_TRX_ID与Read View的边界判断数据版本是否可见。RR级别下Read View在事务开启时生成一次（保证可重复读）；RC级别下每次查询重新生成（能读到已提交的新数据）。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;InnoDB有哪些锁？什么是间隙锁（Gap Lock）？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;锁分类：共享锁（S锁，读锁）、排他锁（X锁，写锁）；意向锁（IS/IX）；行锁、表锁。&lt;/p&gt;&lt;p&gt;间隙锁：在可重复读（RR） 隔离级别下，为防止幻读，不仅锁定行，还锁定行与行之间的“间隙”。当执行范围查询（如WHERE id BETWEEN 10 AND 20）时，会锁住该范围内的间隙，阻止其他事务插入新数据。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;死锁是如何产生的？如何排查和解决？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;产生原因：多个事务互相持有对方需要的锁，循环等待。例如事务A锁住行1请求行2，事务B锁住行2请求行1。&lt;/p&gt;&lt;p&gt;排查：使用SHOW ENGINE INNODB STATUS\G查看死锁日志；开启innodb_print_all_deadlocks记录到错误日志；用performance_schema监控锁等待。&lt;/p&gt;&lt;p&gt;解决：设置合理的innodb_lock_wait_timeout超时参数；调整业务逻辑，约定访问表的顺序；使用pt-deadlock-logger工具定期抓取死锁。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;四、日志体系（Redo/Binlog/Undo）&lt;a href=&quot;#四日志体系redobinlogundo&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;Binlog、Redo log、Undo log各自的作用是什么？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;Redo log（重做日志，InnoDB特有）：保证事务的持久性（Durability）。记录的是物理级别的修改（页的修改）。预写日志机制（WAL）：写数据前先写日志，即使宕机，重启后通过Redo log重做恢复已提交事务。&lt;/p&gt;&lt;p&gt;Binlog（归档日志，Server层）：用于数据备份、主从复制。记录的是逻辑SQL语句（如UPDATE）。所有存储引擎共用。&lt;/p&gt;&lt;p&gt;Undo log（回滚日志，InnoDB特有）：保证事务的原子性（Atomicity），是MVCC的基础。记录数据修改前的旧版本，用于事务回滚和提供一致性读。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;什么是MySQL的两阶段提交（2PC）？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：在事务提交时，为了保证Binlog和Redo log的一致性（尤其是崩溃恢复和主从数据一致），MySQL采用内部XA两阶段提交：&lt;/p&gt;&lt;p&gt;Prepare阶段：InnoDB将Redo log写入磁盘并标记为prepare状态。&lt;/p&gt;&lt;p&gt;Commit阶段：Server层将Binlog写入磁盘。Binlog写成功后，InnoDB将Redo log标记为commit状态，事务完成。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;五、主从复制与高可用（运维重点）&lt;a href=&quot;#五主从复制与高可用运维重点&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;MySQL异步复制的原理是什么？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：基于Binlog的同步机制，流程如下：&lt;/p&gt;&lt;p&gt;主库事务提交时将变更写入Binlog。&lt;/p&gt;&lt;p&gt;从库启动I/O线程，连接主库请求Binlog。主库启动Dump线程发送日志给从库。&lt;/p&gt;&lt;p&gt;从库I/O线程将接收到的日志写入本地Relay Log（中继日志）。&lt;/p&gt;&lt;p&gt;从库SQL线程重放Relay Log中的操作，实现数据同步。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;什么是半同步复制？解决了什么问题？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：默认复制是异步的（主库发送完Binlog即返回，不关心从库是否收到），宕机可能导致数据丢失。半同步复制要求：主库提交事务时，必须至少等待一个从库确认已接收并写入Relay Log后才返回客户端成功。这牺牲一定性能，换取了数据一致性（减少丢失风险）。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;主从复制延迟常见原因及解决方案有哪些？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;原因：主库写入并发高，从库单线程回放跟不上（I/O瓶颈）；网络延迟；从库执行复杂查询（如报表）锁竞争；硬件差异。&lt;/p&gt;&lt;p&gt;解决方案：&lt;/p&gt;&lt;p&gt;架构层：读写分离，将读流量分散到多个从库；引入缓存层（Redis）降低读压力。
参数调优：从库开启并行复制（slave_parallel_workers）；设置sync_binlog=0或1权衡性能与安全；优化从库的innodb_flush_log_at_trx_commit。
监控：通过Seconds_Behind_Master监控延迟，结合pt-query-digest分析慢查询。
18. 如果主库宕机，如何手动将从库提升为新主库？&lt;/p&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;在所有从库上执行SHOW SLAVE STATUS\G，记录Relay_Master_Log_File和Exec_Master_Log_Pos，选择Pos值最大（数据最新）的从库作为新主库。&lt;/p&gt;&lt;p&gt;在选定的从库上执行STOP SLAVE; RESET MASTER;，修改配置文件开启Binlog。&lt;/p&gt;&lt;p&gt;在其他从库上执行CHANGE MASTER TO指向新主库，使用选定的Pos值开始同步。&lt;/p&gt;&lt;p&gt;修改应用层数据库连接IP（或VIP漂移）。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;你了解哪些MySQL高可用架构？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;MHA（Master High Availability）：目前较为成熟，自动故障转移（0-30秒），需配合VIP或DNS。缺点是有脑裂风险，管理节点单点。&lt;/p&gt;&lt;p&gt;MGR（MySQL Group Replication）：基于Paxos协议的强一致高可用，支持多主（不建议），但技术较新，对网络要求高。&lt;/p&gt;&lt;p&gt;读写分离中间件：如MyCat、ShardingSphere-Proxy、ProxySQL，结合一主多从做流量分发。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;六、运维实操与性能排查（高频）&lt;a href=&quot;#六运维实操与性能排查高频&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;生产环境MySQL CPU飙升到100%，你的排查思路是什么？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：通常是SQL大量全表扫描或索引失效导致。&lt;/p&gt;&lt;p&gt;定位线程：top -H -p &amp;lt;mysqld_pid&amp;gt; 找到CPU占用高的线程ID（TID）。&lt;/p&gt;&lt;p&gt;找到SQL：通过performance_schema.threads表关联THREAD_OS_ID找到对应的MySQL内部线程ID和正在执行的SQL。&lt;/p&gt;&lt;p&gt;分析慢查询：开启慢查询日志，使用pt-query-digest分析，找出慢语句，用EXPLAIN看执行计划，优化索引或SQL写法。&lt;/p&gt;&lt;p&gt;应急：先KILL掉该线程释放资源，再优化业务代码。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;数据库内存使用率过高如何排查？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：MySQL内存主要由全局缓冲和连接线程私有缓冲组成。&lt;/p&gt;&lt;p&gt;查看SHOW VARIABLES LIKE ‘innodb_buffer_pool_size’;确认缓冲池大小是否过大。&lt;/p&gt;&lt;p&gt;统计连接数内存消耗：SELECT * FROM memory_by_thread_by_current_bytes查看各线程内存占用，排查是否有大量复杂排序/临时表操作。&lt;/p&gt;&lt;p&gt;查看performance_schema的innodb_buffer_stats_by_table，判断哪些表占用了大量Buffer Pool内存。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;如何利用Binlog进行数据恢复？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：利用mysqlbinlog工具解析Binlog，按时间点或位置恢复到指定时刻。&lt;/p&gt;&lt;p&gt;sql
mysqlbinlog —start-datetime=“2023-01-01 10:00&amp;lt;00&amp;gt;” —stop-datetime=“2023-01-01 11:00&amp;lt;00&amp;gt;” binlog.000001 | mysql -u root -p
常用于误删数据后的闪回恢复。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;常用的备份工具和备份策略有哪些？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;逻辑备份：mysqldump（单线程导出，适用于数据量较小的库）。&lt;/p&gt;&lt;p&gt;物理备份：Percona XtraBackup（热备神器，支持增量备份，对InnoDB事务引擎友好，不影响业务）。&lt;/p&gt;&lt;p&gt;策略：一般核心业务采用每周全量 + 每天增量 + Binlog归档的方案。备份需验证完整性，并定期进行演练。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;DELETE、TRUNCATE、DROP的区别？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;DELETE：DML操作，逐行删除，可回滚（有事务日志），不释放表空间（高水位线保留）。&lt;/p&gt;&lt;p&gt;TRUNCATE：DDL操作，清空表所有数据，不可回滚，释放表空间（重置高水位），速度快。&lt;/p&gt;&lt;p&gt;DROP：DDL操作，删除表结构和数据，释放空间，不可回滚，速度最快。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;忘记MySQL root密码怎么办？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：在配置文件中添加skip-grant-tables跳过权限验证重启MySQL。免密登录后执行UPDATE user SET authentication_string=PASSWORD(‘新密码’) WHERE User=‘root’;，然后刷新权限FLUSH PRIVILEGES;，去掉skip-grant-tables重启恢复正常。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;MySQL区分大小写由哪个参数控制？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：lower_case_table_names。&lt;/p&gt;&lt;p&gt;Linux下默认为0（表名区分大小写）。&lt;/p&gt;&lt;p&gt;Windows下默认为1（不区分）。
生产环境通常建议设为1以避免跨平台迁移报错，但需注意该参数在初始化后修改有风险。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;如何查看当前数据库的连接数和状态？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;SHOW PROCESSLIST; 查看当前所有连接状态及执行的SQL（常用于排查锁等待和慢查询）。&lt;/p&gt;&lt;p&gt;SHOW STATUS LIKE ‘%Threads_connected%’; 查看当前连接数。&lt;/p&gt;&lt;p&gt;SHOW STATUS LIKE ‘%Max_used_connections%’; 查看历史最大连接数。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;如何监控MySQL主从复制状态？关键监控项有哪些？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：使用SHOW SLAVE STATUS\G。&lt;/p&gt;&lt;p&gt;关键指标：&lt;/p&gt;&lt;p&gt;Slave_IO_Running / Slave_SQL_Running：必须为Yes。&lt;/p&gt;&lt;p&gt;Seconds_Behind_Master：延迟秒数（0为正常）。&lt;/p&gt;&lt;p&gt;Last_IO_Error / Last_SQL_Error：错误日志字段。&lt;/p&gt;&lt;p&gt;工具：可接入Zabbix、Prometheus（mysql_slave_status采集器）统一监控告警。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;如何处理MySQL连接池打满的问题？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;快速排查是否有慢SQL堆积或锁等待导致连接不释放（查SHOW PROCESSLIST）。&lt;/p&gt;&lt;p&gt;检查max_connections设置是否合理，适当调大上限。&lt;/p&gt;&lt;p&gt;在应用层配置合理的connectionTimeout和idleTimeout，及时回收空闲连接。&lt;/p&gt;&lt;p&gt;读写分离或分库分表减少单库连接压力。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;海量数据下如何进行表结构变更（DDL）？&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：直接执行ALTER TABLE会锁表（Metadata Lock）导致业务中断。运维层面应使用在线DDL工具：&lt;/p&gt;&lt;p&gt;pt-online-schema-change（Percona Toolkit）：通过触发器或交换表的方式无锁变更，不阻塞读写。&lt;/p&gt;&lt;p&gt;gh-ost（GitHub出品）：通过Binlog回放进行无触发器变更，对主库压力小。&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>运维面试问题</title><link>http://blog.cnylxs.xyz/posts/InterviewQuestion_all-20260814-01/</link><guid isPermaLink="true">http://blog.cnylxs.xyz/posts/InterviewQuestion_all-20260814-01/</guid><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h1&gt;一、 网络基础&lt;a href=&quot;#一-网络基础&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;请简述 OSI 七层网络模型有哪些层及各自的含义？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;物理层&lt;/strong&gt;：底层数据传输，比如网线、网卡标准。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数据链路层&lt;/strong&gt;：定义数据的基本格式、如何传输、如何标识，比如网卡 MAC 地址。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网络层&lt;/strong&gt;：定义 IP 编码和路由功能，比如不同设备间的数据转发。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;传输层&lt;/strong&gt;：端到端传输数据的基本功能，比如 TCP、UDP。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;会话层&lt;/strong&gt;：控制应用程序之间的会话能力，比如不同软件的数据分发。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;表示层&lt;/strong&gt;：数据格式标识，基本压缩、加密功能。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;应用层&lt;/strong&gt;：各种应用软件，包括 Web 应用。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;简述 DNS 进行域名解析的过程？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;DNS 解析分为&lt;strong&gt;迭代查询&lt;/strong&gt;（返回最优结果）和&lt;strong&gt;递归查询&lt;/strong&gt;（本地找 DNS）。用户要访问 &lt;a href=&quot;http://www.baidu.com%EF%BC%9A&quot; target=&quot;_blank&quot;&gt;www.baidu.com：&lt;/a&gt;&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;先查找本机 &lt;strong&gt;hosts 文件&lt;/strong&gt;；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;再找本地设置的 &lt;strong&gt;DNS 服务器&lt;/strong&gt;，如果也没有找到，就去网络中找&lt;strong&gt;根服务器&lt;/strong&gt;；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;根服务器反馈只能提供一级域名服务器 &lt;code&gt;.cn&lt;/code&gt;，就去找一级域名服务器；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;一级域名服务器说只能提供二级域名服务器 &lt;code&gt;.com.cn&lt;/code&gt;，就去找二级域名服务器；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;二级域名服务器只能提供三级域名服务器 &lt;code&gt;.baidu.com.cn&lt;/code&gt;，就去找三级域名服务器；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;三级域名服务器正好有 &lt;a href=&quot;http://www.baidu.com%EF%BC%8C%E8%BF%94%E5%9B%9E%E7%BB%99%E8%AF%B7%E6%B1%82%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%8C%E4%BF%9D%E5%AD%98%E4%B8%80%E4%BB%BD%E7%BC%93%E5%AD%98%E4%B9%8B%E5%90%8E%E5%86%8D%E5%8F%91%E7%BB%99%E5%AE%A2%E6%88%B7%E7%AB%AF%E3%80%82&quot; target=&quot;_blank&quot;&gt;www.baidu.com，返回给请求的服务器，保存一份缓存之后再发给客户端。&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;什么是正向代理？&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;正向代理是&lt;strong&gt;位于客户端和原始服务器之间&lt;/strong&gt;的服务器。客户端向代理发送请求并指定目标（原始服务器），代理向原始服务器转交请求并将结果返回给客户端。&lt;/p&gt;&lt;p&gt;一句话总结：&lt;strong&gt;正向代理代理的是客户端&lt;/strong&gt;。例如 OpenVPN 等场景。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;什么是反向代理？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;反向代理是指以代理服务器来接受 Internet 上的连接请求，然后将请求转发给&lt;strong&gt;内部网络上的服务器&lt;/strong&gt;，并将结果返回给请求的客户端，此时代理服务器对外表现为一个反向代理服务器。&lt;/p&gt;&lt;p&gt;一句话总结：&lt;strong&gt;反向代理代理的是服务端&lt;/strong&gt;。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;a 与 b 服务器不在同一网段怎么设置？设置完还 ping 不通怎么排查？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;首先把不同 IP 段的服务器划分给不同的 &lt;strong&gt;VLAN&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;通过&lt;strong&gt;三层交换机&lt;/strong&gt;添加虚拟 IP 路由，实现不同网段 VLAN 的互通。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;设置完 ping 不通时排查：检查交换机路由配置是否正确、各设备网关是否配置正确、防火墙/SELinux 是否放行、物理链路是否正常。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;在 A、B 两台服务器之间通过一台服务器 C 做软路由，如何配置？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;C 服务器&lt;/strong&gt;配置两块网卡并开启路由转发功能：&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展开&lt;/span&gt;&lt;span&gt;收起&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 网卡 1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;IP&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;10.0.0.11&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;网关&lt;/span&gt;&lt;span&gt;=10.0.0.254&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 网卡 2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;IP&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;10.0.1.11&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;网关&lt;/span&gt;&lt;span&gt;=10.0.1.254&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 重启网卡生效，查看路由&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;systemctl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;restart&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;network&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;route&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-n&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 开启 IP 转发&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;vi&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/etc/sysctl.conf&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;net.ipv4.ip_forward&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sysctl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-p&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展开&lt;/span&gt;&lt;span&gt;收起&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;A 服务器&lt;/strong&gt;设置：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;子网掩码：255.255.255.0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;IP&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;10.0.0.1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;网关&lt;/span&gt;&lt;span&gt;=10.0.0.254&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 重启网卡生效&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;route&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-n&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 添加对应路由&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;route&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-net&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10.0.1.0/24&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;gw&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10.0.0.11&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;B 服务器&lt;/strong&gt;设置：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;IP&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;10.0.1.10&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;网关&lt;/span&gt;&lt;span&gt;=10.0.1.254&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 重启网卡生效&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;route&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-n&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 添加对应路由&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;route&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-net&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10.0.0.0/24&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;gw&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10.0.1.11&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;如果 ping 不通怎么排查？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;先检查是否网络接口故障（水晶头、网卡接口接触不良）；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;检查交换机和路由器等网络设备是否有故障；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;检查是否关闭了&lt;strong&gt;防火墙和 SELinux&lt;/strong&gt; 机制；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;检查网卡、路由和网关是否配置正确。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;如果一台办公室内主机无法上网（打不开网站），给出你的排查步骤？&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;首先确定物理链路是否连通正常；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;查看本机 IP、路由、DNS 的设置是否达标；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;telnet&lt;/code&gt; 检查服务器的 WEB 服务是否开启以及防火墙是否阻拦；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;ping&lt;/code&gt; 网关，通了表示能够到达服务器；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;逐级测试到网关、路由器（先网关再路由器一级一级测）；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;测试 ping 公网 IP 的连通情况（记住几个外部 IP）；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;测试 DNS 的通畅（&lt;code&gt;ping&lt;/code&gt; 出对应 IP，或 &lt;code&gt;nslookup&lt;/code&gt;）；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;以上检查后仍未解决，再到网关的路由器上检查。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;端口转发如何配置？&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;iptables&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-t&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nat&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-A&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PREROUTING&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-d&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10.0.0.8&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-p&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tcp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--dport&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;80&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-j&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;REDIRECT&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--to-ports&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;8080&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;如何查看 http 的并发请求数与其 TCP 连接状态？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;netstat&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-n&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;awk&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;/^tcp/{++b[$NF]}END{for(a in b)print a,b[a]}&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;二、 Linux 基础与运维命令&lt;a href=&quot;#二-linux-基础与运维命令&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;在 Linux 的 LVM 分区格式下，请简述给根分区磁盘扩容的步骤？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：分三种情况：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;第一种方法（growpart 扩容）：&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;growpart&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/dev/vda&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;resize2fs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/dev/vda1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;第二种方法（partprobe 生效）：&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;partprobe&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/dev/sda&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;resize2fs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/dev/vda1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;第三种方法（新磁盘加入卷组）：&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;fdisk&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/dev/sdb&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;# n p 1 1 回车 回车 t 8e w&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pvcreate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/dev/sdb1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;vgextend&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;datavg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/dev/sdb1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;lvextend&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-r&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-L&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+100%free&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/dev/mapper/datavg-lv01&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;简述 LVM，如何给使用 LVM 的 / 分区扩容？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;功能&lt;/strong&gt;：对磁盘进行动态管理，按需动态调整大小。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;核心概念&lt;/strong&gt;：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;PV（物理卷）&lt;/strong&gt;：最底层，可以是物理硬盘上的分区、整个物理硬盘或 RAID 设备；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VG（卷组）&lt;/strong&gt;：建立在物理卷之上，一个卷组至少包含一个物理卷，可动态添加；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LV（逻辑卷）&lt;/strong&gt;：建立在卷组之上，卷组中的未分配空间可用于建立新的逻辑卷，可动态扩展和缩小。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;给 / 分区扩容步骤&lt;/strong&gt;：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;添加磁盘；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用 &lt;code&gt;fdisk&lt;/code&gt; 对新磁盘分区；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;分区完成后修改分区类型为 LVM（8e）；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用 &lt;code&gt;pvcreate&lt;/code&gt; 创建物理卷；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用 &lt;code&gt;vgextend&lt;/code&gt; 将新分区加入根目录所在卷组；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用 &lt;code&gt;lvextend&lt;/code&gt; 进行扩容；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用 &lt;code&gt;xfs_growfs&lt;/code&gt;（ext4 用 &lt;code&gt;resize2fs&lt;/code&gt;）调整文件系统大小。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Linux 的文件类型有哪些？&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-&lt;/code&gt;：常规文件（file）；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;d&lt;/code&gt;：目录文件（directory）；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;b&lt;/code&gt;：块设备文件（block device），如硬盘，支持以 block 为单位随机访问；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;c&lt;/code&gt;：字符设备文件（character device），如键盘，以 character 为单位线性访问；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;l&lt;/code&gt;：符号链接文件（symbolic link），又称软链接；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;p&lt;/code&gt;：命名管道文件（pipe）；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;s&lt;/code&gt;：套接字文件（socket），用于两个进程间通信。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Linux 系统启动流程是怎样的？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;开机自检，加载 BIOS；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;读取 MBR；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Boot Loader（grub）引导菜单；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;加载 kernel 内核；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;init 进程依据 inittab 文件设定运行级别；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;init 进程执行 rc.sysinit；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;启动内核模块；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;执行不同运行级别的脚本程序；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;执行 /etc/rc.d/rc.local。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;如何查看并杀死僵尸进程？&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;top&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 查看 Task 行中的 zombie 数量&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;处理思路：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;僵尸进程（defunct）无法直接 &lt;code&gt;kill&lt;/code&gt; 掉，需要&lt;strong&gt;杀掉其父进程&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;父进程死后，僵尸进程过继给 1 号进程（init），init 会负责清理，其产生的所有僵尸进程跟着消失；&lt;/li&gt;
&lt;li&gt;使用 &lt;code&gt;kill -15&lt;/code&gt;、&lt;code&gt;kill -9&lt;/code&gt; 杀父进程后，反而可能产生更多僵尸进程（因为父进程的子进程也变成了孤儿/僵尸），需要注意处理方式。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;如何搜索某个用户运行的进程？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pgrep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-au&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;neteagle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;如何查看某个端口正在被哪个进程使用？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;lsof&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:[port]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;如何查看 /var/log 目录下的文件数？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ls&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/var/log/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-lR&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;grep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;^-&quot;&lt;/span&gt;&lt;span&gt; | &lt;/span&gt;&lt;span&gt;wc&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-l&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;如何在文本里进行复制、粘贴、删除行、删除全部、按行查找和按字母查找？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：以下操作全部在 &lt;strong&gt;vi/vim 命令状态&lt;/strong&gt;下操作：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;复制粘贴&lt;/strong&gt;：移动到想要复制的行按 &lt;code&gt;yy&lt;/code&gt;，移动到目标位置按 &lt;code&gt;p&lt;/code&gt; 粘贴；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;删除行&lt;/strong&gt;：移动到该行按 &lt;code&gt;dd&lt;/code&gt;；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;删除全部&lt;/strong&gt;：&lt;code&gt;dG&lt;/code&gt;（注意 G 一定要大写）；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;按行查找&lt;/strong&gt;：&lt;code&gt;:90&lt;/code&gt; 跳到第 90 行；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;按字母查找&lt;/strong&gt;：&lt;code&gt;/path&lt;/code&gt; 查找 path 单词所在位置，多次查找会显示在不同位置。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;符号链接与硬链接的区别？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;符号链接（软链接）&lt;/strong&gt;：相当于 Windows 里的快捷方式。&lt;code&gt;ln -s 3.txt 4.txt&lt;/code&gt;，修改 4 会跟着改 3（反之亦然）；若删除源文件 3，4 就坏掉了不可用；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;硬链接&lt;/strong&gt;：相当于又复制了一份。&lt;code&gt;ln 3.txt 4.txt&lt;/code&gt;，不可以跨分区；修改 3 和 4 会跟着变；但删除 3 时 4 不受任何影响。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;如何查看二进制文件的内容？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;一般通过 &lt;code&gt;hexdump&lt;/code&gt; 命令查看：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;hexdump&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-C&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;文件名&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;常用参数：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-C&lt;/code&gt;：规范的十六进制和 ASCII 码显示；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-c&lt;/code&gt;：单字节字符显示；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-b&lt;/code&gt;：单字节八进制显示；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-o&lt;/code&gt;：双字节八进制显示；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-d&lt;/code&gt;：双字节十进制显示；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-x&lt;/code&gt;：双字节十六进制显示。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;三、 Web 服务与负载均衡&lt;a href=&quot;#三-web-服务与负载均衡&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;讲述一下 Tomcat 8005、8009、8080 三个端口的含义？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;8005&lt;/strong&gt;：关闭 Tomcat 时使用；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;8009&lt;/strong&gt;：AJP 端口，供容器使用（如 Apache 可通过 AJP 协议访问 Tomcat 的 8009 端口实现功能）；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;8080&lt;/strong&gt;：一般应用使用。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;讲一下 Keepalived 的工作原理？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;在一个虚拟路由器中，只有作为 &lt;strong&gt;MASTER 的 VRRP（虚拟路由冗余协议）&lt;/strong&gt; 路由器会一直发送 VRRP 通告信息，BACKUP 不会抢占 MASTER，除非它的优先级更高；&lt;/li&gt;
&lt;li&gt;当 MASTER 不可用时（BACKUP 收不到通告信息），多台 BACKUP 中&lt;strong&gt;优先级最高的会被抢占为 MASTER&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;抢占非常快速（&amp;lt;1s），保证服务的连续性；&lt;/li&gt;
&lt;li&gt;由于安全性考虑，VRRP 包使用加密协议进行加密；&lt;/li&gt;
&lt;li&gt;BACKUP 不会发送通告信息，只会接收通告信息。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;LVS、Nginx、HAProxy 有什么区别？工作中你怎么选择？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;LVS：&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;抗负载能力强，工作在&lt;strong&gt;第 4 层&lt;/strong&gt;仅作分发，无流量产生，负载均衡软件里性能最强；&lt;/li&gt;
&lt;li&gt;工作稳定，自身有完整的双机热备方案（LVS+Keepalived、LVS+Heartbeat）；&lt;/li&gt;
&lt;li&gt;应用范围广，可以对所有应用做负载均衡；&lt;/li&gt;
&lt;li&gt;配置简单，减少人为出错几率；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;缺点&lt;/strong&gt;：不支持正则处理、不能做动静分离；网站应用庞大时（尤其有 Windows Server 应用）实施维护较复杂。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Nginx：&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;工作在第 &lt;strong&gt;7 层&lt;/strong&gt;应用层，可针对 HTTP 应用做分流策略（域名、目录结构），正则比 HAProxy 更强大灵活；&lt;/li&gt;
&lt;li&gt;对网络依赖小，理论上能 ping 通就能负载；&lt;/li&gt;
&lt;li&gt;安装配置简单；能支撑几万次并发量，稳定；&lt;/li&gt;
&lt;li&gt;不仅是负载均衡器/反向代理，也是强大的 Web 应用服务器，处理静态页面、抗高并发比 Apache 有优势；&lt;/li&gt;
&lt;li&gt;作为 Web 反向代理加速缓存成熟，速度比传统 Squid 快；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;缺点&lt;/strong&gt;：不支持 URL 检测后端；仅支持 HTTP、HTTPS 和 Email 协议；Session 保持、Cookie 引导能力相对欠缺。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;HAProxy：&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;支持虚拟主机，可工作在 4、7 层（支持多网段）；&lt;/li&gt;
&lt;li&gt;弥补 Nginx 缺点（Session 保持、Cookie 引导）；&lt;/li&gt;
&lt;li&gt;支持 URL 检测后端服务器；&lt;/li&gt;
&lt;li&gt;纯负载均衡软件，负载均衡速度和并发处理优于 Nginx；&lt;/li&gt;
&lt;li&gt;可对 MySQL 读做负载均衡和后端节点检测（slaves 超过 10 台时性能不如 LVS）；&lt;/li&gt;
&lt;li&gt;算法较多，达 8 种。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;工作选择&lt;/strong&gt;：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;HAProxy 和 Nginx 可做七层转发（URL、目录转发）；&lt;/li&gt;
&lt;li&gt;很大并发量时选择 &lt;strong&gt;LVS&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;中小型公司并发量不大，选择 &lt;strong&gt;HAProxy 或 Nginx&lt;/strong&gt; 即可；HAProxy 是专业代理服务器、配置简单，中小型企业推荐使用 HAProxy。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Nginx 的负载均衡算法策略有哪些？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;轮询&lt;/strong&gt;（默认）：请求依次分发到后端服务器；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;加权轮询&lt;/strong&gt;：轮询 + weight 权重，按权重比例分发；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ip_hash&lt;/strong&gt;：每个请求的访问 IP 映射成 hash，通过 hash 算法（hash 值 % node_count）分配到后端服务器，同一 IP 固定访问同一后端，实现会话保持，解决 session 同步问题；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;least_conn（最少连接）&lt;/strong&gt;：将新请求分发给当前连接数最少的服务器，避免繁忙服务器过载。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Nginx 常用模块有哪些？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;upstream&lt;/code&gt;：负载均衡后端服务器组；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rewrite&lt;/code&gt;：URL 重写；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;location&lt;/code&gt;：请求匹配定位；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;proxy_pass&lt;/code&gt;：反向代理转发。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;什么是动态资源、静态资源分离？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;动静分离是让动态网站中&lt;strong&gt;不变的资源&lt;/strong&gt;和&lt;strong&gt;经常变化的资源&lt;/strong&gt;分开部署，根据静态资源的特点做缓存操作，是网站静态化处理的核心思路；&lt;/li&gt;
&lt;li&gt;需要后台处理的请求（.jsp、.do 等）是&lt;strong&gt;动态文件&lt;/strong&gt;；不需要后台处理的（css、html、jpg、js 等）是&lt;strong&gt;静态文件&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;静态资源放到 &lt;strong&gt;Nginx&lt;/strong&gt; 中，动态资源转发到 &lt;strong&gt;Tomcat&lt;/strong&gt; 服务器；&lt;/li&gt;
&lt;li&gt;目前主流的做法是把静态资源缓存到 &lt;strong&gt;CDN&lt;/strong&gt; 服务中（七牛、阿里云等），CDN 国内节点更多，实现就近访问、提供更大带宽，提升访问速度。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;四、 Docker&lt;a href=&quot;#四-docker&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Docker 的工作原理是什么？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;Docker 是一个 &lt;strong&gt;Client-Server 结构&lt;/strong&gt;的系统：Docker 守护进程运行在宿主机上，从客户端接受命令并管理运行在主机上的容器；容器是一个运行时环境，即”集装箱”。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Docker 的组成包含哪几大部分？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;docker client&lt;/strong&gt;：客户端，为用户提供可执行命令，实现与 docker daemon 的交互；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;docker daemon&lt;/strong&gt;：守护进程，在宿主机后台运行，等待接收客户端请求；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;docker image&lt;/strong&gt;：镜像，run 之后生成 docker 容器；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;docker container&lt;/strong&gt;：容器，一个系统级别的服务，拥有自己的 IP 和系统目录结构；运行容器前需要本地存在对应镜像，否则从镜像仓库下载。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Docker 使用 C/S 架构，通过远程 API 管理和创建容器。容器通过镜像创建，&lt;strong&gt;容器与镜像的关系类似于面向对象编程中对象与类&lt;/strong&gt;。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Docker 与传统虚拟机的区别是什么？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;启动速度&lt;/strong&gt;：虚拟机需安装整个操作系统再启动应用，通常几分钟；Docker 直接使用镜像运行业务容器，启动是秒级别；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;资源占用&lt;/strong&gt;：Docker 在操作系统级别虚拟化，与内核交互几乎无性能损耗；虚拟机运行整个操作系统，占用资源多；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;轻量程度&lt;/strong&gt;：Docker 共用内核与共享应用程序库，内存占用极小；同样硬件环境 Docker 运行的实例远多于虚拟机；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;隔离性&lt;/strong&gt;：Docker 属于进程之间的隔离（隔离性弱），虚拟机可实现系统级别隔离；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;安全性&lt;/strong&gt;：Docker 租户 root 与宿主机 root 相同，容器内用户提权后可能直接具备宿主机 root 权限；虚拟机租户 root 与宿主机 root 分离，且有硬件隔离技术（如 Intel VT-d、VT-x）防止突破；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;管理工具&lt;/strong&gt;：Docker 集中化管理工具还不算成熟；虚拟化有成熟管理工具（如 VMware vCenter）；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;高可用&lt;/strong&gt;：Docker 靠快速重新部署实现；虚拟化具备负载均衡、高可用、容错、迁移、数据保护等成熟机制；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;创建速度&lt;/strong&gt;：虚拟化分钟级别，Docker 秒级别，迭代快；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;交付分发&lt;/strong&gt;：Docker 通过 Dockerfile 记录构建过程，可在集群中快速分发和部署。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Docker 技术的三大核心概念是什么？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;镜像（image）&lt;/strong&gt;：轻量级、可执行的独立软件包，包含运行软件所需的所有内容（代码、运行时库、环境变量、配置文件等），是可交付的运行环境；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;容器（container）&lt;/strong&gt;：基于镜像创建的实例，是真正运行业务程序的地方。类比：镜像=类，容器=对象；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;镜像仓库（registry）&lt;/strong&gt;：存放镜像的地方，构建好镜像后上传，有权限的人可拉取运行。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;CentOS 镜像几个 G，但是 docker centos 镜像才几百兆，这是为什么？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;一个完整的 Linux 操作系统包含&lt;strong&gt;内核 + rootfs（根文件系统）&lt;/strong&gt;（/dev、/proc、/bin 等目录）。平时看到的 CentOS 除了 rootfs 还选装了很多软件、服务、图形桌面，所以几个 G 不奇怪。&lt;/p&gt;&lt;p&gt;而容器镜像&lt;strong&gt;共享宿主机的 Linux 内核&lt;/strong&gt;，只需提供很小的 rootfs，只包含最基本的命令、工具和程序库，所以镜像很小。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;讲一下镜像的分层结构以及为什么要使用镜像的分层结构？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;新的镜像从 &lt;strong&gt;base 镜像&lt;/strong&gt;一层一层叠加生成，每安装一个软件（Dockerfile 中使用 RUN 命令）就在现有镜像上增加一层，最终构成整个镜像；所以 &lt;code&gt;docker pull&lt;/code&gt; 时会看到一层层拉取；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;分层最大的好处是共享资源&lt;/strong&gt;：多个镜像从相同 base 构建时，Docker Host 只需在磁盘上保存一份 base，内存中也只需加载一份，即可为所有容器服务；镜像的每一层都可以被共享。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;讲一下容器的 copy-on-write 特性，修改容器里面的内容会修改镜像吗？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;镜像是分层且&lt;strong&gt;只读&lt;/strong&gt;的；容器启动时，新的**可写层（容器层）**加载到镜像顶部，之下的都是镜像层；&lt;/li&gt;
&lt;li&gt;所有对容器的改动（添加、删除、修改）只发生在容器层，镜像层只读不变；各层联合组成统一文件系统，上层同名文件覆盖下层；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;添加文件&lt;/strong&gt;：新文件添加到容器层；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;读取文件&lt;/strong&gt;：从上往下在各镜像层查找，找到后复制到容器层再读入内存；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;修改文件&lt;/strong&gt;：查找到文件后复制到容器层再修改；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;删除文件&lt;/strong&gt;：找到后在容器层记录删除操作；&lt;/li&gt;
&lt;li&gt;只有当需要修改时才复制一份数据，即 &lt;strong&gt;Copy-on-Write&lt;/strong&gt;。&lt;strong&gt;不会对镜像本身做任何修改&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;简单描述一下 Dockerfile 的整个构建镜像过程？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;创建目录存放应用程序及构建使用的文件；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在该目录下创建 Dockerfile 文件；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;编写 Dockerfile 指令：&lt;code&gt;FROM&lt;/code&gt; 指定基础镜像、&lt;code&gt;COPY&lt;/code&gt; 复制文件、&lt;code&gt;RUN&lt;/code&gt; 运行命令、&lt;code&gt;ENV&lt;/code&gt; 设置环境变量、&lt;code&gt;EXPOSE&lt;/code&gt; 暴露端口、&lt;code&gt;WORKDIR&lt;/code&gt; 设置工作目录、&lt;code&gt;CMD&lt;/code&gt; 指定启动命令等；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用 &lt;code&gt;docker build -t 镜像名:tag .&lt;/code&gt; 构建（最后 &lt;code&gt;.&lt;/code&gt; 表示当前目录，默认找当前目录的 Dockerfile，可用 &lt;code&gt;-f&lt;/code&gt; 指定）；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;构建时 docker 将当前目录所有文件发给 daemon，顺序执行指令；期间生成临时容器安装 RUN 指定的命令，成功后类似 &lt;code&gt;docker commit&lt;/code&gt; 保存为镜像层并删除临时容器，一层层构建直到镜像构建成功。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Dockerfile 构建镜像出现异常，如何排查？&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;Dockerfile 一层层构建，期间产生临时容器安装应用。如果因临时容器安装应用异常导致构建失败，容器虽被清理，但&lt;strong&gt;已构建的中间镜像还在&lt;/strong&gt;。可以根据异常时上一层已构建的临时镜像，将其运行为容器，在容器里运行安装命令来定位具体异常。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Dockerfile 的基本指令有哪些？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;FROM&lt;/code&gt;：指定基础镜像（必须是第一个指令）；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MAINTAINER&lt;/code&gt;：设置镜像作者信息（作者名、日期、邮件等）；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;COPY&lt;/code&gt;：复制文件到镜像；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ADD&lt;/code&gt;：复制文件到镜像（区别：ADD 会自动解压 tar/zip/tgz/xz 归档文件，还支持 URL 下载；一般建议用 COPY）；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ENV&lt;/code&gt;：设置环境变量；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;EXPOSE&lt;/code&gt;：暴露容器端口（仅提示作用）；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;VOLUME&lt;/code&gt;：数据卷持久化，挂载目录；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;WORKDIR&lt;/code&gt;：设置工作目录（不存在会自动创建）；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RUN&lt;/code&gt;：在容器中运行命令（会创建新镜像层，常用于安装软件包）；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CMD&lt;/code&gt;：指定容器启动时默认运行的命令（多个 CMD 只有最后一个生效，可被 &lt;code&gt;docker run&lt;/code&gt; 后参数替换）；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ENTRYPOINT&lt;/code&gt;：指定容器启动时运行的命令（多个只有最后一个生效；同时存在 CMD 和 ENTRYPOINT 时，CMD 或 run 参数会作为参数传给 ENTRYPOINT）。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;如何进入容器？使用哪个命令？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;进入容器有两种方法：&lt;strong&gt;&lt;code&gt;docker attach&lt;/code&gt;&lt;/strong&gt;、&lt;strong&gt;&lt;code&gt;docker exec&lt;/code&gt;&lt;/strong&gt;（推荐 exec，如 &lt;code&gt;docker exec -it 容器名 bash&lt;/code&gt;）。&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Docker 容器 ping 不通是什么原因？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;code&gt;ifconfig&lt;/code&gt; 查看 docker0 网桥，ping 一下网桥看是否通，可能是&lt;strong&gt;网桥配置问题&lt;/strong&gt;（Weave 路由器端口 6783）；&lt;/li&gt;
&lt;li&gt;安装 Docker 的服务器&lt;strong&gt;没有关闭防火墙&lt;/strong&gt;（先测试物理机是否可访问）；&lt;/li&gt;
&lt;li&gt;创建镜像时&lt;strong&gt;没有做端口映射&lt;/strong&gt;（能访问物理机但不能访问 docker），用 &lt;code&gt;docker ps&lt;/code&gt; 查看端口映射情况；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;端口映射不正确&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;查看网络配置，ping 网桥看是否能通，排查网桥原因。&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;五、 Kubernetes&lt;a href=&quot;#五-kubernetes&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;什么是 K8s？说出你的理解？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;K8s 是 Kubernetes 的简称，本质是&lt;strong&gt;开源的容器编排系统&lt;/strong&gt;，用于管理容器化应用，目标是让容器化应用部署简单高效；&lt;/li&gt;
&lt;li&gt;Kubernetes 提供应用部署、规划、更新、维护的机制；&lt;/li&gt;
&lt;li&gt;简单说：K8s 是编排容器的系统，管理容器应用全生命周期——创建、部署、提供服务、扩容缩容、应用更新，还能做到&lt;strong&gt;故障自愈&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;K8s 的组件有哪些，作用分别是什么？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;K8s 由 &lt;strong&gt;master 节点&lt;/strong&gt;和 &lt;strong&gt;node 节点&lt;/strong&gt;构成。master 管理集群，node 是容器应用运行的地方。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;master 节点组件&lt;/strong&gt;：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;kube-api-server&lt;/strong&gt;：集群管理统一访问入口，提供 RESTful API，实现认证、授权、准入控制；是其他组件数据交互的枢纽，&lt;strong&gt;只有它能直接操作 etcd&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;kube-controller-manager&lt;/strong&gt;：各种控制器的管理者（replication、node、deployment、endpoint 等控制器），是集群自动化功能的核心；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;kube-scheduler&lt;/strong&gt;：负责集群资源调度，通过过滤和打分算法为待调度 Pod 选出最佳 node 并绑定；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;etcd&lt;/strong&gt;：分布式键值存储数据库，保存集群状态数据（Pod、Service 等资源对象）；通常部署奇数个实例（大规模集群 5 或 7 个节点），可与 master 分离部署。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;node 节点组件&lt;/strong&gt;：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;kubelet&lt;/strong&gt;：每个 node 上的服务进程，连接 master 和 node 的桥梁，维护 Pod 和容器的生命周期（创建、更新、销毁），并向 api-server 注册和定期汇报节点资源；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;kube-proxy&lt;/strong&gt;：实现 Pod 网络代理和四层负载均衡，监听 service/endpoint 变化，维护路由规则，将访问 Service 的请求转发到后端 Pod；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;container-runtime&lt;/strong&gt;：容器运行时环境（docker、containerd 等），新版本 K8s 已弃用 docker，1.24+ 使用 containerd。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Kubelet 的功能、作用是什么？（重点）&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;kubelet 部署在每个 node 节点上，主要有 4 个功能：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;节点管理&lt;/strong&gt;：启动时向 api-server 注册，定期汇报节点状态和资源使用情况，供 master 调度参考；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pod 管理&lt;/strong&gt;：维护节点上 Pod 生命周期，监听到 master 下发的任务后，通过 &lt;strong&gt;CRI（容器运行时接口）&lt;/strong&gt; 调用容器运行时（containerd 等）创建、更新、删除容器；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;容器健康检查&lt;/strong&gt;：支持启动探针、存活探针、就绪探针，定期调用探测容器状态，失败时按重启策略处理；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Metrics Server 资源监控&lt;/strong&gt;：通过 Metrics Server 获取节点和容器的 CPU、内存、文件系统、网络等资源使用情况。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Kube-api-server 的端口是多少？各个 Pod 是如何访问 Kube-api-server 的？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;kube-api-server 端口为 &lt;strong&gt;8080（HTTP）和 6443（HTTPS）&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;以 kubeadm 安装为例：kube-system 命名空间中有 kube-apiserver Pod，绑定 master 主机 IP 和 6443 端口；&lt;/li&gt;
&lt;li&gt;default 命名空间存在名为 &lt;code&gt;kubernetes&lt;/code&gt; 的 Service，对外暴露 443 端口、目标端口 6443，IP 是 ClusterIP 地址池第一个地址；&lt;/li&gt;
&lt;li&gt;该 Service 未指定标签选择器，对应的 &lt;strong&gt;endpoint 是手动创建的&lt;/strong&gt;，代理到 master 节点的 6443 端口；&lt;/li&gt;
&lt;li&gt;Pod 创建后注入环境变量，获得 kubernetes 服务的 IP 和 443 端口，请求该 Service 即转发到 kube-api-server。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;K8s 中命名空间的作用是什么？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;namespace 是 K8s 的重要资源，主要作用是&lt;strong&gt;多套环境的资源隔离&lt;/strong&gt;（多租户隔离）；&lt;/li&gt;
&lt;li&gt;集群内部资源分配到不同 namespace，形成逻辑隔离，方便不同资源隔离使用和管理；&lt;/li&gt;
&lt;li&gt;不同命名空间可以存在&lt;strong&gt;同名资源&lt;/strong&gt;，namespace 为资源提供作用域；&lt;/li&gt;
&lt;li&gt;结合授权机制可将不同 namespace 交给不同租户管理；结合**资源配额（ResourceQuota）**限制租户可占用的 CPU、内存等资源。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Pod 资源控制器类型有哪些？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Deployments&lt;/strong&gt;：为 Pod 和 ReplicaSet 提供声明式的更新能力；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ReplicaSet&lt;/strong&gt;：维护一组在任何时候都处于运行状态的 Pod 副本稳定集合，保证给定数量、完全相同 Pod 的可用性；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;StatefulSets&lt;/strong&gt;：管理基于相同容器规约的一组 Pod，但为每个 Pod 维护&lt;strong&gt;有粘性的 ID&lt;/strong&gt;（不能相互替换，永久不变）；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DaemonSet&lt;/strong&gt;：确保全部（或某些）节点上运行一个 Pod 副本，节点加入自动新增，删除 DaemonSet 删除其创建的所有 Pod；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Job&lt;/strong&gt;：创建一个或多个 Pod 并重试执行，直到指定数量成功终止，任务结束；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CronJob&lt;/strong&gt;：类似 crontab，按 Cron 格式周期性调度执行 Job；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ReplicationController&lt;/strong&gt;：确保任何时候有特定数量的 Pod 副本运行（已被 ReplicaSet 取代）。&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;六、 监控与运维实践&lt;a href=&quot;#六-监控与运维实践&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Zabbix 常用术语你知道几个？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;主机（host）&lt;/strong&gt;：要监控的网络设备，由 IP 或 DNS 名称指定；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;主机组（hostgroup）&lt;/strong&gt;：主机的逻辑容器，可包含主机和模板，常用于分配监控权限；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;监控项（item）&lt;/strong&gt;：特定监控指标的数据，是 Zabbix 数据收集的核心，每个 item 由 key 标识；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;触发器（trigger）&lt;/strong&gt;：评估某监控项数据是否在合理范围内的表达式（阈值），超阈值时状态从 OK 变为 Problem；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;事件（event）&lt;/strong&gt;：触发值得关注的事情（触发器状态转变、agent 自动注册等）；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;动作（action）&lt;/strong&gt;：对特定事件预定义的处理方法（发送通知、执行操作）；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;报警升级（escalation）&lt;/strong&gt;：发送警报或执行远程命令的自定义方案（如每 5 分钟发一次、共发 5 次）；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;媒介（media）&lt;/strong&gt;：发送通知的手段或通道（Email、Jabber、SMS 等）；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;通知（notification）&lt;/strong&gt;：通过选定媒介发送的事件信息；远程命令（remote command）：在特定条件下自动执行的预定义命令；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;模板（template）&lt;/strong&gt;：快速定义被监控主机的预设条目集合（item、trigger、graph 等），可直接链接到主机；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;应用（application）&lt;/strong&gt;：一组 item 的集合；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Web 场景（web scenario）&lt;/strong&gt;：用于检测 Web 站点可用性的一个或多个 HTTP 请求；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;前端（frontend）&lt;/strong&gt;：Zabbix 的 Web 接口。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;虚拟化技术有哪些表现形式？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;完全虚拟化技术&lt;/strong&gt;：通过软件实现对操作系统资源的再分配，比较成熟，代表：KVM、ESXi、Hyper-V；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;半虚拟化技术&lt;/strong&gt;：通过修改已有系统代码形成新的可虚拟化系统，调用硬件资源安装多个系统，速度相对较高，代表：Xen；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;轻量级虚拟化&lt;/strong&gt;：介于完全虚拟化和半虚拟化之间，代表：Docker。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;你是怎么备份数据的，包括数据库备份？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;生产环境下，应用数据和数据库数据在部署时就有&lt;strong&gt;主从架构或集群&lt;/strong&gt;，这本身就是数据的热备份；&lt;/li&gt;
&lt;li&gt;冷备份：用专门一台服务器作为备份服务器，用 &lt;strong&gt;rsync + inotify&lt;/strong&gt; 配合计划任务实现数据冷备份；&lt;/li&gt;
&lt;li&gt;发版包备份：正常情况下有发布服务器，每次发版都会保存好发版包。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;修改线上业务配置文件流程？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;先告知运维经理和业务相关开发人员；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在&lt;strong&gt;测试环境&lt;/strong&gt;测试，并备份之前的配置文件；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;测试无误后修改生产环境配置；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;观察生产环境是否正常、是否有报警；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;完成配置文件更改。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;网站登录缓慢是什么原因？&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;网络带宽&lt;/strong&gt;：常见瓶颈；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;服务器性能&lt;/strong&gt;：CPU、硬盘、内存配置过低，服务器负载不起来；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;开发代码&lt;/strong&gt;：如 MySQL 语句未优化，导致数据库读写耗费时间；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数据库瓶颈&lt;/strong&gt;：数据量增长后，数据库读写压力变大。&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;如果我们的网站打开速度慢，请说下你的排查思路？&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;参考答案：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;判断原因&lt;/strong&gt;：首先以用户身份访问网站，判断问题出在自身原因还是用户原因。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;用户原因&lt;/strong&gt;：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;用户带宽不足；&lt;/li&gt;
&lt;li&gt;浏览器版本低、插件太多；&lt;/li&gt;
&lt;li&gt;电脑中毒、垃圾文件过多；&lt;/li&gt;
&lt;li&gt;用户主机性能和操作系统。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;网站自身原因&lt;/strong&gt;：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;网络带宽；&lt;/li&gt;
&lt;li&gt;服务器 CPU、硬盘、内存过低，负载过高；&lt;/li&gt;
&lt;li&gt;代码不完善（MySQL 语句未优化导致读写耗时）；&lt;/li&gt;
&lt;li&gt;未开启图片压缩；&lt;/li&gt;
&lt;li&gt;死连接过多、插件使用及 JS 文件调用频繁。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;解决思路&lt;/strong&gt;：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;检测服务器速度&lt;/strong&gt;：&lt;code&gt;ping&lt;/code&gt; 查看连接时间和丢包率（1000 个包不丢最理想，一般好机房丢包率不超过 1%）；ping 值要均匀，最小最大值相差大说明路由不稳定；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;查看服务器性能&lt;/strong&gt;：&lt;code&gt;uptime&lt;/code&gt; 看 CPU 使用率、&lt;code&gt;free -m&lt;/code&gt; 看内存、&lt;code&gt;iostat&lt;/code&gt; 看磁盘 IO，定位大量占用资源的进程；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;分析访问特征&lt;/strong&gt;：查看访问最多的 URL 和 IP，恶意 IP 屏蔽，善意流量限流（可能是 CDN 回源量大）；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;对比同服务器其他网站&lt;/strong&gt;：看同一服务器上其他网站打开速度；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;检查线路互访&lt;/strong&gt;：电信/联通互访问题（如电信用户访问联通服务器），解决方法是使用双线或多线空间；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网站自身优化&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;优化图片，限制大小尺寸、降低质量、减少数量；&lt;/li&gt;
&lt;li&gt;限定图片格式（jpg、png、gif）；&lt;/li&gt;
&lt;li&gt;减少 HTTP 请求数（合并图片、合并 CSS 文件、去除不必要对象）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;</content:encoded></item><item><title>260811-北京力德</title><link>http://blog.cnylxs.xyz/posts/interview-260811-02/</link><guid isPermaLink="true">http://blog.cnylxs.xyz/posts/interview-260811-02/</guid><description>面试</description><pubDate>Tue, 11 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;ol&gt;
&lt;li&gt;liunx如何快速排除内存或者cpu占用过高问题？&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;先用top或者htop查看占用最高的应用&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;找到应用进程号，通过top -H -p 查看线程Id PID&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;如果是Java应用，打印堆栈信息 jstack &amp;lt;进程号&amp;gt; | grep -A 20 &amp;lt;线程号：16进制&amp;gt; 线程ID需要转为16进制&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;如何检测端口是否被占用&lt;br /&gt;
&lt;code&gt;lsof -i :[port]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;如何排查日志问题&lt;br /&gt;
&lt;code&gt;tail -f &amp;lt;文件名&amp;gt; | grep --color=always &quot;ERROR\|FATAL&quot;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;</content:encoded></item><item><title>K8S安装记录</title><link>http://blog.cnylxs.xyz/posts/study-02-K8S/</link><guid isPermaLink="true">http://blog.cnylxs.xyz/posts/study-02-K8S/</guid><description>K8S学习</description><pubDate>Tue, 11 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h1&gt;配置&lt;a href=&quot;#配置&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;master:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;rocky04 192.168.31.105 rocky04&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;nodes&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;rocky01 192.168.31.104 rocky01&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;rocky02 192.168.31.102 rocky02&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;rocky03 192.168.31.103 rocky03&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;问题&lt;a href=&quot;#问题&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;section&gt;&lt;h2&gt;1.k8s系统pods启动失败&lt;a href=&quot;#1k8s系统pods启动失败&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;k8s弃用docker改用ctr拉取镜像&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;1.20 版本（2020 年底）：宣布 dockershim 弃用，开始打印警告日志&lt;/li&gt;
&lt;li&gt;1.24 版本（2022 年 5 月）：正式从 kubelet 中移除 dockershim，这是关键分界点&lt;/li&gt;
&lt;li&gt;1.24 之后：默认推荐使用 containerd 或 CRI-O 作为容器运行时&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;基本上全是因为ctr拉取镜像超时，导致k8s的system pods启动超时。&lt;br /&gt;
k8s目前1.24版本及以后默认使用ctr拉取镜像，经实测，国内无论是修改镜像源还是直接拉取基本上都会超时无法拉取，&lt;br /&gt;
目前唯一解决方案是直接通过docker拉取，然后用docker save 保存为tar压缩包，然后再用ctr导入。&lt;br /&gt;
&lt;strong&gt;注意&lt;/strong&gt;&lt;br /&gt;
ctr导入镜像包后，如果拉取的不是官方镜像，基本上就会启动失败，因为k8s启动的时候默认是读取的官方镜像名称，需要通过ctr tag 把拉取的镜像重新命名&lt;/p&gt;&lt;p&gt;&lt;strong&gt;相关命令&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;kubectl get pods -n kube-system // 查看k8s系统pods 去掉kube-system就是查看pods&lt;/code&gt;
&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;/images/study/26081201.png&quot; alt=&quot;查看k8s系统pods&quot; /&gt;&lt;figcaption&gt;查看k8s系统pods&lt;/figcaption&gt;&lt;/figure&gt;&lt;br /&gt;
&lt;figure&gt;&lt;img src=&quot;/images/study/26081203.png&quot; alt=&quot;查看k8s的pods&quot; /&gt;&lt;figcaption&gt;查看k8s的pods&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;kubectl describe pod -n kube-system calico-node-hd466| grep -A 10 &quot;Events&quot;// 查看每个pod具体报错&lt;/code&gt;&lt;br /&gt;
&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;/images/study/26081202.png&quot; alt=&quot;查看每个pod具体报错&quot; /&gt;&lt;figcaption&gt;查看每个pod具体报错&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;docker save -o &amp;lt;压缩包名称&amp;gt; &amp;lt;镜像名称&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ctr -n k8s.io images import nginx.tar // ctr导入nginx的镜像&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ctr -n k8s.io images tag &amp;lt;原镜像&amp;gt; &amp;lt;新镜像&amp;gt; // ctr重新命名镜像&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ctr -n k8s.io images ls | grep &amp;lt;镜像名&amp;gt; // ctr查看镜像&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;hr /&gt;&lt;p&gt;260814更新：&lt;br /&gt;
经实测，在配置k8s新node节点的时候，只需要把yum的源改成清华的镜像源，再更新ctr的配置文件就能直接安装kubelet、kubeadm、kubectl等组件。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;2.新节点加入k8s集群&lt;a href=&quot;#2新节点加入k8s集群&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;k8s新nodes加入时，需要通过yum命令下载组件，下载前需要先配置yum的国内镜像源&lt;br /&gt;
&lt;code&gt;路径：/etc/yum.repos.d/kubernetes.repo&lt;/code&gt;&lt;br /&gt;
推荐配置清华源&lt;br /&gt;
&lt;a href=&quot;https://mirrors.tuna.tsinghua.edu.cn/help/kubernetes/&quot; target=&quot;_blank&quot;&gt;清华源&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;/images/study/26081401.png&quot; alt=&quot;yum配置文件&quot; /&gt;&lt;figcaption&gt;yum配置文件&lt;/figcaption&gt;&lt;/figure&gt;&lt;br /&gt;
&lt;figure&gt;&lt;img src=&quot;/images/study/26081402.png&quot; alt=&quot;清华源&quot; /&gt;&lt;figcaption&gt;清华源&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;重要提示&lt;/span&gt;&lt;br /&gt;
配置yum文件的时候一定要把版本改成安装的版本，否则是无法拉取成功的
&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;/images/study/26081403.png&quot; alt=&quot;重点提示&quot; /&gt;&lt;figcaption&gt;重点提示&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;导入命令&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;yum install -y kubelet-1.32.13 kubeadm-1.32.13 kubectl-1.32.13 --disableexcludes=kubernetes&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;配置的nginx测试集群打开方式&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;curl -L http://192.168.31.105:30502&lt;/code&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;总结&lt;a href=&quot;#总结&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;本次安装是依照教学视频+AI的方式进行安装，总共耗时估计为6个小时左右。得出以下结论：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;但凡是AI给的镜像源之类的链接，99%都是乱编的，根本拉不下来。&lt;/li&gt;
&lt;li&gt;在遇见ctr拉取超时的问题时，已经明确告诉AI多次，但是还是会给出乱编的镜像源让你去拉取，还是需要自己搜索解决方案&lt;/li&gt;
&lt;li&gt;在启动k8s的系统pods时，明明是因为缺少对应的镜像源导致启动失败，AI还是会给你虚假的镜像源让你重新拉取&lt;/li&gt;
&lt;li&gt;AI目前最好是只按照它给的思路，具体问题还是需要查日志来进行排查，而且报错日志发给AIAI多半也是乱编解决方案，本次安装大部分时间都浪费在用AI乱编的解决方案上了&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;</content:encoded></item><item><title>docker学习笔记</title><link>http://blog.cnylxs.xyz/posts/study-docker-02/</link><guid isPermaLink="true">http://blog.cnylxs.xyz/posts/study-docker-02/</guid><description>docker学习笔记</description><pubDate>Mon, 10 Aug 2026 18:44:30 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h1&gt;启动容器&lt;a href=&quot;#启动容器&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;docker run -d --name nginx_1.30 -p 8080:80 nginx:1.30&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;docker run -d --name nginx_new -p 8081:80 nginx:latest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;strong&gt;&lt;br /&gt;&lt;br /&gt;命令&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;&lt;br /&gt;&lt;br /&gt;作用&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;docker start &amp;lt;容器名&amp;gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;重启&lt;strong&gt;已存在&lt;/strong&gt;的容器（保留原状态）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;docker run &amp;lt;镜像名&amp;gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;基于镜像&lt;strong&gt;新建&lt;/strong&gt;一个容器&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;删除&lt;a href=&quot;#删除&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;docker rm  删除容器&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;docker rmi 删除镜像&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;创建自定义网络&lt;a href=&quot;#创建自定义网络&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;docker network create docker_test&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;创建临时容器&lt;a href=&quot;#创建临时容器&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;docker run --rm --network docker_test alpine:latest ping mysql-test&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;--rm 创建后删除&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;docker数据持久化&lt;a href=&quot;#docker数据持久化&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;通过宿主机的目录挂载到容器目录，把容器数据同步写入到宿主机，实现数据持久化&lt;/p&gt;&lt;hr /&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;Dockerfile 构建自主镜像&lt;a href=&quot;#dockerfile-构建自主镜像&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;section&gt;&lt;h2&gt;基础指令&lt;a href=&quot;#基础指令&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;1.FROM&lt;a href=&quot;#1from&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;指定基础镜像，第一条命令  &lt;code&gt;FROM alpine:latest&lt;/code&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2.WORKDIR&lt;a href=&quot;#2workdir&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;指定工作目录&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3.COPY&lt;a href=&quot;#3copy&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;拷贝文件/目录到镜像里面  &lt;code&gt;COPY dockerfile .&lt;/code&gt; 拷贝文件dockerfile 到当前目录&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4.ADD&lt;a href=&quot;#4add&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;负责文件到当前目录，支持URL和自动解压 &lt;code&gt;ADD app.tar.gz /app&lt;/code&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5.RUN&lt;a href=&quot;#5run&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在构建的时候执行命令  &lt;code&gt;RUN apt-get update&lt;/code&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;6.CMD&lt;a href=&quot;#6cmd&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;容器启动默认指令 &lt;code&gt;CMD echo &quot;hello world&quot; &lt;/code&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;7.ENTRYPOINT&lt;a href=&quot;#7entrypoint&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;容器启动时的入口点，不会被覆盖&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;网络和存储命令&lt;a href=&quot;#网络和存储命令&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;1.EXPOSE&lt;a href=&quot;#1expose&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;声明容器监听端口 &lt;code&gt;EXPOSE 8080&lt;/code&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2.VOLUME&lt;a href=&quot;#2volume&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;创建挂载点 &lt;code&gt;VOLUME [&quot;/data&quot;]&lt;/code&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;环节配置指令&lt;a href=&quot;#环节配置指令&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;1.ENV&lt;a href=&quot;#1env&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;设置环境变量 &lt;code&gt;ENV NAME1=$NAME &lt;/code&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2.AVG&lt;a href=&quot;#2avg&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;定义构建时代参数 &lt;code&gt;AVG NAME=&quot;docker&quot; &lt;/code&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;健康检查和Shell指令&lt;a href=&quot;#健康检查和shell指令&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;1.HEALTHCHECK&lt;a href=&quot;#1healthcheck&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;定义容器健康检查 &lt;code&gt;HEALTHCHECK CMD curl -f http://localhost/ &lt;/code&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2.SHELL&lt;a href=&quot;#2shell&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;指定默认shell命令 &lt;code&gt;SHELL [&quot;/bin/bash&quot;,&quot;-c&quot;] &lt;/code&gt;&lt;br /&gt;
指定默认shell命令 &lt;code&gt;SHELL [&quot;/bin/sh&quot;,&quot;-c&quot;] &lt;/code&gt;&lt;/p&gt;&lt;hr /&gt;&lt;/section&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;docker Compose 管理多容器&lt;a href=&quot;#docker-compose-管理多容器&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;section&gt;&lt;h2&gt;介绍&lt;a href=&quot;#介绍&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Docker Compose 是 Docker 官方推出的多容器编排工具，用于定义和运行由多个 Docker 容器组成的应用。它通过一个 YAML 配置文件（通常是 docker-compose.yml）来描述整个应用的组件（服务）、网络、卷等依赖关系，然后用一条命令启动/停止所有服务。&lt;br /&gt;
简单来说，Compose 解决了单机环境下多容器管理的痛点：手动一个个 docker run，也不用担心容器间的网络连接和依赖顺序。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;示例&lt;a href=&quot;#示例&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;// 该示例为pc上的nas配置的WordPress+mysql&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;services:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;wordpress:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;container_name: wordpress&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;image: wordpress:latest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;privileged: true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;restart: always&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;volumes:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- ./wordpress/data:/var/www/html&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;environment:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;WORDPRESS_DB_HOST: wordpressdb:3306&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;WORDPRESS_DB_NAME: wordpress&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;WORDPRESS_DB_USER: wordpress&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;WORDPRESS_DB_PASSWORD: 123456&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ports:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &quot;38010:80&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;networks:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- app-network&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;wordpressdb:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;image: mariadb:10.6&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;restart: always&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;volumes:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- ./mariadb/data:/var/lib/mysql&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;environment:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;MYSQL_ROOT_PASSWORD: rootpassword&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;MYSQL_DATABASE: wordpress&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;MYSQL_USER: wordpress&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;MYSQL_PASSWORD: 123456&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;ports:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- &quot;33308:3306&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;networks:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- app-network&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;networks:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;app-network:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;driver: bridge&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展开&lt;/span&gt;&lt;span&gt;收起&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;</content:encoded></item><item><title>家用pc配置相关</title><link>http://blog.cnylxs.xyz/posts/study-00-config/</link><guid isPermaLink="true">http://blog.cnylxs.xyz/posts/study-00-config/</guid><description>配置</description><pubDate>Mon, 10 Aug 2026 02:59:30 GMT</pubDate><content:encoded>本文已加密保护，请访问网站查看。</content:encoded></item><item><title>K8S学习记录</title><link>http://blog.cnylxs.xyz/posts/study-01-K8S/</link><guid isPermaLink="true">http://blog.cnylxs.xyz/posts/study-01-K8S/</guid><description>K8S学习</description><pubDate>Mon, 10 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h1&gt;简介&lt;a href=&quot;#简介&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Kubernetes（k8s）的工作原理是:&lt;br /&gt;
&lt;strong&gt;你向集群声明应用的期望状态（如部署几个副本、使用什么镜像），控制平面（Control Plane）中的 API Server 接收请求，Scheduler 负责将 Pod 调度到合适的工作节点，Controller Manager 持续监控实际状态并与期望状态比对，若发现偏差则自动调谐（如节点宕机后重新调度 Pod），各 Node 上的 Kubelet 负责执行指令并管理本节点的 Pod 生命周期，从而实现一个自愈、可弹性伸缩的容器编排系统。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;大规模部署分布式应用的平台
管理一系列的主机或者服务器：node 节点
每个节点运行若干个pod：pod：可部署的最小执行单元
由中心计算机进行管理：control plane 控制平面&lt;/p&gt;&lt;p&gt;如果容器过多，docker-compose管控还是不够，就需要引入k8s，所以k8s就是&lt;strong&gt;容器的调度中心&lt;/strong&gt;&lt;/p&gt;&lt;section&gt;&lt;h2&gt;传统部署的缺点&lt;a href=&quot;#传统部署的缺点&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;应用挂了无法自动重启&lt;/li&gt;
&lt;li&gt;访问量突增时无法快速扩容&lt;/li&gt;
&lt;li&gt;多台服务器部署复杂，环境不一致&lt;/li&gt;
&lt;li&gt;迁移。升级应用麻烦，容易出错&lt;/li&gt;
&lt;li&gt;资源利用效率低，服务器浪费严重&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;k8s解决了什么核心问题？&lt;a href=&quot;#k8s解决了什么核心问题&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;自动故障恢复&lt;br /&gt;
应用崩溃，服务器宕机，k8s会自动在其他节点重启容器&lt;/li&gt;
&lt;li&gt;自动缩扩容&lt;br /&gt;
根据访问压力，自动增加 / 减少实例数量，不用人工干预&lt;/li&gt;
&lt;li&gt;统一调度管理&lt;br /&gt;
多台服务器统一管理，就像管理一台机器一样方便&lt;/li&gt;
&lt;li&gt;服务自愈与高可用&lt;br /&gt;
自动检测健康状态，不健康就杀掉重建，保障服务稳定&lt;/li&gt;
&lt;li&gt;环境一致性&lt;br /&gt;
基于容器进行的开发，测试、生产环境完全一致&lt;/li&gt;
&lt;li&gt;滚动更新与回滚&lt;br /&gt;
&lt;strong&gt;升级应用不停机，出问题一键回滚，安全可靠&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;基础组件&lt;a href=&quot;#基础组件&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;k8s 核心组件：Pod / Service / Deployment&lt;/p&gt;&lt;section&gt;&lt;h2&gt;Pod&lt;a href=&quot;#pod&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;核心定义：&lt;/strong&gt;&lt;br /&gt;
k8s中&lt;strong&gt;最小的部署和调度单元&lt;/strong&gt;不是容器本身，而是容器的”包装”—一个pod里面可以放1个或者多个容器(通常只放一个)，这些容器共享同一网络、存储资源&lt;br /&gt;
&lt;strong&gt;要点：&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;k8s不会直接调度容器，只会调度pod(所有容器必须在pod里面才会被k8s调度)&lt;/li&gt;
&lt;li&gt;pod里面的容器“同生共死”，一个容器崩溃异常，k8s会直接重建整个pod&lt;/li&gt;
&lt;li&gt;每个pod有独立的ip地址，仅在k8s集群内部可用，外部无法直接访问&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;Service Pod的固定访问入口&lt;a href=&quot;#service-pod的固定访问入口&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;核心定义：&lt;/strong&gt;&lt;br /&gt;
解决Pod地址不固定的问题，为一个或多个的Pod提供固定的调用地址&lt;br /&gt;
&lt;strong&gt;要点：&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Service不运行应用，只转发请求&lt;/li&gt;
&lt;li&gt;Service地址固定，不擅长不变化&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;Deployment Pod的控制器&lt;a href=&quot;#deployment-pod的控制器&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;核心定义：&lt;/strong&gt;&lt;br /&gt;
管理Pod的控制器，负责Pod的&lt;strong&gt;创建、更新、扩容、回滚&lt;/strong&gt;
&lt;strong&gt;要点：&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Deployment不直接运行应用，只负责管理Pod，定义好Pod的数量、版本，Deployment会自动维持这个状态&lt;/li&gt;
&lt;li&gt;支持滚动更新，升级应用时，不停止旧Pod，先启动新Pod，再删除旧Pod&lt;/li&gt;
&lt;li&gt;支持回滚，可一键回滚到上一个版本&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h1&gt;k8s基本命令&lt;a href=&quot;#k8s基本命令&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;section&gt;&lt;h2&gt;基础格式&lt;a href=&quot;#基础格式&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;官方文档&lt;/strong&gt;&lt;br /&gt;
&lt;a href=&quot;https://kubernetes.io/docs/reference/kubectl/&quot; target=&quot;_blank&quot;&gt;https://kubernetes.io/docs/reference/kubectl/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;kubectl [命令][类型][名称][选项]&lt;/code&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;</content:encoded></item><item><title>docker学习计划</title><link>http://blog.cnylxs.xyz/posts/study-docker-01/</link><guid isPermaLink="true">http://blog.cnylxs.xyz/posts/study-docker-01/</guid><description>docker学习计划</description><pubDate>Sun, 09 Aug 2026 21:01:30 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h1&gt;🐳 Docker 从入门到生产运用 · 全流程学习计划&lt;a href=&quot;#-docker-从入门到生产运用--全流程学习计划&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;本计划分为 &lt;strong&gt;6 个阶段&lt;/strong&gt;，预计总时长 &lt;strong&gt;6~8 周&lt;/strong&gt;（每天投入 1~2 小时）。每个阶段包含核心知识点、实操任务和推荐资源。&lt;/p&gt;&lt;section&gt;&lt;h2&gt;📅 第一阶段：基础概念与安装（第 1 周）&lt;a href=&quot;#-第一阶段基础概念与安装第-1-周&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;目标&lt;a href=&quot;#目标&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;理解 Docker 是什么、为什么用、核心术语（镜像、容器、仓库、Dockerfile）。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;内容&lt;a href=&quot;#内容&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;虚拟化 vs 容器化&lt;/strong&gt;​&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;传统虚拟机与 Docker 的区别&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;容器轻量、快速、可移植的优势&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;安装与配置&lt;/strong&gt;​&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Windows/macOS/Linux 安装 Docker Desktop 或 Docker Engine&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;验证安装：&lt;code&gt;docker version&lt;/code&gt;, &lt;code&gt;docker info&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;设置镜像加速器（国内用户推荐阿里云/腾讯云加速）&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;第一个容器&lt;/strong&gt;​&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;docker run hello-world&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;docker run -it ubuntu bash&lt;/code&gt; 体验交互式容器&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;docker ps&lt;/code&gt;、&lt;code&gt;docker stop&lt;/code&gt;、&lt;code&gt;docker rm&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;实操任务&lt;a href=&quot;#实操任务&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;成功运行 nginx 容器并访问默认页面&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;学会拉取、列出、删除镜像（&lt;code&gt;docker pull&lt;/code&gt;, &lt;code&gt;docker images&lt;/code&gt;, &lt;code&gt;docker rmi&lt;/code&gt;）&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;推荐资源&lt;a href=&quot;#推荐资源&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.docker.com/get-started/&quot; target=&quot;_blank&quot;&gt;Docker 官方入门教程&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《Docker —— 从入门到实践》在线版&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;📅 第二阶段：镜像构建与 Dockerfile（第 2 周）&lt;a href=&quot;#-第二阶段镜像构建与-dockerfile第-2-周&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;目标&lt;a href=&quot;#目标-1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;掌握编写 Dockerfile 的方法，构建自定义镜像。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;内容&lt;a href=&quot;#内容-1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Dockerfile 指令详解&lt;/strong&gt;​&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;FROM&lt;/code&gt;, &lt;code&gt;RUN&lt;/code&gt;, &lt;code&gt;COPY&lt;/code&gt;, &lt;code&gt;ADD&lt;/code&gt;, &lt;code&gt;WORKDIR&lt;/code&gt;, &lt;code&gt;EXPOSE&lt;/code&gt;, &lt;code&gt;CMD&lt;/code&gt;, &lt;code&gt;ENTRYPOINT&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;多阶段构建（Multi-stage Build）优化镜像大小&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;构建与标签&lt;/strong&gt;​&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;docker build -t myapp:v1 .&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;给镜像打标签并推送到私有/公有仓库（Docker Hub, Harbor）&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;镜像层缓存原理&lt;/strong&gt;​&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;理解分层机制，优化构建速度&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;实操任务&lt;a href=&quot;#实操任务-1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;为简单的 Python Flask 应用编写 Dockerfile&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;构建镜像并运行，验证功能&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;将镜像推送至 Docker Hub&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;推荐资源&lt;a href=&quot;#推荐资源-1&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.docker.com/develop/develop-images/dockerfile_best-practices/&quot; target=&quot;_blank&quot;&gt;Dockerfile 最佳实践&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Play with Docker 在线实验室&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;📅 第三阶段：数据持久化与网络（第 3 周）&lt;a href=&quot;#-第三阶段数据持久化与网络第-3-周&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;目标&lt;a href=&quot;#目标-2&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;管理容器数据（卷、绑定挂载）和容器间通信。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;内容&lt;a href=&quot;#内容-2&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;数据持久化&lt;/strong&gt;​&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;VOLUME&lt;/code&gt; 指令与匿名卷&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;绑定挂载（Bind Mount）：&lt;code&gt;-v /host/path:/container/path&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;tmpfs&lt;/code&gt; 挂载临时内存存储&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;实战：MySQL 数据目录挂载到宿主机&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;网络模式&lt;/strong&gt;​&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;bridge（默认）、host、none、自定义网络&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;容器互联：&lt;code&gt;--link&lt;/code&gt;（已弃用）vs 自定义网络 DNS 解析&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;端口映射：&lt;code&gt;-p host_port:container_port&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;多容器协作&lt;/strong&gt;​&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;使用 &lt;code&gt;docker network create&lt;/code&gt; 创建独立网络&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;让两个容器（如 Web + DB）通过服务名互相访问&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;实操任务&lt;a href=&quot;#实操任务-2&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;部署 WordPress + MySQL 两个容器，实现数据持久化和网络互通&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;尝试备份/恢复挂载的数据卷&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;推荐资源&lt;a href=&quot;#推荐资源-2&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Docker 官方文档《Manage data in Docker》&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;实验：通过 &lt;code&gt;docker inspect&lt;/code&gt; 查看网络详情&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;📅 第四阶段：编排利器 Docker Compose（第 4 周）&lt;a href=&quot;#-第四阶段编排利器-docker-compose第-4-周&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;目标&lt;a href=&quot;#目标-3&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;用 YAML 文件定义和运行多容器应用。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;内容&lt;a href=&quot;#内容-3&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Compose 文件结构&lt;/strong&gt;​&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;version&lt;/code&gt;, &lt;code&gt;services&lt;/code&gt;, &lt;code&gt;networks&lt;/code&gt;, &lt;code&gt;volumes&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;环境变量与 &lt;code&gt;.env&lt;/code&gt; 文件&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;常用命令&lt;/strong&gt;​&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;docker-compose up -d&lt;/code&gt;（启动）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;docker-compose down&lt;/code&gt;（停止并清理）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;docker-compose logs&lt;/code&gt;, &lt;code&gt;ps&lt;/code&gt;, &lt;code&gt;exec&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;实战项目&lt;/strong&gt;​&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;将之前的 WordPress + MySQL 改写为 docker-compose.yml&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;添加 Redis 缓存、Nginx 反向代理&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;实操任务&lt;a href=&quot;#实操任务-3&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;搭建一个完整的 LEMP 栈（Linux + Nginx + MySQL + PHP）并用 Compose 管理&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;学会使用 &lt;code&gt;docker-compose scale&lt;/code&gt;（旧版本）或 replicas（Swarm 模式）&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;推荐资源&lt;a href=&quot;#推荐资源-3&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.docker.com/compose/compose-file/&quot; target=&quot;_blank&quot;&gt;官方 Compose 文件参考&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《Docker Compose 实战》博客系列&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;📅 第五阶段：生产环境必备技能（第 5~6 周）&lt;a href=&quot;#-第五阶段生产环境必备技能第-56-周&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;目标&lt;a href=&quot;#目标-4&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;安全加固、监控日志、资源限制、CI/CD 集成。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;内容&lt;a href=&quot;#内容-4&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;安全最佳实践&lt;/strong&gt;​&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;不使用 root 运行容器（USER 指令）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;只读根文件系统（&lt;code&gt;--read-only&lt;/code&gt;）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;限制内核能力（&lt;code&gt;--cap-drop ALL --cap-add ...&lt;/code&gt;）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;镜像漏洞扫描（Trivy, Clair）&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;资源限制&lt;/strong&gt;​&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;CPU：&lt;code&gt;--cpus&lt;/code&gt;, &lt;code&gt;--cpu-shares&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;内存：&lt;code&gt;-m&lt;/code&gt;, &lt;code&gt;--memory-reservation&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;磁盘 I/O：&lt;code&gt;--device-read-bps&lt;/code&gt;, &lt;code&gt;--write-bps&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;日志与监控&lt;/strong&gt;​&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;日志驱动：json-file, journald, fluentd&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用 &lt;code&gt;docker stats&lt;/code&gt; 实时查看资源&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;集成 Prometheus + cAdvisor 监控容器&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;健康检查与重启策略&lt;/strong&gt;​&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;HEALTHCHECK&lt;/code&gt; 指令&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;--restart always/on-failure/no&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;CI/CD 流水线&lt;/strong&gt;​&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;在 GitHub Actions / GitLab CI 中构建镜像&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;自动推送到仓库并部署到测试环境&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;实操任务&lt;a href=&quot;#实操任务-4&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;为生产环境编写安全的 Dockerfile（非 root、只读、最小镜像）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;配置资源限制并观察效果&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;搭建一套简单的 CI 流程：代码 push → 自动构建 → 单元测试 → 镜像推送&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;推荐资源&lt;a href=&quot;#推荐资源-4&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://cheatsheetseries.owasp.org/cheatsheets/Docker_Security_Cheat_Sheet.html&quot; target=&quot;_blank&quot;&gt;Docker Security Cheat Sheet&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《Docker in Production》电子书&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;📅 第六阶段：集群与容器编排（第 7~8 周）&lt;a href=&quot;#-第六阶段集群与容器编排第-78-周&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;目标&lt;a href=&quot;#目标-5&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;了解 Kubernetes 基础，以及 Docker Swarm 的使用。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;内容&lt;a href=&quot;#内容-5&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;**Docker Swarm（可选）**​&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;初始化 Swarm 集群（&lt;code&gt;docker swarm init&lt;/code&gt;）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;部署服务（&lt;code&gt;docker service create&lt;/code&gt;）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;滚动更新与回滚&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;**Kubernetes 入门（推荐重点）**​&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Pod、Deployment、Service、Ingress 概念&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用 Minikube 或 kind 搭建本地集群&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;将 docker-compose 应用迁移到 K8s（Kompose 工具）&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;生产运维要点&lt;/strong&gt;​&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;镜像仓库管理（Harbor, Nexus）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;配置中心与密钥管理（ConfigMap, Secret）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;蓝绿部署、金丝雀发布&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;实操任务&lt;a href=&quot;#实操任务-5&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;用 Docker Swarm 部署一个三节点服务（简单体验）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;用 Kubernetes 部署一个 Nginx 应用，暴露 Service 并实现负载均衡&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;学习 &lt;code&gt;kubectl&lt;/code&gt; 常用命令&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;推荐资源&lt;a href=&quot;#推荐资源-5&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Kubernetes 官方教程（&lt;a href=&quot;https://kubernetes.io/docs/tutorials/&quot; target=&quot;_blank&quot;&gt;kubernetes.io/docs/tutorials&lt;/a&gt;）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;《深入剖析 Kubernetes》（张磊）—— 适合进阶&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h2&gt;✅ 总结：学习路线图&lt;a href=&quot;#-总结学习路线图&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;基础 → 镜像构建 → 数据/网络 → Compose → 生产加固 → 编排&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;第1周     第2周       第3周       第4周      第5-6周     第7-8周&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;section&gt;&lt;h3&gt;每日习惯建议&lt;a href=&quot;#每日习惯建议&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;每天至少敲 3 条新命令&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;每周完成一个小项目（如部署个人博客、API 服务）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;遇到错误先查日志：&lt;code&gt;docker logs &amp;lt;container&amp;gt;&lt;/code&gt;，再 Google 错误信息&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;最终产出&lt;a href=&quot;#最终产出&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;学完后你应该能：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;独立编写 Dockerfile 并优化镜像大小&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;用 Compose 管理开发环境&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在生产环境中安全地运行容器（限制资源、监控日志）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;具备向 Kubernetes 迁移的基础知识&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;&lt;/section&gt;</content:encoded></item></channel></rss>