本文主要介绍了使用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
k3d -h

启动集群

使用下面的命令启动集群:

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
# whoami-ingress.yaml
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>即可: