天天看點

kubernetes-21:生産環境應用skywalking探針到apollo配置中心

目錄

(1).前置說明

(2).基礎鏡像

1.oraclejdk-docker-image

2.oraclejdk-skywalking-docker-image

3.apollo-skywalking-pro鏡像

(3).apollo&skywalking生産級容器化

(4).關鍵配置

(5).特别注意

1.sk-agent和sky-oap一定要配置正确的時區

2.sk-oap的elasticsearch版本選擇

3.制作apollo-skywalking-docker-image鏡像注意sk-plugin選擇

4.apollo-portal開啟多副本要注意配置session親和性

5.使用oraclejdk

6.修改支援的環境

(6).相關文章

(1).前置說明

本例相對于官方做了如下幾處改動:

1.修改基礎鏡像為oracle-jdk,并增加redis-cli, telnet等常用工具包。

2.基礎鏡像增加skywalking-agent的支援,通過configmap中的配置參數來決定在啟動apollo服務的時候是否開啟鍊路追蹤。

(2).基礎鏡像

1.oraclejdk-docker-image

第一層基礎鏡像。

使用oraclejdk8制作的鏡像,包含telnet, redis-cli, mysql-client等工具包。

位址: https://github.com/hepyu/oraclejdk-docker-image

2.oraclejdk-skywalking-docker-image

第二層鏡像,基于oraclejdk-docker-image鏡像。

加入了skywalking-agent支援。

位址: https://github.com/hepyu/oraclejdk-skywalking-docker-image

3.apollo-skywalking-pro鏡像

基于鏡像oraclejdk-skywalking-docker-image制作。

(3).apollo&skywalking生産級容器化

筆者提供生産級的配置檔案,位于:

https://github.com/hepyu/k8s-app-config/tree/master/product/standard/apollo-skywalking-pro

注意本例配置中pv預設是本地存儲,生産環境需要改為雲存儲。

順次執行:

zkubectl apply -f apollo-namespace.yaml

cd apollo-configservice

kubectl apply -f .

cd apollo-adminservice

kubectl apply -f .

cd apollo-portal

kubectl apply -f .

最終的生産效果:

原圖檔案位于:

https://github.com/hepyu/k8s-app-config/blob/master/product/standard/apollo-skywalking-pro/images/apollo-skywalking.png

kubernetes-21:生産環境應用skywalking探針到apollo配置中心

(4).關鍵配置

skywalking的關鍵配置位于config/admin/portal下的config.yaml檔案,通過環境變量SKYWALKING_AGENT來配置是否開啟skywalking-agent探針;當然也可以在這裡調整JVM啟動參數。

當配置如下時表示關閉skywalking-agent探針:SKYWALKING_AGENT: ''
SERVICE_NAME: apollo-configservice
 APOLLO_CONFIG_SERVICE_NAME: apollo-configservice
 LOG_DIR: /opt/logs/apollo-config-server
 SERVER_PORT: '8080'
  SERVER_URL: http://APOLLO_CONFIG_SERVICE_NAME:SERVER_PORT
 TIME_ZONE: Asia/Shanghai
 SKYWALKING_AGENT: '-javaagent:/app/3rd/skywalking-agent/skywalking-agent.jar=agent.service_name=apollo-configservice-k8s,collector.backend_service=skywalking-c0-oap.skywalking:11800'
 #SKYWALKING_AGENT: ''
 JAVA_OPTS: >-
 -Xms1024m -Xmx1024m -Xss256k -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:SurvivorRatio=8
 -server -XX:-ReduceInitialCardMarks
 -XX:ParallelGCThreads=4 -XX:MaxTenuringThreshold=9 -XX:+DisableExplicitGC -XX:+ScavengeBeforeFullGC -XX:SoftRefLRUPolicyMSPerMB=0
 -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow
 -Duser.timezone=$TIME_ZONE -Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8
 -Djava.security.egd=file:/dev/./urandom
    -Dserver.port=SERVER_PORT -Dlogging.file=LOG_DIR/SERVICE_NAME.log -XX:HeapDumpPath=LOG_DIR/
 $SKYWALKING_AGENT
 application-github.properties: |
 spring.datasource.url=jdbc:mysql://mysql-min.mysql-min:3306/DevApolloConfigDB?characterEncoding=utf8
 spring.datasource.username=apollo
 spring.datasource.password=admin
 spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect
 eureka.service.url=http://apollo-configservice/eureka/           

複制

(5).特别注意

1.sk-agent和sky-oap一定要配置正确的時區

都要配置: TIME_ZONE: Asia/Shanghai

因為skywalking的預設時區是UTC0,大陸的APP的服務的時區是UTC8,如果sk-agent和sk-oap的時區不一緻時,sk-ui不會顯示資料/拓撲。

2.sk-oap的elasticsearch版本選擇

盡量選擇sk使用的版本,比如sk6.4.0用的是es6.3.2那我們搭建es時就要選擇這個版本。避免es版本差異帶來的各種奇怪問題。

3.制作apollo-skywalking-docker-image鏡像注意sk-plugin選擇

參照官方/社群的issue:https://github.com/ctripcorp/apollo/issues/2448

我們的目的是:

a. 監控Apollo-Config、Admin、Portal之間的調用以及拓撲

b. 監控Apollo-Client 與 Config之間的調用及拓撲

第一種情況:Portal與Config/Admin之間采用RestTemplate/HttpClient 發起調用,這個插件在Skywalking支援清單。

第二種情況,Apollo-Client 采用的是 HttpURLConnection 發起Http請求。和 HttpClient 有些差別,預設插件不支援。需要使用可選插件:bootstrap-plugins/apm-jdk-http-plugin-6.4.0.jar,将這個jar包拷貝到plugins目錄下。

4.apollo-portal開啟多副本要注意配置session親和性

config/admin/portal的負載均衡都需要配置:sessionAffinity: ClientIP;

如果你還是用的ingress代理apollo-portal,那麼ingress也需要配置親和性保證session的正确傳遞:

nginx.ingress.kubernetes.io/affinity: cookie

ingress的親和性配置參見檔案:

https://github.com/hepyu/k8s-app-config/blob/master/product/standard/apollo-pro/apollo-portal/apollo-portal-ingress.yaml

如果不配置親和性,apollo-portal開啟多副本後将出現無法登陸的現象。

5.使用oraclejdk

因為apollo官方的鏡像裡沒有調試工具,如jstat等,很不友善。

6.修改支援的環境

在apolloPortalDB的ServerConfig表中存放了支援的環境:pro,uat,fat,dev,如果隻配置了pro,需要把其餘的3個删除,否則portal會一直報錯:

''' Env is down. env: UAT, failed times: 39, meta server address: http://apollo.meta '''

(6).相關文章

1.官方位址容器化配置位址:

https://github.com/ctripcorp/apollo/tree/master/scripts/apollo-on-kubernetes/kubernetes

2.官方apollo容器化步驟(Step by Step):

https://github.com/ctripcorp/apollo/blob/master/scripts/apollo-on-kubernetes/README.md

3.筆者apollo容器化步驟(Step by Step):

https://www.toutiao.com/i6698673592915198478/

相對于官方文檔增加了鏡像倉庫推送/db初始化的更加詳細的操作,根據筆者的習慣整理了步驟,同時也作為筆者自己的筆記/備份