摘要:通過pod preset自動配置容器的時區預設的情況,在k8s裡啟動乙個容器,該容器的設定的時區是utc0,但是對於很多客戶而言,其主機環境並不在utc0。例如中國客戶在utc8。如果不把容器的時區和主機主機設定為一致,則在查詢日誌等時候將非常不方便,也容易造成誤解。但是k8s以及docker容器沒有乙個簡便的設定/開關在系統層面做配置。都需要我們從單個容器入手做設定,具體方法如下:
docker引擎提供了兩種設定方式,分別是通過環境變數以及掛載主機檔案方式來完成
方式一:設定容器的時區環境變數
先看看沒有設定前,容器的情況:
從輸出可以看出,容器和主機差了8個時區
我們通過環境變數的方式來改變容器的時區:
從輸出可以看出,雖然沒有改變對應的localtime檔案,但是容器和主機的時區是一致的了。
方式二:掛載主機的時區檔案到容器中
從輸出可以看出,容器和主機的時區是一致的了,而且使用了本機的時區檔案。
在k8s中,可以參考docker的方式進行設定
通過環境變數設定
通過掛載主機時區檔案設定
這裡引出了乙個問題,難道每次每個容器都要做這樣的配置才可以麼?可否在系統層面設定,而無需在對應yaml檔案體現呢?不然yaml檔案將過於囉嗦。答案是使用k8s的特性pod preset來控制容器啟動前先配置好對應時區環境變數,或者掛載主機檔案。下面我們通過配置環境變數的方式說明,掛載檔案是類似的,就不重複了。
通過pod preset預設定時區環境變數
啟用pod preset
pod preset目前還是alpha階段,預設是沒有啟用的,所以需要通過以下步驟啟用:
咱們以阿里雲的kubernetes服務為例(如果還沒有,可以嘗試一下,一鍵就可以開通,還免費哦)。阿里雲的kubernetes服務的master元件(api server, scheduler, controller)都是通過static pod的方式用kubelet啟動,所以需要更改對應的yaml來啟用pod preset:
• 在-runtime-config增加settings.k8s.io/v1alpha1=true
• 在--admission-control增加podpreset`
儲存後kubelet會自動重啟kube-apiserver元件。我們需要同時更改3臺機器的master才可以。在期間你將收到類似以下的告警,在api server重啟成功後會自動恢復
驗證配置成功
• 確保api server已經恢復,如果恢復將收到如下通知資訊:
• kubectl可以查詢pod preset。在開關沒有開啟成功前,是無法呼叫以下命令的
配置設定時區的pod preset
對應的pod preset物件建立檔案如下:
這裡需要注意的地方是,一定需要寫selector...matchlabels,但是matchlabels為空,標示應用於所有容器,這個正式我們所期望的
可以得到建立成功的pod preset列表:
以普通的方式建立容器,但是環境變數被pod preset注入了
進入容器看看對應的環境變數:
從輸出可以看出,容器已經被預設配置了時區的環境變數,對應的時區是asia/shanghai
至此,我們就完成了容器的時區的"自動"配置了。pod preset的預設功能還是非常便利的,目前這塊還在演進中,但是已經能大大簡化了相關的管理工作,將這些配置從開發者手中解脫出來,變成系統管理配置。
需要注意的是,pod preset是namespace級別的物件,其作用範圍只能是同乙個命名空間下容器。
建議kubernetes社群可以在kubelet的啟動引數重,增加乙個開關,用來設定容器的預設時區,畢竟這個是很常見的實踐
pod preset:
static pod:
label-selectors:
閱讀原文
K8s部署prometheus監控K8s細節
prometheus 一些配置檔案可以再github上找到。部署 root kube prometheus manifests 目錄下所有檔案 部署 root kube prometheus manifests setup 目錄下所有檔案 要注意的是自己要建立乙個工作空間 如果報錯執行下面語句 部署...
k8s 多租戶 k8s 基礎介紹
備註 1 每乙個pod裡執行著乙個特殊的容器 pause容器,其他容器都是業務容器,這些業務容器共享pause容器的網路棧和volume 邏輯卷 掛載卷。因此他們之間的通訊和資料交換更為高效。2 k8s設計了pod物件,將每個服務程序包裝到相應的pod中,使其成為pod中執行的乙個容器 contai...
k8s集群部署 docker部署k8s安裝篇
1 安裝docker 緊接著配置乙個穩定 stable 的倉庫 倉庫配置會儲存到 etc yum.repos.d docker ce.repo檔案中 yum config manager add repo 更新yum安裝的相關docke軟體包 安裝docker ce yum update y yum...