Skip to main content
开放网络的先行者与推动者—星融元
加入我们技术支持(Support)  TEL:(+86)4000989811

配置指导:在GNS3虚拟平台上快速部署vAsterNOS镜像

1 目的

本文主要介绍Asterfusion企业级SONiC交换机虚拟操作系统(vAsterNOS)环境的搭建。通过阅读本文,用户可以在GNS3虚拟平台上快速部署vAsterNOS镜像,从而使用户更容易学习和理解Asterfusion企业级SONiC交换机的使用。

2 vAsterNos介绍

vAsterNos是星融元推出的一款sonic交换机的虚拟操作系统,它继承了AsterNOS的所有软件特性,可运行在GNS3、EVE-NG等网络虚拟软件中。用户可以通过使用vAsterNos更好地了解星融元企业级sonic交换机的特性,从而为构建高效网络环境提供有力支撑。

3 环境要求

3.1 硬件

名称型号硬件指标数量备注
PCX86普通个人PC1
服务器X86 CPU:Intel Xeon Gold5118 2.30GHZ
内存:512GB
1BIOS开启VT

3.2 软件

软件版本备注
ESXI 镜像ESXI-6.7.0-20191204001VMware 服务器版本
GNS3 VM Server2.2.45GNS3 版本 > 2.2.43
QEMU4.2.1
GNS3 VM Client2.2.45GNS3 Client版本必须与Server版本相同
VM Server0.15.0
vAsterNOS3.1AsterNOS社区版镜像,最低配置2C4G
vAsterNOS.gns34GNS3 registry 版本 > 3
Centos76.qcow2Centos7.6

3.3 获取软件镜像

用户可从网上自行下载GNS3、VM、Centos等相关软件的镜像,也可向我们提出申请来获取vAsterNOS镜像软件。当然,Asterfusion也可提供上述提到的其它所有软件。只需申请通过即可全部下载。

4 vAsterNOS运行环境搭建

vAsterNOS可以在GNS3和EVE-NG等网络虚拟软件中运行。本文主要介绍GNS3网络虚拟化软件中搭建。首先,您需要下载上述软件镜像并将其放在您的电脑上,并将安装有vmware ESXI的服务器开启,使PC与服务器连接,pc端通过web能够访问到服务器。装GNS3、vAsterNOS等软件。

4.1 安装 GNS3 server

通过PC端Web访问ESXI server并登录。单击创建/注册虚拟机,如下所示:

创建/注册虚拟机

选择从 OVF 或 OVA 文件部署虚拟机,然后单击下一步

部署虚拟机

输入虚拟机的名称,然后单击下一步

输入虚拟机的名称

选择 GNS3 VM.ova 并安装

选择 GNS3 VM.ova

4.2 配置 GNS3 VM

完成GNS3 VM的创建后,在管理页面通过Network配置VM管理口IP,并重启虚拟机。

右键单击 GNS3 VM 窗口,选择“控制台”,然后在新窗口中打开控制台,如下所示:

打开控制台

此时出现相关配置界面,选择network进入

相关配置界面

然后出现以下界面:

配置界面

修改IP地址、网关、DNS等相关参数。IP 地址需要与 VMware ESXI 系统同网段。如下:

修改参数

然后保存并退出,完成网络相关配置。

接下来点击编辑,进入虚拟机设置界面,如下图所示:

虚拟机设置

需要将CPU及内存设置为合适的值,例如运行一个2+4的spine-leaf网络,需要运行6个vAsterNos镜像,每个vAsterNos镜像的运行配置不低于2核4G,那么就需要将CPU合数设置为大于12核,将内存设置为大于24G。同时,如果运行虚拟PC作为验证数据使用,也同样需要计算所占用的cpu及内存资源。本文设置为24核130G。

完成设置后的GNS3配置如下图:

GNS3配置

其用户名和密码默认为 gns3/gns3。

4.3 配置vswitch

选择网络-vswitch-vswitch0,如下图所示:

网络-vswitch-vswitch0

单击编辑设置。您需要将安全策略调整为混杂模式,如下所示:

模式调整

完成上述所有设置后,重新启动 GNS3 虚拟机。

4.4 安装GNS3 VM client

GNS3 VM client安装在个人计算机中,直接使用准备的EXE文件安装即可。安装完成之后用于远程连接GNS3 VM Server。完成镜像导入、网络拓扑创建以及基础配置等操作。

打开GNS3 client,点击edit,选择preferences,如下:

选择preferences

选择server,并设置host及user/passward,如下:

设置host及user/passward

4.5 导入vAsterNOS镜像文件

打开GNS3 client,选择file-new blank project,如下

选择file-new blank project

输入项目名称,如下所示:

输入项目名称

然后选择 file-import appliance 并导入 vAsterNos 镜像配置文件,如下所示:

导入镜像配置文件

选择要导入的镜像配置文件,如下所示:

选择镜像文件

然后选择安装到主server,如下所示:

安装到主Server

然后检查镜像文件是否匹配

检查镜像文件

然后点击next,等待导入完成即可。 新导入的vAsterNos系统,默认用户名密码为admin/asteros. 需要说明的是Asterfusion-vAsterNOS.gns3a和vAsterNOS-V3.1.img文件需放在同一路径下。

等待导入

4.6 为vAsterNOS分配资源和导入图标

将准备好的asterfusion-vAsterNOS.svg文件,通过scp等方式上传到GNS3 VM Server相关目录中,文件路径:/home/gns3/GNS3/symbols/asterfusion-vAsterNOS.svg。

然后在GNS3 client端选择使用该图标文件,如下图,在左侧红框内找到vAsterNos设备

选择图标

然后右键,选择configure template

选择configure template

在symbol选择browse,如下

在symbol选择browse

选择 vAsterNOS 图标文件,如下所示:

选择图标文件

同时,在该界面配置cpu核数及内存容量,如下:

配置cpu核数及内存容量

至此,vAsterNOS的导入工作已经完成,用户可以正常使用。

4.7 vAsterNOS的使用

拖出vAsterNOS并右键单击,会出现以下界面,您可以启动或停止设备,并可以通过custom console,调出配置界面,如下:

拖出vAsterNOS并右键单击

输入用户名和密码admin/asteros,开始探索vAsterNOS。

输入用户名和密码

4.8 安装Centos

组网过程中需要用到终端进行数据传输试验,以验证网络配置是否正确,所以需要再GNS3 vm server上安装centos程序,安装过程与vAsterNos类似,只需将centos镜像文件导入即可。需要说明的是,如果使用星融元提供的centos镜像,其默认用户名和密码为:root/ yx979150

5 验证 vAsterNOS 设备运行状态

我们组建了一个简单的网络来验证设备转发数据状态是否正常。网络拓扑如下:

网络拓扑

将一台vAsterNos设备及两台server设备链接,分别配置不同网段的ip地址并配置静态路由,用server-1 ping server-2,能够ping通,说明三台设备运行正常。

点击了解Asterfusion CX-N数据中心交换机

如有其它问题,请填写右侧需求表单联系我们

配置指导:基于LVM的xfs文件系统动态扩容

1 操作目标

本文档的目标是完成对基于LVM的xfs文件系统的动态扩容。

2 LVM基本术语

  • PV:物理卷,LVM的基本存储逻辑块。
  • VG:卷组,类似于非LVM系统中的物理磁盘,由一个或多个物理卷PV组成,可以在卷组上创建多个LV。
  • LV:逻辑卷:类似于非LVM系统中的磁盘分区,建立在VG上。在逻辑卷LV上可以创建文件系统。
  • PE:物理块:每一个物理卷PV被划分为称为PE的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。所以PV由大小等同的基本单元PE组成。
  • LE:逻辑块,逻辑卷LV也被划分为可被寻址的基本单位,称为LE。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

3 扩容文件系统(不添加PV)

文档中实例是私有云二期物理服务器:10.106.100.11,20G根目录扩容至2T。本次操作适用于要扩容的分区所在VG有剩余空间,不需要额外添加PV。注意:xfs支持动态扩容但不可以缩容,缩容需要格式化分区。

3.1 查看分区类型

首先确认要扩容的分区类型是LVM。

[root@controller ~]# lsblk
命令行展示

3.2 查看VG大小

查看要扩容的分区所在VG大小:3.27T,剩余3.18T。

[root@controller ~]# vgdisplay
命令行展示

3.3 扩容LV

LVroot扩容2T空间。

[root@controller ~]# lvextend -L +2T /dev/VolGroup00/LVroot
Size of logical volume VolGroup00/LVroot changed from 20.00 GiB (640 extents) to <2.02 TiB (66176 extents).
Logical volume VolGroup00/LVroot successfully resized.

3.4 写入文件系统,扩容生效

xfs文件系统使用xfs_growfs命令,如果是ext4文件系统使用resize2fs命令替换xfs_growfs命令。

[root@controller ~]# xfs_growfs /dev/VolGroup00/LVroot
命令行展示
[root@controller ~]# df -Th
命令行展示

4 扩容文件系统(添加PV)

文档中实例是Centos7虚拟机,50G根目录扩容至150G。本次操作适用于要扩容的分区所在VG没有剩余空间,需要额外添加PV。注意:xfs支持动态扩容但不可以缩容,缩容需要格式化分区

4.1 查看分区类型

首先确认要扩容的分区类型是LVM,以及新添加的硬盘sdb。

[root@controller ~]# lsblk
确认要扩容的分区类型是LVM

4.2 查看VG大小

查看要扩容的分区所在VG大小:100G,剩余4M,需要在VG中添加PV来扩容。

[root@controller ~]# vgdisplay
查看要扩容的分区所在VG大小

4.3 新建分区

对sdb硬盘分区。

[root@controller ~]# fdisk /dev/sdb
对sdb硬盘分区

4.4 格式化新分区

把sdb1分区格式化为xfs文件系统。

[root@controller ~]# mkfs.xfs /dev/sdb1
命令行展示

4.5 扩容VG卷组

将格式化后的sdb1扩容到VGcentos中。

[root@controller ~]# vgextend centos /dev/sdb1
将格式化后的sdb1扩容到VGcentos中
[root@controller ~]# vgs
命令行展示

4.6 扩容LV

LVroot扩容100G空间

[root@controller ~]# lvextend -L +100G /dev/centos/root
LVroot扩容100G空间

4.7 写入文件系统,扩容生效

xfs文件系统使用xfs_growfs命令,如果是ext4文件系统使用resize2fs命令替换xfs_growfs命令。

[root@controller ~]# xfs_growfs /dev/centos/root
xfs文件系统使用xfs_growfs命令
[root@controller ~]# df -Th
替换xfs_growfs命令

如有其它问题,请填写右侧需求表单联系我们。www.asterfusion.com

配置指导:整合 OpenStack 与 Kubernetes 网络

整合 OpenStack 与 Kubernetes 网络

1 目标

本文的目标是通过安装配置Kuryr-Kubernetes组件,实现OpenStack的网络和Kubernetes的网络整合,实现统一管理。
部署过程中所涉及到的设备、接口及管理网口的IP地址如下表所示:

部署过程中所涉及到的设备、接口及管理网口的IP地址如下表所示:

设备名称IP地址备注
K8s-master192.168.4.100Master节点
K8s-node1192.168.4.101Node节点
K8s-node2192.168.4.103Node节点
Openstack-controller192.168.4.154控制节点、网络节点
Openstack-compute1192.168.4.155计算节点
Openstack-compute2192.168.4.156计算节点

表1:设备管理口IP及组件列表

2 硬件与软件环境

部署环境中涉及到的硬件和软件如表2和表3所示:

名称型号硬件指标数量备注
服务器CPU:至少2核
内存:最低2
磁盘:不少于20G
6

表2:硬件环境

软件版本备注
操作系统Centos7.6安装时选择Compute Node 模式
OpenStackstein
Kubernetes1.18.0
DockerDocker-ce19.03
Etcd3.3.11

表3:软件环境

在整合之前,需要提前安装好OpenStack和Kubernetes。

3 Kuryr-Kubernetes简介

Kuryr-Kubernetes是一个用Python编写的OpenStack项目,它作为一个容器网络接口(CNI)插件,通过使用OpenStack Neutron和Octavia为Kubernetes pods提供网络。这个项目经过了实验阶段,成为OpenStack Queens版本(第17版)中完全支持的OpenStack生态系统项目。

Kuryr-Kubernetes的主要优点之一是不需要在OpenStack和Kubernetes中使用多个软件定义网络(SDN)进行网络管理。它还解决了在OpenStack云中运行Kubernetes集群时使用网络数据包双重封装的问题。使用Calico进行Kubernetes网络,使用Neutron进行Kubernetes集群的虚拟机(VM)网络。使用Kuryr-Kubernetes,只需使用一个sdn-Neutron,就可以为运行这些pod和vm提供连接。

还可以在裸机节点上运行Kuryr-Kubernetes作为普通的OpenStack服务。这样,可以在Kubernetes pod和OpenStack VM之间提供互连,即使这些集群是分开的,只需将Neutron-agent和Kuryr-Kubernetes放在Kubernetes节点上即可。

Kuryr-Kubernetes由三部分组成:

  • kuryr-controller观察Kubernetes资源,决定如何将它们转换为OpenStack资源,并创建这些资源。有关OpenStack资源的信息将保存到相应Kubernetes资源的注释中。
  • kuryr-cni是由CNI运行的可执行文件,它将调用传递给kuryr-daemon。
  • kuryr-daemon应该在每个Kubernetes节点上运行。它监视在主机上创建的pod,当CNI请求进入时,根据pod注释中包含的Neutron端口连接pod。

Kuryr-Kubernetes 支持两种典型场景:

  • 第一种:单独的 Kubernetes 集群 和 OpenStack环境,Kubernetes node 与 nova compute node 二层互通,在每个 Kubernetes node 上需要安装 neutron agent,实现 pod 与 vm 通信 。
Kubernetes 和 OpenStack独立部署网络集成
图1:Kubernetes 和 OpenStack独立部署网络集成
  • 第二种:Kubernetes 部署在vm中。即 OpenStack环境中创建 vm,在 vm 中安装 Kubernetes 集群,vm 中的 pod 与其他vm通信。典型的应用就是在 magnum 实现租户的 pod 能够访问自己vm。需要在 Kubernetes vm中安装Kuryr-controller 和Kuryr-cni,利用 neutron 的 trunk port 功能实现 vm中的 pod 跟 OpenStack环境中其他 vm 通信。
运行在OpenStack之上的Kubernetes与OpenStack网络集成
图2:运行在OpenStack之上的Kubernetes与OpenStack网络集成

本文主要实现第一种集成。

4 安装步骤

4.1 K8s各节点安装Neutron agent组件

  • 安装Neutron服务,并编辑配置文件。
[root@localhost  ~]# yum -y install openstack-neutron-openvswitch ebtables ipset -y
[root@localhost  ~]# vi /etc/neutron/neutron.conf
[DEFAULT]
state_path = /var/lib/neutron
auth_strategy = keystone
transport_url = rabbit://openstack:tera123@192.168.4.154
[keystone_authtoken]
www_authenticate_uri = http://192.168.4.154:5000
auth_url = http://192.168.4.154:5000
memcached_servers = 192.168.4.154:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = tera123
[oslo_concurrency]
lock_path = $state_path/lock

[root@localhost  ~]# vi /etc/neutron/plugins/ml2/openvswitch_agent.ini
[ovs]
local_ip  =  192.168.4.100
[agent]
tunnel_types  =  vxlan
l2_population  =  True
prevent_arp_spoofing = True
[securitygroup]
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver

[root@localhost  ~]# vi /etc/nova/nova.conf
[neutron]
url=http://192.168.4.154:9696
auth_type=password
auth_url=http://192.168.4.154:5000
project_name=service
project_domain_name=default
username=neutron
user_domain_name = default
password=tera123
region_name=RegionOne
  • 启动Neutron服务
[root@localshot  ~]# systemctl start neutron-openvswitch-agent
[root@localshot  ~]# systemctl enable neutron-openvswitch-agent
  • 验证Neutron网络服务(OpenStack控制节点)

验证Neutron agent启动状态

验证Neutron agent启动状态

4.2 准备OpenStack中K8S所需项⽬、⽤户及⽹络信息

创建K8S所需资源可以在dashboard中进行,也可以直接通过命令行操作

  • 创建K8S专⽤的项⽬,⽤户信息:
#openstack project create k8s
#openstack user create --password tera123 k8s-user
#openstack role add --project k8s  --user k8s-user admin
  • 在K8S项⽬下创建pod ⽹络⼦⽹及service ⽹络⼦⽹:
#openstack network create pod_network
#openstack network create service_network
#openstack subnet create --ip-version 4 --subnet-range 10.1.0.0/16  --network pod_network pod_subnet
#openstack subnet create --ip-version 4 --subnet-range 10.2.0.0/16 --network service_network service_subnet

pod-subnet和service-subnet的ip网段要分别跟k8s创建的时候初始化的pod-network-cidr和service-cidr一致

  • 在K8S项⽬路由器连接pod⽹络⼦⽹与service⽹络⼦⽹:
#openstack router create k8s-router
#openstack router add subnet k8s-router pod_subnet
#openstack router add subnet k8s-router service_subnet
  • 在K8S项⽬创建pod安全组:
#openstack security group create service_pod_access_sg
#openstack security group rule create --remote-ip 10.1.0.0/16 --ethertype IPv4 --protocol tcp service_pod_access_sg
#openstack security group rule create --remote-ip 10.2.0.0/16 --ethertype IPv4 --protocol tcp service_pod_access_sg

注意,这里的创建的project id,user name,password,pod subnet id,service subnet id,security group id均需要记录,用于后期配置kuryr controller。

4.3 kubeadm安装Kubernetes

以下操作在master节点和work 节点均执行。

  • 关闭虚拟内存
#swapoff -a
#sed -i  ‘s/.*swap.*/#&/’ /etc/fstab
  • 配置转发参数
# cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
net.ipv4.ip_forward = 1
EOF
# sysctl --system
  • 配置kubernetes阿里源
#cat <<EOF>/etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg 
EOF
  • 设置docker源
# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -P /etc/yum.repos.d/
  • 安装docker
#yum install docker-ce-19.03.12  -y
  • 启动docker
# systemctl daemon-reload
# systemctl enable docker
# systemctl start docker
  • 安装kubernetes相关组件
# yum install kubelet-1.18.0  kubeadm-1.18.0  kubectl-1.18.0  kubernetes-cni-0.8.6  -y
#systemctl enable kubelet && systemctl start kubelet
  • 开启IPVS

加载ipvs内核,使node节点kube-proxy支持ipvs代理规则。

# modprobe ip_vs
modprobe ip_vs_rr 
  modprobe ip_vs_wrr
  modprobe ip_vs_sh

 cat <<EOF >> /etc/rc.local
modprobe ip_vs
  modprobe ip_vs_rr
  modprobe ip_vs_wrr
  modprobe ip_vs_sh
 EOF

以下在Master节点操作

#kubeadm init --apiserver-advertise-address=192.168.4.100 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --service-cidr=10.2.0.0/16  --pod-network-cidr=10.1.0.0/16

装完后输出内容如下:

输出内容

然后根据提示执行如下操作,并相关work节点加入。

# mkdir -p $HOME/.kube
# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# chown $(id -u):$(id -g) $HOME/.kube/config

以下在Work节点操作

使用在master节点安装成功后保存的hubedem join命令,添加node节点。

# kubeadm join 192.168.4.100:6443 --token x8cl7c.ev3xby1nad04aysi \
    --discovery-token-ca-cert-hash sha256:d9c6234623e26f87d308d07433f0d6d82f62c783037dd74f522f6f3a0b3a88bc
  • 安装flannel

下载kube-flannel.yml

内容如下

#wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

修改几处地方:

“Network”: “10.244.0.0/16″, 改为”Network”: “10.1.0.0/16”,

在所有containers下面的args:添加- –iface=ens192 ,即出口网卡

然后执行

#kubectl apply -f kube-flannel.yml
  • 安装dashboard

下载recommended.yaml

#wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.3/aio/deploy/recommended.yaml

修改

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  type: NodePort
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30001
  selector:
    k8s-app: kubernetes-dashboard

spec添加type:NodePort

Ports添加nodePort: 30001

然后执行

#kubectl apply -f recommended.yaml
  • 设置代理

为了方便让 Kuryr Controller 简单取得 K8s API Server

kubectl proxy --port=8080 --accept-hosts='.*' --address='0.0.0.0'

4.4 安装配置kur

  • 安装kuryr-k8s-controller(k8s的master节点)

安装

#mkdir kuryr-k8s-controller
# cd kuryr-k8s-controller
# virtualenv env
# git clone https://git.openstack.org/openstack/kuryr-kubernetes -b stable/rocky
# . env/bin/activate
# pip install -e kuryr-kubernetes

如果始终无法编译通过,可以跳过. env/bin/activate,直接执行pip install -e kuryr-kubernetes

配置

#cd kuryr-kubernetes
# ./tools/generate_config_file_samples.sh
# mkdir /etc/kuryr
# cp etc/kuryr.conf.sample /etc/kuryr/kuryr.conf

这里需要修改配置文件kuryr.conf。具体配置项需根据上文中在openstack内创建的用于K8S环境的信息填写。

[DEFAULT]
use_stderr = true
bindir = /usr/libexec/kuryr
[kubernetes]
api_root = http://192.168.4.100:8080
[neutron]
# 需根据上文章节中创建的项目、用户信息填写
auth_url = http://192.168.4.154:5000/v3
username = k8s-user
user_domain_name = Default
password = tera123
project_name = k8s
project_domain_name = Default
auth_type = password

[neutron_defaults]
ovs_bridge = br-int
# 下面的网络资源ID需根据上文章节中创建的资源ID填写
pod_security_groups = 2d572ef8-2e90-4a5b-a515-9e32fe07a7c4
pod_subnet = f3c34801-6da3-43b9-a2bf-947c7da4ed89
project = 02461bcb1d5f490ca4fdb99b7a32914e
service_subnet = b15f4105-3f12-4976-a83a-d2174a42622a

运行

#kuryr-k8s-controller --config-file /etc/kuryr/kuryr.conf -d
  • 安装kuryr-cni

安装

需提前安装gcc pip python-devel

# mkdir kuryr-k8s-cni
#cd kuryr-k8s-cni
#virtualenv env
#. env/bin/activate
#git clone https://git.openstack.org/openstack/kuryr-kubernetes -b stable/rocky
#pip install -e kuryr-kubernetes

如果始终无法编译通过,可以跳过. env/bin/activate,直接执行pip install -e kuryr-kubernetes

配置

#cd kuryr-kubernetes
#./tools/generate_config_file_samples.sh
#mkdir /etc/kuryr
#cp etc/kuryr.conf.sample /etc/kuryr/kuryr.conf

此处需要修改配置文件kuryr.conf。

