1. 环境准备
1.1 先决条件
你需要一台安装了 Docker 的计算机(Linux、macOS 或 Windows)。
需要安装 kubectl 以管理 Kubernetes 集群。
1.2 安装 Docker
如果你尚未安装 Docker,请根据你的操作系统安装:
Linux (Ubuntu):
sudo apt update
sudo apt install -y docker.io
1.3 安装 kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" chmod +x kubectl sudo mv kubectl /usr/local/bin/
验证安装:
kubectl version --client
2. 安装 Kind
2.1 下载并安装 Kind
curl -Lo ./kind https://kind.sigs.k8s.io/dl/latest/kind-linux-amd64 chmod +x ./kind sudo mv ./kind /usr/local/bin/kind
验证 Kind 是否正确安装:
kind version
3. 创建自定义多节点集群
如果你想创建一个多节点集群(1 个控制平面 + 2 个工作节点),你需要一个 YAML 配置文件。
3.1 创建 Kind 配置文件
这里我将有可能用到的端口都映射到宿主机了,因为docker容器一旦启动,就没办法增加端口映射,所以需要创建的时候配置好
cat <<EOF > kind-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 30080 # Kubernetes 内部端口 (NodePort)
hostPort: 30080 # 物理机访问端口
protocol: TCP
- containerPort: 30443 # 另一服务的端口,例如 Kubernetes Dashboard
hostPort: 30443
protocol: TCP
- containerPort: 6443 # 另一服务的端口,例如 Kubernetes Dashboard
hostPort: 36443
protocol: TCP
- containerPort: 443 # 另一服务的端口,例如 Kubernetes Dashboard
hostPort: 35443
protocol: TCP
- containerPort: 80 # 另一服务的端口,例如 Kubernetes Dashboard
hostPort: 34080
protocol: TCP
- role: worker
- role: worker
EOF
3.2 运行 Kind 集群
kind create cluster --name my-cluster --config kind-config.yaml
这个命令会创建一个拥有 1 个控制节点和 2 个工作节点的 Kubernetes 集群。
3.3 验证集群节点
kubectl get nodes
你应该看到类似的输出:
NAME STATUS ROLES AGE VERSION
my-cluster-control-plane Ready control-plane 2m v1.28.0
my-cluster-worker Ready <none> 1m v1.28.0
my-cluster-worker2 Ready <none> 1m v1.28.0
4. 部署 Kubernetes Dashboard
4.1 部署Kubernetes Dashboard
官方提供了 Dashboard 的 YAML 文件,你可以直接应用:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
说明:这个命令会创建 Dashboard 所需的
Deployment
、Service
、ClusterRole
等资源。
4.2 查看 Dashboard Pod 状态
确认 Dashboard 是否正确运行:
kubectl get pods -n kubernetes-dashboard
你应该能看到类似的输出:
NAME READY STATUS RESTARTS AGE
kubernetes-dashboard-7b544877d5-abcde 1/1 Running 0 1m
dashboard-metrics-scraper-6b5c59d6d7-fghij 1/1 Running 0 1m
如果 STATUS
不是 Running
,可以用 kubectl describe pod <pod-name> -n kubernetes-dashboard
查看具体错误。
4.3 配置访问方式
默认情况下,Dashboard 的 Service
类型是 ClusterIP
,无法直接从外部访问,你需要选择一种方式访问它:
方法 1:使用 kubectl proxy
在终端运行:
kubectl proxy
然后在浏览器中访问:
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
注意:这种方式只在运行
kubectl proxy
的终端有效,并且访问受限,需要身份验证。
方法 2:修改 Service 为 NodePort
如果你希望能够直接通过 http://localhost:30080
访问 Dashboard,可以修改 Service:
kubectl patch svc kubernetes-dashboard -n kubernetes-dashboard -p '{
"spec": {
"type": "NodePort",
"ports": [
{
"port": 443,
"targetPort": 8443,
"nodePort": 30080
}
]
}
}'
这里 30000
就是你可以访问的端口,现在可以通过:
https://localhost:30080
来访问 Dashboard(可能会有 HTTPS 证书警告,忽略即可)。
5. 创建管理员用户(ServiceAccount + RBAC)
Dashboard 需要身份验证,默认情况下没有创建任何用户。你需要创建一个具有管理员权限的 ServiceAccount。
5.1 创建 ServiceAccount 和 ClusterRoleBinding
运行以下命令:
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
EOF
5.2 获取访问 Token
执行以下命令:
kubectl -n kubernetes-dashboard create token admin-user
这个命令会返回一个长字符串,如:
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
这个 Token 就是登录 Dashboard 所需的凭据。
6. 访问 Kubernetes Dashboard
如果使用
kubectl proxy
方式,在浏览器中访问:http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
如果使用 NodePort 方式,在浏览器中访问:
https://localhost:30080
在登录页面,选择 “令牌”(Token) 方式,粘贴上面获取的 Token,点击 “登录”。
评论区