2.0diff测试方法

齐全的文章在基于Spring Boot + HttpClient框架的多平台多接口数据一致性校验diff测试2

6. 边缘端资源管理 > 主机资源 > 容器主机 node

登录跳板机,登录gsc服务器194结尾

统计个数

[root@allinone ~]#  kubectl get node -A|awk '{print $1"|||"$2"|||node,"}'|grep -v 'NAME'|wc -l

过滤需要的字段

名称 状态 类型

[root@allinone ~]#  kubectl get node -A|awk '{print $1"|||"$2"|||node,"}'|grep -v 'NAME'
allinone|||Ready|||node,
kubesphere-a3c6e800|||Ready|||node,
rancher-1d58f7a4|||Ready|||node,

[root@allinone ~]# kubectl get node -A|head -n1
NAME                  STATUS   ROLES                      AGE   VERSION

最终解析结果格式,拷贝入代码namespace.txt

5. 边缘端资源管理 > 容器资源 > 存储管理 > 命名空间 namespace

登录跳板机,登录gsc服务器194结尾

统计个数
[root@allinone ~]# kubectl get namespace -A|grep -v 'NAME'|awk '{print $1"|||"$2"|||namespace,"}'|wc -l

过滤需要的字段

命名空间 状态 类型

[root@allinone ~]# kubectl get namespace -A|grep -v 'NAME'|awk '{print $1"|||"$2"|||namespace,"}'
 

[root@node1 ~]# kubectl get namespace -A |head -n2
NAME                   STATUS   AGE

最终解析结果格式如NAME,拷贝入代码namespace.txt

rancher-operator-system|||Active|||namespace,
user-c8m7x|||Active|||namespace,

4. 边缘端资源管理 > 容器资源 > 工作负载 > 服务 service

登录跳板机,登录gsc服务器194结尾

统计个数

[root@allinone ~]# kubectl get service -A |grep -v 'NAME'|awk '{print $2"|||"$1"|||"$4"|||"$3","}'|grep -v 'NAME'|wc -l
84

过滤需要的字段

名称 命名空间 集群IP 类型

[root@allinone ~]# kubectl get service -A |grep -v 'NAME'|awk '{print $2"|||"$1"|||"$4"|||"$3","}'|grep -v 'NAME'

最终解析结果格式如NAME|||NAMESPACE|||CLUSTER-IP |||TYPE,拷贝入代码deployment.txt

mec-cmo-relationship|||lecp-resources|||None|||ClusterIP,
register-server|||lecp-resources|||10.xx.xx.xx|||NodePort,

3. 边缘端资源管理 > 容器资源 > 工作负载 > 容器组 pod

登录跳板机,登录gsc服务器194结尾

统计个数

[root@allinone ~]# kubectl get pod -A -o wide |grep -v 'NAME'|awk '{print $2"|||"$4"|||"$1"|||"$7"|||"$8"|||"$5"|||pod,"}'|grep -v 'NAME'|wc -l
110

过滤需要的字段

Pods名称 状态 命名空间 ip地址 所在节点 类型

[root@allinone ~]#  kubectl get pod -A -o wide |grep -v 'NAME'|awk '{print $2"|||"$4"|||"$1"|||"$7"|||"$8"|||"$5"|||pod,"}'|grep -v 'NAME'

2个接口对应的最终结果为

[root@allinone ~]#  kubectl get pod -A -o wide |grep -v 'NAME'|awk '{print $2"|||"$4"|||"$8"|||"$1","}'|grep -v 'NAME'

最终解析结果NAME|||STATUS|||NAMESPACE|||NODE|||NOMINATED|||RESTARTS,拷贝入代码pod.txt

[root@allinone ~]# kubectl get pod -A -o wide |grep -v 'NAME'|awk '{print $2"|||"$4"|||"$1"|||"$7"|||"$8"|||"$5"|||pod,"}'|grep -v 'NAME'|grep logging-init-wpwpk

需要把服务器pod容器状态为Completed的转化为和接口状态一致的Succeeded

 String status = values[1];
            if(status.equals("Completed")){
                status="Succeeded";
            }

查看容器的状态

[root@allinone ~]# kubectl get pod -A -o wide |grep -v 'NAME'|awk '{print $4}'|grep -v 'NAME'|sort |uniq -c

     10 Completed    对应页面的成功   对应接口的Succeeded
      2 EdgeStatusCodeFailed   对应页面的异常   对应接口的Failed
      1 ErrImagePull
      1 ImagePullBackOff   对应页面的挂起   对应接口的Pending
      1 Pending   对应页面的挂起   对应接口的Pending
     96 Running    对应页面的运行中   对应接口的Running

  if (status.equals("Completed")) {
                status = "Succeeded";
            } else if (status.equals("EdgeStatusCodeFailed")) {
                status = "Failed";
            } else if (status.equals("ImagePullBackOff")) {
                status = "Pending";
            }
            jo.put("status", status);

2.0diff测试方法_第1张图片

遇到的问题以及解决

发现有的容器服务器状态和接口不一致

[root@allinone ~]# kubectl get pod -n lecp-id lecp-id-otter-7895b6d694-td9kj -o custom-columns=Name:metadata.name,Status:status.phase
Name                             Status
lecp-id-otter-7895b6d694-td9kj   Pending

