ITPub博客

首页 > 数据库 > 数据库开发技术 > 运维笔记之:OpenShift节点状态检查

运维笔记之:OpenShift节点状态检查

原创 数据库开发技术 作者:招牌鸡蛋面 时间:2021-01-07 23:42:26 0 删除 编辑

什么是OpenShift?

红帽把Kubernetes包装了一下,添加一些功能,做成了OpenShift这个企业级PaaS产品,卖给不差钱的企业。全名叫:OpenShift Container Platform,简称ocp,命令都是以oc开头,相当于给kubectl做了个别名。其它的不多说了,参考官网吧!


OpenShift官网:https://www.openshift.com


作为新晋OpenShift运维人员,当你面对一个全新的OpenShift平台,你是否一脸懵逼?心里想着:我要怎么开始表演?要怎么隐藏菜鸟的身份?以及。。。


切记,此时不要慌。你只需要问大佬们:master节点服务器登录信息告诉我一下呗~


接下来,你就可以开始你的表演了!


登录master节点,这个是你表演的舞台,来,查看OpenShift节点信息:

root@master01 ~ # oc get nodesNAME                 STATUS            ROLES     AGE       VERSIONmaster01.opclab.com   Ready            master    30d      v1.11.0+d4cacc0master02.opclab.com   Ready            master    30d      v1.11.0+d4cacc0node01.opclab.com     Ready            compute   30d      v1.11.0+d4cacc0node02.opclab.com     Ready            compute   30d      v1.11.0+d4cacc0node03.opclab.com     Ready            compute   30d      v1.11.0+d4cacc0node04.opclab.com     Ready            compute   30d      v1.11.0+d4cacc0node05.opclab.com     Ready            compute   30d      v1.11.0+d4cacc0infra01.opclab.com    Ready            infra     30d      v1.11.0+d4cacc0infra02.opclab.com    Ready            infra     17d      v1.11.0+d4cacc0router01.opclab.com   Ready            router    30d      v1.11.0+d4cacc0router02.opclab.com   Ready            router    17d      v1.11.0+d4cacc0

从这个结果来看,STATUS都是Ready,看来每个节点状态都正常。


如果你发现有下面这样的状态,那你就可以直接问大佬了:出什么事情了?谁把这个节点调度给disable了啊?相信我,此话一出,大佬们会很高兴的给你讲这背后的故事。

root@master01 ~ # oc get nodesNAME                 STATUS                      ROLES     AGE       VERSIONmaster01.opclab.com   Ready                      master    30d      v1.11.0+d4cacc0master02.opclab.com   Ready                      master    30d      v1.11.0+d4cacc0node01.opclab.com     NotReady                   compute   30d      v1.11.0+d4cacc0node02.opclab.com     Ready                      compute   30d      v1.11.0+d4cacc0node03.opclab.com     Ready                      compute   30d      v1.11.0+d4cacc0router01.opclab.com   Ready                      router    30d      v1.11.0+d4cacc0router02.opclab.com   Ready,SchedulingDisabled   router    17d      v1.11.0+d4cacc0


根据官方文档描述,各node节点只有三种不同的状态:

Condition Description

Ready

The node is passing the health checks performed from the master by returning StatusOK.

NotReady

The node is not passing the health checks performed from the master.

SchedulingDisabled

Pods cannot be scheduled for placement on the node.        

也就是说除了Ready状态外,其它状态都是不正常的,需要继续排查,找到原因。


小技巧:

如果想查看节点详细信息,只要加上-o wide参数即可,k8s版本,内核版本,container-runtime版本,节点IP都给你列出来了:

root@master01 ~ # oc get nodes -o wideNAME                   STATUS    ROLES     AGE       VERSION           EXTERNAL-IP      OS-IMAGE                                      KERNEL-VERSION          CONTAINER-RUNTIMEmaster01.opclab.com    Ready     master     1d        v1.10.0+b81c8f8   54.172.185.130   Red Hat Enterprise Linux Server 7.5 (Maipo)   3.10.0-862.el7.x86_64   docker://1.13.1node01.opclab.com      Ready     compute    1d        v1.10.0+b81c8f8   54.88.22.81      Red Hat Enterprise Linux Server 7.5 (Maipo)   3.10.0-862.el7.x86_64   docker://1.13.1node02.opclab.com      Ready     compute    1d        v1.10.0+b81c8f8   34.230.50.57     Red Hat Enterprise Linux Server 7.5 (Maipo)   3.10.0-862.el7.x86_64   docker://1.13.1


如果只查看计算节点服务器名称:

root@master01 ~ # oc get node --no-headers | grep compute | awk 'print {$1}'master01.opclab.commaster02.opclab.comnode01.opclab.com...


上面的oc get node命令只是查看集群节点overview的信息,没有资源使用情况的信息。那集群各节点的资源使用情况怎么看呢?



root@master01 ~ $ oc adm top nodesNAME                  CPU(cores)   CPU%      MEMORY(bytes)   MEMORY%master01.opclab.com   297m         29%       4263Mi          55%node01.opclab.com     55m          5%        1201Mi          15%infra01.opclab.com    85m          8%        1319Mi          17%router01.opclab.com   182m         18%       2524Mi          32%master-0.opclab.com   178m         8%        2584Mi          16%...

