程序员必备的十大技能(进阶版)之云原生与容器化(二)

简介: 教程来源 https://qcycj.cn/ Kubernetes(K8s)是声明式容器编排的事实标准,采用“控制平面+工作节点”架构:控制平面含kube-apiserver(统一入口)、etcd(状态存储)、scheduler(智能调度)、controller-manager(状态调谐);工作节点由kubelet(Pod管家)、kube-proxy(网络代理)及容器运行时组成,协同实现自动化部署、弹性伸缩与高可用管理。

三、Kubernetes架构深度剖析

Kubernetes(K8s)是当前容器编排的事实标准,其设计哲学是声明式API + 控制器模式:用户只需声明期望状态,K8s控制器自动将实际状态收敛到期望状态。

3.1 K8s集群架构总览

┌─────────────────────────────────────────────────────────────────────────────┐
│                         Kubernetes 集群架构                                 │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  ┌─────────────────────────────────────────────────────────────────────┐   │
│  │                        控制平面 (Control Plane)                       │   │
│  │  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐              │   │
│  │  │kube-apiserver│  │   etcd       │  │kube-scheduler│              │   │
│  │  │  认证/授权    │  │  集群状态    │  │  Pod调度     │              │   │
│  │  │  API入口     │  │  存储        │  │              │              │   │
│  │  └──────────────┘  └──────────────┘  └──────────────┘              │   │
│  │  ┌──────────────────────────────────────────────────────────────┐  │   │
│  │  │           kube-controller-manager                             │  │   │
│  │  │  Node/Deployment/Service/Job Controller等多种控制器           │  │   │
│  │  └──────────────────────────────────────────────────────────────┘  │   │
│  └─────────────────────────────────────────────────────────────────────┘   │
│                                      │                                      │
│              ┌───────────────────────┼───────────────────────┐              │
│              │                       │                       │              │
│              ▼                       ▼                       ▼              │
│  ┌───────────────────┐  ┌───────────────────┐  ┌───────────────────┐       │
│  │     Node 1        │  │     Node 2        │  │     Node 3        │       │
│  │  ┌─────────────┐  │  │  ┌─────────────┐  │  │  ┌─────────────┐  │       │
│  │  │  kubelet    │  │  │  │  kubelet    │  │  │  │  kubelet    │  │       │
│  │  ├─────────────┤  │  │  ├─────────────┤  │  │  ├─────────────┤  │       │
│  │  │ kube-proxy  │  │  │  │ kube-proxy  │  │  │  │ kube-proxy  │  │       │
│  │  ├─────────────┤  │  │  ├─────────────┤  │  │  ├─────────────┤  │       │
│  │  │ container   │  │  │  │ container   │  │  │  │ container   │  │       │
│  │  │ runtime     │  │  │  │ runtime     │  │  │  │ runtime     │  │       │
│  │  ├─────────────┤  │  │  ├─────────────┤  │  │  ├─────────────┤  │       │
│  │  │   Pod A     │  │  │  │   Pod B     │  │  │  │   Pod C     │  │       │
│  │  │   Pod D     │  │  │  │   Pod E     │  │  │  │   Pod F     │  │       │
│  │  └─────────────┘  │  │  └─────────────┘  │  │  └─────────────┘  │       │
│  └───────────────────┘  └───────────────────┘  └───────────────────┘       │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

3.2 控制平面组件详解
kube-apiserver —— 集群的网关
kube-apiserver是K8s集群的唯一操作入口,所有组件都通过它进行通信。

# kube-apiserver的核心职责:
1. REST API服务: 提供增删改查接口
2. 认证与授权: 
   - 认证: X509证书、Bearer Token、OIDC
   - 授权: RBAC、ABAC、Webhook
3. 准入控制: Mutating/Validating Admission Webhook
4. 数据持久化: 唯一与etcd交互的组件

# 查看apiserver配置
kubectl get pod -n kube-system kube-apiserver-master -o yaml

etcd —— 集群的“事实来源”
etcd是一个高可用的分布式键值存储,保存所有集群状态数据。

# etcd数据查看(需要证书)
kubectl exec -n kube-system etcd-master -- sh -c \
  "ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
   --cacert=/etc/kubernetes/pki/etcd/ca.crt \
   --cert=/etc/kubernetes/pki/etcd/server.crt \
   --key=/etc/kubernetes/pki/etcd/server.key \
   get /registry/pods/default/nginx --prefix"

# etcd备份(灾难恢复必备)
ETCDCTL_API=3 etcdctl snapshot save snapshot.db

kube-scheduler —— Pod调度决策者
kube-scheduler负责将待调度的Pod分配到最优节点。

// 调度流程(伪代码)
func schedule(pod *Pod) (node string) {
    // 1. 过滤阶段:筛选满足条件的节点
    feasibleNodes := filterNodes(pod, allNodes)

    // 2. 打分阶段:为每个节点打分
    for _, node := range feasibleNodes {
        score := 0
        score += prioritizeByResourceUsage(pod, node)  // 资源均衡
        score += prioritizeByAffinity(pod, node)       // 亲和性
        score += prioritizeByImageLocality(pod, node)  // 镜像本地性
        nodeScores[node] = score
    }

    // 3. 选择最优节点
    return selectBestNode(nodeScores)
}

调度策略配置(可通过调度器配置扩展):

apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: custom-scheduler
  plugins:
    score:
      enabled:
      - name: NodeResourcesBalancedAllocation  # 资源均衡优先
        weight: 2
      - name: ImageLocality                      # 镜像本地性优先
        weight: 1

kube-controller-manager —— 状态维持者
控制器管理器运行所有控制器,每个控制器负责一种资源的状态维护。

