ошибка тайм-аута для экземпляра Azure контейнера из очереди Redis - PullRequest
0 голосов
/ 03 октября 2019

У меня есть несколько приложений, развернутых в экземплярах Azure Container, к которым я получаю доступ через API-интерфейсы флакона, теперь я создаю обработчик для запуска / остановки контейнеров, например, EG

app1 находится в container1, если яполучить запрос к app1 один мой рабочий процесс:

1) Start the contianer1 from a python subprocess using azure CLI comands 
2) Make the API call to app1
3) Get the result and stop the container 

Так как я могу иметь более одного запроса за раз, я обрабатываю этот процесс в функцию add - подача в очередь redis, как показано ниже:

def make_call(arg1,arg2,arg3):


    start_container = 'az container start --name mycontainer  --resource-group mygroup'
    subprocess.call([start_container],shell=True)



    data = dict()
    data['query'] = {'query':"query"}
    #### 


    url = "http://api_url"
    resp = requests.post(url,data=json.dumps(data), headers=headers )
    print (resp)
    stop_container = 'az container stop --name mycontainer  --resource-group mygroup'
    subprocess.call([stop_container],shell=True)

    return resp

Таким образом, каждый раз, когда я получаю запрос, в очередь добавляется одна задача:

r = redis.Redis()
q = Queue(connection=r,default_timeout=3600)
task = q.enqueue(make_call,args = (arg1,arg2,arg3),timeout=500)
print (q.jobs) 

Если я сделаю только один вызов, он будет работать нормально, и из лазури можно увидеть, какконтейнер включается и выключается:

enter image description here

Но, конечно, это не цель очереди, когда я добавляю несколько заданий в очередь,первый работает нормально, а остальное не получается:

Traceback (most recent call last):
  File "/home/luis/anaconda3/lib/python3.7/site-packages/urllib3/connection.py", line 159, in _new_conn
    (self._dns_host, self.port), self.timeout, **extra_kw)
  File "/home/luis/anaconda3/lib/python3.7/site-packages/urllib3/util/connection.py", line 80, in create_connection
    raise err
  File "/home/luis/anaconda3/lib/python3.7/site-packages/urllib3/util/connection.py", line 70, in create_connection
    sock.connect(sa)
TimeoutError: [Errno 110] Connection timed out

Кроме того, я не использую kubernetes для этого случая, так как у меня есть только несколько сервисов, которые будут использоваться один или два раза в неделю.

** РЕДАКТИРОВАТЬ: **

Я нашел ошибку, но пока не знаю, как ее решить. Если я удаляю строку для запуска и остановки контейнера, я работаю нормально, поэтому проблема, похоже, связана с тем, что контейнер не был готов, когда я начинаю делать запросы, это любой способ убедиться, что контейнер запущен и работаетперед вызовом API?

Edit2

В настоящее время я создаю контейнеры с использованием CLI , например:

az container create -g MyResourceGroup --name myapp --image myimage:latest --cpu 1 --memory 1

Возможно ли эток этому оттуда, или я должен изменить все это на файл YML?

1 Ответ

0 голосов
/ 03 октября 2019

вы можете настроить датчик жизнедеятельности для этого при создании контейнера, чтобы при запуске он ждал, пока датчик жизнеспособности вернет успех, прежде чем перенаправлять трафик в контейнер.

apiVersion: 2018-06-01
location: eastus
name: livenesstest
properties:
  containers:
  - name: mycontainer
    properties:
      image: nginx
      ports: []
      resources:
        requests:
          cpu: 1.0
          memoryInGB: 1.5
      livenessProbe:
        exec:
          command:
          - "curl"
          - "http://localhost"
        periodSeconds: 5
  osType: Linux
  restartPolicy: Always
type: Microsoft.ContainerInstance/containerGroups

что-то в этом роде

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...