[DEFAULT]
use_stderr = true
bindir = /usr/libexec/kuryr
lock_path=/var/lib/kuryr/tmp

 [kubernetes]
# 填k8s master的IP
api_root = http://192.168.4.100:8080
  • 修改cni配置

执行下述命令。

#mkdir -p /opt/cni/bin
#ln -s $(which kuryr-cni) /opt/cni/bin/

由于前文安装k8s时已经安装过flannel,这里/opt/cni/bin目录已经存在。新增/etc/cni/net.d/10-kuryr.conf文件,按如下信息。

修改配置文件,同时删除同目录下flannel的配置文件。

{
 “cniVersion”: “0.3.1”,
 “name”: “kuryr”,
 “type”: “kuryr-cni”,
 “kuryr_conf”: “/etc/kuryr/kuryr.conf”,
 “debug”: true
 }

运行

# kuryr-daemon --config-file /etc/kuryr/kuryr.conf -d

5 结果验证

在OpenStack创建一个VM,挂载到pod_network下面,在k8s运行一个测试示例,创建一个Nginx,看是否可以相互ping通:

  • 创建nginx.yaml
[root@k8s-master~]#vi nginx.yaml 
# API 版本号
apiVersion: apps/v1
# 类型,如:Pod/ReplicationController/Deployment/Service/Ingress
kind: Deployment
metadata:
  # Kind 的名称
  name: nginx-app
spec:
  selector:
    matchLabels:
      # 容器标签的名字,发布 Service 时,selector 需要和这里对应
      app: nginx
  # 部署的实例数量
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      # 配置容器,数组类型,说明可以配置多个容器
      containers:
      # 容器名称
      - name: nginx
        # 容器镜像
        image: nginx:1.17
        # 只有镜像不存在时,才会进行镜像拉取
        imagePullPolicy: IfNotPresent
        ports:
        # Pod 端口
        - containerPort: 80
  • 创建pods:
[root@k8s-master~]#kubectl  apply -f nginx.yaml
  • 查看pod详细信息:
pod详细信息
  • 查看VM详细信息:
VM详细信息
  • 在VM上ping pod

6 参考资料

如有其它问题,请填写右侧需求表单联系我们。www.asterfusion.com

配置指导:使用Nginx部署YUM源服务器

什么是YUM?

YUM是Yellow dog Updater, Modified的简写,它是由杜克大学团队修改Yellow Dog Linux的Yellow Dog Updater开发而成。

YUM源本质上是一个包含软件包的仓库, 其中包括了软件包的元数据信息,如软件包的版本、依赖关系等等。 管理员可以通过配置服务器上的YUM源来轻松管理服务器上的软件包,并且从中选择需要安装的软件包。本篇文章将提供一个使用Nginx配置自定义YUM源的操作实例。

虽然 YUM 最初是为 Linux 创建的,但它已被移植到许多其他操作系统上。

使用Nginx部署YUM源服务器流程

1 YUM源服务器使用场景

  • 服务器处于无网环境
  • 缓解公司网络带宽压力
  • 加快服务器软件安装部署

2 YUM源服务器必备条件

  • YUM源服务器能够自动定期的更新YUM源
  • 使用CentOS官方标准源保持更新
  • Linux客户端可以直接使用YUM源

3 YUM源服务器配置

主机系统IP地址软件
yum repoCentos7.4192.168.4.188Nginx+createrepo

服务器具体配置要求如下:

  • 至少2G内存
  • 至少2核CPU
  • 至少100G硬盘

4 环境准备

4.1 关闭SELinux

SELinux不关闭的情况下无法实现,会限制客户机和YUM源服务器的通信。

[root@yum~]# setenforce 0
[root@yum ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

4.2 关闭防火墙

防止安装时出现各个组件的端口不能访问的问题。

[root@yum ~]# systemctl stop firewalld && systemctl disable firewalld                          

5 部署YUM源服务器

部署YUM源的必要服务,并且修改相关服务的配置文件。

5.1 部署Nginx服务

我们使用Nginx配置YUM源服务器。

[root@yum ~]# yum -y install nginx
[root@yum ~]# vi /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
    worker_connections 1024;
}
http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;
    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;
    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;
        location / {
        }
	    autoindex on;
	autoindex_exact_size on;
 	    autoindex_localtime on;
        error_page 404 /404.html;
        location = /404.html {
        }
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }
} 
[root@yum ~]# systemctl start nginx
[root@yum ~]# systemctl enable nginx

5.2 在Nginx建立目录

创建yum源目录。

[root@yum ~]# cd /usr/share/nginx/html
[root@yum html]# mkdir -p centos/asterfusion/7/7.4/x86_64
[root@yum html]# tree
├── html
│   ├── 404.html
│   ├── 50x.html
│   ├── centos
│   │   └── asterfusion
│   │       └── 7
│   │           ├── 7.4
│   │               ├── x86
│   │               └── x86_64

5.3 修改Nginx HTML

自定义yum源页面。本篇使用的是星融元Asterfusion自定义YUM源。

[root@yum ~]# cat /usr/share/nginx/html/index.html
        <h1>Welcome to <strong>Asterfusion</strong> on Internet!</h1>
    <div class="content">
    <a href="http://192.168.4.188/centos/asterfusion">Asterfusion Yum Repo</a><br/>
    <br/>
   </div
[root@yum ~]# systemctl restart nginx

5.4 验证yum源

使用服务器IP访问浏览器。

5.5 同步官方yum源

同步官方CentOS7源到本地,如果出现同步后没有对应的文件和目录的情况,检查本地的repo文件是否有错误。

[root@yum x86_64]# pwd
/usr/share/nginx/html/centos/asterfusion/7/7.4/x86_64
[root@yum x86_64]# yum -y install yum-utils createrepo
[root@yum x86_64]# reposync --repoid base  -p ./
[root@yum x86_64]# reposync --repoid epel  -p ./
[root@yum x86_64]# reposync --repoid extras  -p ./
[root@yum x86_64]# reposync --repoid updates  -p ./
[root@yum x86_64]# createrepo -p /usr/share/nginx/html/centos/asterfusion/7/7.4/x86_64/base
[root@yum x86_64]# createrepo -p /usr/share/nginx/html/centos/asterfusion/7/7.4/x86_64/epel
[root@yum x86_64]# createrepo -p /usr/share/nginx/html/centos/asterfusion/7/7.4/x86_64/extras
[root@yum x86_64]# createrepo -p \
/usr/share/nginx/html/centos/asterfusion/7/7.4/x86_64/updates

5.6 创建yum repo

部署优先级控制工具,可以控制客户端优先使用优先级较高的yum源,创建yum源repo文件。\

[root@yum x86_64]# yum install yum-plugin-priorities -y 
[root@yum x86_64]# cd /etc/yum.repos.d/
[root@yum yum.repos.d]# mkdir bak
[root@yum yum.repos.d]# mv ./* bak
[root@yum yum.repos.d]# vi Asterfusion.repo
[Asterfusion-base]
name=asterfusion-base
baseurl=http://192.168.4.188/centos/asterfusion/7/7.4/x86_64/base
gpgcheck=0
enable=1
priority=1
[Asterfusion-epel]
name=asterfusion-epel
baseurl=http://192.168.4.188/centos/asterfusion/7/7.4/x86_64/epel
gpgcheck=0
enable=1
priority=1
[Asterfusion-extras]
name=asterfusion-extras
baseurl=http://192.168.4.188/centos/asterfusion/7/7.4/x86_64/extras
gpgcheck=0
enable=1
priority=1
[Asterfusion-updates]
name=asterfusion-updates
baseurl=http://192.168.4.188/centos/asterfusion/7/7.4/x86_64/updates
gpgcheck=0
enable=1
priority=1

部署优先级控制工具,可以控制客户端优先使用优先级较高的yum源,创建yum源repo文件。

[root@yum x86_64]# yum install yum-plugin-priorities -y 
[root@yum x86_64]# cd /etc/yum.repos.d/
[root@yum yum.repos.d]# mkdir bak
[root@yum yum.repos.d]# mv ./* bak
[root@yum yum.repos.d]# vi Asterfusion.repo
[Asterfusion-base]
name=asterfusion-base
baseurl=http://192.168.4.188/centos/asterfusion/7/7.4/x86_64/base
gpgcheck=0
enable=1
priority=1
[Asterfusion-epel]
name=asterfusion-epel
baseurl=http://192.168.4.188/centos/asterfusion/7/7.4/x86_64/epel
gpgcheck=0
enable=1
priority=1
[Asterfusion-extras]
name=asterfusion-extras
baseurl=http://192.168.4.188/centos/asterfusion/7/7.4/x86_64/extras
gpgcheck=0
enable=1
priority=1
[Asterfusion-updates]
name=asterfusion-updates
baseurl=http://192.168.4.188/centos/asterfusion/7/7.4/x86_64/updates
gpgcheck=0
enable=1
priority=1

5.7 重新建立缓存

清除本地缓存和重新建立缓存,检查yum源中的软件包。

[root@yum ~]# yum clean all
[root@yum ~]# yum makecache
[root@yum ~]# yum repolist

使用Nginx部署YUM源服务器-截图1

5.8 测试安装速度

使用本地源安装mariadb数据库,安装速度大大加快。

[root@yum ~]# yum install -y mariadb-server
使用Nginx部署YUM源服务器-截图2

5.9 配置yum源自动更新

在计划任务中加入yum源更新脚本,每周六18:30自动更新CentOS7.4 yum源。

[root@yum home]# vi updateyumrepo.sh
#!/bin/bash
reposync -n --repoid=extras --repoid=updates --repoid=base --repoid=epel -p \
/usr/share/nginx/html/centos/asterfusion/7/7.4/x86_64/
[root@yum home]# crontab -e
30 18 * * 6 /bin/bash /home/updateyurepo.sh
[root@yum home]# crontab -l
30 18 * * 6 /bin/bash /home/updateyurepo.sh

更多相关内容,请访问:A-Lab


星融元(Asterfusion)是领先的开放网络解决方案提供商,产品包括网络操作系统、数据中心交换机、智算交换机、园区交换机、NPB、DPU网卡和P4可编程硬件平台等。为行业企业、数据中心和云运营商提供基于通用解耦硬件和SONiC软件框架的全场景交钥匙网络解决方案,帮助用户构建AI时代中立、透明,易于运维、高性价比的基础网络自由选择。 www.asterfusion.com

配置指导:OpenStack Heat 部署

OpenStack Heat部署方案

1 目标与物理网络拓扑

本文主要描述在现有OpenStack(stein版)平台上如何扩展安装Heat功能组件,实验应用程序的编排服务。
涉及物理拓扑,如图1所示:

物理网络拓扑(OpenStack)
图1:物理网络拓扑

部署过程中所涉及到的设备、接口及管理网口的IP地址如下表所示:

设备名称接口IP地址备注
Switch-A管理口192.168.0.254三层交换机
Switch-B管理口192.168.4.1二层交换机
Switch-C管理口192.168.5.1二层交换机
Server-1管理口192.168.4.144/
Server-2管理口192.168.5.145/

表1:设备管理口列表

2 硬件与软件环境

部署环境中涉及到的硬件和软件如表2和表3所示:

名称型号硬件指标数量备注
服务器1、至少8G内存
2、磁盘不少于500G

2
Server-1 计算节点+存储节点
Server-2 控制节点+网络节点

表2:硬件环境

名称型号硬件指标数量备注
服务器1、至少8G内存
2、磁盘不少于500G

2
Server-1 计算节点+存储节点
Server-2 控制节点+网络节点

表3:软件环境

