Skip to main content

记一次符合 Google Coding Style 的 Bash 脚本重构

· 8 min read

最近我在思考这样一个问题,顺便看一下gpt对这个问题的解释。搜索发现:

团队写代码,为什么要遵循coding guideline?

  1. 一致性:编码准则确保整个团队的代码风格和格式是一致的,这使得团队成员之间更易于交流和协作。这也使得代码更容易维护和更新,因为其他人可以更轻松地理解代码。

  2. 可读性:编码准则有助于提高代码的可读性。通过对代码进行格式化和注释,代码会更易于阅读和理解,从而减少错误和缺陷,并提高代码的质量。

  3. 可维护性:编码准则有助于提高代码的可维护性。通过使用一致的格式和风格,团队成员可以更轻松地理解代码,并进行更快速的故障排除和修复。

  4. 代码质量:编码准则有助于提高代码的质量。通过要求团队成员编写可读性高、可维护性强的代码,编码准则可以确保代码更加健壮、可靠和安全。这也有助于减少代码缺陷和错误,提高代码的可靠性和可用性。

  5. 代码重用:编码准则有助于提高代码的重用性。通过编写符合标准的代码,团队成员可以更容易地将代码重用在其他项目中,从而提高生产力和效率。

SkyPilot:构建在多云之上的 ML 和数据科学,可节约 3 倍以上成本

· 11 min read

作者:Zongheng Yang(在加州大学伯克利分校研发 SkyPilot)

整理:高现起

导读:用于 ML 和数据科学的云计算已经比较困难,如果你想要通过成本优化削减成本,你的整体成本包括资源和人力,可能会不降反增。不想在机器闲置时停止?因为这样你可能需要反复的启停,并且重新配置环境或者准备数据。想要通过使用抢占实例降低成本?解决抢占实例的调度问题也可能会花上几周时间。如何很好的利用地区之间的巨大价格差异,或者不同云厂商之间更大的价格差异来降低成本?

如果云上有一个简单、统一的 ML 和数据科学接口,具有成本效益、容错性、多区域和多云,是不是会更好?今天就给大家介绍一个项目,会从以下几个方面展开:

  • SkyPilot 项目介绍
  • SkyPilot 工作原理
  • SkyPilot 使用场景
  • 为什么多云成为新常态?

以下为详细内容。

Cloudpods容器化经验分享

· 27 min read

背景介绍

Cloudpods是一个开源的多云混合云管理平台。Cloudpods首先是一个私有云云平台,具备将计算节点使用开源QEMU/KVM虚拟化技术虚拟出虚拟机,实现私有云的功能。其次,Cloudpods能够纳管其他的云平台,包括主流私有云和公有云,实现云管的功能。Cloudpods的目标是帮助用户基于本地基础设置以及已有云基础设置,构建一个统一融合的云上之云,达到降低复杂度,提高管理效率的效果。Cloudpods从3.0开始全面拥抱Kubernetes,基于Kubernetes部署运行云平台的服务组件,采用Kubernetes Operator,基于Kubernetes集群自动化部署服务,实现了云平台的服务的容器化分布式部署。本文总结了Cloudpods在过去3年云平台底层容器化改造的经验。

目前,将Kubernetes作为IAAS平台的底层服务管理平台是一个趋势,例如OpenStack的Kolla项目,VMware的Tanzu,以及基于Kubernetes的虚拟化方案KubeVirt。Cloudpods顺应此趋势,早在2019年下半年开始基于Kubernetes构建Cloudpods的服务组件基础设施。理论上,Cloudpods站在了巨人的肩膀上。有了Kubernetes的加持,我们基于Operator管理CRD(Custom Resource Definition)机制做到了更优雅的服务自动化部署,符合IaC(Infrastructure as code)实践的服务升级和回滚,服务的自动高可用部署等等。但在实际效果上,我们基于Kubernetes,获得了一些便利,但也遇到了不少未曾预料到的问题。本文介绍自从2019年3.0容器化改造以来,因为引入Kubernetes遇到的问题,我们的一些解决方案,以及将来的规划。

Cloudpods Golang实践

· 21 min read
Jian Qiu
Cloudpods maintainer

Cloudpods是完全自研的一套云平台,Golang是该平台的主要后端开发语言。本文介绍我们在平台开发迭代过程中关于Golang的经验以及在Golang上积累的框架和库,包括积累的Golang工具库,以及基于这些工具库实现的开发框架。

背景介绍

Cloudpods从2017年开始迭代开发。当时企业的IT环境已经不仅仅是本地的虚拟机以及裸金属,不少企业已经逐步采纳多云。所以Cloudpods平台作为新一代的云平台,需要不仅能管理本地IT环境中的虚拟机和裸金属,还能管理其他的云平台的资源,特别是公有云。实现所有的资源在一个平台上统一运维,操作,起到降低运维复杂度并提高企业IT运维效率的目的。

为了实现一个统一的多云平台,我们采用了最适合开发云原生应用的 Golang作为后端开发语言。前端则采用Vue框架。整个平台基于微服务框架。服务之间的认证鉴权基于OpenStack Keystone的框架(我们用Golang重新实现了Keystone)。

天空计算——云计算的下一个时代?

· 13 min read

背景介绍

根据加州大学伯克利分校的两位杰出计算机科学教授Ion Stoica和 Scott Shenker 的说法,我们即将从云计算时代过渡到“天空计算”时代。

顾名思义,天空计算是云平台之上的一层——其目标是实现云之间的互操作性。

Stoica 教授曾正确预测云计算的未来,早在 2009 年 2 月,他和伯克利的一群学者发表了一篇关于当时新兴的云行业的有影响力的论文。

