本文主要介绍了使用k3d和traefik快速搭建开发环境
更新于 2021-03-28
介绍
一套完成的k8s系统比较复杂,需要很多的资源,部署起来也需要较长的时间。如果是开发环境,对于集群要求快速停止和开启、可以有多个集群并行、使用最少的资源,k3d就可以满足。
k3d是一个非常轻量的集群,可以快速构建用于开发的k8s集群,其具有一下的特点:
- 集群默认使用sqlite而不是etcd存储数据;
- 所有的组件都封装在一个二进制程序中;
- 在docker内运行,快速启停;
k3d启动集群
安装k3d
直接运行下面的命令安装k3s:
1
| curl -s https://raw.githubusercontent.com/rancher/k3d/main/install.sh | bash
|
这个会在系统中安装k3d
命令程序,使用下面的命令查看帮助信息:
启动集群
使用下面的命令启动集群:
1 2 3 4 5
| 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"
|
默认的k3d绑定的是traefik1,这里使用其他控制器,所以默认不安装
在某些云环境下,只能使用docker的host网络模式,那么创建集群则使用下面的命令:
1 2 3 4 5 6 7
| k3d cluster create devcluster \ --network host \ --api-port 127.0.0.1:6443 \ -p 80:80@loadbalancer \ -p 443:443@loadbalancer \ --k3s-server-arg "--no-deploy=traefik" \ --no-hostip
|
指定network类型为host,并不将宿主机ip地址替换到程序中
查看集群
查看当前创建的集群直接使用下面的命令:
1 2 3 4
| k3d cluster ls
NAME SERVERS AGENTS LOADBALANCER devcluster 1/1 0/0 false
|
可以看到当前的集群已经创建好了
设置kubectl
首先设置yum源,安装kubectl:
1 2 3 4 5 6 7 8 9 10 11
| cat > /etc/yum.repos.d/kubernetes.repo << EOF [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF
yum install -y kubectl-1.17.3
|
然后获取集群devcluster
的认证信息:
1
| k3d kubeconfig get devcluster > /root/.kube/config
|
现在就可以使用kubectl来操作集群了:
1 2 3 4 5 6 7 8 9
| kubectl get node NAME STATUS ROLES AGE VERSION k3d-devcluster-server-0 Ready master 26m v1.19.3+k3s2
kubectl get pod --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE kube-system metrics-server-7b4f8b595-pghbq 1/1 Running 0 26m kube-system local-path-provisioner-7ff9579c6-hmg6k 1/1 Running 0 26m kube-system coredns-66c464876b-5lpn5 1/1 Running 0 26m
|
部署traefik 2
安装helm3
1 2 3 4 5 6
| wget https://get.helm.sh/helm-v3.2.1-linux-amd64.tar.gz tar zxf helm-v3.2.1-linux-amd64.tar.gz cp linux-amd64/helm /usr/local/bin/ helm version
version.BuildInfo{Version:"v3.2.1", GitCommit:"fe51cd1e31e6a202cba7dead9552a6d418ded79a", GitTreeState:"clean", GoVersion:"go1.13.10"}
|
安装traefik 2
1 2 3 4 5 6 7 8
| helm repo add traefik https://containous.github.io/traefik-helm-chart helm repo list helm install traefik traefik/traefik kubectl get pod -n default
NAME READY STATUS RESTARTS AGE svclb-traefik-ldtfr 2/2 Running 0 26s traefik-5fc4947cf9-w695g 1/1 Running 0 26s
|
设置traefik的dashboard
1
| kubectl port-forward $(kubectl get pods --selector "app.kubernetes.io/name=traefik" --output=name) --address 0.0.0.0 9000:9000
|
通过浏览器访问http://<宿主机IP>:9000/dashboard/
即可进入traefik的dashboard

应用部署
这里部署一个whoami
的测试服务:
1 2
| kubectl create deploy whoami --image containous/whoami kubectl expose deploy whoami --port 80
|
然后创建一个ingress暴露服务让外部访问:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| 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
|
使用下面的命令进行创建:
1 2
| kubectl apply -f whoami-ingress.yaml kubectl get ingress
|
直接在浏览器,访问:https://<宿主机IP>
即可:
