如果是公網(wǎng)的Kubernetres集群可以省去不少煩惱诽偷,一般云供應(yīng)商都會有完整的配套服務(wù)坤学,包括存儲和網(wǎng)絡(luò),但如果是自行搭建的集群就需要自行解決這兩部分問題报慕。
先說一下存儲的選擇深浮,一般的話有一個分布式存儲+Localstorage基本就夠了。
分布式存儲的話有許多開源方案的可選項眠冈,例如Ceph飞苇、GlusterFS、Longhorn等蜗顽,使用分布式存儲的話一定要記得要有一個時鐘服務(wù)器布卡,有好幾次出問題都是因為服務(wù)器時間不同步導(dǎo)致的。
需要一個本地存儲主要是考慮到在容器里面操作文件確實不方便雇盖,直接在hostpath里面操作的話可以省心不少忿等。
下面說一下我選的存儲,分布式存儲用的是longhorn崔挖,本地存儲用的是openebs_hostpath贸街。之前分布式存儲也試過用ceph,但總覺得重了點虚汛。使用longhorn的主要原因一方面在于它不會過多的修改我服務(wù)器上的設(shè)置另一方面還在于它配置簡單而且還自帶一個簡潔的界面匾浪,并且可以很輕松的把數(shù)據(jù)備份到s3中。
openebs其實是能支持多種的存儲實現(xiàn)卷哩,但是我只使用了他的hostpath存儲蛋辈,主要我也只想要一個hostpath的storageclass并且具備完整的備份和還原方案,可以讓我安心存放數(shù)據(jù)就可以了将谊。配合minio-operator和velero可以便捷的備份和還原數(shù)據(jù)冷溶,當(dāng)然rke也有自帶的hostpath storageclass,功能都差不多尊浓,具體選哪個都可以逞频。還有安裝velero的時候一定記得要設(shè)置--use-restic析珊,不然會創(chuàng)建了備份卻不會執(zhí)行的問題拳魁。
網(wǎng)絡(luò)方面主要需要解決兩個問題
1、LoadBalance
2享潜、DNS
一般LB都是公有云供應(yīng)商才提供瓦堵,自己搭建的話基本就只能選MetaLB了基协,它支持layer2模式和bgp模式。
layer2模式是功能不完整的負(fù)載均衡菇用,它本質(zhì)是沒有負(fù)載均衡的功能的澜驮,只是把一個IP的流量導(dǎo)入到一個節(jié)點,然后通過kube-proxy導(dǎo)入到集群中具體的服務(wù)當(dāng)中惋鸥。當(dāng)節(jié)點出現(xiàn)故障的時候流量會自動遷移到正常運行的節(jié)點中杂穷,從而實現(xiàn)故障轉(zhuǎn)移悍缠。
bgp模式則可以實現(xiàn)真正的負(fù)載均衡功能,可以將流量導(dǎo)入到所有的節(jié)點耐量,然后再由kube-proxy導(dǎo)入到集群之中飞蚓。
dns的選擇比較多,可以選擇adgard或者DNSmasq等拴鸵,選擇很多玷坠,有個最基本的dns功能就可以,我一般會把dns直接掛到k8s集群里面劲藐,然后通過MetaLB把123端口暴露出去八堡,這樣即使容器掛了也能快速重啟,一勞永逸的解決dns服務(wù)器問題聘芜。
解決完存儲和網(wǎng)絡(luò)兄渺,基礎(chǔ)設(shè)施基本上就完整了,這一套下來已經(jīng)可以搭建一個在生產(chǎn)環(huán)境上運行的高可用小型k8s集群了汰现。