name: 本地K8s操作 description: | 使用Minikube操作本地Kubernetes集群,用于开发和测试。 适用于设置本地K8s环境、本地部署应用程序或调试K8s问题。 涵盖Minikube、kubectl基础、本地镜像加载和网络配置。
本地Kubernetes操作
快速开始
# 启动带资源的集群
minikube start --memory=8192 --cpus=4
# 启用必要插件
minikube addons enable ingress
minikube addons enable metrics-server
# 将Docker指向Minikube
eval $(minikube docker-env)
# 构建并部署
docker build -t myapp:local .
kubectl apply -f k8s/
Minikube基础
集群管理
minikube start # 默认启动
minikube start --memory=8192 --cpus=4 # 指定资源
minikube start --driver=docker # 指定驱动
minikube status # 检查状态
minikube stop # 停止(保留状态)
minikube delete # 完全删除
多集群管理
minikube start -p my-cluster # 命名集群
minikube profile my-cluster # 切换集群
minikube profile list # 列出所有集群
插件管理
minikube addons list # 列出可用插件
minikube addons enable ingress # 外部访问必需
minikube addons enable metrics-server # 用于kubectl top
minikube addons enable dashboard # Web界面
minikube addons enable storage-provisioner # 用于PVC
访问服务
# 方法1:NodePort
minikube service my-service --url
# 方法2:LoadBalancer(需要隧道)
minikube tunnel # 在单独终端运行
# 方法3:端口转发
kubectl port-forward svc/my-service 8080:80
使用本地Docker镜像
# 指向Minikube的Docker
eval $(minikube docker-env)
# 直接构建到Minikube
docker build -t my-app:local .
# 在清单中使用imagePullPolicy: Never
# 重置回本地Docker
eval $(minikube docker-env -u)
kubectl基础
上下文管理
kubectl config current-context # 当前上下文
kubectl config get-contexts # 列出所有上下文
kubectl config use-context minikube # 切换上下文
kubectl config set-context --current --namespace=my-ns # 设置默认命名空间
获取信息
kubectl get pods # 当前命名空间
kubectl get pods -A # 所有命名空间
kubectl get pods -o wide # 带节点/IP信息
kubectl get all # 所有资源
kubectl describe pod my-pod # 详细信息
kubectl get events --sort-by='.lastTimestamp' # 最近事件
日志查看
kubectl logs my-pod # 当前日志
kubectl logs my-pod -f # 实时跟踪
kubectl logs my-pod -c container # 特定容器
kubectl logs my-pod --previous # 崩溃后日志
kubectl logs my-pod --tail=50 # 最后50行
创建资源
kubectl apply -f manifest.yaml
kubectl create deployment nginx --image=nginx
kubectl create configmap my-config --from-literal=key=value
kubectl create secret generic my-secret --from-literal=password=secret
# 生成YAML
kubectl create deployment nginx --image=nginx --dry-run=client -o yaml
修改资源
kubectl edit deployment my-deploy
kubectl scale deployment my-deploy --replicas=3
kubectl set image deployment/my-deploy container=image:v2
kubectl rollout restart deployment/my-deploy
调试工具
kubectl exec -it my-pod -- /bin/sh # 进入Pod shell
kubectl exec my-pod -- env # 执行命令
kubectl port-forward pod/my-pod 8080:80 # 端口转发
kubectl top pods # 资源使用情况
kubectl top nodes
资源清单
部署
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deploy
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: main
image: my-app:local
imagePullPolicy: Never # 本地镜像专用
ports:
- containerPort: 8000
livenessProbe:
httpGet:
path: /health
port: 8000
initialDelaySeconds: 30
readinessProbe:
httpGet:
path: /health
port: 8000
initialDelaySeconds: 5
服务
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: ClusterIP # 或NodePort、LoadBalancer
selector:
app: my-app
ports:
- port: 80
targetPort: 8000
配置映射与密钥
apiVersion: v1
kind: ConfigMap
metadata:
name: my-config
data:
DATABASE_HOST: postgres
DATABASE_PORT: "5432"
---
apiVersion: v1
kind: Secret
metadata:
name: my-secret
type: Opaque
stringData:
password: mysecretpassword
入口
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
ingressClassName: nginx
rules:
- host: myapp.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
本地开发工作流
# 1. 启动Minikube
minikube start --memory=8192 --cpus=4
# 2. 启用插件
minikube addons enable ingress
minikube addons enable metrics-server
# 3. 指向Minikube Docker
eval $(minikube docker-env)
# 4. 构建镜像
docker build -t myapp/api:local ./api
docker build -t myapp/web:local ./web
# 5. 部署
kubectl apply -f k8s/
# 6. 访问
minikube service myapp-web --url
# 或使用入口:
echo "$(minikube ip) myapp.local" | sudo tee -a /etc/hosts
调试快速参考
# Pod无法启动?
kubectl describe pod my-pod # 检查Events部分
# 容器崩溃?
kubectl logs my-pod --previous # 崩溃容器日志
# 网络问题?
kubectl exec -it my-pod -- nslookup my-service
kubectl exec -it my-pod -- wget -qO- http://my-service:80
# 资源问题?
kubectl top pods
kubectl top nodes
验证
运行:python scripts/verify.py
相关技能
containerizing-applications- Docker和Helm图表deploying-cloud-k8s- 云Kubernetes部署