我目前正在我自己的家庭服務器上運行 Kubernetes 集群(在 proxmox ct 中,有點難以開始作業,因為我也在使用 zfs,但它現在運行),設定如下:
- lb01:haproxy 和 keepalived
- lb02: haproxy & keepalived
- etcd01:etcd 節點 1
- etcd02:etcd 節點 2
- etcd03:etcd 節點 3
- master-01:服務器模式下的 k3s 帶有不接受任何作業的污點
- master-02:同上,只是加入了master-01的token
- master-03:與master-02相同
- worker-01 - worker-03:k3s 代理
如果我理解正確的話,k3s 提供了 flannel 作為預安裝的 CNI,以及 traefik 作為入口控制器。
我已經在我的集群和 longhorn 上設定了牧場主,這些卷只是安裝在代理內部的 zfs 卷,并且由于它們不在不同的硬碟上,所以我將副本設定為 1。我有一個朋友運行相同設定(就在昨天,我們將它們設定在一起)并且我們計劃通過 vpn 隧道加入我們的網路,然后為彼此提供存盤節點作為異地備份。
到目前為止,我希望一切都正確。
現在我的問題是:我有一個靜態 ip @home 和一個域,我已經將該域設定為我的靜態 ip
類似的東西:(不知道dns條目實際上是如何撰寫的,只是從我的頭頂供您參考,條目運行良好。)
一個example.com。[[我的IP]]
CNAME *.example.com。例子.com
我目前已經為埠 80 和 443 對我的一個主節點進行了埠轉發,但我不太確定您將如何實際配置它,并且我的牧場主在訪問全域設定后拋出了 503,但是我沒有改變任何東西。
所以現在我的問題是:如何實際配置埠轉發,據我所知,k3s 預先安裝了一個負載均衡器,但是如何為 ha 配置這些埠轉發?從理論上講,它指向的一個主節點可能會停止作業,然后從外部無法再訪問所有服務。
uj5u.com熱心網友回復:
假設您的應用程式在埠 80 和埠 443 上運行,您的入口應該為您提供具有外部 ip 的服務,并且您將指向您的 dns。閱讀下文了解更多資訊。
看來你不是菜鳥!你的集群設定有很多事情要做。您要回答的問題有點復雜,我將不得不對您的設定做出一些假設,但會盡力為您提供至少一些初步資訊。
本教程包含大量重要資訊,可以幫助您完成您正在做的事情。他們使用 kubeadm 而不是 k3s,如果需要,可以跳過該部分并繼續使用 k3s。 https://www.debontonline.com/p/kubernetes.html
如果您自己設定和安裝 etcd,則不需要這樣做,k3s 將為您創建一個在集群上的 pod 內運行的 etcd 集群。
負載平衡您的主節點
haproxy keepalived 節點將被配置為指向您的主節點在埠 6443 (TCP) 的 ip,keepalived 將為您提供一個虛擬 ip,您將配置您的 kubeconfig(您從 k3s 獲得)與該 ip 對話。在您的路由器上,您將要保留一個 ip(確保不要將其分配給任何計算機)。
這是一個很好的視頻,它解釋了如何使用 nodejs 服務器執行此操作,但您的主節點的概念是相同的: https ://www.youtube.com/watch?v=NizRDkTvxZo
負載平衡集群中運行的應用程式
使用 K8s 服務在此處閱讀更多相關資訊:https ://kubernetes.io/docs/concepts/services-networking/service/
本質上你需要一個外部IP,我更喜歡用金屬磅來做這個。
metal lb 為您提供具有外部 IP 的負載均衡器型別的服務
創建初始主節點時將此標志添加到 k3s: https ://metallb.universe.tf/configuration/k3s/
配置metallb https://metallb.universe.tf/configuration/#layer-2-configuration
您將希望在路由器上保留更多 ip,并將它們放在下面 yaml 中的地址部分下。在此示例中,您將看到 192.168.1.240 到 192.168.1.250 范圍內的 11 個 ip
將此創建為檔案示例 metallb-cm.yaml
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 192.168.1.240-192.168.1.250
kubectl apply -f metallb-cm.yaml
使用這些 yaml 檔案安裝:
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/metallb.yaml
來源 - https://metallb.universe.tf/installation/#installation-by-manifest
入口
將需要負載均衡器型別的服務,使用其外部 ip 作為外部 ip
kubectl get service -A - 尋找你的入口服務,看看它是否有外部 ip 并且沒有說掛起
我會盡力回答您的任何后續問題。祝你好運!
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/460114.html
