SkyWalking-Kubernetes 仓库提供了在 Kubernetes 集群中安装和配置 SkyWalking 的方法。

环境

  • Helm v3.6.3
  • ACK 集群

简述

在部署 SkyWalking 时,必须显式设置一些必需的值。

namedescriptionexample
oap.image.tagthe OAP docker image tag8.1.0-es6, 8.1.0-es7, etc.
oap.storageTypethe storage type of the OAPelasticsearch, elasticsearch7, etc.
ui.image.tagthe UI docker image tag8.0.1, 8.1.0, ect.

你可以通过命令行设置这些必要的值(例如–set oap.image.tag=8.1.0-es6 --set oap.storageType=elasticsearch),或者在一个单独的文件中编辑它们(例如values-es6.Yaml, values-es7.Yaml),并使用 -f 或 --values=。

准备工作

克隆项目,更新chart仓库

git clone https://github.com/apache/skywalking-kubernetes
cd skywalking-kubernetes/chart
helm repo add elastic https://helm.elastic.co
helm dep up skywalking
export SKYWALKING_RELEASE_NAME=skywalking
export SKYWALKING_RELEASE_NAMESPACE=skywalking-dev

创建elastic-pv.yaml,持久化elasticsearch数据

注意:磁盘可用区一定要跟节点可用区一致。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: d-bp12te2l9pjl5nccecn5
  labels:
    alicloud-pvname: d-bp12te2l9pjl5nccecn5
    failure-domain.beta.kubernetes.io/zone: cn-hangzhou-i
    failure-domain.beta.kubernetes.io/region: cn-hangzhou
spec:
  capacity:
    storage: 20Gi
  storageClassName: disk
  accessModes:
    - ReadWriteOnce
  csi:
    driver: "diskplugin.csi.alibabacloud.com"
    fsType: "ext4"
    volumeHandle: "d-bp12te2l9pjl5nccecn5"
    readOnly: false

应用elastic-pv.yaml,创建pv卷

kubectl apply -f elastic-pv.yaml

部署 SkyWalking 8.7.0 & Elasticsearch 7.5.2

部署 Elasticsearch 7.5.2

手动部署Elasticsearch,官方chart部署会有各种意想不到的问题。

apiVersion: apps/v1
kind: StatefulSet
metadata:
  annotations:
    esMajorVersion: "7"
  labels:
    app: elasticsearch-master
  name: elasticsearch-master
  namespace: skywalking-dev
spec:
  replicas: 1
  selector:
    matchLabels:
      app: elasticsearch-master
  serviceName: elasticsearch-master-headless
  template:
    metadata:
      labels:
        app: elasticsearch-master
      name: elasticsearch-master
    spec:
      containers:
      - env:
        - name: node.name
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: metadata.name
        - name: cluster.initial_master_nodes
          value: elasticsearch-master-0,
        - name: discovery.seed_hosts
          value: elasticsearch-master-headless
        - name: cluster.name
          value: elasticsearch
        - name: network.host
          value: 0.0.0.0
        - name: ES_JAVA_OPTS
          value: -Xmx512m -Xms512m
        - name: node.data
          value: "true"
        - name: node.ingest
          value: "true"
        - name: node.master
          value: "true"
        image: elasticsearch:7.5.2
        imagePullPolicy: IfNotPresent
        name: elasticsearch
        ports:
        - containerPort: 9200
          name: http
          protocol: TCP
        - containerPort: 9300
          name: transport
          protocol: TCP
        readinessProbe:
          httpGet:
            path: /_cluster/health?local=true
            port: 9200
          initialDelaySeconds: 10
        resources:
          limits:
            cpu: "1"
            memory: 1Gi
          requests:
            cpu: 100m
            memory: 1Gi
        securityContext:
          capabilities:
            drop:
            - ALL
          runAsNonRoot: true
          runAsUser: 1000
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /usr/share/elasticsearch/data
          name: elasticsearch-master
      dnsPolicy: ClusterFirst
      nodeSelector:
        kubernetes.io/os: linux
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext:
        fsGroup: 1000
        runAsUser: 1000
      terminationGracePeriodSeconds: 120
  updateStrategy:
    type: RollingUpdate
  volumeClaimTemplates:
  - apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: elasticsearch-master
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi
      selector:
        matchLabels:
          alicloud-pvname: d-bp18b67rjvn26sgccywi
      storageClassName: alicloud-disk-efficiency
      volumeMode: Filesystem

查看Elasticsearch是否部署成功

kubectl get pods -n skywalking-dev
NAME                     READY   STATUS    RESTARTS   AGE
elasticsearch-master-0   1/1     Running   0          7m2

查看数据卷挂载情况

kubectl get pvc -n skywalking-dev
NAME                                          STATUS   VOLUME                   CAPACITY   ACCESS MODES   STORAGECLASS               AGE
elasticsearch-master-elasticsearch-master-0   Bound    d-bp18b67rjvn26sgccywi   20Gi       RWO            alicloud-disk-efficiency   7m57s

部署SkyWalking 8.7.0

修改values-my-es.yaml

oap:
  image:
    repository: apache/skywalking-oap-server
    tag: 8.7.0-es7
  storageType: elasticsearch7

ui:
  image:
    repository: apache/skywalking-ui
    tag: 8.7.0

elasticsearch:
  enabled: false
  config:
    host: 192.168.1.21
    port:
      http: 9200

安装前调试预演

使用自建ES,没必要显性设置一些值。

helm install --debug --dry-run "${SKYWALKING_RELEASE_NAME}" skywalking -n "${SKYWALKING_RELEASE_NAMESPACE}" -f ./skywalking/values-my-es.yaml

安装

helm install "${SKYWALKING_RELEASE_NAME}" skywalking -n "${SKYWALKING_RELEASE_NAMESPACE}" -f ./skywalking/values-es7.yaml

验证

kubectl get pods -n skywalking-dev
NAME                             READY   STATUS      RESTARTS   AGE
elasticsearch-master-0           1/1     Running     0          45m
skywalking-es-init-7htv7         0/1     Completed   0          5m4s
skywalking-oap-8fbb9c7d-kzwgc    1/1     Running     0          5m5s
skywalking-oap-8fbb9c7d-scjgf    1/1     Running     0          5m5s
skywalking-ui-7c69dd8fdd-kjpfn   1/1     Running     0          5m5s

更新

helm upgrade "${SKYWALKING_RELEASE_NAME}" skywalking -n "${SKYWALKING_RELEASE_NAMESPACE}" -f ./skywalking/values-es7.yaml

参考文档:
[1]: https://github.com/apache/skywalking-kubernetes
[2]: https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-health.html#request-params%20wait_for_status
[3]: https://github.com/apache/skywalking-kubernetes/blob/v4.1.0/chart/skywalking/README.md

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