【发布时间】:2019-06-20 07:32:13
【问题描述】:
在 minikube 测试环境中,我为 ActiveMQ(版本 5.14.5)定义了以下部署/服务(在 ArgoProj 中启动,因此模板略有不同):
- name: amq-server-d
resource:
action: create
manifest: |
apiVersion: apps/v1
kind: Deployment
metadata:
name: amq
spec:
selector:
matchLabels:
app: amq
track: stable
template:
metadata:
labels:
app: amq
track: stable
spec:
containers:
- image: gms/activemq
imagePullPolicy: Never
name: amq
ports:
- containerPort: 61616
- containerPort: 8161
volumeMounts:
- name: test-data
mountPath: /opt/activemq/data
readOnly: false
- name: test-conf
mountPath: /opt/activemq/conf
readOnly: false
volumes:
- name: test-data
hostPath:
path: /Users/gms/development/nlp/nlpie/data/adapt/amq/data
- name: test-conf
hostPath:
path: /Users/gms/development/nlp/nlpie/data/adapt/amq/conf
- name: amq-server-s
resource:
action: create
manifest: |
apiVersion: v1
kind: Service
metadata:
name: amq
namespace: default
labels:
app: amq
spec:
selector:
app: amq
ports:
- name: test1
protocol: TCP
port: 61616
targetPort: 61616
- name: test2
protocol: TCP
port: 8161
targetPort: 8161
docker 镜像本身就可以正常工作,定义为:
FROM openjdk:8-jre
ENV ACTIVEMQ_VERSION 5.14.5
ENV ACTIVEMQ apache-activemq-$ACTIVEMQ_VERSION
ENV ACTIVEMQ_TCP=61616 ACTIVEMQ_AMQP=5672 ACTIVEMQ_STOMP=61613 ACTIVEMQ_MQTT=1883 ACTIVEMQ_WS=61614 ACTIVEMQ_UI=8161
ENV ACTIVEMQ_HOME /opt/activemq
RUN set -x && \
curl -s -S https://archive.apache.org/dist/activemq/$ACTIVEMQ_VERSION/$ACTIVEMQ-bin.tar.gz | tar xvz -C /opt && \
ln -s /opt/$ACTIVEMQ $ACTIVEMQ_HOME && \
useradd -r -M -d $ACTIVEMQ_HOME activemq && \
chown -R activemq:activemq /opt/$ACTIVEMQ && \
chown -h activemq:activemq $ACTIVEMQ_HOME
USER activemq
WORKDIR $ACTIVEMQ_HOME
EXPOSE $ACTIVEMQ_TCP $ACTIVEMQ_AMQP $ACTIVEMQ_STOMP $ACTIVEMQ_MQTT $ACTIVEMQ_WS $ACTIVEMQ_UI
CMD ["/bin/sh", "-c", "bin/activemq console"]
这些工作正常并显示为服务和部署:
D20181472:nlp-adapt-kube gms$ kubectl get svc -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
amq ClusterIP 10.111.0.111 <none> 61616/TCP,8161/TCP 2s app=amq
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 24h <none>
D20181472:nlp-adapt-kube gms$ kubectl get deploy -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
amq 0/1 1 0 33s amq gms/activemq app=amq,track=stable
在集群内,我可以通过服务的名称和命名空间访问服务,ala:
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
If you don't see a command prompt, try pressing enter.
dnstools# nslookup amq.default
Server: 10.96.0.10
Address: 10.96.0.10#53
Name: amq.default.svc.cluster.local
Address: 10.111.0.111
但是,如果我尝试 curl 访问 tcp 协议端口 61616(由 ActiveMQ 用于远程连接,我相信默认情况下已启用),我会超时:
dnstools# curl amq.default:61616
curl: (7) Failed to connect to amq.default port 61616: Operation timed out
我在 kubernetes 集群本身上测试了curl,它正在返回响应:
dnstools# curl -k -d 'body=message' https://10.96.0.1:443
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {
},
"status": "Failure",
"message": "forbidden: User \"system:anonymous\" cannot post path \"/\"",
"reason": "Forbidden",
"details": {
},
"code": 403
AFAIK,minikube 中不应该启用任何需要为 AMQ 处理的防火墙规则,所以我不确定为什么这不起作用。我也尝试将NodePorts 用于 AMQ 服务,但这并没有帮助。任何建议都将受到欢迎!
【问题讨论】:
-
问题出在
kubectl get deploy的输出:AVAILABLE=0。没有处于就绪状态的 pod。用kubectl describe检查它们。 -
果然出事了:
D20181472:nlp-adapt-kube gms$ kubectl get pods NAME READY STATUS RESTARTS AGE amq-76ccdc4bb-f6sqn 0/1 CrashLoopBackOff 17 5h50m
标签: kubernetes dns port activemq minikube