一切正常,没毛病!这一波操作之后,大佬们也会觉得你666


接下来,你再查看一下pod数量:

root@master01 ~ # oc get podsNAME                               READY     STATUS              RESTARTS   AGEcakephp-mysql-persistent-1-build   0/1       ContainerCreating   0          6mmysql-1-9767d                      0/1       ContainerCreating   0          2mmysql-1-deploy                     0/1       ContainerCreating   0          6m

这里需要注意的是,默认情况下,oc get pods命令只会列出默认namespace的pod数量,如果你想要列出所有的pod,需要加上--all-namespaces参数。


具体是这个样子:

root@si0vm4320 ~ # oc get pods --all-namespacesNAMESPACE       NAME                         READY     STATUS                  RESTARTS   AGEproject-a       project-a-72-86r26           1/1       Running                 1          27dproject-b       project-b-38-hskvc           1/1       Running                 0          29dproject-b       project-b-23-jclwx           1/1       Running                 0          29dproject-c       project-c-46-build           0/1       Completed               0          28dproject-c       project-c-47-q7zp2           1/1       Running                 0          28d.........


大佬问你了,我们这个集群所有节点上的pod数量,包括master、infra和router节点,一共有多少啊?如果你说给我点时间,让我数数看,那大佬会投来这样的眼光:


你应该说,来我们一起看一下,你一边面带微笑跟大佬说,一边敲下面的命令:

root@master01 ~ # oc get pods --all-namespaces | wc -l897


然后你说一共897个,等等,应该是896个,返回结果第一行是header,再敲一遍:

root@master01 ~ # oc get pods --all-namespaces --no-headers | wc -l896


最后大佬说,你能不能给我列出来每个节点上的:

- pod总数量

- running状态的pod数量

- error状态的pod数量


你说没问题,我上个厕所先,回来就搞。然后你就去上厕所,打开微信搜索:OpenShift节点状态检查


找到这篇文章,仔细看下面部分,就是你想要的答案~


回到问题上来,我们理一下思路:如果想查看集群各个节点上pod的数量,那你就得知道怎么查看指定节点上的pod数量。其实没有直接的oc命令查看指定node节点的pod数量,但是允许我们指定namespace,而且oc get pods命令可以加-o wide参数看到pod running在哪个node节点上。这就好办了,查看指定node节点上的pod,只需要grep一下某台node节点服务器名称就行,具体数量嘛,还是管道给wc -l就行了,大概是下面这个样子:

root@master01 ~ # oc get pods --all-namespaces --no-headers -o wide | grep node01.opclab.com | wc -l102


上面的是总数量,包括running,error,pending等等所有状态的pods数量。那怎么查看running状态的呢?简单,再grep一下running就可以了

root@master01 ~ # oc get pods --all-namespaces --no-headers -o wide | grep node01.opclab.com | grep Running


具体running状态的pod数量,交给wc -l计算:

root@master01 ~ # oc get pods --all-namespaces --no-headers -o wide | grep node01.opclab.com | grep Running | wc -l88


其它状态的这里就不写了,相信你知道该怎么获取了。


最后我们把上面的命令写成一个脚本,格式化输出,更好看一些。脚本代码如下:

root@master01 ~ # cat podscount.sh#!/bin/bashecho '''==============================================================                                                        ====       OpenShift Pods Status On All Compute Nodes       ====       echo "When: $(date)"                             =============================================================='''echo -e "Nodename\tTotal\tRunning\tError"for server in $(oc get nodes --no-headers | awk '{print $1}')doecho -e "$server \t$(oc get pods --all-namespaces --no-headers -o wide | grep $server | wc -l) \\t$(oc get pods --all-namespaces --no-headers -o wide | grep $server | grep -i running | wc -l) \\t$(oc get pods --all-namespaces --no-headers -o wide | grep $server | grep -i error | wc -l)";done


我们来运行一下,运行之前别忘了给脚本文件赋予可执行权限:

root@master01 ~ # chmod +x podscount.shroot@master01 ~ # ./podscount.sh
============================================================== ==== OpenShift Pods Status On All Nodes ====       When: Wed Jan  6 08:31:11 CET 2021               ==============================================================Nodename    Total   Running Errornode01 85 76 0node02      198     64      10node03      108     82      0node04      126     50      3node05      153     102     4...


现在你可以回去了,回到工位之后,在大佬面前继续你的表演~~~此时大佬会投来这样的目光:


恭喜你!已经成功吸引大佬们的注意!离背锅侠又进了一步。

原文作者:BPShare;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
干过测试,做过运维,还兼职过售前+投标+实施+售后+客户培训。前两年入坑大数据开发,熟悉Azure + Databricks大数据相关产品。 喜欢研究技术,所以搞了一个公众号:BPShare,分享一些经验和心得。欢迎骚扰~~~

注册时间:2020-02-17

  • 博文量
    90
  • 访问量
    44237