本地Kubernetes操作 operating-k8s-local

本地Kubernetes操作技能专注于使用Minikube工具在本地计算机上搭建、管理和调试Kubernetes集群环境,主要用于软件开发测试、容器化应用部署和云原生技术学习。关键词:Minikube本地K8s、Kubernetes开发环境、容器编排测试、云原生本地部署、DevOps工具链、微服务调试、Docker镜像本地加载、kubectl命令操作。

Docker/K8s 0 次安装 0 次浏览 更新于 3/2/2026

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部署