基于虚拟机的devops套件及把dbcolinux导出为虚拟机和docker格式

简介: 本文关键字:hashi packer,devops backend cloudcomputing,制作dbsubcolinux的docker模板,零配置,自动化开发件

本文关键字:hashi packer,devops backend cloudcomputing,制作dbsubcolinux的docker模板,零配置,自动化开发件

在前面我们多次谈到cloud ide & liveeditor,用nas+docker作devops等集成思想,所谓devops,它是一个集成语言系统,开发件,运维件,IDE tools,容器环境的所有自动化开发相关的东西,Devops是一个很巨大的工程,它越来越作为IT的基础存在,比如甚至这个过程和生态整合进了系统和运维 —— 这里的需求是:统一开发,多节点分布式部署,持续发布,大型网站的负载均衡架构,有点接近devops backend computing,—— 但更显然,它最开始主要服务于开发devops backend appdev。

我在bcxszy选型中,与之对应的概念就是engitor (这个命名带有点使cloud回归native的概念),vs devops 我的思想要更超前一点,尽量零配置,自动化,使得用户仅依赖它,就可以动手开发不管其它的东西。这个东西要像linux rootfs一样可以配置出来,作为某种系统基础件built into a os就好了,有点类似devops ci backend os的意思。。除了xaas的dbcolinux,在《选型》中devops的engitor它就是大头了。

在现实生活中,devops虽然出现较晚,但对比物很多。这些都在我们以前与devops和cloud ide相关的文章中提到过,比如,gitlab是一个集成化的ci,cd平台。它是基于git的devops,这里git只是分布版本提交器与devops没有太大关系,gitlab runner才开始有devops,我们以前也提到docker可用devops,单纯的docker只是一个容器还没有持续的概念存在docker composer才刚有持续构建的概念存在。另外一个例子,就是mac osx的xcode ide,它是ide的devops可启用build bot不过它也是对其它工具的调用,还有vagrant,Jenkins,chef这些。——— 所以,往往devops是对所有这些工具的结合运用,最终达到一种称为CD,CI的过程,注意这个持续C —— 这其实本质就是一种代码化加自动化思想,CI的思想本质就是就是把一切代码化。就像脚本语言一切化一样,碎片化了就可以做任何集成层的持续过程事情,比如docker有composer这是语义化了。实际上是可编程部署的容器(写yal语法)和自动化部署(这就有了devops),vagrant这种用命令行vagrant up,etc..和可脚本配置方式控制虚拟机,所以也有devops可能。

我们还谈到terralang是一种devops语言,其实所有脚本语言都可源码文档化,可集成式发布和构建应用。比如实现terralang,使编译期和运行期分离的那个macro系统,它就是一个命令行IDE。就是一种devops的运用。当然,还有很多,很多。。。。。。

基于虚拟机的devops:hashicorp tools

最近我用上了osx也使用了parallels desk,主要是冲着business和pro版有devops支持去的,它主要用的是vagrant,上面说到它使一切有了devops可能,vagrant有for parallels desk插件,不过它自己也有虚拟机部件,Vagrant就相当命令行代替了parallels desk的图形环境,vagrant 甚至还可以与 docker 结合来用,parallels desk在osx上也就变成了一个基于虚拟机的full devops软件。—— 这也是《聪明的osx云》那文我们讲到的它自带devops,而实际上它的xcode ide也是.

说到这个vagrant,它是hashi corp的东西,它自己也有一个七件套,涵盖虚拟机为中心展开devops的方方面面。以前我们主要谈到docker,git为中心的devops,docker作为轻量虚拟机性能固然好,但是它不能管从0开始,内核定制方面的事情,而vagrant可以。我们这里只讲构建,即与vagrant联系紧密的一个叫packer的工具的使用,它可以制造供vagrant使用的镜像。—— 这里只讲构建,而且用virtualbox代替vagrant,因为packer支持广泛 ——— 支持docker,支持各种虚拟机,甚至云主机,而且vb又有一个图形界面。

我们采用的例子是《将tinycolinux以硬盘模式安装到主机》,在那文中,我们以前手工构建是先发明一个liveos,现在我们不需要了,因为借助packer我们可以直接在虚拟机上构建,试错,调试。因为packer工具就一套以虚拟机为中心的devops语法支持的,持续构建器。

了解原理,准备基础环境

我使用的是osx上的packer_1.4.1_darwin_amd64.zip,VirtualBox-6.0.8-130520-OSX.dmg,Packer的文档在官网上都有,原理大约是先提供一个host os - 一个在其中构建的宿主,我们是在tinycolinux live os上定制新的tinycolinux hd,所以要先准备一个ISO,和各种它的tczs,生成的硬盘镜像就是我们需要的。

在启动构建过程中,packer会自动生成硬盘和虚拟机配置信息(下述基础脚本已写明),然后就是准备builders,和执行provisioners脚本了。然后将这些写入硬盘。

  • 安装virtualbox
  • 下载packer放入本地os的/usr/local/bin
  • 按下面基础脚本要求准备microcore_3.8.4.iso和各种tczs材料。

