繼續我們的踩坑之旅吧!
第五步:安裝ansible,可以通過如下命令安裝ansible最新版本:
yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sed -i -e "s/^enabled=1/enabled=0/" /etc/yum.repos.d/epel.repo
yum -y --enablerepo=epel install ansible pyOpenSSL
但有時我們希望安裝指定版本的話(經常會碰到一些兼容性的問題),上面的命令就不好用了,那么我們可以用下面的方法來安裝:
sudo yum -y install ansible
sudo yum -y install epel-release
sudo yum -y install python-pip
sudo pip install --upgrade pip
sudo pip install --upgrade ansible==2.7.10
當然openshift3.11版本對ansible的版本要求至少在2.6.5以上,讀者隨便用指定版本或最新版本安裝ansible都可以用滿足要求的。
第六步:以此鏡像為模板,我分別修改了3臺虛擬機,每臺虛擬機4G內存和2核cpu:
分別修改3臺機器主機名:
hostnamectl set-hostname master01.okd.com
hostnamectl set-hostname node01.okd.com
hostnamectl set-hostname node02.okd.com
修改3臺機器的/etc/hosts,都寫入以下設置:
192.168.122.159 master01.okd.com
192.168.122.158 node01.okd.com
192.168.122.160 node02.okd.com
配置完IP和主機名后我要檢驗三臺虛擬主機的連通情況:
ping master01.okd.com
ping node01.okd.com
ping node02.okd.com
結果發現相互之間都ping不通,然而百度都是可以訪問的,這讓我一個運維老手頓時傻眼,當然這個小坑很容易被我填平了,究其原因是因為我克隆的3臺虛擬機的mac地址是一樣的,只要修改它們的mac地址不同即可,如下圖所示:
第七步:在master01.okd.com主機上安裝playbook,正是有了playbook腳本我們才能比較方便的完成openshift的集群部署工作,但真的方便嗎?天坑正在等待我們……
用以下命令完成下載和安裝:
yum install -y unzip zip
cd /
wget https://github.com/openshift/openshift-ansible/archive/release-3.11.zip
unzip release-3.11.zip
第八步:為playbook腳本提速,我們要修改openshift-ansible-release-3.11 olesopenshift_repos emplatesCentOS-OpenShift-Origin311.repo.j2文件,將鏡像地址改為mirrors.aliyun.com,如下圖所示:
第九步:修改master01.okd.com主機的/etc/ansible/hosts文件,內容如下:
[OSEv3:children]
masters
nodes
etcd
[OSEv3:vars]
ansible_ssh_user=root
openshift_deployment_type=origin
# 機器配置還達不到官方推薦的配置,所有這里把機器配置檢查關掉,不然安裝會失敗
openshift_disable_check=disk_availability,docker_storage,memory_availability,docker_image_availability
openshift_master_identity_providers=[{'name':'htpasswd_auth','login':'true','challenge':'true','kind':'HTPasswdPasswordIdentityProvider',}]
os_firewall_use_firewalld=true
openshift_master_default_subdomain=okd.com
openshift_master_cluster_hostname=master01.okd.com
openshift_master_cluster_public_hostname=master01.okd.com
[masters]
master01.okd.com
[etcd]
master01.okd.com
[nodes]
# default project默認registry-console指向master
# default project默認router和docker-registry指向infra
# 如果不匹配會出現pending狀態
master01.okd.com openshift_node_group_name='node-config-master'
node01.okd.com openshift_node_group_name='node-config-infra'
node02.okd.com openshift_node_group_name='node-config-compute'
上面這段hosts文件腳本中其實也隱藏了一個坑,那就是:
node01.okd.com openshift_node_group_name='node-config-infra',很多文章不管三七二十一,和node02.okd.com節點一樣,全部配置成'node-config-compute',即使最后安裝成功了,但你會發現router和docker-registry服務狀態一直是pending狀態,原因是default project默認router和docker-registry指向infra,所以我們必須要為某一個節點配置'node-config-infra',否則安裝好的openshift在沒有了default project項目的router和docker-registry服務情況下將啥事都不能干,您說這個坑還小嗎?當然這還不是天坑,起碼裝出來了呀,問題在于根本裝不出來,因為天坑就在前面了,當你遇到天坑的話,打道回府的是多數,我經過不斷的排疑填平了天坑,心里暗自竊喜。大家繼續跟著我走向天坑吧!
第十步:為了完成集群部署的自動操作,我們必須為3臺機器配置免密登錄,在master01.okd.com主機上運行如下命令完成:
生成秘鑰一直回車 ssh-keygen
ssh-copy-id master01.okd.com
ssh-copy-id node01.okd.com
ssh-copy-id node02.okd.com
生成秘鑰和復制后測試一下免密的互聯性:
ansible all -m ping
如果您看到下圖的結果則表明免密互聯成功:
然后再通過下面的命令重啟每個host的dnsmq即可:
ansible all -m shell -a "systemctl restart dnsmasq"
如下圖所示:
恭喜您,又向天坑邁進了一步!
第十一步:準備集群部署前的檢查測試工作,我們在master01.okd.com主機上運行如下命令:
ansible-playbook /openshift-ansible-release-3.11/playbooks/prerequisites.yml
當您看到下圖中沒有任何一個failed的結果時,代表檢測成功:
第十二步:集群安裝,終于到這步了,官方告知我們可以運行下面這條命令:
ansible-playbook /openshift-ansible-release-3.11/playbooks/deploy_cluster.yml
即可完成整個集群部署,但事實上能夠很順利一條龍打通的幾乎是不可能的,官坑也害人呀!我分析了deploy_cluster.yml腳本,發現其實就是按順序執行如下幾個分部的腳本:
ansible-playbook /openshift-ansible-release-3.11/playbooks/openshift-checks/pre-install.yml
ansible-playbook /openshift-ansible-release-3.11/playbooks/openshift-node/bootstrap.yml
ansible-playbook /openshift-ansible-release-3.11/playbooks/openshift-etcd/config.yml
ansible-playbook /openshift-ansible-release-3.11/playbooks/openshift-master/config.yml(這里就是天坑的位置)
ansible-playbook /openshift-ansible-release-3.11/playbooks/openshift-master/additional_config.yml
ansible-playbook /openshift-ansible-release-3.11/playbooks/openshift-node/join.yml
ansible-playbook /openshift-ansible-release-3.11/playbooks/openshift-hosted/config.yml
ansible-playbook /openshift-ansible-release-3.11/playbooks/openshift-monitoring/config.yml
ansible-playbook /openshift-ansible-release-3.11/playbooks/openshift-web-console/config.yml
ansible-playbook /openshift-ansible-release-3.11/playbooks/openshift-console/config.yml
每一個分部腳本必須沒有任何一個failed才算安裝部署完成。我推薦大家按順序分步執行每個yml腳本!
好了,小伙伴們在《容器云平臺OpenShift3.11集群部署歷險記(下)》里繼續看我怎么填平一路的坑和最后的天坑吧!