botkube icon indicating copy to clipboard operation
botkube copied to clipboard

Release 0.13 and promote it

Open pkosiec opened this issue 2 years ago • 1 comments

As this will be a first feature-packed release since ~1,5 years, it would be great to promote it and also gather feedback from the community. Here are some ideas:

Release

  • [ ] Revert docs PR
    • https://github.com/kubeshop/botkube-docs/pull/112/files
  • [ ] Go through the release process instruction (https://github.com/infracloudio/botkube-docs/pull/74) and release 0.13
    • Consider alpha/beta releases to gather community feedback
  • [ ] Describe any breaking changes in the GitHub release

Community-related tasks (nice to have)

  • prepare survey for BotKube users (to know how the community uses BotKube, and build priorities for future based on the feedback)
    • Loosely related issue: #506
  • create a blog post (target location: to discuss)
  • cross-post the blog post (e.g. Medium, Dev.to)
  • Share the news in social media (e.g. Reddit, Hacker News, LinkedIn, Twitter)
  • Prepare an online meetup presentation based on 0.13 features
  • Think about new places for where BotKube can be promoted.
    • For example, awesome lists. Project is already mentioned in https://github.com/ramitsurana/awesome-kubernetes, but there might be additional lists where it can be promoted as well

pkosiec avatar May 25 '22 13:05 pkosiec

Update Vault CI driver tutorial:

  • https://github.com/infracloudio/botkube-docs/pull/82/files#diff-a7767b31519dcedfad251db2f28b9e7e3cc32fe99151d488bb32f7ba311fc523R133

mszostok avatar Jun 08 '22 12:06 mszostok

Release activities

  • ✅ Ensure that all security vulnerabilities are fixed or mitigated

    • assignee: @pkosiec
    • NOTE: We are not affected. PR with dependency bump waits for 0.14: https://github.com/kubeshop/botkube/pull/700
  • ✅ Create the 0.13.0-rc.1 release (tag only)

    • assignee: @mszostok
  • ✅ Create the 0.13.0 release (tag only)

    • assignee: @mszostok
  • ✅ Test the release candidate

    • assignee: team
  • ✅ Prepare PR with updated BotKube documentation

    • assignee: @pkosiec
    • NOTE: Revert docs changes as described in the issue. Ensure that all docs are up-to-date. ✅ PR created, waiting for final 0.13: https://github.com/kubeshop/botkube-docs/pull/133
  • ✅ Check if we described all breaking changes in the #614 release summary and if it's rendered correctly.

    • assignee: @huseyinbabal

Descoped:

  • Prepare the release notes
    • assignee: @brampling
  • Create a blog post and cross-post it (e.g. Medium, Dev.to)
    • assignee: @brampling
  • Share the news on social media (e.g. Reddit, Hacker News, LinkedIn, Twitter, Slack)
    • assignee: @brampling

mszostok avatar Aug 24 '22 09:08 mszostok

Testing

Tasks:

  • ✅ Name: Slack

    • assignee: @pkosiec
    • NOTE: Tested just the filters and channel forwarding. Other stuff is tested via E2E tests.
  • ✅ Name: Mattermost

    • assignee: @madebyrogal
  • ✅ Name: Discord

    • assignee: @mszostok
    • docs update: https://github.com/kubeshop/botkube-docs/pull/132
  • ✅ Name: Elasticsearch

  • ✅ Name: Webhook

    • assignee: @huseyinbabal
    • docs update: https://github.com/kubeshop/botkube-docs/pull/135
  • ✅ Name: MS Teams

    • assignee: @mszostok
    • NOTE:
      • Bugs fixes: https://github.com/kubeshop/botkube/pull/702
      • docs update: https://github.com/kubeshop/botkube-docs/pull/132

Scenarios

Helm values YAML:

Click me
communications:
  'default-group':
    slack:
      enabled: true
      channels:
        'default':
          name: "team-a"
          bindings:
            executors:
              - kubectl-read-only
              - kubectl-wait-cmd
              - kubectl-exec-cmd
              - kubectl-allow-all
            sources:
              - k8s-events
        'secondary':
          name: "admin"
          bindings:
            executors:
              - kubectl-read-only
            sources:
              - k8s-updates

    discord:
      channels:
        'default':
          id: ""
          bindings:
            executors:
              - kubectl-read-only
              - kubectl-wait-cmd
              - kubectl-exec-cmd
              - kubectl-allow-all
            sources:
              - k8s-events
        'secondary':
          id: ""
          bindings:
            executors:
              - kubectl-read-only
            sources:
              - k8s-other

sources:
  'k8s-events':
    kubernetes:
      resources:
        - name: v1/configmaps
          namespaces:
            include:
              - (botk.*|default)
          events:
            - create
            - update
            - delete
  'k8s-other':
    kubernetes:
      namespaces:
        include:
          - botkube
        exclude:
          -
      resources:
        - name: v1/pods
          namespaces:
            include:
              - ".*"
            exclude:
              - ".*-system"
              - "default"
          events:
            - create
            - delete

executors:
  'kubectl-read-only':
    kubectl:
      enabled: true
      namespaces:
        include:
          - (botk.*|default) # to ensure that the regex works properly and both 'botkube' and 'default' NS will be matched
  'kubectl-wait-cmd':
    kubectl:
      enabled: true
      namespaces:
        include:
          - ".*"
        ignore:
          - ".*-system" # to ensure that ignore regex works properly
      commands:
        verbs: [ "wait" ]
      restrictAccess: false
  'kubectl-exec-cmd':
    kubectl:
      enabled: false
      namespaces:
        include:
          - botkube
          - default
      commands:
        verbs: [ "exec" ]
      restrictAccess: false
  'kubectl-allow-all':
    kubectl:
      enabled: true
      namespaces:
        include:
          - ".*"
      commands:
        verbs: [ "get" ]
        resources: [ "deployments" ]
  'kubectl-not-bound-to-any-channel':
    kubectl:
      enabled: true
      namespaces:
        include:
          - ".*"
      commands:
        verbs: [ "port-forward" ]
        resources: [ "deployments" ]

settings:
  clusterName: sample
  upgradeNotifier: false

extraAnnotations:
  botkube.io/disable: "true"

e2eTest:
  slack:
    testerAppToken: "" # Provide a valid token for BotKube tester app
    additionalContextMessage: "" # Optional additional context

Ping

@BotKube ping

Filters

  1. List

    @BotKube filters list
    

    exp output:

    FILTER                  ENABLED DESCRIPTION
    NodeEventsChecker       true    Sends notifications on node level critical events.
    ObjectAnnotationChecker true    Checks if annotations <http://botkube.io/*|botkube.io/*> present in object specs and filters them.`
    
  2. Test ObjectAnnotationChecker filter:

  • Create Pod and no notification should be sent
    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      namespace: botkube
      annotations:
        botkube.io/disable: "true"
    spec:
      containers:
        - name: nginx
          image: nginx:1.14.2
          ports:
            - containerPort: 80
    
  • Disable annotation checker
    @BotKube filters disable ObjectAnnotationChecker
    
  • Check that it is disabled
    @BotKube filters list
    
  • Recreate Pod and notification should be sent

Commands

  1. Test on team and admin channels
    @BotKube commands list
    
    you should see different settings based on the channel bindings.
  2. With cluster name
    @BotKube commands list --cluster-name={name}
    

Annotations

  • Test "botkube.io/channel": "" custom routing

Create a Pod:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  namespace: botkube
  annotations:
    botkube.io/channel: "general" # different channel than the configured one by default
spec:
  containers:
    - name: nginx
      image: nginx:1.14.2
      ports:
        - containerPort: 80

Delete it and see if all events are coming to the general channel.

Kubectl executor

  1. Get deployments from a other namespace (NS restriction)

    @BotKube get deploy -n other
    

    This should work only on one channel. On the second one, you should get:

    Sorry, the kubectl 'get' command cannot be executed in the 'other' Namespace on cluster 'dev'. Use 'commands list' to see allowed commands.
    
  2. Get all deployments (all NS restriction)

    @BotKube get deploy -A
    

    This should work only on one channel. On the second one, you should get:

    Sorry, the kubectl 'get' command cannot be executed for all Namespaces on cluster 'dev'. Use 'commands list' to see allowed commands.
    
  3. Get Ingress (resource restriction)

    @BotKube get ingress
    

    This shouldn't work on both channels:

    Sorry, the kubectl command is not authorized to work with 'ingress' resources in the 'default' Namespace on cluster 'dev'. Use 'commands list' to see allowed commands.
    
  4. Run unknown command (verb restriction)

    @BotKube drain
    

    This shouldn't work on both channels:

    Command not supported. Please run /botkubehelp to see supported commands.
    
  5. Run invalid command

    @BotKube get
    

    This shouldn't work on both channels:

    Cluster: dev
    You must specify the type of resource to get. Use "kubectl api-resources" for a complete list of supported resources.
    
    error: Required resource not specified.
    Use "kubectl explain <resource>" for a detailed description of that resource (e.g. kubectl explain pods).
    See 'kubectl get -h' for help and examples
    exit status 1
    
  6. Run wait command (check binding merging)

    @BotKube wait deployment -n botkube botkube --for condition=Available=True
    

    This should work only on one channel. On the second one, you should get:

    Command not supported. Please run /botkubehelp to see supported commands.
    

Recommendations

  • Create pod with latest image tag.

    kubectl run nginx --image nginx
    

    You should get the recommendation

  • Disable recommendation

    helm upgrade botkube --namespace botkube --reuse-values -f /tmp/values.yaml --set sources.k8s-events.kubernetes.recommendations.pod.noLatestImageTag=false --version 0.13.0-rc.1 botkube/botkube
    
  • Create pod with latest image tag.

    ubectl run nginx-other --image nginx
    

    You shouldn't get the recommendation

  • Enable recommendation

    helm upgrade botkube --namespace botkube --reuse-values -f /tmp/values.yaml --set sources.k8s-events.kubernetes.recommendations.pod.noLatestImageTag=true --version 0.13.0-rc.1 botkube/botkube
    
  • Create pod with latest image tag.

    ubectl run nginx-other-v2 --image nginx
    

    You should get the recommendation

K8s source

  • Check if namespace is properly included both with regex and exact name
  • Check if namespace is properly excluded both with regex and exact name
  1. Event ConfigMaps (only one channel)
  • Should work for (botk.*|default)
    kubectl create configmap my-config-botkube --from-literal=key1=config1 -n botkube
    
    kubectl create configmap my-config-def --from-literal=key1=config1 -n default
    
    kubectl create ns botkubik && kubectl create configmap my-config-botkubik --from-literal=key1=config1 -n botkubik
    
  • Shouldn't work for other that (botk.*|default):
    kubectl create ns foo && kubectl create configmap my-config-foo --from-literal=key1=config1 -n foo
    
    kubectl create ns xyz && kubectl create configmap my-config-xyz --from-literal=key1=config1 -n xyz
    
  1. Pods (only one channel)
  • Should work for all NS except (".*-system", "default"):
    kubectl run nginx --image nginx -n foo
    
    kubectl create ns baz && kubectl run nginx --image nginx -n baz
    
    kubectl create ns test && kubectl run nginx --image nginx -n test
    
  • Shouldn't work for (".*-system", "default"):
    kubectl create ns istio-system && kubectl run nginx --image nginx:1.23 -n istio-system
    
    kubectl create ns botkube-system && kubectl run nginx --image nginx:1.23 -n botkube-system
    
    kubectl create ns argo-system && kubectl run nginx --image nginx:1.23 -n argo-system
    
    kubectl run nginx --image nginx:1.23 -n default
    

mszostok avatar Aug 24 '22 09:08 mszostok

Is there a requirement for a 'Migrating to BotKube 0.13.0' guide?

Or is that what the upcoming Blog Post is designed to do? Also, found a related description in this issue.

ezodude avatar Aug 24 '22 15:08 ezodude

Added myself to test two integrations, will start them on Thursday 25th.

But if someone else gets there faster (because of Timezone start time differences) feel free to grab them.

ezodude avatar Aug 24 '22 16:08 ezodude