{"id":20020033,"url":"https://github.com/katanaml/katana-skipper","last_synced_at":"2025-04-13T00:47:57.808Z","repository":{"id":39441751,"uuid":"296888592","full_name":"katanaml/katana-skipper","owner":"katanaml","description":"Simple and flexible ML workflow engine","archived":false,"fork":false,"pushed_at":"2023-10-04T07:27:33.000Z","size":7074,"stargazers_count":421,"open_issues_count":0,"forks_count":80,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-04-13T00:47:46.221Z","etag":null,"topics":["docker","docker-compose","ingress","k8s","katana","kubernetes","machine-learning","orchestration","pipeline","tensorflow"],"latest_commit_sha":null,"homepage":"https://katanaml.io/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/katanaml.png","metadata":{"files":{"readme":"README-GKE.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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,"publiccode":null,"codemeta":null},"funding":{"github":["abaranovskis-redsamurai"]}},"created_at":"2020-09-19T14:39:31.000Z","updated_at":"2025-03-28T02:53:02.000Z","dependencies_parsed_at":"2023-10-04T13:30:12.296Z","dependency_job_id":null,"html_url":"https://github.com/katanaml/katana-skipper","commit_stats":{"total_commits":405,"total_committers":3,"mean_commits":135.0,"dds":0.004938271604938316,"last_synced_commit":"ac09f4162040e43862a6e0174d13496d1c75cc11"},"previous_names":[],"tags_count":2,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/katanaml%2Fkatana-skipper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/katanaml%2Fkatana-skipper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/katanaml%2Fkatana-skipper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/katanaml%2Fkatana-skipper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/katanaml","download_url":"https://codeload.github.com/katanaml/katana-skipper/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248650435,"owners_count":21139672,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["docker","docker-compose","ingress","k8s","katana","kubernetes","machine-learning","orchestration","pipeline","tensorflow"],"created_at":"2024-11-13T08:29:40.517Z","updated_at":"2025-04-13T00:47:57.771Z","avatar_url":"https://github.com/katanaml.png","language":"Python","funding_links":["https://github.com/sponsors/abaranovskis-redsamurai"],"categories":[],"sub_categories":[],"readme":"# Katana ML Skipper GKE\n\nDeployment Guide for Google Kubernetes Engine (GKE).\n\n## Author\n\nKatana ML, Andrej Baranovskij\n\n## Instructions\n\n1. Push Skipper images to Docker registry, this registry should be accessible from GKE\n\n2. Open GKE Cloud Shell, follow GKE instructions in Kubernetes setup wizard\n\n![OCI](https://github.com/katanaml/katana-skipper/blob/master/gke-shell.png)\n\n3. Install [NGINX Ingress Controller](https://kubernetes.github.io/ingress-nginx/deploy/#gce-gke) for GKE\n\n4. Clone Skipper repo\n\n```\ngit clone https://github.com/katanaml/katana-skipper\n```\n\n5. Edit rabbitmq/rabbit-statefulset.yaml file, change storageClassName to 'standard-rwo'\n\n```\nvim rabbitmq/rabbit-statefulset.yaml\n```\n\n6. Edit api/api-ingress.yaml file, remove 'host' element to configure Ingress with GKE public IP\n\n```\nvim api/api-ingress.yaml\n```\n\n7. There is no need to create Persistent Volume on GKE, it will be provisioned automatically by Volume Claim. Remove this line from kubectl-setup.sh:\n\n```\nkubectl apply -f services/trainingservice/trainingservice-pv.yaml\n```\n\n8. Edit services/trainingservice/trainingservice-pvc.yaml, change it to support dynamic provisioning for Persistent Volume, remove storageClassName\n\n```\nvim services/trainingservice/trainingservice-pvc.yaml\n```\n\n```\napiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n  name: training-service-claim\nspec:\n  accessModes:\n    - ReadWriteOnce\n  resources:\n    requests:\n      storage: 500Mi\n```\n\n9. There is no need to create Persistent Volume on GKE, it will be provisioned automatically by Volume Claim. Remove this line from kubectl-setup.sh:\n\n```\nkubectl apply -f services/servingservice/servingservice-pv.yaml\n```\n\n10. Edit services/servingservice/servingservice-pvc.yaml, change it to support dynamic provisioning for Persistent Volume, remove storageClassName\n\n```\nvim services/servingservice/servingservice-pvc.yaml\n```\n\n```\napiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n  name: serving-service-claim\nspec:\n  accessModes:\n    - ReadWriteOnce\n  resources:\n    requests:\n      storage: 500Mi\n```\n\n11. Serving service runs multiple Pods, we must assign all Pod instances to the same Kubernetes node, to make sure all instances can access Persistent Volume. Read more - [Assigning Pods to Nodes](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/)\n\n```\nkubectl get nodes\n```\n\n```\nkubectl label nodes \u003cnode-name\u003e skipper=serving\n```\n\n```\nkubectl get nodes --show-labels\n```\n\n12. Add nodeSelector to servingservice-pod.yaml\n\n```\nnodeSelector:\n    skipper: serving\n```\n\n13. Setup Kubernetes services:\n\n```\n./kubectl-setup.sh\n```\n\n14. Skipper API endpoint URL\n\n```\nhttp://\u003cLoad Balancer IP\u003e/api/v1/skipper/tasks/docs\n```\n\nCheck Load Balancer IP:\n\n![LoadBalancer](https://github.com/katanaml/katana-skipper/blob/master/gke-loadbalancer.png)\n\n## License\n\nLicensed under the Apache License, Version 2.0. Copyright 2020-2021 Katana ML, Andrej Baranovskij. [Copy of the license](https://github.com/katanaml/katana-pipeline/blob/master/LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkatanaml%2Fkatana-skipper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkatanaml%2Fkatana-skipper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkatanaml%2Fkatana-skipper/lists"}