五月婷婷丁香性爱|j久久一级免费片|久久美女福利视频|中文观看在线观看|加勒比四区三区二|亚洲裸女视频网站|超碰97AV在线69网站免费观看|有码在线免费视频|久久青青日本视频|亚洲国产AAAA

KubeEdge EdgeMesh 高可用架構(gòu)詳解

來源:容器魔方

EdgeMesh項目解決了邊緣計算場景下復(fù)雜網(wǎng)絡(luò)的通信問題,中心化的edgemesh-server作為一個中繼組件,協(xié)助其他節(jié)點進行網(wǎng)絡(luò)穿透和流量中轉(zhuǎn)。之前的edgemesh-server本身不具備高可用特性,會遇到性能瓶頸與單點故障問題,目前EdgeMesh v1.12版本的高可用架構(gòu)不僅優(yōu)化了上述問題,也帶來了更加穩(wěn)定的系統(tǒng)運行時,還覆蓋了多種邊緣網(wǎng)絡(luò)的痛點場景,如分布式動態(tài)中繼連接場景和私有局域網(wǎng)的網(wǎng)絡(luò)自治場景等。此外,EdgeMesh 在v1.12中還帶來了基于PSK密碼的安全連接、對接HTTPS的邊緣Kube API Endpoint等特性和能力,整體提升了EdgeMesh的性能、穩(wěn)定性與安全性。

作為開源之夏課題【EdgeMesh:高可用架構(gòu)的設(shè)計與實現(xiàn) 】的實踐者,這是我第一次接觸開源社區(qū)相關(guān)的項目,非常有幸能深入地參與到KubeEdge開源項目的開發(fā)之中,也非常開心能夠參與EdgeMesh高可用特性的方案設(shè)計與代碼開發(fā)。我將通過高可用特性應(yīng)用場景、高可用特性使用手冊、課題總結(jié)、未來展望等四個部分的內(nèi)容來向大家介紹新版本EdgeMesh的高可用架構(gòu)以及我個人在KubeEdge社區(qū)的成長經(jīng)歷。

一、高可用特性應(yīng)用場景

一、高可用特性應(yīng)用場景

活動規(guī)則

活動對象:華為云電銷客戶及渠道伙伴客戶可參與消費滿送活動,其他客戶參與前請咨詢客戶經(jīng)理

活動時間: 2020年8月12日-2020年9月11日

高可用架構(gòu)的主要目的是為了保障系統(tǒng)的穩(wěn)定性以及提升系統(tǒng)的整體性能,此次EdgeMesh的高可用特性在原有功能的基礎(chǔ)上還覆蓋了多種邊緣網(wǎng)絡(luò)的痛點場景。以下為EdgeMesh高可用特性在邊緣計算場景下的具體應(yīng)用場景,用戶可以依據(jù)這些用例來理解本特性能提供的服務(wù)。

1.1 單點故障以及高負載場景

如圖所示,當單個節(jié)點承擔中繼功能時,所有其他的節(jié)點都需要連接該節(jié)點才能夠獲取網(wǎng)絡(luò)連接的服務(wù)。在這樣的場景當中,單個節(jié)點的負載就會相應(yīng)地增加,過高的通信負載或者是密集的連接數(shù)量,在諸多情況下是限制服務(wù)性能的主要原因,同時如果該節(jié)點出現(xiàn)故障則會導(dǎo)致中繼連接斷開,使得中繼連接功能暫時性停滯。

為了能夠優(yōu)化這部分的問題,覆蓋高負載訪問場景,EdgeMesh 新版本考量使用分布式網(wǎng)絡(luò)連接的思想,通過給予每一個節(jié)點能夠提供中繼功能的結(jié)構(gòu),使每一個節(jié)點都具有為其他節(jié)點提供中繼的能力。

針對這部分場景需求,用戶可以在集群初始化時指定多個特定的節(jié)點作為默認的中繼節(jié)點,依據(jù)自身情況調(diào)節(jié)集群內(nèi)負載的分配,EdgeMesh將會在提供中繼服務(wù)的時候,優(yōu)先嘗試連接這些節(jié)點;如果不做設(shè)置,EdgeMesh也會尋找合適的節(jié)點執(zhí)行中繼功能,分散減輕單個節(jié)點的中繼訪問負擔。

1.2 分布式動態(tài)中繼連接場景

如圖所示,位于上海的邊緣應(yīng)用A和B通過中繼互相通信,需要把流量轉(zhuǎn)發(fā)到處于北京數(shù)據(jù)中心里的relay節(jié)點,數(shù)據(jù)傳輸在遠距離的兩地之間繞了一圈,導(dǎo)致服務(wù)時延較長,用戶體驗較差。非常遺憾的是,邊緣計算場景下集群規(guī)模經(jīng)常橫跨多地或者是多區(qū)域部署,如果中繼節(jié)點距離請求服務(wù)的節(jié)點非常遙遠,就會造成極大的延遲,影響用戶的體驗。這個情況尤其是在中繼連接對象與自己不在相鄰地理位置下的時候,體現(xiàn)得尤為明顯。

