K8S SWCK SkyWalking全链路跟踪工具安装

官方参考:
如何使用java探针注入器?

配置两个demo,建立调用关系,

首先创建一个基础镜像dockerfile


from centos


先安装java

参考:     linux rpm方式安装java

JAVA_HOME=/usr/java/jdk1.8.0-x64
CLASSPATH=.:$JAVA_HOME/lib/tools.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH
vi /etc/profile
source /etc/profile
java -version

需要安装maven,并修改镜像地址为阿里的,方便下载


参考:Linux中maven下载、安装、配置详细教程

wget https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz
vim /etc/profile
export MAVEN_HOME=/root/maven/apache-maven-3.8.8
export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH
source /etc/profile
mvn -version
build the springboot and springcloudgateway image

推送到仓库

harbor/yourharbor/base:v0.0.1

下载这两个demo的代码

$ git clone https://github.com/dashanji/swck-spring-cloud-k8s-demo
$ cd swck-spring-cloud-k8s-demo && make

打成镜像并推送至仓库


使用es作为存储,需要创建storage


参考:Storage Usage

vi  storage-swck.yaml


apiVersion: operator.skywalking.apache.org/v1alpha1
kind: Storage
metadata:
  name: swck-storage
  namespace: develop
spec:
  type: elasticsearch
  connectType: external
  address: "http://your-elasticsearch:9200" #ES地址,如果在其它命令空间,需要在域名后面添加命名空间,例如:.develop
    #security: 
    #user:
    #  secretName: default


kubectl apply -f storage-swck.yaml 
检查安装是否成功
kubectl get storage -n develop


安装证书管理器(cert-manger)

wget https://github.com/jetstack/cert-manager/releases/download/v1.13.3/cert-manager.yaml
kubectl apply -f cert-manager.yaml
检查安装是否成功
kubectl get pod -n cert-manager

安装SWCK operator

mkdir swck & cd swck
wget https://archive.apache.org/dist/skywalking/swck/0.6.1/skywalking-swck-0.6.1-bin.tgz
tar -xvf skywalking-swck-0.6.1-bin.tgz


operator有个镜像需要修改
参考:(问题解决) 缺少gcr.io/kubebuilder/kube-rbac-proxy:v0.8.0


kubectl apply -f /config/operator-bundle.yaml
检查安装是否成功
kubectl get pod -n skywalking-swck-system

部署oap和ui


在 develop 命名空间中部署 OAPServer 组件和 UI 组件。

wget https://raw.githubusercontent.com/apache/skywalking-swck/master/operator/config/samples/default.yaml
cp default.yaml oap-ui-default.xml

vi oap-ui-default.xml 
apiVersion: operator.skywalking.apache.org/v1alpha1
kind: OAPServer
metadata:
  name: default
  namespace: develop
spec:
  version: 9.2.0
  instances: 1
  image: apache/skywalking-oap-server:9.2.0
  service:
    template:
      type: ClusterIP
  storage:
    name: swck-storage
---
apiVersion: operator.skywalking.apache.org/v1alpha1
kind: UI
metadata:
  name: default
  namespace: develop
spec:
  version: 9.2.0
  instances: 1
  image: apache/skywalking-ui:9.2.0
  OAPServerAddress: http://default-oap:12800
  service:
    template:
      type: NodePort
    ingress:
      host: demo.ui.skywalking


      

#yaml中的9.2.0版本不需要修改,
9.5和9.7版本均不能自动生成sw_record索引

