深入浅出GitHub Top项目:Kubernetes在macOS Monterey的运行与调试

云信安装大师
90
AI 质量分
10 5 月, 2025
3 分钟阅读
0 阅读

深入浅出GitHub Top项目:Kubernetes在macOS Monterey的运行与调试

引言

Kubernetes(简称K8s)作为GitHub上最受欢迎的开源项目之一,是容器编排领域的事实标准。本文将带你从零开始,在macOS Monterey系统上搭建本地Kubernetes环境,并运行你的第一个应用。无论你是开发人员还是DevOps工程师,掌握本地Kubernetes环境都是必备技能。

准备工作

系统要求

  • macOS Monterey (12.x)
  • 至少4GB可用内存(推荐8GB以上)
  • 20GB可用磁盘空间
  • 稳定的网络连接

必备工具安装

首先我们需要安装几个基础工具:

代码片段
# 安装Homebrew(如果尚未安装)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 安装Docker Desktop(包含Kubernetes功能)
brew install --cask docker

# 安装kubectl(Kubernetes命令行工具)
brew install kubectl

# 验证kubectl安装
kubectl version --client

Docker Desktop配置Kubernetes

  1. 启动Docker Desktop
    在应用程序中找到Docker并启动,等待鲸鱼图标变为绿色。

  2. 启用Kubernetes
    点击Docker图标 → Preferences → Kubernetes → 勾选”Enable Kubernetes” → Apply & Restart

    注意:首次启用可能需要10-15分钟下载相关镜像

  3. 验证集群状态

    代码片段
    kubectl cluster-info
    kubectl get nodes
    

    应该看到类似输出:

    代码片段
    NAME             STATUS   ROLES                  AGE   VERSION
    docker-desktop   Ready    control-plane,master   5m    v1.21.5
    

Minikube方案(备选)

如果你不想使用Docker Desktop,也可以选择Minikube:

代码片段
# 安装minikube
brew install minikube

# 启动集群(使用docker驱动)
minikube start --driver=docker

# 验证
minikube status
kubectl get nodes

优点:资源占用更小;缺点:部分功能可能受限

部署第一个应用:Nginx示例

让我们部署一个简单的Nginx服务来验证集群:

代码片段
# 创建部署
kubectl create deployment nginx-demo --image=nginx:latest

# 查看部署状态
kubectl get deployments

# 暴露服务到端口(NodePort方式)
kubectl expose deployment nginx-demo --type=NodePort --port=80

# 获取服务URL访问地址(如果是minikube需要额外命令)
kubectl get services nginx-demo

# Docker Desktop用户可以直接访问:
open http://localhost:$(kubectl get svc nginx-demo -o jsonpath='{.spec.ports[0].nodePort}')

原理说明
1. create deployment创建了一个Pod运行Nginx容器
2. expose命令创建了Service资源,提供网络访问入口
3. NodePort类型会在30000-32767范围内分配一个端口映射到Pod的80端口

Kubernetes Dashboard可视化界面

代码片段
# 部署Dashboard(官方Web UI)
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml

# 创建访问令牌的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

# 获取访问令牌并启动代理
kubectl -n kubernetes-dashboard create token admin-user 
kubectl proxy 

# Dashboard地址:
open http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

安全提示:Dashboard默认只允许本地访问,生产环境请配置Ingress和HTTPS*

Debug技巧与实践经验

Pod调试命令集锦:

代码片段
# 查看Pod日志(适用于已经运行的Pod)
kubectl logs <pod-name>

# Pod内部执行命令(类似docker exec)
kubectl exec -it <pod-name> -- /bin/bash 

# Pod描述信息(查看失败原因)  
kubectl describe pod <pod-name>

# Port-forward端口转发到本地  
kubectl port-forward <pod-name> <local-port>:<pod-port>

YAML文件最佳实践:

代码片段
apiVersion: apps/v1        # API版本必须正确指定  
kind: Deployment           # K8s资源类型  
metadata:
 name: nginx-deployment    # K8s对象名称  
 labels:
   app: nginx              # Label用于选择器匹配  
spec:
 replicas: 3               # Pod副本数  
 selector:
   matchLabels:
     app: nginx            # Label选择器必须匹配template中的labels  
 template:
   metadata:
     labels:
       app: nginx          # Pod标签  
   spec:
     containers:
     - name: nginx         # Container名称  
       image: nginx:1.19   
       ports:
       - containerPort: 80 # Container暴露端口  
       resources:
         requests:
           cpu: "100m"     # CPU请求(0.1核)  
           memory: "128Mi" # Memory请求(128MB)  
         limits:
           cpu: "500m"     # CPU限制(0.5核)  
           memory: "512Mi" # Memory限制(512MB)

经验分享
1. Always指定资源requests/limits避免资源争抢
2. Label命名遵循<app>-<component>格式便于管理

Clean Up清理资源

代码片段
# Delete deployment and service   
kubectl delete deployment nginx-demo   
kubectl delete service nginx-demo  

# Reset entire cluster (谨慎使用)   
kubectl delete all --all   

FAQ常见问题解决

Q1: Pod一直处于Pending状态?
A:通常是因为资源不足或调度问题。使用describe pod查看具体原因

Q2: Error from server (Forbidden)…?
A:权限问题,确保使用了正确的context和namespace

Q3: Docker Desktop的Kubernetes无法启动?
A:尝试重置集群或重装Docker Desktop

Conclusion总结

通过本文我们完成了:

✅ macOS Monterey上的Kubernetes环境搭建
✅ Docker Desktop/Minikube两种方案实现
✅ Nginx示例应用的部署与访问
✅ Dashboard可视化界面配置
✅ Debug技巧与YAML最佳实践

下一步可以尝试:

➡️ Helm包管理器简化应用部署
➡️ Ingress控制器配置域名访问
➡️ Prometheus监控集群状态

希望这篇指南能帮助你顺利开始Kubernetes之旅!遇到问题欢迎在评论区交流。

原创 高质量