使用 minikube 创建开发环境


使用 minikube 创建开发环境

minikube 是本地 Kubernetes,专注于让 Kubernetes 易于学习和开发。您只需要 Docker(或类似的兼容)容器或虚拟机环境,而 Kubernetes 只需一个命令:minikube start

前置条件

安装 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

参考

https://minikube.sigs.k8s.io/docs/start/


文章作者: Jason Liu
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Jason Liu !
  目录