一、CTyunOS部署目标系统准备
-
系统环境介绍:
系统环境:CTyunOS虚拟机
系统版本:CTyunOS2.0.1
VMware创建CTyunOS虚拟机介绍:
与VMware创建CentOS等虚拟机类似,需要注意的是内核版本选择为“其他Linux 4.x 或更高版本内核 64位,其他配置根据需求安装即可:
-
网卡配置
1)网卡激活:
CTyunOS空系统网卡尚未激活,通过以下步骤激活(以我安装虚拟机时创建的NAT模式网卡ens33为例):
-
vi /etc/sysconfig/network-scripts/ifcfg-ens33将ONBOOT=yes
-
重启网卡:ifdown ens33, ifup ens33
-
现在ip addr查看ens33已经获取到IP地址了
2)添加网卡;
根据dpos运行需求添加网卡
CTyunOS采用 nmcli命令配置网卡:
-
先通过VMware给虚拟机添加一张网卡,此时添加的网卡尚未激活(如:ens36);
-
添加网卡连接:
nmcli connection add con-name <网络接口名称> type <接口类型> ifname <网卡名称>
如:nmcli connection add type ethernet con-name ens36 ifname ens36
-
查看连接状态:nmcli connection show
-
启用网卡:
nmcli connection up ens36
-
yum源配置:
1)ctyunos yum源配置:
vi /etc/yum.repos.d/ctyunos.repo
[everything]
name=everything
baseurl=xxx
enabled=1
gpgcheck=0
2)dpos rpm安装包本地yum源配置(如果需要部署多台目标机,则需要在每一台目标机上配置dpos rpm安装包本地yum源)
注意:真实部署环境不需要按以下方法在目标机上配置yum源,由ansible-playbook ./playbooks/system_init.yml --tags=repo_careat来部署目标机yum源,其他目标机系统初始化操作均可通过ansible-playbook ./playbooks/system_init.yml指定相应tags来初始化。
-
将dpos rpm安装包放到部署目标机本地目录;
-
安装createrepo:yum install -y createrepo;
-
添加dpos rpm本地yum配置文件:
在/etc/yum.repos.d/目录下添加 .repo后缀yum源配置文件,命名最好不要为redhat.repo,并将yum源路径指向存放dpos rpm安装包的路径:
-
创建yum源:createrepo 指定安装包路径,执行成功后会在安装包路径生成repodata目录及相关文件
-
关闭防火墙:
-
systemctl disable firewalld
-
firewall-cmd --reload
-
关闭selinux(防止创建的文件没有权限执行, 如果只是采用setenforce 0临时关闭selinux,系统重启后sleinux将自动打开,届时dpos将不能正常恢复运行):
-
vi /etc/selinux/config 将SELINUX值修改为disabled并保存
-
reboot:重启系统生效
-
基础工具安装(可选):
-
yum install vim -y
-
yum install net-tools.x86_64 -y (ifconfig)
-
yum install lrzsz -y
三、ansible部署环境准备
-
ansibe部署环境安装:
1) CentOS上安装方法:
2)CTyunOS2.0上安装方法:
-
首先,配置ansible的yum源文件,vi /etc/yum.repos.d/ansible.repo,在里面添加如下内容保存,然后执行yum makecache更新yum源( 由于OpenEuler官方无ansible,这里使用清华大学yum源镜像 )
[ansible]
name=ansible
baseurl=xxx
gpgcheck=0
-
安装ansible:yum install ansible -y,
-
ansible安装成功后,执行ansible --version查看ansible版本
-
如果出现以下这种情况,需手动对缺失的module进行安装:yum install python-jinja2
-
至此,在CTyunOS上安装ansible成功
-
vnet-deploy自动化部署环境搭建:
-
vnet-deploy自动化部署代码(切换到dpos-newbranch分支)
-
配置ANSIBLE_CONFIG环境变量:export ANSIBLE_CONFIG=xxx/ansible/ansible.cfg(绝对路径下vnet-deploy代码中ansible目录下的ansible.cfg)
-
dpos安装包yum源配置及httpd服务器搭建:
-
将dpos rpm安装包放到/tmp目录( 注意:一定要将dpos rpm安装包放到/tmp/目录下,否则下一步将执行不成功);
-
进入vnet-deploy/ansible目录,执行sh ./script/repo.sh:执行该脚本会创建dpos rpm包本地yum源,并搭建httpd服务器,供部署时部署目标机下载。
三、 部署网元数据面
(一)、单网元单主机部署
在单台CTyunOS目标主机上部署,这里以部署igw网元为例, agw及sgw的部署流程与原理与igw相同。
-
vnet-deploy自动化部署工具配置文件修改:
-
在ansible/hosts中添加需要部署的网元及目标host,ssh账户密码填写部署目标机登录用户名及密码,注意:由于CTyunOS的是python3-dnf,这里ansible_python_interpreter指向/usr/bin/python3
-
根据部署目标机接口情况及部署需求在ansible/host_vars目录下,以目标机host ip命名创建对应的接口配置文件,其中net_type:1代表WAN口,0代表LAN口
-
对目标机进行部署
进入vnet-deploy代码ansible目录下。
1). 对目标机进行系统初始化(目前只初始化了大页内存):
ansible-playbook ./playbooks/system_init.yml
执行结果:
执行解析:
-
执行该命令时会根据ansible/playbooks/system_init.yml中的hosts变量在ansible/hosts文件中找到对应目标主机组和目标主机用于建立ssh连接;
-
然后根据roles变量找到角色目录下(ansible/roles)的tasks(system_init)并执行ansible/roles/system_init/tasks/main.yml
-
根据import_tasks执行对应task(hugepage_mem.yml)
-
hugepage_mem.yml中, 如果ansible从目标机获取到的系统版本在ansible/group_vars/all/config.yml全局配置支持的系统版本中,则会通过notify通知执行handlers(ansible/roles/system_init/handlers/main.yml
-
ansible/roles/system_init/handlers/main.ym加载目标机中/etc/sysctl.conf并执行shell命令sysctl -p初始化目标机大页内存:
2). 安装并运行dpos:
ansible-playbook ./playbooks/dpos.yml --tags=install
执行结果:
执行解析:
-
同样,根据ansible/playbooks/dpos.yml中hosts变量在ansible/hosts文件中找到对应目标主机组和目标主机用于建立ssh连接;
-
然后根据roles变量找到角色目录下(ansible/roles)的tasks(dpos)并执行ansible/roles/dpos/tasks/main.yml
-
由于命令指定了tags=install,则会依次执行带有tags为install的task:install.yml,config.yml,init.yml,check.yml
-
首先,执行install.yml,从yum源下载并安装dpos安装包:
-
执行config.yml:
(1) 获取目标机接口pciid;
(2) 根据接口配置(ansible/host_vars目录下的接口配置文件)初始化目标机dpos.conf配置文件;
(3) 初始化dpos重启配置文件init_param;
(4) 添加开机重启dpos任务。
-
执行init.yml:
(1) 拷贝dpos环境初始化文件到目目标机;
(2) 初始化目标机dpdk环境(安装igb_uio及rte_kni驱动);
(3) 初始化dpdk接口, 完成后通过notify通知ansible/roles/dpos/handlers/main.yml执行restart-dpos-service启动目标机dpos。
-
check目标机的配置及dpos运行状态的task尚未开发。
3). 卸载dpos
ansible-playbook ./playbooks/dpos.yml --tags=uninstall
执行结果:
执行解析:
-
与install过程类似,先根据hosts与目标机建立连接,后根据roles执行ansible/roles/dpos/tasks/main.yml
-
由于命令指定了tags=uninstall,则会执行带有tags为unintsall的task:unintsall.yml
(1) 备份目标机dpdk-devbind.py脚本;
(2) 删除目标机vnet-dpos目录下dpos安装包安装的文件;
(3) 创建目标机/home/vnet-dpos/script目录并赋予相应权限;
(4) 拷贝init_env.sh及dpdk-devbind-remote.py脚本到目标机/home/vnet-dpos/script目录;
(5) 卸载igb_uio及rte_kni驱动并解绑dpdk接口;
(6) 删除 /home/vnet-dpos/script/下的文件;
(7) 删除开机重启dpos的任务。
4). 更新安装dpos
目前暂不支持直接更新安装,需要先卸载后再安装
ansible-playbook ./playbooks/dpos.yml --tags=uninstall
ansible-playbook ./playbooks/dpos.yml --tags=install
(二)、 多AZ多网元部署
在多AZ的多个网元的多台主机上部署dpos,部署流程和原理与单主机相同,只需要在相关配置文件里将多AZ下的各网元配置添加上后,即可利用ansible一键部署dpos。
这里以部署agw、sgw、igw为例,假如在AZ1下有一台agw和一台sgw,AZ2、AZ3下分别有一台sgw、igw,利用ansible对他们进行一键部署。
-
vnet-deploy自动化部署工具配置文件修改:
1)hosts文件:
-
首先,同样先修改ansible/hosts文件,这里以上面所有网元的ssh账号密码及python解释器一致为例,修改hosts文件里全局变量里的相关变量。
-
在kube_worker变量下添加子变量包含kube_networkelement_agw(agw)、kube_networkelement_sgw(sgw)、kube_networkelement_sgw(igw)
-
因为只有AZ1下有一台agw网元,故在kube_networkelement_agw变量下添加子变量kube_networkelement_agw_az1变量,并且在kube_networkelement_agw_az1变量下添加这台agw的host ip:
-
AZ1与AZ2下分别有一台sgw,故在kube_networkelement_sgw变量下添加子变量kube_networkelement_sgw_az1和kube_networkelement_sgw_az2,并且在kube_networkelement_sgw_az1和kube_networkelement_sgw_az2下添加两台sgw的host ip:
-
只有AZ3下有一台igw,故在kube_networkelement_igw变量下添加子变量kube_networkelement_igw_az3,并且在kube_networkelement_igw_az3下添加该igw的host ip:
2) 网元接口配置文件:
-
根据各部署网元目标机接口情况及部署需求在ansible/host_vars目录下,以目标机host ip命名创建对应的接口配置文件。这里以agw接口配置文件192.168.83.145.yml为例,其中net_type:1代表WAN口,0代表LAN口
-
对多AZ下各网元目标机进行部署
进入vnet-deploy代码ansible目录下。
1). 对各网元目标机进行系统初始化(目前只初始化了大页内存):
ansible-playbook ./playbooks/system_init.yml
2). 在各网元目标机上安装并运行dpos:
ansible-playbook ./playbooks/dpos.yml --tags=install
3). 卸载各网元目标机上的dpos
ansible-playbook ./playbooks/dpos.yml --tags=uninstall
4). 更新安装dpos
目前暂不支持直接更新安装,需要先卸载后再安装
ansible-playbook ./playbooks/dpos.yml --tags=uninstall
ansible-playbook ./playbooks/dpos.yml --tags=install