[root@allinone ~]# kubectl get pod -n lecp-id lecp-id-otter-7895b6d694-td9kj
NAME                             READY   STATUS             RESTARTS   AGE
lecp-id-otter-7895b6d694-td9kj   0/1     ImagePullBackOff   0          2d3h
 

[root@allinone ~]# kubectl get pod -n lecp-id lecp-id-otter-7895b6d694-td9kj

Status:       Pending

2.0diff测试方法_第2张图片  

2.0diff测试方法_第3张图片

原因:命令行工具做了可读性处理

类似的还有CrashLoopBackoff、ErrImagePull 应该是为了输出的结果更友好 做了优化

用如下命令行可以看

kubectl get po -A -o custom-columns=Name:metadata.name,Namespace:metadata.namespace,Status:status.phase

2. 边缘端资源管理 > 容器资源 > 工作负载 > 无状态服务 deployment

登录跳板机,登录gsc服务器194结尾

统计个数

[root@allinone ~]# kubectl get deployment -A |grep -v 'NAME'|awk '{print $2"|||"$1"|||"$3"|||deployment,"}'|grep -v 'NAME'|wc -l
80

过滤需要的字段

名称 命名空间 实例个数 类型

[root@allinone ~]# kubectl get deployment -A |grep -v 'NAME'|awk '{print $2"|||"$1"|||"$3"|||deployment,"}'|grep -v 'NAME'

[root@node1 ~]# kubectl get deployment -A |head -n2
NAMESPACE    NAME     READY   UP-TO-DATE    AVAILABLE     AGE

最终解析结果格式如NAME|||NAMESPACE|||READY,拷贝入代码deployment.txt

tiller-deploy|||kube-system|||1/1|||deployment,

接口返回的状态字段为

 "pods": {
    "current": 0,
    "desired": 1,
    "running": 0,
    "pending": 0,
    "failed": 1,
    "succeeded": 0,
    "warnings": []
   },

实例个数为running/desired

String status = running + "/" + desired;

测试结果

1. 边缘端资源管理 > 容器资源 > 持久卷声明 pvc

登录跳板机,登录mec服务器k3sserver-1

统计个数

[root@k3sserver-1 ~]# kubectl get pvc -A|grep -v 'NAME'|awk '{print $2"|||"$1"|||"$3"|||"$5"|||"$6"|||"$4"|||"$7","}'|grep -v 'NAME'|wc -l
174

过滤需要的字段

名称 命名空间 状态 容量 访问方式 声明 存储类
[root@k3sserver-1 ~]# kubectl get pvc -A|grep -v 'NAME'|awk '{print $2"|||"$1"|||"$3"|||"$5"|||"$6"|||"$4"|||"$7","}'|grep -v 'NAME'

存入格式如下

win2016|||vmimages|||Bound|||50Gi|||RWO|||pvc-fc06edfa-523c-4c34-a27a-f52f40004aeb|||csi-rbd-sc,

 接口取数据格式发生了变化,namespace、name在claim字段 需要用split拆分解析

       for (int n = 0; n < items.size(); n++) {

                    if (items.getJSONObject(n).size() != 0) {
                        // 名称 命名空间 状态	容量 访问方式 声明 存储类
                        String name = items.getJSONObject(n).getString("claim").split("\\/")[1];
                        String namespace = items.getJSONObject(n).getString("claim").split("\\/")[0];
//                        System.out.println("==name==" + name);
//                        System.out.println("==namespace=="+namespace);
                        String status = items.getJSONObject(n).getString("status");
                        String storage = items.getJSONObject(n).getJSONObject("capacity").getString("storage");
                        String accessModes = items.getJSONObject(n).getJSONArray("accessModes").getString(0);
                        String volume = items.getJSONObject(n).getJSONObject("objectMeta").getString("name");
                        String storageClass = items.getJSONObject(n).getString("storageClass");
//                            System.err.println("debug-name==" + name);

                        JSONObject jo = new JSONObject(true);
                        // 不传true则排列无序 未按照存放的顺序打印
                        jo.put("name", name);
                        jo.put("namespace", namespace);
                        jo.put("status", status);
                        jo.put("storage", storage);
                        jo.put("accessModes", accessModes);
                        jo.put("volume", volume);
                        jo.put("storageClass", storageClass);

                        ja.add(jo);

//                                System.out.println("debug-case3CMO平台管理容器资源存储管理存储卷声明的jo JSONObject第" + m + "个数组==" + jo);
                        log.info("debug-jo JSONObject第{}个数组=={}", n, jo);
                        log.info("debug-ja的JSONArray格式=={}", ja);
                    } 

RWO对应ReadWriteOnce 

RWX对应ReadWriteMany

2.0diff测试方法_第4张图片

 

  if (accessModes.equals("RWO")) {
                // 一个存储卷只能挂载在到1个pod 如挂载到pod1,不能同时挂到pod2,需要在pod1卸载pvc后再挂载到pod2
                accessModes = "ReadWriteOnce";
            } else if (accessModes.equals("RWX")) {
                // 一个存储卷可以挂载在到多个pod 如可以同时挂载到pod1 pod2
                accessModes = "ReadWriteMany";
            }
            jo.put("accessModes", accessModes);
            

你可能感兴趣的:(云计算,java,linux,开发语言)