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

离线环境下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。
离线环境下kubeoperator在openstack环境自动部署k8s_第1张图片
使用centos7.9 iso构建centos7.9极少化操作系统模板。
离线环境下kubeoperator在openstack环境自动部署k8s_第2张图片
离线环境下kubeoperator在openstack环境自动部署k8s_第3张图片

创建4core8G和2core4G实例套餐供创建k8s节点虚拟机使用。
离线环境下kubeoperator在openstack环境自动部署k8s_第4张图片
kubeoperator界面上配置openstack的信息,这些信息可以从openstack的界面和部署节点上/etc/kolla/admin-openrc.sh文件中获取。
离线环境下kubeoperator在openstack环境自动部署k8s_第5张图片
创建IP池,地址是在openstack中的配置的ext_flat_net子网网段192.168.50.160-192.168.50.180。
离线环境下kubeoperator在openstack环境自动部署k8s_第6张图片

使用自己的模板centos-79-mini-nofirewalld(部署脚本会关闭firewalld和selinux,可以不在模板中配置)。
离线环境下kubeoperator在openstack环境自动部署k8s_第7张图片
离线环境下kubeoperator在openstack环境自动部署k8s_第8张图片

因为我的环境资源有限,选择一主多节点模式,生产环境采用高可用的多主多节点部署模型。master节点使用4c8g实例套餐,worker使用2c4g实例套餐。
离线环境下kubeoperator在openstack环境自动部署k8s_第9张图片
使用部署计划创建k8s集群,支持AMD64、ARM64以及AMD6跟ARM64混合部署。
离线环境下kubeoperator在openstack环境自动部署k8s_第10张图片

配置k8s的pod网络,单个节点上pod最大数量等等。
离线环境下kubeoperator在openstack环境自动部署k8s_第11张图片
离线环境下kubeoperator在openstack环境自动部署k8s_第12张图片

配置部署k8s的网络插件,支持calico,flannel,cilium三种。
离线环境下kubeoperator在openstack环境自动部署k8s_第13张图片

配置helm版本(v2或者v3)、ingress插件(nginx,traefik等)、是否安装gpu套件(调度GPU功能有用)。
离线环境下kubeoperator在openstack环境自动部署k8s_第14张图片

使用之前创建的额部署计划flat-custom创建k8s集群。
离线环境下kubeoperator在openstack环境自动部署k8s_第15张图片
离线环境下kubeoperator在openstack环境自动部署k8s_第16张图片

等待半个小时左右,具体时间看环境网络状况。会看到openstack环境自动生成了两台虚拟机部署k8s集群。
离线环境下kubeoperator在openstack环境自动部署k8s_第17张图片
离线环境下kubeoperator在openstack环境自动部署k8s_第18张图片

离线环境下kubeoperator在openstack环境自动部署k8s_第19张图片

创建k8s集群成功。
离线环境下kubeoperator在openstack环境自动部署k8s_第20张图片
离线环境下kubeoperator在openstack环境自动部署k8s_第21张图片

附录

遇到的问题

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

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

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

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

你可能感兴趣的:(kubernetes)