使用k3d启动k3s集群
完整的 Kubernetes 集群往往非常复杂,需要较高的资源,往往我们在开发期间需要一个完整的 Kubernetes 来运行我们的应用,但是并不要求达到生产级别的集群,K3d 是一个允许我们在 Docker 容器内运行 k3s 的工具。
1 安装k3d
curl -Lo k3d http://rancher-mirror.cnrancher.com/k3d/v4.2.0/k3d-linux-amd64
chmod +x k3d
sudo mv k3d /usr/local/bin/
2 启动集群
使用k3d启动k3s集群
k3d cluster create mycluster \
--api-port 127.0.0.1:6443 \
-p 80:80@loadbalancer \
-p 443:443@loadbalancer \
-i rancher/k3s:v1.18.6-k3s1 \
--k3s-server-arg "--no-deploy=traefik"
上面的创建集群命令有几个需要注意的地方:
- 使用指定版本镜像,因为默认安装最新版,使用起来可能有未知问题。
- 我们将本地主机的80和443端口映射到 k3s 虚拟负载均衡器上,这可以让我们能够直接从本地主机上访问到 ingress 资源。
- 群集的部署没有使用默认的 Traefik Ingress 控制器。
--k3s-server-arg
参数使用参考安装选项为什么要禁用 Traefik?因为我们可能想使用另一个 Ingress 控制器,或者因为 k3s 默认是与 Traefik 1 绑定在一起的,后面我们会安装Traefik 2 版本。
因为需要配置docker.io镜像加速
创建registries.yaml
文件
sudo tee registries.yaml >> EOF
mirrors:
"docker.io":
endpoint:
- "https://fogjl973.mirror.aliyuncs.com"
- "https://docker.mirrors.ustc.edu.cn"
- "https://registry-1.docker.io"
EOF
启动k3s集群
k3d cluster create mycluster \
--api-port 127.0.0.1:6443 \
-p 80:80@loadbalancer \
-p 443:443@loadbalancer \
-i rancher/k3s:v1.18.6-k3s1 \
--volume "${HOME}/registries.yaml:/etc/rancher/k3s/registries.yaml" \
--k3s-server-arg "--no-deploy=traefik"
3 获取凭证
运行下面的命令获取你的凭证,将其保存在文件中并导出到你的环境中:
cat ~/.kube/config
通过运行一个简单的 Kubectl 命令来测试你是否可以访问集群。
kubectl自行安装
kubectl cluster-info
4 安装Traefik2
我们可以直接使用 Helm 来快速安装 Traefik 2 helm安装本文不再赘述
# Add Traefik's chart repository to Helm
helm repo add traefik https://helm.traefik.io/traefik
helm repo update
helm install traefik traefik/traefik
安装到指定命名空间
# Install in a Dedicated Namespace
kubectl create ns traefik-v2
# Install in the namespace "traefik-v2"
helm install --namespace=traefik-v2 traefik traefik/traefik
大概需要2-3分钟 出于安全考虑,默认情况下HelmChart不公开Traefik Dashboard。 等待traefik pod running后通过端口转发检查traefik是否正常工作。
kubectl port-forward --address=0.0.0.0 $(kubectl get pods --selector "app.kubernetes.io/name=traefik" --output=name) 9000:9000
# namespaces traefik-v2
kubectl port-forward --address=0.0.0.0 -n traefik-v2 $(kubectl get pods -n traefik-v2 --selector "app.kubernetes.io/name=traefik" --output=name) 9000:9000
通过master节点IP:9000/dashboard/
访问traefik仪表盘
5 部署应用
接下来部署一个简单的应用程序来验证我们的 Ingress Controller 是否正确配置了
我将demo的yml文件放在github
在这个例子中,暴露了两个服务,每一个 URL 会被发送到对应服务上,我们可以在 Traefik Dashboard 上看到新的路由器。
要测试这个应用我们可以直接在浏览器中访问相应的域名即可,这是因为上面我们安装 Traefik 的时候自动创建了一个 LoadBalancer 的 Service 服务。