
记者:阿里云原生的读者朋友们大家好,今天应广大感兴趣朋友们的强烈要求,我们邀请来了「阿里云容器服务 ACK 发行版」做客我们的栏目,为大家讲述它的身世之谜,以及它是如何和伙伴们配合,让大家在自有基础设施上获得一致的最佳体验。所以走过路过千万不容错过哦~阿里云容器服务 ACK 发行版(简称 ACK Distro):大家好,我是阿里云容器服务 ACK 发行版,大家可以叫我的小名,ACK Distro,本次采访我将为大家详细讲解我的好伙伴:阿里巴巴的开源集群镜像技术 sealer,以及我是如何借助它来实现阿里云 ACK 服务的快速稳定交付。记者:在介绍伙伴之前,让我们先进入第一个版块吧。很多新来的读者还不清楚您是谁,及您的功能是什么,不妨先来做个自我介绍。ACK Distro:好的没问题。我是阿里针对异构 IaaS 环境发布的 Kubernetes 发行版,可以在异构 IaaS 部署私有化输出的容器服务 ACK 敏捷版,就是默认通过我生产、运维 Kubernetes 集群,大家在使用容器服务 ACK 敏捷版时,通过简单平台交互,即可实现 ACK Distro 集群的部署、升级、扩容等基础运维。我的伙伴们,即核心组件都通过了阿里云容器服务 ACK 和阿里巴巴集团核心业务场景在大规模生产环境中的验证和安全检查,它们都具有业界领先的安全性和可靠性。身为一个完整的 Kubernetes 发行版,我可以通过开源集群镜像技术 sealer 简单快速地交付到离线环境,帮助大家更简单灵活地管理集群。这些组件支持 X86和 ARM 硬件架构,并包含一个高性能的网络插件 hybridnet,它确保我可以在不同的基础设施上顺利运行。同时,我可以在阿里云容器服务 ACK 上被注册,达到一致的资源管理、策略遵从和流量控制,使大家可以获得与在线 ACK 集群相同的用户体验。另外,针对 hybridnet 的详细说明,我将在之后的采访中为大家披露,敬请期待哦~记者:您刚才提到可以通过 sealer 更简单灵活地管理集群,那它具体是什么以及核心原理是怎样的呢?ACK Distro:sealer 作为阿里巴巴开源的一款帮助分布式应用快速进行打包、交付和运行的解决方案,可以通过把分布式应用及其数据库中间件等依赖项一起打包来解决复杂应用的交付问题。sealer 构建出来的产物我们称之为集群镜像,集群镜像里内嵌了一套完整的 Kubernetes + 容器,它们双剑合璧,解决了分布式应用的交付一致性问题。


Docker 可以把单个操作系统(rootfs)和单机应用构建(docker build) 成一个容器镜像,并在单机上快速运行(docker run),而 sealer 则把 Kubernetes 看作整个集群的操作系统(cloud rootfs),并和其上部署的分布式应用构建(sealer build)成一个集群镜像,在集群上快速运行(sealer run)。与此同时,集群镜像也可以被推送(push)到公共镜像仓库(如 DockerHub、阿里云容器镜像服务等)中共享给其他用户使用。简单描述一下,大家可以通过像 Dockerfile 一样的文件来编写一个 Kubefile:FROM registry.cn-qingdao.aliyuncs.com/sealer-io/kubernetes:v1.19.9
RUN wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml
CMD kubectl apply -f recommended.yaml
复制
使用下面的 sealer build 命令就可以构建集群镜像:sealer build -t registry.cn-qingdao.aliyuncs.com/sealer-io/dashboard:latest .
复制
然后一个包含 dashboard 的集群镜像就可以被制作出来了,大家可以运行或者分享给别人。把制作好的集群镜像推送到镜像仓库,集群镜像仓库兼容 docker 镜像仓库标准,可以把集群镜像推送到 docker hub、阿里 ACR、或者 Harbor 中。sealer push registry.cn-qingdao.aliyuncs.com/sealer-io/dashboard:latest
复制
记者:也就是说,sealer 可以把 Kubernetes 及其上面部署的应用统一打包构建,且集群也可以被其他产品纳管。ACK Distro:是的,这就是我们追求的,希望为大家带来的一致体验。除此之外,sealer 的技术优势还有以下三点。集群镜像的存储也是通过写时复制的方式实现的。这样做有两个好处:我们可以把同一集群中不同的分布式软件打在不同层,以实现复用;还可以实现直接把集群镜像 push 到 docker 镜像仓库中。1)sealer build 的过程和 Docker build 还是有些区别的,sealer build 的强大之处在于不用起 Kubernetes 集群也可以执行 Kubefile 中定义的 apply 指令。2)sealer 拥有只要私有镜像仓库中有就直接拉取,没有的话才去公网拉取镜像的能力。

