中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

k3d入門指(zhi)南:在(zai)Docker中運行K3s

在這里插入圖片描述
在(zai)本(ben)(ben)文中,我們(men)將簡單了(le)解(jie)k3d,這(zhe)是一(yi)款(kuan)可(ke)讓您(nin)在(zai)安裝了(le)Docker的任(ren)何(he)地方(fang)運(yun)行(xing)一(yi)次性Kubernetes集群(qun)的工具,此(ci)外在(zai)本(ben)(ben)文中我們(men)還(huan)將探討在(zai)使用(yong)k3d中可(ke)能會(hui)出現的一(yi)切問題(ti)。

什么是k3d?

k3d是一(yi)個小(xiao)型程序,用(yong)于在Docker中運行(xing)K3s集(ji)群。 K3s是經過CNCF認證(zheng)的輕量級Kubernetes發行(xing)和沙箱項(xiang)目。它(ta)是為(wei)資源有(you)限環境設(she)計的,被打包為(wei)單個二進制文件(jian),所(suo)需RAM小(xiao)于512MB。 要了(le)解(jie)有(you)關(guan)K3s的更多信息,請查看我(wo)們之前的公眾號文章及B站上的視(shi)頻。

k3d借助從K3s倉庫(ku)構建(jian)的Docker鏡像在安(an)裝了Docker的任何機器上的Docker容(rong)器中啟動多個K3s節點(dian)。 這樣,一臺物(wu)理(或虛擬(ni))機(稱(cheng)為Docker Host)可以運行多個K3s集(ji)群,每個集(ji)群同(tong)時有多個server和agent節點(dian)。

k3d能做什么?

2021年1月(yue),發布k3dv4.0.0,包含以(yi)下功能(neng):

  • 創建/停止/啟動/刪除/擴大/縮小K3s集群(和單個節點)
  • 通過命令行標志
  • 通過配置文件
  • 管理可與集群一起使用的容器鏡像倉庫并與之交互
  • 管理集群的Kubeconfigs
  • 將本地Docker daemon中的鏡像導入集群中運行的容器運行時中

顯然(ran),還有更多的方法,您可以(yi)用來對使(shi)用過(guo)程中的細節進行調整。

k3d的用途是什么?

k3d的(de)(de)(de)主要應用場景(jing)是在Kubernetes上進(jin)行(xing)(xing)本地開(kai)(kai)發,因為(wei)k3d輕量(liang)、簡單的(de)(de)(de)特(te)性,在這一(yi)場景(jing)下幾乎不(bu)會遇到麻煩和資(zi)源(yuan)使用問題。 開(kai)(kai)發k3d的(de)(de)(de)初(chu)衷是為(wei)開(kai)(kai)發人員提供一(yi)個(ge)簡單的(de)(de)(de)工具,使他(ta)們能夠在開(kai)(kai)發環(huan)境的(de)(de)(de)機器(qi)上運(yun)行(xing)(xing)輕量(liang)級(ji)的(de)(de)(de)Kubernetes集群,從而在類似于(yu)生產(chan)的(de)(de)(de)環(huan)境中獲得快速的(de)(de)(de)迭代(dai)時間(相對于(yu)在本地運(yun)行(xing)(xing)docker-compose與生產(chan)中的(de)(de)(de)Kubernetes要快得多)。

隨著時間的(de)推移,k3d還發展(zhan)成為一(yi)(yi)種運維工(gong)具,用于在隔離的(de)環境中(zhong)測試某些Kubernetes(或特別是K3s)功能。 例如,使(shi)用k3d,您可(ke)以輕(qing)松地(di)創建多節(jie)點(dian)(dian)集群,在其(qi)上部署(shu)一(yi)(yi)些應(ying)用程(cheng)序,輕(qing)松停(ting)止(zhi)一(yi)(yi)個(ge)節(jie)點(dian)(dian)并查看Kubernetes的(de)反應(ying),還能夠(gou)將您的(de)應(ying)用重新調度到其(qi)他節(jie)點(dian)(dian)上。

