JFrog如何在生产环境玩转Kubernetes?

Kubernetes(简称:K8s)是开源的容器编排系统,它已成为云原生应用事实上的标准,更是云原生架构、部署和管理方式发展的关键推动力。企业正在使用Kubernetes创建由微服务和无服务器功能组成的现代架构,这些架构可以大规模无缝地扩展。

现在,Kubernetes处于Gartner炒作周期的顶端。在未来的几年中,将有越来越多的企业必须认识到Kubernetes的优劣势,从而正确有效地使用它。

Kubernetes为何受追捧?

Kubernetes解决了企业中的实际问题。它提供了企业所需的整个工具生态系统;包括网络、计算、内存分配,负载均衡,对象存储和调度等。

基础架构作为数据

使用YAML文件可以在Kubernetes中毫不费力地表示所需的资源。在YAML文件中定义所有内容后,可以选择在版本控制下(例如Git)对其进行管理。同样,从可伸缩性的角度来看,这很容易,因为可以在YAML文件中轻松更改和更新所有内容。

可扩展性

拥有大量资源,例如statefulset,configmap,secrets,cron作业等。用户可以根据需要添加更多类型。

不断的演进

在过去的几年中,Kubernetes每年都会发布3或4个主要版本,其中包含许多新功能和更改,而且从未放慢演进的速度。

生态

Kubernetes拥有强大健康的社区生态,它得到了云原生计算基金会的支持,而且它是CNCF第一个毕业的项目。KubeCon是全球最大的开源活动之一,吸引了众多开源爱好者。从2019年开始的GitHub年度调查显示,Kubernetes是贡献者排名前十的开源项目之一。根据StackOverFlow所做的年度调查,在过去两年中,Kubernetes成为开发者,以及Linux和Docker喜爱的平台之一。

为什么选择Kubernetes?

轻松创建运行环境

开发者以及生产人员都需要高速创建用于日常工作的环境。使用Kubernetes可以轻松实现这一点。

更好的集成性

如果开发者想要建立一个环境来测试其分支与其他应用程序的版本。过去,他们必须设置虚拟机,安装和设置网络配置等,这需要大量时间。现在Kubernetes可轻松实现。

更好地利用资源

在Kubernetes中,可以在CPU和内存较少的情况下启动应用程序,并根据消耗量增加特定的限制。它使管理员可以轻松管理资源并节省大量成本。

将容器投入生产

开发环境必须尽可能地类似于生产环境。在Docker上运行应用程序是不错的选择,但Docker需要Kubernetes这样的容器编排平台。

与供应商无关的相同API

由于企业需要在主要的云提供商上部署所有产品,因此企业需要提供一个API,而Kubernetes则通过单个API在供应商之上提供了抽象层。

自动缩放和自动修复应用程序

根据情况进行相应扩展和修复的能力是Kubernetes的一大特色。

Kubernetes的安全

在生产环境中运行容器,需要大量的精力和计算。它要求解决如容错,弹性伸缩,滚动部署和服务发现之类的问题。这就是Kubernetes作为容器编排的用武之地。当然还有其他编排平台能选择,但Kubernetes获得了主要云提供商的支持。

Kubernetes,容器化和微服务趋势带来了新的安全挑战。Kubernetes Pod可以很容易地在所有基础架构类中分布,默认情况下会导致Pod之间的内部流量增加。这也意味着安全问题,而Kubernetes的攻击面通常更大。而且,Kubernetes的高度动态,且短暂的环境无法与旧版安全工具完美融合。

JFrog生产环境中使用Kubernetes的背景

不同的企业可能面临不同的挑战,我们一起来看看JFrog的使用案例。JFrog的DevOps工程师描述了Kubernetes在JFrog的应用过程。

在过去两年中,JFrog着手在Kubernetes的三个大型公有云(AWS,GCP和Azure)上部署和管理JFrog SaaS应用程序。这个过程,JFrog收获了很多有益和重要的经验教训。

为了轻松管理Kubernetes上的应用程序部署,JFrog使用了Helm。Helm是用于管理Kubernetes软件包的工具,Helm图表有助于定义,安装和升级Kubernetes应用程序。JFrog在Helm中心发布并维护其所有产品的官方Helm图表,以供其客户,社区和其SaaS解决方案使用。

JFrog如何在其内部环境中使用Kubernetes?

