如何优雅部署OpenStack私有云I--Kolla

news2025/7/18 5:51:23

    为方便大数据平台与管理工具的研发,在公司成本不额外增加的情况下,从公司仓库里拉了几台下线物理机来做大数据平台的实验环境。但整体物理机性能都偏高,单独安装一个大数据服务,很豪,但是也很浪费。而且主机台数不是很多,无法做规模化的平台功能验证。并且在平台研发工程中,涉及到无数次的集群卸载与重装,万一把物理机搞挂了,修起来是很麻烦的。

    综合以上背景情况,进行云平台的一些方面的研究,听说OpenStack很屌,所以想来尝试尝试,挑战挑战。经过一段时间的不屑努力,终于成功部署一套基于完全开源的、方便部署、各位看官姥爷可复制的一个保姆级操作文档。整体操作做了模块拆分,循序渐进,满足你的各种求知欲。此篇文档有点长,建议大家在wifi环境下观看。整个OpenStack系列,预计包含:OpenStack安装,Debug记录,页面优化,虚拟机镜像制作,私有云使用,大数据建设等模块。后续会持续更新。

    本节为第一章节,进行OpenStack的安装。经过前期调研和曾经有过一丢丢的工作经验,找了一个Kolla Ansible来做整个OpenStack的自动化部署(根本就没想过一个组件一个组件安装,真心太难了...)。

1. 环境说明

1.1 主机信息

    选用三台主机,每台主机配置双网口进行支持。

主机名IP1IP2角色
dba-bigdata-node1192.168.10.11

vip:192.168.20.20

控制 + 计算
dba-bigdata-node2192.168.10.12控制 + 计算
dba-bigdata-node3192.168.10.13计算

    控制:代表需要运行的程序控制程序:包含控制服务control、网络服务Neutrun,监控服务monitor,部署服务deploy。

    计算:则是负载实际虚拟机的生产,主要包含存储Storage(本篇采用LVM进行实现),计算Nova。

    整个网络架构图如下

默认的磁盘做了raid信息。
/dev/sda 由4个盘做raid5,挂载与/目录
/dev/sdb 由8个盘做raid5,配置成LVM,提供云磁盘服务。

1.2 软件信息

1.2.1 版本选择

因为现在我们使用大多数系统还是Centos 7版本,所以,我们安装也采用对应的版本进行安装。具体的版本信息如下:

软件

版本

说明

kolla

9.4.0

kolla版本

openstack

train

安装的OpenStack版本

OS

centos7

操作系统版本

编译格式

source

binnary 使用yum安装rpm包

source 从源码编译

2. 部署安装

2.1 环境前置准备

以下操作为主机的基础配置,以下部分,除非特殊说明外,所有操作需要在所有主机中进行。

2.1.1 设置主机名

设置主机名,配置主机名解析

[root@dba_bigdata_node1 192.168.10.11 ~]# hostnamectl set-hostname dba_bigdata_node1
[root@dba_bigdata_node1 192.168.10.11 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.10.11  dba_bigdata_node1
192.168.10.12  dba_bigdata_node2
192.168.10.13  dba_bigdata_node3

2.1.2 关闭防火墙

systemctl stop firewalld.service
systemctl disable firewalld.service

2.1.3 关闭sellinux

entenforce 为马上生效,但是重启后丢失配置。
/etc/selinux/config则是重启后生效。

root@dba_bigdata_node1 192.168.10.11 ~]# sed -i '/^SELINUX=.*/c SELINUX=disabled' /etc/selinux/config
[root@dba_bigdata_node1 192.168.10.11 ~]# sed -i 's/^SELINUXTYPE=.*/SELINUXTYPE=disabled/g' /etc/selinux/config
[root@dba_bigdata_node1 192.168.10.11 ~]# grep --color=auto '^SELINUX' /etc/selinux/config
SELINUX=disabled
SELINUXTYPE=disabled
[root@dba_bigdata_node1 192.168.10.11 ~]# setenforce 0
setenforce: SELinux is disabled

