K3D部署K3S本地DEV环境

利用k3d可以在本地快速的部署k3s集群,可以很好的学习与部署k3s, k8s等相关知识,也能够结合其作为本地dev环境进行项目开发和测试。
安装
利用以下命令行可以快速安装二进制执行包
wget -q -O - https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash
体验
- 创建一个集群,并将ingress的80端口映射到
localhost:8081
k3d cluster create --api-port 6550 -p "8081:80@loadbalancer" --agents 2
输出如下:
INFO[0000] portmapping '8081:80' targets the loadbalancer: defaulting to [servers:*:proxy agents:*:proxy]
INFO[0000] Prep: Network
INFO[0000] Created network 'k3d-k3s-default'
INFO[0000] Created image volume k3d-k3s-default-images
INFO[0000] Starting new tools node...
INFO[0001] Creating node 'k3d-k3s-default-server-0'
INFO[0002] Pulling image 'ghcr.io/k3d-io/k3d-tools:5.6.0'
INFO[0015] Pulling image 'docker.io/rancher/k3s:v1.27.4-k3s1'
INFO[0080] Creating node 'k3d-k3s-default-agent-0'
INFO[0081] Creating node 'k3d-k3s-default-agent-1'
INFO[0081] Creating LoadBalancer 'k3d-k3s-default-serverlb'
INFO[0083] Pulling image 'ghcr.io/k3d-io/k3d-proxy:5.6.0'
INFO[0093] Starting Node 'k3d-k3s-default-tools'
INFO[0478] Using the k3d-tools node to gather environment information
INFO[0478] HostIP: using network gateway 172.19.0.1 address
INFO[0478] Starting cluster 'k3s-default'
INFO[0478] Starting servers...
INFO[0478] Starting Node 'k3d-k3s-default-server-0'
INFO[0482] Starting agents...
INFO[0482] Starting Node 'k3d-k3s-default-agent-1'
INFO[0482] Starting Node 'k3d-k3s-default-agent-0'
INFO[0486] Starting helpers...
INFO[0486] Starting Node 'k3d-k3s-default-serverlb'
INFO[0493] Injecting records for hostAliases (incl. host.k3d.internal) and for 4 network members into CoreDNS configmap...
INFO[0495] Cluster 'k3s-default' created successfully!
INFO[0495] You can now use it like this:
kubectl cluster-info
- 设置 kubectl 配置环境变量
export KUBECONFIG="$(k3d kubeconfig write k3s-default)"
- 部署 nginx pod
kubectl create deployment nginx --image=nginx
- 创建 ClusterIP 服务节点
kubectl create service clusterip nginx --tcp=80:80
- 按照下列配置创建一个 ingress 对象
kubectl apply -f thatfile.yaml
# apiVersion: networking.k8s.io/v1beta1 # for k3s < v1.19
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
- 现在可以尝试用 curl 访问对应的网址
curl localhost:8081/
- k3d 运行情况
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-77b4fdf86c-j6vkc 1/1 Running 0 29m
$ kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 50m
nginx ClusterIP 10.43.222.243 <none> 80/TCP 2m47s
$ kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
nginx traefik * 172.19.0.2,172.19.0.3,172.19.0.4 80 2m10s
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
090589bccce9 ghcr.io/k3d-io/k3d-proxy:5.6.0 "/bin/sh -c nginx-pr…" 55 minutes ago Up 55 minutes 0.0.0.0:8081->80/tcp, :::8081->80/tcp, 0.0.0.0:6550->6443/tcp k3d-k3s-default-serverlb
ff8213e2220f rancher/k3s:v1.27.4-k3s1 "/bin/k3d-entrypoint…" About an hour ago Up 55 minutes k3d-k3s-default-agent-1
5974730df235 rancher/k3s:v1.27.4-k3s1 "/bin/k3d-entrypoint…" About an hour ago Up 55 minutes k3d-k3s-default-agent-0
045b863df56b rancher/k3s:v1.27.4-k3s1 "/bin/k3d-entrypoint…" About an hour ago Up 55 minutes k3d-k3s-default-server-0
参考
Publish on 2024-03-26,Update on 2025-02-10