准备基本脚本

{

  "_comment": “整个builders段,是定制这个iso出来的live os, 直到产生一个ssh登录服务,然后 provisioners接手。此时并未重启,除非你在脚本或inline中指定reboot”,
  "builders":
    [{
    "type": "virtualbox-iso",
    "_comment": “Linux_64这个virtualbox的默认模板,里面有默认的配置,当然你可以定制加入其它参数,具体翻packer文档”,
    "guest_os_type": "Linux_64",
    "iso_url": "./microcore_3.8.4.iso",
    "iso_checksum": "41cbc86443cc12bfbf7b03c4965e4a171ac1aa993017aeef8d04c78db73c6afb",
    "iso_checksum_type": "sha256",
    "ssh_username": "tc",
    "ssh_password": "tc",
    "boot_wait": "4s",
    "shutdown_command": "sudo poweroff",
    "_comment": "http_directory会产生一个主机上的http服务器,下面pkgs里会有3.x,tcz这样的文件夹结构,tce-load -w才能正常下载到”,
    "http_directory": "pkgs/",

    "boot_command":
        [    
          "<enter><wait10>",
          "ifconfig",
          "<return>",
        "sudo rm /opt/tcemirror && sudo touch /opt/tcemirror<return>",
        "_comment": “这个10.0.2.2是主机相对于虚拟机nat网卡能访问到的地址”,
        "sudo sh -c 'echo http://10.0.2.2:{{ .HTTPPort }}/ > /opt/tcemirror'",
        "<return>",
        "_comment": “每个tcz要从官网下好dep,md5.txt文件”,
          "tce-load -iw openssh.tcz<return><wait10>",
          "sudo passwd tc<return>",
          "tc<return>",
          "tc<return>",
        "sudo cp /usr/local/etc/ssh/sshd_config.example /usr/local/etc/ssh/sshd_config<return><wait>",
          "sudo /usr/local/etc/init.d/openssh start<return><wait>"
          ],

      "export_opts": 
          [
          "--manifest",
          "--vsys", "0",
          "--description","{{user `vm_description`}}",
          "--version", "{{user `vm_version`}}"
          ],
      "format":"ova",
      "vm_name":"dbcolinux"
    }],


  "_comment": “整个provisioners段,开始为这个guestos作各种写入硬盘(那个linux_64自动生成的一块40g的硬盘)作上述export前的过程,当然,如何写入,脚本里要写明”,
  "provisioners": 
    [{
        "type": "shell",
        "pause_before":"1s",
        "execute_command": "echo '' | sudo -S sh -c '{{ .Vars }} {{ .Path }}'",
        "inline":
        [
        "cp -R /tmp/tce ~/"
        ]
    },

    {
        "type": "shell",
        "pause_before":"1s",
        "inline":
        [
        "tce-load -iw parted.tcz",
        "tce-load -iw grub2.tcz"
        ]
    },

    {
        "type": "shell",
        "pause_before":"1s",
        "execute_command": "echo '' | sudo -S sh -c '{{ .Vars }} {{ .Path }}'",
        "scripts":
        [
        "./scripts/phase1.sh"
        ]
        }]

}

假设上面构建文件保存为dbcolinux-pe.packer,调试和启动构建的方法:

进入正确的目录,执行packer build ./dbcolinux-pe.packer(for test and debug, you can use -debug -on-error=ask after build command),用了ask,它会问,你调试完后选择clean即可。不要立即作答。如果用了-debug会走一步卡一步让你确认。

Scripts中就是如何写入硬盘,写入哪些东西形成硬盘系统的逻辑,这是一个字符数组,目前只有phase1一个文件

scripts->phase1中的内容

export PATH=$PATH:/usr/local/sbin:/usr/local/bin

echo PREPARE HD
parted /dev/hda mktable msdos
parted /dev/hda mkpart primary ext3 1% 99%
parted /dev/hda set 1 boot on
mkfs.ext3 /dev/hda1
parted /dev/hda print
rebuildfstab
mount /mnt/hda1

echo COPY SOFT
echo /usr/local/etc/init.d/openssh start >> /opt/bootlocal.sh
echo usr/local/etc/ssh > /opt/.filetool.lst
echo etc/passwd>> /opt/.filetool.lst
echo etc/shadow>> /opt/.filetool.lst
/bin/tar -C / -T /opt/.filetool.lst -cvzf /mnt/hda1/mydata.tgz
mv ~/tce /mnt/hda1/
cp -R /opt /mnt/hda1

