<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          保姆級教程!使用k3d實(shí)現(xiàn)K3s高可用!

          共 9088字,需瀏覽 19分鐘

           ·

          2021-01-23 00:46

          你是否曾經(jīng)想嘗試使用K3s的高可用模式?但是苦于沒有3個(gè)“備用節(jié)點(diǎn)”,或者沒有設(shè)置相同數(shù)量的虛擬機(jī)所需的時(shí)間?那么k3d這個(gè)方案也許你十分需要噢!


          如果你對k3d尚不了解,它的名字或許可以給你一個(gè)了解它的切入口:K3s in Docker。k3d是一個(gè)輕量級封裝程序,用于在Docker中運(yùn)行k3s。借助k3d,可以輕松在Docker內(nèi)創(chuàng)建單節(jié)點(diǎn)或多節(jié)點(diǎn)的k3s集群,用于Kubernetes上的本地開發(fā)。


          K3d允許你在短時(shí)間內(nèi)啟動k3s集群。此外,你可以快速學(xué)會其少量但十分有用的命令。K3d運(yùn)行在Docker內(nèi),這意味著你可以擴(kuò)展或減少節(jié)點(diǎn)而不需要進(jìn)行多余的設(shè)置。在本文中,我們將介紹如何使用k3d設(shè)置單節(jié)點(diǎn)K3s集群以及如何使用k3d在高可用模式下設(shè)置k3s。


          本文的兩個(gè)主要目的是介紹k3d作為部署K3s集群的工具,以及展示K3s高可用性如何抵抗“節(jié)點(diǎn)退化(nodes degradation)”。而且,我們還將了解k3s默認(rèn)在集群中部署了哪些組件。


          前期準(zhǔn)備


          在操作系統(tǒng)(Linux、MacOS、Windows)方面,大家都有自己的偏好。所以在我們檢查用于本篇文章的設(shè)置之前,僅有兩個(gè)必要的要求:Docker和Linux shell。


          如果你使用的系統(tǒng)是MacOS或者Windows,Docker Desktop是Dcoker的首選解決方案。對于Linux來說,你可以獲取Docker engine以及CLIs,詳細(xì)信息如下:

          https://www.docker.com/products/docker-desktop


          Linux shell、MacOS以及Linux都會有所涉及。對于Windows系統(tǒng)而言,最簡單快捷的解決方案是WSL2,我們也會在demo中用到它。


          以下是我們將會用到的設(shè)置:


          • OS:Windows 10 version 2004(build:19041)


          • OS 組件:虛擬化機(jī)器平臺以及Linux的Windows子系統(tǒng)

            安裝步驟:

            https://docs.microsoft.com/en-us/windows/wsl/install-win10


          • WLS2發(fā)行版:Ubuntu

            Windows商店地址:

            https://www.microsoft.com/en-us/p/ubuntu/9nblggh4msv6#activetab=pivot:overviewtab


          • 【可選】使用的控制臺:Windows Terminal

            Windows商店地址:

            https://www.microsoft.com/en-us/p/windows-terminal/9n0dx20hk701


          Step1:從安裝開始


          訪問下方鏈接即可了解如何安裝k3d:

          https://k3d.io/#installation


          在本文中,我們將以curl的方式安裝。


          請注意:直接從URL運(yùn)行腳本存在很嚴(yán)重的安全問題。所以在運(yùn)行任意腳本之前,確保源是項(xiàng)目的網(wǎng)站或git在線repository。


          以下是安裝步驟:


          訪問:https://k3d.io/#installation


          復(fù)制“curl“安裝命令并且在你的terminal內(nèi)運(yùn)行它:


          curl -s https://raw.githubusercontent.com/rancher/k3d/main/install.sh | bash



          請注意:該截圖顯示了兩個(gè)命令:

          • k3d version:提供已安裝的k3d版本

          • k3d –help:列出可用于k3d的命令


          現(xiàn)在k3d已經(jīng)安裝完成并且準(zhǔn)備開始使用。


          Step2:從單節(jié)點(diǎn)集群開始


          在我們創(chuàng)建一個(gè)HA集群之前,讓我們從單節(jié)點(diǎn)集群開始以理解命令(“grammar”)并且查看默認(rèn)情況下k3d部署了什么。


          首先,語法。在V3,k3d在命令的使用方式上做了很大的改變。我們不深入研究以前的命令是怎么做的,我們將使用V3的語法。


          K3s遵循“名詞+動詞”的句法。首先指定我們要使用的東西(集群或節(jié)點(diǎn)),然后指定我們要應(yīng)用的操作(create、delete、start、stop)。


          創(chuàng)建一個(gè)單節(jié)點(diǎn)集群


          我們將借助k3d使用默認(rèn)值創(chuàng)建一個(gè)單節(jié)點(diǎn)集群:


          k3d cluster create


          請注意:k3d cluster create命令的輸出建議運(yùn)行另一條命令來檢查集群是否在運(yùn)行并且可以訪問:kubectl cluster-info


          現(xiàn)在集群已經(jīng)啟動并且在運(yùn)行啦!


          窺視內(nèi)部結(jié)構(gòu)


          我們還可以從不同的角度看看到底部署了什么。


          讓我們從頭開始,看看K3s集群里面有什么(pods、服務(wù)、部署等):


          kubectl get all --all-namespaces


          我們可以看到,除了Kubernetes服務(wù)外,當(dāng)我們使用默認(rèn)值時(shí),K3s還部署了DNS、metrics和ingress(traefik)服務(wù)。


          現(xiàn)在讓我們從不同的視角查看節(jié)點(diǎn)。


          首先,我們從集群的視角檢查它:


          kubectl get nodes --output wide


          如我們所料,僅看到了一個(gè)節(jié)點(diǎn)。現(xiàn)在讓我們從k3d的視角查看:


          k3d node list


          現(xiàn)在我們有兩個(gè)節(jié)點(diǎn)。這里有一個(gè)比較智能的實(shí)現(xiàn)是,當(dāng)集群運(yùn)行在它的節(jié)點(diǎn)k3d-k3s-default-server-0上時(shí),有另一個(gè)“節(jié)點(diǎn)”作為負(fù)載均衡器。雖然這可能對單節(jié)點(diǎn)集群沒有太大作用,但在我們的HA集群中,它將為我們節(jié)省很多精力。


          最后,我們從Docker看到兩個(gè)節(jié)點(diǎn):docker ps


          清理資源


          我們的單節(jié)點(diǎn)集群可以幫助我們理解k3d的機(jī)制和命令。現(xiàn)在,我們需要在部署HA集群之前清理資源:k3d cluster delete


          請注意:出于demo的目的,我們在上方截圖中添加了以下命令:

          • k3d cluster list:列出活躍的k3d集群

          • kubectl cluster-info:檢查集群的連接

          • docker ps:檢查活躍的容器


          現(xiàn)在,我們已經(jīng)使用k3d創(chuàng)建、檢查并刪除了一個(gè)單節(jié)點(diǎn)集群。下一步,我們開始嘗試HA。


          Step3:歡迎來到HA的世界


          在我們開啟命令行之前,讓我們對我們即將要部署的東西有一個(gè)基本的了解并且了解一些其他額外的要求。


          首先,Kubernetes HA有兩個(gè)可能的設(shè)置:嵌入式或外部數(shù)據(jù)庫。我們將采用嵌入式數(shù)據(jù)庫的設(shè)置。


          其次,K3s有兩種不同的技術(shù)用于嵌入式數(shù)據(jù)庫的HA:一種是基于dqlite(K3s v1.18),另一種是基于etcd(K3s v1.19+)。


          這意味著etcd是當(dāng)前K3s穩(wěn)定版中的默認(rèn)版本,也是本文將使用的版本。Dqlite已經(jīng)棄用。


          在撰寫本文時(shí),k3d默認(rèn)使用k3s v1.18.9-k3s1的版本。你可以通過k3d version來檢查:



          那么這是否意味著我們需要重新安裝支持K3s v1.19的k3d嗎?當(dāng)然不需要!


          我們可以使用當(dāng)前已經(jīng)安裝的k3d版本并且依舊支持K3s v1.19,因?yàn)椋?/p>


          • k3d可以讓我們指定一個(gè)特定的k3s docker鏡像來使用

          • 所有的k3s版本都是以容器鏡像的形式發(fā)布的


          基于以上原因,我們可以假設(shè)一個(gè)K3s v1.19作為一個(gè)容器鏡像存儲在Docker Hub中:

          https://hub.docker.com/r/rancher/k3s/tags?page=1&name=v1.19


          現(xiàn)在,讓我們用k3d創(chuàng)建第一個(gè)K3s HA集群。


          三個(gè)控制平面


          根據(jù)Kubernetes HA的最佳實(shí)踐,我們應(yīng)該使用至少3個(gè)控制平面來創(chuàng)建一個(gè)HA集群。


          在k3d中我們使用以下命令即可:


          k3d cluster create --servers 3 --image rancher/k3s:v1.19.3-k3s2


          了解命令:

          基礎(chǔ)命令:k3d cluster create

          選項(xiàng):

          • -server 3:請求用角色服務(wù)器創(chuàng)建三個(gè)節(jié)點(diǎn)。

          • -image rancher/k3s:v1.19.3-k3s2:指定要使用的K3S鏡像


          現(xiàn)在我們可以從不同的角度檢查我們已經(jīng)創(chuàng)建的集群:


          kubectl get nodes --output wide




          如你所見,我們從不同方面進(jìn)行檢查以確保我們的節(jié)點(diǎn)正常運(yùn)行。


          如果我們看到組件已經(jīng)部署完成,那么我們的daemonset現(xiàn)在有3個(gè)副本,而不是1個(gè):


          kubectl get all --all-namespaces


          最后一項(xiàng)檢查是看pods在哪個(gè)節(jié)點(diǎn)上運(yùn)行:


          kubectl get podes --all-namespaces --output wide


          現(xiàn)在我們有了HA集群的基礎(chǔ)。讓我們添加額外的控制平面節(jié)點(diǎn),并故意對其進(jìn)行破壞,看看集群的表現(xiàn)。


          擴(kuò)展集群


          由于k3d以及我們的集群運(yùn)行在頂部容器的事實(shí),我們可以快速模擬在HA集群中增加另一個(gè)控制平面節(jié)點(diǎn):


          k3d node create extraCPnode --role=server --image=rancher/k3s:v1.19.3-k3s2


          了解命令:

          基礎(chǔ)命令:k3d node create

          選項(xiàng):

          • extraCPnode:k3d用于創(chuàng)建最終節(jié)點(diǎn)名稱的基本名稱。

          • role=server:設(shè)置節(jié)點(diǎn)的角色為控制平面。

          • image rancher/k3s:v1.19.3-k3s2:指定要使用的K3s鏡像。


          從這里可以看出,我們從不同的角度進(jìn)行檢查以確保新的控制平面節(jié)點(diǎn)正常運(yùn)行。


          增加了這個(gè)額外的節(jié)點(diǎn)之后,我們就可以進(jìn)行最后的測試了:降低node0


          HA:重型裝甲防撞車


          node0通常是我們的KUBECONFIG所指的節(jié)點(diǎn)(用IP或主機(jī)名表示),因此我們的kubectl應(yīng)用程序試圖連接到它來運(yùn)行不同的命令。  


          由于我們正在使用容器,所以“破壞“一個(gè)節(jié)點(diǎn)的最好方法是直接停止容器。


          docker stop k3d-k3s-default-server-0

          請注意:Docker和k3d命令會立即顯示狀態(tài)變化。然而,Kubernetes集群需要很短的時(shí)間才能看到狀態(tài)變化為NotReady。


          此外,我們的集群仍然使用Kubectl響應(yīng)我們的命令。


          現(xiàn)在是時(shí)候再次參考負(fù)載均衡器k3d所用的時(shí)間,以及它對于讓我們繼續(xù)訪問K3s集群的重要性。


          從外部連接的角度來看,雖然負(fù)載均衡器內(nèi)部切換到了下一個(gè)可用節(jié)點(diǎn),但我們?nèi)允褂孟嗤腎P/主機(jī)。這種抽象為我們節(jié)省了很多經(jīng)理,并且這是k3d最有用的功能之一。


          讓我們看一下集群的狀態(tài):


          kubectl get all --all-namespaces


          一切看起來正常。如果我們再具體看一下Pods,那么我們會發(fā)現(xiàn),K3s通過在其他節(jié)點(diǎn)上重新創(chuàng)建運(yùn)行在故障節(jié)點(diǎn)上的pods來自動自愈:


          kubectl get pods --all-namespaces --output wide


          最終,為了展示HA的強(qiáng)大以及k3s如何管理它,讓我們重啟node0,然后我們會看到它被重新納入集群,好像什么都沒有發(fā)生。


          docker start k3d-k3s-default-server-0


          我們的集群是穩(wěn)定的并且所有節(jié)點(diǎn)都再次正常運(yùn)行。


          再次清理資源


          現(xiàn)在我們可以刪除本地HA集群,因?yàn)樗呀?jīng)完成了它的使命。此外,我們知道我們可以輕松創(chuàng)建一個(gè)新的集群。


          使用以下命令即可清理我們的HA集群:


          k3d cluster delete


          總  結(jié)

          雖然我們在本地、容器中創(chuàng)建了單節(jié)點(diǎn)和HA集群,我們?nèi)匀豢梢钥吹終3s在新的etcd嵌入式DB下的表現(xiàn),如果我們在裸機(jī)或虛擬機(jī)上部署K3s,其作用方式相同。


          也就是說,k3d在管理方面幫助很大。它默認(rèn)創(chuàng)建了一個(gè)負(fù)載均衡器,允許永久連接到K3s集群,同時(shí)抽象了所有的任務(wù)。如果它部署在容器外,我們需要手動完成這一步驟。


          在本文中,我們已經(jīng)看到了使用k3d設(shè)置高可用性K3s集群是多么容易。如果你尚未嘗試,強(qiáng)烈推薦你根據(jù)本教程進(jìn)行實(shí)踐,它們都是開源且易用的。



          推薦閱讀

          一文搞定全場景K3s離線安裝

          1款開源工具,實(shí)現(xiàn)自動化升級K3S集群!

          這應(yīng)該是最適合國內(nèi)用戶的K3s HA方案



          About k3s


          k3s 是首個(gè)進(jìn)入 CNCF 沙箱項(xiàng)目的 K8S 發(fā)行版,同時(shí)也是當(dāng)前全球用戶量最大的 CNCF 認(rèn)證輕量級 K8S 發(fā)行版。自2019年3月發(fā)布以來,備受全球開發(fā)者們關(guān)注,至今GitHub Star數(shù)已超過 14,700,成為了開源社區(qū)最受歡迎的邊緣計(jì)算 K8S 解決方案。截至目前,K3s全球下載量超過100萬次,每周平均被安裝超過2萬次,其中30%的下載量來自中國。


          k3s 專為在資源有限的環(huán)境中運(yùn)行 Kubernetes 的研發(fā)和運(yùn)維人員設(shè)計(jì),將滿足日益增長的在邊緣計(jì)算環(huán)境中運(yùn)行在 x86、ARM64 和 ARMv7 處理器上的小型、易于管理的 Kubernetes 集群需求。k3s 的發(fā)布,為開發(fā)者們提供了以“Rancher 2.X + k3s”為核心的從數(shù)據(jù)中心到云到邊到端的 K8S 即服務(wù)(Kubernetes-as-a-Service),推動 Kubernetes Everywhere。

          掃碼添加k3s中文社區(qū)助手

          加入官方中文技術(shù)社區(qū)

          官網(wǎng):https://k3s.io

          瀏覽 60
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  av手机天堂网 | 免费A片国产毛无码A片牛牛 | aa在线免费观看 | 欧美日韩性色情AⅤ在线一级二级 | 一级黄色视频免费观看 |