3 Heat简介

Heat是OpenStack提供的自动编排功能的组件,基于描述性的模板,来编排复合云应用程序。

Heat向开发人员和系统管理员提供了一种简便地创建和管理一批相关的OpenStack资源的方法,并通过有序且可预测的方式对其进行资源配置和更新。

用户可以使用Heat的示例模板或自己创建模板来描述OpenStack资源以及应用程序运行时所需的任何相关依赖项或运行时参数。

当设置完成后,可通过按授权控制、可预测的方式修改和更新OpenStack资源。

用户可以通过OpenStack管理控制台、Heat命令行工具或 API对模板及其相关的资源集进行设置和更新。

引入Heat的两个原因:

  • 更快更有效的管理OpenStack的资源

云平台系统在相对比较稳定的情况下,管理成本逐渐变成首要的解决问题。云上自动化能力是一个云平台的刚需,可以有效降低维护难度。

OpenStack原生提供命令行和 Horizon 来供用户管理资源。然而命令行和在浏览器中的点击,费时费力,不利于用户使用 Openstack 来进行大批量的管理以支撑 IT 应用。 Heat在这种情况下应运而生。
Heat 采用了模板方式来设计或者定义编排。为方便用户使用,Heat 还提供了大量的模板例子,使用户能够方便地得到想要的编排。

  • 更小的研发成本

引入Heat,对于不了解OpenStack的研发者来说,可以更快的接入现有的业务系统。开发者更关心的是授权认证和对虚拟资源的增删改,而对于底层的状态并不用太多了解。

下面是Heat的架构组成:

Heat架构图
图2: Heat架构图

主要概念:

  • heat command-line client

CLI通过与heat-api通信,来调用API实现相关功能。终端开发者可以直接使用编排REST API。

  • heat-api

一个OpenStack本地REST API,通过RPC,把发送来的API请求在发给heat-engine。

heat-api,提供了原生restful API对外使用。用户对API的调用,由heat-api处理之后,最终通过RPC传递给Heat-engine来进一步处理。

  • heat-api-cfn

组件提供了Amazon style 的查询 API,可以完全兼容于Amazon的CloudFormation,对于API的请求同heat-api类似,处理之后,通过RPC传递给heat-engine进一步处理。

  • heat-engine

heat-engine是heat中的核心模块,处理主要的逻辑业务。

此模块提供heat最主要的功能,执行模板内容,最终完成应用系统的创建和部署,并把执行结果返回给API调用者。 当 heat engine拿到请求后,会把请求解析为各种类型的资源,每种资源都对应OpenStack其它的服务客户端,然后通过发送 REST 的请求给其它服务。通过如此的解析和协作,最终完成请求的处理。

  • heat-cfntools

独立于heat组件的一个的工具,需要单独下载。这个工具用来完成虚拟机实例内部的操作配置任务。在创建虚拟机镜像时,需要在镜像中安装heat-cfntools工具。

4 安装步骤

[root@controller ~] 表示在控制节点上执行
[root@compute ~] 表示在计算节点上执行

4.1 创建数据库

  • 创建数据库并授权:
[root@controller ~]# mysql -uroot -p
MariaDB [(none)]> CREATE DATABASE heat;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON heat.* TO ‘heat’@'localhost' \
  IDENTIFIED BY 'HEAT_PASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON heat.* TO ‘heat’@'%' \
  IDENTIFIED BY 'HEAT_PASS';

注:帐号密码根据自己的情况修改

4.2 创建openstack用户、服务凭据、API端点:

在安装和配置Heat之前,必须创建用户、服务凭据和API端点:

[root@controller ~]# . admin-openrc
[root@controller ~]# openstack user create --domain default --password-prompt heat
[root@controller ~]# openstack role add --project service --user heat admin
[root@controller ~]# openstack service create --name heat \
  --description "Orchestration" orchestration
[root@controller ~]# openstack service create --name heat-cfn \
  --description "Orchestration"  cloudformation 
[root@controller ~]#openstack endpoint create --region RegionOne \
  orchestration public http://controller:8004/v1/%\(tenant_id\)s
[root@controller ~]#openstack endpoint create --region RegionOne \
  orchestration internal http://controller:8004/v1/%\(tenant_id\)s 
[root@controller ~]# openstack endpoint create --region RegionOne \
  orchestration admin http://controller:8004/v1/%\(tenant_id\)s

为了管理栈,在认证服务中Orchestration需要更多信息。为了添加这些信息,完成下面的步骤

  • 创建 heat域
[root@controller ~]#openstack domain create --description "Stack projects and users" heat
  • 在heat域中创建heat_domain_admin用户
[root@controller ~]# openstack user create --domain heat --password-prompt heat_domain_admin
  • 添加admin角色到heat域中的heat_domain_admin用户:
[root@controller ~]# openstack role add --domain heat --user heat_domain_admin admin
  • 创建 heat_stack_owner角色:
[root@controller ~]# openstack role create heat_stack_owner

添加heat_stack_owner角色到demo项目和用户:

[root@controller ~]# openstack role add --project demo --user demo heat_stack_owner
  • 创建 heat_stack_user 角色:
[root@controller ~]# openstack role create heat_stack_user

4.3 在controller节点上安装Heat服务

  • 安装软件包:
[root@controller ~]# yum install openstack-heat-api openstack-heat-api-cfn \
  openstack-heat-engine python-heatclient
  • 编辑配置文件 /etc/heat/heat.conf
[root@controller ~]#vi /etc/heat/heat.conf
[DEFAULT]
transport_url = rabbit://openstack:tera123@controller
heat_metadata_server_url = http://controller:8000
heat_waitcondition_server_url = http://controller:8000/v1/waitcondition
stack_domain_admin = heat_domain_admin
stack_domain_admin_password = heat_domain_admin
stack_user_domain_name = heat
verbose = False
[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = tera123
[database]
connection = mysql+pymysql://heat:HEAT_PASS@controller/heat
[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:5000
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = heat
password = heat
[trustee]
auth_plugin = password
auth_url = http://controller:5000
username = heat
password = heat
user_domain_id = default
[clients_keystone]
auth_uri = http://controller:5000
[ec2authtoken]
auth_uri = http://controller:5000/v3
  • 同步数据库
[root@controller ~]# su -s /bin/sh -c "heat-manage db_sync" heat
  • 启动 Orchestration 服务并将其设置为随系统启动
[root@controller ~]# systemctl enable openstack-heat-api.service \
  openstack-heat-api-cfn.service openstack-heat-engine.service
[root@controller ~]# systemctl start openstack-heat-api.service \
  openstack-heat-api-cfn.service openstack-heat-engine.service

5 结果验证

  • 列出服务组件,以验证是否成功启动并注册了每个进程

[root@controller ~]#source admin-openrc.sh
[root@controller ~]#heat service-list

6 参考资料

https://docs.openstack.org/heat/stein/install/install-rdo.html

如有其它问题,请填写右侧需求表单联系我们。www.asterfusion.com

配置指导:YUM源服务器搭建

YUM源服务器搭建

1 YUM源服务器使用场景

  • 服务器处于无网环境
  • 缓解公司网络带宽压力
  • 加快服务器软件安装部署

2 YUM源服务器必备条件

  • YUM源服务器能够自动定期的更新yum源
  • 使用CentOS官方标准源保持更新
  • Linux客户端可以直接使用yum源

3 YUM源服务器配置

主机系统IP地址软件
yum repoCentos7.4192.168.4.188Nginx+createrepo

服务器具体配置要求如下:

  • 至少2G内存
  • 至少2核CPU
  • 至少100G硬盘

4 环境准备

4.1 关闭SELinux

SELinux不关闭的情况下无法实现,会限制客户机和YUM源服务器的通信。

[root@yum~]# setenforce 0
[root@yum ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

4.2 关闭防火墙

防止安装时出现各个组件的端口不能访问的问题。

[root@yum ~]# systemctl stop firewalld && systemctl disable firewalld                          

5 部署YUM源服务器

部署YUM源的必要服务,并且修改相关服务的配置文件。

5.1 部署Nginx服务

我们使用Nginx配置YUM源服务器。

[root@yum ~]# yum -y install nginx
[root@yum ~]# vi /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
    worker_connections 1024;
}
http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;
    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;
    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;
        location / {
        }
	    autoindex on;
	autoindex_exact_size on;
 	    autoindex_localtime on;
        error_page 404 /404.html;
        location = /404.html {
        }
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }
} 
[root@yum ~]# systemctl start nginx
[root@yum ~]# systemctl enable nginx

5.2 在Nginx建立目录

创建yum源目录。

[root@yum ~]# cd /usr/share/nginx/html
[root@yum html]# mkdir -p centos/asterfusion/7/7.4/x86_64
[root@yum html]# tree
├── html
│   ├── 404.html
│   ├── 50x.html
│   ├── centos
│   │   └── asterfusion
│   │       └── 7
│   │           ├── 7.4
│   │               ├── x86
│   │               └── x86_64

5.3 修改Nginx HTML

自定义yum源页面。

[root@yum ~]# cat /usr/share/nginx/html/index.html
        <h1>Welcome to <strong>Asterfusion</strong> on Internet!</h1>
    <div class="content">
    <a href="http://192.168.4.188/centos/asterfusion">Asterfusion Yum Repo</a><br/>
    <br/>
   </div
[root@yum ~]# systemctl restart nginx

5.4 验证yum源

使用服务器IP访问浏览器。

5.5 同步官方yum源

同步官方CentOS7源到本地,如果出现同步后没有对应的文件和目录的情况,检查本地的repo文件是否有错误。

[root@yum x86_64]# pwd
/usr/share/nginx/html/centos/asterfusion/7/7.4/x86_64
[root@yum x86_64]# yum -y install yum-utils createrepo
[root@yum x86_64]# reposync --repoid base  -p ./
[root@yum x86_64]# reposync --repoid epel  -p ./
[root@yum x86_64]# reposync --repoid extras  -p ./
[root@yum x86_64]# reposync --repoid updates  -p ./
[root@yum x86_64]# createrepo -p /usr/share/nginx/html/centos/asterfusion/7/7.4/x86_64/base
[root@yum x86_64]# createrepo -p /usr/share/nginx/html/centos/asterfusion/7/7.4/x86_64/epel
[root@yum x86_64]# createrepo -p /usr/share/nginx/html/centos/asterfusion/7/7.4/x86_64/extras
[root@yum x86_64]# createrepo -p \
/usr/share/nginx/html/centos/asterfusion/7/7.4/x86_64/updates

5.6 创建yum repo

部署优先级控制工具,可以控制客户端优先使用优先级较高的yum源,创建yum源repo文件。\

[root@yum x86_64]# yum install yum-plugin-priorities -y 
[root@yum x86_64]# cd /etc/yum.repos.d/
[root@yum yum.repos.d]# mkdir bak
[root@yum yum.repos.d]# mv ./* bak
[root@yum yum.repos.d]# vi Asterfusion.repo
[Asterfusion-base]
name=asterfusion-base
baseurl=http://192.168.4.188/centos/asterfusion/7/7.4/x86_64/base
gpgcheck=0
enable=1
priority=1
[Asterfusion-epel]
name=asterfusion-epel
baseurl=http://192.168.4.188/centos/asterfusion/7/7.4/x86_64/epel
gpgcheck=0
enable=1
priority=1
[Asterfusion-extras]
name=asterfusion-extras
baseurl=http://192.168.4.188/centos/asterfusion/7/7.4/x86_64/extras
gpgcheck=0
enable=1
priority=1
[Asterfusion-updates]
name=asterfusion-updates
baseurl=http://192.168.4.188/centos/asterfusion/7/7.4/x86_64/updates
gpgcheck=0
enable=1
priority=1

