Minikube教程#
技术介绍#
Minikube是一个轻量级的Kubernetes发行版,专为在本地机器上运行单节点Kubernetes集群而设计。它由Kubernetes SIGs(特别兴趣小组)开发和维护,允许开发者在本地环境中快速搭建Kubernetes集群,用于开发、测试和学习Kubernetes。
Minikube核心概念#
- 单节点集群:在本地机器上运行的Kubernetes集群,包含控制平面和工作节点
- 虚拟机驱动:使用虚拟机技术(如VirtualBox、KVM、Hyper-V等)运行Kubernetes节点
- 容器运行时:支持多种容器运行时,如Docker、containerd等
- 插件系统:通过插件扩展Minikube功能
Minikube架构#
- Minikube CLI:命令行工具,用于管理Minikube集群
- 虚拟机:运行Kubernetes节点的虚拟机
- Kubernetes组件:在虚拟机中运行的Kubernetes控制平面和工作节点组件
入门级使用#
安装Minikube#
在不同操作系统上安装Minikube:
# Linux/macOS
# 使用curl安装
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# macOS使用Homebrew安装
brew install minikube
# Windows使用Chocolatey安装
choco install minikube
# 验证安装
minikube version基本Minikube命令#
使用Minikube的基本命令:
# 查看Minikube版本
minikube version
# 启动集群
minikube start
# 停止集群
minikube stop
# 删除集群
minikube delete
# 查看集群状态
minikube status
# 查看集群信息
kubectl cluster-info
# 查看节点
kubectl get nodes创建第一个Minikube集群#
创建一个基本的Minikube集群:
# 启动默认集群
minikube start
# 查看集群状态
minikube status
# 查看节点
kubectl get nodes
# 部署应用
kubectl create deployment nginx --image=nginx
# 暴露服务
kubectl expose deployment nginx --port=80 --type=NodePort
# 查看服务
kubectl get services
# 访问应用
minikube service nginx
# 停止集群
minikube stop
# 删除集群
minikube delete初级使用#
Minikube配置选项#
使用Minikube配置选项:
# 指定虚拟机驱动
minikube start --driver=virtualbox
# 指定容器运行时
minikube start --container-runtime=containerd
# 指定Kubernetes版本
minikube start --kubernetes-version=v1.23.0
# 指定内存和CPU
minikube start --memory=4096 --cpus=2
# 使用本地Docker守护进程
minikube start --driver=docker
# 查看可用的配置选项
minikube config view
# 设置默认配置
minikube config set driver docker
minikube config set memory 4096
minikube config set cpus 2Minikube网络配置#
配置Minikube网络:
# 查看Minikube IP
minikube ip
# 暴露服务
kubectl expose deployment nginx --port=80 --type=NodePort
# 查看服务URL
minikube service nginx --url
# 端口转发
kubectl port-forward service/nginx 8080:80
curl http://localhost:8080
# 使用Ingress
minikube addons enable ingress
# 部署Ingress资源
kubectl apply -f ingress.yaml
# ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
spec:
rules:
- host: nginx.minikube
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx
port:
number: 80
# 添加主机名到/etc/hosts
echo "$(minikube ip) nginx.minikube" | sudo tee -a /etc/hosts
# 访问应用
curl http://nginx.minikubeMinikube存储配置#
配置Minikube存储:
# 创建持久卷
kubectl apply -f pv.yaml
# pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
# 创建持久卷声明
kubectl apply -f pvc.yaml
# pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
# 创建使用PVC的Pod
kubectl apply -f pod-with-pvc.yaml
# pod-with-pvc.yaml
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
volumeMounts:
- name: my-volume
mountPath: /usr/share/nginx/html
volumes:
- name: my-volume
persistentVolumeClaim:
claimName: my-pvc
# 查看存储状态
kubectl get pv
kubectl get pvc中级使用#
Minikube插件#
使用Minikube插件:
# 查看可用插件
minikube addons list
# 启用插件
minikube addons enable dashboard
minikube addons enable metrics-server
minikube addons enable ingress
minikube addons enable storage-provisioner
minikube addons enable metallb
# 禁用插件
minikube addons disable dashboard
# 查看已启用的插件
minikube addons list | grep STATUS | grep enabledMinikube Dashboard#
使用Minikube Dashboard:
# 启用Dashboard插件
minikube addons enable dashboard
# 打开Dashboard
minikube dashboard
# 查看Dashboard URL
minikube dashboard --url
# 访问Dashboard
# 在浏览器中打开Dashboard URLMinikube与本地Docker集成#
将Minikube与本地Docker集成:
# 启动Minikube
minikube start
# 使用Minikube的Docker环境
eval $(minikube docker-env)
# 构建镜像
docker build -t my-app:latest .
# 部署应用,使用本地镜像
kubectl apply -f app-deployment.yaml
# app-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 2
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-app:latest
ports:
- containerPort: 8080
# 使用本地镜像,不需要拉取
imagePullPolicy: Never
# 查看应用状态
kubectl get pods中上级使用#
Minikube与CI/CD集成#
将Minikube与CI/CD集成:
# .gitlab-ci.yml
stages:
- build
- test
- deploy
build:
stage: build
script:
- docker build -t my-app:latest .
.test:
stage: test
script:
- curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
- sudo install minikube-linux-amd64 /usr/local/bin/minikube
- minikube start --driver=docker
- eval $(minikube docker-env)
- docker build -t my-app:latest .
- kubectl apply -f app-deployment.yaml
- kubectl wait --for=condition=ready pod -l app=my-app --timeout=90s
- kubectl port-forward service/my-app 8080:80 &
- sleep 5
- curl http://localhost:8080
- minikube delete
# Jenkinsfile
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'docker build -t my-app:latest .'
}
}
stage('Test') {
steps {
sh 'curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64'
sh 'sudo install minikube-linux-amd64 /usr/local/bin/minikube'
sh 'minikube start --driver=docker'
sh 'eval $(minikube docker-env)'
sh 'docker build -t my-app:latest .'
sh 'kubectl apply -f app-deployment.yaml'
sh 'kubectl wait --for=condition=ready pod -l app=my-app --timeout=90s'
sh 'kubectl port-forward service/my-app 8080:80 &'
sh 'sleep 5'
sh 'curl http://localhost:8080'
sh 'minikube delete'
}
}
}
}Minikube多集群#
管理多个Minikube集群:
# 创建多个集群
minikube start --profile cluster1
minikube start --profile cluster2
# 查看集群
minikube profile list
# 切换集群
minikube profile cluster1
kubectl get nodes
minikube profile cluster2
kubectl get nodes
# 停止集群
minikube stop --profile cluster1
minikube stop --profile cluster2
# 删除集群
minikube delete --profile cluster1
minikube delete --profile cluster2Minikube与Kubernetes版本测试#
使用Minikube测试不同Kubernetes版本:
# 启动不同版本的集群
minikube start --kubernetes-version=v1.22.0 --profile k8s-v1.22
minikube start --kubernetes-version=v1.23.0 --profile k8s-v1.23
minikube start --kubernetes-version=v1.24.0 --profile k8s-v1.24
# 查看集群版本
minikube profile k8s-v1.22
kubectl version
minikube profile k8s-v1.23
kubectl version
minikube profile k8s-v1.24
kubectl version
# 测试应用在不同版本上的兼容性
minikube profile k8s-v1.22
kubectl apply -f app-deployment.yaml
minikube profile k8s-v1.23
kubectl apply -f app-deployment.yaml
minikube profile k8s-v1.24
kubectl apply -f app-deployment.yaml高级使用#
Minikube与Operator开发#
使用Minikube开发和测试Kubernetes Operator:
# 安装Operator SDK
curl -LO https://github.com/operator-framework/operator-sdk/releases/download/v1.20.0/operator-sdk_linux_amd64
tar xvf operator-sdk_linux_amd64.tar.gz
chmod +x operator-sdk
mv operator-sdk /usr/local/bin/
# 启动Minikube
minikube start
# 初始化Operator项目
operator-sdk init --domain example.com --repo github.com/example/my-operator
# 创建API和控制器
operator-sdk create api --group apps --version v1alpha1 --kind MyApp --resource --controller
# 构建和推送镜像
eval $(minikube docker-env)
make docker-build docker-push IMG=my-operator:latest
# 部署Operator
make deploy IMG=my-operator:latest
# 查看Operator状态
kubectl get pods -n my-operator-system
# 创建自定义资源实例
kubectl apply -f config/samples/apps_v1alpha1_myapp.yaml
# 查看实例状态
kubectl get myappMinikube与Istio集成#
将Minikube与Istio集成:
# 启动Minikube
minikube start --memory=8192 --cpus=4
# 安装Istio
curl -L https://istio.io/downloadIstio | sh -
cd istio-*
export PATH=$PWD/bin:$PATH
istioctl install --set profile=demo -y
# 部署Bookinfo应用
kubectl label namespace default istio-injection=enabled
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
# 查看应用状态
kubectl get pods
# 访问应用
minikube service productpage
# 查看Istio Dashboard
istioctl dashboard kialiMinikube与Helm集成#
将Minikube与Helm集成:
# 安装Helm
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
# 启动Minikube
minikube start
# 添加Helm仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
# 安装应用
helm install my-nginx bitnami/nginx
# 查看应用状态
helm status my-nginx
kubectl get pods
# 升级应用
helm upgrade my-nginx bitnami/nginx --set service.type=NodePort
# 卸载应用
helm uninstall my-nginx大师级使用#
Minikube与Kubernetes测试#
使用Minikube进行Kubernetes测试:
# 启动Minikube
minikube start
# 克隆Kubernetes仓库
git clone https://github.com/kubernetes/kubernetes.git
cd kubernetes
# 运行测试
make test WHAT=./pkg/kubelet GOFLAGS="-v"
# 运行集成测试
make integration WHAT=./test/integration/network
# 清理测试环境
minikube deleteMinikube与云原生工具链#
集成Minikube与云原生工具链:
# 启动Minikube
minikube start --memory=8192 --cpus=4
# 安装Prometheus和Grafana
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install prometheus prometheus-community/kube-prometheus-stack
# 查看监控组件
kubectl get pods -n default
# 访问Grafana
minikube service prometheus-grafana
# 安装ELK Stack
helm repo add elastic https://helm.elastic.co
helm install elasticsearch elastic/elasticsearch --set replicas=1
helm install kibana elastic/kibana
helm install filebeat elastic/filebeat
# 查看ELK组件
kubectl get pods -n default
# 访问Kibana
minikube service kibana-kb-httpMinikube与DevSpace集成#
将Minikube与DevSpace集成:
# 安装DevSpace
curl -s -L "https://github.com/loft-sh/devspace/releases/latest" | sed -nE 's!.*"([^"]*devspace-[^"]*linux-amd64)".*!https://github.com\1!p' | xargs -n 1 curl -L -o devspace && chmod +x devspace; sudo mv devspace /usr/local/bin/
# 启动Minikube
minikube start
# 初始化DevSpace项目
devspace init
# 部署应用
devspace deploy
# 开发模式
devspace dev
# 查看应用状态
devspace status
# 清理环境
devspace purge实战案例#
案例一:本地开发环境#
场景:为开发团队创建一致的本地Kubernetes开发环境。
解决方案:使用Minikube创建标准化的本地集群。
实施步骤:
安装Minikube:
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 sudo install minikube-linux-amd64 /usr/local/bin/minikube配置Minikube:
minikube config set driver docker minikube config set memory 4096 minikube config set cpus 2启动集群:
minikube start部署开发工具:
minikube addons enable dashboard minikube addons enable metrics-server minikube addons enable ingress
结果:
- 成功创建了标准化的本地开发环境
- 部署了开发所需的基础设施
- 团队成员可以使用相同的环境进行开发
案例二:CI/CD测试环境#
场景:在CI/CD pipeline中使用Minikube进行应用测试。
解决方案:集成Minikube到CI/CD系统。
实施步骤:
配置GitLab CI:
# .gitlab-ci.yml stages: - build - test - deploy build: stage: build script: - docker build -t my-app:latest . test: stage: test script: - curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 - sudo install minikube-linux-amd64 /usr/local/bin/minikube - minikube start --driver=docker - eval $(minikube docker-env) - docker build -t my-app:latest . - kubectl apply -f k8s/deployment.yaml - kubectl wait --for=condition=ready pod -l app=my-app --timeout=90s - kubectl port-forward service/my-app 8080:80 & - sleep 5 - curl http://localhost:8080/health - minikube delete运行CI/CD pipeline:
- 推送代码到GitLab仓库
- 触发CI/CD pipeline
- 查看测试结果
结果:
- 成功集成Minikube到CI/CD系统
- 实现了自动化的应用测试
- 确保了应用在Kubernetes环境中的兼容性
案例三:Kubernetes培训环境#
场景:为Kubernetes培训创建实践环境。
解决方案:使用Minikube创建培训环境。
实施步骤:
准备培训环境:
# 安装Minikube curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 sudo install minikube-linux-amd64 /usr/local/bin/minikube # 启动集群 minikube start --memory=4096 --cpus=2 # 启用必要的插件 minikube addons enable dashboard minikube addons enable metrics-server创建培训材料:
- Kubernetes基础概念
- Pod、Service、Deployment等资源的使用
- 网络和存储配置
- 应用部署和管理
进行实践练习:
- 创建和管理Pod
- 部署和扩展应用
- 配置网络和存储
- 使用Dashboard监控集群
结果:
- 成功创建了Kubernetes培训环境
- 提供了实践机会,加深了学员对Kubernetes的理解
- 为学员提供了一个安全的学习环境
总结#
Minikube是一种轻量级的Kubernetes发行版,通过本教程的学习,您已经掌握了从入门到大师级的Minikube使用技术。
主要技术回顾#
- 基础操作:Minikube的基本安装和配置
- 集群管理:创建和管理Minikube集群
- 高级功能:网络配置、存储配置、插件使用
- 企业级应用:CI/CD集成、多集群管理、Kubernetes测试
最佳实践#
- 版本管理:使用特定版本的Minikube和Kubernetes,确保环境一致性
- 资源配置:根据测试需求调整Minikube的内存和CPU配置
- 驱动选择:选择适合本地环境的虚拟机驱动
- 插件使用:启用必要的插件,如Dashboard、metrics-server等
- 本地集成:使用Minikube的Docker环境,加速镜像构建和部署
- 清理策略:测试完成后及时停止或删除集群,释放资源
- 文档化:为Minikube配置和使用流程创建文档,便于团队协作
注意事项#
- 资源限制:Minikube需要足够的内存和CPU资源,建议至少4GB内存
- 网络配置:注意Minikube的网络配置,确保与本地网络的兼容性
- 存储性能:本地存储的性能可能不如生产环境,测试时需考虑
- 版本兼容性:Minikube支持的Kubernetes版本可能有限,需注意兼容性
- 安全配置:Minikube集群主要用于测试,不建议用于生产环境
- 清理环境:测试完成后及时清理集群,避免资源泄漏
- 备份策略:对于重要的测试数据,制定适当的备份策略
通过合理学习和使用Minikube,您可以快速创建和管理本地Kubernetes集群,为开发、测试和学习Kubernetes提供可靠的环境。Minikube的轻量级特性使其成为Kubernetes开发和测试的理想工具,同时保留了Kubernetes的核心功能,为您的应用提供真实的运行环境。