精选文章
从 Cloudflare 11.18 全局崩溃事件深度剖析:分布式系统中的容错哲学与配置管理实践
Vibe Coding 实战指南:与 AI 共创、保持流畅、持续成长
如何将你的身体恢复到最完美的状态
如何将你的身体恢复到最完美的状态,我会从五点来纠正你, 从体态、饮食、护肤、作息、运动,锻造属于你的完美状态。
形体篇
你觉得自己含胸驼背看起来没气质是因为自己的不良习惯吗?其实更大的问题是来自于你的情绪。每当你自卑、压力大、消极的时候,你的身体会处于一种保护性姿态,它会不断的加重你头前倾、圆肩驼背的问题。如何解决? 一、加强自己的自信心,不要见到人就低头含胸。 二、强化背部力量,调整呼吸方式, 三、减少负面情绪,不要消极生活,不要高压工作,这点是最重要的,你的身体离完美状态又近了一步。
在 macOS 上将 Chrome 缓存迁移至内存盘的终极指南
将 Google Chrome 的缓存目录迁移至内存盘(RAM Disk),是提升浏览器性能、减少磁盘 I/O 并延长 SSD 寿命的有效技巧。然而,在 macOS 上实现这一目标并非易事。这不仅是简单的路径修改,还需应对 Chromium 内核对文件系统持久性的验证、启动参数的传递限制以及通过 AppleScript 进行进程管理等技术挑战。
步骤一:创建并配置内存盘
我们推荐使用 tmpdisk 这款免费工具来创建内存盘,它能方便地在系统启动时自动挂载。
gRPC 技术浅析:原理、优势与实战
第一章:gRPC 简介与核心理念
在现代分布式系统和微服务架构中,服务间的通信效率、可靠性和可维护性至关重要。gRPC 作为一种现代化的通信框架,应运而生,旨在解决传统 RPC 技术的诸多局限性。
1.1 gRPC 的起源与演进
gRPC 的诞生并非偶然,它源于谷歌内部长达十余年的大规模实践。自 2001 年起,谷歌便开发并使用一个名为 “Stubby” 的通用 RPC 基础架构,用于连接其数据中心内部和跨数据中心的成千上万个微服务 。随着微服务架构的复杂性与日俱增,对一个更高效、更标准化的通信框架的需求也愈发迫切。
macOS Tahoe 26 Linux 容器初探
苹果在 macOS Tahoe 26 中引入了一项令人瞩目的新功能:原生 Linux 容器支持。这个名为 container 的工具让我们可以在 Mac 上直接运行 Linux 容器,而无需依赖 Docker Desktop 这样的第三方解决方案。
与传统的容器运行方式不同,苹果采用了"一容器一虚拟机"的独特架构,为每个容器提供独立的轻量级虚拟机环境。这种设计在安全性、隐私保护和性能方面都有显著优势。
Git Submodule 简明使用指南
Git Submodule(子模块)是一个强大的功能,它允许你将一个 Git 仓库作为另一个 Git 仓库的子目录。简单来说,就是将子仓库的特定版本嵌入到父仓库中,同时保持子仓库独立的版本控制。
这项功能在以下场景中特别有用:
- 项目依赖:当你的项目依赖于一个外部库或框架,而这个库本身也是一个 Git 仓库时
- 代码复用:当你有多个项目需要共享同一份代码(例如 UI 组件库)时
- 大型项目管理:将一个大型项目拆分成多个可独立维护的组件时
1. 添加子模块
使用 git submodule add 命令来添加子模块。你需要提供子模块的 Git 仓库 URL 和你希望在父仓库中存放它的路径。
Hugo 模板系统概述
Hugo 是一个以速度著称的静态网站生成器,其强大的主题(Theme)**系统是其核心魅力之一。一个好的主题不仅能让网站拥有美观的界面,更能通过其合理的**文件结构和查找机制,为开发者提供极大的灵活性和可维护性。本文将深入探讨 Hugo 主题的内部结构,并揭示其文件查找的奥秘。
Hugo 主题的“骨架”:约定优于配置
Hugo 主题的核心在于其遵循**约定优于配置(Convention over Configuration)**的原则。这意味着,虽然你不需要在配置文件中显式声明每个文件的用途,但将文件放置在特定的目录并赋予它们特定的名称,Hugo 就能自动识别并加载它们。这种机制大大简化了开发流程,同时保证了主题的规范性和可扩展性。
Kubernetes 二进制部署:从零搭建单 Master 集群
使用 kubeadm 部署 Kubernetes 集群很方便,但它隐藏了底层细节。通过二进制方式手动部署,可以深入理解每个组件的作用和协作方式。
本文在 etcd 集群 已部署的基础上,搭建单 Master 节点的 Kubernetes 集群。
架构概览
单 Master 架构中,Master 节点运行控制平面组件,Worker 节点运行工作负载:

核心组件
| 组件 | 运行位置 | 作用 |
|---|---|---|
| kube-apiserver | Master | 集群入口,所有操作的统一接口 |
| etcd | Master | 分布式键值存储,保存集群状态 |
| kube-controller-manager | Master | 控制循环,确保实际状态匹配期望状态 |
| kube-scheduler | Master | 将 Pod 调度到合适的 Node |
| kubelet | Worker | 管理 Pod 生命周期,汇报节点状态 |
| kube-proxy | Worker | 实现 Service 网络代理和负载均衡 |
组件协作流程
kubectl create deployment nginx --image=nginx
│
▼
kube-apiserver ──→ etcd(存储期望状态)
│
▼
controller-manager(创建 ReplicaSet → 创建 Pod)
│
▼
scheduler(选定 Node,写入 Pod.Spec.NodeName)
│
▼
kubelet(watch 到分配给自己的 Pod,拉起容器)
│
▼
kube-proxy(配置 iptables/IPVS 规则,实现 Service 访问)前置条件
| 条件 | 说明 |
|---|---|
| etcd 集群 | 已部署,参考 etcd 集群部署 |
| 操作系统 | Linux(本文以 Ubuntu 为例) |
| 容器运行时 | containerd 或 Docker 已安装,参考 Docker 入门 |
| 网络 | 节点间互通,关闭 swap |
关闭 swap
Kubernetes 默认要求关闭 swap:
ETCD安全高可用集群部署测试
以下是个人搭建etcd集群中的记录,首先使用这篇文章中介绍的脚本创建三个虚拟机,ubuntu-01、
ubuntu-02、ubuntu-03,在三台虚拟机中分别安装 etcd
sudo apt install etcd安装完成之后打开 /lib/systemd/system/etcd.service 这个service文件
[Unit]
Description=etcd - highly-available key value store
Documentation=https://etcd.io/docs
Documentation=man:etcd
After=network.target
Wants=network-online.target
[Service]
Environment=DAEMON_ARGS=
Environment=ETCD_NAME=%H
Environment=ETCD_DATA_DIR=/var/lib/etcd/default
EnvironmentFile=-/etc/default/%p
Type=notify
User=etcd
PermissionsStartOnly=true
#ExecStart=/bin/sh -c "GOMAXPROCS=$(nproc) /usr/bin/etcd $DAEMON_ARGS"
ExecStart=/usr/bin/etcd $DAEMON_ARGS
Restart=on-abnormal
#RestartSec=10s
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
Alias=etcd2.service这个是etcd的service文件,可以看到etcd的配置文件在/etc/defalut/目录中,名称应该是etcd,这个和传统的不一致,我们需要在/etc/etcd/目录中存放配置文件,有两种选择,修改这里的EnvironmentFile,或者把/etc/etcd目录中文件链接到 /etc/default 中,我这里选择第二种方式。
