阿里雲上跑火車(安裝 OpenStack Train 版本),猜猜最終花了多少錢?
前言
前面給大家提供了用虛擬機安裝 OpenStack 的鏡像,雖然已經很簡便了,但還是略顯笨重。一來鏡像文件比較大,二來個人電腦資源比較有限,體驗不是很好。
最最重要的是,使用個人電腦沒法展示 Kolla
的真正實力,多節點安裝。
為了讓大家能充分體驗到雲計算帶來的便利,我把目光盯上了公有雲。
本期先介紹基本操作,仍然是部署一個 All-In-One
的環境。
選擇阿里雲
國內首選的公有雲當然是阿里雲了,我其實很早就買了個阿里雲的雲服務器,但是一直沒充分利用,這次雖然配置還不夠來搭建環境,但是正好可以拿來構建鏡像。
如果你是新用戶當然要先去 阿里雲 注冊賬號啦,新用戶首購優惠幅度會比較大,可以等到促銷的時候下手。
注意!!:本次演示用的是搶占式按量付費虛機,按照規則,在阿里雲有任何消費,你就不屬於新用戶了。所以,如果你想利用新用戶優惠買個雲主機長期使用,務必請先把包年包月的服務器先買好,以免喪失了新用戶的優惠資格。切記!切記!
准備出發!
准備工作
因為 Kolla
的鏡像源存放在 docker hub,在雲主機上直接訪問是比較慢的(時間就是金錢啊!),並且沒有提供最新的 OpenStack 版本 train
構建。
這次我是通過 kolla 自行構建了最新的鏡像。並且上傳到阿里雲的容器鏡像服務里,這樣在阿里雲的雲主機里就可以享受內網的速度,非常快的拉取鏡像了。
構建鏡像還踩了點小坑,具體過程后續有機會再詳述,就不在本文贅述了。
創建 ECS
選擇計費方式
來到阿里雲的 ECS 創建頁面,可以看到有 3 種計費類型:
- 包年包月
- 按量付費
- 搶占式實例
用 Kolla 部署 OpenStack 需要有 8GB
內存,按此配置,包年包月的價格其實不低了,也沒那個必要。
按量付費,0.5
元/小時,已經能接受了。
別急,切換到搶占式實例,一個小時 0.07
元,不用四舍五入,這也等於不要錢好么!
果斷升級到 4 vCPU 16 GiB
的配置吧。
相同的配置在不同的區域價格可能會有差別
選擇鏡像
選擇最新的 CentOS 7.7 64位
,取消勾選“安全加固”,我們只是臨時測試,用不上:
選擇 VPC 和交換機
默認情況下,阿里雲為我們提供了默認的網絡,但是這里虛機需要用到 2 塊網卡,只有選擇 VPC 網絡后,才能支持添加彈性網卡。
VPC 網絡和交換機參考下面的步驟創建。
創建 VPC 和交換機
依次填寫信息:
- VPC 名字
- 交換機名字
- 交換機的可用區
- 交換機的地址段
VPC 每個區域內一個即可,所以地址段默認分的比較大,/16
,交換機是每個可用區一個,地址段默認是 /24
,每個可用區的地址段不能用沖突。多個可用區的交換機可以接到同一個 VPC 里面。
交換機必須和 ECS 在同一個可用區,如果 ECS 隨機到了其它可用區,可以再去建一個交換機。
配置公網和安全組
必須要分配公網 IP,不然我們沒法訪問這個虛機了:
勾選公網 IP 后,會多出來收費方式。不用擔心公網流量的費用,拉取鏡像的時候都是走的內網流量。只有從雲服務器流出的流量才會收費。所以可以忽略不記。
勾選安全組,放開 80
和 443
端口:
注意,安全組的配置是獨立於 ECS 的,下次再用到這個默認安全組的時候,就不用再次開啟了。
增加輔助網卡
Kolla 必須要有 2 塊網卡,所以我們這里必須要再增加一塊彈性網卡:
實際測試中,並沒有用到它,所以我們暫時不關心它的配置
密碼和主機名配置
登錄憑證按個人習慣,選擇密鑰對或者密碼:
建議使用密鑰方式,更安全也更方便一點。
配置實例名和主機名,實例名是在阿里雲網頁上看到的名字,主機名是虛機內部的 hostname
,如果虛機有多個的情況下,還是有必要配置一下。
這次我們仍然是單節點 All-In-One
,所以主機名無所謂。
其它配置無需修改,直接確認訂單。
回到控制台,等待實例狀態變成 運行中
。
安裝部署工具
從 SSH 登錄到雲服務器里,開始下面的步驟。
安裝 docker-ce
CentOS7
系統自帶的軟件源里的 docker
版本比較低,我們需要安裝 docker-ce
。先配置安裝源。
先去 阿里雲鏡像站,選擇 容器,然后選擇 docker-ce
,按照頁面幫助操作即可:
# step 1: 安裝必要的一些系統工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加軟件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新並安裝Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 開啟Docker服務
sudo service docker start
安裝 Ansible
sudo yum install -y ansible
安裝 kolla-ansible
因為我用的是最新的 kolla
構建的鏡像,對應的 kolla-ansible
貌似還沒有發布到 pypi
上,所以這里我們選擇從源碼安裝。
到我發此文時,新版本的
kolla-ansible
已經發布,所以可以直接安裝:
pip install kolla-ansible
原文仍保留,以作為參考
先安裝 git
sudo yum -y install git
克隆 kolla-ansible
源碼,從國內的鏡像站下載:
git clone http://git.trystack.cn/openstack/kolla-ansible
# 下載完畢后直接安裝
pip install kolla-ansible/
注意到后面的斜杠
/
,表示針對本地目錄安裝
配置 Kolla
在前面的 iso
鏡像中,一些基礎配置被合入到了系統啟動腳本里,這里必須要手動執行了。
拷貝 /etc/kolla
先把 kolla-ansible
安裝后生成的配置文件拷貝到 /etc/kolla/
下:
mkdir /etc/kolla
cp /usr/share/kolla-ansible/etc_examples/kolla/* /etc/kolla/
生成密碼
執行:
kolla-genpwd
執行完成后,所有的密碼會存在 /etc/kolla/passwords.yml
中。
注意: 我在這里遇到個版本問題:
這個錯誤在我后面的測試中沒有出現,應該已經被修復了。保留內容供參考。
# kolla-genpwd
Traceback (most recent call last):
File "/usr/bin/kolla-genpwd", line 10, in <module>
sys.exit(main())
File "/usr/lib/python2.7/site-packages/kolla_ansible/cmd/genpwd.py", line 133, in main
fernet_keys, hmac_md5_keys)
File "/usr/lib/python2.7/site-packages/kolla_ansible/cmd/genpwd.py", line 67, in genpwd
private_key, public_key = generate_RSA()
File "/usr/lib/python2.7/site-packages/kolla_ansible/cmd/genpwd.py", line 52, in generate_RSA
format=serialization.PublicFormat.OpenSSH
File "/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/rsa.py", line 514, in public_bytes
self._rsa_cdata
File "/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/backend.py", line 1706, in _public_key_bytes
return self._openssh_public_key_bytes(key)
File "/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/backend.py", line 1740, in _openssh_public_key_bytes
serialization._ssh_write_mpint(public_numbers.e) +
AttributeError: 'module' object has no attribute '_ssh_write_string'
cryptography 最新版本(2.8)有點兼容問題,重新卸載安裝一個比較舊的版本:
pip uninstall cryptography
pip install "cryptography==2.7"
配置 /etc/kolla/globals.yml
需要修改的配置項如下:
# Valid option is Docker repository tag
#openstack_release: ""
openstack_release: "train"
# This should be a VIP, an unused IP on your network that will float between
# the hosts running keepalived for high-availability. If you want to run an
# All-In-One without haproxy and keepalived, you can set enable_haproxy to no
# in "OpenStack options" section, and set this value to the IP of your
# 'network_interface' as set in the Networking section below.
#kolla_internal_vip_address: "10.10.10.254"
kolla_internal_vip_address: "192.168.1.100"
docker_registry: "registry.cn-shanghai.aliyuncs.com"
docker_namespace: "davycloud"
docker_registry_insecure: "no"
除了 kolla_internal_vip_address
地址段是和你創建 ECS 時選擇的 VPC 對應,其它配置項必須保持一致。
注意 鏡像是在阿里雲的
華東2(上海)
中的虛機內創建的,所以當時上傳到了cn-shanghai
的 registry。如果虛機也在同一個 VPC,可以配置為 VPC 的內網地址registry.cn-shanghai.aliyuncs.com
。實際測試結果,阿里雲內即使不在同一個 VPC 拉取速度也很快。
開始部署
整體的部署流程和前面是一樣的,唯一的區別在於 docker
鏡像需要從 registry 中拉取。
雖然這個步驟在 deploy
的階段會自動執行,但是仍然推薦單獨執行下面的子命令:
kolla-ansible pull
這樣可以避免安裝過程中再發現鏡像拉取的問題,引起不必要的麻煩。默認情況下差不多幾分鍾即可完成。
具體哪些鏡像會被拉取是由 /etc/kolla/globals.yml
中啟用的服務決定的。
任務完成后,查看默認會拉取的鏡像列表:
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-nova-compute train bd289389e057 3 days ago 1.81GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-glance-api train c5f4f437fe90 4 days ago 1.05GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-nova-libvirt train c5afcfec7d0f 4 days ago 1.2GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-placement-api train 56f706e9bd1a 4 days ago 1.05GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-nova-novncproxy train 5fb9e0ab37ee 4 days ago 1.05GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-nova-api train 3187c2156d8d 4 days ago 1.08GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-nova-conductor train b0ec4052f082 4 days ago 1.05GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-nova-ssh train 619985ecbd4c 4 days ago 1.05GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-nova-scheduler train c2f8087e4786 4 days ago 1.05GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-kolla-toolbox train efd325bc7752 4 days ago 831MB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-horizon train 24a60179a9d9 4 days ago 1.21GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-neutron-l3-agent train b6affea43948 4 days ago 1.08GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-neutron-openvswitch-agent train ee776c6af139 4 days ago 1.07GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-neutron-server train 7c26e6b47bea 4 days ago 1.07GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-neutron-metadata-agent train 1e5f0b221b41 4 days ago 1.04GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-rabbitmq train 837b834dc195 4 days ago 486MB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-neutron-dhcp-agent train e143344ef32d 4 days ago 1.04GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-openvswitch-db-server train f6b855451cb8 4 days ago 422MB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-openvswitch-vswitchd train de520a25d10c 4 days ago 422MB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-heat-api train ecddc82ba63d 4 days ago 1.07GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-fluentd train 6f8d5a326d8e 4 days ago 687MB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-heat-engine train a4ec9714ecb3 4 days ago 1.07GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-heat-api-cfn train 4a53a1160b75 4 days ago 1.07GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-haproxy train a85706a03d0f 4 days ago 430MB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-keepalived train c3bddac3ceed 4 days ago 411MB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-memcached train 91eec81ebb43 4 days ago 405MB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-cron train 7586cd069cb3 4 days ago 405MB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-mariadb train 46fe8c756ebe 4 days ago 594MB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-chrony train 9984c83c211a 4 days ago 405MB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-keystone-fernet train e74fe5bdef6c 4 days ago 1.03GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-keystone-ssh train f9744dcb500f 4 days ago 1.03GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-keystone train 216e5b2be1af 4 days ago 1.03GB
注意,因為 kolla 中支持的鏡像眾多,不可能全部在阿里雲上構建,所以如果你啟用了其它服務,不能保證有對應的鏡像存在。如果想要了解我是如何構建鏡像的,請繼續關注我。
其它部署命令和以前一樣,就是 3 個命令依次執行即可:
kolla-ansible prechecks
kolla-ansible deploy
kolla-ansible post-deploy
整個安裝過程就不贅述了。相較於在個人電腦上使用 VirtualBox,阿里雲的 ECS 性能要好很多,deploy 耗時 10 分鍾左右就搞定了。
這充分展示了,利用雲平台真的可以顯著得提高效率。復雜如 OpenStack 這樣的系統也可以在雲上快速完成搭建。雖然沒什么實用,但是如果是作為演示或者是教學,顯然要比自己去准備服務器好多了。
使用 openstack 客戶端的方法
因為宿主機中沒有安裝 OpenStack 的客戶端程序,所以我在自己構建的那個系統里加了一個 bash
腳本去模擬了 openstack
命令,其實也不用那么麻煩,一行命令就能搞定,先把鏡像拉取下來:
docker pull registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-openstack-base:train
這個 centos-binary-openstack-base
鏡像中包含了所有 OpenStack 相關的客戶端,它也是所有 OpenStack 服務的基礎鏡像,換句話說,其它所有 OpenStack 服務容器中都是可以用 openstack
命令的,選擇這個基礎鏡像只是為了避免無意中啟動了其它不該運行的服務引起不必要的麻煩。
然后我們用下面這樣一行命令即可啟動一個臨時容器:
docker run --rm -it -v /etc/kolla/admin-openrc.sh:/admin-openrc.sh:ro registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-openstack-base:train bash
# 下面是在容器內執行
()# source /admin-openrc.sh
()# openstack
(openstack) service list
簡單介紹一下這幾個選項:
--rm
退出容器的時候把容器刪掉-it
需要和容器在終端中交互的時候必須帶上,別問,問我也解釋不清-v /etc/kolla/admin-openrc.sh:/admin-openrc.sh:ro
把宿主機上的文件掛載到容器內,:ro
表示容器對這個文件是只讀的
其它方面也沒有什么特別要介紹的了。可以愉快地玩耍了。
注意:計算節點的
virt_type = kvm
仍然需要修改,具體參考我前面的文章。
記得釋放實例!
差點忘了最重要的事情,測試完成后別忘了去釋放實例,以免一直扣費。
搶占式實例是保證實例有一個小時的穩定使用,不代表一個小時之后就會回收。如果供應比較大的情況下,系統可能會長期不回收你的實例,那就要一直扣費了!
記得釋放實例!
記得釋放實例!
記得釋放實例!
對操作過程有不明的可以在 B站看視頻
如果本文對你有幫助,請 點贊、 分享、在看 來一波。