Git Product home page Git Product logo

website's Introduction

Your Open ML Platform

deployKF Logo



About deployKF

What is deployKF?

deployKF builds machine learning platforms on Kubernetes.
We combine the best of Kubeflow, Airflow, and MLflow into a complete platform that is easy to deploy and maintain.

Coming soon, see our current and future tools.

Why use deployKF?

deployKF combines the ease of a managed service with the flexibility of a self-hosted solution.

Our goal is that any Kubernetes user can build a machine learning platform for their organization, without needing specialized MLOps knowledge, or a team of experts to maintain it.

The key features of deployKF are:

Video Introduction

Title: deployKF: A better way to deploy Kubeflow (and more)
Event: Kubeflow Summit 2023

Featured Stories

We are always excited to see how and where deployKF is being used!

Here are some stories of deployKF being used in the wild:

Organization Article / Video
Cloudflare A look inside the Cloudflare ML Ops platform

Have a story to share? Let us know!



Using deployKF

Getting Started

To help you get started with deployKF, we have prepared a number of guides:

Release Information

For more information about our releases, please see:

Support the Project

deployKF is a new and growing project. If you like what we are doing, please help others discover us by sharing the project with your colleagues and/or the wider community.

We greatly appreciate GitHub Stars ⭐ on the deployKF/deployKF repository:

Star History Chart


Other Resources

Commercial Support

To discuss commercial support options for deployKF, please connect with Aranui Solutions, the company started by the creators of deployKF. Learn more on the Aranui Solutions Website.

Community

The deployKF community uses the Kubeflow Slack for informal discussions among users and contributors.

Please see our community page for more information.

History of deployKF

deployKF was originally created and is maintained by Mathew Wicks (GitHub: @thesuperzapper), a Kubeflow lead and maintainer of the popular Apache Airflow Helm Chart. deployKF is a community-led project that welcomes contributions from anyone who wants to help.

website's People

Contributors

d1sko avatar kuzm1ch avatar samzong avatar thesuperzapper avatar znd4 avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

website's Issues

Documentation on how to specify dex connectors for oidc

Could you please provide an example of how to provide a dex connector for oidc?
for example, the code has the following comments

## dex connectors
      ##  - dex connectors which allow bridging trust to external identity providers
      ##    https://dexidp.io/docs/connectors/
      ##  - not all connector types support refresh tokens, notably "SAML 2.0" and "OAUTH 2.0" do not
      ##    however, most providers support "OpenID Connect" which does support refresh tokens
      ##    without refresh tokens, users will be forced to re-authenticate every `expiry.idToken` period
      ##  - each element is a map with keys `type`, `id`, `name`, and `config` (which are the same aas upstream dex)
      ##    additionally, `configExistingSecret` and `configExistingSecretKey` allow you to set `config`
      ##    from a YAML-formatted string in a kubernetes secret
      ##  - in most cases `config.redirectURI` will be set to "https://{DEPLOYKF_HOST}/dex/callback" (if port is 443)
      ##
      connectors: []

I'm trying to use the example provided in https://dexidp.io/docs/connectors/oidc/

    connectors:
        type : "oidc"
        id : "google"
        name : "Google"
        config:
           issuer : "https://accounts.google.com"
           clientID : "kubeflow"
           clientSecret : "XXXXXXXXXXXXXXXXXXXXXXXXX"
           redirectURI : "https://XXXXXXXX/dex/callback"
        existingSecret: "generated--oauth2--secret"
        existingSecretKey: "client_secret"
        generateSecret: true

However, I'm getting an error

