skywalking使用ES做存储在K8S上的部署,使用实践_skywalking sw_storage_es_cluster_nodes

要点说明

  • 与之前一样,为了便于自动部署,我使用jenkions做了文件存储,基于jenkins的账号验证提供初级的文件安全保证,使用initContainers在启动容器前,下载所需的证书,通过配置ENV给容器获取账号、密码,此外还增加禁止下载的ENV变量,以便于在特殊情况下屏蔽下载(比如jenkins 宕机了);
  • 完整版的skywalking配置文件太长了,这里我用了几个主要的环境变量做了配置,环境变量完整支持官方文档在这里,可以根据实际需要进行参考配置skywalking-oap server 环境变量支持
  • 环境变量使用说明,如何生成jks证书下面会说
 - name: SW_STORAGE #声明使用ES做存储
  value: "elasticsearch"
 - name: SW_NAMESPACE #skywalking 使用的ES索引前缀配置
  value: "skywalking-log"
 - name: SW_STORAGE_ES_CLUSTER_NODES #集群连接地址
  value: "es-01-svc.es:9200"
 - name: SW_STORAGE_ES_HTTP_PROTOCOL #集群连接协议,简单点直接用http也不是不行
  value: "https"
 - name: SW_ES_USER #连接ES集群用户
  value: "elastic" 
 - name: SW_ES_PASSWORD #连接ES集群用户密码
  value: "password"
 - name: SW_STORAGE_ES_SSL_JKS_PATH #ssl协议证书存储位置
  value: "/local-certs/es01\_http.jks"
 - name: SW_STORAGE_ES_SSL_JKS_PASS #ssl协议证书密码
  value: "jks密码"
 - name: "SW\_STORAGE\_ES\_SUPER\_DATASET\_INDEX\_SHARDS\_FACTOR" #skywalking 索引分片数 默认5
  value: "1"
 - name: SW_CORE_RECORD_DATA_TTL  #skywalking 明细数据存储时长,单位:天,默认3
  value: "14"
 - name: SW_CORE_METRICS_DATA_TTL #skywalking 统计数据存储时长,单位:天,默认7
  value: "30"

apiVersion: apps/v1
kind: StatefulSet # Deployment | StatefulSet | DaemonSet | JobSet
metadata: 
  name:   skywalking-oap
  namespace:  devops-tools
