应用容器化利器—Application Transformer for Tanzu (二)

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

测试环境拓扑

45efea5b3e7e24f876aa480d04642ba9.png

角色版本备注
vCenter7.0.3
TKGm1.6.0
vRealize Network Insight6.5.1可选
Application Transformer2.0
Harbor2.0
tomcat ubuntutomcat 9.0.65;ubuntu 18.4

2

测试单体应用的逻辑拓扑

备注:此单体应用由nginx作为web服务,mysql作为数据库,通过python实现后端应用 通过80端口,浏览器进行访问

4052236bac61692ae51de1a569f1eed5.png

3

测试步骤

Application Transformer 扫描虚拟机,收集文件夹结构、资源池、应用程序名称和进程等信息。借助 vRealize Network Insight 集成,可以通过 vRealize Network Insight 流获得更多信息,例如虚拟机连接和应用程序依赖关系。Application Transformer 创建应用拓扑,使客户能够全面了解其应用环境。

前提:完成扫描,安装配置参考文档 《应用容器化利器—Application Transformer for Tanzu (一) 》

  1. 选中需要做虚拟机容器化的虚拟机进行标记

53ce153304f71fb07036e40683771133.png
  1. 选择转换平台标记

09bf5dcf04b281e571b85a60bf735e60.png3. 虚拟机完成标记转换平台

b160595cfd5a6284c8705dcf047b122f.png
  1. 选择转换菜单

c99f6bef04fd831926500277b799c619.png
  1. 选择准备V2C,虚拟机容器化

输入harbor 和 项目名称 ,保存继续

c09e59507865a5f4c72b0ba7a2846f54.png
  1. 选择目标k8s 集群的kubeconfig,本次测试目标是tkg 集群,保存继续

76523ecf9d55ae74cefe3dc434025234.png
  1. 选择k8s worker 节点与命名空间,保存并继续

a9aae89ad78fda358636c27c56137800.png

备注1:worker 节点需要打开硬件虚拟化

fc6242ebd0f9851a047e3a8e117cf756.png

备注2: 登录到worker节点,在work节点 创建 /vs2目录

  1. 点击部署,部署容器化的libvirtd ,查看libvirtd pod状态

3a64f76ae1d13e9047d037a38e529a08.png a8f6898580f6e46c9e2ff03a2d7b8dfe.png
[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
  1. 关闭需要做虚拟机容器化的虚拟机

8f0f4a422e4cccc93d7402f99f6d379e.png
  1. 选择需要转换的虚拟机

5913d1566ee5ed68fb728159a3bd4d53.png
  1. 对此虚拟机进行容器化,并把22 端口和 80端口映射,点击容器化

0c57224414aa7dd1084deb0b4a09b7f0.png
  1. 查看容器化任务,完成虚拟机容器化, 过V2C把vmware虚拟磁盘格式vmdk转换为qcow2格式,并通过libvirtd pod 进行管理

37e512aa10f40bd46e139aba718ecaca.png

libvirtd pod 管理位于worker节点 /vs2目录qcow2磁盘

062b7e1d6ba390b6575d6b9ce095f809.png
  1. 登录到libvirtd pod,查看kvm 虚拟机,虚拟机文件位于worker节点的 /vs2目录查看kvm的ip以及vnc端口

[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
  1. 创建vnc service,并暴露端口,类型LoadBalancer

# 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

88270f6925289a8ab206496d174a62c1.png 65824775cb45550750ecff97ec3e06a7.png
  1. 创建web service myapp 并暴露端口,类型LoadBalancer,实现虚拟机内部应用的访问

[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方式登录访问应用

9a25968af559a2ad99b2eb9ba4c5b2f9.png
  1. 创建ssh service myssh 并暴露端口,类型LoadBalancer

[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

63892973e3e843157d83b05906cb0309.jpeg      

 Application Transformer 实现VMware虚拟机容器化,通过V2C把VMware虚拟磁盘vmdk格式转换为qcow2格式,存放在worker节点的目录,通过libvirtd pod 对此磁盘进行管理,并通过kuberetes 的service 对虚拟机的 VNC 以及内部应用等服务进行暴露进行访问。既兼顾了传统架构运维管理人员的技术栈又实现传统单体虚拟机应用的容器化。


要想了解联邦学习、隐私计算、云原生和区块链等技术原理,请立即长按以下二维码,关注本公众号亨利笔记 ( henglibiji ),以免错过更新。

e0b9c289166e57afe38ef58b635ae478.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值