使用KubeVirt部署BIG-IP VE
2021-01-22 15:09:25
梁勇
使用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-IOV:https://github.com/intel/sriov-network-device-plugin
PoC 设计
1.
标准BIG-IP VE包含3个接口,管理口Mgmt, External, Internal
2.
使用Linux Bridge部署Mgmt和External, 使用flannel
作为Internal (Pod)网络
3.
拓扑设计如下:
部署步骤
#前提条件
+正常运行的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 CIS对BIG-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

回复评论
发布评论