部署优先级控制工具,可以控制客户端优先使用优先级较高的yum源,创建yum源repo文件。

[root@yum x86_64]# yum install yum-plugin-priorities -y 
[root@yum x86_64]# cd /etc/yum.repos.d/
[root@yum yum.repos.d]# mkdir bak
[root@yum yum.repos.d]# mv ./* bak
[root@yum yum.repos.d]# vi Asterfusion.repo
[Asterfusion-base]
name=asterfusion-base
baseurl=http://192.168.4.188/centos/asterfusion/7/7.4/x86_64/base
gpgcheck=0
enable=1
priority=1
[Asterfusion-epel]
name=asterfusion-epel
baseurl=http://192.168.4.188/centos/asterfusion/7/7.4/x86_64/epel
gpgcheck=0
enable=1
priority=1
[Asterfusion-extras]
name=asterfusion-extras
baseurl=http://192.168.4.188/centos/asterfusion/7/7.4/x86_64/extras
gpgcheck=0
enable=1
priority=1
[Asterfusion-updates]
name=asterfusion-updates
baseurl=http://192.168.4.188/centos/asterfusion/7/7.4/x86_64/updates
gpgcheck=0
enable=1
priority=1

5.7 重新建立缓存

清除本地缓存和重新建立缓存,检查yum源中的软件包。

[root@yum ~]# yum clean all
[root@yum ~]# yum makecache
[root@yum ~]# yum repolist

5.8 测试安装速度

使用本地源安装mariadb数据库,安装速度大大加快。

[root@yum ~]# yum install -y mariadb-server

5.9 配置yum源自动更新

在计划任务中加入yum源更新脚本,每周六18:30自动更新CentOS7.4 yum源。

[root@yum home]# vi updateyumrepo.sh
#!/bin/bash
reposync -n --repoid=extras --repoid=updates --repoid=base --repoid=epel -p \
/usr/share/nginx/html/centos/asterfusion/7/7.4/x86_64/
[root@yum home]# crontab -e
30 18 * * 6 /bin/bash /home/updateyurepo.sh
[root@yum home]# crontab -l
30 18 * * 6 /bin/bash /home/updateyurepo.sh

如有其它问题,请填写右侧需求表单联系我们。www.asterfusion.com

配置指导:OpenStack融合OpenDaylight的部署

OpenStack融合OpenDaylight的部署

1 介绍

OpenStack是流行的开源基础架构即服务项目,涵盖计算,存储和网络管理。OpenStack可以通过Modular Layer 2(ML2)北向插件将OpenDaylight用作其网络管理提供程序。OpenDaylight通过OVSDB南向插件管理OpenStack计算节点的网络流。本文分别介绍实验环境构建前准备、ODL安装、OpenStack配置、OpenStack和ODL集成等四个部分。

1.1 OpenDaylight简介

OpenDaylight(ODL)作为软件定义网络(SDN)的控制面,拥有一套模块化、可插拔灵活地控制平台作为核心,这个控制平台基于Java开发,理论上可以运行在任何支持Java的平台上,在一定程度上能够降低北向应用和南向协议的耦合性。相比于传统网络架构来说具有很多优点:

(1)传控分离,网络资源集中控制,统一调度,提高网络运行的效率.

(2)实现于数据面的解耦合,改善了传统网络升级、维护带来的难题。

(3)可以实现大规模路由,提高网络资源的利用率。

1.2 OpenStack集成OpenDaylight架构

图1:ODL与OpenStack架构图

1.3 OpenStack对接OpenDaylight原理

OpenStack是主流的云平台, ODL是主流的SDN Controller。对于这两个开源项目,在其社区中,已经提供了标准的对接接口。厂商的商用云平台一般不会改变对外的接口,所有深度开发主要局限在接口之内,以此保证不同品牌的云平台和控制器之间的兼容性。具体的对接模型如下。

对接关键就是Networking-odl插件,云平台和SDN控制器有一方需要提供这个插件,并安装到OpenStack平台上。Networking-odl包含Open Daylight Mechanism Driver和Open Daylight L3 Router Plugin。

  • Open Daylight Mechanism Driver是OpenDaylight的ML2 Mechanism Driver,通过类似REST proxy的方式实现了ML2 Mechanism Driver功能。它把Mechchanism Driver的所有调用转化成Neutron API传递给OpenDaylight,由OpenDaylight的NB REST Service(Neutron API Service)处理后返回。
  • Open Daylight L3 Router Plugin是OpenDaylight的L3 Router plugin,实现基本router、ext-gw-mode、extraroute、dvr、L3-ha等功能。Open Daylight L3 Router Plugin本身也只是实现了类似REST proxy的功能,它以现有的OpenStack L3 Router plugin为基础,封装了一层L3调用转Neutron API到ODL的功能。

云平台和SDN控制器之间的所有调用信息基本都是通过这个组件。对接完成后,便可以在云平台上依次创建网络、子网、路由、路由和子网绑定、云主机等。

2 目标与物理网络拓扑

环境物理拓扑,如图1所示:

图2:物理网络拓扑

部署过程中所涉及到的服务器管理网口的IP地址如下表所示:

设备名称接口IP地址备注
controller管理口192.168.4.145
compute管理口192.168.4.144
ODL管理口192.168.4.150

表1:服务器理口列表

3 硬件与软件环境

部署环境中涉及到的硬件和软件如表2和表3所示:

名称类型硬件指标数量备注
服务器X861.至少8G内存3
2.磁盘不少于500G
3.Server1和Server3的BIOS开启CPU嵌套虚拟化(INTEL:VT-x,AMD:AMD-V)

表2:硬件环境

软件版本备注
操作系统Centos7.7安装时选择Compute Node 模式,根目录/至少500G
OpenStackstein
ODLkaraf-0.6.4-Carbon

表3:软件环境

4 融合部署

4.1 安装前准备

进入本实验前,确保您以安装好OpenStack环境,并确保实例间可以ping通。

OpenStack环境是基于centos7.7使用stein版,本文档的参考部署是2节点集群:

  • 一个控制节点,一个计算节点。
  • 控制节点(keystone,glance,nova,neutron-server,mysql,dhcp-agent,l3-agent,metadata-agent,neutron-plugin-openvswitch-agent)
  • 计算节点(nova-compute,neutron-plugin-openvswitch-agent,cinder-volume)
  • Neutron将OVS后端和vxlan用于隧道

安装好OpenStack,连接到Horizon执行一些操作来验证它是否正常工作。要检查Neutron的配置,创建两个实例,分配公网浮动IP和私网IP,确认可以连通,并且它们之间可以互通。

4.2 安装OpenDaylight

先决条件:OpenDaylight需要Java 1.8.0和Open vSwitch> = 2.5.0

1) 安装JDK1.8

先通过-version命令查看JDK已安装情况:

[root@localhost ~]# java -version
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)Carbon

如果没有安装或版本较低,则:

[root@localhost ~]# yum install java-11-openjdk-devel.x86_64

进入安装目录确认java的路径:

[root@localhost ~]# cd /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64/

打开配置文件并在最后添加如下几行:

[root@ localhost ~]# vim /etc/profile
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64
PATH=$PATH:$JAVA_HOME/bin 
export JAVA_HOME PATH

立即生效:

[root@ localhost ~]# source /etc/profile

2) 安装Opendaylight

下载OpenDaylight Carbon,位于

https://nexus.opendaylight.org/content/groups/public/org/opendaylight/integration/distribution-karaf/0.6.4-Carbon/distribution-karaf-0.6.4-Carbon.tar.gz

解压:

[root@ localhost ~]# tar -zxvf distribution-karaf-0.6.4-Carbon.tar.gz

进入解压目录并执行:

