您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“如何備份Kubernetes和Docker”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“如何備份Kubernetes和Docker”這篇文章吧。
用戶的容器基礎設施需要某種類型的備份。Kubernetes和Docker在災難之后不會自己構建。用戶無需備份每個容器的運行狀態,但是需要備份用于運行和管理容器的配置。
以下是用戶需要備份的內容。
配置和所需狀態信息
Dockerfile用于構建鐿像以及這些文件的所有版本
從Dockerfile創建并用于運行每個容器的鏡像
Kubernetes etcd和其他有關集群狀態的K8s數據庫
Deployments用于描述每個部署的YAML文件
容器創建或更改的持久數據
持久卷
數據庫
Dockerfiles
Docker容器從鏡像運行,其鏡像從Dockerfiles構建。正確的Docker配置將首先使用某種存儲庫(例如GitHub)作為所有Dockerfile的版本控制系統。不要使用從臨時Dockerfile構建的臨時鏡像創建臨時容器。所有Dockerfile都應存儲在存儲庫中,如果當前版本存在問題,該存儲庫將允許用戶提取這個Dockerfile的歷史版本。
用戶還應該具有存儲與每個K8s部署關聯的YAML文件的某種存儲庫,這些是可以從版本控制系統中受益的文本文件。
然后需要備份這些存儲庫。GitHub是比較受歡迎的存儲庫之一,它提供了許多備份存儲庫的方法。有多種 腳本使用提供的API來下載存儲庫的當前備份。用戶還可以使用第三方商業工具來備份GitHub或用戶正在使用的任何存儲庫。
如果沒有遵循上述建議,而是根據不再具有Dockerfile的鏡像運行容器,則可以使用Docker 鏡像歷史 命令或dfimage之類的工具從當前鏡像創建Dockerfile。將這些Dockerfile放入存儲庫中,然后開始備份。但是不要陷入這種情況,應該始終存儲和備份用于創建環境的Dockerfile和YAML文件。
Docker鏡像
用于運行容器的當前鏡像也應存儲在存儲庫中(當然,如果用戶正在Kubernetes中運行Docker鏡像,那么已經在這樣做了)。用戶可以使用私有存儲庫(例如Docker注冊表)或公共存儲庫(例如Dockerhub)。云計算提供商還可以為用戶提供私人存儲庫來存儲鏡像。然后應備份該回購的內容。諸如“Dockerhub備份”之類的簡單搜索就可以產生令人驚訝的眾多選擇。
如果用戶沒有用于運行容器的當前鏡像,則可以使用docker commit 命令創建一個。然后,使用Docker鏡像歷史記錄或工具dfimage從該鏡像創建Dockerfile。
Kubernetes etcd
Kubernetes etcd數據庫非常重要,應使用etcdctl snapshot save db命令進行備份。這將在當前目錄中創建文件snapshot.db。然后應將該文件備份到外部存儲。
如果使用的是商業備份軟件,則可以在創建snapshot.db的目錄備份之前輕松觸發etcdctl snapshot save命令。這是將備份集成到商業備份環境中的一種方法。
持久卷
容器可以通過多種方式訪問持久性存儲,而持久性存儲可用于存儲或創建數據。傳統的Docker卷位于Docker配置的子目錄中。綁定掛載只是Docker主機上安裝在容器內(使用bind mount命令)的任何目錄。出于多種原因,Docker社區首先選擇傳統卷,但出于備份目的,傳統卷和綁定安裝實質上是相同的。用戶還可以將網絡文件系統(NFS)目錄或對象從對象存儲系統作為卷裝入容器中。
用于備份持久卷的方法將基于用于容器的上述選項。但是,它們都會有相同的問題:如果數據正在更改,則需要處理該問題才能獲得一致的備份。
一種方法是關閉使用該特定卷的任何容器。這種做法雖然有些過時,但這是容器世界所面臨的挑戰之一,因為在容器中放置備份代理的典型方法并不是一種很好的選擇。一旦關閉,便可以備份該卷。如果它是傳統的Docker卷,則可以通過將其掛載到另一個在備份時不會更改其數據的容器中進行備份,然后在綁定安裝的卷中創建該卷的tar鏡像,然后使用備份系統使用的任何方法進行備份。
但是,這在Kubernetes中確實很難做到。這是有狀態信息最好存儲在數據庫而不是文件系統中的原因之一。而在設計K8s基礎設施時,需要考慮此問題。
另外,如果用戶使用綁定安裝目錄、NFS安裝文件系統或對象存儲系統作為持久性存儲系統,則可以使用優秀的方法來備份該存儲系統。這可能是快照,然后是復制,或者只是在該系統上運行商業備份軟件。與相同卷的典型文件級備份相比,這些方法可能提供更加一致的備份。
數據庫
下一個備份挑戰是容器使用數據庫存儲其數據。這些數據庫需要以保證其完整性的方式進行備份。根據數據庫的不同,上述方法可能會起作用:關閉訪問數據庫的容器,然后備份存儲其文件的目錄。但是,這種方法所需的停機時間可能不合適。
另一種方法是直接連接到數據庫引擎本身,并要求它運行到文件的備份,然后可以對其進行備份。如果數據庫在容器內運行,則首先需要使用綁定安裝來附加一個可以備份的卷,因此其備份可以存在于容器外部。然后運行數據庫使用的命令(例如mysqldump)創建備份。然后確保使用備份系統創建的文件。
如果用戶不知道哪些容器正在使用什么樣的存儲或什么樣的數據庫怎么辦?一種解決方案可能是使用docker ps命令列出正在運行的容器,然后使用docker inspect命令顯示每個容器的配置。有一個名為“掛載”的部分,它將告訴用戶將哪些卷掛載在何處。任何綁定安裝也將在用戶提交給Kubernetes的YAML文件中指定。
商業備份解決方案
有各種各樣的商業備份解決方案可以保護上述部分或全部數據。以下是一個非常簡短的摘要:
Commvault的虛擬服務器代理可以充當備份容器及其鏡像的代理。
Cohenity為K8s命名空間提供數據保護。
Heptio(現為VMware公司)提供為K8s設計的Velero備份。
Contino、Datacore和Portworx提供專為K8和容器設計的存儲,并且還支持備份該信息。
鑒于K8和Docker的配置方式多種多樣,很難涵蓋所有內容。但是希望提供一些思考的機會,或者可以幫助用戶備份一些應該但尚未備份的東西。
以上是“如何備份Kubernetes和Docker”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。