// 控制器通用模式(Reconcile Loop)
for {
    desiredState := getDesiredState()  // 用户声明
    currentState := getCurrentState()  // 当前实际状态

    if desiredState != currentState {
        // 执行调谐动作
        reconcile(desiredState, currentState)
    }

    time.Sleep(resyncPeriod)
}

// 核心控制器列表:
// - DeploymentController: 管理Deployment生命周期
// - ReplicaSetController: 维护Pod副本数
// - NodeController: 监控节点健康状态
// - EndpointController: 维护Service与Pod映射
// - ServiceAccountController: 管理ServiceAccount

3.3 工作节点组件详解
kubelet —— 节点上的Pod管家
kubelet是每个节点上的主要代理,负责Pod生命周期管理。

// kubelet核心循环
func (kl *Kubelet) syncLoop() {
    for {
        // 1. 监听Pod变更(来自apiserver)
        select {
        case pod := <-kl.podUpdates:
            kl.syncPod(pod)  // 同步Pod状态
        case <-kl.healthCheck:
            kl.updateNodeStatus()  // 上报节点状态
        }
    }
}

func (kl *Kubelet) syncPod(pod *Pod) {
    // 1. 创建Pod的Sandbox容器(pause容器)
    sandboxID := kl.createPodSandbox(pod)

    // 2. 拉取容器镜像
    for _, container := range pod.Spec.Containers {
        kl.pullImage(container.Image)
    }

    // 3. 创建业务容器
    for _, container := range pod.Spec.Containers {
        kl.createContainer(container)
        kl.startContainer(container)
    }

    // 4. 启动健康检查探针
    kl.startProbes(pod)
}

kube-proxy —— 网络代理与服务发现
kube-proxy负责维护节点网络规则,实现Service的负载均衡。

三种代理模式:

# 1. userspace模式(旧版,性能差)
# 2. iptables模式(默认,性能较好)
# 3. ipvs模式(推荐,支持更多调度算法)

# ipvs模式支持以下调度算法:
# - rr: 轮询
# - lc: 最少连接
# - dh: 目标哈希
# - sh: 源哈希
# - sed: 最短期望延迟
# - nq: 永不排队

# 启用ipvs模式
kubectl edit configmap -n kube-system kube-proxy
# 修改 mode: "ipvs"

来源:
https://fndvx.cn/

相关文章
|
8天前
|
人工智能 开发工具 iOS开发
Claude Code 新手完全上手指南:安装、国产模型配置与常用命令全解
Claude Code 是一款运行在终端环境中的 AI 编程助手,能够直接在命令行中完成代码生成、项目分析、文件修改、命令执行、Git 管理等开发全流程工作。它最大的特点是**任务驱动、终端原生、轻量高效、多模型兼容**,无需图形界面、不依赖 IDE 插件,能够深度融入开发者日常工作流。
2967 7
|
10天前
|
Shell API 开发工具
Claude Code 快速上手指南(新手友好版)
AI编程工具卷疯啦!Claude Code凭借任务驱动+终端原生的特性,成了开发者的效率搭子。本文从安装、登录、切换国产模型到常用命令,手把手带新手快速上手,全程避坑,30分钟独立用起来。
3068 20
|
23天前
|
人工智能 JSON 供应链
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
LucianaiB分享零成本畅用JVS Claw教程(学生认证享7个月使用权),并开源GeoMind项目——将JVS改造为科研与产业地理情报可视化AI助手,支持飞书文档解析、地理编码与腾讯地图可视化,助力产业关系图谱构建。
23567 15
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
|
4天前
|
人工智能 Linux BI
国内用 Claude Code 终于不用翻墙了:一行命令搞定,自动接 DeepSeek
JeecgBoot AI专题研究 一键脚本:Claude Code + JeecgBoot Skills + DeepSeek 全平台接入 一行命令装好 Claude Code + JeecgBoot Skills + DeepSeek 接入,无需翻墙使用 Claude Code,支持 Wind
1953 3
国内用 Claude Code 终于不用翻墙了:一行命令搞定,自动接 DeepSeek
|
10天前
|
人工智能 JSON BI
DeepSeek V4-Pro 接入 Claude Code 完全实战:体验、测试与关键避坑指南
Claude Code 作为当前主流的 AI 编程辅助工具,凭借强大的代码理解、工程执行与自动化能力深受开发者喜爱,但原生模型的使用成本相对较高。为了在保持能力的同时进一步降低开销,不少开发者开始寻找兼容度高、价格更友好的替代模型。DeepSeek V4 系列的发布带来了新的选择,该系列包含 V4-Pro 与 V4-Flash 两款模型,并提供了与 Anthropic 完全兼容的 API 接口,理论上只需简单修改配置,即可让 Claude Code 无缝切换为 DeepSeek 引擎。
2460 3
|
8天前
|
人工智能 安全 开发工具
Claude Code 官方工作原理与使用指南
Claude Code 不是传统代码补全工具,而是 Anthropic 推出的终端 AI 代理,具备代理循环、双驱动架构(模型+工具)、全局项目感知、6 种权限模式等核心能力,本文基于官方文档系统解析其工作原理与高效使用技巧。
1339 0
|
8天前
|
存储 Linux iOS开发
【2026最新】MarkText中文版Markdown编辑器使用图解(附安装包)
MarkText是一款免费开源、跨平台的Markdown编辑器,主打所见即所得实时预览,支持Windows/macOS/Linux。内置数学公式、流程图、代码高亮、多主题及PDF/HTML导出,是Typora的轻量免费替代首选。(239字)