This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

Time Scenarios

    Using this type of scenario configuration, one is able to change the time and/or date of the system for pods or nodes.

    How to Run Time Scenarios

    Choose your preferred method to run time scenarios:

    Example scenario file: time_scenarios_example.yml

    Configuration Options:

    action: skew_time or skew_date.

    object_type: pod or node.

    namespace: namespace of the pods you want to skew. Needs to be set if setting a specific pod name.

    label_selector: Label on the nodes or pods you want to skew.

    container_name: Container name in pod you want to reset time on. If left blank it will randomly select one.

    object_name: List of the names of pods or nodes you want to skew.

    Refer to time_scenarios_example config file.

    time_scenarios:
      - action: skew_time
        object_type: pod
        object_name:
          - apiserver-868595fcbb-6qnsc
          - apiserver-868595fcbb-mb9j5
        namespace: openshift-apiserver
        container_name: openshift-apiserver
      - action: skew_date
        object_type: node
        label_selector: node-role.kubernetes.io/worker
    

    How to Use Plugin Name

    Add the plugin name to the list of chaos_scenarios section in the config/config.yaml file

    kraken:
        kubeconfig_path: ~/.kube/config                     # Path to kubeconfig
        ..
        chaos_scenarios:
            - time_scenarios:
                - scenarios/<scenario_name>.yaml
    

    Run

    python run_kraken.py --config config/config.yaml
    

    This scenario skews the date and time of the nodes and pods matching the label on a Kubernetes/OpenShift cluster. More information can be found here.

    Run

    If enabling Cerberus to monitor the cluster and pass/fail the scenario post chaos, refer docs. Make sure to start it before injecting the chaos and set CERBERUS_ENABLED environment variable for the chaos injection container to autoconnect.

    $ podman run \
      --name=<container_name> \
      --net=host \
      --pull=always \
      --env-host=true \
      -v <path-to-kube-config>:/home/krkn/.kube/config:Z \
      -d containers.krkn-chaos.dev/krkn-chaos/krkn-hub:time-scenarios
    $ podman logs -f <container_name or container_id> # Streams Kraken logs
    $ podman inspect <container-name or container-id> \
      --format "{{.State.ExitCode}}" # Outputs exit code which can considered as pass/fail for the scenario
    
    $ docker run $(./get_docker_params.sh) \
      --name=<container_name> \
      --net=host \
      --pull=always \
      -v <path-to-kube-config>:/home/krkn/.kube/config:Z \
      -d containers.krkn-chaos.dev/krkn-chaos/krkn-hub:time-scenarios
    $ docker run \
      -e <VARIABLE>=<value> \
      --name=<container_name> \
      --net=host \
      --pull=always \
      -v <path-to-kube-config>:/home/krkn/.kube/config:Z \
      -d containers.krkn-chaos.dev/krkn-chaos/krkn-hub:time-scenarios
    
    $ docker logs -f <container_name or container_id> # Streams Kraken logs
    $ docker inspect <container-name or container-id> \
      --format "{{.State.ExitCode}}" # Outputs exit code which can considered as pass/fail for the scenario
    

    Supported parameters

    The following environment variables can be set on the host running the container to tweak the scenario/faults being injected:

    example:

    export <parameter_name>=<value>
    

    See list of variables that apply to all scenarios here that can be used/set in addition to these scenario specific variables

    ParameterDescriptionDefault
    OBJECT_TYPEObject to target. Supported options: pod, nodepod
    LABEL_SELECTORLabel of the container(s) or nodes to targetk8s-app=etcd
    ACTIONAction to run. Supported actions: skew_time, skew_dateskew_date
    OBJECT_NAMEList of the names of pods or nodes you want to skew ( optional parameter )[]
    CONTAINER_NAMEContainer in the specified pod to target in case the pod has multiple containers running. Random container is picked if empty""
    NAMESPACENamespace of the pods you want to skew, need to be set only if setting a specific pod name""

    For example:

    $ podman run \
      --name=<container_name> \
      --net=host \
      --pull=always \
      --env-host=true \
      -v <path-to-custom-metrics-profile>:/home/krkn/kraken/config/metrics-aggregated.yaml \
      -v <path-to-custom-alerts-profile>:/home/krkn/kraken/config/alerts \
      -v <path-to-kube-config>:/home/krkn/.kube/config:Z \
      -d containers.krkn-chaos.dev/krkn-chaos/krkn-hub:time-scenarios
    
    krknctl run time-scenarios  (optional: --<parameter>:<value> ) |
    

    Can also set any global variable listed here

    Scenario specific parameters:

    ParameterDescriptionTypeDefault
    --object-typeObject to target. Supported options pod or nodeenumpod
    --label-selectorLabel of the container(s) or nodes to targetstring“k8s-app=etcd”
    --actionAction to run. Supported actions: skew_time or skew_dateenumskew_date
    --object-namesList of the names of pods or nodes you want to skewstring
    --container-nameContainer in the specified pod to target in case the pod has multiple containers running. Random container is picked if emptystring
    --namespaceNamespace of the pods you want to skew, need to be set only if setting a specific pod namestring

    To see all available scenario options

    krknctl run time-scenarios --help
    

    Demo

    See a demo of this scenario: