暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

BPShare 2021-01-07
1886

什么是OpenShift?

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


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


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


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


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


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

    root@master01 ~ # oc get nodes
    NAME                STATUS            ROLES     AGE       VERSION
    master01.opclab.com   Ready            master    30d      v1.11.0+d4cacc0
    master02.opclab.com   Ready            master    30d      v1.11.0+d4cacc0
    node01.opclab.com     Ready            compute   30d      v1.11.0+d4cacc0
    node02.opclab.com     Ready            compute   30d      v1.11.0+d4cacc0
    node03.opclab.com     Ready            compute   30d      v1.11.0+d4cacc0
    node04.opclab.com     Ready            compute   30d      v1.11.0+d4cacc0
    node05.opclab.com     Ready            compute   30d      v1.11.0+d4cacc0
    infra01.opclab.com    Ready            infra     30d      v1.11.0+d4cacc0
    infra02.opclab.com    Ready            infra     17d      v1.11.0+d4cacc0
    router01.opclab.com   Ready            router    30d      v1.11.0+d4cacc0
    router02.opclab.com   Ready            router 17d      v1.11.0+d4cacc0

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


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

      root@master01 ~ # oc get nodes
      NAME STATUS ROLES AGE VERSION
      master01.opclab.com Ready master 30d v1.11.0+d4cacc0
      master02.opclab.com Ready master 30d v1.11.0+d4cacc0
      node01.opclab.com     NotReady          compute   30d      v1.11.0+d4cacc0
      node02.opclab.com Ready compute 30d v1.11.0+d4cacc0
      node03.opclab.com Ready compute 30d v1.11.0+d4cacc0
      router01.opclab.com   Ready             router    30d      v1.11.0+d4cacc0
      router02.opclab.com   Ready,SchedulingDisabled   router    17d      v1.11.0+d4cacc0


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

      ConditionDescription

      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 wide
        NAME                   STATUS    ROLES     AGE       VERSION           EXTERNAL-IP      OS-IMAGE                                      KERNEL-VERSION          CONTAINER-RUNTIME
        master01.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.1
        node01.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.1
        node02.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.com
          master02.opclab.com
          node01.opclab.com
          ...


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



            root@master01 ~ $ oc adm top nodes
            NAME 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 pods
              NAME READY STATUS RESTARTS AGE
              cakephp-mysql-persistent-1-build 0/1 ContainerCreating 0 6m
              mysql-1-9767d 0/1 ContainerCreating 0 2m
              mysql-1-deploy 0/1 ContainerCreating 0 6m

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


              具体是这个样子:

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


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


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

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


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

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


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

                    - 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 -l
                      102


                      上面的是总数量,包括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 -l
                          88


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


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

                            root@master01 ~ # cat podscount.sh
                            #!/bin/bash
                            echo '''
                            ============================================================
                            == ==
                            == 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}')
                            do
                            echo -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.sh
                              root@master01 ~ # ./podscount.sh


                              ============================================================
                              == ==
                              == OpenShift Pods Status On All Nodes ==
                              ==       When: Wed Jan  6 08:31:11 CET 2021               ==
                              ============================================================
                              Nodename    Total   Running Error
                              node01 85 76 0
                              node02      198     64      10
                              node03      108     82      0
                              node04      126     50      3
                              node05      153     102     4
                              ...


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


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

                              文章转载自BPShare,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                              评论