2.1.4 安装常用软件包

yum install gcc vim wget net-tools ntpdate git -y

2.1.5 配置免密钥

生成密钥文件,只在node1 中执行。

[root@dba_bigdata_node1 192.168.10.11 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:3gnHbYES+WuYpfVVEltj7PMjwoOZWRc75c7IhtYYynw root@dba_bigdata_node1
The key's randomart image is:
+---[RSA 2048]----+
| ..    o+.|
|        .. . .o=o|
|        ... . Bo |
|         o++ =.+ |
|        S*@oX.= o|
|       .+%oE.* +.|
|        ..= + . .|
|                 |
|                 |
+----[SHA256]-----+

分发密钥到其他主机,只在node1 中执行。

[root@dba_bigdata_node1 192.168.10.11 ~]# ssh-copy-id root@dba-bigdata-node1
[root@dba_bigdata_node1 192.168.10.11 ~]# ssh-copy-id root@dba-bigdata-node2
[root@dba_bigdata_node1 192.168.10.11 ~]# ssh-copy-id root@dba-bigdata-node3

测试node1 是否可登录其他主机

[root@dba_bigdata_node1 192.168.10.11 ~]# ssh 192.168.10.12
Unable to get valid context for root
Last login: Fri Sep 9 13:48:22 2022 from 30.90.9.77
[root@dba_bigdata_node2 192.168.10.12 ~]#

修改ssh配置,所有主机

[root@dba_bigdata_node2 192.168.10.12 ~]# sed -i 's/#ClientAliveInterval 0/ClientAliveInterval 60/g' /etc/ssh/sshd_config
[root@dba_bigdata_node2 192.168.10.12 ~]# sed -i 's/#ClientAliveCountMax 3/ClientAliveCountMax 60/g' /etc/ssh/sshd_config
[root@dba_bigdata_node2 192.168.10.12 ~]# systemctl daemon-reload && systemctl restart sshd && systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since 五 2022-09-09 14:07:43 CST; 5ms ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 4449 (sshd)
   CGroup: /system.slice/sshd.service
           └─4449 /usr/sbin/sshd -D

9月 09 14:07:43 dba_bigdata_node2 systemd[1]: Starting OpenSSH server daemon...
9月 09 14:07:43 dba_bigdata_node2 sshd[4449]: Server listening on 0.0.0.0 port 22.
9月 09 14:07:43 dba_bigdata_node2 sshd[4449]: Server listening on :: port 22.
9月 09 14:07:43 dba_bigdata_node2 systemd[1]: Started OpenSSH server daemon.
[root@dba_bigdata_node2 192.168.10.12 ~]#

2.1.6 Yum 源修改

修改为阿里云或者中科大的源地址

阿里:baseurl=http://mirrors.cloud.aliyuncs.com/alinux

中科大:baseurl=https://mirrors.ustc.edu.cn/centos

sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.ustc.edu.cn/centos|g' \
-i.bak \
/etc/yum.repos.d/CentOS-Base.repo

重新制作缓存

yum clean all ;yum makecache

安装epel源

yum install -y epel-release

升级系统软件包

yum update -y

2.1.7 安装python环境

yum install python2-devel libffi-devel openssl-devel libselinux-python -y

yum install python-pip -y

配置清华的pip源,加快速度

mkdir ~/.pip
cat > ~/.pip/pip.conf << EOF
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=pypi.tuna.tsinghua.edu.cn
EOF

升级pip

pip install --upgrade "pip < 21.0"
pip install pbr

 2.2 时间同步

2.2.1 安装chrony服务

[root@dba_bigdata_node1 192.168.10.11 ~]# yum -y install chrony

2.2.2 设置为阿里地址

[root@dba_bigdata_node1 192.168.10.11 ~]# cp /etc/chrony.conf{,.bak}
[root@dba_bigdata_node1 192.168.10.11 ~]# echo "
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp6.aliyun.com iburst
stratumweight 0
driftfile /var/lib/chrony/drift
rtcsync
makestep 10 3
bindcmdaddress 127.0.0.1
bindcmdaddress ::1
keyfile /etc/chrony.keys
commandkey 1
generatecommandkey
noclientlog
logchange 0.5
logdir /var/log/chrony
">/etc/chrony.conf

2.2.3 启动服务

systemctl enable chronyd && systemctl restart chronyd && systemctl status chronyd

2.2.4 chrony 同步源

[root@dba_bigdata_node1 192.168.10.11 ~]# chronyc sources -v
[root@dba_bigdata_node1 192.168.10.11 ~]# yum install ntpdate
[root@dba_bigdata_node1 192.168.10.11 ~]# ntpdate ntp1.aliyun.com
#系统时间写入到硬件时间
[root@dba_bigdata_node1 192.168.10.11 ~]# hwclock -w

2.2.5 配置定时任务

crontab -e0 */1 * * * ntpdate ntp1.aliyun.com > /dev/null 2>&1; 

/sbin/hwclock -w0 */1 * * * ntpdate ntp2.aliyun.com > /dev/null 2>&1; 

/sbin/hwclock -w

2.2 Docker-ce

2.2.1 设置yum源

设置docker-ce源,并设置为国内的地址。

wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo

2.2.2 卸载现在的Docker信息

[root@dba_bigdata_node1 192.168.10.11 ~]# yum remove docker docker-common docker-selinux docker-engine -y
已加载插件:fastestmirror
参数 docker 没有匹配
参数 docker-common 没有匹配
参数 docker-selinux 没有匹配
参数 docker-engine 没有匹配
不删除任何软件包

2.2.3 安装docker

yum install docker-ce -y

2.2.4 配置国内docker推送地址

mkdir /etc/docker/
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": [
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn"
  ],
  "insecure-registries": ["172.16.0.200:5000","192.168.10.11:4000"]
}
EOF

    其中172.16.0.200:5000是另外一个docker私有地址。可以同时用多个。