為了能夠優(yōu)化這部分的體驗,覆蓋遠距離服務(wù)場景,EdgeMesh新版本考量就近中繼的原則,用戶可以根據(jù)集群節(jié)點的地理位置分布情況,支持選擇一個地理位置適中的relay節(jié)點。當應(yīng)用需要中繼連接服務(wù)的時候,edgemesh-agent就會動態(tài)優(yōu)先選擇就近的relay節(jié)點作為中繼來提供網(wǎng)絡(luò)連接服務(wù),以此縮短中繼服務(wù)的時延。

1.3 私有局域網(wǎng)網(wǎng)絡(luò)自治場景

如圖所示,在老版本的EdgeMesh的代碼實現(xiàn)中,edgemesh-agent必須保持與云上中繼服務(wù)edgemesh-server的連接,當局域網(wǎng)內(nèi)的節(jié)點離線后,導(dǎo)致edgemesh-agent斷開與中繼節(jié)點的連接,斷連節(jié)點上的服務(wù)就徹底失去流量代理的能力了,這在部分私有局域網(wǎng)網(wǎng)絡(luò)內(nèi)或者是網(wǎng)絡(luò)情況波動較大的環(huán)境當中會給用戶造成較大的困擾。

為了能夠優(yōu)化這部分的問題,提高網(wǎng)絡(luò)應(yīng)用連接的穩(wěn)定性,EdgeMesh 新版本考量了分布式管理及網(wǎng)絡(luò)自治的想法,讓EdgeMesh能夠通過mDNS機制保障私有局域網(wǎng)網(wǎng)絡(luò)內(nèi)或者是離線局域網(wǎng)內(nèi)節(jié)點之間的相互發(fā)現(xiàn)和轉(zhuǎn)發(fā)流量,維持應(yīng)用服務(wù)的正常運轉(zhuǎn)。

針對這部分場景需求,用戶并不需要再單獨設(shè)置任何的參數(shù)來啟用此功能,該功能一般面對兩種情形進行服務(wù)維持:

a. 在剛部署EdgeMesh的時候,部分節(jié)點就已經(jīng)在私有局域網(wǎng)下,那這個局域網(wǎng)內(nèi)的節(jié)點依舊可以通過EdgeMesh來相互之間訪問和轉(zhuǎn)發(fā)流量。

b. 在集群正常運轉(zhuǎn)過程當中,部分節(jié)點離線后,這部分節(jié)點依舊可以通過EdgeMesh來維持相互之間的網(wǎng)絡(luò)連接和流量轉(zhuǎn)發(fā)。

二、高可用特性使用手冊

二、高可用特性使用手冊

活動規(guī)則

活動對象:華為云電銷客戶及渠道伙伴客戶可參與消費滿送活動,其他客戶參與前請咨詢客戶經(jīng)理

活動時間: 2020年8月12日-2020年9月11日

2.1 基本原理介紹

在EdgeMesh v1.12版本中,社區(qū)將edgemesh-server的能力合并到了edgemesh-agent的EdgeTunnel模塊當中,使得具備中繼能力的edgemesh-agent能夠自動成為中繼服務(wù)器,為其他節(jié)點提供內(nèi)網(wǎng)穿透和中繼轉(zhuǎn)發(fā)的功能,新老系統(tǒng)架構(gòu)對比如下:

EdgeMesh高可用特性的主要實現(xiàn)原理是:當集群內(nèi)有節(jié)點具備中繼能力時,其上的edgemesh-agent會承擔起中繼節(jié)點的角色,來為其他節(jié)點提供內(nèi)網(wǎng)穿透和流量中繼轉(zhuǎn)發(fā)的服務(wù)。在集群初始化或者是有節(jié)點新加入集群時,EdgeMesh系統(tǒng)會基于mDNS機制發(fā)現(xiàn)局域網(wǎng)內(nèi)的節(jié)點并作記錄,同時DHT機制會發(fā)現(xiàn)跨局域網(wǎng)的其他節(jié)點并對其發(fā)起連接建立請求,這樣當集群內(nèi)跨局域網(wǎng)的兩節(jié)點需要連接的時候,中繼節(jié)點就可以為它們提供流量中繼和協(xié)助內(nèi)網(wǎng)穿透的服務(wù)。

