物以類聚,人以羣分,朋友愈來愈少了,不知道是一種悲哀仍是一種淒涼。
java
你會給本身打什麼標籤呢?畢竟咱的豬腦子裝不下那麼多事。
node
標籤化
nginx
容器的每一個部分均可以打標籤,也就是咱們常常談到的label,例如容器container有標籤,鏡像image有標籤,網絡network有標籤,存儲卷volume有標籤,最可惡的竟然是dockerd也有標籤。
算法
爲何須要打標籤?
docker
在容器的使用中,打不打標籤其實也無所謂,不少的調度算法是根據標籤來的,例如k8s裏面的pod,打上一個標籤,從而指定pod的數量,從而實現流量的負載均衡;例如k8s裏面的node,打上不一樣的標籤,從而能夠實現根據node的selector來實現定向調度。
網絡
在使用dockerfile編譯鏡像的時候,能夠直接加入label,也能夠多個,例如根據環境分類,根據版本分類,根據區域分類,根據架構分類。(鏡像的標籤)
架構
在運行時也能直接加入label,從而能夠將容器劃分爲各類環境的,例如生產環境爲production。(容器的標籤)負載均衡
volume也是能夠打上標籤的。ide
網絡也是能夠打上標籤的。
spa
風言風語
世界上有兩種事情不能嘲笑,一個是出身,一個是夢想,除非。。。你真忍不住。
打標籤毫無心義,那爲何要瞎逼逼。由於。。。有更好玩的。
在看一眼運行時的狀態:
你會看出什麼?
容器最主要存在的目的就是提供服務,那麼在鏡像中就寫上健康檢查的一些東西,從而更容易使用容器,當你發現容器有問題,能夠直接使用label來對服務進行健康檢查。
容器的設計分爲兩方面,一個是服務的提供,涉及到健康檢查,一個則是容器裏面的服務,那麼就必然存在一個問題,容器的日誌怎麼來清理。
若是在容器裏面運行了兩個服務,一個是nginx,一個是java程序,那麼必然會涉及到兩方面的清理日誌,crond瞭解一下,nginx使用logrotate,而java使用自身的日誌切割便可。
容器是有大小的,也就是不管是計算,存儲,從而在進行設定的時候,須要對容器指定cpu和內存的大小(cpusets和memory),而對於存儲,則能夠分爲兩個部分來進行限制,一個是根目錄的大小限制,根據projectid來限制,而對於其餘的分區,則根據物理機的磁盤大小共享使用限制。
容器的監控怎麼辦,其實也是使用定時任務,寫一個腳原本監控容器裏面的服務,從而定時發送相關的數據到告警系統中,告警系統進行響應規則的定義,而後決定是否告警。
容器啓動的時候,咱們老是使用一個啓動腳本,或者叫作entrypoint,emmm,最簡單的方式莫過於一個tail -f,反正也是一直持續的在運行中,而後在中間拉起服務,例如首先拉起nginx,而後拉起java程序。
再談談容器的調度,容器是運行在物理機上的,爲了實現容災效果,從而必然須要將容器分散到docker的集羣之中,根據什麼來進行調度?這是個好問題。在虛擬機中存在將vm打散的概念,其實容器也是同樣的,也須要打散,形神俱散。
在虛擬機中存在一個overcommit也就是超賣的概念,在容器中其實同樣存在,一個56核心的cpu上能運行多少個容器?指定運行容器的core是哪些?超賣比例是多少,emmm,至關複雜,因此當出現cpu的load告警的時候,嘩啦啦,一片容器所有告警,一粒老鼠屎,壞了一鍋粥,想找出來,略難,告警聚合瞭解一下。
這個鍋我背定了,耶穌也攔不住,我說的。
技術竟然變成了溫馨區,難以想象。
你怕捱打嗎?蒙着眼睛僞裝看不見問題,心不見眼不煩。
認真而不較真也是很不錯的。