<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>

          使用 K3s 和 Traefik 創(chuàng)建本地開發(fā)集群

          共 5044字,需瀏覽 11分鐘

           ·

          2020-10-20 14:20

          完整的 Kubernetes 集群往往非常復雜,需要較高的資源,往往我們在開發(fā)期間需要一個完整的 Kubernetes 來運行我們的應用,但是并不要求達到生產級別的集群,本文我們將探討幾種本地輕松配置 Kubernetes 集群的方法。

          本地 Kubernetes 集群

          我們先來回顧幾種適合在我們自己的電腦上運行 Kubernetes 集群的方案。

          Minikube

          Minikube 是 Kubernetes 項目文檔中建議使用的一種解決方案,它用一個單節(jié)點集群部署一個虛擬機,我們需要付出虛擬化的代價,主機的最低要求 2CPU、2G內存、20G 存儲空間。

          這是一種簡單有效的學習 kubectl 命令的方法,但是單節(jié)點會有一些的不方便的地方,但 Minikube 團隊最近引入了多節(jié)點作為實驗性功能,來幫助解決這個問題。

          Kind

          Kind 是 Kubernetes SIG 的另一種用于本地部署集群的方法。他的核心實現是讓整個集群運行在 Docker 容器中。因此,它比 Minikube 更容易設置和更快啟動。它支持單個節(jié)點或多 master 以及多工作節(jié)點。

          Kind 是為一致性測試和用于 CI 管道而創(chuàng)建的,提供了一些不錯的功能,比如可以直接在集群內部加載 Docker 鏡像,而不需要推送到外部鏡像倉庫。

          k3s / k3d

          K3s 是一個輕量級的集群,為了實現這種極簡主義,做了一些取舍。

          • 集群的默認存儲是使用 SQLite 而不是 Etcd
          • 所有的控制平面組件都封裝在一個單一的二進制中
          • 控制外部依賴的數量

          K3d 是一個允許我們在 Docker 容器內運行 k3s 的工具,就像 Kind 一樣。

          應該選哪個?

          我個人的需求是:

          • 集群要快速啟動和停止
          • 不同的集群可以并排運行
          • 集群必須使用最少的系統(tǒng)資源

          對我來說,最適合的是 k3d,因為它很容易配置,它在 Docker 中運行,消耗的資源很少,而且開箱即用功能齊全。

          現在讓我們來看看如何使用 k3d 建立一個集群。

          使用 k3d 啟動集群

          首先先獲取 k3d,通過 https://github.com/rancher/k3d#get 獲取安裝方式。

          創(chuàng)建新的 k3d 集群

          直接運行下面的命令即可創(chuàng)建一個新的集群:

          $?k3d?cluster?create?devcluster?\
          --api-port?127.0.0.1:6443?\
          -p?80:80@loadbalancer?\
          -p?443:443@loadbalancer?\
          --k3s-server-arg?"--no-deploy=traefik"
          INFO[0000]?Created?network?'k3d-devcluster'?????????????
          INFO[0000]?Created?volume?'k3d-devcluster-images'???????
          INFO[0001]?Creating?node?'k3d-devcluster-server-0'??????
          INFO[0016]?Pulling?image?'docker.io/rancher/k3s:v1.18.9-k3s1'?
          INFO[0040]?Creating?LoadBalancer?'k3d-devcluster-serverlb'?
          INFO[0056]?Pulling?image?'docker.io/rancher/k3d-proxy:v3.1.3'?
          INFO[0064]?(Optional)?Trying?to?get?IP?of?the?docker?host?and?inject?it?into?the?cluster?as?'host.k3d.internal'?for?easy?access?
          INFO[0066]?Successfully?added?host?record?to?/etc/hosts?in?2/2?nodes?and?to?the?CoreDNS?ConfigMap?
          INFO[0066]?Cluster?'devcluster'?created?successfully!???
          INFO[0066]?You?can?now?use?it?like?this:????????????????
          kubectl?cluster-info

          上面的創(chuàng)建集群命令有幾個需要注意的地方:

          • 我們將本地主機的80和443端口映射到 k3s 虛擬負載均衡器上,這可以讓我們能夠直接從本地主機上訪問到 ingress 資源。
          • 群集的部署沒有使用默認的 Traefik Ingress 控制器。

          為什么要禁用 Traefik?因為我們可能想使用另一個 Ingress 控制器,或者因為 k3s 默認是與 Traefik 1 綁定在一起的,后面我們會安裝Traefik 2 版本。

          獲取憑證

          運行下面的命令獲取你的憑證,將其保存在文件中并導出到你的環(huán)境中:

          $?mkdir?-p?$HOME/k3d
          $?k3d?kubeconfig?get?devcluster?>?$HOME/k3d/kubeconfig
          $?export?KUBECONFIG=$HOME/k3d/kubeconfig

          通過運行一個簡單的 Kubectl 命令來測試你是否可以訪問集群。

          $?kubectl?cluster-info
          Kubernetes?master?is?running?at?[https://127.0.0.1:6443](https://127.0.0.1:6443/)
          CoreDNS?is?running?at?[https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy](https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy)
          Metrics-server?is?running?at?[https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy](https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy)

          To?further?debug?and?diagnose?cluster?problems,?use?'kubectl?cluster-info?dump'.

          安裝 Traefik 2

          我們可以直接使用 Helm 來快速安裝 Traefik 2:

          $?helm?repo?add?traefik?https://containous.github.io/traefik-helm-chart
          "traefik"?has?been?added?to?your?repositories
          $?helm?repo?list
          NAME????URL????????????????????????????????????????????
          traefik?https://containous.github.io/traefik-helm-chart
          $?helm?install?traefik?traefik/traefik
          NAME:?traefik
          LAST?DEPLOYED:?Sun?Oct?18?01:18:16?2020
          NAMESPACE:?default
          STATUS:?deployed
          REVISION:?1
          TEST?SUITE:?None

          部署完成后檢查 Traefik 是否正常工作,我們可以通過 port-forward ?dashboard 來驗證:

          $?kubectl?port-forward?$(kubectl?get?pods?--selector?"app.kubernetes.io/name=traefik"?--output=name)?--address?0.0.0.0?9000:9000

          然后在瀏覽器中訪問 http://localhost:9000/dashboard/,正常可以訪問到 traefik 的 dashboard 頁面。

          部署應用

          接下來部署一個簡單的應用程序來驗證我們的 Ingress Controller 是否正確配置了,這里我們使用 whoami 應用程序:

          $?kubectl?create?deploy?whoami?--image?containous/whoami
          deployment.apps/whoami?created
          $?kubectl?expose?deploy?whoami?--port?80
          service/whoami?exposed

          然后我們定義一個 Ingress 規(guī)則來使用我們新的 Traefik,Traefik 既能讀取自己的 CRD IngressRoute,也能讀取傳統(tǒng)的 Ingress 資源。

          apiVersion:?networking.k8s.io/v1beta1
          kind:?Ingress
          metadata:
          ??name:?whoami
          ??annotations:
          ????traefik.ingress.kubernetes.io/router.entrypoints:?web,websecure
          ????traefik.ingress.kubernetes.io/router.tls:?"true"
          spec:
          ??rules:
          ??-?http:
          ??????paths:
          ??????-?path:?/
          ????????backend:
          ??????????serviceName:?whoami
          ??????????servicePort:?80

          在這個例子中,我們在 HTTP 和 HTTPs 兩個入口點上暴露了 whoami 服務,每一個 URL 都會被發(fā)送到該服務上,我們可以在 Traefik Dashboard 上看到新的路由器。

          要測試這個應用我們可以直接在瀏覽器中訪問:https://localhost/ ?即可,這是因為上面我們安裝 Traefik 的時候自動創(chuàng)建了一個 LoadBalancer 的 Service 服務。

          $?kubectl?get?svc
          NAME?????????TYPE???????????CLUSTER-IP????EXTERNAL-IP???PORT(S)??????????????????????AGE
          kubernetes???ClusterIP??????10.43.0.1?????????????443/TCP??????????????????????13m
          traefik??????LoadBalancer???10.43.32.29???172.19.0.2????80:31005/TCP,443:31507/TCP???7m25s
          whoami???????ClusterIP??????10.43.98.9????????????80/TCP???????????????????????4m5s

          總結

          從上面示例可以看出創(chuàng)建一個開發(fā)級別的集群是非常簡單的,而且還有更多的功能可以挖掘,包括 k3s 的 Helm charts 自動部署或者使用 Golang API 來管理啊 Kind 的集群,快使用用一個功能齊全的 Kubernetes 集群取代你的老式 Docker-compose 吧。

          原文鏈接:https://codeburst.io/creating-a-local-development-kubernetes-cluster-with-k3s-and-traefik-proxy-7a5033cb1c2d

          訓練營推薦





          ?點擊屏末?|??|?即刻學習云原生知識

          瀏覽 129
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  可以免费看黄的网站 | 国产三级理论视频在线 | 大鸡吧网站在现看 | 91丨豆花丨国产熟女 | 久久久7777 |