I think one problem with k8s adoption right now is the proliferation of tooling. It will take some time for standards and opinions to emerge in the community before that gets better. For example, I can think of at least 4 separate tools for tailing logs across pods. There are at least that many tools for running a local cluster (minikube, kind, microk8s, k3s, probably others). I don't think that there should ever be
less options or that people should be discouraged from making new tooling, but often times I think folks forget that it generates a lot of noise in the system and it's not always obvious how to decipher what problems the new tooling solves, or why it is different from the other tools already out there.
Tim is correct in that the easiest way to get a full-blown cluster with all the bells and whistles like HA, RBAC, storage, overlay networking, ingress, etc. is probably running it on a cloud provider. There are plenty of tools for running tiny local k8s that I mention above, but depending on your use case that may not be good enough. Tools like kubespray, kops, and kubeadm, can make it easier for a spinning up a more production-ready k8s cluster yourself, but that's another area where there are lots of tools out there, probably more to come, and it's by no means an easy on-ramp.
I heard Joe Beda talk once about the 4 main areas of work around k8s. I won't explain it as well as he did at the time, but it was something like there are Cluster-Ops, Cluster-Devs, App-Ops, and App-Devs. Cluster-Ops primary focus is keeping clusters running. Cluster-Dev is concerned with developing apps and tooling for managing or using the cluster (like building an Operator that posts to Slack, or making a CLI tool for tailing logs from pods). App-Ops are folks who are working to help move code from the App-Devs to a cluster, so gluing together the CI-CD pipelines, writing helm charts, etc. App-Dev are the software developers building applications for the business/organization.
One thing k8s does is that it helps define and clarify those boundaries and hand-offs between those roles. So ideally someone in the App-Dev realm shouldn't need to be too concerned with how a k8s cluster gets provisioned or updated. They should be able to push a branch to source control, have a CI-CD pipeline handle
testing their new code and automatically deploy it to some pre-production environment. There is a lot of work involved to get that all setup and frictionless, but in a large, distributed organization I think it's necessary in order to scale. In a smaller team there will be less people and more overlap in those roles and something like a full-blown HA k8s CI-CD pipeline will likely feel overly complex and clunky.