精选文章

容器云平台OpenShift3.11集群部署历险记(下)

2020-05-26 17:56:18 | 来源:中培企业IT培训网

让我们向天坑发起冲刺吧!


当你在为前面几步0个failed沾沾自喜的时候,天坑降临了,在执行/openshift-ansible-release-3.11/playbooks/openshift-master/config.yml脚本时,一直会卡在这步:


Wait for all control plane pods to come up and become ready,脚本不断的在等待openshift的pod容器的相应,经过漫长的等待,终于跳出了天坑的错误提示信息:


failed: [master01.okd.com] (item=etcd) => {"ansible_loop_var": "item", "attempts": 72, "changed": false, "item": "etcd", "msg": {"cmd": "/sr/bin/oc get pod master-etcd-master01.okd.com -o json -n kube-system", "results": [{}], "returncode": 1, "stderr": "The connection to the server master01.okd.com:8443 was refused - did you specify the right host or port? ", "stdout": ""}}


当然脚本还会继续尝试等待响应,3次失败后,宣告部署失败,明晃晃的一个failed出现在master01.okd.com主机上,但不可思议的是报错信息是8443端口拒绝,我们明明在之前已经开放了8443端口呀,怎么会8443端口拒绝响应呢?我顿时傻眼了,为了验证,我用curl master01.okd.com:8443请求,结果就是8443 refused,我用同样的方法测试curl master01.okd.com:22请求,很快主机上的ssh就回复了。


很多小伙伴到这里不堪忍受就放弃了,而上面这个错误我在国内和国外的贴吧里找了一遍也没有正确的解决方法。经过2天的思考,忽然我灵光乍现,一个念头出现了:是不是因为8443端口上根本就没有程序在执行,而不是端口没有开放而造成的refused呢?


我用命令cat /etc/sysconfig/iptables看了一下,发现openshfit安装到目前的地步,只占用了8444端口,而8443端口处于待命闲置状态。那是不是我的docker准备安装的镜像缺失造成playbook没有运行这个缺失的镜像在8443端口上待命呢?


想到这里,我不断的在网上验证我的想法,终于在国外一个不起眼的贴吧里找到了openshift3.11集群部署需要的docker镜像清单,我比对了一下,发现缺失了如下这些镜像:


docker pull docker.io/cockpit/kubernetes:latest

docker pull docker.io/openshift/prometheus-node-exporter:v0.16.0

docker pull quay.io/coreos/kube-rbac-proxy:v0.3.1

docker pull quay.io/openshift/origin-

cluster-monitoring-operator:v3.11

docker pull docker.io/ansibleplaybookbundle/

origin-ansible-service-broker:v3.11

docker pull quay.io/coreos/prometheus-

config-reloader:v0.23.2

docker pull docker.io/openshift/prometheus-

alertmanager:v0.15.2

docker pull docker.io/openshift/prometheus:v2.3.2

docker pull quay.io/coreos/kube-state-

metrics:v1.3.1

docker pull docker.io/openshift/origin-

docker-builder:v3.11


是不是这其中的某个镜像没有而造成8443 refused的问题呢?死马当活马医,我抱着试试看的心理,再次在三个镜像中安装了上面这些被我遗漏的镜像,之后再次来到第十二步集群安装,来到/openshift-ansible-release-3.11/playbooks/openshift-master/config.yml鬼门关时,一颗心都是悬着的,过了72次的retries,一个打脸的报错又出现了:


failed: [master01.okd.com] (item=etcd) => {"ansible_loop_var": "item", "attempts": 72, "changed": false, "item": "etcd", "msg": {"cmd": "/usr/bin/oc get pod master-etcd-master01.okd.com -o json -n kube-system", "results": [{}], "returncode": 1, "stderr": "The connection to the server master01.okd.com:8443 was refused - did you specify the right host or port? ", "stdout": ""}}


难道还是不对吗?一个master01.okd.com的failed砸了过来,我基本已经崩溃了,在心灰意冷的情况下,我想再试2次,不行我就放弃吧!


第二次一样failed,心情再次跌落到深渊,为了安慰自己便再试最后一次,在第三次执行/openshift-ansible-release-3.11/playbooks/openshift-master/config.yml脚本时我已经麻木了……


俗话说得好,“山重水复疑无路,柳暗花明又一村”。正当我面对天坑打道回府之际,奇迹出现了,我截屏了这一瞬间的时刻,大家看下图: 



在master01.okd.com上终于部署成功了,我经历了3个70多次的retries后终于看到了胜利的曙光:



后面就一帆风顺了,全部脚本执行完成后我执行oc get nodes查看集群node运行情况:



并执行oc get pods --all-namespaces查看pod的running状态:



在node01.okd.com和node02.okd.com上执行docker ps查看集群运行的情况:




三台机器已经协同运行了!


我在master01.okd.com主机上创建了登录账户:

htpasswd -b /etc/origin/master/htpasswd admin admin

oc login -u system:admin

oc adm policy add-cluster-role-to-user cluster-admin admin


最后在windows系统的客户端的hosts文件设置了openshift地址并访问:

C:WindowsSystem32driversetchosts

192.168.122.159 master01.okd.com

192.168.122.158 node01.okd.com

192.168.122.160 node02.okd.com 




久违的画面出现了,至此我们终于成功了!


再回过头来想想,刚才的天坑是怎么造成的,主要有如下几点:


1.openshift3.11需要的镜像准备不全。


2.在虚拟机环境下由于资源有限,从而造成一直等到pod响应,因为容器启动是要时间的,因此第一次失败很正常,如果您在真机上运行说不定一次就能通过。但不要紧,后台的pod正在启动中,只要playbook检测到了就会通过,在我经过3次尝试后,后台的pod终于启动成功了,很多小伙伴就是由于耐不住寂寞,而放弃了,当然如果您的镜像准备不全的话,尝试10000次也是天坑的报错打脸。


至此,我的容器云openshift3.11集群部署历险记就写到这里,希望要安装容器云的小伙伴可以踩着我的尸体顺利完成!


标签: 云平台 容器云