rpc error: code = Unknown desc = `helm template . --name-template dkf-core--deploykf-auth --namespace deploykf-auth --kube-version 1.26 --api-versions acme.cert-manager.io/v1 --api-versions acme.cert-manager.io/v1/Challenge --api-versions acme.cert-manager.io/v1/Order --api-versions admissionregistration.k8s.io/v1 --api-versions admissionregistration.k8s.io/v1/MutatingWebhookConfiguration --api-versions admissionregistration.k8s.io/v1/ValidatingWebhookConfiguration --api-versions apiextensions.k8s.io/v1 --api-versions apiextensions.k8s.io/v1/CustomResourceDefinition --api-versions apiregistration.k8s.io/v1 --api-versions apiregistration.k8s.io/v1/APIService --api-versions apps/v1 --api-versions apps/v1/ControllerRevision --api-versions apps/v1/DaemonSet --api-versions apps/v1/Deployment --api-versions apps/v1/ReplicaSet --api-versions apps/v1/StatefulSet --api-versions argoproj.io/v1alpha1 --api-versions argoproj.io/v1alpha1/AppProject --api-versions argoproj.io/v1alpha1/Application --api-versions argoproj.io/v1alpha1/ApplicationSet --api-versions autoscaling/v1 --api-versions autoscaling/v1/HorizontalPodAutoscaler --api-versions autoscaling/v2 --api-versions autoscaling/v2/HorizontalPodAutoscaler --api-versions batch/v1 --api-versions batch/v1/CronJob --api-versions batch/v1/Job --api-versions cert-manager.io/v1 --api-versions cert-manager.io/v1/Certificate --api-versions cert-manager.io/v1/CertificateRequest --api-versions cert-manager.io/v1/ClusterIssuer --api-versions cert-manager.io/v1/Issuer --api-versions certificates.k8s.io/v1 --api-versions certificates.k8s.io/v1/CertificateSigningRequest --api-versions coordination.k8s.io/v1 --api-versions coordination.k8s.io/v1/Lease --api-versions crd.projectcalico.org/v1 --api-versions crd.projectcalico.org/v1/BGPConfiguration --api-versions crd.projectcalico.org/v1/BGPPeer --api-versions crd.projectcalico.org/v1/BlockAffinity --api-versions crd.projectcalico.org/v1/CalicoNodeStatus --api-versions crd.projectcalico.org/v1/ClusterInformation --api-versions crd.projectcalico.org/v1/FelixConfiguration --api-versions crd.projectcalico.org/v1/GlobalNetworkPolicy --api-versions crd.projectcalico.org/v1/GlobalNetworkSet --api-versions crd.projectcalico.org/v1/HostEndpoint --api-versions crd.projectcalico.org/v1/IPAMBlock --api-versions crd.projectcalico.org/v1/IPAMConfig --api-versions crd.projectcalico.org/v1/IPAMHandle --api-versions crd.projectcalico.org/v1/IPPool --api-versions crd.projectcalico.org/v1/IPReservation --api-versions crd.projectcalico.org/v1/KubeControllersConfiguration --api-versions crd.projectcalico.org/v1/NetworkPolicy --api-versions crd.projectcalico.org/v1/NetworkSet --api-versions dex.coreos.com/v1 --api-versions dex.coreos.com/v1/AuthCode --api-versions dex.coreos.com/v1/AuthRequest --api-versions dex.coreos.com/v1/Connector --api-versions dex.coreos.com/v1/DeviceRequest --api-versions dex.coreos.com/v1/DeviceToken --api-versions dex.coreos.com/v1/OAuth2Client --api-versions dex.coreos.com/v1/OfflineSessions --api-versions dex.coreos.com/v1/Password --api-versions dex.coreos.com/v1/RefreshToken --api-versions dex.coreos.com/v1/SigningKey --api-versions discovery.k8s.io/v1 --api-versions discovery.k8s.io/v1/EndpointSlice --api-versions events.k8s.io/v1 --api-versions events.k8s.io/v1/Event --api-versions extensions.istio.io/v1alpha1 --api-versions extensions.istio.io/v1alpha1/WasmPlugin --api-versions flowcontrol.apiserver.k8s.io/v1beta2 --api-versions flowcontrol.apiserver.k8s.io/v1beta2/FlowSchema --api-versions flowcontrol.apiserver.k8s.io/v1beta2/PriorityLevelConfiguration --api-versions flowcontrol.apiserver.k8s.io/v1beta3 --api-versions flowcontrol.apiserver.k8s.io/v1beta3/FlowSchema --api-versions flowcontrol.apiserver.k8s.io/v1beta3/PriorityLevelConfiguration --api-versions install.istio.io/v1alpha1 --api-versions install.istio.io/v1alpha1/IstioOperator --api-versions kyverno.io/v1 --api-versions kyverno.io/v1/ClusterPolicy --api-versions kyverno.io/v1/Policy --api-versions kyverno.io/v1alpha2 --api-versions kyverno.io/v1alpha2/AdmissionReport --api-versions kyverno.io/v1alpha2/BackgroundScanReport --api-versions kyverno.io/v1alpha2/ClusterAdmissionReport --api-versions kyverno.io/v1alpha2/ClusterBackgroundScanReport --api-versions kyverno.io/v1beta1 --api-versions kyverno.io/v1beta1/UpdateRequest --api-versions kyverno.io/v2alpha1 --api-versions kyverno.io/v2alpha1/CleanupPolicy --api-versions kyverno.io/v2alpha1/ClusterCleanupPolicy --api-versions kyverno.io/v2alpha1/PolicyException --api-versions kyverno.io/v2beta1 --api-versions kyverno.io/v2beta1/ClusterPolicy --api-versions kyverno.io/v2beta1/Policy --api-versions metallb.io/v1alpha1 --api-versions metallb.io/v1alpha1/AddressPool --api-versions metallb.io/v1beta1 --api-versions metallb.io/v1beta1/AddressPool --api-versions metallb.io/v1beta1/BFDProfile --api-versions metallb.io/v1beta1/BGPAdvertisement --api-versions metallb.io/v1beta1/BGPPeer --api-versions metallb.io/v1beta1/Community --api-versions metallb.io/v1beta1/IPAddressPool --api-versions metallb.io/v1beta1/L2Advertisement --api-versions metallb.io/v1beta2 --api-versions metallb.io/v1beta2/BGPPeer --api-versions networking.istio.io/v1alpha3 --api-versions networking.istio.io/v1alpha3/DestinationRule --api-versions networking.istio.io/v1alpha3/EnvoyFilter --api-versions networking.istio.io/v1alpha3/Gateway --api-versions networking.istio.io/v1alpha3/ServiceEntry --api-versions networking.istio.io/v1alpha3/Sidecar --api-versions networking.istio.io/v1alpha3/VirtualService --api-versions networking.istio.io/v1alpha3/WorkloadEntry --api-versions networking.istio.io/v1alpha3/WorkloadGroup --api-versions networking.istio.io/v1beta1 --api-versions networking.istio.io/v1beta1/DestinationRule --api-versions networking.istio.io/v1beta1/Gateway --api-versions networking.istio.io/v1beta1/ProxyConfig --api-versions networking.istio.io/v1beta1/ServiceEntry --api-versions networking.istio.io/v1beta1/Sidecar --api-versions networking.istio.io/v1beta1/VirtualService --api-versions networking.istio.io/v1beta1/WorkloadEntry --api-versions networking.istio.io/v1beta1/WorkloadGroup --api-versions networking.k8s.io/v1 --api-versions networking.k8s.io/v1/Ingress --api-versions networking.k8s.io/v1/IngressClass --api-versions networking.k8s.io/v1/NetworkPolicy --api-versions node.k8s.io/v1 --api-versions node.k8s.io/v1/RuntimeClass --api-versions operator.tigera.io/v1 --api-versions operator.tigera.io/v1/APIServer --api-versions operator.tigera.io/v1/ImageSet --api-versions operator.tigera.io/v1/Installation --api-versions operator.tigera.io/v1/TigeraStatus --api-versions policy/v1 --api-versions policy/v1/PodDisruptionBudget --api-versions projectcalico.org/v3 --api-versions projectcalico.org/v3/BGPConfiguration --api-versions projectcalico.org/v3/BGPPeer --api-versions projectcalico.org/v3/BlockAffinity --api-versions projectcalico.org/v3/CalicoNodeStatus --api-versions projectcalico.org/v3/ClusterInformation --api-versions projectcalico.org/v3/FelixConfiguration --api-versions projectcalico.org/v3/GlobalNetworkPolicy --api-versions projectcalico.org/v3/GlobalNetworkSet --api-versions projectcalico.org/v3/HostEndpoint --api-versions projectcalico.org/v3/IPAMConfiguration --api-versions projectcalico.org/v3/IPPool --api-versions projectcalico.org/v3/IPReservation --api-versions projectcalico.org/v3/KubeControllersConfiguration --api-versions projectcalico.org/v3/NetworkPolicy --api-versions projectcalico.org/v3/NetworkSet --api-versions projectcalico.org/v3/Profile --api-versions rbac.authorization.k8s.io/v1 --api-versions rbac.authorization.k8s.io/v1/ClusterRole --api-versions rbac.authorization.k8s.io/v1/ClusterRoleBinding --api-versions rbac.authorization.k8s.io/v1/Role --api-versions rbac.authorization.k8s.io/v1/RoleBinding --api-versions scheduling.k8s.io/v1 --api-versions scheduling.k8s.io/v1/PriorityClass --api-versions security.istio.io/v1 --api-versions security.istio.io/v1/AuthorizationPolicy --api-versions security.istio.io/v1/RequestAuthentication --api-versions security.istio.io/v1beta1 --api-versions security.istio.io/v1beta1/AuthorizationPolicy --api-versions security.istio.io/v1beta1/PeerAuthentication --api-versions security.istio.io/v1beta1/RequestAuthentication --api-versions storage.k8s.io/v1 --api-versions storage.k8s.io/v1/CSIDriver --api-versions storage.k8s.io/v1/CSINode --api-versions storage.k8s.io/v1/CSIStorageCapacity --api-versions storage.k8s.io/v1/StorageClass --api-versions storage.k8s.io/v1/VolumeAttachment --api-versions storage.k8s.io/v1beta1 --api-versions storage.k8s.io/v1beta1/CSIStorageCapacity --api-versions telemetry.istio.io/v1alpha1 --api-versions telemetry.istio.io/v1alpha1/Telemetry --api-versions trust.cert-manager.io/v1alpha1 --api-versions trust.cert-manager.io/v1alpha1/Bundle --api-versions v1 --api-versions v1/ConfigMap --api-versions v1/Endpoints --api-versions v1/Event --api-versions v1/LimitRange --api-versions v1/Namespace --api-versions v1/Node --api-versions v1/PersistentVolume --api-versions v1/PersistentVolumeClaim --api-versions v1/Pod --api-versions v1/PodTemplate --api-versions v1/ReplicationController --api-versions v1/ResourceQuota --api-versions v1/Secret --api-versions v1/Service --api-versions v1/ServiceAccount --api-versions wgpolicyk8s.io/v1alpha2 --api-versions wgpolicyk8s.io/v1alpha2/ClusterPolicyReport --api-versions wgpolicyk8s.io/v1alpha2/PolicyReport --include-crds` failed exit status 1: Error: template: deploykf-auth/templates/oauth2-proxy/Deployment.yaml:22:32: executing "deploykf-auth/templates/oauth2-proxy/Deployment.yaml" at <include (print $.Template.BasePath "/dex/Secret-config.yaml") .>: error calling include: template: deploykf-auth/templates/dex/Secret-config.yaml:191:18: executing "deploykf-auth/templates/dex/Secret-config.yaml" at <include "deploykf-auth.dex.config.yaml" .>: error calling include: template: deploykf-auth/templates/dex/Secret-config.yaml:124:23: executing "deploykf-auth.dex.config.yaml" at <$connector.configExistingSecret>: can't evaluate field configExistingSecret in type interface {} Use --debug flag to render out invalid YAML

What does can't evaluate field configExistingSecret in type interface {} mean here?

Example of values.yaml file

I am very interesting to migrate some homemade CI/CD pipeline to use deployKF, and would like to know there is an example of values.yaml (the file provided to the cli tool using the --values command) available ?

Getting OIDC connector working with keycloak

I'm trying to follow the documentation provided here, I'm trying to connect to our local keycloak instance

https://www.deploykf.org/guides/platform/deploykf-authentication/#external-identity-providers

I was able to get everything working if I put everything in the value file as plain text, however, I'm having a hard time using the secrets. I apologize if this is a basic question, but I'm having a hard time here.

Documentation has the following,

## NOTE: 
          ##  - the `configExistingSecretKey` key in the secret must 
          ##    contain a string of YAML that is formatted the same 
          ##    as the CONTENTS of the `config` map key above
          #configExistingSecret: "my-dex-connector-secret"
          #configExistingSecretKey: "google-config"

This is how I create the secret

echo -n '
config:
    issuer : "https://xxxx.rs.gsu.edu/auth/realms/xxxx"
    clientID : "kubeflow"
    clientSecret : "xxxx-xxx-xxx-xxxx"
    redirectURI : "https://xxxx.rs.gsu.edu:8443/dex/callback" ' | base64

Then I used the value created from the above step and created a key using the following definition

apiVersion: v1
kind: Secret
metadata:
  name: my-dex-connector-secret
  namespace: kubeflow
type: Opaque
data:
  SecretKey: c3BlYzoKICAgICAgICAgIXXXXXXXXXXXX

I added the following to the values.ymal file

connectors:
        - type : "oidc"
          id : "kubeflow"
          name : "GSU Credentials" 
          configExistingSecret: "my-dex-connector-secret"
          configexistingSecretKey: "SecretKey"

What am I doing wrong here?

configuring self signed or custom SSL certs for deploykf plugin

This is a documentation enhancement request asking to add the following information into the official deployKF docs to help other users. The content is written below, inline using markdown as I could not find a way to contribute to the docs directly and this information is not otherwise available to my knowledge.

I wasted alot of time figuring this out and getting it working. It should be written somewhere.


Configuring DeployKF Plugin on ArgoCD for Self Signed or Custom SSL Certificates

This Guide is for DevOps admins who may be deploying in an On Prem datacenter or potentially those with custom SSL configurations in a public cloud VPC

The deployKF plugin downloads dependencies using a sidecar container that runs inside the argocd-repo-server pod. Both the argocd server and sidecar container need to have SSL certs added into their truststore chains to properly authenticate with a self signed/custom new certificate when executing the sync process with argocd. This method has been tested using the argocd sync script.

