跳到主要内容

Kubernetes 上云总结

简介

Kubernetes 作为上云时不可或缺的应用,能够便捷地实现应用的容器化部署。它提供了一套有效的机制,用于应用的部署、规划、更新和维护。

本文主要介绍 Kubernetes 的基本概念。

为什么需要 Kubernetes?

应用部署的三大阶段

  • 传统部署:

    • 手动操作部署应用,直接将应用部署在目标机器上
    • 由于资源不隔离,容易出现资源争抢、依赖冲突等问题

    kubernetes_01.png

  • 虚拟化部署:

    • 利用 VMware 等虚拟化技术,将一个物理机虚拟化为多个机器
    • 提升服务器资源利用率
    • 提供一个完全隔离的环境(OS 级别)

    kubernetes_02.png

  • 容器化部署

    • 可以理解为轻量级的虚拟化(进程级别),弥补了虚拟化技术过重的问题
    • 由于直接共享主机硬件资源,只是通过系统提供的命名空间等技术实现资源隔离,损耗更小,且效率更高

    kubernetes_03.png

Kubernetes 的特点

  • 自我修复
  • 弹性伸缩
  • 自动部署和回滚
  • 服务发现和负载均衡
  • 机密和配置管理
  • 存储编排
  • 批处理

Kubernetes 介绍

Kubernetes 各种组件

  • Master

    • Kube Api Server:处理来自用户和其它组件的 API 请求,验证请求并将配置数据持久化
    • Kube Scheduler:将新创建的 Pod 分配到合适的节点上,考虑节点资源和约束等因素来进行调度决策
    • Kube Controller Manager:包含多个控制器,用于监控集群状态的变化,并根据所需的状态进行调整
    • Cloud Controller Manager:负责运行特定于云平台的控制器
    • Etcd:分布式键值存储系统,用于保存集群的配置数据、状态和元数据

    kubernetes_04.png

  • Node

    • Kubelet:运行在每个节点上的代理,负责与 Master 节点通信,确保节点上运行的容器处于预期状态
    • Kube Proxy:负责维护节点上的网络规则,为服务提供负载均衡和代理功能,确保服务间的网络通信
    • Container Runtime:负责镜像管理以及 Pod 和容器的真正运行

    kubernetes_05.png

  • 一个 Command 的调用链

    kubernetes_06.png kubernetes_07.png

Kubernetes 各种资源

  • Kubernetes NameSpace Overview

    kubernetes_08.png

  • Methods of Creating Resource:Yaml / Command

  • Pod

    • 一个 Pod(容器组)包含了一个应用程序容器(某些情况下是多个容器)、存储资源、一个唯一的网络 IP 地址、以及一些确定容器该如何运行的选项
    • "one-container-per-pod" 是 Kubernetes 中最常见的使用方式,可以认为 Pod 容器组是该容器的 Wrapper,Kubernetes 通过 Pod 管理容器,而不是直接管理容器
    • Kubernetes Pod 中容器引擎有 Docker、Containerd 等

    kubernetes_09.png

  • Volume

    • EmptyDir: 临时存储,Pod 销毁时删除
    • HostPath: 将主机中的一个实际目录挂载到 Pod 中,Pod 销毁时不会删除
    • NFS: 单独的网络存储系统
    • PV、PVC: PV 用于定义对应的资源,PVC 定义需要的资源,两者相互绑定,在 Pod 中就可以使用。Pod 销毁时,不会删除(根据销毁策略)
    • ConfigMap (based on etcd)
    • Secret (based on etcd)
    • Container Storage Interface
  • Network

    • Service / Headless Service
      • ClusterIP 作为内部的通信使用
      • NodePort 直接暴露给外部访问使用
    • Ingress (Nginx):将内部服务暴露给外部访问,相当于一个 Nginx(反向代理、负载均衡、7 层负载)

    kubernetes_10.png

Pod 的控制器

  • Stateless And Stateful ( ref:https://zhuanlan.zhihu.com/p/390440336?utm_id=0)

    kubernetes_11.png

  • Deployment (Stateless)

    • Kubernetes Replication Controller

    kubernetes_12.png

  • ReplicaSet

    • label / select:Pod 控制器依赖于 Pod,可以给 Pod 设置 label,然后给“控制器”设置对应的 selector,这就实现了对象的关联。
  • Create Replica Set / Pod

  • Upgrade / Rollback

  • Expand / Shrink

  • Pause / Resume

    kubernetes_13.png

  • StatefulSet (Stateful)

    • Headless Service (Stable Network Sign)
      • <pod name>.<service name>.<namespace name>.svc.cluster.local
    • VolumeClaimTemplate (Stable Volume)
    • Ordered Deplement / Expand
    • Ordered Shrink / Delete

    kubernetes_14.png

  • DaemonSet

  • Job