zl程序教程

您现在的位置是:首页 >  其他

当前栏目

K8S 部署全链路监控skywalking8.7和9.1

2023-04-18 17:00:28 时间

Skywalking是一个可观测性分析平台(Observability Analysis Platform简称OAP)和应用性能管理系统(Application Performance Management简称APM)。提供分布式链路追踪、服务网格(Service Mesh)遥测分析、度量(Metric)聚合和可视化一体化解决方案。Agent多语言支持Java, .Net Core, PHP, NodeJS, Golang, LUA, C++, Python。

SkyWalking Architecture

使用nacos统一注册服务,ES存储skywalking数据。

1、创建skywalking命名空间,namespace.yml

apiVersion: v1
kind: Namespace
metadata:
  name: skywalking
  labels:
    name: skywalking

2、 创建ServiceAccount,RoleBinding,Role。 rbac.yml

# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: v1
kind: ServiceAccount
metadata:
  name: skywalking-oap
  namespace: skywalking
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: skywalking-oap
  namespace: skywalking
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: skywalking-oap
subjects:
- kind: ServiceAccount
  name: skywalking-oap
  namespace: skywalking
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: skywalking
  name: skywalking-oap
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]

skywalking配置文件。config.yml

apiVersion: v1
kind: ConfigMap
metadata:
  name: oap-config
  namespace: skywalking