2.2.5 开启docker共享模式

mkdir -p /etc/systemd/system/docker.service.dcat >> /etc/systemd/system/docker.service.d/kolla.conf << EOF[Service]MountFlags=sharedEOF

2.2.6 开启docker服务

systemctl daemon-reload && systemctl enable docker && systemctl restart docker&& systemctl status docker

查看docker信息

[root@dba_bigdata_node1 192.168.10.11 ~]# docker info
Client:
Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Docker Buildx (Docker Inc., v0.8.2-docker)
  scan: Docker Scan (Docker Inc., v0.17.0)

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 20.10.17
 Storage Driver: overlay2

2.2.7 docker region

#拉取registry镜像

docker pull registry

设置配置目录

[root@dba_bigdata_node1 192.168.10.11 kolla]# vim /etc/docker/registry/config.yml
version: 0.1
log:
fields:

    service: registry
storage:
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
    Access-Control-Allow-Origin: ['*']
    Access-Control-Allow-Methods: ['*']
    Access-Control-Max-Age: [1728000]

health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

启动内部源

docker run -d \--name registry \   -p 4000:5000 \   -v /etc/docker/registry/config.yml:/etc/docker/registry/config.yml \   registry:latest[root@dba_bigdata_node1 192.168.10.11 kolla]# docker psCONTAINER ID   IMAGE             COMMAND                  CREATED         STATUS        PORTS     NAMES7db4f7e1abbf   registry:latest   "/entrypoint.sh /etc…"   2 seconds ago   Up 1 second             registry

修改内部源地址

[root@dba_bigdata_node1 192.168.10.11 kolla]# vim /etc/docker/daemon.json"insecure-registries": ["172.16.212.241:5000","192.168.10.11:4000"]

重启docker

[root@dba_bigdata_node1 192.168.10.11 kolla]# systemctl restart docker[root@dba_bigdata_node1 192.168.10.11 kolla]# docker start registry

查看docker信息

[root@dba_bigdata_node1 192.168.10.11 kolla]# docker infoInsecure Registries:  172.16.212.241:5000  192.168.10.11:5000  127.0.0.0/8

