写点什么

技术平台 & 应用开发专题月 | 如何打造强大的 K8S 集群

作者:用友YonBIP
  • 2022 年 3 月 08 日
  • 本文字数:2325 字

    阅读完需:约 8 分钟

技术平台&应用开发专题月 | 如何打造强大的K8S集群

一、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 集群的能力,打造用友高可用、稳定持久的技术底座,成为用友企业数智化转型的中流砥柱!


扩展阅读:




用户头像

用友YonBIP

关注

还未添加个人签名 2021.08.03 加入

还未添加个人简介

评论

发布
暂无评论
技术平台&应用开发专题月 | 如何打造强大的K8S集群_用友_用友YonBIP_InfoQ写作平台