Skip to content

Commit c9573c6

Browse files
committed
docs: update readme with more details about what skyhook was built for
1 parent 407f072 commit c9573c6

File tree

1 file changed

+42
-17
lines changed

1 file changed

+42
-17
lines changed

README.md

Lines changed: 42 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,47 @@
11
# skyhook
22

3-
Skyhook was developed for modifying the underlying host OS in Kubernetes clusters. Think of it as a package manager like apt/yum for linux but for whole cluster management. The package manager (Skyhook Operator) manages the lifecycle (install/configure/uninstall/upgrade) of the packages (Skyhook Custom Resource, often SCR for short). It is Kubernetes aware, making cluster modifications easy. This enables Skyhook to schedule updates around important workloads and do rolling updates. It can be used in any cluster environment: self-managed clusters, on-prem clusters, cloud clusters, etc.
3+
**Skyhook** is a Kubernetes-aware package manager for cluster administrators to safely modify and maintain underlying host declaratively at scale.
4+
5+
## Why Skyhook?
6+
7+
Managing and updating Kubernetes clusters is challenging. While Kubernetes advocates treating compute as disposable, but certain scenarios make this difficult:
8+
9+
- **Updating hosts without re-imaging:**
10+
- Limited excess hardware/capacity for rolling replacements
11+
- Long node replacement times (example can be hours in some cloud providers)
12+
- **OS image management:**
13+
- Maintain a common base image with workload-specific overlays instead of multiple OS images
14+
- **Workload sensitivity:**
15+
- Some workloads can't be moved, are difficult to move, or take a long time to migrate
16+
17+
## What is Skyhook?
18+
19+
Skyhook functions like a package manager but for your entire Kubernetes cluster, with three main components:
20+
21+
1. **Skyhook Operator** - Manages installing, updating, and removing packages
22+
2. **Skyhook Custom Resource (SCR)** - Declarative definitions of changes to apply
23+
3. **Packages** - The actual modifications you want to implement
24+
25+
## Where and When to use Skyhook
26+
27+
Skyhook works in any Kubernetes environment (self-managed, on-prem, cloud) and shines when you need:
28+
29+
- Kubernetes-aware scheduling that protects important workloads
30+
- Rolling or simultaneous updates across your cluster
31+
- Declarative configuration management for host-level changes
32+
33+
## Benefits
34+
- **Native Kubernetes integration** - Packages are standard Kubernetes resources compatible with GitOps tools like ArgoCD, Helm, and Flux
35+
- **Autoscaling support** - Ensure newly created nodes are properly configured before schedulable
36+
- **First-class upgrades** - Deploys changes with minimal disruption, waiting for running workloads to complete when needed
37+
38+
## Key Features
39+
- **Interruption Budget:** percent of nodes or count
40+
- **Node Selectors:** selectors for which nodes to apply too (node labels)
41+
- **Pod Non Interrupt Labels:** labels for pods to **never** interrupt
42+
- **Package Interrupt:** service (containerd, cron, any thing systemd), or reboot
43+
- **Additional Tolerations:** are tolerations added to the packages
44+
- [**Runtime Required**](docs/runtime_required.md): requires node to come into the cluster with a taint, and will do work prior to removing custom taint.
445

546
## Pre-built Packages
647

@@ -67,22 +108,6 @@ The Status will show the overall package status as well as the status of each no
67108
kubectl get nodes -o jsonpath='{range .items[?(@.metadata.labels.skyhook\.nvidia\.com/test-node=="demo")]}{.metadata.annotations.skyhook\.nvidia\.com/nodeState_demo}{"\n"}{end}'
68109
```
69110

70-
## Benefits
71-
- The requested changes (the Packages) are native Kubernetes resources they can be combined and applied with common tools like ArgoCD, Helm, Flux etc. This means that all the tooling to manage applications can package customizations right alongside them to get applied, removed and upgraded as the applications themselves are.
72-
- Autoscaling, with skyhook if you want to enable autoscaling on your cluster but need to modify all Nodes added to a cluster, you need something that is kubernetes aware. Skyhook as feature to make sure you nodes are ready before then enter the cluster.
73-
- Upgrades are first class, with skyhook you can make deploy changes to your cluster and can wait for running workloads to finish before applying changes.
74-
75-
## Key Features
76-
- **interruptionBudget:** percent of nodes or count
77-
- **nodeSelectors:** selectors for which nodes to apply too (node labels)
78-
- **podNonInterruptLabels:** labels for pods to **never** interrupt
79-
- **package interrupt:** service (containerd, cron, any thing systemd), or reboot
80-
- **config interrupt:** service, or reboot when a certain key's value changes in the configmap
81-
- **configMap:** per package
82-
- **env vars:** per package
83-
- **additionalTolerations:** are tolerations added to the packages
84-
- [**runtimeRequired**](docs/runtime_required.md): requires node to come into the cluster with a taint, and will do work prior to removing custom taint.
85-
86111
### Stages
87112
The operator will apply steps in a package throughout different lifecycle stages. This ensures that the right steps are applied in the right situations and in the correct order.
88113
- Upgrade: This stage will be ran whenever a package's version is upgraded in the SCR.

0 commit comments

Comments
 (0)