{"id":36688108,"url":"https://github.com/converged-computing/flux-operator-argo","last_synced_at":"2026-01-12T11:16:40.839Z","repository":{"id":234037643,"uuid":"657751912","full_name":"converged-computing/flux-operator-argo","owner":"converged-computing","description":"Simple experiment to run a Flux Operator MiniCluster (CRD) with Argo","archived":false,"fork":false,"pushed_at":"2023-06-23T19:09:45.000Z","size":6,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-10T14:50:08.548Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/converged-computing.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2023-06-23T19:08:31.000Z","updated_at":"2023-06-23T19:09:50.000Z","dependencies_parsed_at":"2024-04-18T02:20:30.573Z","dependency_job_id":"d0d5a0f3-edb9-489e-a623-6b2fcaf81c1b","html_url":"https://github.com/converged-computing/flux-operator-argo","commit_stats":null,"previous_names":["converged-computing/flux-operator-argo"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/converged-computing/flux-operator-argo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/converged-computing%2Fflux-operator-argo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/converged-computing%2Fflux-operator-argo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/converged-computing%2Fflux-operator-argo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/converged-computing%2Fflux-operator-argo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/converged-computing","download_url":"https://codeload.github.com/converged-computing/flux-operator-argo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/converged-computing%2Fflux-operator-argo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28338970,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T10:58:46.209Z","status":"ssl_error","status_checked_at":"2026-01-12T10:58:42.742Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-12T11:16:40.765Z","updated_at":"2026-01-12T11:16:40.826Z","avatar_url":"https://github.com/converged-computing.png","language":"Dockerfile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Flux Operator Argo\n\nSince I decided to try KubeFlow, and Argo seems to be related, I wanted to give a shot\nat using Argo. If it's slightly simpler in design it might be better suited to our needs.\nI am following the [guide here](https://argoproj.github.io/argo-workflows/workflow-concepts/)\nand the [quick start](https://argoproj.github.io/argo-workflows/quick-start/) to install.\n\n## Setup\n\nLet's create a cluster with kind:\n\n```bash\nkind create cluster\n```\n\nAnd install Argo:\n\n```bash\nkubectl create namespace argo\nkubectl apply -n argo -f https://github.com/argoproj/argo-workflows/releases/download/v3.4.8/install.yaml\n```\n\nRun this to bypass login auth for now:\n\n```bash\nkubectl patch deployment \\\n  argo-server \\\n  --namespace argo \\\n  --type='json' \\\n  -p='[{\"op\": \"replace\", \"path\": \"/spec/template/spec/containers/0/args\", \"value\": [\n  \"server\",\n  \"--auth-mode=server\"\n]}]'\n```\n\nAnd finally, port forward the user-interface:\n\n```bash\n$ kubectl -n argo port-forward deployment/argo-server 2746:2746\n```\nMake sure to open to [https://localhost:2746/](https://localhost:2746/) (note using https!)\nYou will need to accept the risk - yadda yadda. Finally, install an [argo release](https://github.com/argoproj/argo-workflows/releases/tag/v3.4.8),\nmeaning you will have a command line tool.\n\n```bash\n# Download the binary\ncurl -sLO https://github.com/argoproj/argo-workflows/releases/download/v3.4.8/argo-linux-amd64.gz\n\n# Unzip\ngunzip argo-linux-amd64.gz\n\n# Make binary executable\nchmod +x argo-linux-amd64\n\n# Move binary to path\nmkdir -p ./bin\nmv ./argo-linux-amd64 ./bin/argo\nexport PATH=$PWD/bin:$PATH\n\n# Test installation\nargo version\n```\n\n## Test Workflow\n\nHere is how to submit an example workflow:\n\n```bash\n$ argo submit -n argo --watch https://raw.githubusercontent.com/argoproj/argo-workflows/master/examples/hello-world.yaml\n```\n\nOr wget the same file to do the same:\n\n```bash\n$ wget https://raw.githubusercontent.com/argoproj/argo-workflows/master/examples/hello-world.yaml\n$ argo submit -n argo --watch ./hello-world.yaml\n```\n\nAnd then get details about it:\n\n```bash\nargo list -n argo\nargo get -n argo @latest\nargo logs -n argo @latest\n```\n\nThe user interface (I think) is really nice for the above. You can easily list your jobs, get metadata, or show logs!\n\n```console\nhello-smithers-6sxtk:  ______________________ \nhello-smithers-6sxtk: \u003c hello mr smithers :) \u003e\nhello-smithers-6sxtk:  ---------------------- \nhello-smithers-6sxtk:     \\\nhello-smithers-6sxtk:      \\\nhello-smithers-6sxtk:       \\     \nhello-smithers-6sxtk:                     ##        .            \nhello-smithers-6sxtk:               ## ## ##       ==            \nhello-smithers-6sxtk:            ## ## ## ##      ===            \nhello-smithers-6sxtk:        /\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"___/ ===        \nhello-smithers-6sxtk:   ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~   \nhello-smithers-6sxtk:        \\______ o          __/            \nhello-smithers-6sxtk:         \\    \\        __/             \nhello-smithers-6sxtk:           \\____\\______/   \nhello-smithers-6sxtk: time=\"2023-06-23T01:51:58.708Z\" level=info msg=\"sub-process exited\" argo=true error=\"\u003cnil\u003e\"\n```\n\nI next want to try customizing my own workflow (and container).\n\n## Flux Operator Workflow\n\nLet's see if we can ask Argo to run a Flux operator MiniCluster job.\nWe will want to install the flux-operator to the argo namespace.\n\n```bash\n$ git clone --depth 1 https://github.com/flux-framework/flux-operator /tmp/fo\n$ cd /tmp/fo\n$ helm install flux-operator --namespace argo ./chart\n```\n\nWe will need to patch the argo role to be able to control MiniClusters.\nThis is a bit of a hack for now (and likely there is a better way to do it)\nbut the argo \"default\" role binding needs permission to make miniclusters, e.g.,\nget the role binding:\n\n```bash\n$ kubectl get rolebindings.rbac.authorization.k8s.io -n argo argo-binding -o yaml \u003e argo-role-binding.yaml\n```\n\nAnd add the service account argo default to it:\n\n```diff\napiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n  annotations:\n    kubectl.kubernetes.io/last-applied-configuration: |\n      {\"apiVersion\":\"rbac.authorization.k8s.io/v1\",\"kind\":\"RoleBinding\",\"metadata\":{\"annotations\":{},\"creationTimestamp\":\"2023-06-23T03:21:27Z\",\"name\":\"argo-binding\",\"namespace\":\"argo\",\"resourceVersion\":\"329\",\"uid\":\"56034b9d-e91a-4a0a-8983-71f5dc3bf899\"},\"roleRef\":{\"apiGroup\":\"rbac.authorization.k8s.io\",\"kind\":\"Role\",\"name\":\"argo-role\"},\"subjects\":[{\"kind\":\"ServiceAccount\",\"name\":\"argo\",\"namespace\":\"argo\"},{\"kind\":\"ServiceAccount\",\"name\":\"default\",\"namespace\":\"argo\"}]}\n  creationTimestamp: \"2023-06-23T03:21:27Z\"\n  name: argo-binding\n  namespace: argo\n  resourceVersion: \"11490\"\n  uid: 56034b9d-e91a-4a0a-8983-71f5dc3bf899\nroleRef:\n  apiGroup: rbac.authorization.k8s.io\n  kind: Role\n  name: argo-role\nsubjects:\n- kind: ServiceAccount\n  name: argo\n  namespace: argo\n+ - kind: ServiceAccount\n+  name: default\n+  namespace: argo\n```\n\nDelete the old one and apply the new one:\n\n```bash\n$ kubectl delete -n argo rolebinding\n$ kubectl apply -f argo-role-binding.yaml\n```\n\nAnd then that service account needs to have the miniclusters added.\nNote that we did this action previously:\n\n```bash\n$ kubectl get -n argo role argo-role -o yaml \u003e argo-role.yaml\n```\nAnd then updated it, and are providing it here so you don't have to.\nApply again:\n\n```bash\n$ kubectl apply -f argo-roles.yaml\n```\n\nAnd then submit the job. \n\n```bash\n$ argo submit -n argo --watch ./flux-operator-job.yaml\n```\n\nYou will need to wait for the containers to pull before interaction is possible. The \nargo pod won't have much meaningful info beyond \"I\"m waiting for the MiniCluster job to tell me it\nis done.\"\n\n```bash\n$ kubectl logs -n argo hello-operator-job-kqnpm \n```\n```console\ntime=\"2023-06-23T18:27:31.419Z\" level=info msg=\"Get miniclusters 200\"\ntime=\"2023-06-23T18:27:31.419Z\" level=info msg=\"success condition '{status.completed == [true]}' evaluated false\"\ntime=\"2023-06-23T18:27:31.419Z\" level=info msg=\"0/1 success conditions matched\"\ntime=\"2023-06-23T18:27:31.419Z\" level=info msg=\"Waiting for resource minicluster.flux-framework.org/flux-q4hlp in namespace argo resulted in retryable error: Neither success condition nor the failure condition has been matched. Retrying...\"\n```\n\nWhile the containers are pulling (and the job is waiting) you can look at the pod logs for the job - in\nthis case, we (at the end) see the hello world printed!\n\n```bash\n$ kubectl logs -n argo flux-88smv-0-kkb5s\nhello world\n```\n\nI still need to figure out how to pass forward output from the main broker pod to Argo, which currently does\nnot see it unless you query the pod. I'm going to leave it here for now because I'm not sure I want to use\nthis tool (over other approaches). Note there is an example [here](https://github.com/argoproj/argo-workflows/blob/master/examples/k8s-jobs.yaml#L44-L58)\nof querying for custom metadata, so technically a log could be put as a status variable.\n\n```bash\nargo list -n argo\nargo get -n argo @latest\nargo logs -n argo @latest\n```\n\n## License\n\nHPCIC DevTools is distributed under the terms of the MIT license.\nAll new contributions must be made under this license.\n\nSee [LICENSE](https://github.com/converged-computing/cloud-select/blob/main/LICENSE),\n[COPYRIGHT](https://github.com/converged-computing/cloud-select/blob/main/COPYRIGHT), and\n[NOTICE](https://github.com/converged-computing/cloud-select/blob/main/NOTICE) for details.\n\nSPDX-License-Identifier: (MIT)\n\nLLNL-CODE- 842614\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fconverged-computing%2Fflux-operator-argo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fconverged-computing%2Fflux-operator-argo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fconverged-computing%2Fflux-operator-argo/lists"}