一、Kubernetes能做什么
K8S全称Kubernetes,这个名字大家应该都不陌生,K8S是为容器服务而生、可移植的容器编排管理工具,时下越来越多的公司正在拥抱K8S,目前,它已经主导了云业务流程,推动了微服务架构等热门技术的普及和落地,那么称霸容器领域的K8S究竟有什么魔力呢?这里我们可以从他的强大功能说起:
1、服务发现和负载均衡
Kubernetes可以使用DNS名称或自己的IP地址公开容器,如果容器的流量很大,Kubernetes可以负载均衡并分配网络流量,从而使得部署应用更加稳定。
2、存储编排
Kubernetes允许自动挂载选择的存储系统,例如本地存储、公共云提供商等。
3、自动部署和回滚
可以使用Kubernetes描述已部署容器的所需状态,它可以以受控的速率将实际状态更改为所需状态。例如,可以自动化Kubernetes来为您的部署创建新容器,删除现有容器并将它们的所有资源用于新容器。
4、自动二进制打包
Kubernetes允许指定每个容器所需CPU和内存。当容器指定了资源请求时,Kubernetes 可以做出更好的决策来管理容器的资源。
5、自我修复
Kubernetes重新启动失败的容器、替换容器、杀死不响应用户定义的运行状况检查的容器,并且在准备好服务之前不将其通告给客户端。
6、密钥与配置管理
Kubernetes允许存储和管理敏感信息,例如密码、OAuth令牌和ssh密钥。可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。
二、K8S集群架构解读
Kubernetes管理一个高度可用的计算机集群,这些计算机连接起来作为一个单元工作。Kubernetes中的抽象允许将容器化应用程序部署到集群,而无需将它们专门绑定到某个计算机上。为了利用这种新的部署模型,应用程序需要以一种将它们与单个主机分离的方式集装箱化打包。与以往的部署模型相比,容器化应用程序更加灵活和可用,应用程序直接安装到特定计算机上,程序包深度集成到主机中。Kubernetes以更有效的方式自动化在集群范围内分发和调度应用容器。
K8S集群的核心概念如下:
kubernetes master
K8S集群管理/控制节点,主要通过4个组件实现集群资源调度/负载均衡/资源增删改查操作的唯一入口。
API Server
用来接收和处理其他组件发来的请求,是集群控制的入口进程。K8S里所有资源的增删改查操作请求的唯一接收和处理的集群所有资源/组件变化的信息都需要先通知api server和资源增删改查操作的信息都会持久化保存在ETCD中,避免这些信息丢失。API Server与ETCD/Node_kubelet/Node_kube-proxy/Client之间都是使用HTTP/HTTPS通信,为了避免数据被盗取,API Server和其他组件之间需要签发证书,启用CA认证,使用HTTPS通信。
ETCD
K8S集群的数据库,负责集群所有资源的状态信息的持久化存储,是key-value键值型数据库,类似redis,但功能更强大。
Controller mannager
控制器管理器
Scheduler资源调度器
主要负责选择最佳的node节点来新建pod。
Pod
K8S集群内的最小管理单元,一个pod内可以包含单个或多个容器和volume卷。一个pod只有一个ip地址,重启后发生变化。
Kubelet
运行在node节点上的管理代理服务,负责接收master API server发来的启动、停止、删除pod的请求,可以对node节点上的pods和容器、镜像、volume数据卷进行管理。
Kube-proxy
运行在node节点上的网络代理服务,是实现service服务的具体组件。提供集群内部不同pod组之间的网络通信服务和同一pod组/副本之间的负载均衡服务。
三、打造强大的Kubernetes集群
用友容器云平台整个技术方案选型采用bash shell+python+go+ansible,在Kubernenes集群调度框架上,使用haproxy+keepalived实现K8S集群的高可用。master的HA,实际是apiserver的HA。Master的其他组件controller-manager、scheduler都是可以通过etcd做选举(--leader-elect),而APIServer设计的就是可扩展性,所以做到APIServer很容易,只要前面加一个负载均衡轮训转发请求即可。产品使用keepalived服务创建一个vip,作为高可用集群的统一入口,实现了由vip →HA → apisever的负载均衡链路。
用友容器云平台的集群管理功能主要提供的服务是kubernetes托管服务,它主要包括两部分:一是技术平台自身运行的kubernetes集群,此部分称之为“系统集群”,二是外部客户自建的kubernetes集群,这部分叫做“外部集群”。
在集群管理中,现阶段可以部署两种集群类型,轻量版集群和标准版集群。集群管理包括创建、删除等集群的生命周期,同时包含命名空间的管理功能,通过命名空间实现资源配额和网络隔离等功能。
集群管理基础结构:
集群管理:提供kubernetes核心apiserver服务和应用程序工作负载,包括对集群的调度管理。
资源池:与集群进行绑定,为业务应用真正运行载体,用于运行应用程序的容器工作负载。
用友容器云平台旨在打造适配第三方业务应用的一体化云支撑,实现容器云平台及业务应用的一键安装部署,提供自动化运维和低门槛实施工具,运行环境的高可用方案和自动故障恢复的能力,并针对中台及业务应用提供详细的日志和监控解决方案,可进行异常诊断。
四、总结与展望
本文主要介绍了用友云原生技术平台—容器云模块关于Kubernetes集群的相关功能,时下,Kubernetes已经准备好不“仅仅”成为一个容器编排工具,在控制平面正在成为多云和混合云操作的主干,K8S提供的声明式API、控制循环和健壮的基于角色的访问控制模型已经进入了准备就绪阶段,它可以扩展到容器编排之外,以满足许多组织的混合、多云需求。这一演变将通过扩展Kubernetes API机制以控制平面为中心,允许定义、管理、生命周期和安全性与Kubernetes运行时无关的任何资源或基础设施。当然,用友容器云平台也在这个容器时代浪潮中不断摸索,快马加鞭的向前发展,未来用友容器云将继续集成Kubernetes集群的能力,打造用友高可用、稳定持久的技术底座,成为用友企业数智化转型的中流砥柱!