出于开发目的,JFrog具有CI/CD流程,可在Kubernetes上安装JFrog产品。根据需要,开发人员可以启动此过程并指定要安装的分支版本,而无需应用程序主版本或分支版本。部署过程使用JFrog官方Helm图表,结果是一个隔离的Kubernetes命名空间,上面安装了所有应用程序。

为了进行登陆和试生产,他们拥有多个托管集群,每个云供应商至少一个集群,并且它们正在运行JFrog产品安装的完整CI/CD流程,以及Kubernetes基础架构和工具,以便在运行之前测试并发布错误。升级他们的生产环境。

JFrog研究了在AWS,GCP和Azure上自我管理Kubernetes集群的各种选项。JFrog发现,最简单、直接的方法是使用由云供应商EKS,GKE和AKS提供的托管Kubernetes解决方案。

JFrog了解到,独自管理集群需要大量JFrog没有的资源和技能,并且JFrog需要更好地专注于自身真正擅长的事情。JFrog使用相同的API在不同地区的EKS,GKE和AKS上运行生产环境。

如今,JFrog的新客户部署是自助服务和完全自动化的流程,无需DevOps工程师的干预。可以在几分钟之内在任何受支持的云区域上使用这个环境。

在生产中使用Kubernetes,JFrog仅使用一个或两个命令,一切都在其按部就班的运行,并且具有应用程序的自动修复和自动缩放功能,这充分释放了开发人员的生产效率。

但是,JFrog也认识到,这个过程并不是想象的那么平滑。在生产中使用Kubernetes时,这是必须经历的过程。JFrog团队在使用Kubernetes之后吸取了哪些经验教训?

1.可见性

由于Kubernetes的复杂性,了解系统中正在发生的事情很重要。不再需要SSH到服务器并“获取日志”。开发人员不需要kubectl访问权限即可调试其应用程序。

2.开发=分期=生产

开发和生产环境,功能和性能问题之间的差异仅在生产中发现。为了最大程度地减少环境之间的差异,最好创建类似于生产的环境以减少生产中断的风险。确保在所有环境中使用相同的Helm图表也很重要。

3.知道极限

需要学习和了解应用程序在资源使用,内存、CPU、数据库等方面的工作方式,以及应用程序所需的一切,以便以最小的力量有效地执行和运行。

4.容器优先级和容器服务质量

Kubernetes在调度和清除集群上的工作负载时会使用几条数据。当无法正确设置这些参数,工作负载停机以及重大的总体群集运行状况问题时,可能会出现性能问题。资源请求和限制是需要考虑的最明显的设置。同样,必须全面考虑Pod的生命周期。

JFrog总结的注意事项

你的应用是CPU还是内存密集型?

你的应用程序出现在另一个节点上有多容易?

选项:

对重要的应用程序有更高的pod优先级

Pod QoS(服务质量)

Guaranteed(requests = limits)

Burstable(已设置一些资源)

Best effort(未设置资源)

5.零停机升级

无论出于任何原因,都应努力将服务的停机时间减至最少。应用程序版本升级是应该能够随时运行的功能。使应用程序在具有多个负载均衡的Pod的高可用性模式下运行,消除了在升级环境时发生停机的风险。使用Kubernetes,可以选择进行滚动更新,因此在特定时间只有一个Pod即将进行升级,而其他Pod仍在运行,并且将依次升级。

6.安全性

JFrog在日常任务中使用自己的几种工具。他们相信管理Docker镜像和Helm图表的最佳方法是使用Artifactory(Artifactory是JFrog的一个产品,用作二进制存储库管理器)。他们正在使用内部Artifactory服务器作为Docker存储库和Helm存储库。在部署过程中,部署所需的一切都从Artifactory获取,因此他们可以完全控制开发和生产Kubernetes集群中正在运行的内容的可见性。最重要的是,X-ray运行并扫描存储在该Artifactory中的所有第三方Docker镜像。因此,只有经过扫描和批准的镜像才能进入Kubernetes集群。

7.持续学习

学习永远在路上。Kubernetes对于任何企业都是全新的。开发人员和运营团队必须学习它的工作原理和使用方法,学习互联网上的最佳实践和建议。应该始终继续调整基础架构,应用程序及其运行。同时,还需要时刻关注应用程序的情况。

你可能感兴趣的:(JFrog如何在生产环境玩转Kubernetes?)