<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入門指南:在Docker中運(yùn)行K3s

          共 6033字,需瀏覽 13分鐘

           ·

          2021-05-16 01:11


          在本文中,我們將簡(jiǎn)單了解k3d,這是一款可讓您在安裝了Docker的任何地方運(yùn)行一次性Kubernetes集群的工具,此外在本文中我們還將探討在使用k3d中可能會(huì)出現(xiàn)的一切問題。


          什么是k3d?


          k3d是一個(gè)小型程序,用于在Docker中運(yùn)行K3s集群。K3s是經(jīng)過CNCF認(rèn)證的輕量級(jí)Kubernetes發(fā)行和沙箱項(xiàng)目。它是為資源有限環(huán)境設(shè)計(jì)的,被打包為單個(gè)二進(jìn)制文件,所需RAM小于512MB。要了解有關(guān)K3s的更多信息,請(qǐng)查看我們之前的公眾號(hào)文章及B站上的視頻。


          k3d借助從K3s倉(cāng)庫(kù)構(gòu)建的Docker鏡像在安裝了Docker的任何機(jī)器上的Docker容器中啟動(dòng)多個(gè)K3s節(jié)點(diǎn)。這樣,一臺(tái)物理(或虛擬)機(jī)(稱為Docker Host)可以運(yùn)行多個(gè)K3s集群,每個(gè)集群同時(shí)有多個(gè)server和agent節(jié)點(diǎn)。


          k3d能做什么?

          2021年1月,發(fā)布k3d v4.0.0,包含以下功能:


          • 創(chuàng)建/停止/啟動(dòng)/刪除/擴(kuò)大/縮小K3s集群(和單個(gè)節(jié)點(diǎn))

          • 通過命令行標(biāo)志

          • 通過配置文件

          • 管理可與集群一起使用的容器鏡像倉(cāng)庫(kù)并與之交互

          • 管理集群的Kubeconfigs

          • 將本地Docker daemon中的鏡像導(dǎo)入集群中運(yùn)行的容器運(yùn)行時(shí)中


          顯然,還有更多的方法,您可以用來對(duì)使用過程中的細(xì)節(jié)進(jìn)行調(diào)整。


          k3d的用途是什么?


          k3d的主要應(yīng)用場(chǎng)景是在Kubernetes上進(jìn)行本地開發(fā),因?yàn)閗3d輕量、簡(jiǎn)單的特性,在這一場(chǎng)景下幾乎不會(huì)遇到麻煩和資源使用問題。開發(fā)k3d的初衷是為開發(fā)人員提供一個(gè)簡(jiǎn)單的工具,使他們能夠在開發(fā)環(huán)境的機(jī)器上運(yùn)行輕量級(jí)的Kubernetes集群,從而在類似于生產(chǎn)的環(huán)境中獲得快速的迭代時(shí)間(相對(duì)于在本地運(yùn)行docker-compose與生產(chǎn)中的Kubernetes要快得多)。


          隨著時(shí)間的推移,k3d還發(fā)展成為一種運(yùn)維工具,用于在隔離的環(huán)境中測(cè)試某些Kubernetes(或特別是K3s)功能。例如,使用k3d,您可以輕松地創(chuàng)建多節(jié)點(diǎn)集群,在其上部署一些應(yīng)用程序,輕松停止一個(gè)節(jié)點(diǎn)并查看Kubernetes的反應(yīng),還能夠?qū)⒛膽?yīng)用重新調(diào)度到其他節(jié)點(diǎn)上。


          此外,您可以在持續(xù)集成系統(tǒng)中使用k3d來快速啟動(dòng)集群,在其上部署測(cè)試堆棧并運(yùn)行集成測(cè)試。完成操作后,您就可以輕松地停用整個(gè)集群。無需擔(dān)心適當(dāng)?shù)那謇砗涂赡艿臍埩簟?/p>


          我們還提供了一個(gè)k3d-dind鏡像(類似于電影《盜夢(mèng)空間》中的夢(mèng)中的夢(mèng),我們?cè)谌萜鲀?nèi)的容器中放置了容器。)通過此操作,您可以創(chuàng)建一個(gè)運(yùn)行k3d的docker-in-docker環(huán)境,該環(huán)境會(huì)在Docker中生成一個(gè)K3s集群。這意味著您只有一個(gè)容器(k3d-dind)在您的Docker主機(jī)上運(yùn)行,而該容器又在其中運(yùn)行了整個(gè)K3s / Kubernetes集群。


          如何使用k3d?


          1、安裝k3d(如需使用也可安裝kubectl)


          注意:本文介紹內(nèi)容對(duì)版本有要求,請(qǐng)至少使用k3d v4.1.1以上版本


          2、可以嘗試以下其中一個(gè)示例,或使用文檔或CLI幫助文本找到適合您自己的方式(k3d [command] --help


          “簡(jiǎn)單”的方式


          k3d cluster create


          該命令將創(chuàng)建一個(gè)帶有兩個(gè)容器的K3s集群:一個(gè)Kubernetes控制平面節(jié)點(diǎn)(server)和一個(gè)位于其前面的負(fù)載均衡器(serverlb)。它將它們都放置在專用的Docker網(wǎng)絡(luò)中,并在Docker主機(jī)上隨機(jī)選擇的免費(fèi)端口上暴露Kubernetes API。它還在后臺(tái)創(chuàng)建了一個(gè)名為Docker的卷,作為鏡像導(dǎo)入的準(zhǔn)備。


          默認(rèn)情況下,如果不提供name參數(shù),集群將被命名為k3s-default,并且容器將顯示為k3d---<#>,因此在本例中,兩個(gè)容器將顯示為 k3d- k3s-default-serverlbk3d-k3s-default-server-0


          k3d等待一切準(zhǔn)備就緒,從集群中拉取Kubeconfig并將其與默認(rèn)的Kubeconfig合并(通常位于$ HOME / .kube / config或者KUBECONFIG環(huán)境變量指向的任何路徑中)。

          不用擔(dān)心,您也可以調(diào)整該行為。


          使用kubectl查看您剛創(chuàng)建的用于顯示節(jié)點(diǎn)的內(nèi)容:. kubectl get nodes


          k3d還為您提供了一些命令來列出您所創(chuàng)建的東西:.k3d cluster | node | registry list


          “簡(jiǎn)單但精妙”的方式


          k3d cluster create mycluster --api-port 127.0.0.1:6445 --servers 3 --agents 2 --volume '/home/me/mycode:/code@agent[*]' --port '8080:80@loadbalancer'

          此命令生成帶有六個(gè)容器的K3s集群:* 1個(gè)負(fù)載均衡器* 3個(gè)server(控制平面節(jié)點(diǎn))* 2個(gè)agent(以前為worker節(jié)點(diǎn))


          通過--api-port 127.0.0.1:6445,您可以使用k3d將Kubernetes API端口(6443內(nèi)部)映射到127.0.0.1 / localhost的端口6445。這意味著隨后將在Kubeconfig中包含以下連接字符串:server: https://127.0.0.1:6445以連接到此集群。


          該端口將從負(fù)載均衡器映射到您的主機(jī)系統(tǒng)。請(qǐng)求將從那里被代理到server節(jié)點(diǎn),從而有效地模擬生產(chǎn)環(huán)境設(shè)置,在該環(huán)境中server節(jié)點(diǎn)也可能發(fā)生故障,并且希望故障轉(zhuǎn)移到另一個(gè)server上。


          --volume /home/me/mycode:/code@agent[*]綁定將你的本地目錄/home/me/mycode掛載到所有([*] agent 節(jié)點(diǎn))內(nèi)部的路徑/code。使用索引(0或1)替換*,以便只把它掛載到其中一個(gè)節(jié)點(diǎn)。


          告訴k3d應(yīng)該將卷安裝到哪個(gè)節(jié)點(diǎn)的規(guī)范稱為“節(jié)點(diǎn)過濾器”,它也用于其他標(biāo)志,例如端口映射的--port標(biāo)志。


          也就是說,--port '8080:80@loadbalancer'將本地主機(jī)的端口8080映射到負(fù)載均衡器(serverlb)上的端口80,該負(fù)載均衡器可用于將HTTP ingress流量轉(zhuǎn)發(fā)到集群。例如,可以將Web應(yīng)用程序部署到集群(Deployment)中,該集群通過一個(gè) Ingress(如myapp.k3d.localhost)在外部暴露(Service)。


          然后(前提是一切都設(shè)置為將該域解析為本地主機(jī)IP),則可以將瀏覽器指向http://myapp.k3d.localhost:8080 訪問您的應(yīng)用程序。然后,流量從您的主機(jī)通過Docker橋接口流向負(fù)載均衡器。從那里,它被代理到集群,并通過Ingress和Service傳遞到您的應(yīng)用程序Pod。


          注意:你必須設(shè)置一些機(jī)制,將myapp.k3d.localhost路由到本地主機(jī)IP(127.0.0.1)。最常見的方法是在你的/etc/hosts文件中使用127.0.0.1 myapp.k3d.localhost的條目(C:\Windows\System32\drivers\etc/hosts)。但是,這不允許使用通配符(*.localhost),因此一段時(shí)間后可能會(huì)變得有些麻煩,因此您可能需要了解dnsmasq(MacOS / UNIX)Acrylic(Windows)之類的工具來減輕負(fù)擔(dān)。


          提示:可以在某些系統(tǒng)(至少是Linux操作系統(tǒng),包括SUSE Linux和openSUSE)上安裝libnss-myhostname軟件包,以將*.localhost域自動(dòng)解析為127.0.0.1,這意味著您不必再手動(dòng)操作。例如 ,如果您希望通過Ingress進(jìn)行測(cè)試,則需要在其中設(shè)置域。



          在此處,需要注意的事是:如果創(chuàng)建多個(gè)server節(jié)點(diǎn),則K3s將被分配到--cluster-init標(biāo)志,這意味著它將K3s的默認(rèn)內(nèi)部數(shù)據(jù)庫(kù)(默認(rèn)為SQLite)更改為etcd。


          “配置即編碼”方式


          從k3d v4.0.0(發(fā)布于2021年1月)開始,我們支持使用配置文件,來配置一切您以前通過命令行標(biāo)志所做的代碼(不久之后甚至可能支持更多)。在撰寫本文時(shí),您可以在repo中找到用于驗(yàn)證配置文件的JSON模式:

          https://github.com/rancher/k3d/blob/092f26a4e27eaf9d3a5bc32b249f897f448bc1ce/pkg/config/v1alpha2/schema.json


          示例配置文件:


          # k3d configuration file, saved as e.g. /home/me/myk3dcluster.yamlapiVersion: k3d.io/v1alpha2  # this will change in the future as we make everything more stablekind: Simple  # internally, we also have a Cluster config, which is not yet available externallyname: mycluster  # name that you want to give to your cluster (will still be prefixed with `k3d-`)servers: 1  # same as `--servers 1`agents: 2  # same as `--agents 2`kubeAPI:  # same as `--api-port 127.0.0.1:6445`hostIP: "127.0.0.1"hostPort: "6445"ports:- port: 8080:80  # same as `--port 8080:80@loadbalancernodeFilters:- loadbalanceroptions:k3d:  # k3d runtime settingswait: true  # wait for cluster to be usable before returining; same as `--wait` (default: true)timeout: "60s"  # wait timeout before aborting; same as `--timeout 60s`k3s:  # options passed on to K3s itselfextraServerArgs:  # additional arguments passed to the `k3s server` command- --tls-san=my.host.domainextraAgentArgs: []  # addditional arguments passed to the `k3s agent` commandkubeconfig:updateDefaultKubeconfig: true  # add new cluster to your default Kubeconfig; same as `--kubeconfig-update-default` (default: true)switchCurrentContext: true  # also set current-context to the new cluster's context; same as `--kubeconfig-switch-context` (default: true)


          假設(shè)我們將其另存為/home/me/myk3dcluster.yaml,我們可以使用它來配置新集群

          k3d cluster create --config /home/me/myk3dcluster.yaml


          注意:您仍然可以設(shè)置額外的參數(shù)或標(biāo)志,這些參數(shù)或標(biāo)志將優(yōu)先于(或?qū)⒈缓喜ⅲ┠阍谂渲梦募卸x的任何參數(shù)。


          k3d還能做什么?


          你可以在很多場(chǎng)景下使用k3d,例如:

          • 與k3d托管的容器倉(cāng)庫(kù)一起創(chuàng)建集群

          • 使用集群通過熱代碼重載進(jìn)行快速開發(fā)

          • 將k3d與其他開發(fā)工具(例如Tilt或Skaffold)結(jié)合使用

          • 兩者都可以通過k3d image import利用鏡像導(dǎo)入的功能

          • 兩者都可以利用k3d托管的倉(cāng)庫(kù)來加快開發(fā)周期

          • 在您的CI系統(tǒng)中使用k3d(為此我們提供了PoChttps://github.com/iwilltry42/k3d-demo/blob/main/.drone.yml

          • 使用社區(qū)維護(hù)的vscode擴(kuò)展程序(https://github.com/inercia/vscode-k3d)將其集成到您的vscode工作流程中

          • 用它來設(shè)置K3s的高可用性


          您可以通過使用在此demo repo中準(zhǔn)備好的腳本來自己嘗試所有這些操作:

          https://github.com/iwilltry42/k3d-demo。


          除此之外,請(qǐng)記住,k3d是一個(gè)社區(qū)驅(qū)動(dòng)的項(xiàng)目,如果在使用過程中遇到任何問題,歡迎掃描文末二維碼添加小助手與我們進(jìn)行溝通交流!


          作者簡(jiǎn)介

          THORSTEN KLEIN

          trivago的DevOps工程師,SUSE自由軟件工程師,也是k3d的維護(hù)者。




          About k3s


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


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

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

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

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

          瀏覽 107
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(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>
                  国产黄色三级片 | 啊啊啊啊啊啊啊网站 | 国产精品一二二区 | 亚洲人成电影一区二区在线 | 黄片在线免费 |