Skip to content
forked from openkruise/kruise

Automate application workloads management on Kubernetes

License

Notifications You must be signed in to change notification settings

getfloret/kruise

 
 

Repository files navigation

OpenKruise/Kruise

License Go Report Card codecov CII Best Practices

Kruise is at the core of the OpenKruise project. It is a set of controllers which extends and complements Kubernetes core controllers on application workload management.

Today, Kruise offers three application workload controllers:

  • Advanced StatefulSet: An enhanced version of default StatefulSet with extra functionalities such as inplace-update, sharding by namespace.

  • BroadcastJob: A job that runs pods to completion across all the nodes in the cluster.

  • SidecarSet: A controller that injects sidecar container into the pod spec based on selectors.

Please see documents for more technical information.

Several tutorials are provided to demonstrate how to use the workload controllers.

Getting started

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

Note that ALL three CRDs need to be installed for kruise-controller to run properly.

Install kruise-controller-manager

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.

Usage examples

Advanced StatefulSet

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

Broadcast Job

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

SidecarSet

The yaml file below describes a SidecarSet that contains a sidecar container named sidecar1

# 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 

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 etc.

make manifests

Community

If you have any questions or want to contribute, you are welcome to join our slack channel

Mailing List: todo

Copyright

Certain implementation relies on existing code from Kubernetes and the credit goes to original Kubernetes authors.

About

Automate application workloads management on Kubernetes

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 99.7%
  • Other 0.3%