Kubernetes 上云总结
简介
Kubernetes 作为上云时不可或缺的应用,能够便捷地实现应用的容器化部署。它提供了一套有效的机制,用于应用的部署、规划、更新和维护。
本文主要介绍 Kubernetes 的基本概念。
为什么需要 Kubernetes?
应用部署的三大阶段
传统部署:
- 手动操作部署应用,直接将应用部署在目标机器上
- 由于资源不隔离,容易出现资源争抢、依赖冲突等问题
虚拟化部署:
- 利用 VMware 等虚拟化技术,将一个物理机虚拟化为多个机器
- 提升服务器资源利用率
- 提供一个完全隔离的环境(OS 级别)
容器化部署
- 可以理解为轻量级的虚拟化(进程级别),弥补了虚拟化技术过重的问题
- 由于直接共享主机硬件资源,只是通过系统提供的命名空间等技术实现资源隔离,损耗更小,且效率更高
Kubernetes 的特点
- 自我修复
- 弹性伸缩
- 自动部署和回滚
- 服务发现和负载均衡
- 机密和配置管理
- 存储编排
- 批处理
Kubernetes 介绍
Kubernetes 各种组件
Master
- Kube Api Server:处理来自用户和其它组件的 API 请求,验证请求并将配置数据持久化
- Kube Scheduler:将新创建的 Pod 分配到合适的节点上,考虑节点资源和约束等因素来进行调度决策
- Kube Controller Manager:包含多个控制器,用于监控集群状态的变化,并根据所需的状态进行调整
- Cloud Controller Manager:负责运行特定于云平台的控制器
- Etcd:分布式键值存储系统,用于保存集群的配置数据、状态和元数据
Node
- Kubelet:运行在每个节点上的代理,负责与 Master 节点通信,确保节点上运行的容器处于预期状态
- Kube Proxy:负责维护节点上的网络规则,为服务提供负载均衡和代理功能,确保服务间的网络通信
- Container Runtime:负责镜像管理以及 Pod 和容器的真正运行
一个 Command 的调用链
Kubernetes 各种资源
Kubernetes NameSpace Overview
Methods of Creating Resource:Yaml / Command
Pod
- 一个 Pod(容器组)包含了一个应用程序容器(某些情况下是多个容器)、存储资源、一个唯一的网络 IP 地址、以及一些确定容器该如何运行的选项
- "one-container-per-pod" 是 Kubernetes 中最常见的使用方式,可以认为 Pod 容器组是该容器的 Wrapper,Kubernetes 通过 Pod 管理容器,而不是直接管理容器
- Kubernetes Pod 中容器引擎有 Docker、Containerd 等
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 层负载)
- Service / Headless Service
Pod 的控制器
Stateless And Stateful ( ref:https://zhuanlan.zhihu.com/p/390440336?utm_id=0)
Deployment (Stateless)
- Kubernetes Replication Controller
ReplicaSet
- label / select:Pod 控制器依赖于 Pod,可以给 Pod 设置 label,然后给“控制器”设置对应的 selector,这就实现了对象的关联。
Create Replica Set / Pod
Upgrade / Rollback
Expand / Shrink
Pause / Resume
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
- Headless Service (Stable Network Sign)
DaemonSet
Job