测试是否可用

#查看docker中的images信息

[root@dba_bigdata_node1 192.168.10.11 kolla]# docker imagesREPOSITORY TAG       IMAGE ID       CREATED       SIZEregistry     latest    3a0f7b0a13ef   4 weeks ago   24.1MB#重命名docker images名字[root@dba_bigdata_node1 192.168.10.11 kolla]# docker tag registry 192.168.10.11:4000/registry#将本地images推送到内部源[root@dba_bigdata_node1 192.168.10.11 kolla]# docker push 192.168.10.11:4000/registryUsing default tag: latestThe push refers to repository [192.168.10.11:4000/registry]73130e341eaf: Pushed692a418a42be: Pushedd3db20e71506: Pushed145b66c455f7: Pushed994393dc58e7: Pushedlatest: digest: sha256:29f25d3b41a11500cc8fc4e19206d483833a68543c30aefc8c145c8b1f0b1450 size: 1363

2.2.8 docker region UI

配置Docker UI 与nginx代理。通过UI管理查看docker images信息

#制作docker - uidocker run -p 81:80 \   --name registry-ui \   -e REGISTRY_URL="http://192.168.10.11:5000" \   -d 172.16.212.241:5000/docker-registry-ui:latest
访问地址:http://192.168.10.11:81/
可以查看具体的docker images信息

2.3 Ansible

2.3.1 安装ansible

安装ansible,只需要在node1主机安装配置即可。

[root@dba_bigdata_node1 192.168.10.11 ~]# yum install -y ansible

2.3.2 配置ansible默认配置

sed -i 's/#host_key_checking = False/host_key_checking = True/g' /etc/ansible/ansible.cfgsed -i 's/#pipelining = False/pipelining = True/g' /etc/ansible/ansible.cfgsed -i 's/#forks = 5/forks          = 100/g' /etc/ansible/ansible.cfg

2.3.3 配置ansible主机信息

[root@dba_bigdata_node1 192.168.10.11 ~]# echo "dba_bigdata_node[1:3]" >>/etc/ansible/hosts

2.3.4 验证是否安装完毕

[root@dba_bigdata_node1 192.168.10.11 ~]# ansible all -m pingdba_bigdata_node1 | SUCCESS => {"ansible_facts": {        "discovered_interpreter_python": "/usr/bin/python"    },    "changed": false,    "ping": "pong"}dba_bigdata_node3 | SUCCESS => {    "ansible_facts": {        "discovered_interpreter_python": "/usr/bin/python"    },    "changed": false,    "ping": "pong"}dba_bigdata_node2 | SUCCESS => {    "ansible_facts": {        "discovered_interpreter_python": "/usr/bin/python"    },    "changed": false,    "ping": "pong"}

2.4 Ansible Kolla

以下安装步骤,在主机node1中进行即可。

2.4.1 安装kolla-ansible

[root@dba_bigdata_node1 192.168.10.11 ~]# pip install kolla-ansible==9.4.0

若安装报错。

pip install --upgrade setuptoolspip install --upgrade pippip install pbr==5.6.0

2.4.2 设置默认配置到当前目录

mkdir -p /etc/kollachown $USER:$USER /etc/kollacp -r /usr/share/kolla-ansible/etc_examples/kolla/* /etc/kollacp /usr/share/kolla-ansible/ansible/inventory/* .

2.4.3 配置安装主机列表

编辑/root/multinode

# These initial groups are the only groups required to be modified. The# additional groups are for more control of the environment.[control]# These hostname must be resolvable from your deployment hostdba_bigdata_node1dba_bigdata_node2dba_bigdata_node3
# The above can also be specified as follows:#control[01:03] ansible_user=kolla
# The network nodes are where your l3-agent and loadbalancers will run# This can be the same as a host in the control group[network]dba_bigdata_node1dba_bigdata_node2dba_bigdata_node3
[compute]dba_bigdata_node1dba_bigdata_node2dba_bigdata_node3
[monitoring]dba_bigdata_node1dba_bigdata_node2dba_bigdata_node3
# When compute nodes and control nodes use different interfaces,# you need to comment out "api_interface" and other interfaces from the globals.yml# and specify like below:#compute01 neutron_external_interface=eth0 api_interface=em1 storage_interface=em1 tunnel_interface=em1
[storage]dba_bigdata_node1dba_bigdata_node2dba_bigdata_node3
[deployment]dba_bigdata_node1dba_bigdata_node2dba_bigdata_node3

2.4.4 配置kolla安装设置

vim /etc/kolla/globals.yml
[root@dba_bigdata_node1 192.168.10.11 kolla]# cat globals.yml |egrep -v '^#|^$'---kolla_base_distro: "centos"kolla_install_type: "source"openstack_release: "train"node_custom_config: "/etc/kolla/config"kolla_internal_vip_address: "192.168.10.20"docker_namespace: "kolla"network_interface: "enp7s0f0"api_interface: "{{ network_interface }}"storage_interface: "{{ network_interface }}"cluster_interface: "{{ network_interface }}"tunnel_interface: "{{ network_interface }}"dns_interface: "{{ network_interface }}"neutron_external_interface: "enp7s0f1"neutron_plugin_agent: "openvswitch"neutron_tenant_network_types: "vxlan,vlan,flat"keepalived_virtual_router_id: "51"enable_haproxy: "yes"enable_mariadb: "yes"enable_memcached: "yes"enable_ceilometer: "yes"enable_cinder: "yes"enable_cinder_backup: "yes"enable_cinder_backend_lvm: "yes"enable_gnocchi: "yes"enable_heat: "yes"enable_neutron_dvr: "yes"enable_neutron_qos: "yes"enable_neutron_agent_ha: "yes"enable_neutron_provider_networks: "yes"enable_nova_ssh: "yes"cinder_volume_group: "cinder-volumes"nova_compute_virt_type: "qemu"nova_console: "novnc"

生产随机密码

kolla-genpwd[root@dba_bigdata_node1 192.168.10.11 kolla]# cat /etc/kolla/passwords.yml.....zfssa_iscsi_password: XL8XeUdxaowGT9HUsOnGpxJyalvlm9YV6xNvZZx0zun_database_password: lhxgYCRaiN4ACvFgISIbgimGxkUe1z3pVgU0CYxdzun_keystone_password: ZDNuGXjOUyme28dUX1fWKbXdDDvItAxxtjYRwiUx

修改登录密码

sed -i 's/^keystone_admin_password.*/keystone_admin_password: 123456/' /etc/kolla/passwords.yml

2.4.5 LVM盘

发现CEPH制作盘的时候,无法创建主机,所以修改为LVM。

创建逻辑盘

pvcreate /dev/sdb

创建逻辑卷

vgcreate cinder-volumes /dev/sdb

查看是否创建成功

[root@dba-bigdata-node1 192.168.10.11 /]# vgsVG             #PV #LV #SN Attr   VSize  VFree  centos           1   3   0 wz--n-  1.63t       0  cinder-volumes   1   2   0 wz--n- <3.82t <195.21g[root@dba-bigdata-node1 192.168.10.11 /]# pvs  PV         VG             Fmt  Attr PSize  PFree  /dev/sda2  centos         lvm2 a--   1.63t       0  /dev/sdb   cinder-volumes lvm2 a--  <3.82t <195.21g[root@dba-bigdata-node1 192.168.10.11 /]# lvs  LV                                          VG             Attr       LSize   Pool                Origin Data%  Meta%  Move Log Cpy%Sync Convert  home                                        centos         -wi-ao----   1.58t  root                                        centos         -wi-ao----  50.00g  swap                                        centos         -wi-ao----   4.00g  cinder-volumes-pool                         cinder-volumes twi-aotz--  <3.63t                            0.00   10.41  volume-beb1939a-b444-4ea0-b326-86f924fe3a50 cinder-volumes Vwi-a-tz-- 100.00g cinder-volumes-pool        0.00

修改kolla的配置为LVM

enable_cinder: "yes"enable_cinder_backup: "yes"enable_cinder_backend_lvm: "yes"cinder_volume_group: "cinder-volumes"

2.4.6 配置nova文件

mkdir /etc/kolla/configmkdir /etc/kolla/config/novacat >> /etc/kolla/config/nova/nova-compute.conf << EOF[libvirt]virt_type = qemucpu_mode = noneEOF

2.4.7 关闭创建新卷

mkdir /etc/kolla/config/horizon/cat >> /etc/kolla/config/horizon/custom_local_settings << EOFLAUNCH_INSTANCE_DEFAULTS = {'create_volume': False,}EOF

2.4.8 创建ceph配置

cat >> /etc/kolla/config/ceph.conf << EOF[global]osd pool default size = 3osd pool default min size = 2mon_clock_drift_allowed = 2osd_pool_default_pg_num = 8osd_pool_default_pgp_num = 8mon clock drift warn backoff = 30EOF

2.3 OpenStack 安装

2.3.1 编辑docker包

预先下载并推送docker包到各个节点,加快安装时候的速度

kolla-ansible -i /root/multinode pull
 

2.3.2 各节点依赖安装

kolla-ansible -i /root/multinode bootstrap-servers

2.3.3 执行安装前检查

kolla-ansible -i /root/multinode prechecks

2.3.4 部署

部署之前,先下载所有所有的docker依赖安装包,并推送到所有主机上,以加快部署
kolla-ansible -i /root/multinode pull
到主机通过docker images上查看

为了以后使用,让这些安装的包推送到docker registry

重命名:docker tag 原名:tag 新名:tag

docker images |grep ^kolla|grep 'train ' |awk '{print "docker tag "$1 ":" $2 " 192.168.10.11:4000/" $1 ":" $2 }'

将本地的image信息,推送到本地源

docker images |grep ^kolla|grep 'train ' |awk '{print "docker push 192.168.10.11:4000/" $1 ":" $2 }'

查看是否推送完毕

开始执行实际的安装:大概需要等待半小时左右。

kolla-ansible -i /root/multinode deploy

2.3.5 初始化

[root@dba-bigdata-node1 192.168.10.11 ~]# kolla-ansible -i multinode post-deploy

会在本机,生成console需要的各种变量

root@dba-bigdata-node1 192.168.10.11 ~]# cat /etc/kolla/admin-openrc.sh# Clear any old environment that may conflict.for key in $( set | awk '{FS="="} /^OS_/ {print $1}' ); do unset $key ; doneexport OS_PROJECT_DOMAIN_NAME=Defaultexport OS_USER_DOMAIN_NAME=Defaultexport OS_PROJECT_NAME=adminexport OS_TENANT_NAME=adminexport OS_USERNAME=adminexport OS_PASSWORD='4rfv$RFV094'export OS_AUTH_URL=http://192.168.10.20:35357/v3export OS_INTERFACE=internalexport OS_IDENTITY_API_VERSION=3export OS_REGION_NAME=RegionOneexport OS_AUTH_PLUGIN=password

安装openstack命令行程序

yum install centos-release-openstack-train -yyum makecache fastyum install python-openstackclient -y

修改初始化脚本,并执行初始化:/usr/share/kolla-ansible/init-runonce

ENABLE_EXT_NET=${ENABLE_EXT_NET:-1}EXT_NET_CIDR=${EXT_NET_CIDR:-'10.0.2.0/24'}EXT_NET_RANGE=${EXT_NET_RANGE:-'start=10.0.2.150,end=10.0.2.199'}EXT_NET_GATEWAY=${EXT_NET_GATEWAY:-'10.0.2.1'}

浏览器访问OpenStack 页面:http://192.168.10.20即可访问

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/17417.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

优先级队列(堆)——小记

文章目录堆概念堆的创建堆向下调整堆的插入堆的删除堆排序整体代码&#xff08;创建堆&#xff08;向下调整&#xff09;&#xff0c;堆的插入&#xff0c;堆的删除&#xff0c;堆排序&#xff09;TOPKPriorityQueue特性堆 概念 如果有一个关键码的集合Kk0&#xff0c;k1&…

48 基于 jdk9 编译的 jdk8 的字节码报错

前言 呵呵 大概是由于最近的这个 “Apache Log4j被曝存在严重高危险级别远程代码执行漏洞” 昨天晚上 编译了一下 logging-log4j2-log4j-2.15.0-rc2, 项目需要一个 toolchain.xml 的一个配置, 里面需要配置为 jdk9 因此 我的项目配置的 jdk 为 jdk9 然后 idea 里面默认…

【计算机毕业设计】校园二手市场平台+vue源码

一、系统截图&#xff08;需要演示视频可以私聊&#xff09; 摘 要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐…

校园跑腿系统小程序怎么用_校园跑腿系统小程序的基本功能是什么

大学可能是人生中最可能的阶段&#xff0c;而大学也是创业的最佳选择。近年来&#xff0c;在微信小程序的红利生态圈下&#xff0c;校园跑腿系统系统已经成为大学校园创业的第一热点。 随着大学生人数的增加&#xff0c;消费水平也在不断地提高&#xff0c;大学校园内代取快递、…

交换机之trunk access hybrid 以及vlan深入理解

服务器开发系列 文章目录服务器开发系列一、802.1Q封装VLAN数据帧格式是&#xff1f;二、Access Trunk Hybrid是什么&#xff1f;三、Access Trunk Hybrid数据处理流程是什么&#xff1f;四、示例五、最简单交换机应用总结一、802.1Q封装VLAN数据帧格式是&#xff1f; IEEE 80…

kubernetes中ingress控制器traefik获取真实客户源IP

一.现象 公司kubenetes生产环境使用的ingress控制器是traefik&#xff0c;默认是通过deployment部署的&#xff0c;现在研发上反馈不能获取客户的真实源IP地址&#xff0c;通过x_forward_for获取的IP地址都是kubernetes集群内部的IP地址。 二.解决思路 通过查找traefik的官方…

【雨夜】业务中 自定义异常用 Exception 还是 RuntimeException? 为什么?

今天和同事 聊了下异常 相关的事&#xff0c;整理在此 目前公司中使用的 自定义异常是 extend RuntimeException 目录 思维导图 继承异常 我们在业务开发中 继承异常是extend RuntimeException 还是 Exception呢 一想 这肯定是 RuntimeException 啊&#xff0c;但是这是为什…

kingdee漏洞金蝶云星空存在弱口令漏洞

kingdee漏洞简介 金蝶云星是基于云计算、大数据、社交、人工智能、物联网等前沿技术研发的新一代战略性企业管理软件。金蝶云星空存在弱口令漏洞&#xff0c;攻击者利用该漏洞登录系统后台&#xff0c;获取敏感信息。 CNNVD编号&#xff1a;CNVD-2022-15854危害等级&#xff…

【C++笔试强训】第二十七天

&#x1f387;C笔试强训 博客主页&#xff1a;一起去看日落吗分享博主的C刷题日常&#xff0c;大家一起学习博主的能力有限&#xff0c;出现错误希望大家不吝赐教分享给大家一句我很喜欢的话&#xff1a;夜色难免微凉&#xff0c;前方必有曙光 &#x1f31e;。 &#x1f4a6;&a…

使用PostMan测试WebService接口

在浏览器中输入 http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl 查看是否启动服务&#xff0c;确保WS地址可用。通过地址获取获取WSDL地址相关参数&#xff0c;并找空间命名&#xff0c;这个位置是固定的&#xff0c;下面会用到&#xff0c;这里是 http://WebXml.c…

62岁腾格尔要开线上演唱会,直播间能否唱《遥远的地方》成焦点

人生六十岁一花甲&#xff0c;著名草原歌手腾格尔&#xff0c;在经历了人生的风风雨雨后&#xff0c;如今已经步入了六十二岁的年龄。虽然已经年过花甲&#xff0c;但是腾格尔老师依旧意气风发&#xff0c;他的个人线上演唱会&#xff0c;也准备在11月19日与大家见面。 在网友的…

