F5社区-F5技术交流中心

使用KubeVirt部署BIG-IP VE

2021-01-22 15:09:25

梁勇

PHPWord

使用KubeVirt部署BIG-IP VE

 

概述

虚拟化技术持续的演进,应用的架构也随之变化。微服务和容器技术正越来越成为应用部署的首选,但一些传统的基于VM的应用仍需要时间来适应新的架构,使用Kubernetes 作为统一的编排管理时,需要同时兼顾传统的VM应用。KubeVirt(https://github.com/kubevirt)提供了在Kubernetes环境管理VM的一种机制。

 

BIG-IP VE也可以使用KubeVirt 部署在Kubernetes环境中:

部署流程


需要使用Multus 来提供多接口支持,Multus具体可以参考:https://github.com/intel/multus-cni 。如果考虑提高VE的性能,可以使用SR-IOVhttps://github.com/intel/sriov-network-device-plugin


PoC 设计

1.      标准BIG-IP VE包含3个接口,管理口Mgmt, External, Internal

2.      使用Linux Bridge部署MgmtExternal, 使用flannel 作为Internal (Pod)网络

3.      拓扑设计如下:

PoC Setup


部署步骤

#前提条件

  +正常运行的Kuberneters环境

  +下载 BIG-IP VE镜像(BIG-IP 14.1.x -1slot) 到HOME目录

 

#安装KubeVirt 和客户端virtctl

       https://github.com/kubevirt/kubevirt/blob/master/docs/getting-started.md

 

#准备Bootable Disk Image

       有很多不同的挂在Disk的方案,我们使用最简单的containerDisk方案。

1.      为避免BIG-IP 使用单网卡模式,我们创建一个临时的Dummy

$sudo brctl addbr kvmbr0

$sudo ip link set dev kvmbr0 up

2.      解开BIG-IP VE镜像

$ cd $HOME  <<假设BIG-IP VE镜像的位置>>

$unzip BIGIP-14.1.2.qcow2.zip

3.      拉起BIG-IP VE (已有KVM以及相关组件virt-install)

:

$virt-install \

    --name=bigip01 \

--description="bigip01" \

--disk path=$HOME/BIGIP-14.1.2.qcow2,bus=virtio,format=qcow2 \

--network=bridge=kvmbr0,model=virtio \

--network=bridge=kvmbr0,model=virtio \

--network=bridge=kvmbr0,model=virtio \

--serial tcp,host=localhost:2222,mode=bind,protocol=telnet \

--vcpus=2 --cpu host --ram=4096 \

--os-type=linux \

--os-variant=rhel6 \

--import --autostart –noautoconsole

 

4.      BIG-IP进行一些基本配置

连接BIG-IP:

$telnet localhost 2222 <<对应上面--serial 配置)

#watch tmsh show sys mcp

BIG-IP 正常运行后,配置一些基本信息

#tmsh

#modify sys dns name-servers replace-all-with { 8.8.4.4 8.8.8.8 } description "DNS Servers"

#...

#save sys config

#quit

##shutdown BIG-IP

#shutdown -h now

 

$sudo virsh undefine bigip01

 

#加载Disk Image到容器

mkdir $HOME/docker

cd $HOME/docker

cp $HOME/BIGIP-14.1.2.qcow2 .

cat << END > Dockerfile

FROM scratch

ADD BIGIP-14.1.2.qcow2 /disk/

END

 

docker build -t vmidisks/bigip:14.1.2 .

可以按需调整Tag,如:

docker build -t local-repo.example.com:8443/vmdisks/bigip:14.1.2

 

#安装Multus

       参考https://github.com/intel/multus-cni/blob/master/doc/quickstart.md

 查看Multus 正常

$kubectl get pods --all-namespaces | grep -i multus

 

#创建管理和External网络

a)      mgmt-network.yaml

       apiVersion: "k8s.cni.cncf.io/v1"

kind: NetworkAttachmentDefinition

metadata:

            name: bigip-mgmt

spec:

            config: '{

                  "cniVersion": "0.3.0",

                  "name": "bigip-mgmt",

                     "type": "bridge",

                     "bridge": "bigip-mgmt",

                     "isDefaultGateway": true,

                     "forceAddress": false,

                     "ipMasq": true,

                     "hairpinMode": true,

                     "ipam": {

                            "type": "host-local",

                            "subnet": "10.10.0.0/16"

              }

     }'

 

b)     external-network.yaml

apiVersion: "k8s.cni.cncf.io/v1"

kind: NetworkAttachmentDefinition

metadata:

  name: bigip-external

spec:

  config: '{

    "cniVersion": "0.3.0",

    "name": "bigip-external",

       "type": "bridge",

       "bridge": "bigip-external",

       "isDefaultGateway": true,

       "forceAddress": false,

       "ipMasq": true,

       "hairpinMode": true,

       "ipam": {

              "type": "host-local",

              "subnet": "172.20.0.0/16"

       }

  }'

 

$kubectl apply -f mgmt-network.yaml

$kubectl apply -f external-network.yaml

 

#部署BIG-IP 容器

编辑一个KubeVirt YAML文件,比如test-bigip-01.yaml

apiVersion: kubevirt.io/v1alpha3

kind: VirtualMachineInstance

metadata:

  name: bigip-test-01

spec:

  domain:

    resources:

      # limits:

      #   memory: "4096Mi"

      #   cpu: "2"

      requests:

        memory: "4096Mi"

        cpu: "2"

    devices:

      disks:

      - name: containerdisk

        disk:

          bus: virtio

      interfaces:

      - name: mgmt

        bridge: {}

      - name: pod

        bridge: {}

      - name: external

        bridge: {}

  volumes:

  - name: containerdisk

    containerDisk:

      image: vmidisks/bigip:14.1.2

      imagePullPolicy: Never

  networks:

  - name: mgmt

    multus:

      networkName: bigip-mgmt

  - name: pod

    pod: {}

  - name: external

    multus:

      networkName: bigip-external

 

 

$kubectl apply -f test-bigip-01.yaml

查看状态

$kubectl get vmi bigip-test-01

$kubectl describe vmi bigip-test-01

连接BIG-IP

$kubectl virt console bigip-test-01

 

 

BIG-IP VE容器应该运行了,当然,也可以使用F5 CISBIG-IP进行进一步的配置和管理。

 

 

++++++++++++++++++END+++++++++++++++++++++++++

发布评论 加入社群

发布评论

相关文章

博文精选 | 三大业界大佬的 DevOps 解决方案

F5小安

2021-12-14 14:36:45 233

博文精选 | 云原生 2.0 时代下,DevOps 实践如何才能更加高效敏捷?

F5小安

2021-09-14 10:21:29 383

F5 CIS整体方案

路瑞强

2021-06-28 16:20:17 903

Login

手机号
验证码
© 2019 F5 Networks, Inc. 版权所有。京ICP备16013763号-1