在 k8s 中创建 redis 部署时退避重启失败的容器

Posted

技术标签:

【中文标题】在 k8s 中创建 redis 部署时退避重启失败的容器【英文标题】:Back-off restarting failed container while creating a redis deployment in k8s 【发布时间】:2019-08-01 00:15:22 【问题描述】:

我正在尝试使用 kubernetes/redis 映像在 k8s 中启动部署对象。但我收到错误Back-off restarting failed container。仅 redis 图像会出现问题,我能够使用 postgres 图像等成功运行部署。

这里是配置文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      component: redis
  template:
    metadata:
      labels:
        component: redis
    spec: 
      containers:
        - name: redis
          image: kubernetes/redis
          ports:
            - containerPort: 6379

描述 pod 输出:

Name:               redis-deployment-57dcf8ff69-9v8sz
Namespace:          default
Priority:           0
PriorityClassName:  <none>
Node:               minikube/10.0.2.15
Start Time:         Sun, 10 Mar 2019 11:13:00 +0530
Labels:             component=redis
                    pod-template-hash=57dcf8ff69
Annotations:        <none>
Status:             Running
IP:                 172.17.0.8
Controlled By:      ReplicaSet/redis-deployment-57dcf8ff69
Containers:
  redis:
    Container ID:   docker://556544175a99da6cd704ddc5ae6e65ee0a424275872d86543bbfef6eebceff5b
    Image:          kubernetes/redis
    Image ID:       docker-pullable://kubernetes/redis@sha256:60e8254f473b1df64340da257e8e0a029c0ac67a76bdde296f11eba6cde515c7
    Port:           6379/TCP
    State:          Waiting
      Reason:       CrashLoopBackOff
    Last State:     Terminated
      Reason:       Error
      Exit Code:    1
      Started:      Sun, 10 Mar 2019 20:12:26 +0530
      Finished:     Sun, 10 Mar 2019 20:13:28 +0530
    Ready:          False
    Restart Count:  13
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-zqj5b (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             False
  ContainersReady   False
  PodScheduled      True
Volumes:
  default-token-zqj5b:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-zqj5b
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type     Reason          Age                From               Message
  ----     ------          ----               ----               -------
  Normal   Scheduled       9h                 default-scheduler  Successfully assigned default/redis-deployment-57dcf8ff69-9v8sz to minikube
  Normal   Pulling         5h (x5 over 9h)    kubelet, minikube  pulling image "kubernetes/redis"
  Normal   Pulled          5h (x5 over 5h)    kubelet, minikube  Successfully pulled image "kubernetes/redis"
  Normal   Created         5h (x5 over 5h)    kubelet, minikube  Created container
  Normal   Started         5h (x5 over 5h)    kubelet, minikube  Started container
  Warning  BackOff         5h (x53 over 5h)   kubelet, minikube  Back-off restarting failed container
  Normal   SandboxChanged  17m                kubelet, minikube  Pod sandbox changed, it will be killed and re-created.
  Normal   Pulling         11m (x4 over 16m)  kubelet, minikube  pulling image "kubernetes/redis"
  Normal   Pulled          11m (x4 over 16m)  kubelet, minikube  Successfully pulled image "kubernetes/redis"
  Normal   Created         11m (x4 over 16m)  kubelet, minikube  Created container
  Normal   Started         11m (x4 over 16m)  kubelet, minikube  Started container
  Warning  BackOff         1m (x39 over 15m)  kubelet, minikube  Back-off restarting failed container

我在此示例中使用 kubernetes/redis 映像,因为使用 redis 映像完全失败,因为 kubectl 无法从 dockerhub 获取映像,我得到了错误,表示提取图像失败。不知道为什么!

谁能帮帮我。

编辑---

日志

kubectl.exe logs redis-deployment-57dcf8ff69-9v8sz
Could not connect to Redis at -p:6379: Name or service not known
Failed to find master.

【问题讨论】:

可以发日志吗? @Arslanbekov 添加到正在编辑的帖子中。 我不确定您使用的是哪个图像。看起来 kubernetes 将他们的图像移动到 gcr,所以我猜你正在使用来自 docker hub 的旧图像? github.com/kubernetes/kubernetes/commit/… @Amityo。谢谢。将尝试使用 GCR 中的图像,看看是否有效。 【参考方案1】:

下面的配置文件对我有用。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      component: redis
  template:
    metadata:
      labels:
        component: redis
    spec: 
      containers:
        - name: redis
          image: gcr.io/google_containers/redis:v1
          env:
            - name: MASTER
              value: "true"
          ports:
            - containerPort: 6379

【讨论】:

以上是关于在 k8s 中创建 redis 部署时退避重启失败的容器的主要内容,如果未能解决你的问题,请参考以下文章

K8s pods重启策略

如何在特定命名空间中创建 K8S 部署?

docker 在部署 Redis 容器使用 redis.conf 配置启动失败

云原生之kubernetes实战在k8s下部署Redis集群

在 Intune 中创建本地管理员用户帐户失败

K8S CoreDNS部署失败,问题分析