k8s部署weave scope可视化工具

Weave Scope 是一款 Docker 和 Kubernetes 的可视化监控工具。它提供了自上而下的应用程序视图以及整个基础架构视图,用户可以轻松对分布式的容器化应用进行实时监控和问题诊断,以确保容器应用程序的稳定性和性能。

Weave Scope 可以监控 Kubernetes 集群中的一系列资源的状态、资源使用情况、应用拓扑、scale,还可以通过浏览器直接进入容器内部调试等。其提供的功能包括:

交互式拓扑界面

图形模式和表格模式

过滤功能

搜索功能

实时度量

容器排错

插件扩展

Weave Scope 由 AppProbe Agent 两部分组成:

Probe Agent:负责收集容器和宿主的信息,发送给App

App:负责处理收集的信息,生成相应报告,并以交互界面的形式展示

官网:https://www.weave.works/ ,最新版本:1.13.1


k8s以DaemonSet方式部署 scope agent,以Deployment方式部署 scope app:

weave-scope.yaml

apiVersion: v1kind: Namespacemetadata:
  name: weave---apiVersion: v1kind: ServiceAccountmetadata:
  name: weave-scope  namespace: weave  labels:
    name: weave-scope---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata:
  name: weave-scope  labels:
    name: weave-scoperules:
  - apiGroups:
      - ''
    resources:
      - pods    verbs:
      - get      - list      - watch      - delete  - apiGroups:
      - ''
    resources:
      - pods/log      - services      - nodes      - namespaces      - persistentvolumes      - persistentvolumeclaims    verbs:
      - get      - list      - watch  - apiGroups:
      - apps    resources:
      - deployments      - daemonsets      - statefulsets    verbs:
      - get      - list      - watch  - apiGroups:
      - batch    resources:
      - cronjobs      - jobs    verbs:
      - get      - list      - watch  - apiGroups:
      - extensions    resources:
      - deployments      - daemonsets    verbs:
      - get      - list      - watch  - apiGroups:
      - apps    resources:
      - deployments/scale    verbs:
      - get      - update  - apiGroups:
      - extensions    resources:
      - deployments/scale    verbs:
      - get      - update  - apiGroups:
      - storage.k8s.io    resources:
      - storageclasses    verbs:
      - get      - list      - watch  - apiGroups:
      - volumesnapshot.external-storage.k8s.io    resources:
      - volumesnapshots      - volumesnapshotdatas    verbs:
      - list      - watch---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata:
  name: weave-scope  labels:
    name: weave-scoperoleRef:
  kind: ClusterRole  name: weave-scope  apiGroup: rbac.authorization.k8s.iosubjects:
  - kind: ServiceAccount    name: weave-scope    namespace: weave---apiVersion: extensions/v1beta1kind: Ingressmetadata:
  name: weave-scope  namespace: weavespec:
  rules:
    - host: scope.lzxlinux.com      http:
        paths:
          - path: /            backend:
              serviceName: weave-scope-app              servicePort: 80---apiVersion: v1kind: Servicemetadata:
  name: weave-scope-app  namespace: weave  labels:
    name: weave-scope-app    app: weave-scope    weave-cloud-component: scope    weave-scope-component: appspec:
  ports:
    - name: app      port: 80
      protocol: TCP      targetPort: 4040
  selector:
    name: weave-scope-app    app: weave-scope    weave-cloud-component: scope    weave-scope-component: app    
