kubealex / k8s-mediaserver-operator

Repository for k8s Mediaserver Operator project
MIT License
563 stars 77 forks source link

[FR] Helm Only and Additional Options #87

Open reedjosh opened 11 months ago

reedjosh commented 11 months ago

Is your feature request related to a problem? Please describe. Operators seem to add an additional level of complexity and in this case it seems it only adds reconciliation to the core Helm chart.

I was wondering if we could break the core chart out here and even modularize the individual components?

To me the overall product could be a superchart, and all of the individual components could be their own versioned charts.

I'd also be interested in helping add additional features like VPN, and Jellyfin compatibility.

Describe the solution you'd like Break out the Helm chart into versioned releases by component. Create a superchart for the current set of components.

Minimally support additional features even if only by examples of kustomization with side-cars.

Describe alternatives you've considered Downloading and installing directly from the git repo. I plan to use ArgoCD anyway, so technically I could point it to the helm chart here without a fully release versioned chart, but why not add a helm repo index to the repository and make releases more official?

Additional context I think the helm operator was a cool way to add reconciliation to helm charts, but operators add a large layer of complexity.

Other systems such as ArgoCD and Flux are becoming the dominant path for Helm installation with reconciliation anyway.

Thanks for putting this together! It's super cool, and I look forward to deploying it.

kubealex commented 10 months ago

Hi @reedjosh, thanks for the input! This makes absolutely sense, now that things are starting to grow in complexity and number it could make absolutely sense. I'm happy to sleep on this and collect ideas, feel free to share your idea of structure if you already have one, this could be discussed!

Ale

reedjosh commented 10 months ago

@kubealex I actually did deploy this about a week ago now. I used ArgoCD and directly targeted your chart dirextory.

image

I also used the Jellyfin PR fork to get Jellyfin deployed too.

This project is super awesome!

Now that I know more, I still think a superchart with subchart dependencies is the way to go. I would be happy to PR against this repo with a potential new structure.

I'll try to toss that together in the next few days. Hopefully in doing so most of the input values can remain the same.

Further, I also managed to deploy and setup jellyseerr, so hopefully I can help add that as an optional feature too.

RyuunosukeDS3 commented 10 months ago

Hello there @reedjosh. I want to second this idea but also want to ask this: Would you be able to provide info on how you deployed all this on argocd? I'm fairly new to Argo...

reedjosh commented 10 months ago

@RyuunosukeDS3

Here's a snippet from my ArgoCD Application where I point to the repo path.

...
...
project: default
destination:
  server: 'https://kubernetes.default.svc'
  namespace: media
syncPolicy:
  automated:
    prune: true
    selfHeal: true
  syncOptions:
    - CreateNamespace=true
sources:
  - repoURL: 'https://github.com/kubealex/k8s-mediaserver-operator.git'
    path: helm-charts/k8s-mediaserver
    targetRevision: v0.9.1
    helm:
      valuesObject:
        general:
          ingress:
            ingressClassName: nginx
...
...
reedjosh commented 10 months ago

https://github.com/kubealex/k8s-mediaserver-operator/pull/92/files

Okay, finally have a draft of the superchart setup. Not ready at all yet, but should give an idea of the intended direction.

reedjosh commented 10 months ago

Okay, I've successfully deployed a second copy of my setup using my superchart version.

...
...
destination:
  server: 'https://kubernetes.default.svc'
  namespace: media-test
syncPolicy:
  automated:
    prune: true
    selfHeal: true
  syncOptions:
    - CreateNamespace=true
sources:
  - repoURL: 'https://github.com/kubealex/k8s-mediaserver-operator.git'
    path: helm-charts/k8s-mediaserver
    targetRevision: v0.9.1
    helm:
      valuesObject:
        general:
          ingress:
            ingressClassName: nginx
          ingress_host: test-media.redacted-redacted
          storage:
            pvcStorageClass: nfs-01
        jackett:
          enabled: false
        plex:
          enabled: false
        radarr:
          ingress:
            annotations:
              cert-manager.io/cluster-issuer: letsencrypt-prod
            tls:
              enabled: true
              secretName: test-media.radarr.redacted.redacted-tls
        sabnzbd:
          enabled: false
        transmission:
          enabled: false
          service:
            peer:
              type: LoadBalancer
...
...

@kubealex I'm currently also using @umbertix's fork to deploy Jellyfin.

Then I'm deploying Jellyseerr in my own manner too.

I see the Jellyfin fork has been open for quite some time.

Do you have time to review that and my PR? Mine's not complete, but close enough that I'd like to start a discussion.

Would you like me to just incorporate Umbertix's PR into my own as to be able to add both at once?

Would you like an additional maintainer? I'd be happy to lay out some of my credentials and previous contributions for you if you're interested in adding additional maintainers to this project.

Thanks!!

kubealex commented 9 months ago

Hey @reedjosh first of all, thank you so much for your effort, much appreciated!!

My apologies, I was a bit evanescent in the last weeks, I hope I'll be able to catch up on the backlog starting from tomorrow And provide you with a consistent view on this!

kubealex commented 9 months ago

So :)

72 is on its way to be merged, in the meantime I had to cleanup a bit the charts.

In the "readinessProbe" sections, I:

You can align your branch with master in the meantime to double check that everything is in place.

Once the jellyfin part is merged, you can do a last round of integration in your branch and we can move this forward.

I'd love to hear also from @InputObject2 as we worked a lot on this one pretty much on the helm charts as well, so I think it could make sense to consolidate this into something more consistent.