K8s Lab 把当前仓库文档整理成一个可阅读的网页站点

Repository Reading Site

节点标签与本机访问配置

标签是 K8s 中最重要的组织机制。通过标签你可以: | 前缀 | 含义 | 示例 | |------|------|------| | `topology.kubernetes.io/` | K8s 官方拓扑标签 | region, zone | | `node.kubernetes.io/` | 节点特性 | instance-type | | 无前缀

Markdownphase-0/05-node-labels-kubeconfig.md2026年4月9日 11:16

节点标签与本机访问配置

节点标签(Labels)

为什么要给节点打标签?

标签是 K8s 中最重要的组织机制。通过标签你可以:

  • 调度控制: "这个 Pod 只能跑在 HK 节点" → nodeSelector: topology.kubernetes.io/region: hk
  • 拓扑感知: "3 个副本分散到不同 zone" → topologySpreadConstraints
  • 资源分类: "GPU 任务只去有 GPU 的节点" → resources.limits: nvidia.com/gpu: 1

我们的标签方案

# Master (LA)
kubectl label node us480851516617a \
  topology.kubernetes.io/region=la \
  topology.kubernetes.io/zone=la-1

# Worker-1 (LA, 有 VPN)
kubectl label node us590068728056 \
  topology.kubernetes.io/region=la \
  topology.kubernetes.io/zone=la-1 \
  workload=general \
  vpn-active=true          # 标记有 VPN 运行,Ingress 避开

# Worker-2 (LA, 干净)
kubectl label node cp-3 \
  topology.kubernetes.io/region=la \
  topology.kubernetes.io/zone=la-2 \  # 不同 zone,模拟多可用区
  workload=general

# Worker-3 (HK, 小配置)
kubectl label node hk652699382121 \
  topology.kubernetes.io/region=hk \
  topology.kubernetes.io/zone=hk-1 \
  tier=edge                # 边缘节点

# Worker-4 (HK, 大磁盘)
kubectl label node wk-1 \
  topology.kubernetes.io/region=hk \
  topology.kubernetes.io/zone=hk-1 \
  tier=storage \
  storage=large            # NFS Server、监控存储放这里

标签命名规范

前缀 含义 示例
topology.kubernetes.io/ K8s 官方拓扑标签 region, zone
node.kubernetes.io/ 节点特性 instance-type
无前缀 自定义 workload, tier, storage

面试考点: topology.kubernetes.io/regiontopology.kubernetes.io/zone 是 K8s 标准标签,被 TopologySpreadConstraints 和云厂商的 CSI 驱动识别。自定义标签可以用任意 key。

Master 的 Taint

# kubeadm init 自动添加了这个 Taint:
# node-role.kubernetes.io/control-plane:NoSchedule
#
# 含义:除非 Pod 显式 tolerate 这个 taint,否则不会被调度到 Master
# 这是生产最佳实践——Master 只跑控制面组件

本机 kubectl 配置

kubeconfig 文件包含:

  • cluster — API Server 地址 + CA 证书
  • user — 认证凭据(证书或 token)
  • context — cluster + user 的组合
# 从 Master 拷贝到本机
scp root@107.148.176.193:/etc/kubernetes/admin.conf ~/.kube/config-k8s-lab

# API Server 地址改为公网 IP(WireGuard IP 本机不可达)
sed -i '' 's|https://10.10.0.1:6443|https://107.148.176.193:6443|' ~/.kube/config-k8s-lab

# 使用
export KUBECONFIG=~/.kube/config-k8s-lab
kubectl get nodes

安全提醒: admin.conf 是集群最高权限(cluster-admin)。生产环境中不应该把 admin 凭据分发给所有人,而是为每个用户/团队创建独立的 ServiceAccount + RBAC 权限。

最终集群状态

NAME              STATUS   ROLES           IP         位置   标签
us480851516617a   Ready    control-plane   10.10.0.1  LA     region=la, zone=la-1
us590068728056    Ready    worker          10.10.0.2  LA     region=la, zone=la-1, vpn-active
cp-3              Ready    worker          10.10.0.3  LA     region=la, zone=la-2
hk652699382121    Ready    worker          10.10.0.4  HK     region=hk, zone=hk-1, tier=edge
wk-1              Ready    worker          10.10.0.5  HK     region=hk, zone=hk-1, tier=storage

Phase 0 完成。集群已就绪,可以开始部署工作负载。

Phase 1: 核心基础