data:
  application.yml: |
    cluster:
      selector: ${SW_CLUSTER:nacos}   # 选择nacos
      standalone:
      # Please check your ZooKeeper is 3.5+, However, it is also compatible with ZooKeeper 3.4.x. Replace the ZooKeeper 3.5+
      # library the oap-libs folder with your ZooKeeper 3.4.x library.
      zookeeper:
        nameSpace: ${SW_NAMESPACE:""}
        hostPort: ${SW_CLUSTER_ZK_HOST_PORT:localhost:2181}
        # Retry Policy
        baseSleepTimeMs: ${SW_CLUSTER_ZK_SLEEP_TIME:1000} # initial amount of time to wait between retries
        maxRetries: ${SW_CLUSTER_ZK_MAX_RETRIES:3} # max number of times to retry
        # Enable ACL
        enableACL: ${SW_ZK_ENABLE_ACL:false} # disable ACL in default
        schema: ${SW_ZK_SCHEMA:digest} # only support digest schema
        expression: ${SW_ZK_EXPRESSION:skywalking:skywalking}
      kubernetes:
        namespace: ${SW_CLUSTER_K8S_NAMESPACE:default}
        labelSelector: ${SW_CLUSTER_K8S_LABEL:app=collector,release=skywalking}
        uidEnvName: ${SW_CLUSTER_K8S_UID:SKYWALKING_COLLECTOR_UID}
      consul:
        serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"}
        # Consul cluster nodes, example: 10.0.0.1:8500,10.0.0.2:8500,10.0.0.3:8500
        hostPort: ${SW_CLUSTER_CONSUL_HOST_PORT:localhost:8500}
        aclToken: ${SW_CLUSTER_CONSUL_ACLTOKEN:""}
      etcd:
        # etcd cluster nodes, example: 10.0.0.1:2379,10.0.0.2:2379,10.0.0.3:2379
        endpoints: ${SW_CLUSTER_ETCD_ENDPOINTS:localhost:2379}
        namespace: ${SW_CLUSTER_ETCD_NAMESPACE:/skywalking}
        serviceName: ${SW_SCLUSTER_ETCD_ERVICE_NAME:"SkyWalking_OAP_Cluster"}
        authentication: ${SW_CLUSTER_ETCD_AUTHENTICATION:false}
        user: ${SW_SCLUSTER_ETCD_USER:}
        password: ${SW_SCLUSTER_ETCD_PASSWORD:}
      nacos:
        serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"}
        hostPort: ${SW_CLUSTER_NACOS_HOST_PORT:192.168.9.13:8848}      #指定nacos地址
        # Nacos Configuration namespace
        namespace: ${SW_CLUSTER_NACOS_NAMESPACE:"93c704f7-9f30-4389-aa61-136148eb8c6f"}   #指定nacosnamespace地址,默认为public
        # Nacos auth username
        username: ${SW_CLUSTER_NACOS_USERNAME:""}
        password: ${SW_CLUSTER_NACOS_PASSWORD:""}
        # Nacos auth accessKey
        accessKey: ${SW_CLUSTER_NACOS_ACCESSKEY:""}
        secretKey: ${SW_CLUSTER_NACOS_SECRETKEY:""}
    core:
      selector: ${SW_CORE:default}
      default:
        # Mixed: Receive agent data, Level 1 aggregate, Level 2 aggregate
        # Receiver: Receive agent data, Level 1 aggregate
        # Aggregator: Level 2 aggregate
        role: ${SW_CORE_ROLE:Mixed} # Mixed/Receiver/Aggregator
        restHost: ${SW_CORE_REST_HOST:0.0.0.0}
        restPort: ${SW_CORE_REST_PORT:12800}
        restContextPath: ${SW_CORE_REST_CONTEXT_PATH:/}
        restMinThreads: ${SW_CORE_REST_JETTY_MIN_THREADS:1}
        restMaxThreads: ${SW_CORE_REST_JETTY_MAX_THREADS:200}
        restIdleTimeOut: ${SW_CORE_REST_JETTY_IDLE_TIMEOUT:30000}
        restAcceptorPriorityDelta: ${SW_CORE_REST_JETTY_DELTA:0}
        restAcceptQueueSize: ${SW_CORE_REST_JETTY_QUEUE_SIZE:0}
        httpMaxRequestHeaderSize: ${SW_CORE_HTTP_MAX_REQUEST_HEADER_SIZE:8192}
        gRPCHost: ${SW_CORE_GRPC_HOST:0.0.0.0}
        gRPCPort: ${SW_CORE_GRPC_PORT:11800}
        maxConcurrentCallsPerConnection: ${SW_CORE_GRPC_MAX_CONCURRENT_CALL:0}
        maxMessageSize: ${SW_CORE_GRPC_MAX_MESSAGE_SIZE:0}
        gRPCThreadPoolQueueSize: ${SW_CORE_GRPC_POOL_QUEUE_SIZE:-1}
        gRPCThreadPoolSize: ${SW_CORE_GRPC_THREAD_POOL_SIZE:-1}
        gRPCSslEnabled: ${SW_CORE_GRPC_SSL_ENABLED:false}
        gRPCSslKeyPath: ${SW_CORE_GRPC_SSL_KEY_PATH:""}
        gRPCSslCertChainPath: ${SW_CORE_GRPC_SSL_CERT_CHAIN_PATH:""}
        gRPCSslTrustedCAPath: ${SW_CORE_GRPC_SSL_TRUSTED_CA_PATH:""}
        downsampling:
          - Hour
          - Day
        # Set a timeout on metrics data. After the timeout has expired, the metrics data will automatically be deleted.
        enableDataKeeperExecutor: ${SW_CORE_ENABLE_DATA_KEEPER_EXECUTOR:true} # Turn it off then automatically metrics data delete will be close.
        dataKeeperExecutePeriod: ${SW_CORE_DATA_KEEPER_EXECUTE_PERIOD:5} # How often the data keeper executor runs periodically, unit is minute
        recordDataTTL: ${SW_CORE_RECORD_DATA_TTL:3} # Unit is day
        metricsDataTTL: ${SW_CORE_METRICS_DATA_TTL:7} # Unit is day
        # The period of L1 aggregation flush to L2 aggregation. Unit is ms.
        l1FlushPeriod: ${SW_CORE_L1_AGGREGATION_FLUSH_PERIOD:500}
        # The threshold of session time. Unit is ms. Default value is 70s.
        storageSessionTimeout: ${SW_CORE_STORAGE_SESSION_TIMEOUT:70000}
        # Cache metrics data for 1 minute to reduce database queries, and if the OAP cluster changes within that minute,
        # the metrics may not be accurate within that minute.
        enableDatabaseSession: ${SW_CORE_ENABLE_DATABASE_SESSION:true}
        topNReportPeriod: ${SW_CORE_TOPN_REPORT_PERIOD:10} # top_n record worker report cycle, unit is minute
        # Extra model column are the column defined by in the codes, These columns of model are not required logically in aggregation or further query,
        # and it will cause more load for memory, network of OAP and storage.
        # But, being activated, user could see the name in the storage entities, which make users easier to use 3rd party tool, such as Kibana->ES, to query the data by themselves.
        activeExtraModelColumns: ${SW_CORE_ACTIVE_EXTRA_MODEL_COLUMNS:false}
        # The max length of service + instance names should be less than 200
        serviceNameMaxLength: ${SW_SERVICE_NAME_MAX_LENGTH:70}
        instanceNameMaxLength: ${SW_INSTANCE_NAME_MAX_LENGTH:70}
        # The max length of service + endpoint names should be less than 240
        endpointNameMaxLength: ${SW_ENDPOINT_NAME_MAX_LENGTH:150}
        # Define the set of span tag keys, which should be searchable through the GraphQL.
        searchableTracesTags: ${SW_SEARCHABLE_TAG_KEYS:http.method,status_code,db.type,db.instance,mq.queue,mq.topic,mq.broker}
        # Define the set of log tag keys, which should be searchable through the GraphQL.
        searchableLogsTags: ${SW_SEARCHABLE_LOGS_TAG_KEYS:level}
        # Define the set of alarm tag keys, which should be searchable through the GraphQL.
        searchableAlarmTags: ${SW_SEARCHABLE_ALARM_TAG_KEYS:level}
        # The number of threads used to prepare metrics data to the storage.
        prepareThreads: ${SW_CORE_PREPARE_THREADS:2}
        # Turn it on then automatically grouping endpoint by the given OpenAPI definitions.
        enableEndpointNameGroupingByOpenapi: ${SW_CORE_ENABLE_ENDPOINT_NAME_GROUPING_BY_OPAENAPI:true}
    storage:
      selector: ${SW_STORAGE:elasticsearch7}      #存储选择elasticsearch7
      elasticsearch:
        nameSpace: ${SW_NAMESPACE:""}
        clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}
        protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}
        connectTimeout: ${SW_STORAGE_ES_CONNECT_TIMEOUT:500}
        socketTimeout: ${SW_STORAGE_ES_SOCKET_TIMEOUT:30000}
        user: ${SW_ES_USER:""}
        password: ${SW_ES_PASSWORD:""}
        trustStorePath: ${SW_STORAGE_ES_SSL_JKS_PATH:""}
        trustStorePass: ${SW_STORAGE_ES_SSL_JKS_PASS:""}
        secretsManagementFile: ${SW_ES_SECRETS_MANAGEMENT_FILE:""} # Secrets management file in the properties format includes the username, password, which are managed by 3rd party tool.
        dayStep: ${SW_STORAGE_DAY_STEP:1} # Represent the number of days in the one minute/hour/day index.
        indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:1} # Shard number of new indexes
        indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:1} # Replicas number of new indexes
        # Super data set has been defined in the codes, such as trace segments.The following 3 config would be improve es performance when storage super size data in es.
        superDatasetDayStep: ${SW_SUPERDATASET_STORAGE_DAY_STEP:-1} # Represent the number of days in the super size dataset record index, the default value is the same as dayStep when the value is less than 0
        superDatasetIndexShardsFactor: ${SW_STORAGE_ES_SUPER_DATASET_INDEX_SHARDS_FACTOR:5} #  This factor provides more shards for the super data set, shards number = indexShardsNumber * superDatasetIndexShardsFactor. Also, this factor effects Zipkin and Jaeger traces.
        superDatasetIndexReplicasNumber: ${SW_STORAGE_ES_SUPER_DATASET_INDEX_REPLICAS_NUMBER:0} # Represent the replicas number in the super size dataset record index, the default value is 0.
        indexTemplateOrder: ${SW_STORAGE_ES_INDEX_TEMPLATE_ORDER:0} # the order of index template
        bulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:5000} # Execute the async bulk record data every ${SW_STORAGE_ES_BULK_ACTIONS} requests
        # flush the bulk every 10 seconds whatever the number of requests
        # INT(flushInterval * 2/3) would be used for index refresh period.
        flushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:15}
        concurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2} # the number of concurrent requests
        resultWindowMaxSize: ${SW_STORAGE_ES_QUERY_MAX_WINDOW_SIZE:10000}
        metadataQueryMaxSize: ${SW_STORAGE_ES_QUERY_MAX_SIZE:5000}
        segmentQueryMaxSize: ${SW_STORAGE_ES_QUERY_SEGMENT_SIZE:200}
        profileTaskQueryMaxSize: ${SW_STORAGE_ES_QUERY_PROFILE_TASK_SIZE:200}
        oapAnalyzer: ${SW_STORAGE_ES_OAP_ANALYZER:"{"analyzer":{"oap_analyzer":{"type":"stop"}}}"} # the oap analyzer.
        oapLogAnalyzer: ${SW_STORAGE_ES_OAP_LOG_ANALYZER:"{"analyzer":{"oap_log_analyzer":{"type":"standard"}}}"} # the oap log analyzer. It could be customized by the ES analyzer configuration to support more language log formats, such as Chinese log, Japanese log and etc.
        advanced: ${SW_STORAGE_ES_ADVANCED:""}
      elasticsearch7:
        nameSpace: ${SW_NAMESPACE:""}
        clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:192.168.9.16:9200}       #指定es地址
        protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}
        connectTimeout: ${SW_STORAGE_ES_CONNECT_TIMEOUT:500}
        socketTimeout: ${SW_STORAGE_ES_SOCKET_TIMEOUT:30000}
        trustStorePath: ${SW_STORAGE_ES_SSL_JKS_PATH:""}
        trustStorePass: ${SW_STORAGE_ES_SSL_JKS_PASS:""}
        dayStep: ${SW_STORAGE_DAY_STEP:1} # Represent the number of days in the one minute/hour/day index.
        indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:1} # Shard number of new indexes
        indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:1} # Replicas number of new indexes
        # Super data set has been defined in the codes, such as trace segments.The following 3 config would be improve es performance when storage super size data in es.
        superDatasetDayStep: ${SW_SUPERDATASET_STORAGE_DAY_STEP:-1} # Represent the number of days in the super size dataset record index, the default value is the same as dayStep when the value is less than 0
        superDatasetIndexShardsFactor: ${SW_STORAGE_ES_SUPER_DATASET_INDEX_SHARDS_FACTOR:5} #  This factor provides more shards for the super data set, shards number = indexShardsNumber * superDatasetIndexShardsFactor. Also, this factor effects Zipkin and Jaeger traces.
        superDatasetIndexReplicasNumber: ${SW_STORAGE_ES_SUPER_DATASET_INDEX_REPLICAS_NUMBER:0} # Represent the replicas number in the super size dataset record index, the default value is 0.
        indexTemplateOrder: ${SW_STORAGE_ES_INDEX_TEMPLATE_ORDER:0} # the order of index template
        user: ${SW_ES_USER:""}
        password: ${SW_ES_PASSWORD:""}
        secretsManagementFile: ${SW_ES_SECRETS_MANAGEMENT_FILE:""} # Secrets management file in the properties format includes the username, password, which are managed by 3rd party tool.
        bulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:5000} # Execute the async bulk record data every ${SW_STORAGE_ES_BULK_ACTIONS} requests
        # flush the bulk every 10 seconds whatever the number of requests
        # INT(flushInterval * 2/3) would be used for index refresh period.
        flushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:15}
        concurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2} # the number of concurrent requests
        resultWindowMaxSize: ${SW_STORAGE_ES_QUERY_MAX_WINDOW_SIZE:10000}
        metadataQueryMaxSize: ${SW_STORAGE_ES_QUERY_MAX_SIZE:5000}
        segmentQueryMaxSize: ${SW_STORAGE_ES_QUERY_SEGMENT_SIZE:200}
        profileTaskQueryMaxSize: ${SW_STORAGE_ES_QUERY_PROFILE_TASK_SIZE:200}
        oapAnalyzer: ${SW_STORAGE_ES_OAP_ANALYZER:"{"analyzer":{"oap_analyzer":{"type":"stop"}}}"} # the oap analyzer.
        oapLogAnalyzer: ${SW_STORAGE_ES_OAP_LOG_ANALYZER:"{"analyzer":{"oap_log_analyzer":{"type":"standard"}}}"} # the oap log analyzer. It could be customized by the ES analyzer configuration to support more language log formats, such as Chinese log, Japanese log and etc.
        advanced: ${SW_STORAGE_ES_ADVANCED:""}

      h2:
        driver: ${SW_STORAGE_H2_DRIVER:org.h2.jdbcx.JdbcDataSource}
        url: ${SW_STORAGE_H2_URL:jdbc:h2:mem:skywalking-oap-db;DB_CLOSE_DELAY=-1}
        user: ${SW_STORAGE_H2_USER:sa}
        metadataQueryMaxSize: ${SW_STORAGE_H2_QUERY_MAX_SIZE:5000}
        maxSizeOfArrayColumn: ${SW_STORAGE_MAX_SIZE_OF_ARRAY_COLUMN:20}
        numOfSearchableValuesPerTag: ${SW_STORAGE_NUM_OF_SEARCHABLE_VALUES_PER_TAG:2}
      mysql:
        properties:
          jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://localhost:3306/swtest"}
          dataSource.user: ${SW_DATA_SOURCE_USER:root}
          dataSource.password: ${SW_DATA_SOURCE_PASSWORD:root@1234}
          dataSource.cachePrepStmts: ${SW_DATA_SOURCE_CACHE_PREP_STMTS:true}
          dataSource.prepStmtCacheSize: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_SIZE:250}
          dataSource.prepStmtCacheSqlLimit: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_LIMIT:2048}
          dataSource.useServerPrepStmts: ${SW_DATA_SOURCE_USE_SERVER_PREP_STMTS:true}
        metadataQueryMaxSize: ${SW_STORAGE_MYSQL_QUERY_MAX_SIZE:5000}
        maxSizeOfArrayColumn: ${SW_STORAGE_MAX_SIZE_OF_ARRAY_COLUMN:20}
        numOfSearchableValuesPerTag: ${SW_STORAGE_NUM_OF_SEARCHABLE_VALUES_PER_TAG:2}
      tidb:
        properties:
          jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://localhost:4000/tidbswtest"}
          dataSource.user: ${SW_DATA_SOURCE_USER:root}
          dataSource.password: ${SW_DATA_SOURCE_PASSWORD:""}
          dataSource.cachePrepStmts: ${SW_DATA_SOURCE_CACHE_PREP_STMTS:true}
          dataSource.prepStmtCacheSize: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_SIZE:250}
          dataSource.prepStmtCacheSqlLimit: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_LIMIT:2048}
          dataSource.useServerPrepStmts: ${SW_DATA_SOURCE_USE_SERVER_PREP_STMTS:true}
          dataSource.useAffectedRows: ${SW_DATA_SOURCE_USE_AFFECTED_ROWS:true}
        metadataQueryMaxSize: ${SW_STORAGE_MYSQL_QUERY_MAX_SIZE:5000}
        maxSizeOfArrayColumn: ${SW_STORAGE_MAX_SIZE_OF_ARRAY_COLUMN:20}
        numOfSearchableValuesPerTag: ${SW_STORAGE_NUM_OF_SEARCHABLE_VALUES_PER_TAG:2}
      influxdb:
        # InfluxDB configuration
        url: ${SW_STORAGE_INFLUXDB_URL:http://localhost:8086}
        user: ${SW_STORAGE_INFLUXDB_USER:root}
        password: ${SW_STORAGE_INFLUXDB_PASSWORD:}
        database: ${SW_STORAGE_INFLUXDB_DATABASE:skywalking}
        actions: ${SW_STORAGE_INFLUXDB_ACTIONS:1000} # the number of actions to collect
        duration: ${SW_STORAGE_INFLUXDB_DURATION:1000} # the time to wait at most (milliseconds)
        batchEnabled: ${SW_STORAGE_INFLUXDB_BATCH_ENABLED:true}
        fetchTaskLogMaxSize: ${SW_STORAGE_INFLUXDB_FETCH_TASK_LOG_MAX_SIZE:5000} # the max number of fetch task log in a request
        connectionResponseFormat: ${SW_STORAGE_INFLUXDB_CONNECTION_RESPONSE_FORMAT:MSGPACK} # the response format of connection to influxDB, cannot be anything but MSGPACK or JSON.
      postgresql:
        properties:
          jdbcUrl: ${SW_JDBC_URL:"jdbc:postgresql://localhost:5432/skywalking"}
          dataSource.user: ${SW_DATA_SOURCE_USER:postgres}
          dataSource.password: ${SW_DATA_SOURCE_PASSWORD:123456}
          dataSource.cachePrepStmts: ${SW_DATA_SOURCE_CACHE_PREP_STMTS:true}
          dataSource.prepStmtCacheSize: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_SIZE:250}
          dataSource.prepStmtCacheSqlLimit: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_LIMIT:2048}
          dataSource.useServerPrepStmts: ${SW_DATA_SOURCE_USE_SERVER_PREP_STMTS:true}
        metadataQueryMaxSize: ${SW_STORAGE_MYSQL_QUERY_MAX_SIZE:5000}
        maxSizeOfArrayColumn: ${SW_STORAGE_MAX_SIZE_OF_ARRAY_COLUMN:20}
        numOfSearchableValuesPerTag: ${SW_STORAGE_NUM_OF_SEARCHABLE_VALUES_PER_TAG:2}
      zipkin-elasticsearch7:
        nameSpace: ${SW_NAMESPACE:""}
        clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}
        protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}
        trustStorePath: ${SW_STORAGE_ES_SSL_JKS_PATH:""}
        trustStorePass: ${SW_STORAGE_ES_SSL_JKS_PASS:""}
        dayStep: ${SW_STORAGE_DAY_STEP:1} # Represent the number of days in the one minute/hour/day index.
        indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:1} # Shard number of new indexes
        indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:1} # Replicas number of new indexes
        # Super data set has been defined in the codes, such as trace segments.The following 3 config would be improve es performance when storage super size data in es.
        superDatasetDayStep: ${SW_SUPERDATASET_STORAGE_DAY_STEP:-1} # Represent the number of days in the super size dataset record index, the default value is the same as dayStep when the value is less than 0
        superDatasetIndexShardsFactor: ${SW_STORAGE_ES_SUPER_DATASET_INDEX_SHARDS_FACTOR:5} #  This factor provides more shards for the super data set, shards number = indexShardsNumber * superDatasetIndexShardsFactor. Also, this factor effects Zipkin and Jaeger traces.
        superDatasetIndexReplicasNumber: ${SW_STORAGE_ES_SUPER_DATASET_INDEX_REPLICAS_NUMBER:0} # Represent the replicas number in the super size dataset record index, the default value is 0.
        user: ${SW_ES_USER:""}
        password: ${SW_ES_PASSWORD:""}
        secretsManagementFile: ${SW_ES_SECRETS_MANAGEMENT_FILE:""} # Secrets management file in the properties format includes the username, password, which are managed by 3rd party tool.
        bulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:5000} # Execute the async bulk record data every ${SW_STORAGE_ES_BULK_ACTIONS} requests
        # flush the bulk every 10 seconds whatever the number of requests
        # INT(flushInterval * 2/3) would be used for index refresh period.
        flushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:15}
        concurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2} # the number of concurrent requests
        resultWindowMaxSize: ${SW_STORAGE_ES_QUERY_MAX_WINDOW_SIZE:10000}
        metadataQueryMaxSize: ${SW_STORAGE_ES_QUERY_MAX_SIZE:5000}
        segmentQueryMaxSize: ${SW_STORAGE_ES_QUERY_SEGMENT_SIZE:200}
        profileTaskQueryMaxSize: ${SW_STORAGE_ES_QUERY_PROFILE_TASK_SIZE:200}
        oapAnalyzer: ${SW_STORAGE_ES_OAP_ANALYZER:"{"analyzer":{"oap_analyzer":{"type":"stop"}}}"} # the oap analyzer.
        oapLogAnalyzer: ${SW_STORAGE_ES_OAP_LOG_ANALYZER:"{"analyzer":{"oap_log_analyzer":{"type":"standard"}}}"} # the oap log analyzer. It could be customized by the ES analyzer configuration to support more language log formats, such as Chinese log, Japanese log and etc.
        advanced: ${SW_STORAGE_ES_ADVANCED:""}

    agent-analyzer:
      selector: ${SW_AGENT_ANALYZER:default}
      default:
        sampleRate: ${SW_TRACE_SAMPLE_RATE:10000} # The sample rate precision is 1/10000. 10000 means 100% sample in default.
        slowDBAccessThreshold: ${SW_SLOW_DB_THRESHOLD:default:200,mongodb:100} # The slow database access thresholds. Unit ms.
        forceSampleErrorSegment: ${SW_FORCE_SAMPLE_ERROR_SEGMENT:true} # When sampling mechanism active, this config can open(true) force save some error segment. true is default.
        segmentStatusAnalysisStrategy: ${SW_SEGMENT_STATUS_ANALYSIS_STRATEGY:FROM_SPAN_STATUS} # Determine the final segment status from the status of spans. Available values are `FROM_SPAN_STATUS` , `FROM_ENTRY_SPAN` and `FROM_FIRST_SPAN`. `FROM_SPAN_STATUS` represents the segment status would be error if any span is in error status. `FROM_ENTRY_SPAN` means the segment status would be determined by the status of entry spans only. `FROM_FIRST_SPAN` means the segment status would be determined by the status of the first span only.
        # Nginx and Envoy agents can't get the real remote address.
        # Exit spans with the component in the list would not generate the client-side instance relation metrics.
        noUpstreamRealAddressAgents: ${SW_NO_UPSTREAM_REAL_ADDRESS:6000,9000}
        slowTraceSegmentThreshold: ${SW_SLOW_TRACE_SEGMENT_THRESHOLD:-1} # Setting this threshold about the latency would make the slow trace segments sampled if they cost more time, even the sampling mechanism activated. The default value is `-1`, which means would not sample slow traces. Unit, millisecond.
        meterAnalyzerActiveFiles: ${SW_METER_ANALYZER_ACTIVE_FILES:} # Which files could be meter analyzed, files split by ","

    log-analyzer:
      selector: ${SW_LOG_ANALYZER:default}
      default:
        lalFiles: ${SW_LOG_LAL_FILES:default}
        malFiles: ${SW_LOG_MAL_FILES:""}

    event-analyzer:
      selector: ${SW_EVENT_ANALYZER:default}
      default:

    receiver-sharing-server:
      selector: ${SW_RECEIVER_SHARING_SERVER:default}
      default:
        # For Jetty server
        restHost: ${SW_RECEIVER_SHARING_REST_HOST:0.0.0.0}
        restPort: ${SW_RECEIVER_SHARING_REST_PORT:0}
        restContextPath: ${SW_RECEIVER_SHARING_REST_CONTEXT_PATH:/}
        restMinThreads: ${SW_RECEIVER_SHARING_JETTY_MIN_THREADS:1}
        restMaxThreads: ${SW_RECEIVER_SHARING_JETTY_MAX_THREADS:200}
        restIdleTimeOut: ${SW_RECEIVER_SHARING_JETTY_IDLE_TIMEOUT:30000}
        restAcceptorPriorityDelta: ${SW_RECEIVER_SHARING_JETTY_DELTA:0}
        restAcceptQueueSize: ${SW_RECEIVER_SHARING_JETTY_QUEUE_SIZE:0}
        httpMaxRequestHeaderSize: ${SW_RECEIVER_SHARING_HTTP_MAX_REQUEST_HEADER_SIZE:8192}
        # For gRPC server
        gRPCHost: ${SW_RECEIVER_GRPC_HOST:0.0.0.0}
        gRPCPort: ${SW_RECEIVER_GRPC_PORT:0}
        maxConcurrentCallsPerConnection: ${SW_RECEIVER_GRPC_MAX_CONCURRENT_CALL:0}
        maxMessageSize: ${SW_RECEIVER_GRPC_MAX_MESSAGE_SIZE:0}
        gRPCThreadPoolQueueSize: ${SW_RECEIVER_GRPC_POOL_QUEUE_SIZE:0}
        gRPCThreadPoolSize: ${SW_RECEIVER_GRPC_THREAD_POOL_SIZE:0}
        gRPCSslEnabled: ${SW_RECEIVER_GRPC_SSL_ENABLED:false}
        gRPCSslKeyPath: ${SW_RECEIVER_GRPC_SSL_KEY_PATH:""}
        gRPCSslCertChainPath: ${SW_RECEIVER_GRPC_SSL_CERT_CHAIN_PATH:""}
        authentication: ${SW_AUTHENTICATION:""}
    receiver-register:
      selector: ${SW_RECEIVER_REGISTER:default}
      default:

    receiver-trace:
      selector: ${SW_RECEIVER_TRACE:default}
      default:

    receiver-jvm:
      selector: ${SW_RECEIVER_JVM:default}
      default:

    receiver-clr:
      selector: ${SW_RECEIVER_CLR:default}
      default:

    receiver-profile:
      selector: ${SW_RECEIVER_PROFILE:default}
      default:

    receiver-zabbix:
      selector: ${SW_RECEIVER_ZABBIX:-}
      default:
        port: ${SW_RECEIVER_ZABBIX_PORT:10051}
        host: ${SW_RECEIVER_ZABBIX_HOST:0.0.0.0}
        activeFiles: ${SW_RECEIVER_ZABBIX_ACTIVE_FILES:agent}

    service-mesh:
      selector: ${SW_SERVICE_MESH:default}
      default:

    envoy-metric:
      selector: ${SW_ENVOY_METRIC:default}
      default:
        acceptMetricsService: ${SW_ENVOY_METRIC_SERVICE:true}
        alsHTTPAnalysis: ${SW_ENVOY_METRIC_ALS_HTTP_ANALYSIS:""}
        alsTCPAnalysis: ${SW_ENVOY_METRIC_ALS_TCP_ANALYSIS:""}
        # `k8sServiceNameRule` allows you to customize the service name in ALS via Kubernetes metadata,
        # the available variables are `pod`, `service`, f.e., you can use `${service.metadata.name}-${pod.metadata.labels.version}`
        # to append the version number to the service name.
        # Be careful, when using environment variables to pass this configuration, use single quotes(`''`) to avoid it being evaluated by the shell.
        k8sServiceNameRule: ${K8S_SERVICE_NAME_RULE:"${pod.metadata.labels.(service.istio.io/canonical-name)}"}

    prometheus-fetcher:
      selector: ${SW_PROMETHEUS_FETCHER:default}
      default:
        enabledRules: ${SW_PROMETHEUS_FETCHER_ENABLED_RULES:"self"}
        maxConvertWorker: ${SW_PROMETHEUS_FETCHER_NUM_CONVERT_WORKER:-1}
        active: ${SW_PROMETHEUS_FETCHER_ACTIVE:true}

    kafka-fetcher:
      selector: ${SW_KAFKA_FETCHER:-}
      default:
        bootstrapServers: ${SW_KAFKA_FETCHER_SERVERS:localhost:9092}
        namespace: ${SW_NAMESPACE:""}
        partitions: ${SW_KAFKA_FETCHER_PARTITIONS:3}
        replicationFactor: ${SW_KAFKA_FETCHER_PARTITIONS_FACTOR:2}
        enableNativeProtoLog: ${SW_KAFKA_FETCHER_ENABLE_NATIVE_PROTO_LOG:false}
        enableNativeJsonLog: ${SW_KAFKA_FETCHER_ENABLE_NATIVE_JSON_LOG:false}
        isSharding: ${SW_KAFKA_FETCHER_IS_SHARDING:false}
        consumePartitions: ${SW_KAFKA_FETCHER_CONSUME_PARTITIONS:""}
        kafkaHandlerThreadPoolSize: ${SW_KAFKA_HANDLER_THREAD_POOL_SIZE:-1}
        kafkaHandlerThreadPoolQueueSize: ${SW_KAFKA_HANDLER_THREAD_POOL_QUEUE_SIZE:-1}

    receiver-meter:
      selector: ${SW_RECEIVER_METER:default}
      default:

    receiver-otel:
      selector: ${SW_OTEL_RECEIVER:-}
      default:
        enabledHandlers: ${SW_OTEL_RECEIVER_ENABLED_HANDLERS:"oc"}
        enabledOcRules: ${SW_OTEL_RECEIVER_ENABLED_OC_RULES:"istio-controlplane"}

    receiver_zipkin:
      selector: ${SW_RECEIVER_ZIPKIN:-}
      default:
        host: ${SW_RECEIVER_ZIPKIN_HOST:0.0.0.0}
        port: ${SW_RECEIVER_ZIPKIN_PORT:9411}
        contextPath: ${SW_RECEIVER_ZIPKIN_CONTEXT_PATH:/}
        jettyMinThreads: ${SW_RECEIVER_ZIPKIN_JETTY_MIN_THREADS:1}
        jettyMaxThreads: ${SW_RECEIVER_ZIPKIN_JETTY_MAX_THREADS:200}
        jettyIdleTimeOut: ${SW_RECEIVER_ZIPKIN_JETTY_IDLE_TIMEOUT:30000}
        jettyAcceptorPriorityDelta: ${SW_RECEIVER_ZIPKIN_JETTY_DELTA:0}
        jettyAcceptQueueSize: ${SW_RECEIVER_ZIPKIN_QUEUE_SIZE:0}
        instanceNameRule: ${SW_RECEIVER_ZIPKIN_INSTANCE_NAME_RULE:[spring.instance_id,node_id]}
    
    receiver_jaeger:
      selector: ${SW_RECEIVER_JAEGER:-}
      default:
        gRPCHost: ${SW_RECEIVER_JAEGER_HOST:0.0.0.0}
        gRPCPort: ${SW_RECEIVER_JAEGER_PORT:14250}

    receiver-browser:
      selector: ${SW_RECEIVER_BROWSER:default}
      default:
        # The sample rate precision is 1/10000. 10000 means 100% sample in default.
        sampleRate: ${SW_RECEIVER_BROWSER_SAMPLE_RATE:10000}

    receiver-log:
      selector: ${SW_RECEIVER_LOG:default}
      default:

    query:
      selector: ${SW_QUERY:graphql}
      graphql:
        path: ${SW_QUERY_GRAPHQL_PATH:/graphql}

    alarm:
      selector: ${SW_ALARM:default}
      default:

    telemetry:
      selector: ${SW_TELEMETRY:prometheus}
      none:
      prometheus:
        host: ${SW_TELEMETRY_PROMETHEUS_HOST:0.0.0.0}
        port: ${SW_TELEMETRY_PROMETHEUS_PORT:1234}
        sslEnabled: ${SW_TELEMETRY_PROMETHEUS_SSL_ENABLED:false}
        sslKeyPath: ${SW_TELEMETRY_PROMETHEUS_SSL_KEY_PATH:""}
        sslCertChainPath: ${SW_TELEMETRY_PROMETHEUS_SSL_CERT_CHAIN_PATH:""}

    configuration:
      selector: ${SW_CONFIGURATION:nacos}            #配置选择nacos
      none:
      grpc:
        host: ${SW_DCS_SERVER_HOST:""}
        port: ${SW_DCS_SERVER_PORT:80}
        clusterName: ${SW_DCS_CLUSTER_NAME:SkyWalking}
        period: ${SW_DCS_PERIOD:20}
      apollo:
        apolloMeta: ${SW_CONFIG_APOLLO:http://localhost:8080}
        apolloCluster: ${SW_CONFIG_APOLLO_CLUSTER:default}
        apolloEnv: ${SW_CONFIG_APOLLO_ENV:""}
        appId: ${SW_CONFIG_APOLLO_APP_ID:skywalking}
        period: ${SW_CONFIG_APOLLO_PERIOD:5}
      zookeeper:
        period: ${SW_CONFIG_ZK_PERIOD:60} # Unit seconds, sync period. Default fetch every 60 seconds.
        nameSpace: ${SW_CONFIG_ZK_NAMESPACE:/default}
        hostPort: ${SW_CONFIG_ZK_HOST_PORT:localhost:2181}
        # Retry Policy
        baseSleepTimeMs: ${SW_CONFIG_ZK_BASE_SLEEP_TIME_MS:1000} # initial amount of time to wait between retries
        maxRetries: ${SW_CONFIG_ZK_MAX_RETRIES:3} # max number of times to retry
      etcd:
        period: ${SW_CONFIG_ETCD_PERIOD:60} # Unit seconds, sync period. Default fetch every 60 seconds.
        endpoints: ${SW_CONFIG_ETCD_ENDPOINTS:localhost:2379}
        namespace: ${SW_CONFIG_ETCD_NAMESPACE:/skywalking}
        authentication: ${SW_CONFIG_ETCD_AUTHENTICATION:false}
        user: ${SW_CONFIG_ETCD_USER:}
        password: ${SW_CONFIG_ETCD_password:}
      consul:
        # Consul host and ports, separated by comma, e.g. 1.2.3.4:8500,2.3.4.5:8500
        hostAndPorts: ${SW_CONFIG_CONSUL_HOST_AND_PORTS:1.2.3.4:8500}
        # Sync period in seconds. Defaults to 60 seconds.
        period: ${SW_CONFIG_CONSUL_PERIOD:60}
        # Consul aclToken
        aclToken: ${SW_CONFIG_CONSUL_ACL_TOKEN:""}
      k8s-configmap:
        period: ${SW_CONFIG_CONFIGMAP_PERIOD:60}
        namespace: ${SW_CLUSTER_K8S_NAMESPACE:default}
        labelSelector: ${SW_CLUSTER_K8S_LABEL:app=collector,release=skywalking}
      nacos:
        # Nacos Server Host
        serverAddr: ${SW_CONFIG_NACOS_SERVER_ADDR:192.168.9.13}     #nacos配置地址
        # Nacos Server Port
        port: ${SW_CONFIG_NACOS_SERVER_PORT:8848}
        # Nacos Configuration Group
        group: ${SW_CONFIG_NACOS_SERVER_GROUP:skywalking}
        # Nacos Configuration namespace
        namespace: ${SW_CONFIG_NACOS_SERVER_NAMESPACE:93c704f7-9f30-4389-aa61-136148eb8c6f}
        # Unit seconds, sync period. Default fetch every 60 seconds.
        period: ${SW_CONFIG_NACOS_PERIOD:60}
        # Nacos auth username
        username: ${SW_CONFIG_NACOS_USERNAME:""}
        password: ${SW_CONFIG_NACOS_PASSWORD:""}
        # Nacos auth accessKey
        accessKey: ${SW_CONFIG_NACOS_ACCESSKEY:""}
        secretKey: ${SW_CONFIG_NACOS_SECRETKEY:""}

    exporter:
      selector: ${SW_EXPORTER:-}
      grpc:
        targetHost: ${SW_EXPORTER_GRPC_HOST:127.0.0.1}
        targetPort: ${SW_EXPORTER_GRPC_PORT:9870}

    health-checker:
      selector: ${SW_HEALTH_CHECKER:-}
      default:
        checkIntervalSeconds: ${SW_HEALTH_CHECKER_INTERVAL_SECONDS:5}

    configuration-discovery:
      selector: ${SW_CONFIGURATION_DISCOVERY:default}
      default:
        disableMessageDigest: ${SW_DISABLE_MESSAGE_DIGEST:false}

    receiver-event:
      selector: ${SW_RECEIVER_EVENT:default}
      default:

配置deployment。delpoyment.yml

# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: oap
  namespace: skywalking
spec:
  replicas: 3
  selector:
    matchLabels:
      app: oap
  template:
    metadata:
      labels:
        app: oap
        release: skywalking
    spec:
      serviceAccountName: skywalking-oap
      containers:
      - name: oap
        image: apache/skywalking-oap-server:8.7.0-es7           #指定镜像版本,尝试使用最新版8.9.1出现es连不上的情况,具体原因未排查。
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 11800
          name: grpc
        - containerPort: 12800
          name: rest
        resources:
          requests:
            memory: 2Gi
          limits:
            memory: 4Gi
        env:
        - name: SW_L0AD_CONFIG_FILE_FROM_VOLUME
          value: "true"
        - name: SKYWALKING_oap_UID
          valueFrom:
            fieldRef:
              fieldPath: metadata.uid
        volumeMounts:
        - mountPath: /etc/localtime
          name: volume-localtime
        - name: config
          mountPath: /skywalking/ext-config/application.yml
          subPath: path/to/application.yml
      volumes:
        - hostPath:
            path: /etc/localtime
            type: ''
          name: volume-localtime
        - name: config
          configMap:
            name: oap-config
            items:
            - key: application.yml
              path: path/to/application.yml

配置skywalking service服务,这里可根据实际情况调整是否需要使用NodePort暴露端口。service.yml

# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: v1
kind: Service
metadata:
  name: oap
  namespace: skywalking
  labels:
    service: oap
spec:
  ports:
  - port: 12800           #ui与后端oap通讯端口
    name: rest
  - port: 11800           #agent通讯数据端口
    name: grpc
  - port: 1234            #内部监控数据端口
    name: page
  selector:
    app: oap

3、skywalking UI配置,

# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ui-deployment
  namespace: skywalking
  labels:
    app: ui
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ui
  template:
    metadata:
      labels:
        app: ui
    spec:
      containers:
      - name: ui
        image: apache/skywalking-ui:8.6.0   #由于8.7版本启动报错,因此使用了8.6版本
        ports:
        - containerPort: 8080
          name: page
        resources:
          requests:
            memory: 1Gi
          limits:
            memory: 2Gi
        env:
        - name: SW_OAP_ADDRESS
          value: oap:12800
        volumeMounts:
        - mountPath: /etc/localtime
          name: volume-localtime
      volumes:
        - hostPath:
            path: /etc/localtime
            type: ''
          name: volume-localtime

---

apiVersion: v1
kind: Service
metadata:
  name: ui
  namespace: skywalking
  labels:
    service: ui
spec:
  ports:
  - port: 8080
    name: page
    nodePort: 31234
  type: NodePort
  selector:
    app: ui

最后使用kubectl apply -f 创建skywalking相关pod。

9.1版本安装部署单节点elasticsearch

apiVersion: apps/v1
kind: Deployment
metadata:
  name: elasticsearch-master
  namespace: skywalking
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      name: elasticsearch-master
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        name: elasticsearch-master
    spec:
      containers:
        - env:
            - name: discovery.type
              value: single-node
          image: 'elasticsearch:7.16.2'
          imagePullPolicy: IfNotPresent
          name: elasticsearch-master
          ports:
            - containerPort: 9200
              name: es-out
              protocol: TCP
            - containerPort: 9300
              name: es-in
              protocol: TCP
          resources: {}
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      terminationGracePeriodSeconds: 30

初始化es

apiVersion: batch/v1
kind: Job
metadata:
  name: skywalking-es-init
  namespace: skywalking
spec:
  template:
    metadata:
      labels:
        app: skywalking
        component: skywalking-job
        job-name: skywalking-es-init
        release: skywalking
      name: skywalking-es-init
    spec:
      containers:
        - env:
            - name: JAVA_OPTS
              value: '-Xmx2g -Xms2g -Dmode=init'
            - name: SW_STORAGE
              value: elasticsearch
            - name: SW_STORAGE_ES_CLUSTER_NODES
              value: 'elasticsearch-master:9200'
          image: 'skywalking.docker.scarf.sh/apache/skywalking-oap-server:9.1.0'
          imagePullPolicy: IfNotPresent
          name: oap
          resources: {}
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      initContainers:
        - command:
            - sh
            - '-c'
            - >-
              for i in $(seq 1 60); do nc -z -w3 elasticsearch-master 9200 &&
              exit 0 || sleep 5; done; exit 1
          image: 'busybox:1.30'
          imagePullPolicy: IfNotPresent
          name: wait-for-elasticsearch
          resources: {}
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
      restartPolicy: Never
      schedulerName: default-scheduler
      securityContext: {}
      serviceAccount: skywalking-oap
      serviceAccountName: skywalking-oap
      terminationGracePeriodSeconds: 30

创建elasticsearch-master 的服务

apiVersion: v1
kind: Service
metadata:
  name: elasticsearch-master
  namespace: skywalking
spec:
  ports:
    - name: http
      port: 9200
      protocol: TCP
      targetPort: 9200
    - name: transport
      port: 9300
      protocol: TCP
      targetPort: 9300
  selector:
    app: elasticsearch-master
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}

