k3d安裝: 在容器中啟動k3s集群


k3d介紹

k3d 就是一個工具,用於管理k3s集群。包括啟動,刪除,關閉,停止,查看等。

k3d安裝

容器和二進制兩種

容器:就是k3d部署在容器中,再這個容器中啟動k3s集群。就是docker-in-docker

二進制:下載電腦合適的。

https://github.com/rancher/k3d/releases/download/v5.0.3/k3d-darwin-arm64
mv k3d-darwin-arm64 /usr/local/bin/k3d
chmod +x /usr/local/bin/k3d

  github地址:https://github.com/rancher/k3d

k3s介紹

輕量級的kubernetes

組件:默認的,可以替換

flannel、coredns、traefik、kipper load balancer、sqlite3、containerd。

創建集群

 先創建一個單機版的集群。由於默認使用的containerd運行時,所以kubernetes.io/dockerconfigjso 的創建倉庫認證就不能用了。

此處使用--registry-config配置鏡像倉庫認證。參考地址:https://k3d.io/v5.1.0/usage/registries/#registries-file

常用參數:

--k3s-arg : 參考地址:https://rancher.com/docs/k3s/latest/en/installation/install-options/server-config/#k3s-server-cli-help

如:--k3s-arg "--disable=traefik@server:0" 

k3d cluster create dev  --port "80:80@loadbalancer" --port "443:443@loadbalancer"   --registry-config "registries.yaml"

######私有倉庫######
cat registries.yaml
mirrors:
  "registry.cn-beijing.aliyuncs.com":
    endpoint:
      - https://registry.cn-beijing.aliyuncs.com

configs:
  "registry.cn-beijing.aliyuncs.com":
    auth:
      username: username
      password: password

注:"registry.cn-beijing.aliyuncs.com" 保持一致名字

 

 

 實例測試

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-nginx-demo
spec:
  rules:
  - host: "foo.bar.com"
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: nginx
            port:
              number: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
spec:
  ports:
  - port: 80
    name: http
  selector:
    app: nginx
---
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: default
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:alpine
        ports:
        - containerPort: 80

 添加hosts解析:172.168.3.139 foo.bar.com

使用:curl foo.bar.com 測試

 

 

Use Calico instead of Flannel

不想使用默認flannel 的可以選擇其他網絡組件 如:calico 參考:

 https://github.com/rancher/k3d/blob/main/docs/usage/advanced/calico.md

 

Use Ingress nginx instead of Traefik

使用ingress nginx 代替traefik。對於熟悉ingress nginx的 可以使用

 k3d cluster create dev --image "rancher/k3s:v1.20.12-k3s1" --volume "$(pwd)/calico.yaml:/var/lib/rancher/k3s/server/manifests/calico.yaml" --port "80:80@loadbalancer" --port "443:443@loadbalancer"  --k3s-arg "--flannel-backend=none@server:0"  --k3s-arg "--disable=traefik@server:0" --registry-config "registries.yaml"

ingress nginx官網:https://kubernetes.github.io/ingress-nginx/deploy/#bare-metal

https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.4/deploy/static/provider/cloud/deploy.yaml

替換鏡像:
grep 'image:' deploy.yaml
          image: liangjw/ingress-nginx-controller:v1.0.4
          image: liangjw/kube-webhook-certgen:v1.1.1
          image: liangjw/kube-webhook-certgen:v1.1.1

參考docker hub:https://registry.hub.docker.com/u/liangjw

 

 

其他參數:

-p "32000-23767:32000-23767@loadbalancer" 

 

流量走向

一種方案:模擬真實網絡請求

Dns 解析---> 部署節點ip(此處本機) 80:443端口 ---> k3d 的 loadbance 容器:80 443 ---> k3s集群的ingress nginx controler 的80:443

 dns解析根據實際情況。主要把流量導入到k3d的lb容器80:443端口即可,lb實際是一個代理ng將流量導入k3s集群。

 

刪除集群:

k3d cluster delete dev

 地址收藏:

https://github.com/linuxkit/linuxkit

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM