分布式应用打包交付运行的解决方案sealer

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 通过把分布式应用及其数据库中间件等依赖一起打包以解决复杂应用的交付问题。

什么是sealer

sealer[ˈsiːlər]是一款分布式应用打包交付运行的解决方案,通过把分布式应用及其数据库中间件等依赖一起打包以解决复杂应用的交付问题。 sealer构建出来的产物我们称之为"集群镜像", 集群镜像里内嵌了一个kubernetes, 解决了分布式应用的交付一致性问题。 集群镜像可以push到registry中共享给其他用户使用,也可以在官方仓库中找到非常通用的分布式软件直接使用。

Docker可以把一个操作系统的rootfs+应用 build成一个容器镜像,sealer把kubernetes看成操作系统,在这个更高的抽象纬度上做出来的镜像就是集群镜像。 实现整个集群的Build Share Run !!!

有了集群镜像用户实践云原生生态技术将变得极其简单,如:

安装一个kubernetes集群

#安装sealer
wget https://github.com/alibaba/sealer/releases/download/v0.3.0/sealer-v0.3.0-linux-amd64.tar.gz && \
tar zxvf sealer-v0.3.0-linux-amd64.tar.gz && mv sealer /usr/bin
#运行集群
sealer run kubernetes:v1.19.9 # 在公有云上运行一个kubernetes集群
sealer run kubernetes:v1.19.9 --masters 3 --nodes 3 # 在公有云上运行指定数量节点的kuberentes集群
# 安装到已经存在的机器上
sealer run kubernetes:v1.19.9 --masters 192.168.0.2,192.168.0.3,192.168.0.4 --nodes 192.168.0.5,192.168.0.6,192.168.0.7 --passwd xxx

安装prometheus集群

sealer run prometheus:2.26.0

上面命令就可以帮助你安装一个包含promeheus的kubernetes集群, 同理其它软件如istio ingress grafana等都可以通过这种方式运行。

还没完,Sealer最出色的地方是可以非常方便的让用户自定义一个集群的镜像,通过像Dockerfile一样的文件来描述和build:

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 -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

使用场景&特性

  • 极其简单的方式在生产环境中或者离线环境中安装kubernetes、以及kubernetes生态中其它软件
  • 通过Kubefile可以非常简单的自定义kubernetes集群镜像对集群和应用进行打包,并可以提交到仓库中进行分享
  • 强大的生命周期管理能力,以难以想想的简单的方式去做如集群升级,集群备份恢复,节点扩缩等操作
  • 速度极快3min以内完成集群安装
  • 支持ARM x86, v1.20以上版本支持containerd,几乎兼容所有支持systemd的linux操作系统
  • 不依赖ansible haproxy keepalived, 高可用通过ipvs实现,占用资源少,稳定可靠
  • 官方仓库中有非常多的生态软件镜像可以直接使用,包含所有依赖,一键安装

快速开始

安装一个kubernetes集群

sealer run kubernetes:v1.19.9 --masters 192.168.0.2 --passwd xxx

如果是在云上安装:

export ACCESSKEYID=xxx
export ACCESSKEYSECRET=xxx
sealer run registry.cn-qingdao.aliyuncs.com/sealer-io/dashboard:latest
# 或者指定节点数量运行集群
sealer run registry.cn-qingdao.aliyuncs.com/sealer-io/dashboard:latest \
  --masters 3 --nodes 3
[root@iZm5e42unzb79kod55hehvZ ~]# kubectl get node
NAME                      STATUS   ROLES    AGE   VERSION
izm5e42unzb79kod55hehvz   Ready    master   18h   v1.16.9
izm5ehdjw3kru84f0kq7r7z   Ready    master   18h   v1.16.9
izm5ehdjw3kru84f0kq7r8z   Ready    master   18h   v1.16.9
izm5ehdjw3kru84f0kq7r9z   Ready    <none>   18h   v1.16.9
izm5ehdjw3kru84f0kq7raz   Ready    <none>   18h   v1.16.9
izm5ehdjw3kru84f0kq7rbz   Ready    <none>   18h   v1.16.9

查看镜像默认启动配置:

sealer inspect -c registry.cn-qingdao.aliyuncs.com/sealer-io/dashboard:latest

使用Clusterfile拉起一个k8s集群

使用已经提供好的官方基础镜像(sealer-io/kubernetes:v1.19.9)就可以快速拉起一个k8s集群。

场景1. 往已经存在的服务器上去安装,provider类型为BAREMETAL

Clusterfile内容:

apiVersion: sealer.aliyun.com/v1alpha1
kind: Cluster
metadata:
  name: my-cluster
spec:
  image: registry.cn-qingdao.aliyuncs.com/sealer-io/kubernetes:v1.19.9
  provider: BAREMETAL
  ssh:
    # ssh的登录密码,如果使用的密钥登录则无需设置
    passwd: 
    # ssh的私钥文件绝对路径,例如/root/.ssh/id_rsa
    pk: xxx
    # ssh的私钥文件密码,如果没有的话就设置为""
    pkPasswd: xxx
    # ssh登录用户
    user: root
  network:
    # 使用的网卡名称
    interface: eth0
    # 网络插件
    cniName: calico
    podCIDR: 100.64.0.0/10
    svcCIDR: 10.96.0.0/22
    withoutCNI: false
  certSANS:
    - aliyun-inc.com
    - 10.0.0.2
  masters:
    ipList:
     - 172.20.125.234
     - 172.20.126.5 
     - 172.20.126.6 
  nodes:
    ipList:
     - 172.20.126.8 
     - 172.20.126.9 
     - 172.20.126.10 
[root@iZm5e42unzb79kod55hehvZ ~]# sealer apply -f Clusterfile
[root@iZm5e42unzb79kod55hehvZ ~]# kubectl get node
NAME                      STATUS   ROLES    AGE   VERSION
izm5e42unzb79kod55hehvz   Ready    master   18h   v1.16.9
izm5ehdjw3kru84f0kq7r7z   Ready    master   18h   v1.16.9
izm5ehdjw3kru84f0kq7r8z   Ready    master   18h   v1.16.9
izm5ehdjw3kru84f0kq7r9z   Ready    <none>   18h   v1.16.9
izm5ehdjw3kru84f0kq7raz   Ready    <none>   18h   v1.16.9
izm5ehdjw3kru84f0kq7rbz   Ready    <none>   18h   v1.16.9

场景2. 自动申请阿里云服务器进行安装, provider: ALI_CLOUD Clusterfile:

apiVersion: sealer.aliyun.com/v1alpha1
kind: Cluster
metadata:
  name: my-cluster
spec:
  image: registry.cn-qingdao.aliyuncs.com/sealer-io/kubernetes:v1.19.9
  provider: ALI_CLOUD
  ssh:
    # ssh的登录密码,如果使用的密钥登录则无需设置
    passwd: 
    # ssh的私钥文件密码,如果没有的话就设置为""
    pk: xxx
    # ssh的私钥文件密码,如果没有的话就设置为""
    pkPasswd: xxx
    # ssh登录用户
    user: root
  network:
    # 使用的网卡名称
    interface: eth0
    # 网络插件
    cniName: calico
    podCIDR: 100.64.0.0/10
    svcCIDR: 10.96.0.0/22
    withoutCNI: false
  certSANS:
    - aliyun-inc.com
    - 10.0.0.2
  masters:
    cpu: 4
    memory: 4
    count: 3
    systemDisk: 100
    dataDisks:
    - 100
  nodes:
    cpu: 4
    memory: 4
    count: 3
    systemDisk: 100
    dataDisks:
    - 100
# 准备好阿里云的ak sk
[root@iZm5e42unzb79kod55hehvZ ~]# ACCESSKEYID=xxxxxxx ACCESSKEYSECRET=xxxxxxx sealer apply -f Clusterfile

释放集群

基础设置的一些源信息会被写入到Clusterfile中,存储在 /root/.sealer/[cluster-name]/Clusterfile中, 所以可以这样释放集群:

./sealer delete -f /root/.sealer/my-cluster/Clusterfile

制作一个自定义的集群镜像, 这里以制作一个dashboard镜像为例

新建一个dashboard目录,创建一个文件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
[root@iZm5e42unzb79kod55hehvZ dashboard]# export ACCESSKEYID=xxxxxxx 
[root@iZm5e42unzb79kod55hehvZ dashboard]# export ACCESSKEYSECRET=xxxxxxx 
[root@iZm5e42unzb79kod55hehvZ dashboard]# sealer build -f Kubefile -t my-kuberentes-cluster-with-dashboard:latest .

创建一个带有dashboard的自定义集群, 操作同上,替换掉Clusterfile中的image字段即可:

apiVersion: sealer.aliyun.com/v1alpha1
kind: Cluster
metadata:
  name: my-cluster