此外,您可(ke)以(yi)(yi)在持續集成系統中使用(yong)k3d來快速啟動集群(qun),在其上部署測(ce)試堆棧并運行集成測(ce)試。完成操作后,您就可(ke)以(yi)(yi)輕松地停(ting)用(yong)整個集群(qun)。無(wu)需擔心適(shi)當的(de)(de)清理和可(ke)能的(de)(de)殘留。

我們還提供了一個k3d-dind鏡像(類似于電影《盜夢空(kong)間》中的(de)(de)夢中的(de)(de)夢,我們在(zai)容器(qi)(qi)內的(de)(de)容器(qi)(qi)中放(fang)置了容器(qi)(qi)。)通過此操(cao)作,您可以創建一個運行(xing)k3d的(de)(de)docker-in-docker環境(jing),該(gai)環境(jing)會在(zai)Docker中生成一個K3s集(ji)群。這(zhe)意味著您只有(you)一個容器(qi)(qi)(k3d-dind)在(zai)您的(de)(de)Docker主機上運行(xing),而(er)該(gai)容器(qi)(qi)又在(zai)其中運行(xing)了整(zheng)個K3s / Kubernetes集(ji)群。

如何使用k3d?

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

注意:本文(wen)介紹內容(rong)對版本有要求,請(qing)至少使用(yong)k3d v4.1.1以(yi)上版本

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

“簡單”的方式

k3d cluster create

該(gai)命令將(jiang)創(chuang)(chuang)建一(yi)個(ge)(ge)帶有兩個(ge)(ge)容器(qi)的(de)K3s集群:一(yi)個(ge)(ge)Kubernetes控制(zhi)平面(mian)節點(server)和一(yi)個(ge)(ge)位于其(qi)前面(mian)的(de)負(fu)載均衡(heng)器(qi)(serverlb)。 它將(jiang)它們都放置在專用(yong)的(de)Docker網絡中,并在Docker主(zhu)機上(shang)隨(sui)機選擇的(de)免費端口上(shang)暴(bao)露Kubernetes API。 它還在后(hou)臺創(chuang)(chuang)建了一(yi)個(ge)(ge)名為(wei)Docker的(de)卷,作為(wei)鏡像導入的(de)準備。

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

k3d等待一切準備就緒,從集群中拉取Kubeconfig并將其與默認的Kubeconfig合并(通常位于$ HOME / .kube / config或者KUBECONFIG環境變量指向的任何路徑中)。
不用擔心,您(nin)也(ye)可(ke)以調整該(gai)行為。

使用kubectl查看您剛創建的用于顯示節點的內容:. kubectl get nodes
k3d還為您(nin)提供(gong)了一(yi)些命令來列(lie)出您(nin)所創建的東西(xi):.k3d cluster | node | registry list

“簡單但精妙”的方式

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'

此命令生成帶有六個(ge)容器的K3s集群:* 1個(ge)負載均衡(heng)器* 3個(ge)server(控制平面節點(dian))* 2個(ge)agent(以(yi)前為worker節點(dian))

通過--api-port 127.0.0.1:6445,您可以使用k3d將Kubernetes API端口(6443內部)映射到127.0.0.1 / localhost的端口6445。這意味著隨后將在Kubeconfig中包含以下連接字符串:server: //127.0.0.1:6445以連接到此集群。
該端口將從(cong)負載(zai)均衡器映(ying)射到(dao)您的主機(ji)系統(tong)。請求將從(cong)那里被代理到(dao)server節(jie)點(dian),從(cong)而有效(xiao)地模(mo)擬(ni)生產環境(jing)設置,在該環境(jing)中server節(jie)點(dian)也可能發生故(gu)障,并且希(xi)望故(gu)障轉(zhuan)移到(dao)另一個server上。

--volume /home/me/mycode:/code@agent[] 綁定將你的本地目錄/home/me/mycode掛載到所有([] agent 節點)內部的路徑/code。使用索引(0或1)替換*,以便只把它掛載到其中一個節點。
告(gao)訴(su)k3d應(ying)該將卷安(an)裝到哪個節(jie)(jie)點的(de)規范稱為“節(jie)(jie)點過濾器”,它也用于其(qi)他標志,例如端口映射(she)的(de)--port標志。