当时,亚马逊网络服务刚刚成立几年,谷歌唯一的云产品是 App Engine,微软的 Azure 尚未正式发布。2009 年的论文得出的结论是,“梦想已久的计算作为一种实用工具的愿景终于出现了。”

尽管云计算确实在 2010 年代从根本上改变了 IT 行业以及应用程序的构建和部署方式,但也存在一个明显的问题——云计算并没有像互联网或网络那样成为一种公用事业。

到 2021 年,没有一个单一的底层云平台具有一套任何人都可以使用的开放标准。取而代之的是,云计算已经演变成一系列在很大程度上彼此不兼容的专有平台:亚马逊网络服务(AWS)、微软 Azure、谷歌云等。因此 Stoica 教授的论文中出现了“一个更加商品化的云计算版本,称之为天空计算”的愿景。

Cloudpods + Rook + Ceph 轻松实现云原生的超融合私有云

· 16 min read
Jian Qiu
Cloudpods maintainer

背景介绍

  • Cloudpods: 是我们开源的多云管理平台,运行在 Kubernetes 之上,里面包含一个完整的私有云实现。
  • Rook: 是一个分布式存储编排系统,目的是在 Kubernetes 上提供存储解决方案,本身不提供存储,而是在 Kubernetes 和存储系统之间提供适配层,简化存储系统的部署和维护工作。其支持的 Ceph 存储为 Stable 生产可用的状态。
  • Ceph: 是开源的分布式存储系统,主要功能包含 RBD 块存储以及 CephFS 分布式文件系统存储。

Cloudpods 服务以容器化的方式运行在 Kubernetes 集群之上,按照 安装部署 文档部署完 Cloudpods 之后,环境就有了一个完整的 Kubernetes 集群。

但 Cloudpods 内置私有云虚拟机使用的是本地存储,本文主要介绍使用 Rook 在 Cloudpods Kubernetes 集群里面的计算节点上部署 Ceph 集群,然后把 Rook 管理的 Ceph 集群暴露出来对接 Cloudpods 的私有云虚拟机。

Cloudpods 内置私有云提供虚拟化功能, Rook 管理的 Ceph 提供分布式存储,并且这些服务都是容器化,基于 Kubernetes 运行的。Cloudpods 运行虚拟机的节点也叫计算节点,计算节点也是 Kubernetes 的 Node,只要计算节点上有独立的裸盘,就可以使用 Rook 把 Ceph 部署到计算节点上,把这些技术结合起来可以轻松实现一个云原生的超融合私有云。

用Calico网络策略设置主机node防火墙规则

· 3 min read
Jian Qiu
Cloudpods maintainer

Cloudpods的服务运行在一个Kubernetes集群之上,该Kubernets集群的网络方案采用了Calico。因此运行Cloudpods服务的节点的iptables规则被Calico接管。这就导致我们在Cloudpods服务节点上配置的防火墙规则会被Calico配置的iptables规则覆盖,导致防火墙规则不生效。本文介绍如何使用Calico的HostEndpoint和GlobalNetworkPolicy来设置主机节点的防火墙规则。

使用 Cgroups 限制 Kubernetes Pod 进程数

· 14 min read

Kubernetes 里面的 Pod 资源是最小的计算单元,抽象了一组(一个或多个)容器。容器也是 Linux 系统上的进程,但基于 Namespace 和 Cgroups(Control groups) 等技术实现了不同程度的隔离。 简单来说 Namespace 可以让每个进程有独立的 PID, IPC 和网络空间。Cgroups 可以控制进程的资源占用,比如 CPU ,内存和允许的最大进程数等等。

今天主要介绍如何通过 Cgroups 里面的 pids 控制器限制 Kubernetes Pod 容器的最大进程数量。

使用Linux vfio将Nvidia GPU透传给QEMU虚拟机

· 10 min read

Linux 上虚拟机 GPU 透传需要使用 vfio 的方式。主要是因为在 vfio 方式下对虚拟设备的权限和 DMA 隔离上做的更好。但是这么做也有个缺点,这个物理设备在主机和其他虚拟机都不能使用了。

qemu 直接使用物理设备本身命令行是很简单的,关键在于事先在主机上对系统、内核和物理设备的一些配置。

单纯从 qemu 的命令行来看,其实和普通虚拟机启动就差了最后那个 -device 的选项。这个选项也比较容易理解,就是把主机上的设备 0000:00:01.0 传给了虚拟机使用。

Cloudpods负载均衡的功能介绍

· 23 min read

作者: 周有松

今天的内容会从以下几个方面展开:

  • 负载均衡产品简介。主要介绍负载均衡作为一个云上产品,它的功能模型是怎样的,日常使用中会遇到的业务词汇
  • 负载均衡的功能与典型应用场景。这部分主要结合业务词汇,对负载均衡服务中常见的一些功能选项进行介绍,并举例介绍一些典型的应用场景
  • 最后,我们做一下总结,讨论一下负载均衡产品相比传统方式的优点

面向未来的 IT 基础设施管理架构——融合云(Unified IaaS)

· 22 min read
Jian Qiu
Cloudpods maintainer

随着数字化时代的到来,IT系统已成为人类社会正常运转不可或缺的组成部分。不远的未来,智能制造,5G和人工智能等技术将成为推动生产力发展的重要引擎,人类社会将面临前所未有的全面彻底的数字化浪潮。IT基础设施作为IT系统运行的平台和载体,是实现数字化的基石。在这场数字化浪潮中,企业必须积极拥抱云计算技术,采用符合技术发展趋势、面向未来的IT基础构架,才能在未来的竞争中赢得先机。