Kubernetes:获取名称解析错误

时间:2020-07-20 18:50:03

标签: kubernetes minikube

我正在将php和redis部署到本地minikube集群,但低于与名称解析有关的错误。

Warning: Redis::connect(): php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution in /app/redis.php on line 4

Warning: Redis::connect(): connect() failed: php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution in /app/redis.php on line 4

Fatal error: Uncaught RedisException: Redis server went away in /app/redis.php:5 Stack trace: #0 /app/redis.php(5): Redis->ping() #1 {main} thrown in /app/redis.php on line 5

我正在使用以下配置文件:

apache-php.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: webserver
  labels:
    app: apache
spec:
  replicas: 1
  selector:
    matchLabels:
      app: apache
  template:
    metadata:
      labels:
        app: apache
    spec:
      containers:
      - name: php-apache
        image: webdevops/php-apache
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        volumeMounts:
        - name: app-code
          mountPath: /app
      volumes:
        - name: app-code
          hostPath:
            path: /minikubeMnt/src
---
apiVersion: v1
kind: Service
metadata:
  name: web-service
  labels:
    app: apache
spec:
  type: NodePort
  ports:
  - port: 80
    protocol: TCP
  selector:
    app: apache

redis.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis
  labels:
    app: redis
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
        - name: redis
          image: redis:5.0.4
          imagePullPolicy: IfNotPresent
          ports:
             - containerPort: 6379
---
apiVersion: v1
kind: Service
metadata:
  name: redis-service
spec:
  type: NodePort
  ports:
    - port: 6379
      targetPort: 6379
  selector:
    app: redis

我正在使用下面的PHP代码访问Redis,已将下面的代码安装到apache-php部署中。

<?php
ini_set('display_errors', 1);
$redis = new Redis();
$redis->connect("redis-service", 6379);
echo "Server is running: ".$redis->ping();

服务的集群仪表板视图如下:

img1 img2

谢谢。

当我运行env命令时,获取的值低于与Redis相关的值,并且当我使用IP:10.104.115.148访问Redis时,它就可以正常工作。

REDIS_SERVICE_PORT=tcp://10.104.115.148:6379
REDIS_SERVICE_PORT_6379_TCP=tcp://10.104.115.148:6379
REDIS_SERVICE_SERVICE_PORT=6379
REDIS_SERVICE_PORT_6379_TCP_ADDR=10.104.115.148
REDIS_SERVICE_PORT_6379_TCP_PROTO=tcp```

1 个答案:

答案 0 :(得分:1)

考虑在此处使用K8S livelinessreadiness探针,以自动从错误中恢复。您可以找到更多相关信息here

然后您可以使用initContainer,使用带有while的bash break循环来检查redis服务器的可用性,然后让php-apache启动。有关更多信息,请检查here中的方案2


Redis服务作为群集IP

apiVersion: v1
kind: Service
metadata:
  name: redis-service
spec:
  type: clusterIP
  ports:
    - port: 6379
      targetPort: 6379
  selector:
    app: redis