如何从Kubernetes集群中的应用程序连接Redis集群?(How to connect Redis cluster from application in Kubernetes cluster?)
这是我的应用程序代码:
from flask import Flask from redis import Redis, RedisError import os import socket # Connect to Redis redis = Redis(host=os.getenv("REDIS", "redis"), db=0, socket_connect_timeout=2, socket_timeout=2) app = Flask(__name__) @app.route("/") def hello(): try: visits = redis.incr("counter") except RedisError: visits = "<i>cannot connect to Redis, counter disabled</i>" html = "<h3>Hello {name}!</h3>" \ "<b>Hostname:</b> {hostname}<br/>" \ "<b>Visits:</b> {visits}" return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits) if __name__ == "__main__": app.run(host='0.0.0.0', port=80)
这里想要连接Kubernetes集群中的Redis主机。 因此,在Kubernetes的清单文件中设置环境变量
REDIS
来设置值。这是Kubernetes部署清单文件:
apiVersion: apps/v1beta2 kind: Deployment metadata: name: {{ template "fullname" . }} labels: app: {{ template "name" . }} chart: {{ template "chart" . }} release: {{ .Release.Name }} heritage: {{ .Release.Service }} spec: replicas: {{ .Values.replicaCount }} selector: matchLabels: app: {{ template "name" . }} release: {{ .Release.Name }} template: metadata: labels: app: {{ template "name" . }} release: {{ .Release.Name }} spec: containers: - name: {{ .Chart.Name }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" imagePullPolicy: {{ .Values.image.pullPolicy }} env: - name: REDIS value: {{ template "fullname" . }}-master-svc ports: - name: http containerPort: 80 protocol: TCP resources: {{ toYaml .Values.resources | indent 12 }} {{- with .Values.nodeSelector }} nodeSelector: {{ toYaml . | indent 8 }} {{- end }} {{- with .Values.affinity }} affinity: {{ toYaml . | indent 8 }} {{- end }} {{- with .Values.tolerations }} tolerations: {{ toYaml . | indent 8 }} {{- end }}
要在同一群集中连接Redis主机,请将环境值设置为:
env: - name: REDIS value: {{ template "fullname" . }}-master-svc
关于Redis集群,由官方redis-ha图表安装。 其主服务清单文件是:
apiVersion: v1 kind: Service metadata: name: {{ template "fullname" . }}-master-svc annotations: {{ toYaml .Values.servers.annotations | indent 4 }} spec: ports: - port: 6379 protocol: TCP targetPort: 6379 selector: app: "redis-ha" redis-node: "true" redis-role: "master" release: "{{ .Release.Name }}" type: "{{ .Values.servers.serviceType }}"
但似乎应用程序窗格未成功连接到Redis主服务名称。 当我访问URL时:
export NODE_PORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].nodePort}" services wishful-rabbit-mychart) export NODE_IP=$(kubectl get nodes --namespace default -o jsonpath="{.items[0].status.addresses[0].address}") echo http://$NODE_IP:$NODE_PORT
从浏览器,得到这个结果:
Hello World! Hostname: wishful-rabbit-mychart-85dc7658c6-9blg5 Visits: cannot connect to Redis, counter disabled
有关
pods
和services
更多信息:kubectl get po NAME READY STATUS RESTARTS AGE wishful-rabbit-mychart-bdfdf6558-8fjmb 1/1 Running 0 8m wishful-rabbit-mychart-bdfdf6558-9khfs 1/1 Running 0 7m wishful-rabbit-mychart-bdfdf6558-hgqxv 1/1 Running 0 8m wishful-rabbit-mychart-sentinel-8667dd57d4-9njwq 1/1 Running 0 37m wishful-rabbit-mychart-sentinel-8667dd57d4-jsq6d 1/1 Running 0 37m wishful-rabbit-mychart-sentinel-8667dd57d4-ndqss 1/1 Running 0 37m wishful-rabbit-mychart-server-746f47dfdd-2fn4s 1/1 Running 0 37m wishful-rabbit-mychart-server-746f47dfdd-bwgrq 1/1 Running 0 37m wishful-rabbit-mychart-server-746f47dfdd-spkkm 1/1 Running 0 37m kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3h wishful-rabbit-mychart NodePort 10.101.103.224 <none> 80:30033/TCP 37m wishful-rabbit-mychart-master-svc ClusterIP 10.108.128.167 <none> 6379/TCP 37m wishful-rabbit-mychart-sentinel ClusterIP 10.107.63.208 <none> 26379/TCP 37m wishful-rabbit-mychart-slave-svc ClusterIP 10.99.211.111 <none> 6379/TCP 37m
什么是正确的用法?
Redis Server Pod Env
kubectl exec -it wishful-rabbit-mychart-server-746f47dfdd-2fn4s -- sh / # printenv KUBERNETES_PORT=tcp://10.96.0.1:443 WISHFUL_RABBIT_MYCHART_SLAVE_SVC_PORT_6379_TCP_PORT=6379 WISHFUL_RABBIT_MYCHART_MASTER_SVC_PORT_6379_TCP_ADDR=10.108.128.167 KUBERNETES_SERVICE_PORT=443 WISHFUL_RABBIT_MYCHART_SLAVE_SVC_PORT_6379_TCP_PROTO=tcp WISHFUL_RABBIT_MYCHART_SERVICE_HOST=10.101.103.224 WISHFUL_RABBIT_MYCHART_MASTER_SVC_PORT_6379_TCP_PORT=6379 HOSTNAME=wishful-rabbit-mychart-server-746f47dfdd-2fn4s SHLVL=1 WISHFUL_RABBIT_MYCHART_MASTER_SVC_PORT_6379_TCP_PROTO=tcp HOME=/root WISHFUL_RABBIT_MYCHART_SENTINEL_SERVICE_HOST=10.107.63.208 WISHFUL_RABBIT_MYCHART_PORT=tcp://10.101.103.224:80 WISHFUL_RABBIT_MYCHART_SLAVE_SVC_PORT_6379_TCP=tcp://10.99.211.111:6379 WISHFUL_RABBIT_MYCHART_SERVICE_PORT=80 WISHFUL_RABBIT_MYCHART_SENTINEL_SERVICE_PORT=26379 WISHFUL_RABBIT_MYCHART_SENTINEL_PORT=tcp://10.107.63.208:26379 WISHFUL_RABBIT_MYCHART_MASTER_SVC_PORT_6379_TCP=tcp://10.108.128.167:6379 WISHFUL_RABBIT_MYCHART_PORT_80_TCP_ADDR=10.101.103.224 REDIS_CHART_PREFIX=wishful-rabbit-mychart- TERM=xterm WISHFUL_RABBIT_MYCHART_PORT_80_TCP_PORT=80 KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1 WISHFUL_RABBIT_MYCHART_PORT_80_TCP_PROTO=tcp PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin KUBERNETES_PORT_443_TCP_PORT=443 KUBERNETES_PORT_443_TCP_PROTO=tcp WISHFUL_RABBIT_MYCHART_SENTINEL_PORT_26379_TCP_ADDR=10.107.63.208 WISHFUL_RABBIT_MYCHART_PORT_80_TCP=tcp://10.101.103.224:80 WISHFUL_RABBIT_MYCHART_SLAVE_SVC_SERVICE_HOST=10.99.211.111 WISHFUL_RABBIT_MYCHART_SENTINEL_PORT_26379_TCP_PORT=26379 WISHFUL_RABBIT_MYCHART_SENTINEL_PORT_26379_TCP_PROTO=tcp KUBERNETES_SERVICE_PORT_HTTPS=443 KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443 WISHFUL_RABBIT_MYCHART_MASTER_SVC_SERVICE_HOST=10.108.128.167 PWD=/ KUBERNETES_SERVICE_HOST=10.96.0.1 WISHFUL_RABBIT_MYCHART_SLAVE_SVC_SERVICE_PORT=6379 WISHFUL_RABBIT_MYCHART_SLAVE_SVC_PORT=tcp://10.99.211.111:6379 WISHFUL_RABBIT_MYCHART_SERVICE_PORT_HTTP=80 REDIS_SENTINEL_SERVICE_HOST=redis-sentinel WISHFUL_RABBIT_MYCHART_SLAVE_SVC_PORT_6379_TCP_ADDR=10.99.211.111 WISHFUL_RABBIT_MYCHART_SENTINEL_PORT_26379_TCP=tcp://10.107.63.208:26379 WISHFUL_RABBIT_MYCHART_MASTER_SVC_PORT=tcp://10.108.128.167:6379 WISHFUL_RABBIT_MYCHART_MASTER_SVC_SERVICE_PORT=6379
Application Pod Env
kubectl exec -it wishful-rabbit-mychart-85dc7658c6-8wlq6 -- sh # printenv KUBERNETES_SERVICE_PORT=443 WISHFUL_RABBIT_MYCHART_SLAVE_SVC_PORT_6379_TCP_PORT=6379 KUBERNETES_PORT=tcp://10.96.0.1:443 WISHFUL_RABBIT_MYCHART_MASTER_SVC_PORT_6379_TCP_ADDR=10.108.128.167 WISHFUL_RABBIT_MYCHART_SLAVE_SVC_PORT_6379_TCP_PROTO=tcp WISHFUL_RABBIT_MYCHART_SERVICE_HOST=10.101.103.224 HOSTNAME=wishful-rabbit-mychart-85dc7658c6-8wlq6 WISHFUL_RABBIT_MYCHART_MASTER_SVC_PORT_6379_TCP_PORT=6379 WISHFUL_RABBIT_MYCHART_MASTER_SVC_PORT_6379_TCP_PROTO=tcp PYTHON_PIP_VERSION=9.0.1 WISHFUL_RABBIT_MYCHART_SENTINEL_SERVICE_HOST=10.107.63.208 HOME=/root GPG_KEY=C01E1CAD5EA2C4F0B8E3571504C367C218ADD4FF REDIS=wishful-rabbit-mychart-master-svc WISHFUL_RABBIT_MYCHART_SERVICE_PORT=80 WISHFUL_RABBIT_MYCHART_PORT=tcp://10.101.103.224:80 WISHFUL_RABBIT_MYCHART_SLAVE_SVC_PORT_6379_TCP=tcp://10.99.211.111:6379 WISHFUL_RABBIT_MYCHART_MASTER_SVC_PORT_6379_TCP=tcp://10.108.128.167:6379 WISHFUL_RABBIT_MYCHART_SENTINEL_SERVICE_PORT=26379 WISHFUL_RABBIT_MYCHART_SENTINEL_PORT=tcp://10.107.63.208:26379 WISHFUL_RABBIT_MYCHART_PORT_80_TCP_ADDR=10.101.103.224 NAME=World TERM=xterm KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1 WISHFUL_RABBIT_MYCHART_PORT_80_TCP_PORT=80 WISHFUL_RABBIT_MYCHART_PORT_80_TCP_PROTO=tcp PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin KUBERNETES_PORT_443_TCP_PORT=443 KUBERNETES_PORT_443_TCP_PROTO=tcp LANG=C.UTF-8 WISHFUL_RABBIT_MYCHART_SENTINEL_PORT_26379_TCP_ADDR=10.107.63.208 WISHFUL_RABBIT_MYCHART_SLAVE_SVC_SERVICE_HOST=10.99.211.111 WISHFUL_RABBIT_MYCHART_PORT_80_TCP=tcp://10.101.103.224:80 PYTHON_VERSION=2.7.14 WISHFUL_RABBIT_MYCHART_SENTINEL_PORT_26379_TCP_PORT=26379 WISHFUL_RABBIT_MYCHART_SENTINEL_PORT_26379_TCP_PROTO=tcp KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443 KUBERNETES_SERVICE_PORT_HTTPS=443 WISHFUL_RABBIT_MYCHART_MASTER_SVC_SERVICE_HOST=10.108.128.167 KUBERNETES_SERVICE_HOST=10.96.0.1 PWD=/app WISHFUL_RABBIT_MYCHART_SLAVE_SVC_PORT=tcp://10.99.211.111:6379 WISHFUL_RABBIT_MYCHART_SERVICE_PORT_HTTP=80 WISHFUL_RABBIT_MYCHART_SLAVE_SVC_SERVICE_PORT=6379 WISHFUL_RABBIT_MYCHART_SLAVE_SVC_PORT_6379_TCP_ADDR=10.99.211.111 WISHFUL_RABBIT_MYCHART_SENTINEL_PORT_26379_TCP=tcp://10.107.63.208:26379 WISHFUL_RABBIT_MYCHART_MASTER_SVC_SERVICE_PORT=6379 WISHFUL_RABBIT_MYCHART_MASTER_SVC_PORT=tcp://10.108.128.167:6379
所有端点
kubectl get ep NAME ENDPOINTS AGE kubernetes 10.0.2.15:8443 4h wishful-rabbit-mychart 172.17.0.5:80,172.17.0.6:80,172.17.0.7:80 1h wishful-rabbit-mychart-master-svc <none> 1h wishful-rabbit-mychart-sentinel 172.17.0.11:26379,172.17.0.12:26379,172.17.0.8:26379 1h wishful-rabbit-mychart-slave-svc <none>
描述Redis Master Service
kubectl describe svc wishful-rabbit-mychart-master-svc Name: wishful-rabbit-mychart-master-svc Namespace: default Labels: <none> Annotations: <none> Selector: app=redis-ha,redis-node=true,redis-role=master,release=wishful-rabbit Type: ClusterIP IP: 10.108.128.167 Port: <unset> 6379/TCP TargetPort: 6379/TCP Endpoints: <none> Session Affinity: None Events: <none>
描述Redis Server Pod
kubectl describe po wishful-rabbit-mychart-server-746f47dfdd-2fn4s Name: wishful-rabbit-mychart-server-746f47dfdd-2fn4s Namespace: default Node: minikube/192.168.99.100 Start Time: Fri, 02 Feb 2018 15:28:42 +0900 Labels: app=mychart chart=mychart-0.1.0 heritage=Tiller name=redis-server pod-template-hash=3029038988 podIP=172.17.0.10 redis-node=true redis-role=master release=wishful-rabbit runID=cbf8e0 Annotations: kubernetes.io/created-by={"kind":"SerializedReference","apiVersion":"v1","reference":{"kind":"ReplicaSet","namespace":"default","name":"wishful-rabbit-mychart-server-746f47dfdd","uid":"4fcb0dfc-07e2-1... Status: Running IP: 172.17.0.10 Controlled By: ReplicaSet/wishful-rabbit-mychart-server-746f47dfdd Containers: redis: Container ID: docker://2734d60bd44a1446ec6556369359ed15b866a4589abe1e6d394f9252114c6d4d Image: quay.io/smile/redis:4.0.6r2 Image ID: docker-pullable://quay.io/smile/redis@sha256:8948a952920d4495859c984546838d4c9b4c71e0036eef86570922d91cacb3df Port: 6379/TCP State: Running Started: Fri, 02 Feb 2018 15:28:44 +0900 Ready: True Restart Count: 0 Environment: REDIS_SENTINEL_SERVICE_HOST: redis-sentinel REDIS_CHART_PREFIX: wishful-rabbit-mychart- Mounts: /redis-master-data from data (rw) /var/run/secrets/kubernetes.io/serviceaccount from default-token-wfv2q (ro) Conditions: Type Status Initialized True Ready True PodScheduled True Volumes: data: Type: EmptyDir (a temporary directory that shares a pod's lifetime) Medium: default-token-wfv2q: Type: Secret (a volume populated by a Secret) SecretName: default-token-wfv2q Optional: false QoS Class: BestEffort Node-Selectors: <none> Tolerations: <none> Events: <none>
This is my application code:
from flask import Flask from redis import Redis, RedisError import os import socket # Connect to Redis redis = Redis(host=os.getenv("REDIS", "redis"), db=0, socket_connect_timeout=2, socket_timeout=2) app = Flask(__name__) @app.route("/") def hello(): try: visits = redis.incr("counter") except RedisError: visits = "<i>cannot connect to Redis, counter disabled</i>" html = "<h3>Hello {name}!</h3>" \ "<b>Hostname:</b> {hostname}<br/>" \ "<b>Visits:</b> {visits}" return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits) if __name__ == "__main__": app.run(host='0.0.0.0', port=80)
Here want to connect a Redis host in the Kubernetes cluster. So put a environment variable
REDIS
to set value in Kubernetes' manifest file.This is the Kubernetes deployment manifest file:
apiVersion: apps/v1beta2 kind: Deployment metadata: name: {{ template "fullname" . }} labels: app: {{ template "name" . }} chart: {{ template "chart" . }} release: {{ .Release.Name }} heritage: {{ .Release.Service }} spec: replicas: {{ .Values.replicaCount }} selector: matchLabels: app: {{ template "name" . }} release: {{ .Release.Name }} template: metadata: labels: app: {{ template "name" . }} release: {{ .Release.Name }} spec: containers: - name: {{ .Chart.Name }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" imagePullPolicy: {{ .Values.image.pullPolicy }} env: - name: REDIS value: {{ template "fullname" . }}-master-svc ports: - name: http containerPort: 80 protocol: TCP resources: {{ toYaml .Values.resources | indent 12 }} {{- with .Values.nodeSelector }} nodeSelector: {{ toYaml . | indent 8 }} {{- end }} {{- with .Values.affinity }} affinity: {{ toYaml . | indent 8 }} {{- end }} {{- with .Values.tolerations }} tolerations: {{ toYaml . | indent 8 }} {{- end }}
In order to connect Redis host in the same cluster, set environment value as:
env: - name: REDIS value: {{ template "fullname" . }}-master-svc
About Redis cluster, installed by official redis-ha chart. Its master service manifest file is:
apiVersion: v1 kind: Service metadata: name: {{ template "fullname" . }}-master-svc annotations: {{ toYaml .Values.servers.annotations | indent 4 }} spec: ports: - port: 6379 protocol: TCP targetPort: 6379 selector: app: "redis-ha" redis-node: "true" redis-role: "master" release: "{{ .Release.Name }}" type: "{{ .Values.servers.serviceType }}"
But it seems that the application pod didn't connect to the Redis master service name successfully. When I got accessed URL:
export NODE_PORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].nodePort}" services wishful-rabbit-mychart) export NODE_IP=$(kubectl get nodes --namespace default -o jsonpath="{.items[0].status.addresses[0].address}") echo http://$NODE_IP:$NODE_PORT
from browser, got this result:
Hello World! Hostname: wishful-rabbit-mychart-85dc7658c6-9blg5 Visits: cannot connect to Redis, counter disabled
More information about
pods
andservices
:kubectl get po NAME READY STATUS RESTARTS AGE wishful-rabbit-mychart-bdfdf6558-8fjmb 1/1 Running 0 8m wishful-rabbit-mychart-bdfdf6558-9khfs 1/1 Running 0 7m wishful-rabbit-mychart-bdfdf6558-hgqxv 1/1 Running 0 8m wishful-rabbit-mychart-sentinel-8667dd57d4-9njwq 1/1 Running 0 37m wishful-rabbit-mychart-sentinel-8667dd57d4-jsq6d 1/1 Running 0 37m wishful-rabbit-mychart-sentinel-8667dd57d4-ndqss 1/1 Running 0 37m wishful-rabbit-mychart-server-746f47dfdd-2fn4s 1/1 Running 0 37m wishful-rabbit-mychart-server-746f47dfdd-bwgrq 1/1 Running 0 37m wishful-rabbit-mychart-server-746f47dfdd-spkkm 1/1 Running 0 37m kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3h wishful-rabbit-mychart NodePort 10.101.103.224 <none> 80:30033/TCP 37m wishful-rabbit-mychart-master-svc ClusterIP 10.108.128.167 <none> 6379/TCP 37m wishful-rabbit-mychart-sentinel ClusterIP 10.107.63.208 <none> 26379/TCP 37m wishful-rabbit-mychart-slave-svc ClusterIP 10.99.211.111 <none> 6379/TCP 37m
What's the right usage?
Redis Server Pod Env
kubectl exec -it wishful-rabbit-mychart-server-746f47dfdd-2fn4s -- sh / # printenv KUBERNETES_PORT=tcp://10.96.0.1:443 WISHFUL_RABBIT_MYCHART_SLAVE_SVC_PORT_6379_TCP_PORT=6379 WISHFUL_RABBIT_MYCHART_MASTER_SVC_PORT_6379_TCP_ADDR=10.108.128.167 KUBERNETES_SERVICE_PORT=443 WISHFUL_RABBIT_MYCHART_SLAVE_SVC_PORT_6379_TCP_PROTO=tcp WISHFUL_RABBIT_MYCHART_SERVICE_HOST=10.101.103.224 WISHFUL_RABBIT_MYCHART_MASTER_SVC_PORT_6379_TCP_PORT=6379 HOSTNAME=wishful-rabbit-mychart-server-746f47dfdd-2fn4s SHLVL=1 WISHFUL_RABBIT_MYCHART_MASTER_SVC_PORT_6379_TCP_PROTO=tcp HOME=/root WISHFUL_RABBIT_MYCHART_SENTINEL_SERVICE_HOST=10.107.63.208 WISHFUL_RABBIT_MYCHART_PORT=tcp://10.101.103.224:80 WISHFUL_RABBIT_MYCHART_SLAVE_SVC_PORT_6379_TCP=tcp://10.99.211.111:6379 WISHFUL_RABBIT_MYCHART_SERVICE_PORT=80 WISHFUL_RABBIT_MYCHART_SENTINEL_SERVICE_PORT=26379 WISHFUL_RABBIT_MYCHART_SENTINEL_PORT=tcp://10.107.63.208:26379 WISHFUL_RABBIT_MYCHART_MASTER_SVC_PORT_6379_TCP=tcp://10.108.128.167:6379 WISHFUL_RABBIT_MYCHART_PORT_80_TCP_ADDR=10.101.103.224 REDIS_CHART_PREFIX=wishful-rabbit-mychart- TERM=xterm WISHFUL_RABBIT_MYCHART_PORT_80_TCP_PORT=80 KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1 WISHFUL_RABBIT_MYCHART_PORT_80_TCP_PROTO=tcp PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin KUBERNETES_PORT_443_TCP_PORT=443 KUBERNETES_PORT_443_TCP_PROTO=tcp WISHFUL_RABBIT_MYCHART_SENTINEL_PORT_26379_TCP_ADDR=10.107.63.208 WISHFUL_RABBIT_MYCHART_PORT_80_TCP=tcp://10.101.103.224:80 WISHFUL_RABBIT_MYCHART_SLAVE_SVC_SERVICE_HOST=10.99.211.111 WISHFUL_RABBIT_MYCHART_SENTINEL_PORT_26379_TCP_PORT=26379 WISHFUL_RABBIT_MYCHART_SENTINEL_PORT_26379_TCP_PROTO=tcp KUBERNETES_SERVICE_PORT_HTTPS=443 KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443 WISHFUL_RABBIT_MYCHART_MASTER_SVC_SERVICE_HOST=10.108.128.167 PWD=/ KUBERNETES_SERVICE_HOST=10.96.0.1 WISHFUL_RABBIT_MYCHART_SLAVE_SVC_SERVICE_PORT=6379 WISHFUL_RABBIT_MYCHART_SLAVE_SVC_PORT=tcp://10.99.211.111:6379 WISHFUL_RABBIT_MYCHART_SERVICE_PORT_HTTP=80 REDIS_SENTINEL_SERVICE_HOST=redis-sentinel WISHFUL_RABBIT_MYCHART_SLAVE_SVC_PORT_6379_TCP_ADDR=10.99.211.111 WISHFUL_RABBIT_MYCHART_SENTINEL_PORT_26379_TCP=tcp://10.107.63.208:26379 WISHFUL_RABBIT_MYCHART_MASTER_SVC_PORT=tcp://10.108.128.167:6379 WISHFUL_RABBIT_MYCHART_MASTER_SVC_SERVICE_PORT=6379
Application Pod Env
kubectl exec -it wishful-rabbit-mychart-85dc7658c6-8wlq6 -- sh # printenv KUBERNETES_SERVICE_PORT=443 WISHFUL_RABBIT_MYCHART_SLAVE_SVC_PORT_6379_TCP_PORT=6379 KUBERNETES_PORT=tcp://10.96.0.1:443 WISHFUL_RABBIT_MYCHART_MASTER_SVC_PORT_6379_TCP_ADDR=10.108.128.167 WISHFUL_RABBIT_MYCHART_SLAVE_SVC_PORT_6379_TCP_PROTO=tcp WISHFUL_RABBIT_MYCHART_SERVICE_HOST=10.101.103.224 HOSTNAME=wishful-rabbit-mychart-85dc7658c6-8wlq6 WISHFUL_RABBIT_MYCHART_MASTER_SVC_PORT_6379_TCP_PORT=6379 WISHFUL_RABBIT_MYCHART_MASTER_SVC_PORT_6379_TCP_PROTO=tcp PYTHON_PIP_VERSION=9.0.1 WISHFUL_RABBIT_MYCHART_SENTINEL_SERVICE_HOST=10.107.63.208 HOME=/root GPG_KEY=C01E1CAD5EA2C4F0B8E3571504C367C218ADD4FF REDIS=wishful-rabbit-mychart-master-svc WISHFUL_RABBIT_MYCHART_SERVICE_PORT=80 WISHFUL_RABBIT_MYCHART_PORT=tcp://10.101.103.224:80 WISHFUL_RABBIT_MYCHART_SLAVE_SVC_PORT_6379_TCP=tcp://10.99.211.111:6379 WISHFUL_RABBIT_MYCHART_MASTER_SVC_PORT_6379_TCP=tcp://10.108.128.167:6379 WISHFUL_RABBIT_MYCHART_SENTINEL_SERVICE_PORT=26379 WISHFUL_RABBIT_MYCHART_SENTINEL_PORT=tcp://10.107.63.208:26379 WISHFUL_RABBIT_MYCHART_PORT_80_TCP_ADDR=10.101.103.224 NAME=World TERM=xterm KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1 WISHFUL_RABBIT_MYCHART_PORT_80_TCP_PORT=80 WISHFUL_RABBIT_MYCHART_PORT_80_TCP_PROTO=tcp PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin KUBERNETES_PORT_443_TCP_PORT=443 KUBERNETES_PORT_443_TCP_PROTO=tcp LANG=C.UTF-8 WISHFUL_RABBIT_MYCHART_SENTINEL_PORT_26379_TCP_ADDR=10.107.63.208 WISHFUL_RABBIT_MYCHART_SLAVE_SVC_SERVICE_HOST=10.99.211.111 WISHFUL_RABBIT_MYCHART_PORT_80_TCP=tcp://10.101.103.224:80 PYTHON_VERSION=2.7.14 WISHFUL_RABBIT_MYCHART_SENTINEL_PORT_26379_TCP_PORT=26379 WISHFUL_RABBIT_MYCHART_SENTINEL_PORT_26379_TCP_PROTO=tcp KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443 KUBERNETES_SERVICE_PORT_HTTPS=443 WISHFUL_RABBIT_MYCHART_MASTER_SVC_SERVICE_HOST=10.108.128.167 KUBERNETES_SERVICE_HOST=10.96.0.1 PWD=/app WISHFUL_RABBIT_MYCHART_SLAVE_SVC_PORT=tcp://10.99.211.111:6379 WISHFUL_RABBIT_MYCHART_SERVICE_PORT_HTTP=80 WISHFUL_RABBIT_MYCHART_SLAVE_SVC_SERVICE_PORT=6379 WISHFUL_RABBIT_MYCHART_SLAVE_SVC_PORT_6379_TCP_ADDR=10.99.211.111 WISHFUL_RABBIT_MYCHART_SENTINEL_PORT_26379_TCP=tcp://10.107.63.208:26379 WISHFUL_RABBIT_MYCHART_MASTER_SVC_SERVICE_PORT=6379 WISHFUL_RABBIT_MYCHART_MASTER_SVC_PORT=tcp://10.108.128.167:6379
All Endpoints
kubectl get ep NAME ENDPOINTS AGE kubernetes 10.0.2.15:8443 4h wishful-rabbit-mychart 172.17.0.5:80,172.17.0.6:80,172.17.0.7:80 1h wishful-rabbit-mychart-master-svc <none> 1h wishful-rabbit-mychart-sentinel 172.17.0.11:26379,172.17.0.12:26379,172.17.0.8:26379 1h wishful-rabbit-mychart-slave-svc <none>
Describe Redis Master Service
kubectl describe svc wishful-rabbit-mychart-master-svc Name: wishful-rabbit-mychart-master-svc Namespace: default Labels: <none> Annotations: <none> Selector: app=redis-ha,redis-node=true,redis-role=master,release=wishful-rabbit Type: ClusterIP IP: 10.108.128.167 Port: <unset> 6379/TCP TargetPort: 6379/TCP Endpoints: <none> Session Affinity: None Events: <none>
Describe Redis Server Pod
kubectl describe po wishful-rabbit-mychart-server-746f47dfdd-2fn4s Name: wishful-rabbit-mychart-server-746f47dfdd-2fn4s Namespace: default Node: minikube/192.168.99.100 Start Time: Fri, 02 Feb 2018 15:28:42 +0900 Labels: app=mychart chart=mychart-0.1.0 heritage=Tiller name=redis-server pod-template-hash=3029038988 podIP=172.17.0.10 redis-node=true redis-role=master release=wishful-rabbit runID=cbf8e0 Annotations: kubernetes.io/created-by={"kind":"SerializedReference","apiVersion":"v1","reference":{"kind":"ReplicaSet","namespace":"default","name":"wishful-rabbit-mychart-server-746f47dfdd","uid":"4fcb0dfc-07e2-1... Status: Running IP: 172.17.0.10 Controlled By: ReplicaSet/wishful-rabbit-mychart-server-746f47dfdd Containers: redis: Container ID: docker://2734d60bd44a1446ec6556369359ed15b866a4589abe1e6d394f9252114c6d4d Image: quay.io/smile/redis:4.0.6r2 Image ID: docker-pullable://quay.io/smile/redis@sha256:8948a952920d4495859c984546838d4c9b4c71e0036eef86570922d91cacb3df Port: 6379/TCP State: Running Started: Fri, 02 Feb 2018 15:28:44 +0900 Ready: True Restart Count: 0 Environment: REDIS_SENTINEL_SERVICE_HOST: redis-sentinel REDIS_CHART_PREFIX: wishful-rabbit-mychart- Mounts: /redis-master-data from data (rw) /var/run/secrets/kubernetes.io/serviceaccount from default-token-wfv2q (ro) Conditions: Type Status Initialized True Ready True PodScheduled True Volumes: data: Type: EmptyDir (a temporary directory that shares a pod's lifetime) Medium: default-token-wfv2q: Type: Secret (a volume populated by a Secret) SecretName: default-token-wfv2q Optional: false QoS Class: BestEffort Node-Selectors: <none> Tolerations: <none> Events: <none>
原文:https://stackoverflow.com/questions/48577544
满意答案
日志很清楚:
java.net.SocketTimeoutException: failed to connect to /192.168.1.15 (port 5984)
ACRA无法访问服务器。
您可以检查是否可以从普通的移动浏览器访问服务器以识别问题位置。
The log is pretty clear:
java.net.SocketTimeoutException: failed to connect to /192.168.1.15 (port 5984)
ACRA can't reach the server.
You can check if you can reach the server from a normal mobile browser to identify the problems location.
相关问答
更多android:如何创建ACRA崩溃报告Txt文件?(android: how to create ACRA crash Report Txt File?)
任何ACRA的替代Bugsense(Any replacement for Bugsense for ACRA)
ACRA vs UncaughtExceptionHandler哪个更好?(ACRA vs UncaughtExceptionHandler Which is better?)
无法从ACRA收到Acralyzer的崩溃报告(Not able to receive crash reports in Acralyzer from ACRA)
Android - 如何在Acra崩溃报告中以编程方式设置USER_EMAIL?(Android - How to programmatically set USER_EMAIL in Acra crash report?)
ACRA - 在没有任何崩溃对话的情况下静默发送崩溃报告(ACRA - silently send crash reports without any crash dialog)
ACRA崩溃报告是否也需要服务许可?(Does ACRA crash reporting also require service permission?)
如何使用ACRA发送Android Crash报告(How to send Android Crash report using ACRA)
什么是标准Java的ACRA?(What is ACRA for standard Java?)
Android ACRA #init不止一次调用(Android ACRA#init called more than once)
相关文章
更多在archlinux上搭建twitter storm cluster
redis 集群环境搭建-redis集群管理
Spark - A Fault-Tolerant Abstraction for In-Memory Cluster Computing
storm操作zookeeper源码分析-cluster.clj
install cluster Hadoop 安装集群版Hadoop
redis新增集群节点-redis集群管理
redis集群插槽分配-redis集群管理
redis删除集群节点-redis集群管理
redis集群出现宕机没法访问-redis集群管理
redis 集群使用主从复制架构-redis集群管理
最新问答
更多获取MVC 4使用的DisplayMode后缀(Get the DisplayMode Suffix being used by MVC 4)
如何通过引用返回对象?(How is returning an object by reference possible?)
矩阵如何存储在内存中?(How are matrices stored in memory?)
每个请求的Java新会话?(Java New Session For Each Request?)
css:浮动div中重叠的标题h1(css: overlapping headlines h1 in floated divs)
无论图像如何,Caffe预测同一类(Caffe predicts same class regardless of image)
xcode语法颜色编码解释?(xcode syntax color coding explained?)
在Access 2010 Runtime中使用Office 2000校对工具(Use Office 2000 proofing tools in Access 2010 Runtime)
从单独的Web主机将图像传输到服务器上(Getting images onto server from separate web host)
从旧版本复制文件并保留它们(旧/新版本)(Copy a file from old revision and keep both of them (old / new revision))
Copyright ©2023 peixunduo.com All Rights Reserved.粤ICP备14003112号
本站部分内容来源于互联网,仅供学习和参考使用,请莫用于商业用途。如有侵犯你的版权,请联系我们(neng862121861#163.com),本站将尽快处理。谢谢合作!