Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。具有如下功能:自我修复、水平扩展、服务发现和负载均衡、自动发布和回滚、密钥和配置管理、存储编排、任务批量处理执行等。
学习网站
架构
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(副本控制器)
: 负责为系统中的每个副本控制器对象维护正确数量的PodEndpoints 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)
容器网络接口CNI(Container Network Interface)
容器存储接口CSI(Container Storage Interface)
CRI
容器运行时接口CRI(Container Runtime Interface)
是 kubelet 和容器运行时之间通信的主要协议,在 Kubernetes v1.5 引入。
- 作用:CRI 是插件接口,使 kubelet 能够使用各种遵循 CRI 的运行时,无需交叉重新编译
- 实现:CRI 是 kubernetes 定义的一组 gRPC 服务,kubelet 作为客户端,基于 gRPC 协议通过 socket 和容器运行时通信
- 组成部分
镜像服务(Image Service)
:通过远程调用管理镜像,包括下载、检查、删除镜像运行时服务(Runtime Service)
:用于管理容器的生命周期,以及与容器的交互
关于 OCI 相关内容,参考 开源容器标准 OCI 专题
容器运行时调用层级如下:
CNI
CSI
一些概念
- Pod 一组容器,k8s 调度的最小单元
- static Pod : k8s 服务
- K8S controller 管理的 Pod
- Label:key=value
- Label Selector
- K8S 中网络分类:
- 节点网络
- 集群网络(service)
- Pod 网路
- 同一 Pod 内多个容器间:lo 通信
- 各 Pod 之间通信实现
- 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 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图表,以确保其符合最佳实践