也就是說,--port '8080:80@loadbalancer'將(jiang)本地主機(ji)的(de)端口(kou)8080映射到(dao)負載均衡(heng)器(qi)(serverlb)上的(de)端口(kou)80,該負載均衡(heng)器(qi)可(ke)用于(yu)將(jiang)HTTP ingress流(liu)量轉(zhuan)發到(dao)集(ji)群。 例如,可(ke)以將(jiang)Web應用程序部署到(dao)集(ji)群(Deployment)中(zhong),該集(ji)群通過(guo)一個 Ingress(如myapp.k3d.localhost)在外(wai)部暴露(Service)。

然(ran)后(前提是(shi)一切都設置為將該域(yu)解析為本地(di)主機IP),則可以將瀏覽器(qi)指(zhi)向//myapp.k3d.localhost:8080 訪問您(nin)的(de)應(ying)用程序。 然(ran)后,流量從(cong)您(nin)的(de)主機通過Docker橋接口流向負載(zai)均衡器(qi)。 從(cong)那(nei)里(li),它被代理到(dao)集(ji)群,并通過Ingress和Service傳遞到(dao)您(nin)的(de)應(ying)用程序Pod。

注意:你必須設置一些機制,將myapp.k3d.localhost路由到本地主機IP(127.0.0.1)。
最常見的方法是在你的/etc/hosts文件中使用127.0.0.1
myapp.k3d.localhost的條目(C:\Windows\System32\drivers\etc/hosts)。。
但是,這不允許使用通配符(.localhost),因此一段時間后可能會變得有些麻煩,因此您可能需要了解dnsmasq(MacOS /
UNIX)或Acrylic(Windows)之類的工具來減輕負擔。 提示:可以在某些系統(至少是Linux操作系統,包括SUSE
Linux和openSUSE)上安裝libnss-myhostname軟件包,以將
.localhost域自動解析為127.0.0.1,這意味著您不必再手動操作。例如
,如果您希望通過Ingress進行測(ce)試,則需要在其中設置域。

在此處,需要注意(yi)(yi)的事是:如果(guo)創建多個server節點,則K3s將(jiang)被分配(pei)到--cluster-init標(biao)志(zhi),這意(yi)(yi)味(wei)著(zhu)它將(jiang)K3s的默認內部數據庫(默認為SQLite)更改為etcd。

“配置即編碼”方式

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

示例配置文件:

# k3d configuration file, saved as e.g. /home/me/myk3dcluster.yaml
apiVersion: k3d.io/v1alpha2  # this will change in the future as we make everything more stable
kind: Simple  # internally, we also have a Cluster config, which is not yet available externally
name: 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@loadbalancer
    nodeFilters:
      - loadbalancer
options:
  k3d:  # k3d runtime settings
    wait: 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 itself
    extraServerArgs:  # additional arguments passed to the `k3s server` command
      - --tls-san=my.host.domain
    extraAgentArgs: []  # addditional arguments passed to the `k3s agent` command
  kubeconfig:
    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)

假設我們將其另存為/home/me/myk3dcluster.yaml,我們可以使用它來配置新集群
k3d cluster create --config /home/me/myk3dcluster.yaml

注(zhu)意(yi):您仍然可以設置(zhi)額外的參數或標(biao)志,這些參數或標(biao)志將優(you)先于(或將被合并)你在配置(zhi)文(wen)件(jian)中定義(yi)的任何參數。

k3d還能做什么?

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

  • 與k3d托管的容器倉庫一起創建集群
  • 使用集群通過熱代碼重載進行快速開發
  • 將k3d與其他開發工具(例如Tilt或Skaffold)結合使用
  • 兩者都可以通過k3d image import利用鏡像導入的功能
  • 兩者都可以利用k3d托管的倉庫來加快開發周期
  • 在您的CI系統中使用k3d(為此我們提供了PoC:
  • 使用社區維護的vscode擴展程序(
  • vscode工作流程中 用它來設置K3s的高可用性

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

THORSTEN KLEIN
trivago的DevOps工程師,SUSE自由軟件工程師,也是k3d的維護者。

posted @ 2021-05-14 10:38  k3s中文社區  閱讀(2627)  評論(0)    收藏  舉報