【C++布隆过滤器和哈希切分】

目录 1.布隆过滤器概念 2.布隆过滤器优点 3.哈希切分 位图储存的类型只能是整形&#xff0c;有没有储存自定义类型或者是字符串类型的“位图”呢&#xff1f; 1.布隆过滤器概念 步隆过滤器是由布隆&#xff08;Burton Howard Bloom&#xff09;在1970年提出的 一种紧凑型的…

从3D ToF到智能座舱系统方案,英飞凌如何赋能未来出行?

当前&#xff0c;全球汽车产业正处于大变革和市场重构的关键时期&#xff0c;智能汽车新时代的大幕已然拉开。 “智能座舱、人机交互已经成为车载信息娱乐系统‘智能化’的新亮点。”英飞凌相关负责人表示。在汽车智能化、网联化、电动化等大趋势下&#xff0c;越来越多的创新…

【C++进阶】map和set——下篇(红黑树的学习以及封装map和set)

&#x1f387;C学习历程&#xff1a;入门 博客主页&#xff1a;一起去看日落吗持续分享博主的C学习历程博主的能力有限&#xff0c;出现错误希望大家不吝赐教分享给大家一句我很喜欢的话&#xff1a; 也许你现在做的事情&#xff0c;暂时看不到成果&#xff0c;但不要忘记&…

ggplot2图形简单绘制

文章目录一、所用函数1. sort、rank、order用法2. arrange 用法3. reorder用法4. cumsum 用法5. interaction用法二、散点图三、折线图、直方图、箱线图四、柱状图1. 单一变量 &#xff08;统计单一变量的属性值分布&#xff09;2. 单一变量fill &#xff08;列联表&#xff09…

mybatis详解

学习到现在,作为我们的java萌新来说,是时候来学习一点偷懒的武林秘籍了,今天我给大家介绍的就是在无上秘宝--mybatis持久型框架. 学习一个东西之前,我们得首先了解他的前世今生... 前世:原是Apache的一个开源项目iBatis, 2010年6月这个项目由ApacheSoftware Foundation 迁移到…

SQL注入靶机练习:BUU SQL COURSE 1

SQL注入靶机练习&#xff1a;BUU SQL COURSE 1一、SQL注入知识点二、前置知识三、SQL注入测试的一般步骤四、解题过程一、SQL注入知识点 可参考SQL注入详解 二、前置知识 参考来源&#xff1a;渗透攻防Web篇-深入浅出SQL注入 mysql5.0以上版本中存在一个重要的系统数据…

无敌,全面对标字节跳动2-2:算法与数据结构突击手册(leetcode)

学习是一种基础性的能力。然而&#xff0c;“吾生也有涯&#xff0c;而知也无涯。”&#xff0c;如果学习不注意方法&#xff0c;则会“以有涯随无涯&#xff0c;殆矣”。 学习就像吃饭睡觉一样&#xff0c;是人的一种本能&#xff0c;人人都有学习的能力。我们在刚出生的时候…

某城市道路桥梁设计计算书+cad图纸

第一章 工程概述 41 1.1设计题目 41 1.2 设计资料 42 1&#xff0e;3 桥梁设计的基本要求 42 1.3.1 使用上的要求&#xff1a; 42 1.3.2 经济上的要求&#xff1a; 42 1.3.3 结构和尺寸上的要求&#xff1a; 42 1.3.4 施工上的要求&#xff1a; 42 1.3.5美观上的要求&#xff1…

Aspose.PDF for Java Crack by Xacker

Aspose.PDF for Java 是一个本地库&#xff0c;使开发人员能够将 PDF 处理功能添加到他们的应用程序中。API 可用于构建任何类型的 32 位和 64 位应用程序&#xff0c;以在不使用 Adob​​e Acrobat 的情况下生成或读取、转换和操作 PDF 文件。 Aspose.PDF for Java API 允许执…