StatefulSets在v1.5時(shí)還是個(gè)beta特性,它取代了v1.4的PetSets特性。PetSets的用戶可以參考v1.5的升級(jí)指導(dǎo),將正在運(yùn)行的PeetSets升級(jí)到StatefulSets。
StatefulSet是一個(gè)給Pod提供唯一標(biāo)志的控制器,它可以保證部署和擴(kuò)展的順序。
使用StatefulSet
當(dāng)應(yīng)用有以下任意要求時(shí),StatefulSet的價(jià)值就體現(xiàn)出來了。
● 穩(wěn)定的、唯一的網(wǎng)絡(luò)標(biāo)識(shí)。
● 穩(wěn)定的、持久化的存儲(chǔ)。
● 有序的、優(yōu)雅的部署和擴(kuò)展。
● 有序的、優(yōu)雅的刪除和停止。
上面提到的點(diǎn)中,在Pod調(diào)度時(shí),穩(wěn)定性和持久化是同一個(gè)意思。如果一個(gè)應(yīng)用不需要任何穩(wěn)定的標(biāo)識(shí)或順序的部署、刪除和擴(kuò)展,那么你應(yīng)該使用提供無狀態(tài)備份的控制器來部署你的應(yīng)用。諸如Deployment或者ReplicaSet可能更適合你的無狀態(tài)服務(wù)需求。
限制
● StatefulSet還是beta版本,Kubernetes v1.5之前不可用。
● 和所有的alpha/beta資源一樣,可以將--runtime-config選項(xiàng)傳遞給apiserver,來禁止StatefulSet。
● 給定Pod的存儲(chǔ)必須是:基于請(qǐng)求存儲(chǔ)等級(jí)(Storage Class)的PersistentVolume Provisioner,或者是由管理員預(yù)先配置。
● 刪除和(或)減少StatefulSet副本,不會(huì)刪除StatefulSet相關(guān)的卷。這樣做是為了保證數(shù)據(jù)安全,比自動(dòng)的清除StatefulSet相關(guān)資源更有價(jià)值。
● 當(dāng)前StatefulSet需要Headless服務(wù)來負(fù)責(zé)Pod的網(wǎng)絡(luò)一致性。你需要?jiǎng)?chuàng)建該服務(wù)。
● 當(dāng)前,