spec: 
  replicas: 1  #运行副本数
  selector: 
    matchLabels: 
      k8s-app:  skywalking-oap #与下方template节点中的 labels 保持一致
  revisionHistoryLimit: 10 #设定保留最近的几个revision 用于回滚,默认10
  updateStrategy: #更新策略 [Statefulset]
  #strategy: #更新策略 [Deployment]
    type: RollingUpdate # RollingUpdate (滚动更新) | OnDelete (删除时更新)
    rollingUpdate:
      partition: 0 #[Statefulset] 灰度发布控制器,每次只更新部署的pod序号 >= partition的pod,如果有5个pod[0-4],0=更新所有,4=更新1pod,3=更新2pod
  persistentVolumeClaimRetentionPolicy: # Retain | Delete
    whenDeleted: Delete
    whenScaled: Retain
  volumeClaimTemplates:     #statefulset 专属动态创建pod的存储
  - metadata:    
      name: skywalking-oap-volume
    spec:
      storageClassName: "local-path" ## 基于PV的动态创建
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
  template: 
    metadata: 
      labels: 
         k8s-app: skywalking-oap
      annotations:
        #"cni.projectcalico.org/ipAddrs": "[\"10.244.220.10\"]" #pod绑定固定ip,依赖于calico ipam插件,必须使用calico 3.24.1以上的版本才可以
    spec: 
      restartPolicy: Always 
      terminationGracePeriodSeconds: 30 #容器被删除变为Terminating状态的等待时间,默认是30s,以便于做一些容器删除前的处理工作
      initContainers:
       - name: init-skywalking-oap
         image: apache/skywalking-oap-server:latest
         #securityContext:
         # runAsUser: 0 #由于需要更改挂在目录的归属用户,需要以root运行 
         command: 
         - "bash" 
         - "-c"
         # 可执行多行命令 
         - > 
           echo $DOWN\_LOAD\_URLS;
           IFS=',' read -r -a my_array <<< "$DOWN\_LOAD\_URLS";
           for URL in "${my\_array[@]}"; do
               echo 'URL:'$URL;
               FILE=$(echo $URL | awk -F '/' '{print $NF}');
               SAVE\_PATH='/local-certs';
               
               if [ ! -f $SAVE\_PATH"/"$FILE ] || [ "$DOWN\_LOAD" = "true" ];then
                   res\_status=$(curl -u $DOWNLOAD\_ACCESS\_USER:$DOWNLOAD\_ACCESS\_PASS -I -m 10 -o /dev/null -s -w %{http\_code} $URL);
                   echo 'res\_status: ' $res\_status;
                   if [ "$res\_status" != "200" ];then
                     echo "===================== "$FILE"不可下载 =======================";
                   else
                     echo "===================== "$FILE"可下载,执行下载 =======================";
                     cd $SAVE\_PATH;
                     curl -u $DOWNLOAD\_ACCESS\_USER:$DOWNLOAD\_ACCESS\_PASS $URL -O;
                     ls $SAVE\_PATH;
                   fi
               else
                       echo "===================== "$FILE"已存在 或 ENV:DOWN\_LOAD=false =======================";
               fi
           done
      
         env:   #环境变量配置
         - name: DOWN_LOAD
           value: "true"
         - name: "DOWN\_LOAD\_URLS"
           value: "http://xxxxx/xxx/es01\_http.jks" #jks证书下载url
         - name: DOWNLOAD_ACCESS_USER 
           value: "http auth 用户名"
         - name: DOWNLOAD_ACCESS_PASS
           value: "http auth 密码"
         - name: POD_NAME
           valueFrom: 
             fieldRef: 
               apiVersion: v1
               fieldPath: metadata.name
         volumeMounts: 
         - name: skywalking-oap-volume  #挂载存储目录
           mountPath: /local-certs
           subPath: local-certs
         
      containers:  
        - name: skywalking-oap
          image: apache/skywalking-oap-server:latest
          imagePullPolicy: IfNotPresent # IfNotPresent | Always | Never
          resources:
            requests:
              memory: "2000Mi" #Gi=G Mi=M 只支持整数
              cpu: "500m" #1000m=1cpu (cpu物理线程)
            limits:
              memory: "2200Mi" #Gi=G Mi=M 只支持整数
              cpu: "1000m"  #1000m=1cpu (cpu物理线程)
          ports: 
          - containerPort: 11800
            protocol: TCP
          - containerPort: 12800
            protocol: TCP
          - | 
            docker-entrypoint.sh;
            sleep 3600;

          env:   #环境变量配置
          - name: SW_STORAGE
            value: "elasticsearch"
          - name: SW_NAMESPACE
            value: "skywalking-log"
          - name: SW_STORAGE_ES_CLUSTER_NODES
            value: "es-01-svc.es:9200"
          - name: SW_STORAGE_ES_HTTP_PROTOCOL
            value: "https"
          - name: SW_ES_USER
            value: "elastic"
          - name: SW_ES_PASSWORD
            value: "1q2w3e4r"
          - name: SW_STORAGE_ES_SSL_JKS_PATH
            value: "/local-certs/es01\_http.jks"
          - name: SW_STORAGE_ES_SSL_JKS_PASS
            value: "1q2w3e"
          #es index 分片数 默认5
          - name: "SW\_STORAGE\_ES\_SUPER\_DATASET\_INDEX\_SHARDS\_FACTOR"
            value: "1"
          - name: SW_CORE_RECORD_DATA_TTL
            value: "14"
          - name: SW_CORE_METRICS_DATA_TTL	
            value: "30"
          - name: POD_NAME
            valueFrom: 
              fieldRef: 
                apiVersion: v1
                fieldPath: metadata.name
          - name: POD_IP
            valueFrom:
              fieldRef:
                fieldPath: status.podIP
          volumeMounts: 
          - name: skywalking-oap-volume    #挂载部署目录
            mountPath: /skywalking/data
            subPath: data
          - name: skywalking-oap-volume  #挂载部署目录
            mountPath: /skywalking/logs
            subPath: logs
          - name: skywalking-oap-volume  #挂载存储目录
            mountPath: /local-certs
            subPath: local-certs
          - name: skywalking-oap-config  #挂载配置文件
            mountPath: /config
          - name: host-time  #挂载本地时区
            mountPath: /etc/localtime
            readOnly: true
      volumes: 
      - name: host-time
        hostPath: #挂载本地时区
          path: /etc/localtime
          type: ""

生成JKS证书

登录到要连接的ES集群的任意节点上,使用ES集群的http.p12证书进行生成
注意

  • http.p12证书如果有密码的话,需要在-srcstorepass “$http12证书密码"参数中设定,没有也要设为”",不能少参数
  • -storepass "jks证书密码"这个密码必须有,哪怕http.p12没有密码,这个证书也要设置至少6位的密码
/usr/share/elasticsearch/jdk/bin/keytool   -importkeystore -destkeystore ./es_http.jks -deststoretype JKS  -srckeystore /usr/share/elasticsearch/config/local-certs/http.p12 -srcstoretype PKCS12 -storepass "jks证书密码" -srcstorepass "$http12证书密码"

这样skywalking-oap server就部署好了。

skywalking-ui

接下来是skywalking-ui,这个更简单,只要设定好要连接的skywalking-oap server的地址就行了,yml部署文件如下

