K8S叢集pod容器與宿主機時鐘不一致
一、問題背景介紹
pod容器和宿主機都是 CST 東八區時間,pod容器比宿主機時間晚3分鐘,也就是容器總比現實晚3分鐘。導致總是連線資料失敗。
二、問題過程分析
1、檢查基礎映象是否配置時區與本地時間配置
詳細配置:
volumeMounts:
- name: timezone
mountPath: /etc/localtime # 掛載到容器的目錄
volumes:
- name: timezone
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai # 宿主機的目錄
2、在其他節點上啟多個pod,檢查應用的pod在其他node節點時間是否一致
透過拉幾多個pod副本,時鐘還是無法正常同步成功。
很奇詭,後面透過NTP時間同步pod容器時間。現在只差資料庫連線問題
3、透過分析pod應用的日誌發現一些問題
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2022-07-04 14:08:28.892 [main] ERROR c.a.druid.pool.DruidDataSource - init datasource error, url: jdbc:mysql://192.168.130.1:3306/ers_epc?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:73)
at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:905)
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:830)
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:455)
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:240)
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:207)
Caused by: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
透過上面的日誌發現資料庫伺服器使用的預設美國的時區,也應用的時區不匹配。需要對應用時區統一配置為東八區(UTC)
三、最佳化建議
1、建議修改應用程式碼的資料庫連線配置檔案,將當前配置:
jdbc:mysql://192.168.130.1:3306/ers_epc?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
修改為:
jdbc:mysql://192.168.130.1:3306/ers_epc?autoReconnect=true&useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=UTC
客戶反饋透過最佳化上面配置,業務能正常連線資料庫,業務驗證成功。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28833846/viewspace-2904388/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- k8s叢集自動化維護PODK8S
- k8s叢集容器外部與容器內部服務互相訪問K8S
- 宿主機與容器可以ping通實踐
- 基於 K8s 容器叢集的容災架構與方案K8S架構
- K8S CNI之:利⽤ ipvlan + host-local 打通容器與宿主機的平⾏⽹絡K8S
- .Net 在容器中操作宿主機
- 建立sshd服務容器,並使宿主機與容器免密通訊
- Kubernetes(k8s)叢集部署(k8s企業級Docker容器集K8SDocker
- K8S如何部署Redis(單機、叢集)K8SRedis
- 關於k8s叢集容器日誌收集的總結K8S
- 容器化 | 在 K8s 上部署 RadonDB MySQL Operator 和叢集K8SMySql
- jmeter 叢集容器化部署JMeter
- k8s介紹及與docker搭建叢集K8SDocker
- k8s網路模型與叢集通訊K8S模型
- K8s 裡多容器 Pod 的健康檢查探針工作機制分析K8S
- Docker宿主機和容器之間的繫結Docker
- 利用容器逃逸實現遠端登入k8s叢集節點K8S
- 虛擬機器使用minikube搭建k8s叢集虛擬機K8S
- 實時計算框架:Flink叢集搭建與執行機制框架
- 刪除k8s叢集K8S
- k8s 叢集升級K8S
- python管理k8s叢集PythonK8S
- Ansible部署K8s叢集K8S
- 多k8s叢集管理K8S
- kubeadm部署K8S叢集K8S
- k8s之叢集管理K8S
- Kubernetes 叢集日誌管理 - 每天5分鐘玩轉 Docker 容器技術(180)Docker
- 【docker-ce】k8s叢集docker容器異常重啟問題分析DockerK8S
- multipass指定virualbox搭建k8s叢集(選擇docker作為預設容器)K8SDocker
- vivo 容器叢集監控系統架構與實踐架構
- MapReduce Service更換叢集外部時鐘源,僅需10步
- 使用虛擬機器初始化 K8S 叢集虛擬機K8S
- 用 edgeadm 一鍵安裝邊緣 K8s 叢集和原生 K8s 叢集K8S
- 主從庫與切片叢集機制
- 用 Weave Scope 監控叢集 - 每天5分鐘玩轉 Docker 容器技術(175)Docker
- 在 Azure 中部署 Kubernetes 容器叢集
- Docker 容器搭建及 Redis 叢集原理DockerRedis
- 教你如何搭建K8S叢集。K8S