(Skywalking is missing the 'sw_records-all' index. #10910);
name: default也要修改,改完之后各种异常

安装

kubectl apply -f oap-ui-default.xml

kubectl get oapserver -n develop
kubectl get ui -n develop

kubectl get pod -A|grep def


查看oap和ui的日志,看否成功
kibana检查数据是否进入ES
查看SW开头的索引


修改configMap中的oap地址

kubectl edit configmap skywalking-swck-java-agent-configmap -n skywalking-swck-system


改成develop空间的地址,前面已安装到develop空间中了,default-oap.develop:11800
在当前空间中使用这个oap地址,
注意:如果在develop空间中的服务也需要使用这个默认配置,可以在develop空间中修改这个configmap

部署 spring boot 应用


创建 springboot-system 命名空间。
$ kubectl create namespace springboot-system
给 springboot-system 命名空间打上标签使能 java 探针注入器。
$ kubectl label namespace springboot-system swck-injection=enabled

接下来为 spring boot 应用对应的部署文件 springboot.yaml ,其中使用了 annotation 覆盖默认的探针配置,比如 service_name ,将其覆盖为 backend-service 。

[root@yourLinux swck]# vi springboot.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-springboot
  namespace: springboot-system
spec:
  selector:
    matchLabels:
      app: demo-springboot
  template:
    metadata:
      labels:
        swck-java-agent-injected: "true"  # enable the java agent injector
        app: demo-springboot
      annotations:
        strategy.skywalking.apache.org/agent.Overlay: "true"  # enable the agent overlay
        agent.skywalking.apache.org/agent.service_name: "backend-service"    # agent.skywalking.apache.org/collector.backend_service: "default-oap.default:11800"
    spec:
      containers:
      - name: springboot
        imagePullPolicy: IfNotPresent
        image: yourharborIP/yourharbor/app:v0.0.1
        command: ["java"]
        args: ["-jar","/app.jar"]
---
apiVersion: v1
kind: Service
metadata:
  name: demo
  namespace: springboot-system
spec:
  type: ClusterIP
  ports:
  - name: 8085-tcp
    port: 8085
    protocol: TCP
    targetPort: 8085
  selector:
    app: demo-springboot
    

在 springboot-system 命名空间中部署 spring boot 应用。
$ kubectl apply -f springboot.yaml
查看部署情况。
$ kubectl get pod -n springboot-system
通过 JavaAgent 查看最终注入的 java 探针配置。
$ kubectl get javaagent -n springboot-system

部署 spring cloud gateway 应用


创建 gateway-system 命名空间。
$ kubectl create namespace gateway-system
给 gateway-system 命名空间打上标签使能 java 探针注入器。
$ kubectl label namespace gateway-system swck-injection=enabled
kubectl get ns --show-labels
接下来为 spring cloud gateway 应用对应的部署文件 springgateway.yaml ,其中使用了 annotation 覆盖默认的探针配置,比如 service_name ,将其覆盖为 gateway-service 。此外,在使用 spring cloud gateway 时,我们需要在探针配置中添加 spring cloud gateway 插件。
容器中:/sky/agent/optional-plugins/目录下有这个apm(cloud-gateway-3.x)
需要注意的是,在使用 annotation 覆盖探针配置之前,需要增加 strategy.skywalking.apache.org/agent.Overlay: "true" 来使覆盖生效。


[root@yourLinux swck]# cat springgateway.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: demo-gateway
  name: demo-gateway
  namespace: gateway-system
spec:
  selector:
    matchLabels:
      app: demo-gateway
  template:
    metadata:
      labels:
        swck-java-agent-injected: "true"
        app: demo-gateway
      annotations:
        strategy.skywalking.apache.org/agent.Overlay: "true"
        agent.skywalking.apache.org/agent.service_name: "gateway-service"     #  agent.skywalking.apache.org/collector.backend_service: "default-oap.default:11800"
        optional.skywalking.apache.org: "cloud-gateway-3.x" # add spring cloud gateway plugin
    spec:
      containers:
      - image: yourharborIP/yourharbor/gateway:v0.0.1
        name: gateway
        command: ["java"]
        args: ["-jar","/gateway.jar"]
---
apiVersion: v1
kind: Service
metadata:
  name: service-gateway
  namespace: gateway-system
spec:
  type: ClusterIP
  ports:
  - name: 9999-tcp
    port: 9999
    protocol: TCP
    targetPort: 9999
  selector:
    app: demo-gateway

在 gateway-system 命名空间中部署 spring cloud gateway 应用。
$ kubectl apply -f springgateway.yaml
查看部署情况。
$ kubectl get pod -n gateway-system
通过 JavaAgent 获取最终注入的java探针配置。

检查javaagent


$ kubectl get javaagent -n gateway-system
查看UI暴露的nodePort
kubectl get service default-ui -n develop
查看gateway地址及端口
kubectl get service service-gateway -n gateway-system


跑几百个请求测试一下

for i in {1..100}; do curl http://yourip:9999/gateway/hello && echo ""; done


打开ui查看


一个服务启动后,通过如下命令可以看到是否探针是否启动成功,oap使用的是哪个
 

kubectl get javaagent -A

通过describe命令可以观察一下initContainer中,javaagent是如何加到你的app中的

  kubectl describe pod -l app=demo-springboot -n springboot-system
  kubectl describe pod -l app=demo-gateway -n gateway-system

日志

pom.xml引入依赖:

<groupId>org.apache.skywalking</groupId>

<artifactId>apm-toolkit-logback-1.x</artifactId>

logback.xml添加appender

参考:
kywalking部署之后日志不显示


 

  • 17
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!要在Kubernetes部署SkyWalking,您可以按照以下步骤进行操作: 1. 首先,确保您已经有一个运行的Kubernetes集群,并且已经安装了kubectl命令行工具。 2. 接下来,您需要创建一个用于部署SkyWalking的命名空间。可以使用以下命令创建一个名为swck的命名空间: ```shell kubectl create namespace swck ``` 3. 接下来,您需要创建一个配置文件,用于定义SkyWalking部署。您可以创建一个名为skywalking.yaml的文件,并将以下内容添加到该文件中: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: skywalking namespace: swck spec: replicas: 1 selector: matchLabels: app: skywalking template: metadata: labels: app: skywalking spec: containers: - name: skywalking image: apache/skywalking-oap-server:8.5.0 ports: - containerPort: 12800 ``` 这个配置文件定义了一个名为skywalking部署,使用了Apache SkyWalking的官方Docker镜像,并将容器端口设置为12800。 4. 然后,您可以使用kubectl命令部署SkyWalking。运行以下命令: ```shell kubectl apply -f skywalking.yaml -n swck ``` 这将在swck命名空间中创建一个名为skywalking的Deployment。 5. 最后,您可以使用kubectl命令来检查部署的状态和详细信息。运行以下命令: ```shell kubectl get pods -n swck ``` 这将显示在swck命名空间中运行的所有Pods的状态。请确保skywalking Pod的状态为"Running"。 现在,您已经成功在Kubernetes部署SkyWalking。您可以使用其他工具或配置文件来设置SkyWalking的其他功能和参数。希望对您有所帮助!如果有任何问题,请随时向我提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值