使用 minikube 创建开发环境
minikube 是本地 Kubernetes,专注于让 Kubernetes 易于学习和开发。您只需要 Docker(或类似的兼容)容器或虚拟机环境,而 Kubernetes 只需一个命令:
minikube start
。
前置条件
- 2 CPUs or more
- 2GB of free memory
- 20GB of free disk space
- Internet connection
- Container or virtual machine manager, such as: Docker, QEMU, Hyperkit, Hyper-V, KVM, Parallels, Podman, VirtualBox, or VMware Fusion/Workstation
安装 Docker
## 安装必要依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
## 添加 aliyun docker-ce yum 源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
## 重建 yum 缓存
yum makecache
## 查看可用 docker 版本
yum list docker-ce.x86_64 --showduplicates | sort -r
## 安装指定版本 Docker
yum install -y docker-ce-23.0.1-1.el9 docker-ce-cli-23.0.1-1.el9 containerd.io docker-buildx-plugin docker-compose-plugin
## 添加开机自启,立即启动:
systemctl enable --now docker
## 验证 Docker 是否正常
docker version
安装 minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
minikube start
## 如报错,则执行:minikube start --force
## 配置 kubectl
alias kubectl="minikube kubectl --"
## 安装 dashboard
minikube dashboard
部署应用
Service
## 创建示例部署并将其公开在端口 8080 上:
kubectl create deployment hello-minikube --image=kicbase/echo-server:1.0
kubectl expose deployment hello-minikube --type=NodePort --port=8080
## 这可能需要一点时间,但您的部署将在您运行时很快显示出来:
kubectl get services hello-minikube
## 访问此服务的最简单方法是让 minikube 为您启动一个网络浏览器:
minikube service hello-minikube
## 或者,使用 kubectl 转发端口:
kubectl port-forward service/hello-minikube 7080:8080
## 您的应用程序现在可以在 http://localhost:7080/ 获得。
## 您应该能够在应用程序输出中看到请求元数据。尝试更改请求的路径并观察更改。同样,您可以执行 POST 请求并观察输出中显示的正文。
LoadBalancer
## 要访问 LoadBalancer 部署,请使用“minikube tunnel”命令。这是一个示例部署:
kubectl create deployment balanced --image=kicbase/echo-server:1.0
kubectl expose deployment balanced --type=LoadBalancer --port=8080
## 在另一个窗口中,启动隧道以为“平衡”部署创建可路由 IP:
minikube tunnel
## 要查找可路由 IP,请运行此命令并检查列EXTERNAL-IP:
kubectl get services balanced
## 您的部署现在可用在 <EXTERNAL-IP>:8080
Ingress
## 启用入口插件:
minikube addons enable ingress
## 以下示例创建简单的 echo-server 服务和一个 Ingress 对象以路由到这些服务。
kind: Pod
apiVersion: v1
metadata:
name: foo-app
labels:
app: foo
spec:
containers:
- name: foo-app
image: 'kicbase/echo-server:1.0'
---
kind: Service
apiVersion: v1
metadata:
name: foo-service
spec:
selector:
app: foo
ports:
- port: 8080
---
kind: Pod
apiVersion: v1
metadata:
name: bar-app
labels:
app: bar
spec:
containers:
- name: bar-app
image: 'kicbase/echo-server:1.0'
---
kind: Service
apiVersion: v1
metadata:
name: bar-service
spec:
selector:
app: bar
ports:
- port: 8080
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- http:
paths:
- pathType: Prefix
path: /foo
backend:
service:
name: foo-service
port:
number: 8080
- pathType: Prefix
path: /bar
backend:
service:
name: bar-service
port:
number: 8080
---
## 应用内容:
kubectl apply -f https://storage.googleapis.com/minikube-site-examples/ingress-example.yaml
## 等待入口地址:
kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
example-ingress nginx * <your_ip_here> 80 5m45s
## Docker Desktop 用户注意事项:要让 ingress 正常工作,您需要打开一个新的终端窗口并运行minikube tunnel,并在接下来的步骤中使用127.0.0.1代替<ip_from_above>。
## 现在验证入口是否有效
curl <ip_from_above>/foo
Request served by foo-app
...
curl <ip_from_above>/bar
Request served by bar-app
...
集群管理
在不影响部署的应用程序的情况下暂停 Kubernetes:
minikube pause
取消暂停的实例:
minikube unpause
停止集群:
minikube stop
更改默认内存限制(需要重新启动):
minikube config set memory 9001
浏览易于安装的 Kubernetes 服务的目录:
minikube addons list
创建第二个运行较旧 Kubernetes 版本的集群:
minikube start -p aged --kubernetes-version=v1.16.1
删除所有 minikube 集群:
minikube delete --all