[doc]
ContainerRecreateRequest provides a way to let users restart/recreate one or more containers in an existing Pod.
[doc]
This feature provides a safety policy which could help users protect Kubernetes resources and applications' availability from the cascading deletion mechanism.
- Support
pod-deletion-cost
to let users set the priority of pods deletion. [doc] - Support image pre-download for in-place update, which can accelerate the progress of applications upgrade. [doc]
- Add
CloneSetShortHash
feature-gate, which solves the length limit of CloneSet name. [doc] - Make
maxUnavailable
andmaxSurge
effective for specified deletion. [doc] - Support efficient update and rollback using
partition
. [doc]
- Support sidecar container hot upgrade. [doc]
- Add
podSelector
to pull image on nodes of the specific pods.
- Optimize cri-runtime for kruise-daemon
- Fix broadcastjob expectation observed when node assigned by scheduler
- The flags for kruise-manager must start with
--
instead of-
. If you install Kruise with helm chart, ignore this. - SidecarSet has been refactored. Make sure there is no SidecarSet being upgrading when you upgrade Kruise, and read the latest doc for SidecarSet.
- A new component named
kruise-daemon
comes in. It is deployed in kruise-system using DaemonSet, defaults on every Node.
Now Kruise includes two components:
- kruise-controller-manager: contains multiple controllers and webhooks, deployed using Deployment.
- kruise-daemon: contains bypass features like image pre-download and container restart in the future, deployed using DaemonSet.
Kruise will create a NodeImage for each Node, and its spec
contains the images that should be downloaded on this Node.
Also, users can create an ImagePullJob CR to declare an image should be downloaded on which nodes.
apiVersion: apps.kruise.io/v1alpha1
kind: ImagePullJob
metadata:
name: test-imagepulljob
spec:
image: nginx:latest
completionPolicy:
type: Always
parallelism: 10
pullPolicy:
backoffLimit: 3
timeoutSeconds: 300
selector:
matchLabels:
node-label: xxx
- Refactor the controller and webhook for SidecarSet:
- For
spec
:- Add
namespace
: indicates this SidecarSet will only inject for Pods in this namespace. - For
spec.containers
:- Add
podInjectPolicy
: indicates this sidecar container should be injected in the front or end ofcontainers
list. - Add
upgradeStrategy
: indicates the upgrade strategy of this sidecar container (currently it only supportsColdUpgrade
) - Add
shareVolumePolicy
: indicates whether to share other containers' VolumeMounts in the Pod. - Add
transferEnv
: can transfer the names of env shared from other containers.
- Add
- For
spec.updateStrategy
:- Add
type
: containsNotUpdate
orRollingUpdate
. - Add
selector
: indicates only update Pods that matched this selector. - Add
partition
: indicates the desired number of Pods in old revisions. - Add
scatterStrategy
: defines the scatter rules to make pods been scattered during updating.
- Add
- Add
- For
- Add
currentRevision
field in status. - Optimize CloneSet scale sequence.
- Fix condition for pod lifecycle state from Updated to Normal.
- Change annotations
inplace-update-state
=>apps.kruise.io/inplace-update-state
,inplace-update-grace
=>apps.kruise.io/inplace-update-grace
. - Fix
maxSurge
calculation when partition > replicas.
- Support Deployment as template in UnitedDeployment.
- Support lifecycle hook for in-place update and pre-delete.
- Add PodFitsResources predicates.
- Add
--assign-bcj-pods-by-scheduler
flag to control whether to use scheduler to assign BroadcastJob's Pods.
- Add feature-gate to replace the CUSTOM_RESOURCE_ENABLE env.
- Add GetScale/UpdateScale into clientsets for scalable resources.
- Support multi-platform build in Makefile.
- Set different user-agent for controllers.
Since v0.7.0:
- OpenKruise requires Kubernetes 1.13+ because of CRD conversion.
Note that for Kubernetes 1.13 and 1.14, users must enable
CustomResourceWebhookConversion
feature-gate in kube-apiserver before install or upgrade Kruise. - OpenKruise official image supports multi-arch, by default including linux/amd64, linux/arm64, and linux/arm platforms.
Thanks for @rishi-anand contributing!
An enhanced version of CronJob, it supports multiple kind in a template:
apiVersion: apps.kruise.io/v1alpha1
kind: AdvancedCronJob
spec:
template:
# Option 1: use jobTemplate, which is equivalent to original CronJob
jobTemplate:
# ...
# Option 2: use broadcastJobTemplate, which will create a BroadcastJob object when cron schedule triggers
broadcastJobTemplate:
# ...
# Options 3(future): ...
- Partition support intOrStr format
- Warning log for expectation timeout
- Remove ownerRef when pod's labels not matched CloneSet's selector
- Allow updating revisionHistoryLimit in validation
- Fix resourceVersionExpectation race condition
- Fix overwrite gracePeriod update
- Fix webhook checking podsToDelete
- Promote Advanced StatefulSet to v1beta1
- A conversion webhook will help users to transfer existing and new
v1alpha1
advanced statefulsets tov1beta1
automatically - Even all advanced statefulsets have been converted to
v1beta1
, users can still get them throughv1alpha1
client and api
- A conversion webhook will help users to transfer existing and new
- Support reserveOrdinal for Advanced StatefulSet
- Add validation webhook for DaemonSet
- Fix pending pods created by controller
- Optimize the way to calculate parallelism
- Check ownerReference for filtered pods
- Add pod label validation
- Add ScaleExpectation for BroadcastJob
- Initializing capabilities if allowPrivileged is true
- Support secret cert for webhook with vip
- Add rate limiter config
- Fix in-place rollback when spec image no latest tag
- Support lifecycle hooks for pre-delete and in-place update
- Fix map concurrent write
- Fix current revision during rollback
- Fix update expectation for pod deletion
- Support initContainers definition and injection
- Support to define CloneSet as UnitedDeployment's subset
- Support minReadySeconds strategy
- Add webhook controller to optimize certs and configurations generation
- Add pprof server and flag
- Optimize discovery logic in custom resource gate
- Update dependencies: k8s v1.13 -> v1.16, controller-runtime v0.1.10 -> v0.5.7
- Support multiple active webhooks
- Fix CRDs using openkruise/controller-tools
An enhanced version of default DaemonSet with extra functionalities such as:
- inplace update and surging update
- node selector for update
- partial update
- Not create excessive pods when updating with maxSurge
- Round down maxUnavaliable when maxSurge > 0
- Skip recreate when inplace update failed
- Fix scale panic when replicas < partition
- Fix CloneSet blocked by terminating PVC
- Support
maxSurge
strategy which could work well withmaxUnavailable
andpartition
- Add CloneSet core interface to support multiple implementations
- Fix in-place update for metadata in template
- Make sure
maxUnavailable
should not be less than 1 - Fix in-place update for metadata in template
- Merge volumes during injecting sidecars into Pod
- Expose
CUSTOM_RESOURCE_ENABLE
env by chart set option
- Add
labelSelector
to optimize scale subresource for HPA - Add
minReadySeconds
,availableReplicas
fields for CloneSet - Add
gracePeriodSeconds
for graceful in-place update
- Support label selector in scale for HPA
- Add
gracePeriodSeconds
for graceful in-place update
- Fix StatefulSet default update sequence
- Fix ControllerRevision adoption
- Fix
check_for_installation.sh
script for k8s 1.11 to 1.13
Mainly focuses on managing stateless applications. (Concept for CloneSet)
It provides full features for more efficient, deterministic and controlled deployment, such as:
- inplace update
- specified pod deletion
- configurable priority/scatter update
- preUpdate/postUpdate hooks
- UnitedDeployment supports both StatefulSet and AdvancedStatefulSet.
- UnitedDeployment supports toleration config in subset.
- Fix statefulset inplace update fields in pod metadata such as labels/annotations.
- Simplify installation with helm charts, one simple command to install kruise charts, instead of downloading and executing scripts.
- Support priority update, which allows users to configure the sequence for Pods updating.
- Fix maxUnavailable calculation, which should not be less than 1.
- Fix BroadcastJob cleaning up after TTL.
- Provide a script to check if the K8s cluster has enabled MutatingAdmissionWebhook and ValidatingAdmissionWebhook admission plugins before installing Kruise.
- Users can now install specific controllers if they only need some of the Kruise CRD/controllers.
- Fix a jsonpatch bug by updating the vendor code.
- Add condition report in
status
to indicate the scaling or rollout results.
- Define a set of APIs for UnitedDeployment workload which manages multiple workloads spread over multiple domains in one cluster.
- Create one workload for each
Subset
inTopology
. - Manage Pod replica distribution across subset workloads.
- Rollout all subset workloads by specifying a new workload template.
- Manually manage the rollout of subset workloads by specifying the
Partition
of each workload.
- Three blog posts are added in Kruise website, titled:
- Kruise Controller Classification Guidance.
- Learning Concurrent Reconciling.
- UnitedDeploymemt - Supporting Multi-domain Workload Management.
- New documents are added for UnitedDeployment, including a tutorial.
- Revise main README.md.
- Provide a script to generate helm charts for Kruise. User can specify the release version.
- Automatically install kubebuilder if it does not exist in the machine.
- Add Kruise uninstall script.
- Fix a potential controller crash problem when APIServer disables MutatingAdmissionWebhook and ValidatingAdmissionWebhook admission plugins.
- Change the type of
Parallelism
field in BroadcastJob from*int32
tointOrString
. - Support
Pause
in BroadcastJob. - Add
FailurePolicy
in BroadcastJob, supportingContinue
,FastFailed
, andPause
polices. - Add
Phase
in BroadcastJobstatus
.
- Allow parallelly upgrading SidecarSet Pods by specifying
MaxUnavailable
. - Support sidecar volumes so that user can specify volume mount in sidecar containers.
- Support to run kruise-controller-manager locally
- Allow selectively install required CRDs for kruise controllers
- Remove
sideEffects
in kruise-manager all-in-one YAML file to avoid start failure
- Add MaxUnavailable rolling upgrade strategy
- Add In-Place pod update strategy
- Add paused functionality during rolling upgrade
- Add BroadcastJob that runs pods on all nodes to completion
- Add
Never
termination policy to have job running after it finishes all pods - Add
ttlSecondsAfterFinished
to delete the job after it finishes in x seconds.
- Make broadcastjob honor node unschedulable condition
- Add SidecarSet that automatically injects sidecar container into selected pods
- Support sidecar update functionality for SidecarSet