K8S叢集pod容器與宿主機時鐘不一致

jaymarco發表於2022-07-05

一、問題背景介紹

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章