离线环境下kubeoperator在openstack环境自动部署k8s

测试环境信息

三个节点测试环境配置信息

节点

IP

资源配置

kubeoperator

192.168.50.46

4core8G、200G磁盘

openstack contoller01

eth0:10.10.10.2 管理网络vip 10.10.10.254;eth1:192.168.50.220、 public网络vip:192.168.50.223

6core16G、200G根磁盘、500G数据磁盘

openstack compute01

eth0: 10.10.10.3 eth1: 连接192.168.50.0/24网段,未配置IP

8core16G、200G磁盘

openstack网络信息配置

名称

网段

备注

管理网络

10.10.10.0/24

openstack节点间控制流量、存储流量联通

public网络

192.168.50.0/24

公共网络,可以用于浮动IP,flat类型外部网络

私有网络

vxlan: 22, 172.18.45.0/24

配置vxlan,可以创建多个不同网络

kubeoperator通过public网络与openstack通信,kubeoperator调用openstack api在flat类型外部网络中创建虚拟机。并且使用public网络与虚拟机通信,进行k8s集群离线化部署。

kolla-ansible部署openstack

为实现在外部网络也能管理openstack各个物理节点以及dashboard,在/etc/kolla/globals.yml配置文件中配置以下的参数:

kolla_internal_vip_address:  "10.10.10.254"     #内部网络VIP
kolla_external_vip_address:  "192.168.50.220"   #外部网络VIP
network_interface:  "eth0"      #内部管理、存储、私有网络接口
neutron_external_interface:  "eth1"       #neutron接入外部网络的接口
kolla_external_vip_interface:  "eth1"        #外部网络VIP使用的接口

为使用controller01上的第二块盘作为cinder存储,在controller01节点上配置第二块盘/dev/vdb如下

pvcreate /dev/vdb
vgcreate cinder-volumes /dev/vdb

在/etc/kolla/globals.yml配置文件中配置以下的参数:

enable_cinder: "yes"
enable_cinder_backend_lvm: "yes"   #controller01使用cinder方式
enable_cinder_backend_iscsi: "yes" #compute01远程使用controller01上的cinder-volumes方式

配置multinode角色文件

[all]
control01 ansible_host=10.10.10.2 ansible_ssh_user=root
compute01 ansible_host=10.10.10.3 ansible_ssh_user=root

[control]
control01

[network]
control01

[compute]
control01
compute01

[monitoring]
control01

[storage]
control01

[deployment]
localhost ansible_connection=local

......

然后运行部署命令

kolla-ansible -i multinode bootstrap-servers
kolla-ansible -i multinode prechecks
kolla-ansible -i multinode deploy
kolla-ansible -i multinode post-deploy
kolla-ansible -i multinode check

如果部署完成后,只针对cinder配置进行了修改,则只需要

kolla-ansible -i multinode deploy -t haproxy,cinder,iscsi,horizon

如果部署完成后,增加compute02计算节点,只需把compute02节点放到[compute]组下,然后运行

kolla-ansible -i multinode deploy --limit compute02

如果部署完成后,需要切换public网路配置,修改globals.yml配置文件网络配置后,运行

kolla-ansible -i multinode deploy 
kolla-ansible -i multinode deploy  --skip-tags nova #若nova_libvirtd容器重启任务报错

重启所有容器来使用新的配置文件。

kubeoperator对接openstack

openstack环境必须配置存储,为简单起见,使用cinder存储。(因为kubeoperator调用了获取openstack存储的接口,如果没有配置,则会报错)

kubeoperator非常简单,github项目上提供了离线包的下载地址,解压离线包,执行里面的install.sh,使用默认配置即可。

openstack中网络,镜像,实例套件,卷类型创建如下

网络:创建flat类型网络ext_flat_net供k8s节点使用,配置IP网段为192.168.50.160-192.168.50.180。

openstack对接kvm openstack对接k8s_openstack对接kvm


使用centos7.9 iso构建centos7.9极少化操作系统模板。

openstack对接kvm openstack对接k8s_openstack对接kvm_02


openstack对接kvm openstack对接k8s_配置文件_03

创建4core8G和2core4G实例套餐供创建k8s节点虚拟机使用。

openstack对接kvm openstack对接k8s_IP_04


kubeoperator界面上配置openstack的信息,这些信息可以从openstack的界面和部署节点上/etc/kolla/admin-openrc.sh文件中获取。

openstack对接kvm openstack对接k8s_openstack对接kvm_05


创建IP池,地址是在openstack中的配置的ext_flat_net子网网段192.168.50.160-192.168.50.180。

openstack对接kvm openstack对接k8s_离线_06

使用自己的模板centos-79-mini-nofirewalld(部署脚本会关闭firewalld和selinux,可以不在模板中配置)。

openstack对接kvm openstack对接k8s_IP_07


openstack对接kvm openstack对接k8s_IP_08

因为我的环境资源有限,选择一主多节点模式,生产环境采用高可用的多主多节点部署模型。master节点使用4c8g实例套餐,worker使用2c4g实例套餐。

openstack对接kvm openstack对接k8s_配置文件_09


使用部署计划创建k8s集群,支持AMD64、ARM64以及AMD6跟ARM64混合部署。

openstack对接kvm openstack对接k8s_离线_10

配置k8s的pod网络,单个节点上pod最大数量等等。

openstack对接kvm openstack对接k8s_离线_11


openstack对接kvm openstack对接k8s_配置文件_12

配置部署k8s的网络插件,支持calico,flannel,cilium三种。

openstack对接kvm openstack对接k8s_openstack对接kvm_13

配置helm版本(v2或者v3)、ingress插件(nginx,traefik等)、是否安装gpu套件(调度GPU功能有用)。

openstack对接kvm openstack对接k8s_openstack对接kvm_14

使用之前创建的额部署计划flat-custom创建k8s集群。

openstack对接kvm openstack对接k8s_IP_15


openstack对接kvm openstack对接k8s_IP_16

等待半个小时左右,具体时间看环境网络状况。会看到openstack环境自动生成了两台虚拟机部署k8s集群。

openstack对接kvm openstack对接k8s_离线_17


openstack对接kvm openstack对接k8s_openstack对接kvm_18

openstack对接kvm openstack对接k8s_IP_19

创建k8s集群成功。

openstack对接kvm openstack对接k8s_IP_20


openstack对接kvm openstack对接k8s_openstack对接kvm_21

附录

遇到的问题

1、kubeoperator在部署k8s时,在更新yum repo时会可能因为网络原因失败(ansbible连接超时时间应该配置长一点),点击重试按钮即可。

解决办法,点击对话框的重试按钮即可。

2、kubeoperator部署完k8s后,无法获取metics-server的指标,报错Client.Timeout exceeded while awaiting headers。

解决办法,给metrics-server的deployment加上hostNetwork: true配置。