|The Kruise Project holds bi-weekly community calls. To join us and watch previous meeting notes and recordings, please see meeting schedule.|
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 three workload controllers:
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.
Please see documents for more technical information.
Please find the project roadmap here.
Several tutorials are provided to demonstrate how to use the workload controllers.
Install with YAML files
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
Note that ALL three CRDs need to be installed for kruise-controller to run properly.
kubectl apply -f https://raw.githubusercontent.com/kruiseio/kruise/master/config/manager/all_in_one.yaml
Or run from the repo root directory:
kustomize build config/default | kubectl apply -f -
To Install Kustomize, check kustomize website.
Note that use Kustomize 1.0.11. Version 2.0.3 has compatibility issues with kube-builder
The official kruise-controller-manager image is hosted under docker hub.
apiVersion: apps.kruise.io/v1alpha1 kind: StatefulSet metadata: name: sample spec: replicas: 3 serviceName: fake-service selector: matchLabels: app: sample template: metadata: labels: app: sample spec: readinessGates: # A new condition must be added to ensure the pod remain at NotReady state while the in-place update is happening - conditionType: InPlaceUpdateReady containers: - name: main image: nginx:alpine podManagementPolicy: Parallel # allow parallel updates, works together with maxUnavailable updateStrategy: type: RollingUpdate rollingUpdate: # Do in-place update if possible, currently only image update is supported for in-place update podUpdatePolicy: InPlaceIfPossible # Allow parallel updates with max number of unavailable instances equals to 2 maxUnavailable: 2
Run a BroadcastJob that each Pod computes pi, with
ttlSecondsAfterFinished set to 30. The job
will be deleted in 30 seconds after the job is finished.
apiVersion: apps.kruise.io/v1alpha1 kind: BroadcastJob metadata: name: broadcastjob-ttl spec: template: spec: containers: - name: pi image: perl command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] restartPolicy: Never completionPolicy: type: Always ttlSecondsAfterFinished: 30
The yaml file below describes a SidecarSet that contains a sidecar container named
# sidecarset.yaml apiVersion: apps.kruise.io/v1alpha1 kind: SidecarSet metadata: name: test-sidecarset spec: selector: # select the pods to be injected with sidecar containers matchLabels: app: nginx containers: - name: sidecar1 image: centos:7 command: ["sleep", "999d"] # do nothing at all
Makefile in the root folder which describes the options to build and install. Here are some common ones:
Build the controller manager binary
Run the tests
Build the docker image, by default the image name is
export IMG=<your_image_name> && make docker-build
Push the image
export IMG=<your_image_name> && make docker-push
docker push <your_image_name>
Generate manifests e.g. CRD, RBAC etc.
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(钉钉讨论群)
Certain implementation relies on existing code from Kubernetes and the credit goes to original Kubernetes authors.