我创建了一个Yaml文件来创建Rabbitmq kubernetes集群。我可以看到豆荚。但是当我写kubectl时得到部署。我看不到那里。我无法访问rabbitmq ui页面。
apiVersion: v1
kind: Service
metadata:
labels:
app: rabbit
name: rabbit
spec:
ports:
- port: 5672
protocol: TCP
name: mqtt
- port: 15672
protocol: TCP
name: ui
type: NodePort
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: rabbit
spec:
serviceName: rabbit
replicas: 3
selector:
matchLabels:
app: rabbit
template:
metadata:
labels:
app: rabbit
spec:
containers:
- name: rabbitmq
image: rabbitmq
nodeSelector:
rabbitmq: "clustered"
答案 0 :(得分:2)
@ arghya-sadhu的答案是正确的。
NB 我不熟悉RabbitMQ,但您可能需要使用其他图像(请参见'Management Plugin`)来包含UI。
有关更多详细信息,请参见下文。
您应该可以通过以下一种方法(!)在Pod上入侵UI:
PORT=8888
kubectl port-forward pod/rabbit-0 --namespace=${NAMESPACE} ${PORT}:15672
然后浏览localhost:${PORT}
(如果8888
不可用,请尝试其他操作)。
我怀疑(!),除非您将图像与管理插件一起使用,否则它将无法工作。
Service
需要选择StatefulSet
的豆荚在服务spec
中,您可能应该添加:
selector:
app: rabbit
imagePullSecrets
)。如果您不希望使用DockerHub,则可以删除imagePullSecrets
部分。
在StatefulSet
ports:
- containerPort: 5672
- containerPort: 15672
NAMESPACE="default" # Or ...
确保创建了StatefulSet:
kubectl get statesfulset/rabbit --namespace=${NAMESPACE}
检查豆荚:
kubectl get pods --selector=app=rabbit --namespace=${NAMESPACE}
您可以检查Pod已绑定到(!)服务:
kubectl describe endpoints/rabbit --namespace=${NAMESPACE}
NB 您应该看到3个地址(每个Pod一个)
获取NodePort之一:
kubectl get service/rabbit --namespace=${NAMESPACE} --output=json
kubectl describe service/rabbit --namespace=${NAMESPACE}
您将需要使用NodePort来访问MQTT端点和UI。
答案 1 :(得分:1)
statefulsets和deployments是不同的kubernetes资源。您已经创建了有状态集。这就是为什么您看不到部署的原因。如果这样做
kubectl get statefulset
,您应该看到它,并且statefulset和Deployment都最终创建了pod,因此,如果执行kubectl get pods
自从创建Nodeport服务以来。您应该能够通过http://nodeip:nodeport
来访问它,其中nodeip
是kubernetes集群中任何工作节点的ip。
您可以通过以下方式了解什么是Nodeport(介于30000-32767之间的数字)
kubectl describe services rabbit