Skip to content

使用k3d快速创建一个kubernetes集群 #2

@v5tech

Description

@v5tech

安装文档

https://k3d.io/
https://k3s.io/
https://doc.traefik.io/traefik/

安装k3d

brew install k3d
brew install kubectl
brew install kubecm

创建集群

  • 禁用 traefik、metrics-server
k3d cluster create dev \
-p "8081:80@loadbalancer" \
--k3s-arg "--disable=traefik@server:0" \
--k3s-arg "--disable=metrics-server@server:0"
  • 禁用 traefik
k3d cluster create dev \
-p "8081:80@loadbalancer" \
--k3s-arg "--disable=traefik@server:0"

此处使用--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

可选的组件有:coredns, servicelb, traefik, local-storage, metrics-server

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

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

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" 名字保持一致

  • 替换flannel为calico

不想使用默认flannel的可以选择其他网络组件.如:calico
参考:https://github.com/rancher/k3d/blob/main/docs/usage/advanced/calico.md

 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"
  • 创建集群
k3d cluster create k3s-local \
--port 80:80@loadbalancer \
--port 8443:443@loadbalancer \
--api-port 6443 \
--servers 1 \
--agents 2
  • 部署nginx、tomcat进行测试
kubectl create deployment nginx --image=nginx:alpine
kubectl create service clusterip nginx --tcp=80:80

kubectl create deployment tomcat --image=tomcat:alpine
kubectl create service clusterip tomcat --tcp=8080:8080

创建ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx
  annotations:
    ingress.kubernetes.io/ssl-redirect: "false"
spec:
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx
            port:
              number: 80
   
---

apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: stripprefix
spec:
  stripPrefix:
    prefixes:
      - /nginx
      - /tomcat
    forceSlash: false

---

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    ingress.kubernetes.io/ssl-redirect: "false"
    traefik.ingress.kubernetes.io/router.entrypoints: web
    # <middleware-namespace>-<middleware-name>@kubernetescrd
    # traefik.ingress.kubernetes.io/router.middlewares: appspace-stripprefix@kubernetescrd
    traefik.ingress.kubernetes.io/router.middlewares: default-stripprefix@kubernetescrd
  name: traefik
spec:
  rules:
    - http:
        paths:
          - path: /nginx
            pathType: Prefix
            backend:
              service:
                name:  nginx
                port:
                  number: 80
          - path: /tomcat
            pathType: Prefix
            backend:
              service:
                name: tomcat
                port:
                  number: 8080

访问traefik dashboard

kubectl -n kube-system port-forward $(kubectl -n kube-system get pods --selector "app.kubernetes.io/name=traefik" --output=name) 9000:9000

浏览器访问:http://localhost:9000/dashboard/

参考文档

Traefik 路由规则及中间件 Traefik Middlewares 的配置
https://doc.traefik.io/traefik/providers/overview/
https://doc.traefik.io/traefik/routing/providers/kubernetes-ingress/
https://doc.traefik.io/traefik/middlewares/overview/

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions