allinone
date: '2019-10-27 18:27:11'
updated: '2019-10-31 20:23:10'
tags: openstack, Linux
permalink: /articles/2019/10/27/1572172031071.html
前期准备
基本配置
扩展源
代码语言:javascript复制yum install epel-release -y
hostname
代码语言:javascript复制[root@kolla ~]# cat /etc/hostname
kolla
[root@kolla ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.51.208 kolla.cn kolla
时间同步
代码语言:javascript复制yum install ntp -y && systemctl enable ntpd.service && systemctl start ntpd.service
配置 pip 源参考这里
代码语言:javascript复制mkdir ~/.pip
vim ~/.pip/pip.conf
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
配置网卡信息
物理机,两张网卡,一张是管理网卡,另一张是桥接网卡(外网网卡);
IP 地址 | 网卡类型 | 网卡 | 在 openstack 网络中的作用 |
---|---|---|---|
192.168.51.208 | bridge | enp61s0f0 | openstack 内部管理网络 (managment nework) 以后 Horizon Web 界面访问,就是通过这个 IP 地址 |
无 IP(不配置 ip) | bridge | enp61s0f3 | 外部网络 (external network) ,让 neutron 的 br-ex 绑定使用,openstack 中的虚拟机是通过这块网卡和外网通信的 |
enp61s0f3 中的配置
代码语言:javascript复制TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp61s0f3
UUID=1abc4bd5-0df3-483e-9110-55f905c4d428
DEVICE=enp61s0f3
ONBOOT=yes
安装基础包和 docker 服务
安装基础包
代码语言:javascript复制yum install python-devel libffi-devel gcc openssl-devel git python-pip -y
pip install -U pip
yum install -y yum-utils device-mapper-persistent-data lvm2
添加 docker yum 源并安装 docker
代码语言:javascript复制yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
rpm --import https://mirrors.aliyun.com/docker-ce/linux/centos/gpg #导入rpm包密钥,检查后期在线安装的rpm是否安全
安装 docker 社区版本
代码语言:javascript复制yum -y install docker-ce
systemctl start docker && systemctl enable docker && systemctl status docker
设置 docker volume 卷挂载方式
代码语言:javascript复制mkdir /etc/systemd/system/docker.service.d
tee /etc/systemd/system/docker.service.d/kolla.conf << 'EOF'
[Service]
MountFlags=shared
EOF
注:加上 MountFlags=shared 后,当 docker 宿主机新增分区时,docker 服务不用重启。添加这个参考后,后期在 openstack 中使用 cinder 存储服务时,新加磁盘比较方便。
镜像加速器设置
在此我建议部署 stein 版本镜像加速器选择 daocloud,阿里、网易等加速器可能会出现 pull docker 出现问题。
代码语言:javascript复制curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
重启相关服务
代码语言:javascript复制systemctl daemon-reload
systemctl restart docker && systemctl status docker
安装 kolla-ansible
安装 ansible
代码语言:javascript复制yum install ansible -y
pip install kolla-ansible
报错:已经安装 PyYAML 3.10,但是我们需要 PyYAML
解决:
代码语言:javascript复制pip install PyYAML --ignore-installed PyYAML
- 复制 kolla-ansible 的相关配置文件
cp -r /usr/share/kolla-ansible/etc_examples/kolla /etc/
cp /usr/share/kolla-ansible/ansible/inventory/* /etc/kolla/
- 另外安装 stein 后期会遇到 pip 包找不到的问题,在此先安装 报错信息:ImportError: cannot import name decorate 解决:
pip install -U decorator
pip install --upgrade decorate
自定义安装 kolla-ansible 安装 openstack 的相关配置文件
自动生成 openstack 各服务的密码文件
代码语言:javascript复制kolla-genpwd
修改/etc/kolla/passwords.yml
代码语言:javascript复制 keystone_admin_password: 598941324
注:这是登录 Dashboard,admin 使用的密码,你可以根据自己需要自行修改。
编辑/etc/kolla/globals.yml 文件
代码语言:javascript复制kolla_base_distro: "centos"
kolla_install_type: "binary"
openstack_release: "stein"
kolla_internal_vip_address: "192.168.51.208"
network_interface: "enp61s0f0"
neutron_external_interface: "enp61s0f3"
enable_haproxy: "no"
- kolla_install_type: "binary" :使用 yum 安装二进制包安装,源码安装,指的是使用 Git clone 源码安装
- openstack_release: "stein":指定安装 stein 版本的 openstack,后期下载的 openstack 相关的 docker 镜像的 tag 标记也都为 stein
- node_custom_config: "/etc/kolla/config":配置文件的位置
- kolla_internal_vip_address: "192.168.51.208":没有启用高可用,所以这里的 IP 可以和 enp61s0f0 一样,也可以独立写一个和 enp61s0f3 同网段的 IP。这一项的作用是:指定 openstack 内部管理地址,以后就通过这个 IP 地址访问 openstack Web 界面,管理私云。 注:如果配置了高可用,这里要使用一个没被占用的 IP。这个 IP 是搭建 HA 高可用的浮动 IP。 此 IP 将由 keepalived 管理以提供高可用性,应设置为和 network_interface enp61s0f3 同一个网段的地址。
- network_interface: "enp61s0f0":Kolla-Ansible 需要设置一些网络选项。 我们需要设置 OpenStack 使用的网络接口。设置的第一个接口是“network_interface”。 这是 openstack 内部多个管理类型网络的默认接口
- neutron_external_interface: "enp61s0f3":所需的第二个接口与用亍 Neutron 外部(或公共)网络,可以是 vlan 戒 flat,取决于网络的创建方式。 此接口应在没有 IP 地址的情况下处于活动,如果不是,openstack 于平台中的于主机实例将无法访问外部网络。 只要网卡启劢着,就可以了,不要给 IP,有 IP 时 br-ex 桥接就不成功了。
- enable_cinder: "no":先不开启 cinder
- enable_haproxy: "no":关闭高可用
开始基于 kolla-ansible 安装 openstack 私有云
生成 ssh-key,并授信本节点:
代码语言:javascript复制ssh-keygen
ssh-copy-id -i ~/.ssh/id_rsa.pub root@kolla
配置单节点清单文件
代码语言:javascript复制[root@kolla ~]# vim /etc/kolla/all-in-one
# These initial groups are the only groups required to be modified. The
# additional groups are for more control of the environment.
[control]
kolla
[network]
kolla
[compute]
kolla
[storage]
kolla
[monitoring]
kolla
[deployment]
kolla
开始部署 openstack
对主机进行预检查
代码语言:javascript复制kolla-ansible -i /etc/kolla/all-in-one prechecks
拉取镜像
代码语言:javascript复制kolla-ansible -i /etc/kolla/all-in-one pull
[root@kolla ~]# docker images | wc -l
32
大概会下载 32 个镜像文件
最后进入实际的 OpenStack 部署:
代码语言:javascript复制kolla-ansible -i /etc/kolla/all-in-one deploy
部署完成后验证部署
代码语言:javascript复制kolla-ansible -i /etc/kolla/all-in-one post-deploy
这样就创建 /etc/kolla/admin-openrc.sh 文件
代码语言:javascript复制[root@kolla ~]# cat /etc/kolla/admin-openrc.sh
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=598941324
export OS_AUTH_URL=http://192.168.51.208:35357/v3
export OS_INTERFACE=internal
export OS_IDENTITY_API_VERSION=3
export OS_REGION_NAME=RegionOne
export OS_AUTH_PLUGIN=password
部署完成
访问 192.168.51.208 即可进去 openstack 页面
openstack-allinone 使用方法
安装 openstack 客户端并创建一个云主机
安装 OpenStack client 端,方便后期使用命令行操作 openstack
代码语言:javascript复制pip install python-openstackclient
报错:ERROR: Package 'more-itertools' requires a different Python: 2.7.5 not in '>=3.4'
解决:
代码语言:javascript复制pip install more-itertools==5.0.0
pip install python-openstackclient
代码语言:javascript复制再次安装。
pip install python-neutronclient
安装 openstack 网络相关的命令
创建一个云项目
修改 init-runonce 脚本,指定浮动 IP 地址范围
init-runonce 是在 openstack 中快速创建一个云项目例子的脚本。浮劢 IP 就是云主机的公网 IP。
- 修改如下配置
vim /usr/share/kolla-ansible/init-runonce
EXT_NET_CIDR='192.168.50.0/24'
EXT_NET_RANGE='start=192.168.50.150,end=192.168.50.199'
EXT_NET_GATEWAY='192.168.50.1'
使用 init-runonce 脚本创建一个 openstack 云项目
代码语言:javascript复制source /etc/kolla/admin-openrc.sh
cd /usr/share/kolla-ansible
./init-runonce
运行完毕之后出现如下:
代码语言:javascript复制To deploy a demo instance, run:
openstack server create
--image cirros
--flavor m1.tiny
--key-name mykey
--network demo-net
demo1
运行即可安装
代码语言:javascript复制[root@kolla kolla-ansible]# openstack server create
> --image cirros
> --flavor m1.tiny
> --key-name mykey
> --network demo-net
> demo1
------------------------------------- -----------------------------------------------
| Field | Value |
------------------------------------- -----------------------------------------------
| OS-DCF:diskConfig | MANUAL |
| OS-EXT-AZ:availability_zone | |
| OS-EXT-SRV-ATTR:host | None |
| OS-EXT-SRV-ATTR:hypervisor_hostname | None |
| OS-EXT-SRV-ATTR:instance_name | |
| OS-EXT-STS:power_state | NOSTATE |
| OS-EXT-STS:task_state | scheduling |
| OS-EXT-STS:vm_state | building |
| OS-SRV-USG:launched_at | None |
| OS-SRV-USG:terminated_at | None |
| accessIPv4 | |
| accessIPv6 | |
| addresses | |
| adminPass | 7MxdJvxUhSop |
| config_drive | |
| created | 2019-10-27T02:49:06Z |
| flavor | m1.tiny (1) |
| hostId | |
| id | 43d6a986-3f92-4cdd-a21c-22ad7dcb4c3a |
| image | cirros (c912e610-4038-4a7f-8eea-670b44ac197b) |
| key_name | mykey |
| name | demo1 |
| progress | 0 |
| project_id | 8370a6827e874b768c4f9778068cb4bc |
| properties | |
| security_groups | name='default' |
| status | BUILD |
| updated | 2019-10-27T02:49:06Z |
| user_id | 7b5055a3536c415ca67f4a97752b3b5a |
| volumes_attached | |
------------------------------------- -----------------------------------------------
此时即可在 Web 上看到已创建的云主机
标题:kolla部署openstack(stein)部署
作者:cuijianzhe
地址:https://cloud.tencent.com/developer/article/2304676