K3D是一个轻量级的工具,用于在Docker中运行K3S。
基础环境
1
2
3
4
5
|
OS: macOS
Architecture: ARM64
Driver: Docker
Installer: Homebrew
|
安装使用K3D
1
2
3
4
|
➜ brew install k3d
==> Installing k3d
==> Pouring k3d--5.6.0.arm64_sonoma.bottle.tar.gz
==> k3d
|
1
2
3
|
➜ k3d version
k3d version v5.6.0
k3s version v1.27.5-k3s1 (default)
|
创建一个名为mycluster的K8S集群,并将Ingress的80端口暴露到localhost的8081端口。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
➜ k3d cluster create mycluster -p "8081:80@loadbalancer" --agents 1
INFO[0000] portmapping '8081:80' targets the loadbalancer: defaulting to [servers:*:proxy agents:*:proxy]
INFO[0000] Prep: Network
INFO[0000] Created network 'k3d-mycluster'
INFO[0000] Created image volume k3d-mycluster-images
INFO[0000] Starting new tools node...
INFO[0000] Starting Node 'k3d-mycluster-tools'
INFO[0001] Creating node 'k3d-mycluster-server-0'
INFO[0001] Creating node 'k3d-mycluster-agent-0'
INFO[0001] Creating LoadBalancer 'k3d-mycluster-serverlb'
INFO[0001] Using the k3d-tools node to gather environment information
INFO[0001] HostIP: using network gateway 192.168.167.1 address
INFO[0001] Starting cluster 'mycluster'
INFO[0001] Starting servers...
INFO[0001] Starting Node 'k3d-mycluster-server-0'
INFO[0004] Starting agents...
INFO[0004] Starting Node 'k3d-mycluster-agent-0'
INFO[0007] Starting helpers...
INFO[0007] Starting Node 'k3d-mycluster-serverlb'
INFO[0013] Injecting records for hostAliases (incl. host.k3d.internal) and for 3 network members into CoreDNS configmap...
INFO[0015] Cluster 'mycluster' created successfully!
INFO[0015] You can now use it like this:
kubectl cluster-info
|
1
2
3
4
|
➜ kubectl cluster-info
Kubernetes control plane is running at https://0.0.0.0:56685
CoreDNS is running at https://0.0.0.0:56685/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
Metrics-server is running at https://0.0.0.0:56685/api/v1/namespaces/kube-system/services/https:metrics-server:https/proxy
|
部署测试Nginx Service
1
2
3
|
➜ kubectl get all
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 48s
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
➜ vim nginx-deploy-svc-ingress.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
spec:
selector:
app: nginx
ports:
- name: http
port: 80
type: NodePort
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
annotations:
ingress.kubernetes.io/ssl-redirect: "false"
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-svc
port:
number: 80
|
1
2
3
4
|
➜ kubectl apply -f nginx-deploy-svc-ingress.yaml
deployment.apps/nginx-deploy created
service/nginx-svc created
ingress.networking.k8s.io/nginx-ingress created
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
➜ kubectl get all
NAME READY STATUS RESTARTS AGE
pod/nginx-deploy-55f598f8d-z9n5v 1/1 Running 0 2m
pod/nginx-deploy-55f598f8d-h5zkb 1/1 Running 0 2m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 3m12s
service/nginx-svc NodePort 10.43.58.173 <none> 80:32459/TCP 2m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx-deploy 2/2 2 2 2m
NAME DESIRED CURRENT READY AGE
replicaset.apps/nginx-deploy-55f598f8d 2 2 2 2m
|
1
2
3
|
➜ kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
nginx-ingress <none> * 192.168.167.2,192.168.167.3 80 2m56s
|
通过Ingress访问Nginx: http://localhost:8081
清理K3D
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
➜ k3d cluster list
NAME SERVERS AGENTS LOADBALANCER
mycluster 1/1 1/1 true
➜ k3d cluster delete mycluster
INFO[0000] Deleting cluster 'mycluster'
INFO[0000] Deleting cluster network 'k3d-mycluster'
INFO[0000] Deleting 1 attached volumes...
INFO[0000] Removing cluster details from default kubeconfig...
INFO[0000] Removing standalone kubeconfig file (if there is one)...
INFO[0000] Successfully deleted cluster mycluster!
➜ k3d cluster list
NAME SERVERS AGENTS LOADBALANCER
|