echo INSTALLING GRUB
grub-install --boot-directory=/mnt/hda1/boot /dev/hda
mkdir /mnt/cdrom/
mount /dev/cdrom /mnt/cdrom
cp /mnt/cdrom/boot/microcore.gz /mnt/hda1/boot/microcore.gz
cp /mnt/cdrom/boot/bzImage /mnt/hda1/boot/bzImage
echo set timeout=3 > /mnt/hda1/boot/grub/grub.cfg
echo menuentry \\\"dbcolinux\\\" { >> /mnt/hda1/boot/grub/grub.cfg
echo  linux /boot/bzImage com1=9600,8n1 loglevel=3 user=tc console=ttyS0 console=tty0 noembed nomodeset tce=hda1 opt=hda1 home=hda1 restore=hda1 >> /mnt/hda1/boot/grub/grub.cfg
echo  initrd /boot/microcore.gz >> /mnt/hda1/boot/grub/grub.cfg
echo } >> /mnt/hda1/boot/grub/grub.cfg

#reboot

——————

懂得了原理,基本够用的语句,或许以后,我们会把所有的xaas->dbcolinux上写过的文章中的构建全部按lesson实例写一次。

关注我


(此处不设回复,扫码到微信参与留言,或直接点击到原文)

qrcode.png

相关文章
|
2月前
|
Kubernetes Devops 持续交付
DevOps实践:使用Docker和Kubernetes实现持续集成和部署网络安全的守护盾:加密技术与安全意识的重要性
【8月更文挑战第27天】本文将引导读者理解并应用DevOps的核心理念,通过Docker和Kubernetes的实战案例,深入探讨如何在现代软件开发中实现自动化的持续集成和部署。文章不仅提供理论知识,还结合真实示例,旨在帮助开发者提升效率,优化工作流程。
|
8天前
|
网络安全 虚拟化 Docker
SSH后判断当前服务器是云主机、物理机、虚拟机、docker环境
结合上述方法,您可以对当前环境进行较为准确的判断。重要的是理解每种环境的特征,并通过系统的响应进行综合分析。如果在Docker容器内,通常会有明显的环境标志和受限的资源视图;而在云主机或虚拟机上,虽然它们也可能是虚拟化的,但通常提供更接近物理机的体验,且可通过硬件标识来识别虚拟化平台。物理机则直接反映硬件真实信息,较少有虚拟化痕迹。通过这些线索,您应该能够定位到您所处的环境类型。
12 2
|
15天前
|
Docker 容器
docker的导入本地镜像和导出本地镜像
本文介绍了如何使用Docker对本地镜像进行导入和导出操作,包括从本地导入`nginx.tar`镜像以及将`open-webui`镜像导出并压缩为`open-webui.tar.gz`。
28 1
|
20天前
|
搜索推荐 应用服务中间件 nginx
docker与containerd镜像获取及导出导入的区别与注意事项(报错信息:ctr: content digest sha256........ac47: not found)
docker与containerd镜像获取及导出导入的区别与注意事项(报错信息:ctr: content digest sha256........ac47: not found)
|
20天前
|
存储 Linux 开发者
虚拟机centos7.9一键部署docker
本文介绍了如何在 CentOS 7.9 虚拟机上安装 Docker 社区版 (Docker-ce-20.10.20)。通过使用阿里云镜像源,利用 `wget` 下载并配置 Docker-ce 的 YUM 仓库文件,然后通过 `yum` 命令完成安装。安装后,通过 `systemctl` 设置 Docker 开机自启并启动 Docker 服务。最后,使用 `docker version` 验证安装成功,并展示了客户端与服务器的版本信息。文中还提供了列出所有可用 Docker-ce 版本的命令。
虚拟机centos7.9一键部署docker
|
2天前
|
安全 Devops 网络安全
【DevOps】Docker 最佳实践指南(绝对干货)
Docker 是一种领先的容器化平台,可简化应用开发、部署和管理。本文档介绍 Docker 的最佳实践,涵盖安全性、网络、镜像、主机安全及资源限制等方面,帮助用户高效利用 Docker,确保应用的安全性和性能。
14 0
|
17天前
|
Docker 容器
docker可以通过镜像id导出镜像吗?
docker可以通过镜像id导出镜像吗?
12 0
|
1月前
|
Devops jenkins 持续交付
DevOps实践:构建和部署一个Docker化的应用
【9月更文挑战第14天】在当今快节奏的软件开发领域,DevOps已经成为提升效率、加速交付的关键。本文将引导你理解DevOps的核心概念,并通过一个实际的示例—构建和部署一个Docker化的应用—来深入探讨其实践方法。我们将从简单的应用出发,逐步实现Docker容器化,并最终通过CI/CD流水线自动化部署过程。这不仅是对DevOps流程的一次实操演练,也是对现代软件开发理念的一次深刻体验。
|
2月前
|
测试技术 持续交付 云计算
Docker 相对于虚拟机的优势
【8月更文挑战第27天】
68 5
|
2月前
|
安全 持续交付 虚拟化
在Docker中,Docker和虚拟机有什么不同?
在Docker中,Docker和虚拟机有什么不同?