# api service

apiVersion: v1
kind: Service
metadata:
  name: skywalking-ui-svc
  namespace:  devops-tools
  annotations: 
    desc : skywalking-ui服务访问入口
spec:
  selector:
    k8s-app:  skywalking-ui
  type: ClusterIP   #type: ClusterIP【默认】 | NodePort | LoadBalancer(外部负载均衡) | ExternalName (外部DNS解析)
  clusterIP: 10.106.160.106
  ports:
  - port: 80
    targetPort: 8080
    name: http

---

apiVersion: apps/v1
kind: StatefulSet # Deployment | StatefulSet | DaemonSet | JobSet
metadata: 
  name:   skywalking-ui
  namespace:  devops-tools
spec: 
  replicas: 1  #运行副本数
  selector: 
    matchLabels: 
      k8s-app: skywalking-ui #与下方template节点中的 labels 保持一致
  revisionHistoryLimit: 10 #设定保留最近的几个revision 用于回滚,默认10
  #serviceName: "nginx-headless" #设置绑定的service,以支持内部dns访问 <pod-name>.<svc-name>.<namespace>.svc.cluster.local
  updateStrategy: #更新策略 [Statefulset]
  #strategy: #更新策略 [Deployment]
    type: RollingUpdate # RollingUpdate (滚动更新) | OnDelete (删除时更新)
    rollingUpdate:
      #maxSurge: 1 #[Deployment]支持-升级过程中可以启动超过原先设置的POD数量的上限:数量 或 百分比 1 | 20%
      #maxUnavailable: 1 #[Deployment]支持-升级过程中无法提供服务的POD数量的上限:数量 或 百分比 1 | 20%,最好与maxSurge保持一致,这样能确保更新过程中的服务能力不会下降
      partition: 0 #[Statefulset] 灰度发布控制器,每次只更新部署的pod序号 >= partition的pod,如果有5个pod[0-4],0=更新所有,4=更新1pod,3=更新2pod
  persistentVolumeClaimRetentionPolicy: # Retain | Delete
    whenDeleted: Delete
    whenScaled: Retain
  volumeClaimTemplates:     #statefulset 专属动态创建pod的存储
  - metadata:    
      name: skywalking-ui-volume
    spec:
      storageClassName: "local-path" ## 基于PV的动态创建
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
  template: 
    metadata: 
      labels: 
         k8s-app: skywalking-ui
      annotations:
        #"cni.projectcalico.org/ipAddrs": "[\"10.244.220.10\"]" #pod绑定固定ip,依赖于calico ipam插件,必须使用calico 3.24.1以上的版本才可以
    spec: 
      restartPolicy: Always 
      terminationGracePeriodSeconds: 30 #容器被删除变为Terminating状态的等待时间,默认是30s,以便于做一些容器删除前的处理工作
       containers:  
        - name: skywalking-ui
          image: apache/skywalking-ui
          imagePullPolicy: IfNotPresent # IfNotPresent | Always | Never
          #securityContext: ##开启特权,因为要调整系统内核
          # privileged: true
          resources:
            requests:
              memory: "256Mi" #Gi=G Mi=M 只支持整数
              cpu: "250m" #1000m=1cpu (cpu物理线程)
            limits:
              memory: "512Mi" #Gi=G Mi=M 只支持整数
              cpu: "500m"  #1000m=1cpu (cpu物理线程)
          #securityContext: ###添加参数启用容器root权限
          # privileged: true
          ports: 
          - containerPort: 8080
            protocol: TCP
          env:  
          - name: SW_OAP_ADDRESS #设定好slkywalking-oap server的地址
            value: http://skywalking-oap-svc:12800
          - name: POD_NAME
            valueFrom: 
              fieldRef: 
                apiVersion: v1
                fieldPath: metadata.name
          - name: POD_IP
            valueFrom:
              fieldRef:
                fieldPath: status.podIP
          volumeMounts: 
          - name: skywalking-ui-volume    #挂载部署目录
            mountPath: /skywalking-ui/data
            subPath: data
          - name: skywalking-ui-volume  #挂载部署目录
            mountPath: /skywalking-ui/logs
            subPath: logs
          - name: host-time  #挂载本地时区
            mountPath: /etc/localtime
            readOnly: true
      volumes: 
      - name: host-time
        hostPath: #挂载本地时区
          path: /etc/localtime
          type: ""

skywalking-agent部署

这里一般有2种方式
1.通过init-containers将agent文件部署到容器内,同时在应用启动脚本中添加java-agent JVM参数来实现;
2.将agent文件放置到应用项目中,同时在应用启动脚本中添加java-agent JVM参数来实现

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数大数据工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上大数据开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)
img

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

WQbflp-1712988113683)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上大数据开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)
[外链图片转存中…(img-p3oWdoJc-1712988113683)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 20
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值