Kubernetes(K8s) 作为当前最知名的容器编排工具,称得上是云原生(Cloud Native)时代的“操作系统”,熟悉和使用它是研发、运维、产品等的必备技能。
K8s遵循非常传统的客户端/服务端的架构模式,客户端可以通过 RESTful 接口或者直接使用 kubectl 与 Kubernetes 集群进行通信,这两者在实际上并没有太多的区别,后者也只是对 Kubernetes 提供的 RESTful API 进行封装并提供出来。每一个 Kubernetes 集群都是由一组 Master 节点和一系列的 Worker 节点组成,其中 Master 节点主要负责存储集群的状态并为 Kubernetes 对象分配和调度资源。
Minikube 适用于轻量级、单节点本地集群环境搭建,新手学习可以选用;Kubeadm 适用于完整 K8s master/node 多节点集群环境搭建,Kind 的特点是将 K8s 部署到 Docker 容器中,K3S 适用于轻量级、IoT 等微型设备上搭建集群环境。
在 K8s 中,可以把资源对象分为两类:Workloads(工作负载)、Controllers(控制器)。Workloads 主要包含:Pod, Deployment, StatefulSet, Service, ConfigMap, Secret, DaemonSet, Job/CronJob, HPA, Namespace, PV/PVC, Node 等,主要是将各类型资源按需求和特性分类。Controllers 主要包含:Node Controller, Replication Controller, Namespace Controller, ServiceAccount Controller, Service Controller, Endpoint Controller 等,主要作用是在资源自动化控制中,将各类型资源真实值(Actual)调谐(Reconcile)到期望值(Expect)。
K8s 提供了不同维度的集群管理机制,包括 Node 封锁(cordon)、解除封锁(uncordon)、驱逐(drain)、PDB 主动驱逐保护、资源使用量控制(requests/limits)、Metrics Server 监控采集、Log、Audit 审计等方面。集群管理员还可以使用前面提到的 Affinity, Taints/Tolerations, Label, Annotation 等机制,满足集群多样化管理需求。
目前,K8s已经充分涉足互联网、AI、区块链、金融等行业,可以预想的是将来会有越来越多的行业开始使用 Kubernetes,并且各行业实践会更深入。