【问题标题】:How to add kubernetes liveness probe如何添加kubernetes liveness probe
【发布时间】:2017-08-06 10:26:56
【问题描述】:

我正在编写一个简单的 YAML 文件,以使用 Centos.6 上的 TCP 端口应用活性探测

  1. 我从公共存储库中提取了一个 centos:6 映像
  2. 使用该图像启动了一个容器。
  3. 安装了mysql,并启动它来验证一个打开的端口(3306)
  4. 作为“mysql-test:v0.1”提交到本地存储库

并如下应用一个 pod

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: mysql-test
  name: mysql-test-exec
spec:
  containers:
  - name: mysql-test
    args:
    - /sbin/service
    - mysqld
    - start
    image: mysql-test:v0.1
    livenessProbe:
      tcpSocket:
        port: 3306
      initialDelaySeconds: 15
      periodSeconds: 20

但是,pod的状态是CrashLoopBackOff,而work02上容器的状态是Exited

1) 主节点

root@kubeadm-master01:~# kubectl get pods 
NAME              READY     STATUS             RESTARTS   AGE
mysql-test-exec   0/1       CrashLoopBackOff   6          8m

root@kubeadm-master01:~# kubectl describe pod mysql-test-exec
.
.
.
Events:
  FirstSeen     LastSeen        Count   From                    SubObjectPath                   Type            Reason          Message
  ---------     --------        -----   ----                    -------------                   --------        ------          -------
  1m            1m              1       default-scheduler                                       Normal          Scheduled       Successfully assigned mysql-test-exec to kubeadm-work02
  1m            1m              1       kubelet, kubeadm-work02 spec.containers{mysql-test}     Normal          Created         Created container with id abbad6585021151cd86fdfb3a9f733245f603686c90f533f23
44397c97c36918
  1m            1m              1       kubelet, kubeadm-work02 spec.containers{mysql-test}     Normal          Started         Started container with id abbad6585021151cd86fdfb3a9f733245f603686c90f533f23
44397c97c36918
  1m            1m              1       kubelet, kubeadm-work02 spec.containers{mysql-test}     Normal          Started         Started container with id a1062083089eed109fe8f41344136631bb9d4c08a2c6454dc7
7f677f01a48666
  1m            1m              1       kubelet, kubeadm-work02 spec.containers{mysql-test}     Normal          Created         Created container with id a1062083089eed109fe8f41344136631bb9d4c08a2c6454dc7
7f677f01a48666
  1m            1m              3       kubelet, kubeadm-work02                                 Warning         FailedSync      Error syncing pod, skipping: failed to "StartContainer" for "mysql-test" wit
h CrashLoopBackOff: "Back-off 10s restarting failed container=mysql-test pod=mysql-test-exec_default(810c37bd-7a8c-11e7-9224-525400603584)"

  1m    1m      1       kubelet, kubeadm-work02 spec.containers{mysql-test}     Normal  Created         Created container with id 79512aeaf8a6b4692e11b344adb24763343bb2a06c9003222097962822d42202
  1m    1m      1       kubelet, kubeadm-work02 spec.containers{mysql-test}     Normal  Started         Started container with id 79512aeaf8a6b4692e11b344adb24763343bb2a06c9003222097962822d42202
  1m    43s     3       kubelet, kubeadm-work02                                 Warning FailedSync      Error syncing pod, skipping: failed to "StartContainer" for "mysql-test" with CrashLoopBackOff: "Bac
k-off 20s restarting failed container=mysql-test pod=mysql-test-exec_default(810c37bd-7a8c-11e7-9224-525400603584)"

  29s   29s     1       kubelet, kubeadm-work02 spec.containers{mysql-test}     Normal  Started         Started container with id 4427a3b8e5320b284ac764c1152def4ba749e4f656b3c464a472514bccf2e30e
  1m    29s     4       kubelet, kubeadm-work02 spec.containers{mysql-test}     Normal  Pulled          Container image "centos-mysql:v0.1" already present on machine
  29s   29s     1       kubelet, kubeadm-work02 spec.containers{mysql-test}     Normal  Created         Created container with id 4427a3b8e5320b284ac764c1152def4ba749e4f656b3c464a472514bccf2e30e
  1m    10s     9       kubelet, kubeadm-work02 spec.containers{mysql-test}     Warning BackOff         Back-off restarting failed container
  27s   10s     3       kubelet, kubeadm-work02                                 Warning FailedSync      Error syncing pod, skipping: failed to "StartContainer" for "mysql-test" with CrashLoopBackOff: "Bac
k-off 40s restarting failed container=mysql-test pod=mysql-test-exec_default(810c37bd-7a8c-11e7-9224-525400603584)"

2) 工作节点

root@kubeadm-work02:~# docker logs f64e20bf33a8
Starting mysqld:  [  OK  ]

【问题讨论】:

  • 不是docker logs,而是docker ps,看看你的容器会退出
  • pod 状态为“CrashLoopBackOff”,容器状态为“Exited”。

标签: centos kubernetes kubernetes-health-check


【解决方案1】:

我必须删除 args 才能使用 docker 映像。下面的部署对我有用。

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: mysql-test
  name: mysql-test-exec
spec:
  containers:
  - name: mysql-test   
    image: mysql:5.6
    env:
      - name: MYSQL_ROOT_PASSWORD
        value:  mysql456
    livenessProbe:
      tcpSocket:
        port: 3306
      initialDelaySeconds: 15
      periodSeconds: 20

【讨论】:

  • 不幸的是,它也不起作用。我想知道如何在启动时运行 mysqld
  • Docker镜像自动启动mysqld。我们只需要传递root密码。你得到什么错误?
  • 结果和之前差不多。我有个问题。即使我在 centos-mysql:5.7 映像上安装 mysql 时运行了“chkconfig mysqld on”。 "docker run -tid --privileged=true -h test-mysql --name test-mysql centos-mysql:5.7 /bin/bash" 在启动时没有运行 mysqld。所以我别无选择将 ARG(- /sbin/service - mysqld - start) 添加到 YAML。看不懂“Docker镜像自动启动mysqld”。
  • 我认为您对操作系统和容器感到困惑。在 Docker 容器中只会运行一个进程,在本例中为 mysqld,当您运行 docker 映像时,它将自动启动。用于测试停止主机中的 mysql,chkconfig mysqld stop。然后运行这个 docker 容器。 docker run --name MYSQL802 --net=host -p 3306:3306 -e MYSQL_ROOT_PASSWORD=mysql456 -d mysql:8.0.2。之后就可以连接mysql数据库了。
  • 感谢您的解释。我没有使用仅为 Mysql 构建的镜像,而是在 centos:6 镜像上手动安装了 Mysql,因为我的目的只是为了测试 livenessProbe(而不是部署 Mysql)。所以我认为我的容器就像操作系统。
猜你喜欢
  • 2020-04-11
  • 1970-01-01
  • 1970-01-01
  • 2016-06-12
  • 1970-01-01
  • 1970-01-01
  • 2020-03-01
  • 1970-01-01
  • 2019-04-02
相关资源
最近更新 更多