I have a limited time and need to quickly ramp up on these skills. I need hands-on experience as that's how I learn best. What would be your go-to resource/workshop for that?<p>Is there some standard "here are existing 10 services and in this guide we'll go through deploying them, securing them, installing service mesh, provisioning database..." kind of thing?
I would look at these topics and in this order:<p>1. Containerisation - can you build a hello world web app in any language then Dockerise it.<p>2. Now break it into two containers - one is the original hello world but now it calls an API on a 2nd container that responds with hello world in one of 10 different languages. Just hard code this the point is that it’s now 2 containers for your “app”.<p>3. Create a Docker repository in GCP’s Artefact Registry and upload your images. Now remove them from your local Docker registry and run them again but this time pulling them from your registry on GCP.<p>3. Use Cloudbuild to build them.<p>4. Spin up a local Kubernetes cluster such as Minikube.<p>5. Read docos about K8s deployments and service types. Special attention to ClusterService, NodePort, LoadBalancer.<p>6. Deploy the first version of your hello world. Maybe try to point your YAML to the local registry then the one on GCP you created.<p>7. Create a service to access your app.<p>8. Figure out how to turn in and access (via proxy) the kubernetes dashboard.<p>9. Now deploy the 2nd version of your app. Learn a bit more about K8s networking, pod horizontal scaling, pod resource claims, kill some pods, etc.<p>10. Learn Skaffold.<p>11. Create GKE cluster.<p>12. Deploy same app.<p>13. Learn about K8s Ingress.<p>14. Get familiar with GKEs console.<p>15. Use knowledge of Skaffold to understand and use the brand new Google Cloud Deploy.<p>Edit: autocorrect “fixed” several things
I highly recommend the book Kubernetes In Action by Lukša [1]. It's a fantastic walkthrough of the whole containerized stack -- from Docker containers through the Kubernetes API and some info on Kubernetes internals towards the end. This is one of those rare books that takes an intimidating topic (k8s) and makes it all make perfect sense. It's heavily examples-driven with lots of annotated code and diagrams. The first edition uses both minikube and GKE.<p>[1]: <a href="https://www.manning.com/books/kubernetes-in-action-second-edition" rel="nofollow">https://www.manning.com/books/kubernetes-in-action-second-ed...</a>
I would say there is no fast way to do this. If you specifically want to learn Kubernetes on GCP as opposed to DevOps generally, there are many things to learn.<p>Sure, you can get something basic running very quickly but if you are talking about production systems, "ramp up"? then there are many things to learn, understand and avoid and this takes an amount of time.<p>For an example, as a very experienced Dev and Ops person, after 18 months of Kubernetes, I am still learning things that I should have ideally done from day 1 and probably only avoided problems because I am not using it with very high traffic.<p>You can read lists and follow tutorials but engineering is trade-offs and even in the world of nice tooling, there are still many decisions to make and don't end up in a position where, for example, you cannot upgrade an ingress without the system becoming unavailable because you didn't consider this early on.<p>Don't get me wrong, it is worth learning but it is not fast.
Im very much a bottom up sort of learner so I wanted to post something I haven’t seen yet in any of these comments. Go through and build Linux from scratch <a href="https://www.linuxfromscratch.org/" rel="nofollow">https://www.linuxfromscratch.org/</a><p>You don’t have to do all of it, just enough to feel comfortable with the problem space that containers in part are trying to solve for. In doing so you will learn about the fundamentals of the stacks you are working with. Then go learn about cgroups at the lowest level. Again you don’t need to master these things but setting up a container from scratch will then give you a more intuitive understanding of what container apis like docker are trying to solve for. Install a hypervisor on your local workstation and set up a few vms networked to each other. Use a tool like netcat to talk across them. Once you have these basics, and yes it is a long and round about way, I think the cloud stuff becomes a lot easier and more approachable since you will have a more in depth understanding of what cloud providers are actually giving you in terms of configurations and managed services. I came into software development from doing sysadmin work at a NOC during a graveyard shift. So I had a lot of time on my hands to mess around with this stuff. I don’t think that tools like docker should be a substitution for the fundementals, but rather something you add to your tool belt later to make these sorts of configurations easier to set up.<p>Yeah this isn’t going to be a 1-2 day crash course but if you are diligent you can get a basic understanding of what these tools do in under a month. Only after you have a complete understanding of single node use case (e.g. multiple containers running on a single host) would i recommend starting to learn k8. Good luck!<p>* edit to fix small typos
I don't think there's going to be a shortcut to learning Kubernetes to the point where you'll be comfortable setting up a production-grade cluster.<p>I recently went down the path of learning it. Even with 6 years of experience using Docker and ~10 years of general deployment / Linux / sysadmin'y experience it took something like 180 hours of no screwing around time to get to the point where I was comfortable putting up a proof of concept production cluster.<p>Proof of concept in this case means having the cluster up and running to manage multiple services, hooking up multiple external hostnames with external-dns and an AWS Load Balancer controller (I am using EKS). It also involved handling things like running database migrations in a robust way and toying around with nice to haves like preview environments for all PRs. It didn't serve any live customer facing traffic but all of the pieces were there to do it.<p>The provisioning and managing of the cluster was all adhoc with a mish mash of Bash scripts, eksctl, kubectl and Helm commands. Now I'm transitioning all of that to use Terraform to set up the cluster and every change to the cluster happens through git using ArgoCD to monitor the repo. I'm really happy with the direction things are going. There's no way I could have started here tho, it would have been too many new things to take in at once without knowing the fundamentals.<p>Long story short, don't try to rush things and skip ahead. It's going to be really important to learn the basics of Kubernetes before trying to automate everything with best practices. I spent a ton of time reading the docs while experimenting with a cluster along with reading hundreds of blog posts and skimming YouTube videos. Every step of the way involved applying what I was learning to a real project and interacting with the cluster in some way.<p>90% of it was able to be learned with a local cluster running on your dev box.
We put together the Kubernetes Developer Learning Center for folks looking to bootstrap their k8s hands-on experience: <a href="https://www.getambassador.io/kubernetes-learning-center/" rel="nofollow">https://www.getambassador.io/kubernetes-learning-center/</a><p>Combined with the K8s official docs <a href="https://kubernetes.io/docs/home/" rel="nofollow">https://kubernetes.io/docs/home/</a> and GCP getting started guide, this will give you a good tour of the tech: <a href="https://cloud.google.com/gcp/getting-started" rel="nofollow">https://cloud.google.com/gcp/getting-started</a><p>For a general overview of DevOps and the principles behind this, you can't go wrong with reading "The DevOps Handbook" and researching the "Accelerate" metrics
Heya, you have the exact same issue as I am. I needed to deploy our apps back then (we're in a team of 2) after developing for 1.5 years in small company. Boss decided to suddenly go with GCP, then I decided that I want to use K8s (which paid off finally!).<p>Things I started doing was to follow tutorial in k8s, it is a LOT to take in. Install minikube, start with simple Deployment sets and deploy with apply instead of helm. Then you can go from there.<p>I reckon after you learn k8s all you need to do is to spin up GKE which you should learn after. Depends on what you need, you might need to setup external LB from GCP. I started with nginx-ingress, works amazing, setup the LB automatically and everything.<p>In summary, k8s docs is your best shot, start slow from tutorial, practice practice and you have to read what's the problem when something fails<p>Rather than looking how to debug, these 2 commands cover my needs most of the time:
kubectl logs <resource-name>
kubectl describe <resource-type> <resource-name>
A DevOps guy I worked with at a previous job spoke very highly of the courses at <a href="https://acloudguru.com/" rel="nofollow">https://acloudguru.com/</a>
As I was going through the same process of disentangling the learning-process roadmap, a friend of mine recommend I follow Jérôme Petazzoni's [0] "Deploying and Scaling Microservices
with Docker and Kubernetes" workshop freely available as slides [1]. It's less shiny than those web courses with an integrated sandbox, but it's also pretty hands on and high quality. I had started the free courses available at KubeAcademy by VmWare, but I've retained very little from that.<p>[0]: <a href="https://github.com/jpetazzo" rel="nofollow">https://github.com/jpetazzo</a><p>[1]: <a href="https://container.training/kube-selfpaced.yml.html" rel="nofollow">https://container.training/kube-selfpaced.yml.html</a>
There is a series of Google-created Kubernetes/GKE courses on Coursera that include hands-on labs where you get to try stuff on GKE without paying usage fees.<p>The course content is a bit wanting (it sometimes feels more like an advert for GCP products than a course), but if you watch the videos that look relevant and do the labs, I think you’ll get something out of it. Coursera does cost money but has a free trial.
The same way we ramp up on anything: by building a system that (actually) needs it. The XYZ (service mesh, provisioning, etc) will fall into place, from there. Or not -- if it isn't really needed.<p>But in general: learning by building stuff based on a real <i>need</i> -- even if that "need" is just to scratch the itch of some personal project you've always been wanting to do -- has about 10x the staying power (and "interview cred") as what one gets when starting from the mindset of "oh shit, I'm falling behind, I gotta cram on this stuff".<p>And on top of that: knowing when you really <i>need</i> X or Y, and when you don't -- is often as valuable as, or even more valuable than simply knowing how to do X or Y.
Why you need these skills? Thinking out of the box and complementing others: to hire a specialist is the fastest way to do it.<p>To get the skills for yourself is a different matter: hire a specialist for a day and go through a basic app deployment, workflow and notes for a day. Complement with the basics tutorial to avoid gaps, try your skills on a real environment.<p>But such infrastructure skills are no joke and mistakes are expensive so I would recommend to take your time learning about it.
You may also consider using The HashiCorp tools (nomad, consul, vault) rather than K8s. They are a bit more approachable (single binaries) and do a similar job.
I'm putting together devops content for the B2B arm of $FAMOUS_BOOTCAMP.<p>Here's my curriculum so far (based on AWS, though):<p>- Why DevOps (basically, a distilled version of "Accelerate")<p>- Terraform<p>- Ansible<p>- Docker<p>- Kubernetes<p>- ELK, Grafana, Prometheus<p>- Jenkins<p>- Automated testing<p>- MLops<p>- Secret management, databases, database upgrades<p>(The nature of the $FAMOUS_BOOTCAMP and the requirements from the initial customer makes it more about "here are the specific technologies you might use in your job today" and less about "here's the background principles").<p>Any suggestions or thoughts?
I am also trying to learn modern DevOps techniques. While researching i found that many people recommended the courses from KodeKloud (<a href="https://kodekloud.com/" rel="nofollow">https://kodekloud.com/</a>).
I have not taken them myself already, but i think they also include labs so you can practice the techniques.
The Linux Foundation offers free online intro courses covering these topics and dozens more at <a href="https://training.linuxfoundation.org/resources/?_sft_content_type=free-course" rel="nofollow">https://training.linuxfoundation.org/resources/?_sft_content...</a>
<a href="https://www.udemy.com/course/docker-and-kubernetes-the-complete-guide/" rel="nofollow">https://www.udemy.com/course/docker-and-kubernetes-the-compl...</a><p>That course got me up to speed pretty fast (3 weeks) with docker and k8s. I highly recommend it.
It sort of depends on what you are building. I work on web apps and services and there are so many things in k8s and GCP to use that its like rabbit-holes all the way down. You can get overwhelmed easily with stuff you probably don't need.<p>You can work on what is running on your container(s) locally using docker. I would suggest reading thru k8s docs and using minikube (<a href="https://kubernetes.io/docs/tutorials/hello-minikube/" rel="nofollow">https://kubernetes.io/docs/tutorials/hello-minikube/</a>) to understand things.<p>Start small and get basics working, then iterate. You will likely experience aha moments later on and want to re-do things. The good thing is you are defining infrastructure via software.
Most people learn these skills on the job which is in my opinion the right approach for fast-changing tech stacks like k8 that can be out of fashion tomorrow. It is easier to learn something when you have a concrete need for it and know what you concretely need.
K8s is just a big, structured way to make Linux do various things, so my approach would be from the bottom up: learn about the Linux features that you are trying to control, then learn to control them automatically with k8s. Learn how to manually control memory and cpu quotas with control groups, how to mount overlay file systems, how to enter a chroot, how to create and use network or pid namespaces, etc.<p>Most people I have encountered who were afraid of k8s also simply did not understand how their process was executed by Linux at all, and I think that was the root of their fears. If you know how it all works, you won’t be afraid of the automation.
As someone who also learns best by getting my hands dirty, I always liked the ability to pick up an application development framework and get started building a real app while I'm still learning. By accepting the frameworks opinions, I can keep going and decide where I need to diverge once I learned more about the technology and what I really need.<p>With my Terraform framework for AKS, EKS and GKE I'm trying to bring the same framework benefits to the DevOps world, more specifically to Terraform and Kubernetes.<p>Check it out: <a href="https://www.kubestack.com/" rel="nofollow">https://www.kubestack.com/</a>
You can grab few books on the topic or attend an online course. Both will give you an idea, or a taste of the different issues at play. But to really learn devops and Kubernetes, you need to work at a company using those tools. Then you start to understand what are the challenges, strengths and weaknesses ...
I would suggest doing this excellent course that also includes sandbox hands-on exercises.<p><a href="https://www.udemy.com/course/certified-kubernetes-administrator-with-practice-tests/" rel="nofollow">https://www.udemy.com/course/certified-kubernetes-administra...</a>
For k8s, look into <a href="https://github.com/kelseyhightower/kubernetes-the-hard-way" rel="nofollow">https://github.com/kelseyhightower/kubernetes-the-hard-way</a> - I did it using GCP, which would expose you to a little bit of that, too.
The CIS has a benchmark for evaluating K8s security. You may want to have a look at that: <a href="https://www.cisecurity.org/benchmark/kubernetes/" rel="nofollow">https://www.cisecurity.org/benchmark/kubernetes/</a>
Get a job which requires it, study a bunch and try to stand up a cluster. Learn the basic primitives of containers and why they are useful. Fake it till you make it, this tech is brand new and a lot of it isn't needed and is over engineered.
Kubernetes is like the Javascript of NPM, a new tool every week, very good at complicated things, but simple things are complicated. It seems to be dominant docker server management atm, but not sure if it will stay like that.
Question is what you want to learn exactly?<p>Setting up only the cluster?
- Start by porting your local setup to a local k8 (minikube etc.)<p>And i would suggest to invest some time into terraform to setup everything the way you want it.
Having a credit card is the hardest part to me.<p>All of setup step is simple, there're many resources that you can follow and learn all in 1,2 days.
google has free courses <a href="https://cloud.google.com/training/kubernetes-anthos-hybridcloud" rel="nofollow">https://cloud.google.com/training/kubernetes-anthos-hybridcl...</a>