openstack network

网络

网络类型设置主要参考两篇文章,设置网络硬件接口 provider设置自服务虚拟网络

类型

  • local
  • flat
  • vlan
  • vxlan
  • gre
  • geneve

连接外网 & 分配外网IP

openstack 配置的是 self-service 网络模式,外网是指虚拟网络外的网络,这里是路由器的网络 192.168.6.1/24

配置

物理机网络接口设置

这里以 ubuntu 20.04 为例,物理机有两个网口(enp4s0、enp5s0)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# /etc/netplan/99-config.xml
network:
version: 2
renderer: networkd
ethernets:
enp5s0:
addresses:
- 192.168.6.33/24
gateway4: 192.168.6.1

# /etc/netplan/00-installer-config.yaml
network:
ethernets:
enp4s0:
dhcp4: false
version: 2

这里是把 enp5s0 网口设置为固定 ip,关闭 enp4s0 的 dhcp 且不分配 ip。

neutron 的配置要关注 /etc/neutron/plugins/ml2 的内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# cat ml2_conf.ini | grep -v '#' | grep '\S'
[DEFAULT]
[ml2]
type_drivers = flat,vlan,vxlan
tenant_network_types = vxlan
mechanism_drivers = linuxbridge,l2population
extension_drivers = port_security
[ml2_type_flat]
flat_networks = provider
[ml2_type_geneve]
[ml2_type_gre]
[ml2_type_vlan]
[ml2_type_vxlan]
vni_ranges = 1:1000
[ovs_driver]
[securitygroup]
enable_ipset = true
[sriov_driver]

# cat linuxbridge_agent.ini | grep -v '#' | grep '\S'
[DEFAULT]
[agent]
[linux_bridge]
physical_interface_mappings = provider:enp4s0
[network_log]
[securitygroup]
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
enable_ipset = true
[vxlan]
enable_vxlan = true
local_ip = 192.168.6.33
l2_population = true

linuxbridge_agent.ini 配置的 physical_interface_mappings = provider:enp4s0 中的 provider:enp4s0 ,冒号前面是新增的接口名称,enp4s0 为系统显示的硬件网络接口。

ml2_conf.ini 中配置 flat_networks = provider ,指定 flat 类型接口使用的网络接口。

设置多值

physical_interface_mappings = provider:enp4s0,providervpn:enp5s0

flat_networks = provider,providervpn

sysctl.conf

编辑 /etc/sysctl.conf,设置 net.ipv4.ip_forward=1

网络拓扑

image-20210904120142325

image-20210904165426999

注意

  • 创建外部网络用 FLAT 类型,物理网络填 provider(和 linuxbridge_agent.ini 中配置的一致)
  • 创建内部网络用 VXLAN 类型

连接外网

首先,要在管理员下创建外部网络。

image-20210904120508173

连接外网有两种方式,一种是实例直连新建的外部网络,一种是创建内部网络,内部网络通过路由连接外部网络。

网络拓扑图中,test 主机是直连外部网络,可以分配 192.168.6.* 地址,以及访问外网,data 和 work 连接内部网络(10.1.0.0/24),然后内部网络通过路由连接外部网络。

分配外部网络 ip

分配外部网络地址有两种方式,直连外部网络和 floating ip。

直连外部网络是给实例添加接口,并指定网络为外部网络,这样在实例里面查看网络信息可以查看到分配的外网 ip。使用 floating ip 的话,将 floating ip 实例分配的内网 ip 绑定,实例内并不能看到 floating ip,外部可以通过 floating ip 访问实例。

最后一步

openstack 默认的安全组禁止所有请求访问,需要添加入口权限。

image-20210904171252080

distro mirrors

ubuntu

22.04

清华源

1
2
3
4
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse

20.04

清华源

1
2
3
4
5
6
7
8
9
10
11
12
13
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse

18.04

清华源

1
2
3
4
5
6
7
8
9
10
11
12
13
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse

安装 Arch Linux

创建并挂载分区

  1. 查看硬盘
1
$ fdisk -l
  1. 使用 fdisk 创建分区表
1
2
3
$ fdisk /dev/sda
(fdisk) p # 打印分区信息
(fdisk) g # 创建 GPT 分区表

2.1 创建分区

创建 /boot 分区

1
2
3
4
(fdisk) n  # 创建分区
(fdisk) Partition number...: # 回车
(fdisk) First section...: # 回车
(fdisk) Last section...: +1G

创建 / 分区

1
2
3
4
(fdisk) n  # 创建分区
(fdisk) Partition number...: # 回车, 默认值
(fdisk) First section...: # 回车
(fdisk) Last section...: # 回车, 使用最大 section number

确认

1
(fdisk) p   # 重新打印分区,有新创建的两个分区

保存

1
(fdisk) w
  1. 格式化分区
1
2
$ mkfs.fat -F32 /dev/sda1   # 格式化 /boot 分区(假设为 /dev/sda1)
$ mkfs.ext4 /dev/sda2 # 格式化 / 分区(假设为 /dev/sda2)
  1. 挂载
1
2
3
$ mount /dev/sda2 /mnt       # 挂载根分区
$ mkdir /mnt/boot # 创建 boot 挂载点
$ mount /dev/sda1 /mnt/boot # 挂载 /boot 分区

安装

1
$ pacstrap -K /mnt base linux linux-firmware

配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# fstab
$ genfstab -U /mnt >> /mnt/etc/fstab

# Chroot
$ arch-chroot /mnt

# Time
$ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
$ hwclock --systohc

# root passwd
$ passwd

# 安装 vim
$ pacman -S vim

# Localization
$ vim /etc/locale.conf # 写入如下内容
LANG=en_US.UTF-8

# hostname
$ vim /etc/hostname

Boot loader

1
2
3
4
5
6
7
# GRUB
$ pacman -S grub efibootmgr
$ grub-install --target=x86_64-efi --efi-directory=esp --bootloader-id=ArchLinux

## 配置 GRUB
$ grub-mkconfig -o /boot/grub/grub.cfg

重启

1
$ exit

Arch Linux 初始化

中文

1
2
3
4
5
6
7
8
# 修改文件 /etc/locale.gen
en_US.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8
zh_CN.GBK GBK
zh_CN GB2312

# locale-gen
$ sudo locale-gen

zsh

1
2
3
# 文件 ~/.zshrc
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8

网络设置

使用 systemd-networkd 管理网络

新增文件 /etc/systemd/network/20-wired.network,下面是静态 IP 配置示例。

1
2
3
4
5
6
7
[Match]
Name=enp1s0

[Network]
Address=192.168.6.2/24
Gateway=192.168.6.1
DNS=192.168.6.1

启动 systemd-networkd

1
2
$ systemctl enable systemd-networkd
$ systemctl start systemd-networkd

配置 SSH 远程登录

1
2
3
4
$ pacman -S openssh
$ vim /etc/ssh/sshd_config # 添加如下内容
PasswordAuthentication yes
PermitRootLogin yes # 允许 Root 用户远程登录(密钥、密码均可)

启动 sshd

1
2
systemctl enable sshd.service
systemctl start sshd.service

创建用户及用户组

1
2
$ groupadd -g 100 wii
$ useradd -m -d /home/wii -s /bin/zsh -g wii wii

普通用户获取超级管理员权限

1
2
3
4
$ pacman -S sudo
$ chmod 0600 /etc/sudoers
$ vim /etc/sudoers # 添加如下内容, 最好在文件最后
wii ALL=(ALL:ALL) NOPASSWD: ALL # wii 用户使用 sudo 获取所有权限,且不需要密码

必备

1
2
3
$ pacman -S sudo git curl wget zip unzip base-devel
# C++ 开发
$ pacman -S gdb cmake ninja texinfo

centos 初始化

配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 关闭 selinux
$ sudo vim /etc/selinux/config
SELINUX=enforcing -> SELINUX=disabled
$ sudo setenforce 0

# 关闭 swap
$ sudo vim /etc/fstab
注释掉行 /dev/mapper/centos-swap

# 关闭防火墙
$ systemctl stop firewalld
$ systemctl disable firewalld

# 设置 DNS
# centos 8
$ vim /etc/resolve.conf
nameserver 192.168.6.1 # 或其他

开启 EPEL repository

1
sudo yum -y install epel-release

centos network

DNS

1
2
3
# centos 8
$ vim /etc/resolve.conf
nameserver 192.168.6.1 # 或其他

resolveconf

1

修改网络配置

1
2
3
4
5
6
7
8
9
10
11
12
13
# 文件
$ vi /etc/sysconfig/network-scripts/ifcfg-[network_device_name]

# 配置
ONBOOT=yes
BOOTPROTO=dhcp
GATEWAY=...
DNS1=...
DNS2=...

# 重启网络
$ systemctl restart network
$ systemctl restart NetworkManager # centos 8

sudo 权限无需密码

1
2
3
$ sudo visudo
# 添加如下内容,替换掉下面的用户名
<username> ALL=(ALL) NOPASSWD:ALL

ubuntu cloud

初始化

使用 cloud init 初始化时,在实例启动后,可能需要等一小会,才能生效。

1
2
3
4
5
6
#cloud-config
chpasswd:
list: |
ubuntu:ubuntu
wii:wii
expire: False

sudo 命令较慢

1
2
sudo vim /etc/hosts
# 在 127.0.0.1 后面追加 hostname

开启 ssh 密码登录

1
2
3
$ sudo vi /etc/ssh/sshd_config
PasswordAuthentication yes
$ sudo service ssh restart # 重启 ssh server

设置时区

1
2
sudo dpkg-reconfigure tzdata
# 选择 Asia -> Shanghai

设置 DNS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
sudo vim /etc/netplan/50_cloud_init.yaml

# 添加 nameserver
network:
version: 2
ethernets:
ens3:
dhcp4: true
match:
macaddress: fa:16:3e:6c:21:ff
mtu: 1450
set-name: ens3
nameservers:
addresses: [223.5.5.5, 223.6.6.6]

配置更新源

sudo vim /etc/apt/sources.list

20.04

aliyun

1
2
3
4
5
6
7
8
9
10
11
12
13
14
deb https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse

# deb https://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

openstack images

镜像下载

Openstack 官方镜像文档

  • 优先下载 img 镜像,导入时类型选择 qcow2

ubuntu

对于 ubuntu cloud 的初始化文档参考这里,对于 cloud init 参考这里 还有这里

配置账号密码

1
2
3
4
5
#cloud-config
chpasswd:
list: |
ubuntu:ubuntu
expire: False
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#cloud-config
groups:
- ubuntu: [root,sys]
- cloud-users
users:
- default
- name: ubuntu
gecos: ubuntu
sudo: ALL=(ALL) NOPASSWD:ALL
primary_group: ubuntu
groups: users
lock_passwd: false
# ubuntu
hashed_passwd: $6$rounds=4096$F/colBvEPXvBa$cz4/dBg7R/jGVVPoAzQi/vydQ3H3h.iXIVDJrXczbDfXy/nGIHyaFA14Ee7e0pSJfWJNMlJGvwo4Kpi6NXFf00

使用如下命令生成加密密码。

1
2
3
# mkpasswd --method=SHA-512 --rounds=4096
Password:
$6$rounds=4096$F/colBvEPXvBa$cz4/dBg7R/jGVVPoAzQi/vydQ3H3h.iXIVDJrXczbDfXy/nGIHyaFA14Ee7e0pSJfWJNMlJGvwo4Kpi6NXFf00

numpy

array

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 一维
>>> np.array([1, 2, 3])
array([1, 2, 3])

# 多维
>>> np.array([[1, 2, 3]], dtype=np.float32)
array([[1., 2., 3.]], dtype=float32)

# df: np.array
# head 数据
df[:3]

# 基于其他列创建新列
def trans(row):
return row['old']
df['new'] = df.apply(trans, axis=1) # axis=0 行; axis=1 列
df['Label'] = pd.Series(data=df.apply(trans, axis=1), dtype='int')
df.concat(pd.Series(data=df.apply(trans, axis=1))

# 选取行
df[:3] # 前三行

# 选取列
df[:, 0] # 选取第一列

# 选取行和列
df[:3, 0] # 选取前三行第一列

mariadb 常见问题

too many connections

客户端报错 too many connections,问题修复参考这里.

查看当前连接数限制

1
2
3
4
5
6
7
$ mysql -u root -p
> show variables like "max_connections";
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 214 |
+-----------------+-------+

临时配置

1
> set GLOBAL max_connections=1024;

永久配置

1
2
3
4
5
6
7
8
9
10
11
12
# step 1: 修改数据库最大连接数
# vim /etc/my.cnf
[mysqld]
# ...
max_connections=1024

# step 2: 修改 mariadb 默认打开文件数限制
# vim /usr/lib/systemd/system/mariadb.service
[Service]
# ...
LimitNOFILE=10000
LimitNPROC=10000