继续我们的踩坑之旅吧!
第五步:安装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集群部署历险记(下)》里继续看我怎么填平一路的坑和最后的天坑吧!