KinD是一个工具,用于在Docker中运行本地Kubernetes集群。
基础环境
1
2
3
4
5
|
OS: macOS
Architecture: ARM64
Driver: Docker
Installer: Homebrew
|
安装使用KinD
1
2
3
4
|
➜ brew install kind
==> Installing kind
==> Pouring kind--0.20.0.arm64_sonoma.bottle.tar.gz
==> kind
|
1
2
|
➜ kind version
kind v0.20.0 go1.21.1 darwin/arm64
|
创建一个名为mycluster的K8S集群,并将hostPort的30080端口暴露到localhost的30080端口。
1
2
3
4
5
6
7
8
|
➜ vim config-with-port-mapping.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 30080
hostPort: 30080
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
➜ kind create cluster --name mycluster --config=config-with-port-mapping.yaml
Creating cluster "mycluster" ...
✓ Ensuring node image (kindest/node:v1.27.3)
✓ Preparing nodes
✓ Writing configuration
✓ Starting control-plane
✓ Installing CNI
✓ Installing StorageClass
Set kubectl context to "kind-mycluster"
You can now use your cluster with:
kubectl cluster-info --context kind-mycluster
Thanks for using kind!
|
1
2
3
|
➜ kubectl cluster-info --context kind-mycluster
Kubernetes control plane is running at https://127.0.0.1:64070
CoreDNS is running at https://127.0.0.1:64070/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
|
1
2
|
➜ kind get clusters
mycluster
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
➜ kubectl get nodes
NAME STATUS ROLES AGE VERSION
mycluster-control-plane Ready control-plane 85s v1.27.3
➜ kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-5d78c9869d-6zdpz 1/1 Running 0 81s
coredns-5d78c9869d-twr96 1/1 Running 0 81s
etcd-mycluster-control-plane 1/1 Running 0 94s
kindnet-x9zrb 1/1 Running 0 81s
kube-apiserver-mycluster-control-plane 1/1 Running 0 96s
kube-controller-manager-mycluster-control-plane 1/1 Running 0 94s
kube-proxy-5zzch 1/1 Running 0 81s
kube-scheduler-mycluster-control-plane 1/1 Running 0 94s
➜ kubectl get namespaces
NAME STATUS AGE
default Active 108s
kube-node-lease Active 108s
kube-public Active 108s
kube-system Active 108s
local-path-storage Active 104s
|
部署测试Nginx Service
1
2
3
|
➜ kubectl get all
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 119s
|
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
|
➜ vim nginx-deploy-svc-portmapping.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
nodePort: 30080
type: NodePort
|
1
2
3
|
➜ kubectl apply -f nginx-deploy-svc-portmapping.yaml
deployment.apps/nginx-deploy created
service/nginx-svc 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-f2c2q 1/1 Running 0 35s
pod/nginx-deploy-55f598f8d-ljxd8 1/1 Running 0 35s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5m5s
service/nginx-svc NodePort 10.96.221.64 <none> 80:30080/TCP 35s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx-deploy 2/2 2 2 35s
NAME DESIRED CURRENT READY AGE
replicaset.apps/nginx-deploy-55f598f8d 2 2 2 35s
|
访问Nginx: http://localhost:30080
清理KinD
1
2
3
4
5
6
|
➜ kind delete cluster --name mycluster
Deleting cluster "mycluster" ...
Deleted nodes: ["mycluster-control-plane"]
➜ kind get clusters
No kind clusters found.
|