The pod has been stuck in the pending state for more than five minutes
- 检查Pod内部能不能访问网络,Creating状态的Pod是不能通过终端访问的,如果你的服务器还有其他的Pod,看看启动是不是正常,从终端连进去试试网络。
- 检查Pod 是否用到了Persistent Volume 需要创建
- 可能是Persistent Volume无法访问到,如果是网络服务,检查相关存储的状态,以及防火墙状态。如果在防火墙上设置允许某些服务访问网络而不是直接指定端口,那防火墙必须保持开启状态。
我使用All-In-One的运行方式,发现最多只能使用20个pod,查阅官方文档发现可以设置每个node最大的pod数量
https://docs.openshift.org/latest/admin_guide/manage_nodes.html#admin-guide-max-pods-per-node
因为我是直接解压运行,所以node-config.yaml位置是在:
/home/openshift/openshift.local.config/node-example.com/node-config.yaml
但是我按照文档的说法做了以下设置 没有生效
kubeletArguments:
max-pods:
- "250"
试了很多遍,发现要同时设置pods-per-core参数才可以,会取其中的最小值
kubeletArguments:
pods-per-core:
- "150"
max-pods:
- "250"
注意一定要按照官方文档的缩进格式,用空格缩进
要想实现AutoScaler 除了必须设置pod的Resources Limit,设置AutoScaler条件之外,还得安装度量组件(Metrics)才行。
安装Metrics参见 https://github.com/openshift/origin-metrics
先把这个项目用git clone下来。
官方建议通过ansible安装,但由于我是在单服务器上解压Binary压缩包配置运行的,ansible用起来比较麻烦,就采用官方不推荐的旧办法了,通过安装一个Pod (metrics-deployer)自动化部署。
参见https://github.com/openshift/origin-metrics/blob/master/docs/deployer_installation.adoc
按照文档操作很简单,但是里面有坑,metrics-deployer运行时有版本错误,我需要说一下过程,不过这篇文档是事后写的,有点忘了,大致是这个样子。
有一个命令是 oc process -f metrics.yaml …是用来安装metrics-deployer的。
这个oc process 貌似也出错了,记不清了,我按照《开源容器云平台OpenShift》这本书所说,运行下面这个命令
别忘了把apps.example.com改成你自己的域名
oc new-app --template=metrics-deployer-templete \
-p HAWKULAR_METRICS_HOSTNAME=hawkular-metrics.apps.example.com \
-p IMAGE_PREFIX=openshift/origin \
-p USE_PERSISTENT_STORAGE=false
运行并查看pod日志发现运行脚本有错误,命令不存在,考虑到从docker hub下载的是最新版本, 也就是3.9版,而我的openshift 版本是3.7.1,大概是因为需要安装对应版本的才行。
好在 oc process -f metrics.yaml 后面还有参数,可以指定版本号:IMAGE_VERSION。需要上面的命令最后加上
-p IMAGE_VERSION=xxx \
参数说明 https://github.com/openshift/origin-metrics/blob/master/docs/deployer_configuration.adoc#deployer-template-parameters
去Docker Hub找 openshift/origin-metrics-deployer ,不好意思我已经忘了用的哪个版本了,应该是v3.7.0-rc.0 或者 v3.7.2 。运行后提示的错误是:命令的参数不存在,坑就在这,我试了7、8个版本没有一个能用的。
下载这个docker镜像的速度是很慢的,推荐使用镜像加速,使用镜像的方法在下一节。
解决办法是通过origin 的控制台 找到 openshift-infra 这个项目的pod: “metrics-deployer”,从debug in terminal 进入ssh,通过dockerfile找到命令运行脚本,删除缺少的参数,最后在这个调试环境的ssh运行一下,metrics就会被部署上。
当然,上面这还有一个前提,你得能看到openshift-infra 这个项目,如果看不到,通过下面的方式给当前用户受个cluster-admin权限(我是用的admin用户)
oc adm policy add-cluster-role-to-user cluster-admin admin
最后再补充一个坑,按照文档一切设置好之后,你会发现在控制台的deployments里,current usage获取不到,因此还是不能实现AutoScaler
这应该是个bug,不支持部署类型是DeploymentConfig 的容器,换成ReplicationController就行了。3.7版本是这样,这个bug 貌似 3.9 就修复了。
DaoCloud 有个镜像加速器非常好用,首先要注册一个daocloud帐号,就会拿到这个加速的地址 xxxx.m.daocloud.io
https://www.daocloud.io/mirror
编辑配置文件 /etc/sysconfig/docker ,然后重启docker
OPTIONS 的后面加上 --registry-mirror=http://xxxxxx.m.daocloud.io