部署skywalking-oap

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: skywalking
    component: oap
    release: skywalking
spec:
  progressDeadlineSeconds: 600
  replicas: 2
  selector:
    matchLabels:
      app: skywalking
      component: oap
      release: skywalking
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: skywalking
        component: oap
        release: skywalking
    spec:
      containers:
        - env:
            - name: JAVA_OPTS
              value: '-Dmode=no-init -Xmx2g -Xms2g'
            - name: SW_CLUSTER
              value: kubernetes
            - name: SW_CLUSTER_K8S_NAMESPACE
              value: skywalking
            - name: SW_CLUSTER_K8S_LABEL
              value: 'app=skywalking,release=skywalking,component=oap'
            - name: SKYWALKING_COLLECTOR_UID
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: metadata.uid
            - name: SW_STORAGE
              value: elasticsearch
            - name: SW_STORAGE_ES_CLUSTER_NODES
              value: 'elasticsearch-master:9200'
          image: 'skywalking.docker.scarf.sh/apache/skywalking-oap-server:9.1.0'
          imagePullPolicy: IfNotPresent
          livenessProbe:
            failureThreshold: 3
            initialDelaySeconds: 15
            periodSeconds: 20
            successThreshold: 1
            tcpSocket:
              port: 12800
            timeoutSeconds: 1
          name: oap
          ports:
            - containerPort: 11800
              name: grpc
              protocol: TCP
            - containerPort: 12800
              name: rest
              protocol: TCP
          readinessProbe:
            failureThreshold: 3
            initialDelaySeconds: 15
            periodSeconds: 20
            successThreshold: 1
            tcpSocket:
              port: 12800
            timeoutSeconds: 1
          resources: {}
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      serviceAccount: skywalking-oap
      serviceAccountName: skywalking-oap
      terminationGracePeriodSeconds: 30
apiVersion: v1
kind: Service
metadata:
  name: skywalking-oap
  namespace: skywalking
spec:
  ports:
    - name: grpc
      port: 11800
      protocol: TCP
      targetPort: 11800
    - name: rest
      port: 12800
      protocol: TCP
      targetPort: 12800
  selector:
    app: skywalking
    component: oap
    release: skywalking
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}

部署skywalking-ui

apiVersion: apps/v1
kind: Deployment
metadata:
  name: skywalking-ui
  namespace: skywalking
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: skywalking
      component: ui
      release: skywalking
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: skywalking
        component: ui
        release: skywalking
    spec:
      containers:
        - env:
            - name: SW_OAP_ADDRESS
              value: 'http://skywalking-oap:12800'
          image: 'skywalking.docker.scarf.sh/apache/skywalking-ui:9.1.0'
          imagePullPolicy: IfNotPresent
          name: ui
          ports:
            - containerPort: 8080
              name: page
              protocol: TCP
          resources:
            requests:
              cpu: '1'
              memory: 2Gi
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30

参考链接:Documentation | Apache SkyWalkinghttps://skywalking.apache.org/docs/

https://github.com/loveowie/skywalking-kuberneteshttps://github.com/loveowie/skywalking-kubernetes