Application Transformer for Taznu 可帮助组织发现应用程序类型、可视化应用程序拓扑、根据分数选择现代化方法以及容器化和迁移旧应用程序以满足业务需求。
传统单体应用进行容器化改造,如果不做应用、中间件、数据库的拆分,需要能容器内同时运行多个进程;但是由于容器引擎 (docker 或者containerd)只能运行一个进程容器的设计,并不推荐容器内运行多个进程,它希望的是一个进程一个容器,走微服务方向。然而实际生产过程中并没有这么理想,总是会有需要多个进程运行在同一容器的需要。
传统环境下同时运行多个进程非常简单,系统初始化启动一个init或者systemctl进程,其余的进程都由它来管理。在容器环境下没有init进程,启动一个Docker容器,只能让它运行一个前台程序。
一般通过两个工具,一个是Supervisor,另一个是Monit
Supervisor工具
Supervisor是一个C/S架构进程管理工具,通过它可以监控和控制其他的进程,同时它自身提供了一个WebUI,可以在WebUI进行start,stop,restart操作。由Supervisor管理的进程,都是它的子进程。在Linux系统启动之后,第一个启动的用户态进程是/sbin/init ,它的PID是1,其余用户态的进程都是init进程的子进程。Supervisor在Docker容器里面充当的就类似init进程的角色,其它的应用进程都是Supervisor进程的子进程。通过这种方法就可以实现在一个容器中启动运行多个应用。
Monit工具
Monit工具 Monit和Supervisor还是有很大区别的,Supervisor管理的都是前台执行的进程,Monit既可以管理前台进程也可以管理后台进程,简单的说,在CentOS中使用service xxx start 启动的程序,使用Monit可以直接管理,这就解决了很多没有前台方式启动的程序不能用Supervisor来管理的问题。
但是,传统环境下同时运行多个进程非常简单,运维人员也熟悉传统架构。而且旧版业务应用无需通过拆分进行性能和架构优化,保持单体架构就可以满足需求,只需要容器化改造,Supervisor和Monit无法满足需求,那么虚拟机整机的容器化无一是一个可行的解决方案。
Tanzu Application Transformer除了能够发现、分析、转换应用,也能把虚拟机整机实现容器化,下面将对Application Transformer V2C功能进行测试,展现虚拟机整机实现容器化过程。
1
测试环境拓扑
角色 | 版本 | 备注 |
---|---|---|
vCenter | 7.0.3 | |
TKGm | 1.6.0 | |
vRealize Network Insight | 6.5.1 | 可选 |
Application Transformer | 2.0 | |
Harbor | 2.0 | |
tomcat ubuntu | tomcat 9.0.65;ubuntu 18.4 |
2
测试单体应用的逻辑拓扑
备注:此单体应用由nginx作为web服务,mysql作为数据库,通过python实现后端应用 通过80端口,浏览器进行访问
3
测试步骤
Application Transformer 扫描虚拟机,收集文件夹结构、资源池、应用程序名称和进程等信息。借助 vRealize Network Insight 集成,可以通过 vRealize Network Insight 流获得更多信息,例如虚拟机连接和应用程序依赖关系。Application Transformer 创建应用拓扑,使客户能够全面了解其应用环境。
前提:完成扫描,安装配置参考文档 《应用容器化利器—Application Transformer for Tanzu (一) 》
3. 虚拟机完成标记转换平台
输入harbor 和 项目名称 ,保存继续
备注1:worker 节点需要打开硬件虚拟化
备注2: 登录到worker节点,在work节点 创建 /vs2目录
[w01-admin@w01|at] [root@tanzu-cli at]# kubectl get all
NAME READY STATUS RESTARTS AGE
pod/libvirtd-ubuntu-6cc8558cf-jlph7 1/1 Running 0 4m22s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/libvirtd-ubuntu 1/1 1 1 4m22s
NAME DESIRED CURRENT READY AGE
replicaset.apps/libvirtd-ubuntu-6cc8558cf 1 1 1 4m22s
libvirtd pod 管理位于worker节点 /vs2目录qcow2磁盘
[root@tanzu-cli ~]# kubectl exec -it pod/libvirtd-ubuntu-6cc8558cf-jlph7 -- /bin/bash
root@libvirtd-ubuntu-6cc8558cf-jlph7:/vdiskmanager# virsh list --all
Id Name State
--------------------------
1 v2cmysql running
[w01-admin@w01|at] [root@tanzu-cli ~]# kubectl exec -it pod/libvirtd-ubuntu-6cc8558cf-z9qpr -- /bin/bash
root@libvirtd-ubuntu-6cc8558cf-z9qpr:/vdiskmanager# virsh domifaddr v2cmysql
Name MAC address Protocol Address
-------------------------------------------------------------------------------
vnet0 52:54:00:1d:68:39 ipv4 192.168.122.216/24
root@libvirtd-ubuntu-6cc8558cf-z9qpr:/vdiskmanager# virsh vncdisplay v2cmysql
:1
# kubectl expose deployment.apps/libvirtd-ubuntu --name=myvnc --port=8001 --target-port=5901 --type=LoadBalancer
service/myvnc exposed
[w01-admin@w01|at] [root@tanzu-cli ~]# kubectl get all -n at
NAME READY STATUS RESTARTS AGE
pod/libvirtd-ubuntu-6cc8558cf-z9qpr 1/1 Running 0 133m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/myvnc LoadBalancer 100.67.173.175 10.105.148.127 8001:31207/TCP 4s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/libvirtd-ubuntu 1/1 1 1 133m
NAME DESIRED CURRENT READY AGE
replicaset.apps/libvirtd-ubuntu-6cc8558cf 1 1 1 133m
登录VNC
[w01-admin@w01|at] [root@tanzu-cli ~]# kubectl expose deployment.apps/libvirtd-ubuntu --name=myapp --port=80 --target-port=8080 --type=LoadBalancer
service/myapp exposed
[w01-admin@w01|at] [root@tanzu-cli ~]# kubectl get all -n at
NAME READY STATUS RESTARTS AGE
pod/libvirtd-ubuntu-6cc8558cf-z9qpr 1/1 Running 0 136m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/myapp LoadBalancer 100.68.83.53 10.105.148.128 80:31299/TCP 3s
service/myvnc LoadBalancer 100.67.173.175 10.105.148.127 8001:31207/TCP 3m53s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/libvirtd-ubuntu 1/1 1 1 136m
NAME DESIRED CURRENT READY AGE
replicaset.apps/libvirtd-ubuntu-6cc8558cf 1
通过http方式登录访问应用
[w01-admin@w01|at] [root@tanzu-cli ~]# kubectl expose deployment.apps/libvirtd-ubuntu --name=myssh --port=22 --target-port=8022 --type=LoadBalancer
service/myssh exposed
[w01-admin@w01|at] [root@tanzu-cli ~]# kubectl get all -n at
NAME READY STATUS RESTARTS AGE
pod/libvirtd-ubuntu-6cc8558cf-z9qpr 1/1 Running 0 138m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/myapp LoadBalancer 100.68.83.53 10.105.148.128 80:31299/TCP 89s
service/myssh LoadBalancer 100.67.28.154 10.105.148.129 22:31046/TCP 4s
service/myvnc LoadBalancer 100.67.173.175 10.105.148.127 8001:31207/TCP 5m19s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/libvirtd-ubuntu 1/1 1 1 138m
NAME DESIRED CURRENT READY AGE
replicaset.apps/libvirtd-ubuntu-6cc8558cf 1 1 1 138m
[w01-admin@w01|at] [root@tanzu-cli ~]#
使用ssh 登录到容器化之后的虚拟机
ssh root@10.105.148.129
Last login: Mon Sep 12 16:55:50 2022 from 100.96.0.1
[root@mysqlcentos ~]# uname -a
Linux mysqlcentos 3.10.0-1062.el7.x86_64 #1 SMP Wed Aug 7 18:08:02 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
4
Application Transformer 实现VMware虚拟机容器化,通过V2C把VMware虚拟磁盘vmdk格式转换为qcow2格式,存放在worker节点的目录,通过libvirtd pod 对此磁盘进行管理,并通过kuberetes 的service 对虚拟机的 VNC 以及内部应用等服务进行暴露进行访问。既兼顾了传统架构运维管理人员的技术栈又实现传统单体虚拟机应用的容器化。
要想了解联邦学习、隐私计算、云原生和区块链等技术原理,请立即长按以下二维码,关注本公众号亨利笔记 ( henglibiji ),以免错过更新。