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