1. 程式人生 > >使用Kolla部署Pike版本的OpenStack-多節點雲平臺

使用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

節點 4G ens33橋接

注:每個主機的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使用方法!喜歡的同學可以關注老師,持續更新中!