k8s 部署 minio

本文详细介绍了在Kubernetes(k8s)环境中部署MinIO的旧版本和新版本的区别,包括端口使用、健康检查、配置清单的变更以及新版本的特性。新版本MinIO将可视化界面分离并使用动态端口,导致通过Ingress访问时出现问题。解决方法是通过固定Console端口并在Deployment、Service和Ingress资源中适配新配置。此外,还提供了单节点和集群部署MinIO的示例配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、k8s部署老版本minio

二、新版本minio

2.1、新版本特性

2.2、 使用老版本的配置清单引入的问题

2.3、新版本如何编写资源配置清单

三、新版本部署minio

3.1、docker 部署minio

3.2、k8s 部署版本minio

3.3、k8s 部署版本minio集群


一、k8s部署老版本minio

老版本使用9000端口进行业务通信 + 提供web页面 + localhost:9000/minio/health/ready提供健康检查

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    name: minio
  name: minio
  namespace: armory
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 7
  selector:
    matchLabels:
      name: minio
  template:
    metadata:
      labels:
        app: minio
        name: minio
    spec:
      containers:
      - name: minio
        image: harbor.od.com:180/armory/minio:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 9000
          protocol: TCP
        args:
        - server
        - /data
        env:
        - name: MINIO_ACCESS_KEY
          value: admin
        - name: MINIO_SECRET_KEY
          value: admin123
        readinessProbe:
          failureThreshold: 3
          httpGet:
            path: /minio/health/ready
            port: 9000
            scheme: HTTP
          initialDelaySeconds: 10
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 5
        volumeMounts:
        - mountPath: /data
          name: data
      imagePullSecrets:
      - name: harbor
      volumes:
      - nfs:
          server: hdss7-200
          path: /data/nfs-volume/minio
        name: data

---

apiVersion: v1
kind: Service
metadata:
  name: minio
  namespace: armory
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 9000
  selector:
    app: minio

---

apiVersion: extensions/v1beta1
kind: Ingress
metadata: 
  name: minio
  namespace: armory
spec:
  rules:
  - host: minio.od.com
    http:
      paths:
      - path: /
        backend: 
          serviceName: minio
          servicePort: 80

二、新版本minio特性

2.1、新版本特性

1、新版本使用9000端口进行业务通信
2、新版本把可视化独立出来,默认用动态端口进行通信,或--console-address ":5000" 自己设置端口,但主动访问IP:9000 依旧是可以访问web页面
3、localhost:9000/minio/health/ready提供健康检查

2.2、 使用老版本的配置清单引入的问题

假如使用了老版本的资源配置清单,使用新的minio镜像,会出现:

1、访问容器IP:9000是依旧可以访问web页面
2、但是如果使用ingress域名访问,比如是minio.od.com,会出现页面返回的是minio.od.com:32154,并且页面无任何数据。
3、如果直接访问容器IP:32154,可以直接访问web页面
4、通过kubectl describe pod的名字,会发现有一条是Console,端口是32154
5、总上所述,对比新版本minio特性,说明了32154是Console的端口,而且在kill掉这个pod,在启动一个新的,发现Console端口会变化,说明Console端口是随机的。
6、按照次特性,可以修改deployment资源,增加Nodename固定在那个节点运行,修改svc资源设置nodeport,共享网络名称空间,让pod的9000端口映射宿主机的某一个端口,直接访问宿主机的端口,通过即可。

2.3、新版本如何编写资源配置清单

1、deployment 中需要使用命令固定Console端口,deployment 开放9000端口、Console端口
2、service 资源中代理9000端口、Console端口
3、ingress 资源中代理Console端口

三、k8s部署新版本minio

3.1、docker 部署minio

docker run -p 9000:9000 -p 9090:9090 --name minio \
-d --restart=always \
-e "MINIO_ACCESS_KEY=admin" \
-e "MINIO_SECRET_KEY=admin123456" \
-v /data/minio/data:/data \
-v /data/minio/config:/root/.minio \minio/minio \
server /data --console-address ":9090"


3.2、k8s 部署版本minio

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: minio
spec:
  replicas: 1
  selector:
    matchLabels:
      app: minio
  template:
    metadata:
      labels:
        app: minio
    spec:
      containers:
      - name: minio
        env:
        - name: MINIO_ROOT_USER
          value: "admin"
        - name: MINIO_ROOT_PASSWORD
          value: "root123456"
        image: minio/minio:latest
        imagePullPolicy: IfNotPresent
        command:
          - /bin/sh
          - -c
          - minio server /data --console-address ":5000"
        ports:
        - name: data
          containerPort: 9000
          protocol: "TCP"
        - name: console
          containerPort: 5000
          protocol: "TCP"

---

apiVersion: v1
kind: Service
metadata:
  name: minio
spec:
  ports:
  - name: data
    port: 9000
    targetPort: 9000
    protocol: TCP
  - name: console
    port: 5000
    targetPort: 5000
    protocol: TCP
  selector:
    app: minio

---

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: minio
spec:
  rules:
  - host: minio.od.com
    http:
      paths:
        - path: /
          backend:
            serviceName: minio
            servicePort: 5000



注释:

1、是MINIO_ROOT_USER、 MINIO_ROOT_PASSWORD 还是MINIO_ACCESS_KEY、MINIO_SECRET_KEY 具体没研究过,可以去官网看,或者直接容器启动后,查看环境变量。MINIO_ROOT_PASSWORD不得少于8位
2、修改容器启动的第一命令/bin/sh -c minio server /data --console-address ":5000",使其固定Console端口5000

应用配置清单后,配置访问minio.od.com,流量可以调度给ingress-controller即可


3.3、k8s 部署版本minio集群

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: minio
spec:
  serviceName: minio
  replicas: 4
  selector:
    matchLabels:
      app: minio
  template:
    metadata:
      labels:
        app: minio
    spec:
      containers:
      - name: minio
        env:
        - name: MINIO_ROOT_USER
          value: "admin"
        - name: MINIO_ROOT_PASSWORD
          value: "root123456"
        image: minio/minio
        imagePullPolicy: IfNotPresent
        command:
          - /bin/sh
          - -c
          - minio server --console-address ":5000" http://minio-{0...3}.minio.default.svc.cluster.local/data
        ports:
        - name: data
          containerPort: 9000
          protocol: "TCP"
        - name: console
          containerPort: 5000
          protocol: "TCP"
        volumeMounts:
        - name: data
          mountPath: /data
        - name: date-config
          mountPath: /etc/localtime
      volumes:
        - name: date-config
          hostPath:
            path: /usr/share/zoneinfo/Asia/Shanghai
  volumeClaimTemplates:
  - metadata:
      name: data
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 10Gi
      storageClassName: little

---

apiVersion: v1
kind: Service
metadata:
  name: minio
  labels:
    app: minio
spec:
  clusterIP: None
  ports:
    - port: 9000
      name: data
    - port: 5000
      name: console
  selector:
    app: minio
---
apiVersion: v1
kind: Service
metadata:
  name: minio-service
spec:
  type: NodePort
  ports:
   - name: data
     port: 9000
     targetPort: 9000
     protocol: TCP
     nodePort:
   - name: console
     port: 5000
     targetPort: 5000
     protocol: TCP
     nodePort:
  selector:
    app: minio


---

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: minio
  namespace: default
spec:
  rules:
    - host: minio.od.com
      http:
        paths:
          - path: /
            backend:
              serviceName: minio-service
              servicePort: 5000

应用配置清单后,配置访问minio.od.com,流量可以调度给ingress-controller即可

