pause容器的作用
- pause容器:只要是有容器啓動,pause就會啓動。
- pod內的其他容器會共用pause容器的網絡棧和存儲卷。
- 容器是沒有自己的IP地址的,都共用pause容器的。
- 要保證pod內的其他容器的端口不能衝突,彼此都是通過localhost就可以訪問。如果端口衝突就會啓動不了或是無限重啓。
pod控制器類型
RC RS Deployment
- 官方建議用ReplicaSet替代ReplicationController。RS支持集合式的selector,可以根據label和version來對pod進行操作。
- 建議使用Deployment來自動管理RS。Deployment支持滾動更新(灰度發佈),比如要發佈一個新的版本,可以先創建出新版本的pod,然後將舊版本的pod依次刪除,從而實現滾動更新,RS不支持這種滾動更新操作。
- Deployment不支持pod的創建,是通過RS來實現pod的創建的。比如:實現版本的滾動更新過程,會通過創建一個新的RS來創建出新版本的pod,同時將舊的RS管理的舊版本的pod依次刪除。
- 同時Deployment可以支持回滾。原因就是舊的RS並不會被刪除,而是被停用,回滾時會將舊版本的RS重新啓用,從而達到回滾的目的。
HPA
- 動態擴容
- 根據CPU利用率來擴容,≤max定義的最大數量。
- 一旦CPU利用率不足,就會刪除pod,但最終剩餘的pod數量不會低於min定義的數量。
StatefulSet
- mysql,mongodb都要實現數據的實時更新和存儲,將其抽出集羣再放回來就沒法正常工作了,這些就是典型的有狀態服務。
- StatefulSet能夠實現pod重新調度後還是能基於PVC訪問到相同的持久化數據,並且數據還不會丟失。
- 有序部署:比如先啓動Nginx,再啓動tomcat,最後啓動MySQL就會報錯,StatefulSet可以實現有序啓動,mysql–>tomcat–>nginx
截止到目前,MySQL在k8s環境下還是不能跟傳統環境下相比擬,還是有缺憾的,但是StatefulSet是一種很好的思想。