K8s: Kubernetes

发布于:2025-07-01 ⋅ 阅读:(26) ⋅ 点赞:(0)

🧭 Kubernetes 是一个开源的 容器编排平台,用于自动化容器的部署、扩缩、负载均衡、健康检查和管理。

它的目标是:让大规模容器应用像自动驾驶一样运行。

假设你用 Docker 部署了 3 个服务实例,你可能会问:

  • 怎么自动重启挂掉的容器?
  • 怎么把用户请求分发到多个容器?
  • 怎么做到宕机自动拉起?资源不够时扩容?
  • 怎么更新应用不中断服务?

🧱 K8s 就是为了解决这些问题的!

文章目录

K8s

🌐 K8s 能做什么?

能力 简介
部署管理 一条 YAML 语句就能部署一个服务
服务发现与负载均衡 自动创建 ClusterIP、Service 供内部调用
滚动更新 无缝发布新版容器镜像,逐个替换,确保不中断
自我修复 容器挂了会自动拉起来,Pod 异常会被替换
水平扩缩容 根据 CPU/内存/自定义指标自动加减容器数量
配置与密钥管理 使用 ConfigMap 和 Secret 管理配置、安全凭据

🔧 核心组件(简化版)

组件 说明
Pod 最小的部署单元,通常一个 Pod 包含一个容器
Service 为 Pod 提供稳定的网络入口和负载均衡能力
Deployment 控制 Pod 的副本数、升级、回滚等
ReplicaSet Deployment 底层控制器,负责副本数量
Node 工作节点,运行容器的实际机器(物理或虚拟)
Kubelet 每个 Node 上的 agent,负责启动/管理 Pod
Controller Manager / Scheduler / API Server 控制中枢

🎬 操作流程:

  • 编写 Deployment 的 YAML 文件(定义镜像、端口、副本数)
  • kubectl apply -f xxx.yaml 部署
  • Kubernetes 创建 Pod,并确保它们始终运行
  • 可通过 Service 访问你的服务

🧪 示例 YAML

  • Deployment:定义你的后端服务运行镜像、端口、副本数
apiVersion: apps/v1		# 指定使用的 API 版本,apps/v1 是当前推荐的 Deployment 所属版本
kind: Deployment		# 声明这个资源是一个 Deployment(部署控制器)
metadata:				# 元数据部分,主要用于标识这个 Deployment 的名称
  name: my-backend		# 【Deployment 的名称,可以用于 kubectl 操作】,比如 kubectl get deployment my-backend
spec:					# Deployment 的核心配置 ( Specification 规格,说明)
  replicas: 3			# 期望运行的 Pod 【副本】数量,也就是部署 3 个后端服务实例
  
  selector:				# 选择器,用于匹配哪些 Pod 属于这个 Deployment 【控制的范围】
    matchLabels:
      app: my-backend	# 和下面 template.metadata.labels 对应,用来选出正确的 Pod
      
  template:				# 【Pod】 的模板,定义了 Pod 应该怎么创建
    metadata:
      labels:
        app: my-backend # 这个 label 会打到每个 Pod 上,供 selector 匹配
    spec:
      containers:
      - name: backend	# 容器名称(自定义),便于日志、调试等引用
        image: mycompany/my-backend:v1  # 容器镜像,通常是你构建好的后端服务镜像
        ports:
        - containerPort: 8080  			# 容器监听的端口(应用服务端口),供 Service 转发使用
  • Service:对外暴露这个服务,让别人能访问 8080 端口
apiVersion: v1
kind: Service
metadata:
  name: my-backend-service
spec:
  selector:
    app: my-backend
  ports:
  - port: 80            # Service 对外暴露的端口
    targetPort: 8080    # 实际 Pod 的端口
  type: ClusterIP       # 集群内部访问
Service 类型 特点 使用场景
ClusterIP 默认类型,仅集群内部访问 服务间调用
NodePort 在每个 Node 上开放端口访问 简单测试
LoadBalancer 云环境中通过云负载均衡器访问 线上发布
ExternalName 通过 DNS 别名指向外部服务 引用外部

网站公告

今日签到

点亮在社区的每一天
去签到