Как обновить образ контейнера запущенного модуля?

#amazon-web-services #sockets #kubernetes

Вопрос:

У меня есть приложение «Функция как услуга» (Faas), работающее в кластере aws, которым управляет kubernetes. Мы можем запустить простую функцию, такую как squre(x) x*x i. Он имеет интерфейсный интерфейс для службы функций, как показано ниже. FAAS хранит промежуточные значения в хранилище ключевых значений (KVS) в серверной части. Это модуль функций и памяти, доступ к которым можно получить с помощью URL-адреса службы ELB, как показано ниже.

Но когда я обновляю образ модуля daemonset, мое клиентское приложение получает ошибки, показанные ниже. Похоже, что он не может извлечь значение из KVS с помощью метода .get() и застрял после выполнения этой строки клиентского кода.

Может ли кто-нибудь указать мне, почему это могло произойти.. Если я не обновлю изображение, функция обычно возвращает ожидаемое значение 2 (функция incr увеличивает значение на 1). Как обновить образ контейнера, не испортив существующее приложение?

 $  kubectl get all
NAME                        READY   STATUS    RESTARTS   AGE
pod/function-nodes-bbvnn    4/4     Running   0          17m
pod/management-pod          1/1     Running   0          87m
pod/memory-nodes-cbmjw      1/1     Running   0          80m
pod/monitoring-pod          1/1     Running   0          86m
pod/routing-nodes-vlm8w     1/1     Running   0          84m
pod/scheduler-nodes-8n8qw   1/1     Running   0          77m

NAME                       TYPE           CLUSTER-IP      EXTERNAL-IP                                                               PORT(S)                                                                                                    AGE
service/function-service   LoadBalancer   100.70.84.205   a3017369b648a4f2fbe0febfc0ad54c9-2011295479.us-east-1.elb.amazonaws.com   5000:31561/TCP,5001:30768/TCP,5002:31216/TCP,5003:32210/TCP,5004:30144/TCP,5005:30786/TCP,5006:32347/TCP   72m
service/kubernetes         ClusterIP      100.64.0.1      <none>                                                                    443/TCP                                                                                                    91m
service/routing-service    LoadBalancer   100.71.3.82     a39920633763c4715b2e206f79a1c12f-785670853.us-east-1.elb.amazonaws.com    6450:31504/TCP,6451:31163/TCP,6452:30488/TCP,6453:31662/TCP                                                78m

NAME                             DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR    AGE
daemonset.apps/function-nodes    1         1         1       1            1           role=function    73m
daemonset.apps/memory-nodes      1         1         1       1            1           role=memory      80m
daemonset.apps/routing-nodes     1         1         1       1            1           role=routing     84m
daemonset.apps/scheduler-nodes   1         1         1       1            1           role=scheduler   77m

 

Клиент в пределах одного кластера

 >>> from cloudburst.client.client import CloudburstConnection
>>> cloudburst = CloudburstConnection('a3017369b648a4f2fbe0febfc0ad54c9-2011295479.us-east-1.elb.amazonaws.com', '172.20.43.111', False)
>>> incr = lambda _, a: a   1
>>> cloud_incr = cloudburst.register(incr, 'incr')
>>> cloud_incr(1).get()
^CTraceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/hydro/cloudburst/cloudburst/shared/future.py", line 26, in get
    obj = self.kvs_client.get(self.obj_id)[self.obj_id]
  File "/usr/local/lib/python3.6/dist-packages/anna/client.py", line 106, in get
    KeyResponse)
  File "/usr/local/lib/python3.6/dist-packages/anna/zmq_util.py", line 27, in recv_response
    resp = rcv_sock.recv()
  File "zmq/backend/cython/socket.pyx", line 788, in zmq.backend.cython.socket.Socket.recv
  File "zmq/backend/cython/socket.pyx", line 824, in zmq.backend.cython.socket.Socket.recv
  File "zmq/backend/cython/socket.pyx", line 186, in zmq.backend.cython.socket._recv_copy
  File "zmq/backend/cython/checkrc.pxd", line 12, in zmq.backend.cython.checkrc._check_rc
KeyboardInterrupt
>>>