天天看點

K8S之StatefulSet控制器

無狀态應用程序用戶端的每次連接配接均可獨立地處理,一次請求和響應即構成一個完整的事務,它們不受已完成的連接配接或現有其他連接配接的影響,且意外中斷或關閉時僅需要重建立立連接配接即可,因而,無狀态應用的Pod對象可随時由其他由同一模闆建立的Pod平滑替代,這也正是Deployment控制器編排應用的方式。

在雲原生應用的體系裡有兩組常用的近義詞:第一組是無狀态(stateless)、牲畜(cattle)、無名(nameless)和可丢棄(disposable),它們都可用于表述無狀态應用;另一組是有狀态(stateful)、寵物(pet)、具名(having name)和不可丢棄(non-disposable),它們都可用于表示有狀态應用。

Kubernetes系統使用專用的StatefulSet控制器編排有狀态應用。StatefulSet表示一組具有唯一持久身份和穩定主機名的Pod對象,任何指定該類型Pod的狀态資訊和其他彈性資料都存放在與該StatefulSet相關聯的永久性磁盤存儲空間中。StatefulSet旨在部署有狀态應用和叢集化應用,這些應用會将資料儲存到永久性存儲空間,它适合部署Kafka、MySQL、Redis、ZooKeeper以及其他需要唯一持久身份和穩定主機名的應用。

一個典型的、完整可用的StatefulSet資源通常由兩個元件構成:Headless Service和StatefulSet資源。Headless Service用于為各Pod資源固定、唯一的辨別符生成可解析的DNS資源記錄,StatefulSet用于編排Pod對象,并借助volumeClaimTemplate以靜态或動态的PV供給方式為各Pod資源提供專有且固定的存儲資源。

繼續閱讀