# Announcing KUDO 0.16.0

We are happy to release KUDO v0.16.0, with focus on upgradability, support for immutable parameters and a lot of other small improvements and bugfixes.

To see the full changelog and the list of contributors who contributed to this release, visit the Github Release page.

# KUDO Upgrades

Until recently, kubectl kudo init would simply apply the expected state to the cluster and ignore any breaking changes that may have been introduced. This is now changed, from now on:

  • kubectl kudo init will fail if it detects an existing KUDO installation to prevent accidental upgrades.
  • You can use kubectl kudo init --upgrade to upgrade an existing installation.

The upgrade process will verify that the upgrade can be executed correctly and - in later versions - will check installed operators and may contain migrations and other features that have to be done in an upgrade.

In the same vein, we started to integrate upgrade-tests into our CI to ensure that new KUDO releases won't break existing installations and can be upgraded with a defined process.

Run kubectl kudo init --help for more details.

# Immutable Parameters

Operators sometimes have the need to specify parameters that are effectively immutable. For example the NUM_TOKENS parameter in the KUDO Cassandra operator must not be changed in an update to the instance because Cassandra does not allow this property to be changed. Until now it was not really possible to define a parameter as immutable. This has now changed, with KUDO 0.16.0 it is possible to define a parameter like this:

  - name: NUM_TOKENS
    description: "The number of tokens assigned to each node."
    default: "256"
    immutable: true

This will prevent the user from ever changing the parameter value in an update to the instance. For more details about immutable parameters, take a look at KEP-30. The document also defines the details of changing an existing parameter to immutable in a new operator version.

Show parameters

You can get a list of all operator parameters with package list. For example: kubectl kudo package list parameters zookeeper will show all parameters from the zk operator. This includes immutability and other attributes.

# New Repository Index

The default repository when installing operators with KUDO is the community repository. Adding new operators to this repository has been greatly simplified with a new index of operators and a new community repository URL that is used starting with KUDO 0.16.

WARNING

The community repository URL has changed!

KUDO users with existing installations must update their repository configuration!

# Updating the community repository URL

If you had installed KUDO before, you must update your repository configuration.

Please check your ~/.kudo/repository/repositories.yaml. If you have never modified it, simply delete the file and run kubectl kudo init --client-only. This will recreate the file with the new URL.

If you have modified the repositories.yaml before, you need to update the community repository URL.

  • Old: https://kudo-repository.storage.googleapis.com/0.10.0
  • New: https://kudo-repository.storage.googleapis.com/v1

The old repository will still be served for the foreseeable future, but will not receive any updates anymore.

For more details have a look at the full article about the new operators index.

# YAML/JSON output

There are some more commands that now allow yaml/json output so it can be better used in scripts and tools:

kubectl kudo plan status --output yaml

planStatus:
  deploy:
    lastUpdatedTimestamp: "2019-10-17T01:01:01Z"
    name: deploy
    phases:
    - name: deploy
      status: FATAL_ERROR
      steps:
      - message: error detail
        name: deploy
        status: FATAL_ERROR
    status: FATAL_ERROR

kubectl kudo package verify --output json

{
  "errors": [
    "parameter \"Cpus\" has a duplicate",
    "parameter \"comma,\" contains invalid character ','",
    "\"operatorVersion\" is required and must be semver",
    "plan \"not-existing-plan\" used in parameter \"comma,\" is not defined"
  ],
  "warnings": [
    "parameter \"Cpus\" defined but not used."
  ],
  "valid": false
}

Make sure to look at the command parameters with kubectl kudo <command> --help to see if a command supports yaml/json output. Please open an Enhancement Request if you are missing it somewhere.

Andreas About the author
Andreas is a Senior Software Engineer at D2iQ located in Hamburg. He has a lot of experience in game development and distributed systems, rants about Go and Kubernetes and sings in a choir to get back to normal. Find Andreas on GitHub