spec:
  image: my-kuberentes-cluster-with-dashboard:latest
  provider: ALI_CLOUD
  ssh:
    passwd: 
    pk: xxx
    pkPasswd: xxx
    user: root
  network:
    interface: eth0
    cniName: calico
    podCIDR: 100.64.0.0/10
    svcCIDR: 10.96.0.0/22
    withoutCNI: false
  certSANS:
    - aliyun-inc.com
    - 10.0.0.2
  masters:
    cpu: 4
    memory: 4
    count: 3
    systemDisk: 100
    dataDisks:
    - 100
  nodes:
    cpu: 4
    memory: 4
    count: 3
    systemDisk: 100
    dataDisks:
    - 100
# 准备好阿里云的ak sk
[root@iZm5e42unzb79kod55hehvZ ~]# ACCESSKEYID=xxxxxxx ACCESSKEYSECRET=xxxxxxx sealer apply -f Clusterfile

把制作好的集群镜像推送到镜像仓库:

sealer tag my-kuberentes-cluster-with-dashboard:latest registry.cn-qingdao.aliyuncs.com/sealer-io/my-kuberentes-cluster-with-dashboard:latest
sealer push registry.cn-qingdao.aliyuncs.com/sealer-io/my-kuberentes-cluster-with-dashboard:latest

就可以把镜像复用给别人进行使用

相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
4天前
|
存储 SQL 微服务
常用的分布式事务解决方案(三)
常用的分布式事务解决方案(三)
|
4天前
|
关系型数据库 MySQL
常见分布式事务的解决方案(一)
常见分布式事务的解决方案(一)
|
4天前
|
消息中间件 中间件 关系型数据库
常用的分布式事务解决方案(四)
常用的分布式事务解决方案(四)
|
4天前
常用的分布式事务解决方案(二)
常用的分布式事务解决方案(二)
|
2天前
|
存储 NoSQL Java
分布式session-SpringSession的应用
Spring Session 提供了一种创建和管理 Servlet HttpSession 的方案,默认使用外置 Redis 存储 Session 数据,解决 Session 共享问题。其主要特性包括:提供 API 和实现来管理用户会话,以中立方式替换应用程序容器中的 HttpSession,简化集群会话支持,并在单个浏览器实例中管理多个用户会话。此外,Spring Session 允许通过 headers 提供会话 ID 以使用 RESTful API。结合 Spring Boot 使用时,可通过配置 Redis 依赖和支持缓存的依赖实现 Session 共享。
分布式session-SpringSession的应用
|
4天前
|
Dubbo Java 应用服务中间件
分布式(基础)-RMI简单的应用
分布式(基础)-RMI简单的应用
|
27天前
|
存储 运维 应用服务中间件
阿里云分布式存储应用示例
通过阿里云EDAS,您可以轻松部署与管理微服务应用。创建应用时,使用`CreateApplication`接口基于模板生成新应用,并获得包含应用ID在内的成功响应。随后,利用`DeployApplication`接口将应用部署至云端,返回&quot;Success&quot;确认部署成功。当业务调整需下线应用时,调用`ReleaseApplication`接口释放资源。阿里云EDAS简化了应用全生命周期管理,提升了运维效率与可靠性。[相关链接]提供了详细的操作与返回参数说明。
|
30天前
|
存储 分布式计算 算法
探索Hadoop的三种运行模式:单机模式、伪分布式模式和完全分布式模式
在配置Hadoop集群之前,了解这三种模式的特点、适用场景和配置差异是非常重要的。这有助于用户根据个人需求和资源情况,选择最适合自己的Hadoop运行模式。在最初的学习和开发阶段,单机模式和伪分布式模式能为用户提供便利和成本效益。进而,当用户要处理大规模数据集时,完全分布式模式将是理想的选择。
71 2
|
30天前
|
机器学习/深度学习 分布式计算 PyTorch
大规模数据集管理:DataLoader在分布式环境中的应用
【8月更文第29天】随着大数据时代的到来,如何高效地处理和利用大规模数据集成为了许多领域面临的关键挑战之一。本文将探讨如何在分布式环境中使用`DataLoader`来优化大规模数据集的管理与加载过程,并通过具体的代码示例展示其实现方法。
33 1
|
25天前
|
分布式计算 资源调度 Hadoop
在YARN集群上运行部署MapReduce分布式计算框架
主要介绍了如何在YARN集群上配置和运行MapReduce分布式计算框架,包括准备数据、运行MapReduce任务、查看任务日志,并启动HistoryServer服务以便于日志查看。
34 0