目錄
(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
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAjM2EzLcd3LcJzLcJzdllmVldWYtl2Pn5GcuEDZwATZjFGNxUTZ2gzYkFmMyMWN3UWZhJ2N1gTZlRWZvwVO5ADOzcTNtUGall3LcVmdhNXLwRHdo9CXt92YucWbpRWdvx2Yx5yazF2Lc9CX6MHc0RHaiojIsJye.png)
(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初始化的更加詳細的操作,根據筆者的習慣整理了步驟,同時也作為筆者自己的筆記/備份