新一代应用统一部署管理平台 Seal AppManager 采用平台工程的理念,通过降低基础设施操作的复杂度为研发和运维团队提供易用、一致的应用管理和部署体验。Seal AppManager 帮助研发和运维团队实现关注点分离,即运维工程师负责基础建设,研发可以在零基础设施知识的情况下实现应用部署管理。

本文以运维和研发两个视角,介绍如何通过Seal AppManager 从源码构建一个 Java Web 服务并部署到 Kubernetes 中。

运维视角

李维是 Alpha 公司的 DevOps,他需要搭建一个自服务平台提供给不了解容器和 Kubernetes 的研发团队使用。他做了以下准备工作:

  • 资源不少于4CPU,8Gi内存的 Linux 服务器。
  • 至少 50GB 的空余磁盘空间。
  • 安装 Docker,详细指引参Docker官方文档(https://docs.docker.com/)。
  • 服务器开放80和443端口。
  • 前往官网(https://seal.io/trial)申请产品试用镜像。
  • 安装一个 Kubernetes 集群,获取到 Kubeconfig 文件。

部署

执行以下命令启动 Seal 服务:

sudo docker run -d --privileged --restart=always -p 80:80 -p 443:443 <seal-container-image>

访问

通过 https://<server-address> 访问Seal的UI。

第一次登陆时根据UI提示,在服务器上运行以下指令获取初始的管理员密码。

sudo docker logs <your-container-id> 2>&1 | grep "Bootstrap Admin Password"

以 admin 用户名以及初始管理员密码登陆 Seal,并根据UI提示设置新的密码以及 Seal 的访问地址。

配置镜像仓库认证密钥

配置提供给研发使用的镜像仓库测试账号:

  1. 访问【运维中心】-【全局密钥】菜单,点击【新建密钥】按钮。
  2. 在【名称】中填入 REGISTRY_USERNAME,在【内容】中填入镜像仓库认证的用户名,点击【保存】按钮。
  3. 再次点击【新建密钥】按钮。

    4 在【名称】中填入 REGISTRY_PASSWORD,在【内容】中填入镜像仓库认证的密码,点击【保存】按钮。

配置 Kubernetes 与环境

添加 Kubernetes 集群作为应用的部署目标:

  1. 访问【运维中心】-【连接器】菜单,点击【新建连接器】按钮。
  2. 在名称中填入test-k8s,在 Kubeconfig 中填入准备的集群 Kubeconfig 文件,点击保存按钮。
  3. 访问【运维中心】-【环境】菜单,点击【新建环境】按钮。
  4. 在【名称】中填入 development
  5. 点击【添加连接器】按钮,选择 test-k8s 连接器,点击【保存】按钮。

注:

  • 连接器是对接任意基础设施和服务的抽象对象,例如 Kubernetes,公有/私有云,虚拟机,版本控制系统等等。
  • 环境是应用部署目标,环境中可以关联若干连接器。

李维已经完成了基建工作!后续他可以在 Seal 平台接入更多不同的基础设施,添加更多沉淀了组织内 DevOps 最佳实践的应用模块,提供给研发团队使用。对于本文的工作,使用 Seal 内置的模块即可完成。

研发视角

张研是 Alpha 公司的研发,他不熟悉 Kubernetes,他想在不需要提工单给运维的情况下快速搭建开发测试环境(所谓自服务)。

项目代码仓库放置在:https://github.com/seal-demo/spring-boot-docker-sample

创建应用

张研登入Seal平台执行以下操作:

  1. 访问【应用管理】-【应用】菜单,点击【新建应用】按钮。
  2. 在【名称】中填入 myapp,点击模块配置中的【+】按钮。
  3. 在模块名称中填入 s2i,模块列表中选择 build-container-image,在Git URL中填入 https://github.com/seal-demo/spring-boot-docker-sample。
  4. 点击【Build】标签页,在 image 中填入镜像名称 registry.alpha.org/myproject/myimage:latest(注:这是张研所在Alpha公司的仓库地址,您需要换成您所用的镜像仓库地址)。
  5. 勾选【Registry Authentication】,在【Username】和【Password】中分别填入 ${secret.REGISTRY_USERNAME}${secret.REGISTRY_PASSWORD}。Seal的UI会引导填写对已配置密钥的引用。点击【确定】保存构建镜像模块的配置。
  6. 点击【模块配置】中的【+】按钮。
  7. 在模块名称中填入 web,确认模块列表中选择 webservice,在【Image Name】中填入 ${module.s2i.image},Seal的UI会引导填写对其它模块输出的引用。
  8. 修改 Ports 为 8888 端口(这是张研所用代码监听的端口)。点击【确定】保存web服务模块的配置。
  9. 点击【保存】按钮保存应用配置。

部署应用

现在张研可以在Seal上一键部署测试环境了:

  1. 进入 myapp 应用详情页。
  2. 点击应用信息右侧的【+】号添加实例按钮。
  3. 在名称中填入 dev1,选择运维团队(李维)提供的 development 环境。点击【确定】按钮创建应用实例。

    4 等待部署完成,并在UI上出现该应用实例的访问地址。





TADA!张研现在可以访问他的服务测试环境了!后续他可以将该应用共享给其它的开发测试成员,创建多个应用实例。

总结

本文通过两种角色视角的职责划分,展示了 Seal 如何实现研发和运维关注点分离;通过从源码到 Kubernetes deployment 的部署,展示了Seal 的应用模型抽象。当然不止于此,一个应用模块可以是构建逻辑、云原生工作负载,也可以是传统部署负载或是其它的资源抽象。

 

欢迎来探索更多功能!

研发运维双管齐下!Seal AppManager的正确打开方式的更多相关文章

  1. DevOps Workshop 研发运维一体化(北京第二场) 2016.04.27

    北京不亏为首都,人才济济,对微软DevOps解决方案感兴趣的人太多.我们与微软公司临时决定再家一场培训. 我之前在博客中(DevOps Workshop 研发运维一体化第一场(微软亚太研发集团总部)h ...

  2. InnoDB缓冲池预加载在MySQL 5.7中的正确打开方式

    InnoDB缓冲池预加载在MySQL 5.7中的正确打开方式 https://mp.weixin.qq.com/s/HGa_90XvC22anabiBF8AbQ 在这篇文章里,我将讨论在MySQL 5 ...

  3. C++11随机数的正确打开方式

    C++11随机数的正确打开方式 在C++11之前,现有的随机数函数都存在一个问题:在利用循环多次获取随机数时,如果程序运行过快或者使用了多线程等方法,srand((unsigned)time(null ...

  4. iOS开发小技巧--相机相册的正确打开方式

    iOS相机相册的正确打开方式- UIImagePickerController 通过指定sourceType来实现打开相册还是相机 UIImagePickerControllerSourceTypeP ...

  5. Xcode 的正确打开方式——Debugging(转载)

    Xcode 的正确打开方式——Debugging   程序员日常开发中有大量时间都会花费在 debug 上,从事 iOS 开发不可避免地需要使用 Xcode.这篇博客就主要介绍了 Xcode 中几种能 ...

  6. C#语法——泛型的多种应用 C#语法——await与async的正确打开方式 C#线程安全使用(五) C#语法——元组类型 好好耕耘 redis和memcached的区别

    C#语法——泛型的多种应用   本篇文章主要介绍泛型的应用. 泛型是.NET Framework 2.0 版类库就已经提供的语法,主要用于提高代码的可重用性.类型安全性和效率. 泛型的定义 下面定义了 ...

  7. Console控制台的正确打开方式

    Console控制台的正确打开方式 console对象提供了访问浏览器调试模式的信息到控制台 -- Console对象 |-- assert() 如果第一个参数断言为false,则在控制台输出错误信息 ...

  8. 任务队列和异步接口的正确打开方式(.NET Core版本)

    任务队列和异步接口的正确打开方式 什么是异步接口? Asynchronous Operations Certain types of operations might require processi ...

  9. (一)Redis for Windows正确打开方式

    目录 (一)Redis for Windows正确打开方式 (二)Redis for 阿里云公网连接 (三)Redis for StackExchange.Redis 下载地址 官网.中文网1 及 中 ...

  10. List的remove()方法的三种正确打开方式

    转: java编程:List的remove()方法的三种正确打开方式! 2018年08月12日 16:26:13 Aries9986 阅读数 2728更多 分类专栏: leetcode刷题   版权声 ...

随机推荐

  1. 循环神经网络(Recurrent Neural Networks)(第一部分)

    参考 https://www.cnblogs.com/royhoo/p/Recurrent-Neural-Networks-1.html

  2. oracle 将以逗号分隔的列拆成多行的的方法

    原表如下 select * from hs_acct.custattach a where a.client_id='888827395'; 将列拆分成多行的语句 select * from ( -- ...

  3. jenkins新建用户,设置权限

    jenkins新建用户,设置权限 一.新建用户 1.1 登录jenkins,点开 manage Jenkins 1.2进入Manage Users 1.3 新建用户 1.4填入新建用户信息 1.5用户 ...

  4. C#获取本地所有打印机名称

    引用:using System.Drawing.Printing; 实现代码: List<string> PrintS = new List<string>(); foreac ...

  5. 代码还是那个代码,但我已经知道了hashmap背后的东西

    代码还是那个代码,但我已经知道了hashmap背后的东西 数据结构是链表的数组(注:后面的版本为了提升性能,已经是改成链表或者树(节点较多)了) 思想上是空间换时间的算法 构造函数上有容量和负载因子2 ...

  6. 前端复习之css

    1.css概述 1 1.CSS3概述 2 1.问题 3 1.设置页面中所有的文本颜色为红色 4 2.设置页面中所有div的文本的颜色为蓝色 5 3.将所有的div的文本的颜色改为黄色 6 7 HTML ...

  7. 网络存储服务ip-san搭建

                                         网络存储服务ip-san搭建 ip-san简称SAN(Storage Area Network),中文意思存储局域网络,ip- ...

  8. Mac 系统下 xxx.py 在终端运行

    1.在文件中添加注释首先在你所要运行的python文件里首行添加一个特殊的注释(我使用的是python 3.7.3) #!/usr/bin/env python3 注意:如果是python3的话,&q ...

  9. gstreamer样例

    #!/bin/bash xrandr -s 0 --output DSI-1 xrandr -s 0 --output HDMI-1 xrandr --fb 1024x600 --output DSI ...

  10. 2022.07.25 TypeScript基础类型介绍

    基础类型: 字符串(string)(String) let first: string = 'niu' // 直接赋值 let fourth: string = `niu` // 模板字符串 let ...