https://prefect.io logo
Title
i

Igor Pontes

02/10/2023, 4:18 AM
Hello, I'm trying to run a KubernetesJob with a PRIVATE image from dockerhub, but I have not success with that šŸ˜• I'm using prefect 2.7.11. I'm also using prefect-orion and prefect-agent helm charts. I add my docker-cred secret using agent.image.pullSecrets. I have tried creating my deployment with two options: ā€¢ a KubernetesJob
infrastructure=KubernetesJob(
        namespace="prefect-orion",
        image="<http://docker.io/myrepo/myimage:tag|docker.io/myrepo/myimage:tag>"
    ),
but I'm getting this error:
Flow run infrastructure exited with non-zero status code -1.
ā€¢ a DockerContainer I passed my credentials directed in a Docker Registry and I created a DockerContainer. but I'm getting this error:
State Message
Submission failed. Traceback (most recent call last): File "/usr/local/lib/python3.10/site-packages/urllib3/connectionpool.py", line 703, in urlopen httplib_response = self._make_request( File "/usr/local/lib/python3.10/site-packages/urllib3/connectionpool.py", line 398, in _make_request conn.request(method, url, **httplib_request_kw) File "/usr/local/lib/python3.10/http/client.py", line 1282, in request self._send_request(method, url, body, headers, encode_chunked) File "/usr/local/lib/python3.10/http/client.py", line 1328, in _send_request self.endheaders(body, encode_chunked=encode_chunked) File "/usr/local/lib/python3.10/http/client.py", line 1277, in endheaders self._send_output(message_body, encode_chunked=encode_chunked) File "/usr/local/lib/python3.10/http/client.py", line 1037, in _send_output self.send(msg) File "/usr/local/lib/python3.10/http/client.py", line 975, in send self.connect() File "/usr/local/lib/python3.10/site-packages/docker/transport/unixconn.py", line 30, in connect sock.connect(self.unix_socket) FileNotFoundError: [Errno 2] No such file or directory During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.10/site-packages/requests/adapters.py", line 489, in send resp = conn.urlopen( File "/usr/local/lib/python3.10/site-packages/urllib3/connectionpool.py", line 787, in urlopen retries = retries.increment( File "/usr/local/lib/python3.10/site-packages/urllib3/util/retry.py", line 550, in increment raise six.reraise(type(error), error, _stacktrace) File "/usr/local/lib/python3.10/site-packages/urllib3/packages/six.py", line 769, in reraise raise value.with_traceback(tb) File "/usr/local/lib/python3.10/site-packages/urllib3/connectionpool.py", line 703, in urlopen httplib_response = self._make_request( File "/usr/local/lib/python3.10/site-packages/urllib3/connectionpool.py", line 398, in _make_request conn.request(method, url, **httplib_request_kw) File "/usr/local/lib/python3.10/http/client.py", line 1282, in request self._send_request(method, url, body, headers, encode_chunked) File "/usr/local/lib/python3.10/http/client.py", line 1328, in _send_request self.endheaders(body, encode_chunked=encode_chunked) File "/usr/local/lib/python3.10/http/client.py", line 1277, in endheaders self._send_output(message_body, encode_chunked=encode_chunked) File "/usr/local/lib/python3.10/http/client.py", line 1037, in _send_output self.send(msg) File "/usr/local/lib/python3.10/http/client.py", line 975, in send self.connect() File "/usr/local/lib/python3.10/site-packages/docker/transport/unixconn.py", line 30, in connect sock.connect(self.unix_socket) urllib3.exceptions.ProtocolError: ('Connection aborted.', FileNotFoundError(2, 'No such file or directory')) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.10/site-packages/docker/api/client.py", line 214, in _retrieve_server_version return self.version(api_version=False)["ApiVersion"] File "/usr/local/lib/python3.10/site-packages/docker/api/daemon.py", line 181, in version return self._result(self._get(url), json=True) File "/usr/local/lib/python3.10/site-packages/docker/utils/decorators.py", line 46, in inner return f(self, *args, **kwargs) File "/usr/local/lib/python3.10/site-packages/docker/api/client.py", line 237, in _get return self.get(url, **self._set_request_timeout(kwargs)) File "/usr/local/lib/python3.10/site-packages/requests/sessions.py", line 600, in get return self.request("GET", url, **kwargs) File "/usr/local/lib/python3.10/site-packages/requests/sessions.py", line 587, in request resp = self.send(prep, **send_kwargs) File "/usr/local/lib/python3.10/site-packages/requests/sessions.py", line 701, in send r = adapter.send(request, **kwargs) File "/usr/local/lib/python3.10/site-packages/requests/adapters.py", line 547, in send raise ConnectionError(err, request=request) requests.exceptions.ConnectionError: ('Connection aborted.', FileNotFoundError(2, 'No such file or directory')) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.10/site-packages/prefect/infrastructure/docker.py", line 89, in _get_docker_client docker_client = docker.from_env() File "/usr/local/lib/python3.10/site-packages/docker/client.py", line 96, in from_env return cls( File "/usr/local/lib/python3.10/site-packages/docker/client.py", line 45, in __init__ self.api = APIClient(*args, **kwargs) File "/usr/local/lib/python3.10/site-packages/docker/api/client.py", line 197, in __init__ self._version = self._retrieve_server_version() File "/usr/local/lib/python3.10/site-packages/docker/api/client.py", line 221, in _retrieve_server_version raise DockerException( docker.errors.DockerException: Error while fetching server API version: ('Connection aborted.', FileNotFoundError(2, 'No such file or directory')) The above exception was the direct cause of the following exception: RuntimeError: Could not connect to Docker.
anyone have an idea how to pass docker credentials to be able use a private docker image in a KubernetesJob? šŸ˜• thanks
āœ… 1
šŸ‘ 1
r

redsquare

02/10/2023, 7:21 AM
have you created a patch and added to infra_overrides for the pull secret?
šŸ™Œ 1
i

Igor Pontes

02/10/2023, 2:05 PM
@redsquare no, how do I do that? do you have some example? thanks for the answer
r

redsquare

02/10/2023, 2:54 PM
@Igor Pontes something like this

https://prefect-community.slack.com/files/U04GNEJ20BC/F04LV6CB6DR/screenshot_2023-01-27_at_7.18.02_pm.pngā–¾

youll need the correct patch/path but that is how it gets added to the job template
d

Deceivious

02/10/2023, 3:44 PM
https://docs.prefect.io/api-ref/prefect/infrastructure/#prefect.infrastructure.KubernetesJob Had the same issue - the docs here specify how to write the customization .
infra_overrides={
    "customizations": [
        {
            "op": "add",
            "path": "/spec/template/spec/imagePullSecrets",
            "value": [],
        },
        {
            "op": "add",
            "path": "/spec/template/spec/imagePullSecrets/0",
            "value": {"name": "SECRET NAME CREATE IN KUBERNATES HERE"},
        },
    ],
},
šŸ™Œ 1
i

Igor Pontes

02/10/2023, 4:12 PM
thanks a LOT @redsquare and @Deceivious I thought could be using customizations, but I didn't know how to find the right path. I didn't advance because a lack of knowledge in k8s/yaml.
šŸ‘ 2