sealer 的集群高可用使用了轻量级的负载均衡 lvscare。相比其它负载均衡,lvscare 非常小仅有几百行代码,而且 lvscare 只做 ipvs 规则的守护,本身不做负载,非常稳定。直接在 node 上监听 apiserver,如果失效就移除对应的规则,重新运行之后会自动加回,相当于是一个专用的负载均衡器。

记者:确实名不虚传。那促成这次梦幻联动的原因是什么呢?或者说您为什么选择 sealer 作为合作伙伴呢?ACK Distro:我最重要的使命,是帮助用户在自己的基础设施上,简单、快速地使用阿里云容器服务 ACK,并获得一致体验。在这个目标下,能够在多种多样的基础设施上进行稳定交付的能力显得尤为重要,而 sealer 提供的能力非常好地解决了这个难题。首先,sealer 提供的标准化打包能力,省去了自定义一套打包逻辑的繁琐工作。其次,sealer 交付我的命令简单、用时短,大家通过一条命令便可以在几分钟内完成 ACK Distro 集群的部署,效率极高。并且,我可以直接享受到 sealer 对多样基础设施的支持能力。在运行时,sealer 提供的负载均衡、镜像缓存等技术,帮助我可以无需依赖公共云的能力,在离线环境就可以实现高可用,稳定运行。最后,基于 sealer 的 Kubefile,用户还可以将 ACK Distro 作为基础镜像,灵活定制自己的集群镜像,让我更好地赋能给广大开发者。如何通过 sealer 使用 ACK Distro
ACK Distro:了解到 sealer 对我的重要性后,大家可以按照下面几步,通过 sealer 获取 ACK Distro。wget -c http://sealer.oss-cn-beijing.aliyuncs.com/sealers/sealer-v0.5.2-linux-amd64.tar.gz
tar -xvf sealer-v0.5.2-linux-amd64.tar.gz -C /usr/bin
复制
sealer run
ack-agility-registry.cn-shanghai.cr.aliyuncs.com/ecp_builder/ackdistro:v1.20.4-ack-2 -m ${master_ip1}[,${master_ip2},${master_ip3}] [-n ${worker_ip1...}] -p password
复制
sealer join -m ${master_ip1}[,${master_ip2},${master_ip3}] [ -n ${worker_ip1}...]
复制
sealer delete -m ${master_ip1}[,${master_ip2},${master_ip3}] [ -n ${worker_ip1}...]
复制
如果大家仍有疑问,欢迎前往 ACK Distro 的官方 Github 库:https://github.com/AliyunContainerService/ackdistro以 Istio 为例,基于 ACK Distro 构建自己的集群镜像
记者:您刚才提到,用户可以将 ACK Distro 作为基础镜像,灵活定制自己的集群镜像,那具体应该怎样操作呢?ACK Distro:我以 Istio 为例,为大家说明一下吧~ 在原有的 ACK Distro 基础镜像上构建,编写 Kubefile
FROM ack-distro:1.1
RUN curl -L https://istio.io/downloadIstio | sh -
复制
sealer build -f Kubefile -m lite -t ack-distro-istio:v0.0.1 .
复制
得到 ack-distro-istio:0.0.1
部署 ack-distro-istio:0.0.1sealer run ack-distro-istio:v0.0.1 -m ${master_ip1}[,${master_ip2},${master_ip3}] [ -n ${worker_ip1}...] -p password
复制

通过以上 5 步,大家就可以基于 ACK Distro 构建出一个带 Istio 的 plus 版本的集群镜像,并且可以在多样的基础设施完成部署,这个新的集群镜像可以享用我的所有功能,包括交付能力。Istio 只是一个样例,相信大家可以看出,通过 Kubefile,您有充分的自由度来自定义您自己的镜像,只要您的组件可以部署在 Kubernetes 之上,那么就能够用此种方式去打包。ACK Distro:借助 sealer,我实现了阿里云容器服务 ACK 的快速稳定交付,在此基础上也可以实现绝大多数容器化的分布式软件的快速交付。同时 ACK Distro 的项目组成员也是 sealer 项目的重要参与者,两者相辅相成,致力于为广大的开发者们带来更好用的容器服务体验。记者:感谢您的细心讲解,我们第一弹深度访谈到这里就要跟大家说再见了,期待您下次的精彩专访。
https://www.aliyun.com/product/aliware/ackdistro
https://github.com/AliyunContainerService/ackdistro
让创新触手可及,阿里云容器服务 ACK 发行版开放免费下载:https://mp.weixin.qq.com/s/Lc2afj91sykHMDLUKA_0bw
骚操作,这款工具可以把 Kubernetes 集群打包成一个镜像:https://mp.weixin.qq.com/s/ssZSMqogjP6CTOKOOR2e5Q
点击阅读原文,前往 ACK Distro 官网查看更多相关信息!