k8s 集群搭建-09-集群冒烟测试

九、集群冒烟测试

冒烟测试一词,来源于电路板测试:电路板拼接或组装完成后,进行通电测试,如果冒烟,则说明存在缺陷。而软件应用中,对其的定义为:在软件开发过程中的一种针对软件版本包的快速基本功能验证策略,是对软件基本功能进行确认验证的手段,并非深入测试。

针对每个版本或每次需求变更后,在正式测试前,对产品或系统的一次简单的验证性测试。

冒烟测试是在版本转测试之前,先选择一部分基础的测试用例进行验证,确保全流程没有严重、阻塞性的问题。有些也将其称为高压线测试。

1. 创建nginx ds

 # 写入配置
$ cat > nginx-ds.yml <<EOF
apiVersion: v1
kind: Service
metadata:
  name: nginx-ds
  labels:
    app: nginx-ds
spec:
  type: NodePort
  selector:
    app: nginx-ds
  ports:
  - name: http
    port: 80
    targetPort: 80
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: nginx-ds
spec:
  selector:
    matchLabels:
      app: nginx-ds
  template:
    metadata:
      labels:
        app: nginx-ds
    spec:
      containers:
      - name: my-nginx
        image: nginx:1.19
        ports:
        - containerPort: 80
EOF

# 创建ds
$ kubectl apply -f nginx-ds.yml

查看 Pod状态:

[root@homaybd03 ~]# kubectl get po
NAME             READY   STATUS    RESTARTS   AGE
nginx-ds-87flg   1/1     Running   0          57s
nginx-ds-j7mqr   1/1     Running   0          57s

查看节点:

[root@homaybd03 ~]# kubectl get po -o wide
NAME             READY   STATUS    RESTARTS   AGE     IP                NODE        NOMINATED NODE   READINESS GATES
nginx-ds-87flg   1/1     Running   0          2m23s   192.200.245.131   homaybd04   <none>           <none>
nginx-ds-j7mqr   1/1     Running   0          2m23s   192.200.72.195    homaybd05   <none>           <none>
[root@homaybd03 ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   192.233.0.1     <none>        443/TCP        10h
nginx-ds     NodePort    192.233.76.14   <none>        80:30983/TCP   2m49s
[root@homaybd03 ~]# 

2. 检查各种ip连通性

# 检查各 Node 上的 Pod IP 连通性
$ kubectl get pods  -o wide

# 在每个worker节点上ping pod ip
$ ping <pod-ip>

# 检查service可达性
$ kubectl get svc

# 在每个worker节点上访问服务
$ curl <service-ip>:<port>

# 在每个节点检查node-port可用性
$ curl <node-ip>:<port>

实操:
①、 检查各 Node 上的 Pod IP 连通性

[root@homaybd03 ~]# kubectl get pods -o wide
NAME             READY   STATUS    RESTARTS   AGE   IP                NODE        NOMINATED NODE   READINESS GATES
nginx-ds-87flg   1/1     Running   0          25m   192.200.245.131   homaybd04   <none>           <none>
nginx-ds-j7mqr   1/1     Running   0          25m   192.200.72.195    homaybd05   <none>           <none>
[root@homaybd03 ~]# 

可以看到 pod ip 为 192.200.245.131,192.200.72.195

[root@homaybd04 ~]# ping 192.200.72.195
PING 192.200.72.195 (192.200.72.195) 56(84) bytes of data.
64 bytes from 192.200.72.195: icmp_seq=1 ttl=63 time=0.288 ms
64 bytes from 192.200.72.195: icmp_seq=2 ttl=63 time=0.171 ms
64 bytes from 192.200.72.195: icmp_seq=3 ttl=63 time=0.195 ms

[root@homaybd05 ~]# ping 192.200.72.195
PING 192.200.72.195 (192.200.72.195) 56(84) bytes of data.
64 bytes from 192.200.72.195: icmp_seq=1 ttl=64 time=0.063 ms
64 bytes from 192.200.72.195: icmp_seq=2 ttl=64 time=0.033 ms

在 worker 节点上可以ping 的通 Pod IP,但是在 master节点上 ping不通。

②、 检查service可达性

[root@homaybd04 ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   192.233.0.1     <none>        443/TCP        10h
nginx-ds     NodePort    192.233.76.14   <none>        80:30983/TCP   40m

Service IP:192.233.76.14, 端口 为 80

[root@homaybd04 ~]# curl 192.233.76.14:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>

③、在每个节点检查node-port可用性
node节点对应的端口为 30983,先检查是否有启用:

[root@homaybd04 ~]# netstat -ntlp| grep 30983
tcp        0      0 0.0.0.0:30983           0.0.0.0:*               LISTEN      29807/kube-proxy    

可以看到该端口有启用,然后使用 Node Ip 来访问:

[root@homaybd04 ~]# netstat -ntlp| grep 30983
tcp        0      0 0.0.0.0:30983           0.0.0.0:*               LISTEN      29807/kube-proxy    
[root@homaybd04 ~]# curl 192.168.1.125:30983
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>

通过浏览器即可查看节点可以访问的通:
file

3. 检查dns可用性

# 创建一个nginx pod
$ cat > pod-nginx.yaml <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: docker.io/library/nginx:1.19
    ports:
    - containerPort: 80
EOF

# 创建pod
$ kubectl apply -f pod-nginx.yaml

# 进入pod,查看dns
$ kubectl exec nginx -it -- /bin/bash

# 查看dns配置
root@nginx:/# cat /etc/resolv.conf

# 查看名字是否可以正确解析
root@nginx:/# curl nginx-ds

4. 日志功能

测试使用kubectl查看pod的容器日志

$ kubectl get pods
$ kubectl logs <pod-name>

5. Exec功能

测试kubectl的exec功能

$ kubectl get pods -l app=nginx-ds
$ kubectl exec -it <nginx-pod-name> -- nginx -v

为者常成,行者常至