Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New course: Kubernetes for Ops and Admins! #446

Merged
merged 58 commits into from
Apr 22, 2019
Merged
Show file tree
Hide file tree
Changes from 39 commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
ef70ed8
Pre-requirements + Architecture sections
jpetazzo Apr 4, 2019
d1609f0
Add Dessine-Moi Un Cluster
jpetazzo Apr 4, 2019
3ad1e89
Do not abort if a file can't be loaded; just report it and continue
jpetazzo Apr 4, 2019
d5fd297
Add YAML manifest for 1-day admin training
jpetazzo Apr 4, 2019
a4b23e3
Add kubenet lab
jpetazzo Apr 5, 2019
2b2d7c5
Add CNI section (first part; still needs federation)
jpetazzo Apr 6, 2019
637c46e
Add cluster interconnection with a route reflector
jpetazzo Apr 7, 2019
c444493
Add API load balancer
jpetazzo Apr 8, 2019
71cfade
Merge branch 'master' into kube-admin
jpetazzo Apr 8, 2019
ff4219a
Add managed installation options
jpetazzo Apr 8, 2019
6636f92
Add a few more managed options
jpetazzo Apr 8, 2019
82c26c2
Oops (thanks @rdegez for catching that one)
jpetazzo Apr 8, 2019
2d3ddc5
Add mention to kube-router special shell (thanks @rdegez)
jpetazzo Apr 8, 2019
287f6e1
Reword a few BGP things (Thanks Benji)
jpetazzo Apr 8, 2019
9cc422f
Add distributions & installers
jpetazzo Apr 9, 2019
0d551f6
Add chapter about cluster upgrades + static pods
jpetazzo Apr 9, 2019
4784a41
Add chapter about backups
jpetazzo Apr 9, 2019
aa6b74e
Add Cloud Controller Manager
jpetazzo Apr 10, 2019
945586d
Add container engine version reminder (thanks @rdegez)
jpetazzo Apr 10, 2019
cd1dafd
Improve backup section (thanks @rdegez & @naps)
jpetazzo Apr 10, 2019
d929f5f
Add more backup tools
jpetazzo Apr 10, 2019
038563b
Add TLS bootstrap
jpetazzo Apr 10, 2019
ded5fbd
Add chapter about resource limits
jpetazzo Apr 12, 2019
f40b8a1
Add short section about metrics server
jpetazzo Apr 12, 2019
df185c8
Add shell snippet generating route commands
jpetazzo Apr 13, 2019
2dc634e
Add cluster sizing chapter
jpetazzo Apr 13, 2019
1e77f57
Add course conclusion
jpetazzo Apr 13, 2019
5a4adb7
Tweaks (thanks @rdegez!)
jpetazzo Apr 14, 2019
0e7c057
add k3s link
bridgetkromhout Apr 19, 2019
5071053
Update architecture.md
bridgetkromhout Apr 19, 2019
e252819
Update bootstrap.md
bridgetkromhout Apr 19, 2019
4c89d48
Update cluster-backup.md
bridgetkromhout Apr 19, 2019
020cfeb
Update cni.md
bridgetkromhout Apr 20, 2019
c761ce9
Update dmuc.md
bridgetkromhout Apr 20, 2019
95b05d8
Update metrics-server.md
bridgetkromhout Apr 20, 2019
dd5a667
Update setup-selfhosted.md
bridgetkromhout Apr 20, 2019
603baa0
Update resource-limits.md
bridgetkromhout Apr 20, 2019
627c336
Update prereqs-admin.md
bridgetkromhout Apr 20, 2019
fea69f6
Update multinode.md
bridgetkromhout Apr 20, 2019
b92da2c
Update metrics-server.md
bridgetkromhout Apr 20, 2019
f272df9
Update dmuc.md
bridgetkromhout Apr 20, 2019
aa55a5b
Update multinode.md
bridgetkromhout Apr 20, 2019
3f40cc2
Update setup-managed.md
bridgetkromhout Apr 20, 2019
dbcb437
Update cloud-controller-manager.md
bridgetkromhout Apr 20, 2019
fada4e8
Update bootstrap.md
bridgetkromhout Apr 20, 2019
6d761b4
Fixing broken link
bridgetkromhout Apr 20, 2019
9296b37
Update resource-limits.md
bridgetkromhout Apr 20, 2019
f5d523d
Update cluster-sizing.md
bridgetkromhout Apr 20, 2019
d4c3686
Merge pull request #448 from jpetazzo/bridgetkromhout-patch-1
jpetazzo Apr 20, 2019
74c9286
Merge pull request #449 from jpetazzo/bridgetkromhout-patch-2
jpetazzo Apr 20, 2019
da8b4fb
Merge pull request #451 from jpetazzo/bridgetkromhout-patch-4
jpetazzo Apr 20, 2019
fba198d
Update resource-limits.md
jpetazzo Apr 20, 2019
85144c4
Merge pull request #452 from jpetazzo/bridgetkromhout-patch-5
jpetazzo Apr 20, 2019
d794c8d
Merge pull request #450 from jpetazzo/bridgetkromhout-patch-3
jpetazzo Apr 20, 2019
e42d9be
Merge pull request #453 from jpetazzo/bridgetkromhout-patch-6
jpetazzo Apr 20, 2019
3d001b0
'shortly unavailable' means 'unavailable soon', not 'briefly unavaila…
jpetazzo Apr 21, 2019
2fe4644
Tweaks/fixes addressing @bridgetkromhout's feedback <3
jpetazzo Apr 21, 2019
1af9584
More fixes thanks to @bridgetkromhout excellent feedback and advice ♥
jpetazzo Apr 21, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
89 changes: 89 additions & 0 deletions slides/k8s/apilb.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# API server availability

- When we set up a node, we need the address of the API server:

- for kubelet

- for kube-proxy

- sometimes for the pod network system (like kube-router)

- How do we ensure the availability of that endpoint?

(what if the node running the API server goes down?)

---

## Option 1: external load balancer

- Set up an external load balancer

- Point kubelet (and other components) to that load balancer

- Put the node(s) running the API server behind that load balancer

- Update the load balancer if/when an API server node needs to be replaced

- On cloud infrastructures, some mechanisms provide automation for this

(e.g. on AWS, an Elastic Load Balancer + Auto Scaling Group)

- [Example in Kubernetes The Hard Way](https://github.com/kelseyhightower/kubernetes-the-hard-way/blob/master/docs/08-bootstrapping-kubernetes-controllers.md#the-kubernetes-frontend-load-balancer)

---

## Option 2: local load balancer

- Set up a load balancer (like NGINX, HAProxy...) on *each* node

- Configure that load balancer to send traffic to the API server node(s)

- Point kubelet (and other components) to `localhost`

- Update the load balancer configuration when API server nodes are updated

---

## Updating the local load balancer config

- Distribute the updated configuration (push)

- Or regularly check for updates (pull)

- The latter requires an external, highly available store

(it could be an object store, an HTTP server, or even DNS...)

- Updates can be facilitated by a DaemonSet

(but remember that it can't be used when installing a new node!)

---

## Option 3: DNS records

- Put all the API server nodes behind a round-robin DNS

- Point kubelet (and other components) to that name

- Update the records when needed

- Note: this option is not officially supported

(but since kubelet supports reconnection anyway, it *should* work)

---

## Option 4: ....................

- Many managed clusters expose a high-availability API endpoint

(and you don't have to worry about it)

- You can also use HA mechanisms that you're familiar with

(e.g. virtual IPs)

- Tunnels are also fine

(e.g. k3s uses a tunnel to allow each node to contact the API server)
Loading