我正在尝试为我的 k8s 集群安装 velero 和 minio。我有 1 个主节点和 2 个工作节点。 我的 NodePort 服务有问题。
整体 pod 正在工作,节点端口服务也在运行,但是当我尝试从浏览器访问 minio 仪表板时,它会更改端口号。我认为问题出在我的服务上,所以我还为此创建了另一个问题。
实际问题出在控制台端口。
当我运行
kubectl logs minio-8649b94fb5-8cr2k -n velero
时,我会看到此信息。
WARNING: MINIO_ACCESS_KEY and MINIO_SECRET_KEY are deprecated.
Please use MINIO_ROOT_USER and MINIO_ROOT_PASSWORD
Formatting 1st pool, 1 set(s), 1 drives per set.
WARNING: Host local has more than 0 drives of set. A host failure will result in data becoming unavailable.
MinIO Object Storage Server
Copyright: 2015-2023 MinIO, Inc.
License: GNU AGPLv3 <https://www.gnu.org/licenses/agpl-3.0.html>
Version: RELEASE.2023-01-25T00-19-54Z (go1.19.4 linux/amd64)
Status: 1 Online, 0 Offline.
API: http://10.244.2.136:9000 http://127.0.0.1:9000
Console: http://10.244.2.136:37269 http://127.0.0.1:37269
Documentation: https://min.io/docs/minio/linux/index.html
Warning: The standard parity is set to 0. This can lead to data loss.
端口号
Console: http://10.244.2.136:37269 http://127.0.0.1:37269
与 Node Port 服务的端口不同。
这是我的 NodePort 服务
master-k8s@masterk8s-virtual-machine:~/velero-v1.2.0-darwin-amd64$ kubectl get svc -n velero
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
minio NodePort 10.97.197.54 <none> 9000:30480/TCP 82m
当我在浏览器中使用服务端口号搜索 URL 时,它会转换为控制台端口,并且我无法访问我的应用程序。
我做了什么来解决这个问题:
我想要什么:
我已经做了我能做的一切。我没有找到任何类似的问题或与此主题相关的任何信息。任何建议都将非常有助于解决这个问题。如何更改控制台端口或使其与服务端口同步?
更新了yaml
apiVersion: v1
kind: Namespace
metadata:
name: velero
---
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: minio
name: minio
labels:
component: minio
spec:
strategy:
type: Recreate
selector:
matchLabels:
component: minio
template:
metadata:
labels:
component: minio
spec:
volumes:
- name: storage
emptyDir: {}
- name: config
emptyDir: {}
containers:
- name: minio
image: minio/minio:latest
imagePullPolicy: IfNotPresent
args:
- server
- /storage
- --console-address=:9090
- --config-dir=/config
env:
- name: MINIO_ACCESS_KEY
value: "minio"
- name: MINIO_SECRET_KEY
value: "minio123"
ports:
- containerPort: 9000
name: api
- containerPort: 9090
name: console
volumeMounts:
- name: storage
mountPath: "/storage"
- name: config
mountPath: "/config"
---
apiVersion: v1
kind: Service
metadata:
namespace: minio
name: minio-service
labels:
component: minio
spec:
# ClusterIP is recommended for production environments.
# Change to NodePort if needed per documentation,
# but only if you run Minio in a test/trial environment, for example with Minikube.
type: LoadBalancer
ports:
- port: 9000
targetPort: 9000
protocol: TCP
selector:
component: minio
---
apiVersion: batch/v1
kind: Job
metadata:
namespace: minio
name: minio-setup
labels:
component: minio
spec:
template:
metadata:
name: minio-setup
spec:
restartPolicy: OnFailure
volumes:
- name: config
emptyDir: {}
containers:
- name: mc
image: minio/mc:latest
imagePullPolicy: IfNotPresent
command:
- /bin/sh
- -c
- "mc --config-dir=/config config host add velero http://minio:9000 minio minio123 && mc --config-dir=/config mb -p velero/velero"
volumeMounts:
- name: config
mountPath: "/config"
我们需要告诉 Minio 使用静态控制台端口(默认情况下它在运行时分配一个随机端口)。我们可以通过向
--console-address
命令提供 minio server
参数来做到这一点。这是我用来在本地运行 Minio 的示例部署:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: minio
name: minio
namespace: minio
spec:
replicas: 1
selector:
matchLabels:
app: minio
strategy:
type: Recreate
template:
metadata:
labels:
app: minio
spec:
containers:
- command:
- minio
- server
- /data
- --console-address=:9090
envFrom:
- secretRef:
name: minio-creds-9d9kmkc4m4
image: quay.io/minio/minio:latest
name: minio
ports:
- containerPort: 9000
name: api
- containerPort: 9090
name: console
volumeMounts:
- mountPath: /data
name: minio-data
volumes:
- name: minio-data
persistentVolumeClaim:
claimName: minio-data
运行
minio server /data --console-address=:9090
;当 Minio 启动时,我们在日志中看到:
Status: 1 Online, 0 Offline.
API: http://10.244.0.11:9000 http://127.0.0.1:9000
Console: http://10.244.0.11:9090 http://127.0.0.1:9090
现在我们已经在静态端口上运行了控制台,我们可以设置您想要的 NodePort 服务:
apiVersion: v1
kind: Service
metadata:
labels:
app: minio
name: minio
namespace: minio
spec:
ports:
- name: api
nodePort: 30900
port: 9000
protocol: TCP
targetPort: api
- name: console
nodePort: 30990
port: 9090
protocol: TCP
targetPort: console
selector:
app: minio
type: NodePort
这会公开端口 30900 上的 API 和端口 30990 上的控制台。
您可以在https://github.com/larsks/k8s-example-minio/找到我的完整测试,包括清单和部署说明。