1.) Store downloaded pem certs as configmap

Using the below command we can load the contents of the certificate we need to add into Kubernetes in a persistent way:

kubectl -n argocd create configmap root-chain --from-file=root-chain.pem

2.) Patch the argocd repo server deployment to include the cert in all it's container images as a volume mount into the container level default truststore (/etc/ssl)

Fill in the yaml spec below to match your configmap name/key and set desired mount paths/attributes:

spec:
  template:
    spec:
      containers:
        - name: argocd-repo-server
          volumeMounts:
            - name: root-tls
              mountPath: /etc/ssl/certs/root-chain.pem
              subPath: root-chain.pem
        - name: deploykf-plugin
          volumeMounts:
            - name: root-tls
              mountPath: /etc/ssl/certs/root-chain.pem
              subPath: root-chain.pem
      volumes:
        - name: root-tls
          configMap:
            name: root-chain
            items:
              - key: root-chain.pem
                path: root-chain.pem

Convert to JSON, minify and use kubectl patch to make the deployment patch persist through the lifecycle of the pods ensuring your SSL cert is always in the chain when a resource needs to be synced

kubectl -n argocd patch deployment argocd-repo-server -p '{"spec":{"template":{"spec":{"containers":[{"name":"argocd-repo-server","volumeMounts":[{"name":"root-tls","mountPath":"/etc/ssl/certs/root-chain.pem","subPath":"root-chain.pem"}]},{"name":"deploykf-plugin","volumeMounts":[{"name":"root-tls","mountPath":"/etc/ssl/certs/root-chain.pem","subPath":"root-chain.pem"}]}],"volumes":[{"name":"root-tls","configMap":{"name":"root-chain","items":[{"key":"root-chain.pem","path":"root-chain.pem"}]}}]}}}}'

Validate by using curl from within the deploykf plugin sidecar container to reach github or custom repo/resource. Default ssl store is /etc/ssl in both containers but only the plugin sidecar has curl installed. Sync your apps as normal after this change.

Proxy variables can be added to all containers in the repo server pod using the following syntax if needed, though be sure to set this BEFORE applying the app of apps yaml file to prevent sync inconsistencies:

kubectl -n argocd set env deployment/argocd-repo-server HTTP_PROXY=http://10.0.0.0:8080 HTTPS_PROXY=http://10.0.0.0:8080 NO_PROXY=argocd-repo-server,argocd-application-controller,argocd-metrics,argocd-server,argocd-server-metrics,argocd-redis,argocd-dex-server,mydomain.com

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.