Openshift 4准备就绪探针失败

时间:2020-07-24 06:12:46

标签: openshift microprofile thorntail

我正在使用thorntail微档案框架来监视简单的Rest Service应用程序。由于收到以下消息,因此在openshift上进行应用程序部署工作正常,但运行状况监视器却无法运行:

准备情况调查失败:获取http://10.116.0.57:8080/health/live:拨打tcp 10.116.0.57:8080:连接:连接被拒绝

但是可以使用服务路线网址访问健康服务,例如http://thorntail-myproject.apps-crc.testing/health/live并获得结果:

{“状态”:“ UP”,“检查”:[{“名称”:“服务器状态”,“状态”:“ UP”}]}

HealthCheck实施类中同时包含“活力”和“就绪”两个注释。通过pod的远程容器外壳执行curl时,还会获得服务响应。

这些是我在pom.xml中使用的依赖项:

#include <thread>
#include <mutex>
#include <iostream>
#include <condition_variable>
#include <vector>
#include <unistd.h>
#define MAX_SIZE 2

struct Task
{
    std::condition_variable m_cond;
    std::mutex m_lock;
    Task(){}
};

std::vector<int> m_data;

Task m_producer;
Task m_consumers[MAX_SIZE];
std::mutex m_lock;

static bool s_Busy = false;

static void producer(void)
{

    for(;;)
    {
        size_t input=0;

        std::unique_lock<std::mutex> lock{m_lock};//{m_producer.m_lock};
        if (!s_Busy) {
            std::cout << "Enter a number: ";
            std::cin >> input;
            std::cout << "Producer waiting..." << std::this_thread::get_id() << "\r\n";
            m_producer.m_cond.wait(lock);
        }
        s_Busy = true;
        if (m_data.size() < input) {
            for (size_t i=0; i < input; ++i){
                m_data.push_back(i);
            }
        }
        for (int i=0; i < MAX_SIZE; ++i) {
            m_consumers[i].m_cond.notify_one();
        }
        lock.unlock();
    }

}


static void consumers(void)
{
    for(;;)
    {
        std::unique_lock<std::mutex> lock{m_lock};
        if (!s_Busy) {
            std::cout <<"Consumers waiting....!" << std::this_thread::get_id() << "\r\n";
            for (int i=0; i < MAX_SIZE; ++i) {
                m_consumers[i].m_cond.notify_all();
            }
        }
        if (!m_data.empty()) {
            std::cout << "Remove: " << m_data.at(0) << std::endl;
            m_data.erase(m_data.begin());
            usleep(1);
        }
        s_Busy = false;
        m_producer.m_cond.notify_one();
        lock.unlock();
    }
}


int main()
{

    std::vector<std::thread> cnsmrs;
    std::thread usr{producer};
    for (int i=0; i < MAX_SIZE; ++i)
        cnsmrs.push_back(std::thread{consumers});

    usr.join();
    for(int i=0 ; i < MAX_SIZE; ++i)
        cnsmrs.at(i).join();
    return 0;
}

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

问题可能是由许多原因引起的,但是您可以尝试以下操作:

  1. 验证您的deployment / deploymentConfig的Service对象是否已连接到正确的Pod和正确的端口。
  2. 验证路由/入口对象是否已连接到正确的服务对象。

上面的两件事似乎很正确,因为您可以访问Route URL,但是我们不知道您的部署以及部署的数量。

  1. 验证您的“活动性”和“就绪”探针是否正确:端口,页面(可能是某处的错字),协议-您使用的是HTTP还是HTTPS?
  2. 如果以上所有条件均正确,请检查您的命名空间是否还有其他NetworkPolicies。