Adds resources (CPU, memory) to the server
Oldest capacity management method
Hardware can only get so big
Time, money, or technical reasons
Adds more servers to application
Multiple for the same part of the app
Requires app re-architecting
Can be difficult for humans to manage, troubleshoot
Libraries, versions, key configuration
Co-hosted apps may have conflicting requirements!
Packages OS image with application
Dependencies managed as single unit
Popular container toolkit
Simplifies underlying container details
Strong developer support
Requires deep knowledge
Difficult to manage manually
Coordinates hosts (nodes) to act as one
Deploys instances, distributes load, delivers resources
Created by Google, maintained by CNCF
Pods only one manageable object
Taylor k8s to your app, not the other way around
Objects defined as declarative YAML
Can be live edited, patched, diffed
kubectl
command
Single point of access to cluster
Plays well with scripts, automation
More work, but you control everything
Requires dedicated staff to maintain
Dedicated manager node required
kubeadm
, kubectl
on managerkubeadm
to stand up clusterRequires additional infrastructure for k8s
Like a VPS, but for k8s workloads
Pay only for workers, storage baked in
Amazon, Azure, DigitalOcean, Google GKE, others
Worldwide k8s provider
REST-based API
Always estimate capacity first!
New servers easier to add in k8s
2 worker nodes minimum
3 or more is best
Balance hosting costs with needed resources
Start with today's resources * 1.25
Scaling out easier on managed k8s
Plan, but not too hard!
Done at hosting provider level
Via web portal, API, or dedicated CLI app
Not kubectl
!
POST a JSON request using curl
ten7.digitalocean
role on Ansible Galaxy
Create > Clusters
Multiple options, different pros, cons
Installs only needed binaries
homebrew on macOS
Chocolatey, Scoop, or Powershell Gallery On Windows
Linux: use your distro's default
kubectl
included out of the box
Docker needed to develop containers
Large (1GB) download, requires account
Depends on hosting provider
CLI command, auth token, kubeconfig file
Better for scripts, automation
Requires prior access
Advanced, has security implications
kubectl
verb object
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
web-pool-b64y Ready <none> 2d13h v1.13.10
web-pool-b6hs Ready <none> 2d13h v1.13.10
web-pool-b6hu Ready <none> 2d14h v1.13.10
kubectl describe node
nodeName
Lists status, CPU, memory allocation, and more
kubectl