<think>好的,我现在需要帮助用户解决微信小程序开发中遇到的“routeDone webviewId 不是当前页面”错误。首先,我要理解这个错误的具体情况。用户提到环境是Windows,基础库版本3.7.7,开发者工具版本1.06.2412050。根据用户提供的引用内容,之前有类似的问题通过更新工具或检查WXML语法解决,但这次的问题不同,涉及路由和webviewId。 首先,我应该考虑这个错误的原因。可能的情况包括页面跳转逻辑问题,比如在页面卸载后仍然尝试跳转,或者页面栈管理不当。另外,webview相关的组件如web-view标签使用不当也可能导致此问题。此外,开发者工具本身的缓存或版本问题也可能引发错误,尤其是用户提到更新工具有时没反应,可能需要手动更新。 接下来,我需要整理解决步骤。第一步通常是检查代码,尤其是路由跳转的部分,比如wx.navigateTo是否正确使用,是否有重复跳转或页面卸载后的跳转。然后检查web-view组件的使用,是否在多个页面同时使用导致id冲突。接着,清理缓存和更新工具,这是常见解决方法,用户之前可能尝试过,但需要确认是否完全更新到最新版本。另外,查看官方社区是否有类似问题,或者提交反馈。最后,如果问题依旧,可能需要检查基础库版本是否兼容,或者回退版本测试。 还要注意用户提到的引用内容,比如引用3中提到WXML语法错误可能导致类似报错,所以需要检查相关页面的WXML是否有拼写错误或标签未闭合。此外,路由错误可能与页面栈溢出有关,比如使用wx.redirectTo不当。 需要确保用户按照步骤逐一排查,并提供具体的操作示例,比如如何清除缓存,如何检查页面栈。同时提醒用户注意基础库和开发者工具的版本兼容性,可能建议使用稳定版而非夜间版,如果问题持续的话。最后,生成相关问题,帮助用户进一步解决可能遇到的类似问题。</think>针对微信小程序开发中出现的"routeDone webviewId 不是当前页面"错误,以下是分步解决方案: ### 一、错误原因分析 该错误通常发生在以下场景: 1. **页面跳转时序冲突**:前序页面卸载时触发后续跳转操作,导致目标页面已销毁 2. **web-view组件异常**:多个`web-view`组件发生ID冲突或未正确释放 3. **开发者工具版本问题**:基础库版本3.7.7与开发工具1.06.2412050可能存在兼容性间隙[^2] ### 二、具体解决步骤 #### 1. 检查路由跳转逻辑 ```javascript // 错误示例:在页面onUnload生命周期内执行跳转 Page({ onUnload() { wx.navigateTo({ url: '/pages/errorPage' }) // 可能触发时序错误 } }) // 正确写法:使用路由拦截器统一处理 const originNavigateTo = wx.navigateTo wx.navigateTo = function(options) { if (getCurrentPages().length >= 10) { // 页面栈上限检测 wx.redirectTo(options) return } originNavigateTo(options) } ``` #### 2. 规范web-view使用 ```wxml <!-- 每个web-view必须设置唯一ID --> <web-view src="https://example.com" bindmessage="onMessage" id="webview{{pageId}}" <!-- 动态ID避免冲突 --> /> ``` 在对应页面的JS文件中: ```javascript Page({ data: { pageId: Date.now() }, // 生成唯一标识 onUnload() { this.setData({ pageId: null }) // 主动释放webview } }) ``` #### 3. 强制更新开发环境 1. 完全卸载当前开发者工具 2. 访问[微信官方下载页](https://developers.weixin.qq.com/miniprogram/dev/devtools/nightly.html)获取最新nightly版本[^1] 3. 安装时勾选"清除所有用户数据"选项 4. 重启后执行`编译 -> 清空文件缓存 -> 清空数据缓存` #### 4. 基础库版本控制 在`project.config.json`中添加版本锁定: ```json { "libVersion": "3.7.7", "miniprogramRoot": "dist/" } ``` ### 三、验证方案 1. 在onShow生命周期添加调试日志: ```javascript Page({ onShow() { console.log('当前页面栈:', getCurrentPages().map(p => p.route)) } }) ``` 2. 使用开发者工具的`调试器 -> Memory`面板检测webview内存泄漏
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值