使用Kolla部署Pike版本的OpenStack-多節點雲平臺
講師MK:學習中遇到問題可以私信老師幫你解決
準備硬體環境
新建立3臺虛擬機器,分別作為controller節點,compute節點,storage節點。其中controller節點2張網絡卡,compute、storage節點各1張網絡卡。作業系統為centos7.5
注:controller節點 也作為安裝結點
主機名 IP 角色 記憶體 網絡卡型別
xuegod63 192.168.1.63 controller節點 8G ens33和ens38都橋接
xuegod64 192.168.1.64 compute節點 4G ens33橋接
xuegod62 192.168.1.62 storage
注:每個主機的ens33網絡卡作為內部管理openstack的網路和web介面的網路介面。 controller節點的ens38網絡卡作為 對外的 網路。 compute和storage一張即可,因為不需要tunnel網路,直接使用1個網絡卡。
實驗拓撲圖:
xuegod63再新增1個網絡卡:兩個網絡卡都是橋接
準備xuegod62 儲存結點環境
只用一個網絡卡,storage節點新加一塊磁碟,作為cinder的lvm後端。記憶體使用4G
xuegod64 computer結點,記憶體改成4G,只用一個網絡卡
linux系統環境配置
3臺機器開始做初始化配置,以一下步驟需要在每一臺機器上操作
1、關閉Selinux和防火牆
[[email protected] ~]# vim /etc/selinux/config
SELINUX=disabled
[[email protected] ~]# reboot #如果原來的系統開著selinux,那麼需要重啟,才能關閉selinux
2、關閉Firewalld
[[email protected] ~]# systemctl stop firewalld && systemctl disable firewalld && systemctl status firewalld
[[email protected] ~]# systemctl stop firewalld && systemctl disable firewalld && systemctl status firewalld
[[email protected] ~]# systemctl stop firewalld && systemctl disable firewalld && systemctl status firewalld
3、安裝 Epel源
[[email protected] ~]# mv /opt/CentOS-* /etc/yum.repos.d/ #這個在大家的機器上不需要執行。因為我的centos自帶的yum源配置檔案,被移走了
[[email protected] ~]# yum install epel-release -y
[[email protected] ~]# yum install epel-release -y
[[email protected] ~]# yum install epel-release -y
4、配置 Hostname
[[email protected] ~]# echo xuegod63.cn > /etc/hostname
[[email protected] ~]# echo xuegod62.cn > /etc/hostname
[[email protected] ~]# echo xuegod64.cn > /etc/hostname
5、配置/etc/hosts
[[email protected] ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.63 xuegod63.cn xuegod63
192.168.1.64 xuegod64.cn xuegod64
192.168.1.62 xuegod62.cn xuegod62
[[email protected] ~]# scp /etc/hosts 192.168.1.64:/etc/
[[email protected] ~]# scp /etc/hosts 192.168.1.62:/etc/
注:hosts檔案中的短主機名,給rabbitmq使用的。 rabbitmq服務會使用短主機域名
6、同步時間
[[email protected] ~]# yum install ntp -y && systemctl enable ntpd.service && systemctl start ntpd.service
[[email protected] ~]# yum install ntp -y && systemctl enable ntpd.service && systemctl start ntpd.service
[[email protected] ~]# yum install ntp -y && systemctl enable ntpd.service && systemctl start ntpd.service
7、配置xuegod63上 pip 軟體包源,方便快速下載python庫(這一步很重要)
[[email protected] ~]# mkdir ~/.pip
[[email protected] ~]# vim /root/.pip/pip.conf #寫入下以內容
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
6.1.2 配置xuegod63網絡卡資訊
生成ens38的網絡卡配置檔案
[[email protected] ~]#cd /etc/sysconfig/network-scripts/
[[email protected] network-scripts]# cp ifcfg-ens33 ifcfg-ens38
[[email protected] network-scripts]# vim ifcfg-ens38
TYPE="Ethernet"
BOOTPROTO="none"
NAME="ens38"
DEVICE="ens38"
ONBOOT="yes"
檢查一下ens33網絡卡配置檔案,發現在新新增網絡卡,重啟系統後,啟動協議變了,現在改回來。
[[email protected] network-scripts]# vim ifcfg-ens33
改:BOOTPROTO="dhcp"
為:BOOTPROTO="none"
[[email protected] network-scripts]# service network restart
檢視網路:
[[email protected] network-scripts]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.63 netmask 256.256.255.0 broadcast 192.168.1.255
。。。
ens38: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 #不用配置IP
inet6 fe80::20c:29ff:fe49:1fe2 prefixlen 64 scopeid 0x20<link>
6.1.3 在3臺機器上安裝基礎包和docker服務
1、安裝基礎包和必要的一些系統工具,只在xuegod63上操作,因為xuegod63是部署節點,這些包是安裝kolla-ansible必需要的。單純的controller節點,只需要安裝一個docker服務就可以了,因為controller需要的軟體包,都在docker映象中包括了,不需要再安裝軟體的。
注:xuegod63充當了兩個角色: kolla-ansible 部署節點, 和 controller 節點
拓撲圖如下:
[[email protected] network-scripts]# yum install python-devel libffi-devel gcc openssl-devel git python-pip -y
[[email protected] ~]# pip install -U pip #升級一下pip,不然後,後期安裝會報警告
[[email protected] ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
[[email protected] ~]# yum install ansible #安裝ansible
2、新增docker yum源並安裝docker
關閉libvirtd服務:
[[email protected] ~]# systemctl stop libvirtd.service && systemctl disable libvirtd.service && systemctl status libvirtd.service
[[email protected] ~]# systemctl stop libvirtd.service && systemctl disable libvirtd.service && systemctl status libvirtd.service
[[email protected] ~]# systemctl stop libvirtd.service && systemctl disable libvirtd.service && systemctl status libvirtd.service
如果有的話,解除安裝舊的Docker,否則可能會不相容:
[[email protected] ~]# yum remove docker docker-io docker-selinux python-docker-py
[[email protected] ~]# yum remove docker docker-io docker-selinux python-docker-py
[[email protected] ~]# yum remove docker docker-io docker-selinux python-docker-py
因為咱們centos預設安裝的是docker版本,而kolla使用的是docker-ce版本。
新增docker-ce yum源配置檔案並安裝docker
[[email protected] ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[[email protected] ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[[email protected] ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新並安裝 Docker-CE社群版本
[[email protected] ~]# yum -y install docker-ce
[[email protected] ~]# yum -y install docker-ce
[[email protected] ~]# yum -y install docker-ce
開啟Docker服務
[[email protected] ~]# systemctl start docker && systemctl enable docker && systemctl status docker
[[email protected] ~]# systemctl start docker && systemctl enable docker && systemctl status docker
[[email protected] ~]# systemctl start docker && systemctl enable docker && systemctl status docker
3、設定3臺伺服器的docker volume卷掛載方式和docker映象加速器
[[email protected] ~]# mkdir /etc/systemd/system/docker.service.d
[[email protected] ~]# tee /etc/systemd/system/docker.service.d/kolla.conf << 'EOF'
[Service]
MountFlags=shared
EOF
設定 docker 映象加速器
[[email protected] ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://e9yneuy4.mirror.aliyuncs.com"]
}
注:如果需要使用自己的本地私有倉庫,寫成如下:
{
"registry-mirrors": ["https://e9yneuy4.mirror.aliyuncs.com"]
"insecure-registries": ["192.168.1.63:4000"]
}
重啟相關服務
[[email protected] ~]# systemctl daemon-reload
[[email protected] ~]# systemctl enable docker && systemctl restart docker && systemctl status docker
xuegod62
設定 volume 掛載方式
[[email protected] ~]# mkdir /etc/systemd/system/docker.service.d
[[email protected] ~]# tee /etc/systemd/system/docker.service.d/kolla.conf << 'EOF'
[Service]
MountFlags=shared
EOF
設定 docker 映象加速器
[[email protected] ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://e9yneuy4.mirror.aliyuncs.com"]
}
重啟相關服務
[[email protected] ~]# systemctl daemon-reload
[[email protected] ~]# systemctl enable docker && systemctl restart docker && systemctl status docker
xuegod64
設定 volume 掛載方式
[[email protected] ~]# mkdir /etc/systemd/system/docker.service.d
[[email protected] ~]# tee /etc/systemd/system/docker.service.d/kolla.conf << 'EOF'
[Service]
MountFlags=shared
EOF
設定 docker 映象加速器
[[email protected] ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://e9yneuy4.mirror.aliyuncs.com"]
}
重啟相關服務
[[email protected] ~]# systemctl daemon-reload
[[email protected] ~]# systemctl enable docker && systemctl restart docker && systemctl status docker
6.1.4 xuegod62 storage配置cinder儲存資訊
[[email protected] ~]# ls /dev/sdb
/dev/sdb
[[email protected] ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
[[email protected] ~]# vgcreate cinder-volumes /dev/sdb #建立一個名字為cinder-volumes的卷組,給後期cinder使用
Volume group "cinder-volumes" successfully created
[[email protected] ~]# systemctl enable lvm2-lvmetad.service
[[email protected] ~]# vgs
VG #PV #LV #SN Attr VSize VFree
cinder-volumes 1 0 0 wz--n- <20.00g <20.00g
到此3臺機器的基礎軟體包環境已經安裝好。
6.2 安裝kolla-ansible
1、安裝kolla-ansible
注:kolla-ansible可以實現使用ansible自動安裝docker
[[email protected] ~]# pip install kolla-ansible
注:官方推薦部署環境使用pip install kolla-ansible 方式來安裝kolla-ansible
https://docs.openstack.org/kolla-ansible/latest/user/quickstart.html #官方安裝手冊
2、複製kolla-ansible的相關配置檔案
[[email protected] ~]# cp -r /usr/share/kolla-ansible/etc_examples/kolla /etc/
[[email protected] ~]# cp /usr/share/kolla-ansible/ansible/inventory/* /etc/kolla/
[[email protected] kolla-ansible]# ls /etc/kolla/
all-in-one globals.yml multinode passwords.yml
注:all-in-one #安裝單節點openstack的ansible自動安裝配置檔案,就是ansible主機清單檔案
multinode #安裝多節點openstack的ansible自動安裝配置檔案,就是ansible主機清單檔案
globals.yml #部署openstack的自定義配置檔案
passwords.yml #openstack中各個服務的密碼
4、修改虛擬機器型別為qemu
注:如果是在虛擬機器裡裝kolla,希望可以在虛擬機器中再啟動虛擬機器,那麼你需要把virt_type=qemu,預設是kvm。如果vmware開了“虛擬化Intel VT”功能,就不用寫這個了。
[r[email protected] kolla-ansible]# mkdir -p /etc/kolla/config/nova
[[email protected] kolla-ansible]# cat << EOF > /etc/kolla/config/nova/nova-compute.conf
[libvirt]
virt_type=qemu
cpu_mode = none
EOF
6.3 自定義kolla-ansible安裝openstack的相關配置檔案
1、自動生成openstack各服務的密碼檔案
[[email protected] kolla-ansible]# kolla-genpwd
[[email protected] ~]# vim /etc/kolla/passwords.yml
改:162 keystone_admin_password: HsPbEQHxTqmewKYNoRPpIOyQNdEYpHy36OX67TG3
為:keystone_admin_password: 123456
注:這是登入Dashboard,admin使用的密碼,你可以根據自己需要進行修改。
2、編輯 /etc/kolla/globals.yml 自定義openstack中部署事項
[[email protected] ~]# vim /etc/kolla/globals.yml #配置openstack安裝中的引數
改:15 #kolla_base_distro: "centos" #選擇下載的映象為基於centos版本的映象
為: kolla_base_distro: "centos"
改:18 #kolla_install_type: "binary" #去了前面的#號,使用yum安裝二進位制包安裝,原始碼安裝,指的是使用git clone原始碼安裝
為:18 kolla_install_type: "binary"
改:21 #openstack_release: ""
為:openstack_release: "pike" #指定安裝pike版本的openstack,後期下載的openstack相關的docker映象的tag標記也都為pike
改:24 #node_custom_config: "/etc/kolla/config" #配置檔案的位置
為:24 node_custom_config: "/etc/kolla/config" #去了前面的#號,因為我對nova節點做了自定義。如:我自定義virt_type 虛擬化型別為qemu,預設是kvm。
改:31 kolla_internal_vip_address: "10.10.10.254"
為:31 kolla_internal_vip_address: "192.168.1.63" # 我們沒有啟用高可用,所以這裡的IP可以和ens33一樣,也可以獨立寫一個和ens33同網段的IP。
注:如果配置了高可用,這裡要使用一個沒被佔用的IP。這個IP是搭建HA高可用的浮動IP。 此IP將由keepalived管理以提供高可用性,應設定為和network_interface ens33 同一個網段的地址。
改:85 #network_interface: "eth0"
為: network_interface: "ens33" #設定OpenStack所以節點內部通訊使用的網路介面。這是openstack內部多個管理型別網路的預設介面。這裡我們以ens33作為內部通訊網路
改: 把前面的#號去了
89 #kolla_external_vip_interface: "{{ network_interface }}"
90 #api_interface: "{{ network_interface }}"
91 #storage_interface: "{{ network_interface }}"
92 #cluster_interface: "{{ network_interface }}"
93 #tunnel_interface: "{{ network_interface }}"
94 #dns_interface: "{{ network_interface }}"
為:
89 kolla_external_vip_interface: "{{ network_interface }}"
90 api_interface: "{{ network_interface }}"
91 storage_interface: "{{ network_interface }}"
92 cluster_interface: "{{ network_interface }}"
93 tunnel_interface: "{{ network_interface }}"
94 dns_interface: "{{ network_interface }}"
注:這樣所有內部通訊網路都走network_interface ,即ens33
改:100 #neutron_external_interface: "eth1"
為:100 neutron_external_interface: "ens38" # ens38作為外部網路,所需的第二個介面專用於Neutron外部(或公共)網路,可以是vlan或flat,取決於網路的建立方式。 此介面應在沒有IP地址的情況下處於活動 如果不是,雲主機例項將無法訪問外部網路。 所以ens38不能有IP,只要網絡卡啟動著,就可以了。
改:150 #enable_cinder: "no"
為:150 enable_cinder: "yes" #刪除最前面的#號,並改no為yes。 啟用cinder
改:155 #enable_cinder_backend_lvm: "no"
為:155 enable_cinder_backend_lvm: "yes" #刪除最前面的#號,並改no為yes。cinder後端用lvm
改:167 #enable_haproxy: "yes"
為:167 enable_haproxy: "no" #刪除最前面的#號,並改yes為no。關閉高可用
改:319 #cinder_volume_group: "cinder-volumes"
為:319 cinder_volume_group: "cinder-volumes" #取消前面的#號,這個卷組的名字是我們在xuegod62上建立的
6.4 開始基於kolla-ansible安裝openstack私有云
6.4.1 生成SSH Key,並授信本節點:
[[email protected] ~]# ssh-keygen
[[email protected] ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
[[email protected] ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
[[email protected] ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
注:ssh-copy-id 複製公鑰時,後面要寫主機名,不要寫IP。因為後期ansible自動安裝節點,主機清單中寫的是主機名不是IP。
6.4.2 配置multinode多結點清單檔案
[[email protected] ~]# vim /etc/kolla/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 host
xuegod63
# 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]
xuegod63
# inner-compute is the groups of compute nodes which do not have
# external reachability
[inner-compute]
# external-compute is the groups of compute nodes which can reach
# outside
[external-compute]
xuegod64
[compute:children]
inner-compute
external-compute
[monitoring]
xuegod63
# When compute nodes and control nodes use different interfaces,
# you need to comment out "api_interface" and other interfaces from the global
s.yml
# and specify like below:
#compute01 neutron_external_interface=eth0 api_interface=em1 storage_interface
=em1 tunnel_interface=em1
[storage]
xuegod62
[deployment]
xuegod63
注:配置下面的內容不需要修改。裡面的內容很好理解,表示一個控制節點 controller,網路節點也安裝到控制節點,一個計算節點 compute ,一個儲存節點 storage,後面的部分不用修改
6.4.3 開始部署OpenStack
1、對主機進行預部署檢查:
[[email protected] kolla]# kolla-ansible -i /etc/kolla/multinode prechecks
報錯:
fatal: [xuegod62]: FAILED! => {"changed": false, "cmd": ["/usr/bin/python", "-c", "import docker; print docker.__version__"],
。。。
, "ImportError: No module named docker"], "stdout": "", "stdout_lines": []}
解決:在xuegod62和xuegod64上執行:
[[email protected] ~]# pip uninstall docker
[[email protected] ~]# pip uninstall docker-py
[[email protected] ~]# pip install -U docker --ignore-installed requests
[[email protected] ~]# kolla-ansible -i /etc/kolla/multinode prechecks #再執行,出現以下介面說明檢測沒有問題。
2、最後進入實際的OpenStack部署
[[email protected] ~]# kolla-ansible -i /etc/kolla/multinode deploy #因為此時邊下載各種openstack相關的映象並部署docker例項,會比較慢。等待30分鐘左右。就可以了。我配置了docker映象加速結點,所以也會比較快
會先安裝xuegod63.
檢視xuegod63上的網路連線:
[[email protected] kolla-ansible]# netstat -antup
tcp 0 32 192.168.1.63:33052 116.62.81.173:443 LAST_ACK -
tcp 0 32 192.168.1.63:33116 116.62.81.173:443 LAST_ACK -
[[email protected] kolla-ansible]# docker images #檢視下載的映象
[[email protected] kolla-ansible]# docker ps #檢視正在執行的docker例項
報錯總結:
如果安裝中執行docker例項報錯。
解決:
[[email protected] ~]# kolla-ansible -i /etc/kolla/multinode deploy #重新執行一下就可以了
到此安裝成功。
3、驗證部署
[[email protected] ~]# kolla-ansible post-deploy -i /etc/kolla/multinode
這樣就建立 /etc/kolla/admin-openrc.sh 檔案
[[email protected] kolla]# ll /etc/kolla/admin-openrc.sh
-rw-r--r-- 1 root root 323 8月 10 17:58 /etc/kolla/admin-openrc.sh
[[email protected] kolla]# cat /etc/kolla/admin-openrc.sh ##檢視openstack登入帳號
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=123456 #帳號和密碼
4、測試:http://192.168.1.63 訪問成功。
下節課給大家講OpenStack使用方法!喜歡的同學可以關注老師,持續更新中!