OpenKruise/Kruise
What is NEW! |
---|
Dec 16th, 2019. Kruise v0.3.0 is RELEASED! Please check the CHANGELOG for details. |
Nov 24th, 2019. A blog about new UnitedDeployment controller is posted in Kruise Blog (link). |
Kruise is the core of the OpenKruise project. It is a set of controllers which extends and complements Kubernetes core controllers on workload management.
Today, Kruise offers four workload controllers:
-
Advanced StatefulSet: An enhanced version of default StatefulSet with extra functionalities such as
inplace-update
,pasue
andMaxUnavailable
. -
BroadcastJob: A job that runs Pods to completion across all the nodes in the cluster.
-
SidecarSet: A controller that injects sidecar containers into the Pod spec based on selectors and also is able to upgrade the sidecar containers.
-
UnitedDeployment: This controller manages application pods spread in multiple fault domains by using multiple workloads.
The project roadmap is actively updated in here. This video demo by Lachlan Evenson is great for new users.
Getting started
Check before installation
Kruise requires APIServer to enable features such as MutatingAdmissionWebhook
and ValidatingAdmissionWebhook
. You can check your cluster qualification
before installing Kruise by running one of the following commands locally. The script assumes a read/write permission to /tmp and the local
Kubectl
is configured to access the target cluster.
via curl
sh -c "$(curl -fsSL https://raw.githubusercontent.com/openkruise/kruise/master/scripts/check_for_installation.sh)"
via wget
sh -c "$(wget -O- https://raw.githubusercontent.com/openkruise/kruise/master/scripts/check_for_installation.sh)"
Install with helm charts
wget https://raw.githubusercontent.com/openkruise/kruise/master/hack/auto_generate_charts.sh
chmod +x auto_generate_charts.sh
./auto_generate_charts.sh
helm install kruise charts/
Install with YAML files
Install CRDs
kubectl apply -f https://raw.githubusercontent.com/kruiseio/kruise/master/config/crds/apps_v1alpha1_broadcastjob.yaml
kubectl apply -f https://raw.githubusercontent.com/kruiseio/kruise/master/config/crds/apps_v1alpha1_sidecarset.yaml
kubectl apply -f https://raw.githubusercontent.com/kruiseio/kruise/master/config/crds/apps_v1alpha1_statefulset.yaml
kubectl apply -f https://raw.githubusercontent.com/kruiseio/kruise/master/config/crds/apps_v1alpha1_uniteddeployment.yaml
Install kruise-controller-manager
kubectl apply -f https://raw.githubusercontent.com/kruiseio/kruise/master/config/manager/all_in_one.yaml
The official kruise-controller-manager image is hosted under docker hub.
Optional: Enable specific controllers
If you only need some of the Kruise controllers and want to disable others, you can use either one of the two options or both:
-
Only install the CRDs you need.
-
Set env
CUSTOM_RESOURCE_ENABLE
in kruise-manager container by changing kruise-controller-manager statefulset template. The value is a list of resource names that you want to enable. For example,CUSTOM_RESOURCE_ENABLE=StatefulSet,SidecarSet
means only AdvancedStatefulSet and SidecarSet controllers/webhooks are enabled, all other controllers/webhooks are disabled.
Usage
Please see detailed documents which include examples, about Kruise controllers. We also provider tutorials to demonstrate how to use Kruise controllers.
Developer Guide
There's a Makefile
in the root folder which describes the options to build and install. Here are some common ones:
Build the controller manager binary
make manager
Run the tests
make test
Build the docker image, by default the image name is openkruise/kruise-manager:v1alpha1
export IMG=<your_image_name> && make docker-build
Push the image
export IMG=<your_image_name> && make docker-push
or just
docker push <your_image_name>
Generate manifests e.g. CRD, RBAC YAML files etc.
make manifests
To develop/debug kruise controller manager locally, please check the debug guide.
Uninstall
To uninstall kruise from a Kubernetes cluster:
export KUBECONFIG=PATH_TO_CONFIG
sh -c "$(curl -fsSL https://raw.githubusercontent.com/kruiseio/kruise/master/scripts/uninstall.sh)"
Note that this will lead to all resources created by Kruise, including webhook configurations, services, namespace, CRDs, CR instances and Pods managed by Kruise controller, to be deleted! Please do this ONLY when you fully understand the consequence.
Community
If you have any questions or want to contribute, you are welcome to communicate most things via GitHub issues or pull requests.
Other active communication channels:
- Slack: channel address
- Mailing List: todo
- Dingtalk Group(钉钉讨论群)
Copyright
Certain implementation relies on existing code from Kubernetes and the credit goes to original Kubernetes authors.