[root@ localhost ~]# cd distribution-karaf-0.6.4-Carbon/
[root@ localhost distribution-karaf-0.6.4-Carbon]# ./bin/start
[root@ localhost distribution-karaf-0.6.4-Carbon]# ./bin/client
Apache Karaf starting up. Press Enter to open the shell now...
Logging in as karaf
________ ________ .__ .__ .__ __
\_____ \ ______ ____ ____ \______ \ _____ ___.__.| | |__| ____ | |___/ |_
/ | \\____ \_/ __ \ / \ | | \\__ \< | || | | |/ ___\| | \ __\
/ | \ |_> > ___/| | \| ` \/ __ \\___ || |_| / /_/ > Y \ |
\_______ / __/ \___ >___| /_______ (____ / ____||____/__\___ /|___| /__|
\/|__| \/ \/ \/ \/\/ /_____/ \/
Hit '<tab>' for a list of available commands
and '[cmd] --help' for help on a specific command.
Hit '<ctrl-d>' or type 'system:shutdown' or 'logout' to shutdown OpenDaylight.
opendaylight-user@root>

安装如下组件:

opendaylight-user@root>feature:install odl-netvirt-openstack odl-dlux-core odl-mdsal-apidocs opendaylight-user@root>feature:install odl-ovsdb-southbound-impl-ui odl-neutron-service odl-restconf-all

3) 配置opendaylight

vim  etc/opendaylight/datastore/initial/config/netvirt-dhcpservice-config.xml
<dhcpservice-config xmlns="urn:opendaylight:params:xml:ns:yang:dhcpservice:config">
<controller-dhcp-enabled>true</controller-dhcp-enabled>
<dhcp-dynamic-allocation-pool-enabled>true</dhcp-dynamic-allocation-pool-enabled>

vim etc/custom.properties
ovsdb.of.version=1.3
ovsdb.l3.fwd.enabled=yes
ovsdb.l3.arp.responder.disabled=yes

</dhcpservice-config>

4) 重新启动opendaylight

[root@ localhost ~]#./bin/stop
[root@ localhost ~]#./bin/start

5) 验证安装

http://192.168.4.150:8181/index.html

用户名密码都是admin

4.3 集成过程

1) 首先要清除原有的实例和neutron网络

控制节点执行:

nova list 
nova delete <instance names> 
neutron subnet-list 
neutron router-list 
neutron router-port-list <router name> 
neutron router-interface-delete <router name> <subnet ID or name> 
neutron subnet-delete <subnet name> 
neutron net-list 
neutron net-delete <net name> 
neutron router-delete <router name> 
neutron port-list

删除所有port、router、subnet后,再用如下命令检查一遍,应该为空

2) 停止Neutron服务

当Neutron在计算和控制节点上管理OVS实例时,OpenDaylight和Neutron可能会发生冲突。为防止出现问题,我们需要关闭控制节点Neutron服务,并在所有节点上关闭Neutron的Open vSwitch agent。

关闭Neutron服务:

控制节点执行

[root@controller ~ (keystone_admin)]# systemctl stop neutron-server
[root@controller ~ (keystone_admin)]# systemctl stop neutron-l3-agent
[root@controller ~ (keystone_admin)]# systemctl disable neutron-l3-agent

关闭并禁用Neutron的代理服务:

控制节点和计算节点执行

systemctl stop neutron-openvswitch-agent
systemctl disable neutron-openvswitch-agent

3) 停止Open vSwitch服务,并清除现有的OVSDB

控制节点和计算节点执行

systemctl stop openvswitch
rm -rf /var/log/openvswitch/*
rm -rf /etc/openvswitch/conf.db
systemctl start openvswitch

查看ovs状态时应该没有任何的网桥

[root@compute ~]# ovs-vsctl show
9f0995a9-5d9e-433b-aae4-0fa447a9e8a6
    ovs_version: "2.11.0"

4) 将其交给ODL管理

控制节点和计算节点执行

ovs-vsctl set-manager tcp:192.168.4.150:6640

(设置所有节点上用于VXLAN连接的IP。该IP必须与每台计算机上的实际linux接口相对应)

控制节点执行

ovs-vsctl set Open_vSwitch . other_config:local_ip=192.168.4.145
ovs-vsctl add-br br-ex
ovs-vsctl add-port br-ex eno2
ovs-vsctl set Open_vSwitch . other_config:provider_mappings=provider:br-ex
ovs-vsctl set Open_vSwitch . external_ids:provider_mappings="{\"provider\": \"br-ex\"}"

计算节点执行

ovs-vsctl set Open_vSwitch . other_config:local_ip=192.168.4.144

ovs-vsctl show命令可以看到OpenDaylight将自动创建一个连接到控制器的br-int网桥

[root@controller ~ (keystone_admin)]# ovs-vsctl show
97391679-66bb-4654-a4bd-ef22b45b9c27
    Manager "tcp:192.168.4.150:6640"
        is_connected: true
    Bridge br-int
        Controller "tcp:192.168.4.150:6653"
            is_connected: true
        fail_mode: secure
        Port br-int
            Interface br-int
                type: internal
    ovs_version: "2.11.0"

如果您没有在上面看到结果,可能存在iptables限制,需要打开相关端口(6640、6653)。
同时要在opendaylight服务器上禁用selinux。

setenforce 0
sed -i -e 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config

5) 配置Neutron中使用OpenDaylight

  • 安装Neutron networking-odl模块

控制节点和计算节点执行

[root@controller ~ (keystone_admin)]# yum install python2-networking-odl
  • 配置Neutron以使用OpenDaylight的ML2驱动程序

控制节点执行

[root@controller ~ (keystone_admin)]# vim /etc/neutron/plugins/ml2/ml2_conf.ini
[ml2]
mechanism_drivers = opendaylight_v2
tenant_network_types = vxlan
[ml2_odl]
url = http://192.168.4.150:8181/controller/nb/v2/neutron
password = admin
username = admin
port_binding_controller = pseudo-agentdb-binding
enable_dhcp_service = True
  • 配置Neutron以将OpenDaylight的odl-router服务插件用于L3连接:

控制节点执行

[root@controller ~ (keystone_admin)]# vim /etc/neutron/neutron.conf 
[DEFAULT]
service_plugins = odl-router_v2
  • 配置Neutron DHCP代理以提供元数据服务:

控制节点执行

[root@controller ~ (keystone_admin)]# vim /etc/neutron/dhcp_agent.ini
[DEFAULT]
force_metadata = True
[ovs]
ovsdb_interface = vsctl
  • 重置Neutron的数据库 (控制节点)

控制节点执行

[root@controller ~ (keystone_admin)]#mysql  -u root  -p123456  -e "DROP DATABASE IF EXISTS neutron;"
[root@controller ~ (keystone_admin)]#mysql   -u root  -p123456  -e "CREATE DATABASE neutron CHARACTER SET utf8;"
[root@controller ~ (keystone_admin)]#mysql   -u root  -p123456  -e " GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'neutron'; "
[root@controller ~ (keystone_admin)]#neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head
  • 重新启动neutron-server:

控制节点执行

systemctl start neutron-server
  • openstack启用odl控制:

控制节点和计算节点执行

neutron-odl-ovs-hostconfig --datapath_type=system

4.4 可能遇到的问题

  • OVS与OpenDaylight连接之后,不能自动创建br-int

原因:OpenDaylight的组件问题,组件之间可能相互干扰

解决办法:清空组件,安装以下组件(以下组件为最小配置,如需使用OpenDaylight的其他功能请依照需求自行添加)

odl-ovsdb-openstack odl-dlux-core

  • 重启neutron服务失败

原因是虽然指定了mechanism_driver为opendaylight,但是还没有安装此driver的实现。使用以下命令安装之后,就能重启neutron服务了。

yum install python2-pip
pip install networking_odl
  • 实验中,创建的虚拟机启动之后无法获取ip

原因:计算节点与网络节点的隧道没有建立

解决办法:将OVS相关信息告诉OpenDaylight,建立计算节点和网络节点之间的隧道,使得计算节点的虚拟机可以访问网络节点的dhcp服务。

ovs-vsctl set Open_vSwitch uuid other_config={'local_ip'='192.168.4.145'}
ovs-vsctl set Open_vSwitch uuid other_config={'local_ip'='192.168.4.144'}

上述命令中的uuid是OVS的uuid,可通过ovs-vsctl show命令查看,也可以通过ovs-vsctl get Open_vSwitch . _uuid命令查询,local_ip需要指定节点数据口的ip地址。

  • 虚拟机不能访问外网
  1. 需要修改网络节点/etc/neutron/l3_agent.ini文件,增加br-ex的配置,该配置在安装阶段默认留空,需要做如下配置:
[DEFAULT] 
external_network_bridge = br-ex

2. 为br-int和br-ex之间建立patch对,使它们之间可以通信

ovs-vsctl add-port br-ex "ex-patch-int"
ovs-vsctl set interface "ex-patch-int" type=patch
ovs-vsctl set interface "ex-patch-int" options:peer=int-patch-ex
 
ovs-vsctl add-port br-int "int-patch-ex"
ovs-vsctl set interface "int-patch-ex" type=patch
ovs-vsctl set interface "int-patch-ex" options:peer=ex-patch-int

4.5 验证测试

  • 验证OpenDaylight的ML2接口是否正常工作:
curl -u admin:admin http://192.168.4.150:8181/controller/nb/v2/neutron/networks
{
   "networks" : [ ]
}

如果这不起作用或出现错误,请检查中的Neutron日志文件/var/log/neutron/server.log。

这里的错误消息应该提供一些有关与OpenDaylight连接问题的线索。

使用Neutron CLI创建网络,子网,路由器,连接端口并启动实例:

neutron router-create router1
neutron net-create private
neutron subnet-create private --name=private_subnet 10.10.5.0/24
neutron router-interface-add router1 private_subnet
nova boot --flavor <flavor> --image <image id> --nic net-id=<network id> test1
nova boot --flavor <flavor> --image <image id> --nic net-id=<network id> test2

至此,OpenDaylight可以为网络上的实例创建网络端点并管理到它们的流量。

可以使用Horizon控制台访问VM,也可以通过发出 nova get-vnc-console novnc

通过控制台,可以验证虚拟机之间的连接。

添加用于浮动IP连接的外部网络

为了使用浮动IP连接到VM,我们需要通过创建外部网络和子网来配置外部网络连接。该外部网络必须链接到计算机上的物理端口,该端口将提供到外部网关的连接。

sudo ovs-vsctl set Open_vSwitch . other_config:provider_mappings=physnet1:eno2
neutron net-create public-net -- --router:external --is-default --provider:network_type=flat --provider:physical_network=physnet1
neutron subnet-create --allocation-pool start=10.10.10.2,end=10.10.10.254 --gateway 10.10.10.1 --name public-subnet public-net 10.10.0.0/16 -- --enable_dhcp=False
neutron router-gateway-set router1 public-net

neutron floatingip-create public-net
nova floating-ip-associate test1 <floating_ip>

4.6 结论

OpenStack和OpenDaylight可以分开安装,并进行集成,鉴于两者的版本变化很大,且有很多问题,中间集成的过程中可能因为安装环境不同,遇到各种问题。但都可以一一解决。

4.7 参考资料

如有其它问题,请填写右侧需求表单联系我们。

配置指导:Prometheus监控系统部署

Prometheus监控系统部署方案

1 Prometheus简介

Prometheus是一个最初在SoundCloud上构建的开源系统监视和警报工具包。自2012年成立以来,许多公司和组织都采用了Prometheus,该项目拥有非常活跃的开发者和用户社区。它现在是一个独立的开源项目,可以独立于任何公司进行维护。为了强调这一点,并阐明项目的治理结构,Prometheus于2016年加入Cloud Native Computing Foundation,作为继Kubernetes之后的第二个托管项目。

2 特性

  • 多维度数据模型-由指标键值对标识的时间序列数据组成
  • PromQL,一种灵活的查询语言
  • 不依赖分布式存储;单个服务器节点是自治的
  • 以HTTP方式,通过pull模型拉取时间序列数据
  • 支持通过中间网关推送时间序列数据
  • 通过服务发现或者静态配置,来发现目标服务对象
  • 支持多种多样的图表和界面展示

3 组件

  • Prometheus Server:用于收集和存储时间序列数据
  • Client Library:客户端库,为需要监控的服务生成相应的metrics并暴露给Prometheus server。当 Prometheus server来pull时,直接返回实时状态的metrics
  • Exporters:用于暴露已有的第三方服务的metrics给Prometheus
  • Alertmanager:从Prometheus server端接收到alerts后,会进行去除重复数据,分组,并路由到对收的接受方式,发出报警。常见的接收方式有:电子邮件、pagerduty、OpsGenie、webhook等
  • Grafana是一款用Go语言开发的开源数据可视化工具,可以做数据监控和数据统计,带有告警功能。目前使用grafana的公司有很多,如paypal、ebay、intel等

4 适用场景

Prometheus适用于记录任何纯数字时间序列。它适用于以机器为中心的监控以及高度动态的面向服务架构的监控。在微服务的世界中,Prometheus的多维度数据收集和查询非常强大。

Prometheus是为服务的可靠性而设计的,当服务出现故障时,它可以使你快速定位和诊断问题。每个Prometheus服务器都是独立的,不依赖于网络存储或其他远程服务。当基础架构的其他部分损坏时,您可以依赖它,并且您不需要设置大量的基础架构来使用它。

5 目标

Google指出,监控分为白盒监控和黑盒监控之分。

白盒监控:通过监控内部的运行状态及指标判断可能会发生的问题,从而做出预判或对其进行优化。

黑盒监控:监控系统或服务,在发生异常时做出相应措施。

Prometheus监控的目标如下:

  • 根据历史监控数据,对未来做出预测
  • 发生异常时,及时报警,或做出相应措施
  • 根据监控报警及时定位问题根源
  • 通过可视化图表展示,便于直观获取信息

6 部署过程

本次部署一台Server。服务器最低配置要求8G内存,40G硬盘。服务器IP 192.168.4.150。

6.1 关闭SELinux

SeLinux不关闭会发生无法访问的情况。

[root@localhost  ~]# setenforce 0
[root@localhost  ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

6.2 关闭防火墙

防止安装时出现各个组件的端口不能访问的问题。

[root@localhost  ~]#systemctl stop firewalld && systemctl disable firewalld                          

6.3 下载安装包

[root@localhost~]#wget\ https://github.com/prometheus/prometheus/releases/download/v2.16.0/prometheus-2.16.0.linux-amd64.tar.gz
[root@localhost~]#wget\ https://github.com/prometheus/alertmanager/releases/download/v0.20.0/alertmanager-0.20.0.linux-amd64.tar.gz 
[root@localhost~]#wget \
https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz

6.4 配置Prometheus Server

解压Prometheus压缩包,并配置Prometheus配置文件。

[root@localhost  ~]# mkdir /root/monitor
[root@localhost  ~]# tar -xvf prometheus-2.16.0.linux-amd64.tar.gz -C /root/monitor
[root@localhost  ~]# mv prometheus-2.16.0.linux-amd64 prometheus
[root@localhost  ~]# vi /home/monitor/prometheus/prometheus.yml
global:
  scrape_interval: 30s
evaluation_interval: 30s
scrape_timeout: 10s
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - 192.168.4.150:9093
rule_files:
  - /root/monitor/prometheus/rule/*.rules
scrape_configs:
- job_name: 'node'
  file_sd_configs:
  - refresh_interval: 1m
    files:
    - node.json
[root@localhost  ~]# vi /root/monitor/prometheus/node.json
[
  {
    "targets": [ "192.168.5.135:9100"],
    "labels": {
      "grafana": "prometheus",
      "tera": "exporter",
      "job": "node"
    }
  }
]

6.5 System配置Prometheus

使用System配置Prometheus实现服务自启。

[root@localhost  ~]# vi /usr/lib/systemd/system/prometheus.service
[Unit]
After=docker.service
[Service]
ExecStart=/root/monitor/prometheus/prometheus \
--config.file=/root/monitor/prometheus/prometheus.yml \ 
--storage.tsdb.path=/root/monitor/prometheus/data/ --web.external-url=http://:9090
Restart=always
[Install]
WantedBy=multi-user.target

6.6 配置Alertmanager

解压Alertmanaget安装包,Alertmanager接收Prometheus监控信息并将告警信息通过邮件发送到接收人。

[root@localhost  ~]# tar -xvf alertmanager-0.20.0.linux-amd64.tar.gz -C /root/monitor
[root@localhost  ~]# mv alertmanager-0.20.0.linux-amd64.tar.gz alertmanager
[root@localhost  ~]# vi /home/monitor/alertmanager/alertmanager.yml
global:
  resolve_timeout: 10m
  smtp_smarthost: ''
  smtp_from: 'email'
  smtp_auth_username: 'email'
  smtp_auth_password: 'password'
  smtp_hello: 'Hello'
  smtp_require_tls: false
templates:
route:
  group_by: ['alertname']
  group_wait: 30s
  group_interval: 1m
  repeat_interval: 360m
  receiver: asterfusion
receivers:
- name: asterfusion
  email_configs:
  - to: '接收人1'
    send_resolved: true Restart=always
[Install]
WantedBy=multi-user.target

6.7 System配置Alertmanager

使用System配置Alertmanager实现服务自启。

[root@localhost  ~]#vi /usr/lib/systemd/system/alertmanager.service
[Unit]想·
After=docker.service
[Service]
ExecStart=/root/monitor/alertmanager/alertmanager  --web.listen-address=192.168.4.150:9093\
--config.file=/root/monitor/alertmanager/alertmanager.yml\  
--storage.path=/root/monitor/alertmanager
Restart=always
[Install]
WantedBy=multi-user.target

6.8 部署Granfana

[root@localhost  ~]# wget https://dl.grafana.com/oss/release/grafana-6.7.1-1.x86_64.rpm 
[root@localhost  ~]# yum -y install grafana-6.7.1-1.x86_64.rpm

6.9 部署Node_exporter

部署Node_exporter采集服务器资源信息。

[root@localhost  ~]# tar -xvf node_exporter-0.18.1.linux-amd64.tar.gz -C /root/monitor
[root@localhost  ~]# mv node_exporter-0.18.1.linux-amd64.tar.gz node_exporter

6.10 System配置Node_exporter

使用Sysytem管理Node_exporter实现服务自启。

[root@localhost  ~]#vi /usr/lib/systemd/system/node.service
[Unit]
After=docker.service
[Service]
ExecStart=/root/monitor/node_exporter/node_exporter 
Restart=always
[Install]
WantedBy=multi-user.target

6.11 添加监控主机

在Prometheus文件夹下创建node.json文件,添加需要监控的主机列表。

[root@localhost  ~]# vi /root/monitor/prometheus/node.json
[
  {
    "targets": [ "192.168.4.150:9100"],
    "labels": {
      "grafana": "controller",
      "tera": "exporter",
      "job": "node"
    }
  },
]

6.12 添加报警

在Prometheus的rule文件夹下定义报警规则,满足条件则把信息推送到Alertmanager。

[root@localhost  ~]# mkdir /root/monitor/prometheus/rule
[root@localhost  ~]# vi /root/monitor/prometheus/rule/node.rules
groups:
- name: nodedown
  rules:
  - alert: nodeDown
    expr: up{tera="exporter"} == 0
    for: 1m
    labels:
      severity: serious
    annotations:
      summary: "Instance {{ $labels.instance }} node is Down"
      description: "{{ $labels.instance }} node is Down"

6.13 启动服务

Prometheus监控所有组件都是用System管理。

[root@localhost  ~]# systemctl start prometheus.service && systemctl enable prometheus.service
[root@localhost  ~]# systemctl start node.service && systemctl enable node.service
[root@localhost  ~]# systemctl start alertmanager && systemctl enable alertmanager
[root@localhost  ~]# systemctl start grafana-server && systemctl enable grafana-server

6.14 监控Web

Prometheus Web URL: http://192.168.4.150:9090

Alertmanager Web URL: http://192.168.4.150:9093

Node_exporter Web URL: http://192.168.4.150:9100

Grafana Web URL : http://192.168.4.150:3000

7 参考资料

  1. Prometheus官网:https://prometheus.io/
  2. Grafana官网:https://grafana.com/

如有其它问题,请填写右侧需求表单联系我们。

配置指导:搭建PXE远程批量安装服务器


关注星融元


在大规模服务器部署时,面对成百上千台服务器,通过手动插入光盘或者USE驱动器来安装操作系统无比繁琐,让大量工程师在现场挨个安装系统也不切实际,PXE的出现使得网络远程批量自动安装和配置操作系统成为现实。

什么是PXE?

PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel设计的协议,它允许计算机通过网络启动。这个协议工作在Client/Server模式下,允许客户机通过网络从远程服务器下载引导镜像,并加载安装文件或整个操作系统。

相比其他工具,PXE更好地解决了以下问题:

  • 自动化:PXE允许自动安装和配置操作系统,减少了手动操作的工作量。
  • 远程实现:通过网络远程安装操作系统,无需物理介质,方便管理远程服务器。
  • 规模化:特别适用于大规模服务器部署,可以同时装配多台服务器。。

PXE工作原理和配置

工作原理

  1. PXE启动:当终端进入网卡启动时,会发送一个特殊的PXE启动请求到本地网络上的DHCP服务器。
  2. DHCP服务:DHCP服务器收到PXE启动请求后,会向计算机发送DHCP响应,DHCP响应包含了计算的网络配置信息,以及PXE引导服务器的IP地址——TFTP Server(Trivial File Transfer Protocol)。
  3. TFTP传输:计算机收到DHCP响应后,会使用TFTP从Server下载引导文件——pxelinux.0或者bootx64.efi。
  4. 加载引导文件:计算机加载并执行从TFTP下载的引导文件。引导文件通常是一个小型的Linux内核,能够连接到PXE服务器并获取操作系统镜像。
  5. 获取配置信息:引导文件连接到PXE服务器后,会通过TFTP发送请求以获取更多的配置信息。
  6. 获取操作系统镜像:PXE服务器根据计算机的请求,将系统镜像发送给计算机。
  7. 操作系统加载:一旦操作系统映像文件下载完成,计算机会加载并执行该映像文件。此时,计算机将完全从网络上运行操作系统,而无需本地硬盘上的安装。

PXE启动流程

注意:虽然PXE很好用,但启动时也需要满足以下条件

  1. 网卡支持PXE,目前新出的网卡基本都支持,同时需要完成BIOS的启动项配置。
  2. 传统启动模式(Legacy)下,PXE客户端会请求pxelinux.0;UEFI启动会请求bootx64.efi。
  3. 也可以采用nfsboot方式,该流程采用的是ISO镜像下载再安装的方式。

由于星融元交换机的开放性,PXE Server所需的组件能全部部署在CX-M上,即一台CX-M设备即可满足PXE的需求。

安装配置

安装配置

安装配置

星融元已通过PXE成功实现了大规模服务器的商业部署、自动化操作系统安装,从安装配置TFTP到准备启动文件、安装配置TFTP、配置HTTP Server、配置启动文件、配置DHCP到最后的验证,都可以在PXE配置文档中学会。

在现代IT环境中,通过PXE自动化流程部署系统可以减少人为错误,有助于提高效率、简化管理并确保一致性,亲手配置试试吧~

技术手册-PXE配置指导手册

相关文章

配置指导:Kolla-Ansible 在容器环境中部署 OpenStack


关注星融元


OpenStack简介

OpenStack是一个云操作系统,它控制整个数据中心的大型计算、存储和网络资源池,所有这些资源都通过一个仪表板进行管理,该仪表板赋予管理员控制权,同时允许用户通过web界面提供资源。

它为私有云和公有云提供可扩展的弹性的云计算服务,提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。

Kolla-Ansible简介

Kolla旨在为运行OpenStack提供生产就绪的容器和部署工具。

Kolla-Ansible是Kolla的子项目,该项目使用Ansible部署Kolla容器映像。

Kolla-Ansible是开箱即用的工具,即使你是个新手也可以快速部署OpenStack,也允许你根据需求定制化的部署。

目标

在容器中部署OpenStack最大的特点就是升级,用户基本是无感知的状态下完成。同时可以实现本地与云端一致,一次开发随处运行,通过迁移到不同的设备,快速的完成部署和升级操作。

本文将以详细操作指导的方式,给出一种在Docker容器环境中部署OpenStack的指导方法。

环境准备

两台server,一台作为controller,另一台作为compute节点,操作系统CentOS 7.6.1810 镜像CentOS-7-x86_64-DVD-1810.iso。服务器具体配置要求如下:

  • 2个千兆网口
  • 至少8G内存
  • 磁盘至少40G
  • 计算节点的BISO中开启CPU嵌套虚拟化(INTEL叫VT-x,AMD的叫AMD-V)

Kolla-Ansible部署过程

关闭SELinux 【控制节点、计算节点】

SELinux不关闭的情况下无法实现,会限制ssh免密码登录

[root@localhost  ~]#setenforce 0

[root@localhost  ~]# sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/sysconfig/selinux

关闭防火墙【控制节点、计算节点】

防止安装时出现各个组件的端口不能访问的问题

[root@localhost  ~]#systemctl stop firewalld && systemctl disable firewalld

禁用宿主机的 Libvirt 服务

大多数操作系统会默认启动 Libvirt,但使用 Kolla 来部署 OpenStack 的话,Libvirt 应该在容器中运行并管理虚拟机。所以宿主机的 Libvirt 需要被关闭,以免造成冲突。

[root@localhost  ~]#systemctl stop libvirtd.service
[root@localhost  ~]#systemctl disable libvirtd.service

设置主机名,hosts文件【控制节点、计算节点】

控制节点

[root@localhost  ~]#hostname controller
[root@localhost  ~]#echo “controller”> /etc/hostname

计算节点根据节点名称修改

[root@localhost  ~]#vim /etc/hosts
192.168.4.2 controller
192.168.4.150 computer1

修改网卡名称【控制节点、计算节点】

说明:网卡名字不是必须改,保持各服务器使用的网卡名称一样。

网卡1:

[root@localhost  ~]#cd /etc/sysconfig/network-scripts
[root@localhost  ~]#vim ifcfg-enp6s0f0
IPADDR=192.168.1.*
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
NAME=eno1
DEVICE=eno1

网卡2:

[root@localhost  ~]#cd /etc/sysconfig/network-scripts
[root@localhost  ~]#vim ifcfg-enp6s0f1
IPADDR=192.168.2*
NETMASK=255.255.255.0
GATEWAY=192.168.21
NAME=eno2
DEVICE=eno2

修改网卡文件名称:

[root@localhost  ~]#mv ifcfg-enp6s0f0 ifcfg-eno1
[root@localhost  ~]#mv ifcfg-enp6s0f1 ifcfg-eno2

修改net配置文件

[root@localhost  ~]#vi /etc/udev/rules.d/70-persistent-net.rules
SUBSYSTEM==”net”,ACTION==”add”,DRIVERS==”?*”,ATTR{address}==”78:24:af:85:0c:ac”,ATTR{type}==”1″, NAME=”eno1″    
SUBSYSTEM==”net”,ACTION==”add”,DRIVERS==”?*”,ATTR{address}==”78:24:af:85:0c:ad”,ATTR{type}==”1″, NAME=”eno2″

ATTR和服务器两网口MAC地址保持一致

重启服务器

[root@localhost  ~]#reboot

重启网络服务

[root@localhost  ~]#systemctl restart network

安装【控制节点、计算节点】

[root@localhost  ~]#yum install -y epel-release
[root@localhost  ~]#yum install -y python-pip
[root@localhost  ~]#pip install -U pip

安装编译环境【控制节点】

[root@controller  ~]#yum install -y python-devel libffi-devel gcc openssl-devel libselinux-python

安装ansible【控制节点】

[root@controller  ~]#pip install -U ansible

安装docker【控制节点、计算节点】

[root@localhost  ~]#tee /etc/yum.repos.d/docker.repo <<-‘EOF’
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
[root@localhost  ~]#yum install -y docker-engine docker-engine-selinux

  • 问题1 安装docker失败,提示与其他安装包冲突Error: docker-engine-selinux conflicts with 2:container-selinux-2.107-3.el7.noarch

解决方法如下:

[root@compute1 ~]#rpm -qa |grep container-selinux-2.107-3.el7.noarch
[root@compute1 ~]#yum -y remove container-selinux-2.107-3.el7.noarch

设置Docker【控制节点、计算节点】

[root@localhost  ~]#mkdir /etc/systemd/system/docker.service.d
[root@localhost  ~]#tee /etc/systemd/system/docker.service.d/kolla.conf << ‘EOF’
[Service]
MountFlags=shared
EOF

重启相关服务【控制节点、计算节点】

[root@localhost  ~]#systemctl daemon-reload
[root@localhost  ~]#systemctl enable docker
[root@localhost  ~]#systemctl restart docker

安装模块【控制节点、计算节点】

[root@localhost  ~]#pip install docker

安装【控制节点】

[root@controller  ~]#yum install git

安装kolla-ansible【控制节点】

[root@controller  ~]#pip install kolla-ansible

如果报如下错误

Cannot uninstall ‘PyYAML’. It is a distutils installed project and thus we

cannot accurately determine which files belong to it which would lead to only a

partial uninstall.

[root@controller  ~]#rm -rf /usr/lib64/python2.7/site-packages/PyYAML*

拷贝配置文件【控制节点】

[root@controller  ~]#cp -r  /usr/share/kolla-ansible/etc_examples/kolla  /etc/kolla/

[root@controller  ~]#cp  /usr/share/kolla-ansible/ansible/inventory/*  /home/

配置免密登录【控制节点】

[root@controller  ~]#ssh-keygen                        #一路回车
[root@controller  ~]#ssh-copy-id controller         #回车后输入服务器密码
[root@controller  ~]#ssh-copy-id computer1          #回车后输入服务器密码

存储节点配置【计算节点】

(演示版本可以跳过此步骤)

  • 要启动cinder存储服务,需先添加一块新的硬盘,然后创建pv、vg

[root@computer1 ~]#pvcreate /dev/sdb
[root@computer1 ~]#vgcreate cinder-volumes /dev/sdb  //vg名取名为 cinder-volumes,这里主要跟 kolla配置文件里vg名一致

  • 问题1 如果出现创建不了pv

解决方法如下:

[root@compute1 ~]#pvcreate devsdb
Device /dev/sdb excluded by a filter.

解决:

[root@compute1 ~]#dd if=/dev/urandom of=/dev/sdb bs=512 count=64
64+0 records in
64+0 records out
32768 bytes (33 kB) copied, 0.00760562 s, 4.3 MB/s
[root@compute1 ~]#pvcreate /dev/sdb                            
Physical volume “/dev/sdb” successfully created.

重启服务【计算节点】

[root@compute1 ~]#systemctl restart lvm2-lvmetad.service

修改【控制节点】

[root@controller ~]#vim /home/multinode
[control]
controller
[network]
controller
[inner-compute]
[external-compute]
computer1
[compute:children]
inner-compute
external-compute
[storage]
computer1
[monitoring]
controller
[deployment]
controller

获取docker镜像【控制节点、计算节点】

  • 使用kolla官方镜像源

[root@localhost  ~]#vim /etc/kolla/globals.yml
kolla_install_type: “binary”
openstack_release: “stein”
docker_namespace: “kolla”

  • 下载镜像包

[root@controller  ~]#kolla-ansible pull -i /home/multinode

修改全局配置文件globals.yml【控制节点】

管理网口eno1,外网网口eno2

如果采用cinder磁盘存储

kolla_base_distro: “centos”

kolla_install_type: “binary”
openstack_release: “stein”
kolla_internal_vip_address: “192.168.4.2”
# Valid options are [ qemu, kvm, vmware, xenapi ]
nova_compute_virt_type: “kvm”
network_interface: “eno1”
api_interface: “{{ network_interface }}”
neutron_external_interface: “eno2”
neutron_plugin_agent: “openvswitch”
enable_cinder: “yes”
enable_cinder_backend_iscsi: “no”
enable_cinder_backend_lvm: “yes”
enable_haproxy: “yes”
enable_heat: “yes”
glance_enable_rolling_upgrade: “no”
ironic_dnsmasq_dhcp_range:
tempest_image_id:
tempest_flavor_ref_id:
tempest_public_network_id:
tempest_floating_network_name:

如果采用外部ceph存储:

kolla_base_distro: “centos”

kolla_install_type: “binary”
openstack_release: “stein”
kolla_internal_vip_address: “192.168.4.2”
# Valid options are [ qemu, kvm, vmware, xenapi ]
nova_compute_virt_type: “qemu”
nova_backend_ceph: “yes”
network_interface: “eno1”
api_interface: “{{ network_interface }}”
neutron_external_interface: “eno2”
neutron_plugin_agent: “openvswitch”
enable_ceph: “no”
enable_cinder_backup: “yes”
cinder_backup_driver: “ceph”
enable_cinder: “yes”
enable_cinder_backend_iscsi: “no”
enable_cinder_backend_lvm: “no”
enable_haproxy: “yes”
enable_heat: “yes”
enable_sahara: “yes”
enable_trove: “yes”
cinder_backend_ceph: “yes”
glance_backend_ceph: “yes”
glance_enable_rolling_upgrade: “no”
ironic_dnsmasq_dhcp_range:
tempest_image_id:
tempest_flavor_ref_id:
tempest_public_network_id:
tempest_floating_network_name:

生成密码文件passwords.yml【控制节点】

这个密码文件可以使用工具自动生成,也可以手动输入但是手动输入需要注意格式,在:后需要空一格

再输入;而且ssh_key也比较麻烦所以推荐使用工具自动生成但是直接输入

[root@controller  ~]#kolla-genpwd

修改dashboard登录密码

[root@controller  ~]#vi /etc/kolla/passwords.yml

keystone_admin_password: admin

修改部署文件multinode【控制节点】

[root@controller  ~]#vim /home/multinode
[control]
controller
[network]
controller
[inner-compute]
[external-compute]
computer1
[compute:children]
inner-compute
external-compute
[monitoring]
controller
[storage]
computer1
[deployment]
localhost       ansible_connection=local

检查配置【控制节点】

[root@controller  ~]#kolla-ansible prechecks -i /home/multinode

配置SchedNova主机基础环境【控制节点】

[root@controller  ~]#kolla-ansible -i /home/multinode bootstrap-servers

部署OpenStack【控制节点】

[root@controller  ~]#kolla-ansible deploy -i /home/multinode

验证OpenStack安装【控制节点】

[root@controller  ~]#kolla-ansible post-deploy -i /home/multinode

OpenStack更新【控制节点】

### 修改镜像版本(此处不用更新,以后想更新版本再更新)

[root@controller  ~]# vim /etc/kolla/globals.yml
openstack_release: “stein”
[root@controller  ~]# kolla-ansible upgrade -i /home/multinode

重启所有应用【控制节点】

[root@controller  ~]#kolla-ansible -i /home/multinode reconfigure

环境还原【控制节点】

#如果安装有错误,想重新安装,可以选择如下操作

##将删除所有容器和卷

[root@controller  ~]#kolla-ansible destroy –yes-i-really-really-mean-it -i /home/multinode

生成 admin-openrc.sh【控制节点】

[root@controller  ~]#kolla-ansible post-deploy

初始demo【控制节点】

执行后会自动下载cirros镜像, 创建网络, 并创建一批测试虚拟机.

[root@controller  ~]#/usr/share/kolla-ansible/init-runonce

查询登录密码【控制节点】

[root@controller  ~]#grep admin /etc/kolla/passwords.yml

安装OpenStack命令行客户端【控制节点】

[root@controller  ~]#pip install python-openstackclient

创建实例到指定计算节点

  • 查看有效区域

[root@controller  ~]#openstack availability zone list

  • 查看有效主机列表

[root@controller  ~]#openstack host list

  • 查看有效计算节点列表

[root@controller  ~]#openstack hypervisor list

  • 查询网络id

[root@controller  ~]#openstack network list

  • 查看安全组

[root@controller  ~]#openstack security group list

  • 创建flavor

[root@controller  ~]#openstack flavor create –id 0 –vcpus 1 –ram 64 –disk 1 m1.nano
[root@controller  ~]#openstack flavor create –id 1 –vcpus 1 –ram 512 –disk 1 m1.tiny
[root@controller  ~]#openstack flavor create –id 2 –vcpus 1 –ram 2048 –disk 20 m1.small
[root@controller  ~]#openstack flavor create –id 3 –vcpus 2 –ram 4096 –disk 40 m1.medium
[root@controller  ~]#openstack flavor create –id 4 –vcpus 4 –ram 8192 –disk 80 m1.large
[root@controller  ~]#openstack flavor create –id 5 –vcpus 8 –ram 16384 –disk 160 m1.xlarg

  • 创建实例

[root@controller  ~]#openstack server create –flavor m1.nano \
–image cirros  \
–nic net-id=88b84388-40d2-48d9-b4ec-ab0dfa9b244e \
–security-group 5431def1-8856-4e48-ab02-50b9d459f9b1  \
–key-name mykey  \
–availability-zone nova:computer2:computer2  instance2

–flavor 实例类型

–image 镜像

–nic 网络 net-id网络id 第4步查得

 –availability-zone nova:compute1:compute1 前三步查得

compute1为指定计算节点。

结论

从上面的安装过程我们发现Kolla-Ansible来完成OpenStack安装过程非常的简洁,不需要过多修改OpenStack的配置文件,从而可以很轻松的完成部署和升级等操作。

参考资料

  1. OpenStack官网: openstack.org
  2. Kolla-Ansible项目官网:https://wiki.openstack.org/wiki/Kolla#Kolla
  3. Kolla-Ansible官网安装:https://docs.openstack.org/kolla-ansible/latest/

相关文章

对星融元产品感兴趣?

立即联系!

返回顶部

© 星融元数据技术(苏州)有限公司 苏ICP备17070048号-2