---apiVersion: apps/v1kind: Deploymentmetadata:
  name: weave-scope-app  namespace: weave  labels:
    name: weave-scope-app    app: weave-scope    weave-cloud-component: scope    weave-scope-component: appspec:
  replicas: 1
  selector:
    matchLabels:
      name: weave-scope-app      app: weave-scope      weave-cloud-component: scope      weave-scope-component: app  template:
    metadata:
      labels:
        name: weave-scope-app        app: weave-scope        weave-cloud-component: scope        weave-scope-component: app    spec:
      containers:
        - name: app          image: docker.io/weaveworks/scope:1.13.1          imagePullPolicy: IfNotPresent          ports:
            - containerPort: 4040
              protocol: TCP          args:
            - '--mode=app'
          command:
            - /home/weave/scope          env: []---apiVersion: apps/v1kind: Deploymentmetadata:
  name: weave-scope-cluster-agent  namespace: weave  labels:
    name: weave-scope-cluster-agent    app: weave-scope    weave-cloud-component: scope    weave-scope-component: cluster-agentspec:
  replicas: 1
  selector:
    matchLabels:
      name: weave-scope-cluster-agent      app: weave-scope      weave-cloud-component: scope      weave-scope-component: cluster-agent  template:
    metadata:
      labels:
        name: weave-scope-cluster-agent        app: weave-scope        weave-cloud-component: scope        weave-scope-component: cluster-agent    spec:
      serviceAccountName: weave-scope      containers:
        - name: scope-cluster-agent          image: docker.io/weaveworks/scope:1.13.1          imagePullPolicy: IfNotPresent          ports:
            - containerPort: 4041
              protocol: TCP          args:
            - '--mode=probe'
            - '--probe-only'
            - '--probe.kubernetes.role=cluster'
            - '--probe.http.listen=:4041'
            - '--probe.publish.interval=4500ms'
            - '--probe.spy.interval=2s'
            - 'weave-scope-app.weave.svc.cluster.local:80'
          command:
            - /home/weave/scope          env: []
          resources:
            limits:
              memory: 2000Mi            requests:
              cpu: 25m              memory: 80Mi---apiVersion: apps/v1kind: DaemonSetmetadata:
  name: weave-scope-agent  namespace: weave  labels:
    name: weave-scope-agent    app: weave-scope    weave-cloud-component: scope    weave-scope-component: agentspec:
  updateStrategy:
    type: RollingUpdate  minReadySeconds: 5
  selector:
    matchLabels:
      name: weave-scope-agent      app: weave-scope      weave-cloud-component: scope      weave-scope-component: agent  template:
    metadata:
      labels:
        name: weave-scope-agent        app: weave-scope        weave-cloud-component: scope        weave-scope-component: agent    spec:
      containers:
        - name: scope-agent          image: docker.io/weaveworks/scope:1.13.1          imagePullPolicy: IfNotPresent          args:
            - '--mode=probe'
            - '--probe-only'
            - '--probe.kubernetes.role=host'
            - '--probe.publish.interval=4500ms'
            - '--probe.spy.interval=2s'
            - '--probe.docker.bridge=docker0'
            - '--probe.docker=true'
            - 'weave-scope-app.weave.svc.cluster.local:80'
          command:
            - /home/weave/scope          env: []
          resources:
            limits:
              memory: 2000Mi            requests:
              cpu: 100m              memory: 100Mi          securityContext:
            privileged: true
          volumeMounts:
            - name: scope-plugins              mountPath: /var/run/scope/plugins            - name: sys-kernel-debug              mountPath: /sys/kernel/debug            - name: docker-socket              mountPath: /var/run/docker.sock      volumes:
        - name: scope-plugins          hostPath:
            path: /var/run/scope/plugins        - name: sys-kernel-debug          hostPath:
            path: /sys/kernel/debug        - name: docker-socket          hostPath:
            path: /var/run/docker.sock      dnsPolicy: ClusterFirstWithHostNet      hostNetwork: true
      hostPID: true
      tolerations:
        - effect: NoSchedule          operator: Exists        - effect: NoExecute          operator: Exists


  • 部署:
kubectl apply -f weave-scope.yaml

kubectl get svc -n weave

NAME              TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
weave-scope-app   ClusterIP   10.106.124.95   <none>        80/TCP    25s

kubectl get pod -n weave

NAME                                        READY   STATUS    RESTARTS   AGE
weave-scope-agent-27zpb                     1/1     Running   0          32s
weave-scope-agent-c5hcq                     1/1     Running   0          32s
weave-scope-agent-j4tf7                     1/1     Running   0          32s
weave-scope-agent-s8p6s                     1/1     Running   0          32s
weave-scope-app-bc7444d59-6xwkk             1/1     Running   0          33s
weave-scope-cluster-agent-5c5dcc8cb-4d7mh   1/1     Running   0          33s

  • 访问ui:

添加hosts:scope.lzxlinux.com,访问scope.lzxlinux.com

k8s部署weave scope可视化工具

可以看到,当前k8s集群有4个节点(1个master,3个node)。

  • ui操作:

以pod资源对象为例,Weave Scope监控对象有进程、容器、pods、主机等,监控项有cpu、内存、平均负载等。

图形模式,

k8s部署weave scope可视化工具

表格模式,

k8s部署weave scope可视化工具

点击某个pod,会展示状态、资源使用、进程等详细信息,

k8s部署weave scope可视化工具

点击pod的Get logs,会打开Terminal查看日志,

k8s部署weave scope可视化工具

点击pod的Describe,会打开Terminal查看资源信息(类似 kubectl describe 命令),

k8s部署weave scope可视化工具

点击Controllers,对于Deployment,可以直接扩缩容以及查看POD的数量和详细信息,

k8s部署weave scope可视化工具

点击Containers,可以对容器进行 attachexec shellrestartpausestop 操作,

k8s部署weave scope可视化工具

此外,左下角可按条件展示,如命名空间、容器类型(系统或应用)、容器状态(停止或运行)等,

k8s部署weave scope可视化工具

同时,搜索栏可以按条件搜索相应的资源对象,如命名空间、对象类型、对象名称、image及版本、运行状态、资源使用率等,

k8s部署weave scope可视化工具

至此,k8s部署weave scope完成。已存放至个人github:kubernetes


上一篇:angularjs入门(二)


下一篇:uniapp打开地图选择位置(查看位置)详解