Kubernetes 专题

发布时间: 更新时间: 总字数:1633 阅读时间:4m 作者: 分享 复制网址

Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。具有如下功能:自我修复、水平扩展、服务发现和负载均衡、自动发布和回滚、密钥和配置管理、存储编排、任务批量处理执行等。

学习网站

架构

Kubernetes Components

Kubernetes Components
  • Master Node Components
    • etcd:key-values 数据库(Port:2379/2380)
    • kube-apiserver
    • kube-scheduler(port: 10251/10259)
    • kube-controller-manager
      • Node Controller(节点控制器): 负责在节点出现故障时进行通知和响应
      • Replication Controller(副本控制器): 负责为系统中的每个副本控制器对象维护正确数量的Pod
      • Endpoints Controller(端点控制器): 填充端点(Endpoints)对象(即加入 Service 与 Pod)
      • Service Account(服务帐户) & Token Controllers(令牌控制器): 为新的命名空间创建默认帐户和 API 访问令牌。
      • ReplicaSet
      • Deployment
        • HPA(Horizontal Pod Autoscaler) 自动扩缩容
      • StatefulSet
      • DaemonSet
      • Job
      • Cronjob
    • cloud-controller-manager(Aliyun/AWS/Gcloud)
  • Node Components
    • kubelet
    • kube-proxy(port: 10256/30080/30443)
    • container runtime, like docker
  • Addons:kubernetes 支持可插拔架构,方便扩展kubernetes的功能
    • DNS
    • CNI
      • flannel:网络配置
      • calico:网络配置、网络策略,基于 BGP 协议三层隧道
      • canel:calico + flannel 结合
    • Web UI(Dashboard)
    • Container Resource Monitoring
    • Cluster-level Logging
    • Ingress Controller

Kubernetes 有3个特定的功能接口:

  • 容器运行时接口CRI(Container Runtime Interface)
    • 符合 CRI 标准的容器方案均可接入
  • 容器网络接口CNI(Container Network Interface)
    • 符合 CNI 标准的网络方案均可接入
  • 容器存储接口CSI(Container Storage Interface)
    • 符合 CSI 标准的存储方案均可接入

CRI

容器运行时接口CRI(Container Runtime Interface) 是 kubelet 和容器运行时之间通信的主要协议,在 Kubernetes v1.5 引入。

  • 作用:CRI 是插件接口,使 kubelet 能够使用各种遵循 CRI 的运行时,无需交叉重新编译
  • 实现:CRI 是 kubernetes 定义的一组 gRPC 服务,kubelet 作为客户端,基于 gRPC 协议通过 socket 和容器运行时通信
  • 组成部分
    • 镜像服务(Image Service):通过远程调用管理镜像,包括下载、检查、删除镜像
    • 运行时服务(Runtime Service):用于管理容器的生命周期,以及与容器的交互

关于 OCI 相关内容,参考 开源容器标准 OCI 专题

容器运行时调用层级如下:

Kubernetes Runtime CIR and OCI

CNI

CSI

一些概念

  • Pod 一组容器,k8s 调度的最小单元
    • static Pod : k8s 服务
    • K8S controller 管理的 Pod
  • Label:key=value
  • Label Selector
  • K8S 中网络分类:
    • 节点网络
    • 集群网络(service)
    • Pod 网路
      • 同一 Pod 内多个容器间:lo 通信
      • 各 Pod 之间通信实现
        • 网桥通信
        • Overlay Network 叠加网络
      • Pod 与 Service 之间的通信:kube-proxy

API

和解循环(Reconciliation loop)

  • 客户端向kube-apiserver提交POST请求创建资源
    • json格式数据,若是yaml格式,先转化为json格式
    • 对象配置信息保存在etcd中,其定义的状态也称为“期望状态(spec)”
  • 控制器kube-apiserver负责将其创建为kubenetes集群上具体的活动对象(Live Object),并确保当前状态(status)和用户定义的期望状态相同
    • status由控制器自行维护,spce则由用户进行提交
    • 活动对象由于节点故障导致某一时刻状态与用户定义的spce不一致
    • 控制器通过和解循环(Reconciliation loop)不断监控相关对象状态,在对象的当前状态发生改变时,运行合适的操作,使其无限接近期望状态

kubernetes Reconciliation loop

管理资源对象

kubernetes Manager Resource

其他

  • Kubernetes v1.24 之起不再原生支持 Docker(之前 dockershim 在 k8s 中,现在移除),参考:什么是 dockershim
  • 容器运行时
  • KubeSphere Kubernetes UI 页面
  • KubeVirt 是 RedHat 开源的,以容器方式运行的虚拟机项目。KubeVirt 以 CRD 的形式将 VM 管理接口接入到 Kubernetes 中,通过一个 Pod 去使用 libvirt 管理 VM 一样,实现 Pod 于 VM 的一一对应,即一个 Pod 中可以运行 VM 同时也可以运行容器
  • open-policy-agent/gatekeeper Policy Controller for Kubernetes
  • cert-manager 在 Kubernetes 中自动配置和管理 TLS 证书
  • KEDA(Kubernetes-based Event Driven Autoscaler) 基于 Kubernetes 的事件驱动自动扩展器。它可以根据需要处理的事件数量来驱动 Kubernetes 中任何容器的扩展
  • Contour:一个开源的Kubernetes入口控制器,为Envoy边缘和服务代理提供控制平面,CNCF 孵化项目
  • KubeLinter 是一个静态分析工具,可以检查Kubernetes YAML文件和Helm图表,以确保其符合最佳实践
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数