EdgeMesh高可用特性的核心功能如上圖所示,集群當中A節(jié)點與B節(jié)點通過R1中繼節(jié)點連接來提供服務(wù),當R1節(jié)點無法提供中繼服務(wù)的時候,A、B節(jié)點可以通過高可用特性自動切換到中繼節(jié)點R2并重新建立連接。在這個過程當中用戶幾乎感受不到網(wǎng)絡(luò)連接的變化。

接下來我將簡單介紹不同情況下使用EdgeMesh高可用特性的方式。

2.2 部署時啟用高可用特性

您可以通過以下配置方法,在安裝EdgeMesh時啟用高可用特性,配置過程當中您可以依據(jù)集群連接的需求配置中繼節(jié)點的地址:

# 啟用高可用特性

helm install edgemesh --namespace kubeedge \

--set agent.relayNodes[0].nodeName=k8s-master,agent.relayNodes[0].advertiseAddress="{1.1.1.1}" \

https://raw.githubusercontent.com/kubeedge/edgemesh/main/build/helm/edgemesh.tgz

·relayNodes 參數(shù)是中繼節(jié)點表,類型為 []relayNode,您可以通過配置它來指定集群中應(yīng)該承擔中繼節(jié)點角色的edgemesh-agent。

·relayNode.nodeName 參數(shù)使用節(jié)點名的方式來指定relay節(jié)點,這必須與K8s的節(jié)點名相同,您可以通過 kubectl get nodes 查看您的k8s節(jié)點名。

·relayNode.advertiseAddress 參數(shù)用于指定relay節(jié)點的地址,其應(yīng)當與節(jié)點在K8s集群當中的節(jié)點地址一致, 如果您購買了公有云的公網(wǎng)IP并掛載到此relay節(jié)點上,則 relayNode.advertiseAddress 參數(shù)最好應(yīng)該填寫該公網(wǎng)IP地址。


需要注意的是:設(shè)置中繼節(jié)點的數(shù)量由 relayNodes[num] 中索引值 num 來規(guī)定,num 取值從 0 開始,relayNodes[0] 表示中繼節(jié)點1。

更多的安裝配置信息請詳見:

helm安裝:

https://edgemesh.netlify.app/zh/guide/#helm-安裝

手動安裝:

https://edgemesh.netlify.app/zh/guide/

2.3 運行時添加新中繼節(jié)點

如果您在使用EdgeMesh高可用特性時,想要在集群當中添加新的中繼節(jié)點,可以通過修改 edgemesh-agent-cfg 當中的 relayNodes 參數(shù)來達到目的,以下為具體修改配置的方式:

之后您可以使用 kubeadm join 或者 keadm join 添加加新的中繼節(jié)點R2,接著通過以下操作查看添加的中繼節(jié)點是否正常運行:

# 查看節(jié)點是否正常添加

kubectl get nodes

NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane,master 249d v1.21.8
k8s-node1 Ready <none> 249d v1.21.8
ke-edge1 Ready agent,edge 234d v1.19.3-kubeedge-v1.8.2
ke-edge2 Ready agent,edge 5d v1.19.3-kubeedge-v1.8.2
R2 Ready agent,edge 1d v1.19.3-kubeedge-v1.8.2

# 查看中繼節(jié)點的 edgemesh-agent 是否正常運行

kubectl get all -n kubeedge -o wide

NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/edgemesh-agent-59fzk  1/1   Running 0 10h  192.168.5.187 ke-edge1  <none> <none>
pod/edgemesh-agent-hfsmz 1/1   Running 1 10h 192.168.0.229 k8s-master <none> <none>
pod/edgemesh-agent-tvhks 1/1   Running 0 10h  192.168.0.71 k8s-node1 <none> <none>
pod/edgemesh-agent-tzntc 1/1   Running 0 10h  192.168.5.121 ke-edge2 <none> <none>
pod/edgemesh-agent-kasju 1/1   Running 0 10h  192.168.5.103 R2 <none> <none> <------ new edgemesh-agent running on R2

 

2.4 運行時轉(zhuǎn)化節(jié)點成中繼

如果您在集群運行過程當中,想要將一些已有節(jié)點轉(zhuǎn)化為中繼節(jié)點,只需要修改 edgemesh-agent-cfg 當中的 relayNodes 參數(shù)即可, 以下為具體修改配置的方式:

修改完此配置后,需要重啟R2節(jié)點(轉(zhuǎn)化節(jié)點)上的edgemesh-agent。在這個過程當中,假設(shè)新設(shè)置的節(jié)點有中繼能力,那么在重新Tunnel模塊運行時會執(zhí)行以下邏輯:

1.edgemesh-agent會讀取configmap里的中繼節(jié)點表relayNodes,檢查自己是否被用戶設(shè)置為中繼節(jié)點。如果在relayNodes中讀取到R2存在,則表明R2被設(shè)置為默認初始的中繼節(jié)點。

