K8s基本概念
Kubernetes也称为K8s,是用于自动部署、扩缩和管理容器化应用程序的开源管理系统。
1. K8s的历史背景
部署应用的历史演进:
2. k8s特点
2.1 服务发现和负载均衡
Kubernetes可以使用DNS名称或自己的IP地址来暴露容器。 如果进入容器的流量很大, Kubernetes可以负载均衡并分配网络流量,从而使部署稳定。
2.2 存储编排
Kubernetes允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。
2.3 自动部署和回滚
使用Kubernetes描述已部署容器的所需状态,它可以以受控的速率将实际状态更改为期望状态。 例如,你可以自动化Kubernetes来为你的部署创建新容器,删除现有容器并将它们的所有资源用于新容器。
2.4 自动完成装箱计算
你为Kubernetes提供许多节点组成的集群,在这个集群上运行容器化的任务。 你告诉Kubernetes每个容器需要多少CPU和内存(RAM)。 Kubernetes可以将这些容器按实际情况调度到你的节点上,以最佳方式利用你的资源。
2.5 自我修复
Kubernetes 将重新启动失败的容器、替换容器、杀死不响应用户定义的运行状况检查的容器, 并且在准备好服务之前不将其通告给客户端。
2.6 密钥与配置管理
Kubernetes允许你存储和管理敏感信息,例如密码、OAuth令牌和SSH密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。
2.7 批处理执行
Kubernetes还可以管理你的批处理和CI(持续集成)工作负载,如有需要,可以替换失败的容器。
2.8 水平扩缩
使用简单的命令、用户界面或根据CPU使用率自动对你的应用进行扩缩。
2.9 IPv4/IPv6双栈
为Pod(容器组)和Service(服务)分配IPv4和IPv6地址。
2.10 可扩展性设计
在不改变上游源代码的情况下为你的 Kubernetes 集群添加功能。
3. Kubernetes架构
Kubernetes 集群由一个控制平面(Control Plane)和一组用于运行容器化应用的工作机器(Node)组成, 每个集群至少需要一个工作节点来运行Pod。
工作节点托管着组成应用负载的Pod。控制平面管理集群中的工作节点和Pod。 在生产环境中,控制平面通常跨多台计算机运行,而一个集群通常运行多个节点,以提供容错和高可用。
3.1 控制平面组件
控制平面组件会为集群做出全局决策,比如资源的调度。 以及检测和响应集群事件,例如当不满足Deployment的replicas字段时,要启动新的Pod)。控制平面组件可以在集群中的任何节点上运行。
3.1.1 kube-apiserver
该组件负责公开Kubernetes API,负责处理接受请求的工作。 kube-apiserver是Kubernetes控制平面的对外交互的组件。
3.1.2 etcd
一致且高可用的键值存储(类似redis),用作Kubernetes所有集群数据的后台数据库。
3.1.3 kube-scheduler
kube-scheduler是控制平面的组件,负责监视新创建的、未指定运行节点(node)的Pods, 并选择节点来让Pod在上面运行。
3.1.4 kube-controller-manager
整个k8s集群的决策者,负责在节点出现故障时进行通知和响应,监测代表一次性任务的Job对象,然后创建Pod来运行这些任务直至完成,填充EndpointSlice对象(以提供 Service 和 Pod 之间的链接)。为新的命名空间创建默认的ServiceAccount。
3.2 节点组件
节点组件会在每个节点上运行,负责维护运行的Pod并提供Kubernetes运行时环境。
3.2.1 kubelet
kubelet会在集群中每个节点(node)上运行。 它保证容器(containers)都运行在Pod中。
3.2.2 kube-proxy
kube-proxy是集群中每个节点(node)上所运行的网络代理,能够使集群内部或外部的网络会话与Pod进行网络通信。