前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >应用容器化利器—Application Transformer for Tanzu (二)

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

作者头像
Henry Zhang
发布2023-04-04 08:45:10
3500
发布2023-04-04 08:45:10
举报
文章被收录于专栏:亨利笔记亨利笔记

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 (一) 》

  1. 选中需要做虚拟机容器化的虚拟机进行标记
  1. 选择转换平台标记

3. 虚拟机完成标记转换平台

  1. 选择转换菜单
  1. 选择准备V2C,虚拟机容器化

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

  1. 选择目标k8s 集群的kubeconfig,本次测试目标是tkg 集群,保存继续
  1. 选择k8s worker 节点与命名空间,保存并继续

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

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

  1. 点击部署,部署容器化的libvirtd ,查看libvirtd pod状态
代码语言:javascript
复制
[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. 关闭需要做虚拟机容器化的虚拟机
  1. 选择需要转换的虚拟机
  1. 对此虚拟机进行容器化,并把22 端口和 80端口映射,点击容器化
  1. 查看容器化任务,完成虚拟机容器化, 过V2C把vmware虚拟磁盘格式vmdk转换为qcow2格式,并通过libvirtd pod 进行管理

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

  1. 登录到libvirtd pod,查看kvm 虚拟机,虚拟机文件位于worker节点的 /vs2目录查看kvm的ip以及vnc端口
代码语言:javascript
复制
 [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
代码语言:javascript
复制
[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
代码语言:javascript
复制
# 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

  1. 创建web service myapp 并暴露端口,类型LoadBalancer,实现虚拟机内部应用的访问
代码语言:javascript
复制
[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方式登录访问应用

  1. 创建ssh service myssh 并暴露端口,类型LoadBalancer
代码语言:javascript
复制
[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 登录到容器化之后的虚拟机

代码语言:javascript
复制
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 ),以免错过更新。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-12-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 亨利笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档