2. R2節(jié)點上的edgemesh-agent會嘗試成為relay ,啟動對應(yīng)的中繼功能。

3. 如果發(fā)現(xiàn)該節(jié)點沒有中繼能力(一般掛載了公網(wǎng)IP的節(jié)點會具備中繼能力),那么該節(jié)點還是不能承擔起中繼節(jié)點的角色,造成這個結(jié)果的原因可能是該節(jié)點的advertiseAddress并不能讓所有節(jié)點訪問。

 三、課題總結(jié) 

 三、課題總結(jié) 

活動規(guī)則

活動對象:華為云電銷客戶及渠道伙伴客戶可參與消費滿送活動,其他客戶參與前請咨詢客戶經(jīng)理

活動時間: 2020年8月12日-2020年9月11日

以上就是EdgeMesh高可用架構(gòu)的原理以及應(yīng)用場景的介紹了,此次課題結(jié)項完成了開源之夏的所有產(chǎn)出要求,也同時作為KubeEdge v1.12新版本的一個重要特性發(fā)布,非常高興能夠為開源社區(qū)及KubeEdge的開發(fā)和完善做出貢獻。

于我個人而言,當初是在測試5G邊緣架構(gòu)時認識到了KubeEdge, 并為其設(shè)計以及功能設(shè)想所折服,這與我理想的邊緣網(wǎng)絡(luò)智能架構(gòu)有諸多的相似之處,也成為我參與開源之夏的契機。

在項目開發(fā)當中,從功能設(shè)計、實現(xiàn)方案到代碼編寫,各類問題層出不窮,主要是校內(nèi)知識和研發(fā)方式與開源社區(qū)及工業(yè)環(huán)境脫節(jié)導(dǎo)致的問題,不過這些困難都在老師社區(qū)的幫助和自身努力之下逐一解決了,也是在這個過程當中領(lǐng)我體會到了開源工作中各社區(qū)之間相互借鑒推進,各個開發(fā)者之間相互幫助交流的強大,也更加理解到優(yōu)秀的社區(qū)環(huán)境以及高效的社區(qū)例會機制能夠快速同步各處開發(fā)進度,修正不合理的開發(fā)方向和想法,集思廣益的同時步步為營,這樣讓我更加向往社區(qū)的工作了。

四、未來展望 

四、未來展望 

活動規(guī)則

活動對象:華為云電銷客戶及渠道伙伴客戶可參與消費滿送活動,其他客戶參與前請咨詢客戶經(jīng)理

活動時間: 2020年8月12日-2020年9月11日

就EdgeMesh發(fā)展設(shè)想而言,此次開發(fā)已經(jīng)實現(xiàn)了當初設(shè)想的目的,但在參與社區(qū)例會,了解整個開源項目的發(fā)展之中,許多的想法和創(chuàng)新也隨之涌現(xiàn),是否能夠引入ebpf、Webassembly等新興技術(shù)來優(yōu)化甚至是革新EdgeMesh提供的網(wǎng)絡(luò)服務(wù);是否可以將人工智能引入到邊緣集群的管理和自治當中,讓人工智能作為基礎(chǔ)建設(shè)的一部分,這些設(shè)想都讓人熱血沸騰,忍不住想要參與到社區(qū)的開發(fā)和研究當中。

就我個人而言,未來也會更多地參與到社區(qū)的開發(fā)和研究當中,一方面我原本所期盼的將科研成果轉(zhuǎn)化為產(chǎn)業(yè)價值的目標,已通過開源之夏初見眉目;另一方面,諸多的設(shè)想和創(chuàng)新還未能夠與大家交流,還未能夠得到實踐和測試;這些都不斷鼓勵著我更加深入到社區(qū)項目的研發(fā)當中。

 最后非常感謝王杰章老師的悉心教導(dǎo),可以說老師的耐心溝通和鼓勵指導(dǎo)是項目能夠成功推進的重要動力;同時還要感謝開源之夏能夠給予我們機會參與到實際的開發(fā)當中,走出了高校學(xué)術(shù)的樓閣,盡管此次開源之夏已經(jīng)結(jié)束,但我們的開源之旅卻正要開始。

本文作者:

南開大學(xué) 達益鑫 2374087322@qq.com  

附:KubeEdge社區(qū)貢獻和技術(shù)交流地址

KubeEdge網(wǎng)站 : https://kubeedge.io

GitHub地址 : https://github.com/kubeedge/kubeedge

Slack地址 :https://kubeedge.slack.com

郵件列表 : https://groups.google.com/forum/#!forum/kubeedge

每周社區(qū)例會 :https://zoom.us/j/4167237304

Twitter : https://twitter.com/KubeEdge

文檔地址 : https://docs.kubeedge.io/en/latest/