diff --git a/.gitignore b/.gitignore index d97a0a6..7591125 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,5 @@ dist/ plugins-index.yaml /.idea/ + +node_modules diff --git a/hack/assistant-setup/README.md b/hack/assistant-setup/README.md new file mode 100644 index 0000000..d0e4f40 --- /dev/null +++ b/hack/assistant-setup/README.md @@ -0,0 +1,51 @@ +# OpenAI Assistant setup + +The tool configures the OpenAI assistant for Botkube AI plugin. It uses documents from the `assets` directory for file search capabilities. + +## Toolchain + +This project uses [Volta](https://github.com/volta-cli/volta) to manage JS tools. Volta automatically downloads and installs the right Node.js version when you run any of the `node` or `npm` commands. + +It is recommended to install it before running the script, to ensure the right Node.js version is used. + +## Usage + +Navigate to the directory `hack/assistant-setup` and execute one of the following commands. + +### Install dependencies + +To install all dependencies, run: + +```sh +npm install +``` + +### Start app + +```sh +export OPENAI_API_KEY=... # your Open AI API key +export ASSISTANT_ENV=dev # dev or prod +npm run start +``` + +To use your own assistant, modify the `assistantID` variable in the `index.ts` file. + +## Development + +## Refetch content for file search + +> **NOTE:** The process uses [Jina.AI Reader API](https://github.com/jina-ai/reader) and usually takes 10-15 minutes. All files will be removed before the process starts. + +To scrap the content from the latest Botkube website and Botkube Docs, run the following command: + +```sh +npm run fetch-content +``` + +## Format code + +To format code, run: + +```sh +npm run format +``` diff --git a/hack/assistant-setup/content-fetcher/main.go b/hack/assistant-setup/content-fetcher/main.go new file mode 100644 index 0000000..6828288 --- /dev/null +++ b/hack/assistant-setup/content-fetcher/main.go @@ -0,0 +1,209 @@ +package main + +import ( + "encoding/xml" + "fmt" + "io" + "net/http" + "net/url" + "os" + "regexp" + "strings" + "time" + + "github.com/avast/retry-go/v4" + + "github.com/kubeshop/botkube/pkg/config" + "github.com/kubeshop/botkube/pkg/loggerx" + "github.com/kubeshop/botkube/pkg/multierror" + "github.com/sirupsen/logrus" +) + +const ( + marketingSitemapURL = "https://botkube.io/sitemap.xml" + docsSitemapURL = "https://docs.botkube.io/sitemap.xml" + processingAPIURL = "https://r.jina.ai" + contentDir = "content" + maxRetries = 5 + retryInterval = 1 * time.Second + httpCliTimeout = 1 * time.Minute +) + +var excludedDocsPagesRegex = regexp.MustCompile(`^https:\/\/docs\.botkube\.io\/(?:\d+\.\d+|next)\/.*`) + +func main() { + log := loggerx.New(config.Logger{ + Level: "info", + Formatter: "text", + }) + + fetcher := &contentFetcher{ + log: log, + httpCli: &http.Client{ + Timeout: httpCliTimeout, + }, + } + + log.Infof("Removing old %q directory...", contentDir) + err := os.RemoveAll(contentDir) + loggerx.ExitOnError(err, "while removing old directory") + + log.Info("Fetching Botkube sitemap...") + marketingPages, err := fetcher.getURLsToDownloadFromSitemap(marketingSitemapURL) + loggerx.ExitOnError(err, "while fetching Botkube sitemap") + + log.Info("Fetching Botkube docs sitemap...") + docsPages, err := fetcher.getURLsToDownloadFromSitemap(docsSitemapURL) + loggerx.ExitOnError(err, "while fetching Botkube docs sitemap") + + log.Info("Preparing list of pages to fetch...") + pagesToFetch := fetcher.preparePageList(docsPages, marketingPages) + log.Infof("Found %d pages to fetch", len(pagesToFetch)) + + log.Infof("Creating %q directory...", contentDir) + err = os.MkdirAll(contentDir, os.ModePerm) + loggerx.ExitOnError(err, "while creating directory") + + errs := multierror.New() + for i, page := range pagesToFetch { + filePath, err := fetcher.filePathForURL(page) + if err != nil { + errs = multierror.Append(errs, err) + continue + } + log.WithFields(logrus.Fields{ + "url": page, + "filePath": filePath, + }).Infof("Fetching and saving page %d of %d...", i+1, len(pagesToFetch)) + + err = retry.Do( + func() error { + return fetcher.fetchAndSavePage(page, filePath) + }, + retry.Attempts(maxRetries), + retry.OnRetry(func(n uint, err error) { + log.WithError(err).Errorf("while fetching and saving page %q. Retrying...", page) + }), + retry.Delay(retryInterval), + ) + + if err != nil { + errs = multierror.Append(errs, err) + } + } + + loggerx.ExitOnError(errs.ErrorOrNil(), "while fetching and saving docs pages") + + log.Infof("Saved %d docs pages", len(pagesToFetch)) +} + +type contentFetcher struct { + log logrus.FieldLogger + httpCli *http.Client +} + +type sitemapURLSet struct { + URLs []sitemapURL `xml:"url"` +} + +type sitemapURL struct { + Loc string `xml:"loc"` +} + +func (f *contentFetcher) getURLsToDownloadFromSitemap(sitemapURL string) ([]string, error) { + log := f.log.WithField("sitemapURL", sitemapURL) + // nolint:gosec + res, err := http.Get(sitemapURL) + if err != nil { + return nil, fmt.Errorf("while fetching sitemap %q: %w", sitemapURL, err) + } + defer res.Body.Close() + + if res.StatusCode != http.StatusOK { + return nil, fmt.Errorf("invalid status code when fetching Botkube sitemap: %d", res.StatusCode) + } + + log.Info("Decoding sitemap...") + var sitemap sitemapURLSet + err = xml.NewDecoder(res.Body).Decode(&sitemap) + if err != nil { + return nil, fmt.Errorf("while decoding sitemap %q: %w", sitemapURL, err) + } + + var urls []string + for _, part := range sitemap.URLs { + urls = append(urls, part.Loc) + } + + log.Infof("Found %d sitemap entries", len(urls)) + return urls, nil +} + +func (f *contentFetcher) fetchAndSavePage(inURL, filePath string) error { + pageURL := fmt.Sprintf("%s/%s", processingAPIURL, inURL) + + req, err := http.NewRequest(http.MethodGet, pageURL, nil) + if err != nil { + return fmt.Errorf("while creating request for page %q: %w", pageURL, err) + } + req.Header.Set("Content-Type", "text/event-stream") + + res, err := f.httpCli.Do(req) + if err != nil { + return fmt.Errorf("while fetching page %q: %w", pageURL, err) + } + defer res.Body.Close() + + if res.StatusCode != http.StatusOK { + return fmt.Errorf("invalid status code when fetching page %q: %d", pageURL, res.StatusCode) + } + + // nolint:gosec + file, err := os.Create(filePath) + if err != nil { + return fmt.Errorf("while creating file %q: %w", filePath, err) + } + defer file.Close() + + _, err = io.Copy(file, res.Body) + if err != nil { + return fmt.Errorf("while writing to file %q: %w", filePath, err) + } + + return nil +} + +func (f *contentFetcher) preparePageList(docsPages, marketingPages []string) []string { + var out []string + for _, page := range docsPages { + // remove all docs for previous and upcoming versions + if excludedDocsPagesRegex.MatchString(page) { + continue + } + + out = append(out, strings.TrimSpace(page)) + } + for _, page := range marketingPages { + out = append(out, strings.TrimSpace(page)) + } + + return out +} + +func (f *contentFetcher) filePathForURL(inURL string) (string, error) { + parsedInURL, err := url.Parse(inURL) + if err != nil { + return "", fmt.Errorf("while parsing url %q: %w", inURL, err) + } + + prefix := parsedInURL.Host + urlPath := strings.Trim(parsedInURL.Path, "/") + urlPath = strings.Replace(urlPath, "/", "__", -1) + + fileName := prefix + if urlPath != "" { + fileName = fmt.Sprintf("%s__%s", prefix, urlPath) + } + + return fmt.Sprintf("%s/%s.md", contentDir, fileName), nil +} diff --git a/hack/assistant-setup/content-fetcher/main_test.go b/hack/assistant-setup/content-fetcher/main_test.go new file mode 100644 index 0000000..2efc70c --- /dev/null +++ b/hack/assistant-setup/content-fetcher/main_test.go @@ -0,0 +1,919 @@ +package main + +import ( + "path/filepath" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/kubeshop/botkube/pkg/loggerx" + "github.com/stretchr/testify/require" + "gopkg.in/yaml.v3" + "gotest.tools/v3/golden" +) + +// TestFetcher_preparePageList tests that we can prepare list of pages. +// +// To update golden files run: +// go test ./hack/assistant-setup/docs-fetcher/... -run=TestFetcher_preparePageList -update + +func TestFetcher_preparePageList(t *testing.T) { + // given + fetcher := contentFetcher{ + log: loggerx.NewNoop(), + } + + // when + actual := fetcher.preparePageList(fixDocsPages(), fixMarketingPages()) + actualBytes, err := yaml.Marshal(actual) + require.NoError(t, err) + + // then + golden.Assert(t, string(actualBytes), filepath.Join(t.Name(), "prepare-page-list.golden.yaml")) +} + +func TestFetcher_filePathForURL(t *testing.T) { + // given + prefix := "content/" + testCases := []struct { + URL string + ExpectedFileName string + }{ + { + URL: "https://docs.botkube.io/1.4/cli/commands/botkube_version", + ExpectedFileName: "docs.botkube.io__1.4__cli__commands__botkube_version.md", + }, + { + URL: "https://docs.botkube.io/license/", + ExpectedFileName: "docs.botkube.io__license.md", + }, + { + URL: "https://docs.botkube.io/architecture/cloud-teams", + ExpectedFileName: "docs.botkube.io__architecture__cloud-teams.md", + }, + { + URL: "https://docs.botkube.io/", + ExpectedFileName: "docs.botkube.io.md", + }, + { + URL: "https://botkube.io/", + ExpectedFileName: "botkube.io.md", + }, + { + URL: "https://botkube.io/blog/command-line-magic-simplify-your-life-with-custom-kubernetes-kubectrl-aliases-on-botkube", + ExpectedFileName: "botkube.io__blog__command-line-magic-simplify-your-life-with-custom-kubernetes-kubectrl-aliases-on-botkube.md", + }, + } + + for _, tc := range testCases { + t.Run(tc.URL, func(t *testing.T) { + fetcher := contentFetcher{ + log: loggerx.NewNoop(), + } + + // when + actual, err := fetcher.filePathForURL(tc.URL) + + // then + require.NoError(t, err) + assert.Equal(t, prefix+tc.ExpectedFileName, actual) + }) + } +} + +func fixDocsPages() []string { + return []string{ + "https://docs.botkube.io/license/", + "https://docs.botkube.io/search", + "https://docs.botkube.io/support/", + "https://docs.botkube.io/telemetry/", + "https://docs.botkube.io/versions", + "https://docs.botkube.io/1.4/", + "https://docs.botkube.io/1.4/architecture/", + "https://docs.botkube.io/1.4/cli/commands/botkube", + "https://docs.botkube.io/1.4/cli/commands/botkube_config", + "https://docs.botkube.io/1.4/cli/commands/botkube_config_get", + "https://docs.botkube.io/1.4/cli/commands/botkube_install", + "https://docs.botkube.io/1.4/cli/commands/botkube_login", + "https://docs.botkube.io/1.4/cli/commands/botkube_migrate", + "https://docs.botkube.io/1.4/cli/commands/botkube_uninstall", + "https://docs.botkube.io/1.4/cli/commands/botkube_version", + "https://docs.botkube.io/1.4/cli/getting-started", + "https://docs.botkube.io/1.4/cli/migrating-installation-to-botkube-cloud", + "https://docs.botkube.io/1.4/configuration/", + "https://docs.botkube.io/1.4/configuration/action", + "https://docs.botkube.io/1.4/configuration/alias", + "https://docs.botkube.io/1.4/configuration/communication/", + "https://docs.botkube.io/1.4/configuration/communication/vault-csi", + "https://docs.botkube.io/1.4/configuration/executor/", + "https://docs.botkube.io/1.4/configuration/executor/doctor", + "https://docs.botkube.io/1.4/configuration/executor/exec", + "https://docs.botkube.io/1.4/configuration/executor/flux", + "https://docs.botkube.io/1.4/configuration/executor/helm", + "https://docs.botkube.io/1.4/configuration/executor/kubectl", + "https://docs.botkube.io/1.4/configuration/general", + "https://docs.botkube.io/1.4/configuration/helm-chart-parameters", + "https://docs.botkube.io/1.4/configuration/rbac", + "https://docs.botkube.io/1.4/configuration/source/", + "https://docs.botkube.io/1.4/configuration/source/argocd", + "https://docs.botkube.io/1.4/configuration/source/github-events", + "https://docs.botkube.io/1.4/configuration/source/keptn", + "https://docs.botkube.io/1.4/configuration/source/kubernetes", + "https://docs.botkube.io/1.4/configuration/source/prometheus", + "https://docs.botkube.io/1.4/installation/discord/", + "https://docs.botkube.io/1.4/installation/discord/cloud", + "https://docs.botkube.io/1.4/installation/discord/self-hosted", + "https://docs.botkube.io/1.4/installation/elasticsearch/", + "https://docs.botkube.io/1.4/installation/elasticsearch/cloud", + "https://docs.botkube.io/1.4/installation/elasticsearch/self-hosted", + "https://docs.botkube.io/1.4/installation/mattermost/", + "https://docs.botkube.io/1.4/installation/mattermost/cloud", + "https://docs.botkube.io/1.4/installation/mattermost/self-hosted", + "https://docs.botkube.io/1.4/installation/slack/", + "https://docs.botkube.io/1.4/installation/slack/cloud-slack", + "https://docs.botkube.io/1.4/installation/slack/socket-slack/", + "https://docs.botkube.io/1.4/installation/slack/socket-slack/self-hosted", + "https://docs.botkube.io/1.4/installation/slack/socket-slack/socket-slack-cloud", + "https://docs.botkube.io/1.4/installation/socketslack", + "https://docs.botkube.io/1.4/installation/teams/", + "https://docs.botkube.io/1.4/installation/webhook/", + "https://docs.botkube.io/1.4/installation/webhook/cloud", + "https://docs.botkube.io/1.4/installation/webhook/self-hosted", + "https://docs.botkube.io/1.4/operation/common-problems", + "https://docs.botkube.io/1.4/operation/diagnostics", + "https://docs.botkube.io/1.4/plugin/", + "https://docs.botkube.io/1.4/plugin/custom-executor", + "https://docs.botkube.io/1.4/plugin/custom-source", + "https://docs.botkube.io/1.4/plugin/debugging", + "https://docs.botkube.io/1.4/plugin/dependencies", + "https://docs.botkube.io/1.4/plugin/interactive-messages", + "https://docs.botkube.io/1.4/plugin/local-testing", + "https://docs.botkube.io/1.4/plugin/quick-start", + "https://docs.botkube.io/1.4/plugin/repo", + "https://docs.botkube.io/1.4/plugin/troubleshooting.md", + "https://docs.botkube.io/1.4/plugin/using-kubeconfig", + "https://docs.botkube.io/1.4/usage/", + "https://docs.botkube.io/1.4/usage/automated-actions", + "https://docs.botkube.io/1.4/usage/event-notifications", + "https://docs.botkube.io/1.4/usage/executor/", + "https://docs.botkube.io/1.4/usage/executor/doctor", + "https://docs.botkube.io/1.4/usage/executor/exec", + "https://docs.botkube.io/1.4/usage/executor/flux", + "https://docs.botkube.io/1.4/usage/executor/helm", + "https://docs.botkube.io/1.4/usage/executor/kubectl", + "https://docs.botkube.io/1.4/usage/interactive-output-filtering", + "https://docs.botkube.io/1.4/usage/source/", + "https://docs.botkube.io/1.4/usage/source/argocd", + "https://docs.botkube.io/1.4/usage/source/keptn", + "https://docs.botkube.io/1.4/usage/source/kubernetes", + "https://docs.botkube.io/1.4/usage/source/prometheus", + "https://docs.botkube.io/1.5/", + "https://docs.botkube.io/1.5/architecture/", + "https://docs.botkube.io/1.5/cli/commands/botkube", + "https://docs.botkube.io/1.5/cli/commands/botkube_config", + "https://docs.botkube.io/1.5/cli/commands/botkube_config_get", + "https://docs.botkube.io/1.5/cli/commands/botkube_install", + "https://docs.botkube.io/1.5/cli/commands/botkube_login", + "https://docs.botkube.io/1.5/cli/commands/botkube_migrate", + "https://docs.botkube.io/1.5/cli/commands/botkube_telemetry", + "https://docs.botkube.io/1.5/cli/commands/botkube_telemetry_disable", + "https://docs.botkube.io/1.5/cli/commands/botkube_telemetry_enable", + "https://docs.botkube.io/1.5/cli/commands/botkube_uninstall", + "https://docs.botkube.io/1.5/cli/commands/botkube_version", + "https://docs.botkube.io/1.5/cli/getting-started", + "https://docs.botkube.io/1.5/cli/migrating-installation-to-botkube-cloud", + "https://docs.botkube.io/1.5/configuration/", + "https://docs.botkube.io/1.5/configuration/action", + "https://docs.botkube.io/1.5/configuration/alias", + "https://docs.botkube.io/1.5/configuration/communication/", + "https://docs.botkube.io/1.5/configuration/communication/vault-csi", + "https://docs.botkube.io/1.5/configuration/executor/", + "https://docs.botkube.io/1.5/configuration/executor/doctor", + "https://docs.botkube.io/1.5/configuration/executor/exec", + "https://docs.botkube.io/1.5/configuration/executor/flux", + "https://docs.botkube.io/1.5/configuration/executor/helm", + "https://docs.botkube.io/1.5/configuration/executor/kubectl", + "https://docs.botkube.io/1.5/configuration/general", + "https://docs.botkube.io/1.5/configuration/helm-chart-parameters", + "https://docs.botkube.io/1.5/configuration/rbac", + "https://docs.botkube.io/1.5/configuration/source/", + "https://docs.botkube.io/1.5/configuration/source/argocd", + "https://docs.botkube.io/1.5/configuration/source/github-events", + "https://docs.botkube.io/1.5/configuration/source/keptn", + "https://docs.botkube.io/1.5/configuration/source/kubernetes", + "https://docs.botkube.io/1.5/configuration/source/prometheus", + "https://docs.botkube.io/1.5/installation/discord/", + "https://docs.botkube.io/1.5/installation/discord/cloud", + "https://docs.botkube.io/1.5/installation/discord/self-hosted", + "https://docs.botkube.io/1.5/installation/elasticsearch/", + "https://docs.botkube.io/1.5/installation/elasticsearch/cloud", + "https://docs.botkube.io/1.5/installation/elasticsearch/self-hosted", + "https://docs.botkube.io/1.5/installation/mattermost/", + "https://docs.botkube.io/1.5/installation/mattermost/cloud", + "https://docs.botkube.io/1.5/installation/mattermost/self-hosted", + "https://docs.botkube.io/1.5/installation/slack/", + "https://docs.botkube.io/1.5/installation/slack/cloud-slack", + "https://docs.botkube.io/1.5/installation/slack/socket-slack", + "https://docs.botkube.io/1.5/installation/socketslack", + "https://docs.botkube.io/1.5/installation/teams/", + "https://docs.botkube.io/1.5/installation/webhook/", + "https://docs.botkube.io/1.5/installation/webhook/cloud", + "https://docs.botkube.io/1.5/installation/webhook/self-hosted", + "https://docs.botkube.io/1.5/operation/common-problems", + "https://docs.botkube.io/1.5/operation/diagnostics", + "https://docs.botkube.io/1.5/plugin/", + "https://docs.botkube.io/1.5/plugin/custom-executor", + "https://docs.botkube.io/1.5/plugin/custom-source", + "https://docs.botkube.io/1.5/plugin/debugging", + "https://docs.botkube.io/1.5/plugin/dependencies", + "https://docs.botkube.io/1.5/plugin/interactive-messages", + "https://docs.botkube.io/1.5/plugin/local-testing", + "https://docs.botkube.io/1.5/plugin/quick-start", + "https://docs.botkube.io/1.5/plugin/repo", + "https://docs.botkube.io/1.5/plugin/troubleshooting.md", + "https://docs.botkube.io/1.5/plugin/using-kubeconfig", + "https://docs.botkube.io/1.5/usage/", + "https://docs.botkube.io/1.5/usage/automated-actions", + "https://docs.botkube.io/1.5/usage/event-notifications", + "https://docs.botkube.io/1.5/usage/executor/", + "https://docs.botkube.io/1.5/usage/executor/doctor", + "https://docs.botkube.io/1.5/usage/executor/exec", + "https://docs.botkube.io/1.5/usage/executor/flux", + "https://docs.botkube.io/1.5/usage/executor/helm", + "https://docs.botkube.io/1.5/usage/executor/kubectl", + "https://docs.botkube.io/1.5/usage/interactive-output-filtering", + "https://docs.botkube.io/1.5/usage/source/", + "https://docs.botkube.io/1.5/usage/source/argocd", + "https://docs.botkube.io/1.5/usage/source/keptn", + "https://docs.botkube.io/1.5/usage/source/kubernetes", + "https://docs.botkube.io/1.5/usage/source/prometheus", + "https://docs.botkube.io/1.6/", + "https://docs.botkube.io/1.6/architecture/", + "https://docs.botkube.io/1.6/cli/commands/botkube", + "https://docs.botkube.io/1.6/cli/commands/botkube_config", + "https://docs.botkube.io/1.6/cli/commands/botkube_config_get", + "https://docs.botkube.io/1.6/cli/commands/botkube_install", + "https://docs.botkube.io/1.6/cli/commands/botkube_login", + "https://docs.botkube.io/1.6/cli/commands/botkube_migrate", + "https://docs.botkube.io/1.6/cli/commands/botkube_telemetry", + "https://docs.botkube.io/1.6/cli/commands/botkube_telemetry_disable", + "https://docs.botkube.io/1.6/cli/commands/botkube_telemetry_enable", + "https://docs.botkube.io/1.6/cli/commands/botkube_uninstall", + "https://docs.botkube.io/1.6/cli/commands/botkube_version", + "https://docs.botkube.io/1.6/cli/getting-started", + "https://docs.botkube.io/1.6/cli/migrating-installation-to-botkube-cloud", + "https://docs.botkube.io/1.6/configuration/", + "https://docs.botkube.io/1.6/configuration/action", + "https://docs.botkube.io/1.6/configuration/alias", + "https://docs.botkube.io/1.6/configuration/communication/", + "https://docs.botkube.io/1.6/configuration/communication/vault-csi", + "https://docs.botkube.io/1.6/configuration/executor/", + "https://docs.botkube.io/1.6/configuration/executor/doctor", + "https://docs.botkube.io/1.6/configuration/executor/exec", + "https://docs.botkube.io/1.6/configuration/executor/flux", + "https://docs.botkube.io/1.6/configuration/executor/helm", + "https://docs.botkube.io/1.6/configuration/executor/kubectl", + "https://docs.botkube.io/1.6/configuration/general", + "https://docs.botkube.io/1.6/configuration/helm-chart-parameters", + "https://docs.botkube.io/1.6/configuration/rbac", + "https://docs.botkube.io/1.6/configuration/source/", + "https://docs.botkube.io/1.6/configuration/source/argocd", + "https://docs.botkube.io/1.6/configuration/source/github-events", + "https://docs.botkube.io/1.6/configuration/source/keptn", + "https://docs.botkube.io/1.6/configuration/source/kubernetes", + "https://docs.botkube.io/1.6/configuration/source/prometheus", + "https://docs.botkube.io/1.6/installation/discord/", + "https://docs.botkube.io/1.6/installation/discord/cloud", + "https://docs.botkube.io/1.6/installation/discord/self-hosted", + "https://docs.botkube.io/1.6/installation/elasticsearch/", + "https://docs.botkube.io/1.6/installation/elasticsearch/cloud", + "https://docs.botkube.io/1.6/installation/elasticsearch/self-hosted", + "https://docs.botkube.io/1.6/installation/mattermost/", + "https://docs.botkube.io/1.6/installation/mattermost/cloud", + "https://docs.botkube.io/1.6/installation/mattermost/self-hosted", + "https://docs.botkube.io/1.6/installation/slack/", + "https://docs.botkube.io/1.6/installation/slack/cloud-slack", + "https://docs.botkube.io/1.6/installation/slack/socket-slack", + "https://docs.botkube.io/1.6/installation/socketslack", + "https://docs.botkube.io/1.6/installation/teams/", + "https://docs.botkube.io/1.6/installation/webhook/", + "https://docs.botkube.io/1.6/installation/webhook/cloud", + "https://docs.botkube.io/1.6/installation/webhook/self-hosted", + "https://docs.botkube.io/1.6/operation/common-problems", + "https://docs.botkube.io/1.6/operation/diagnostics", + "https://docs.botkube.io/1.6/plugin/", + "https://docs.botkube.io/1.6/plugin/custom-executor", + "https://docs.botkube.io/1.6/plugin/custom-source", + "https://docs.botkube.io/1.6/plugin/debugging", + "https://docs.botkube.io/1.6/plugin/dependencies", + "https://docs.botkube.io/1.6/plugin/interactive-messages", + "https://docs.botkube.io/1.6/plugin/local-testing", + "https://docs.botkube.io/1.6/plugin/quick-start", + "https://docs.botkube.io/1.6/plugin/repo", + "https://docs.botkube.io/1.6/plugin/troubleshooting.md", + "https://docs.botkube.io/1.6/plugin/using-kubeconfig", + "https://docs.botkube.io/1.6/usage/", + "https://docs.botkube.io/1.6/usage/automated-actions", + "https://docs.botkube.io/1.6/usage/event-notifications", + "https://docs.botkube.io/1.6/usage/executor/", + "https://docs.botkube.io/1.6/usage/executor/doctor", + "https://docs.botkube.io/1.6/usage/executor/exec", + "https://docs.botkube.io/1.6/usage/executor/flux", + "https://docs.botkube.io/1.6/usage/executor/helm", + "https://docs.botkube.io/1.6/usage/executor/kubectl", + "https://docs.botkube.io/1.6/usage/interactive-output-filtering", + "https://docs.botkube.io/1.6/usage/source/", + "https://docs.botkube.io/1.6/usage/source/argocd", + "https://docs.botkube.io/1.6/usage/source/keptn", + "https://docs.botkube.io/1.6/usage/source/kubernetes", + "https://docs.botkube.io/1.6/usage/source/prometheus", + "https://docs.botkube.io/1.7/", + "https://docs.botkube.io/1.7/architecture/", + "https://docs.botkube.io/1.7/cli/commands/botkube", + "https://docs.botkube.io/1.7/cli/commands/botkube_config", + "https://docs.botkube.io/1.7/cli/commands/botkube_config_get", + "https://docs.botkube.io/1.7/cli/commands/botkube_install", + "https://docs.botkube.io/1.7/cli/commands/botkube_login", + "https://docs.botkube.io/1.7/cli/commands/botkube_migrate", + "https://docs.botkube.io/1.7/cli/commands/botkube_telemetry", + "https://docs.botkube.io/1.7/cli/commands/botkube_telemetry_disable", + "https://docs.botkube.io/1.7/cli/commands/botkube_telemetry_enable", + "https://docs.botkube.io/1.7/cli/commands/botkube_uninstall", + "https://docs.botkube.io/1.7/cli/commands/botkube_version", + "https://docs.botkube.io/1.7/cli/getting-started", + "https://docs.botkube.io/1.7/cli/migrating-installation-to-botkube-cloud", + "https://docs.botkube.io/1.7/configuration/", + "https://docs.botkube.io/1.7/configuration/action", + "https://docs.botkube.io/1.7/configuration/alias", + "https://docs.botkube.io/1.7/configuration/communication/", + "https://docs.botkube.io/1.7/configuration/communication/vault-csi", + "https://docs.botkube.io/1.7/configuration/executor/", + "https://docs.botkube.io/1.7/configuration/executor/doctor", + "https://docs.botkube.io/1.7/configuration/executor/exec", + "https://docs.botkube.io/1.7/configuration/executor/flux", + "https://docs.botkube.io/1.7/configuration/executor/helm", + "https://docs.botkube.io/1.7/configuration/executor/kubectl", + "https://docs.botkube.io/1.7/configuration/general", + "https://docs.botkube.io/1.7/configuration/helm-chart-parameters", + "https://docs.botkube.io/1.7/configuration/rbac", + "https://docs.botkube.io/1.7/configuration/source/", + "https://docs.botkube.io/1.7/configuration/source/argocd", + "https://docs.botkube.io/1.7/configuration/source/github-events", + "https://docs.botkube.io/1.7/configuration/source/keptn", + "https://docs.botkube.io/1.7/configuration/source/kubernetes", + "https://docs.botkube.io/1.7/configuration/source/prometheus", + "https://docs.botkube.io/1.7/examples-and-tutorials/", + "https://docs.botkube.io/1.7/examples-and-tutorials/getstarted/", + "https://docs.botkube.io/1.7/examples-and-tutorials/integrations/", + "https://docs.botkube.io/1.7/examples-and-tutorials/tutorials/", + "https://docs.botkube.io/1.7/examples-and-tutorials/usecases/", + "https://docs.botkube.io/1.7/examples-and-tutorials/videos/", + "https://docs.botkube.io/1.7/installation/discord/", + "https://docs.botkube.io/1.7/installation/discord/cloud", + "https://docs.botkube.io/1.7/installation/discord/self-hosted", + "https://docs.botkube.io/1.7/installation/elasticsearch/", + "https://docs.botkube.io/1.7/installation/elasticsearch/cloud", + "https://docs.botkube.io/1.7/installation/elasticsearch/self-hosted", + "https://docs.botkube.io/1.7/installation/mattermost/", + "https://docs.botkube.io/1.7/installation/mattermost/cloud", + "https://docs.botkube.io/1.7/installation/mattermost/self-hosted", + "https://docs.botkube.io/1.7/installation/slack/", + "https://docs.botkube.io/1.7/installation/slack/cloud-slack", + "https://docs.botkube.io/1.7/installation/slack/socket-slack", + "https://docs.botkube.io/1.7/installation/socketslack", + "https://docs.botkube.io/1.7/installation/teams/", + "https://docs.botkube.io/1.7/installation/webhook/", + "https://docs.botkube.io/1.7/installation/webhook/cloud", + "https://docs.botkube.io/1.7/installation/webhook/self-hosted", + "https://docs.botkube.io/1.7/operation/common-problems", + "https://docs.botkube.io/1.7/operation/diagnostics", + "https://docs.botkube.io/1.7/plugin/", + "https://docs.botkube.io/1.7/plugin/custom-executor", + "https://docs.botkube.io/1.7/plugin/custom-source", + "https://docs.botkube.io/1.7/plugin/debugging", + "https://docs.botkube.io/1.7/plugin/dependencies", + "https://docs.botkube.io/1.7/plugin/interactive-messages", + "https://docs.botkube.io/1.7/plugin/local-testing", + "https://docs.botkube.io/1.7/plugin/quick-start", + "https://docs.botkube.io/1.7/plugin/repo", + "https://docs.botkube.io/1.7/plugin/troubleshooting.md", + "https://docs.botkube.io/1.7/plugin/using-kubeconfig", + "https://docs.botkube.io/1.7/usage/", + "https://docs.botkube.io/1.7/usage/automated-actions", + "https://docs.botkube.io/1.7/usage/event-notifications", + "https://docs.botkube.io/1.7/usage/executor/", + "https://docs.botkube.io/1.7/usage/executor/doctor", + "https://docs.botkube.io/1.7/usage/executor/exec", + "https://docs.botkube.io/1.7/usage/executor/flux", + "https://docs.botkube.io/1.7/usage/executor/helm", + "https://docs.botkube.io/1.7/usage/executor/kubectl", + "https://docs.botkube.io/1.7/usage/interactive-output-filtering", + "https://docs.botkube.io/1.7/usage/source/", + "https://docs.botkube.io/1.7/usage/source/argocd", + "https://docs.botkube.io/1.7/usage/source/keptn", + "https://docs.botkube.io/1.7/usage/source/kubernetes", + "https://docs.botkube.io/1.7/usage/source/prometheus", + "https://docs.botkube.io/1.8/", + "https://docs.botkube.io/1.8/architecture/", + "https://docs.botkube.io/1.8/cli/commands/botkube", + "https://docs.botkube.io/1.8/cli/commands/botkube_config", + "https://docs.botkube.io/1.8/cli/commands/botkube_config_get", + "https://docs.botkube.io/1.8/cli/commands/botkube_install", + "https://docs.botkube.io/1.8/cli/commands/botkube_login", + "https://docs.botkube.io/1.8/cli/commands/botkube_migrate", + "https://docs.botkube.io/1.8/cli/commands/botkube_telemetry", + "https://docs.botkube.io/1.8/cli/commands/botkube_telemetry_disable", + "https://docs.botkube.io/1.8/cli/commands/botkube_telemetry_enable", + "https://docs.botkube.io/1.8/cli/commands/botkube_uninstall", + "https://docs.botkube.io/1.8/cli/commands/botkube_version", + "https://docs.botkube.io/1.8/cli/getting-started", + "https://docs.botkube.io/1.8/cli/migrating-installation-to-botkube-cloud", + "https://docs.botkube.io/1.8/configuration/", + "https://docs.botkube.io/1.8/configuration/action", + "https://docs.botkube.io/1.8/configuration/alias", + "https://docs.botkube.io/1.8/configuration/communication/", + "https://docs.botkube.io/1.8/configuration/communication/vault-csi", + "https://docs.botkube.io/1.8/configuration/executor/", + "https://docs.botkube.io/1.8/configuration/executor/doctor", + "https://docs.botkube.io/1.8/configuration/executor/exec", + "https://docs.botkube.io/1.8/configuration/executor/flux", + "https://docs.botkube.io/1.8/configuration/executor/helm", + "https://docs.botkube.io/1.8/configuration/executor/kubectl", + "https://docs.botkube.io/1.8/configuration/general", + "https://docs.botkube.io/1.8/configuration/helm-chart-parameters", + "https://docs.botkube.io/1.8/configuration/rbac", + "https://docs.botkube.io/1.8/configuration/source/", + "https://docs.botkube.io/1.8/configuration/source/argocd", + "https://docs.botkube.io/1.8/configuration/source/github-events", + "https://docs.botkube.io/1.8/configuration/source/keptn", + "https://docs.botkube.io/1.8/configuration/source/kubernetes", + "https://docs.botkube.io/1.8/configuration/source/prometheus", + "https://docs.botkube.io/1.8/examples-and-tutorials/", + "https://docs.botkube.io/1.8/examples-and-tutorials/getstarted/", + "https://docs.botkube.io/1.8/examples-and-tutorials/integrations/", + "https://docs.botkube.io/1.8/examples-and-tutorials/tutorials/", + "https://docs.botkube.io/1.8/examples-and-tutorials/usecases/", + "https://docs.botkube.io/1.8/examples-and-tutorials/videos/", + "https://docs.botkube.io/1.8/installation/discord/", + "https://docs.botkube.io/1.8/installation/discord/cloud", + "https://docs.botkube.io/1.8/installation/discord/self-hosted", + "https://docs.botkube.io/1.8/installation/elasticsearch/", + "https://docs.botkube.io/1.8/installation/elasticsearch/cloud", + "https://docs.botkube.io/1.8/installation/elasticsearch/self-hosted", + "https://docs.botkube.io/1.8/installation/mattermost/", + "https://docs.botkube.io/1.8/installation/mattermost/cloud", + "https://docs.botkube.io/1.8/installation/mattermost/self-hosted", + "https://docs.botkube.io/1.8/installation/slack/", + "https://docs.botkube.io/1.8/installation/slack/cloud-slack", + "https://docs.botkube.io/1.8/installation/slack/socket-slack", + "https://docs.botkube.io/1.8/installation/socketslack", + "https://docs.botkube.io/1.8/installation/teams/", + "https://docs.botkube.io/1.8/installation/webhook/", + "https://docs.botkube.io/1.8/installation/webhook/cloud", + "https://docs.botkube.io/1.8/installation/webhook/self-hosted", + "https://docs.botkube.io/1.8/operation/common-problems", + "https://docs.botkube.io/1.8/operation/diagnostics", + "https://docs.botkube.io/1.8/plugin/", + "https://docs.botkube.io/1.8/plugin/custom-executor", + "https://docs.botkube.io/1.8/plugin/custom-source", + "https://docs.botkube.io/1.8/plugin/debugging", + "https://docs.botkube.io/1.8/plugin/dependencies", + "https://docs.botkube.io/1.8/plugin/interactive-messages", + "https://docs.botkube.io/1.8/plugin/local-testing", + "https://docs.botkube.io/1.8/plugin/quick-start", + "https://docs.botkube.io/1.8/plugin/repo", + "https://docs.botkube.io/1.8/plugin/troubleshooting.md", + "https://docs.botkube.io/1.8/plugin/using-kubeconfig", + "https://docs.botkube.io/1.8/usage/", + "https://docs.botkube.io/1.8/usage/automated-actions", + "https://docs.botkube.io/1.8/usage/event-notifications", + "https://docs.botkube.io/1.8/usage/executor/", + "https://docs.botkube.io/1.8/usage/executor/doctor", + "https://docs.botkube.io/1.8/usage/executor/exec", + "https://docs.botkube.io/1.8/usage/executor/flux", + "https://docs.botkube.io/1.8/usage/executor/helm", + "https://docs.botkube.io/1.8/usage/executor/kubectl", + "https://docs.botkube.io/1.8/usage/interactive-output-filtering", + "https://docs.botkube.io/1.8/usage/source/", + "https://docs.botkube.io/1.8/usage/source/argocd", + "https://docs.botkube.io/1.8/usage/source/keptn", + "https://docs.botkube.io/1.8/usage/source/kubernetes", + "https://docs.botkube.io/1.8/usage/source/prometheus", + "https://docs.botkube.io/1.9/", + "https://docs.botkube.io/1.9/architecture/", + "https://docs.botkube.io/1.9/architecture/cloud-teams", + "https://docs.botkube.io/1.9/cli/commands/botkube", + "https://docs.botkube.io/1.9/cli/commands/botkube_config", + "https://docs.botkube.io/1.9/cli/commands/botkube_config_get", + "https://docs.botkube.io/1.9/cli/commands/botkube_install", + "https://docs.botkube.io/1.9/cli/commands/botkube_login", + "https://docs.botkube.io/1.9/cli/commands/botkube_migrate", + "https://docs.botkube.io/1.9/cli/commands/botkube_telemetry", + "https://docs.botkube.io/1.9/cli/commands/botkube_telemetry_disable", + "https://docs.botkube.io/1.9/cli/commands/botkube_telemetry_enable", + "https://docs.botkube.io/1.9/cli/commands/botkube_uninstall", + "https://docs.botkube.io/1.9/cli/commands/botkube_version", + "https://docs.botkube.io/1.9/cli/getting-started", + "https://docs.botkube.io/1.9/cli/migrating-installation-to-botkube-cloud", + "https://docs.botkube.io/1.9/configuration/", + "https://docs.botkube.io/1.9/configuration/action", + "https://docs.botkube.io/1.9/configuration/alias", + "https://docs.botkube.io/1.9/configuration/communication/", + "https://docs.botkube.io/1.9/configuration/communication/vault-csi", + "https://docs.botkube.io/1.9/configuration/executor/", + "https://docs.botkube.io/1.9/configuration/executor/doctor", + "https://docs.botkube.io/1.9/configuration/executor/exec", + "https://docs.botkube.io/1.9/configuration/executor/flux", + "https://docs.botkube.io/1.9/configuration/executor/helm", + "https://docs.botkube.io/1.9/configuration/executor/kubectl", + "https://docs.botkube.io/1.9/configuration/general", + "https://docs.botkube.io/1.9/configuration/helm-chart-parameters", + "https://docs.botkube.io/1.9/configuration/rbac", + "https://docs.botkube.io/1.9/configuration/source/", + "https://docs.botkube.io/1.9/configuration/source/argocd", + "https://docs.botkube.io/1.9/configuration/source/github-events", + "https://docs.botkube.io/1.9/configuration/source/keptn", + "https://docs.botkube.io/1.9/configuration/source/kubernetes", + "https://docs.botkube.io/1.9/configuration/source/prometheus", + "https://docs.botkube.io/1.9/examples-and-tutorials/", + "https://docs.botkube.io/1.9/examples-and-tutorials/getstarted/", + "https://docs.botkube.io/1.9/examples-and-tutorials/integrations/", + "https://docs.botkube.io/1.9/examples-and-tutorials/tutorials/", + "https://docs.botkube.io/1.9/examples-and-tutorials/usecases/", + "https://docs.botkube.io/1.9/examples-and-tutorials/videos/", + "https://docs.botkube.io/1.9/installation/discord/", + "https://docs.botkube.io/1.9/installation/discord/cloud", + "https://docs.botkube.io/1.9/installation/discord/self-hosted", + "https://docs.botkube.io/1.9/installation/elasticsearch/", + "https://docs.botkube.io/1.9/installation/elasticsearch/cloud", + "https://docs.botkube.io/1.9/installation/elasticsearch/self-hosted", + "https://docs.botkube.io/1.9/installation/mattermost/", + "https://docs.botkube.io/1.9/installation/mattermost/cloud", + "https://docs.botkube.io/1.9/installation/mattermost/self-hosted", + "https://docs.botkube.io/1.9/installation/slack/", + "https://docs.botkube.io/1.9/installation/slack/cloud-slack", + "https://docs.botkube.io/1.9/installation/slack/socket-slack", + "https://docs.botkube.io/1.9/installation/socketslack", + "https://docs.botkube.io/1.9/installation/teams/", + "https://docs.botkube.io/1.9/installation/webhook/", + "https://docs.botkube.io/1.9/installation/webhook/cloud", + "https://docs.botkube.io/1.9/installation/webhook/self-hosted", + "https://docs.botkube.io/1.9/operation/common-problems", + "https://docs.botkube.io/1.9/operation/diagnostics", + "https://docs.botkube.io/1.9/plugin/", + "https://docs.botkube.io/1.9/plugin/custom-executor", + "https://docs.botkube.io/1.9/plugin/custom-source", + "https://docs.botkube.io/1.9/plugin/debugging", + "https://docs.botkube.io/1.9/plugin/dependencies", + "https://docs.botkube.io/1.9/plugin/interactive-messages", + "https://docs.botkube.io/1.9/plugin/local-testing", + "https://docs.botkube.io/1.9/plugin/quick-start", + "https://docs.botkube.io/1.9/plugin/repo", + "https://docs.botkube.io/1.9/plugin/troubleshooting.md", + "https://docs.botkube.io/1.9/plugin/using-kubeconfig", + "https://docs.botkube.io/1.9/usage/", + "https://docs.botkube.io/1.9/usage/automated-actions", + "https://docs.botkube.io/1.9/usage/event-notifications", + "https://docs.botkube.io/1.9/usage/executor/", + "https://docs.botkube.io/1.9/usage/executor/doctor", + "https://docs.botkube.io/1.9/usage/executor/exec", + "https://docs.botkube.io/1.9/usage/executor/flux", + "https://docs.botkube.io/1.9/usage/executor/helm", + "https://docs.botkube.io/1.9/usage/executor/kubectl", + "https://docs.botkube.io/1.9/usage/interactive-output-filtering", + "https://docs.botkube.io/1.9/usage/source/", + "https://docs.botkube.io/1.9/usage/source/argocd", + "https://docs.botkube.io/1.9/usage/source/keptn", + "https://docs.botkube.io/1.9/usage/source/kubernetes", + "https://docs.botkube.io/1.9/usage/source/prometheus", + "https://docs.botkube.io/next/", + "https://docs.botkube.io/next/architecture/", + "https://docs.botkube.io/next/architecture/cloud-teams", + "https://docs.botkube.io/next/cli/commands/botkube", + "https://docs.botkube.io/next/cli/commands/botkube_config", + "https://docs.botkube.io/next/cli/commands/botkube_config_get", + "https://docs.botkube.io/next/cli/commands/botkube_install", + "https://docs.botkube.io/next/cli/commands/botkube_login", + "https://docs.botkube.io/next/cli/commands/botkube_migrate", + "https://docs.botkube.io/next/cli/commands/botkube_telemetry", + "https://docs.botkube.io/next/cli/commands/botkube_telemetry_disable", + "https://docs.botkube.io/next/cli/commands/botkube_telemetry_enable", + "https://docs.botkube.io/next/cli/commands/botkube_uninstall", + "https://docs.botkube.io/next/cli/commands/botkube_version", + "https://docs.botkube.io/next/cli/getting-started", + "https://docs.botkube.io/next/cli/migrating-installation-to-botkube-cloud", + "https://docs.botkube.io/next/configuration/", + "https://docs.botkube.io/next/configuration/action", + "https://docs.botkube.io/next/configuration/alias", + "https://docs.botkube.io/next/configuration/communication/", + "https://docs.botkube.io/next/configuration/communication/vault-csi", + "https://docs.botkube.io/next/configuration/executor/", + "https://docs.botkube.io/next/configuration/executor/doctor", + "https://docs.botkube.io/next/configuration/executor/exec", + "https://docs.botkube.io/next/configuration/executor/flux", + "https://docs.botkube.io/next/configuration/executor/helm", + "https://docs.botkube.io/next/configuration/executor/kubectl", + "https://docs.botkube.io/next/configuration/general", + "https://docs.botkube.io/next/configuration/helm-chart-parameters", + "https://docs.botkube.io/next/configuration/rbac", + "https://docs.botkube.io/next/configuration/source/", + "https://docs.botkube.io/next/configuration/source/argocd", + "https://docs.botkube.io/next/configuration/source/github-events", + "https://docs.botkube.io/next/configuration/source/keptn", + "https://docs.botkube.io/next/configuration/source/kubernetes", + "https://docs.botkube.io/next/configuration/source/prometheus", + "https://docs.botkube.io/next/examples-and-tutorials/", + "https://docs.botkube.io/next/examples-and-tutorials/getstarted/", + "https://docs.botkube.io/next/examples-and-tutorials/integrations/", + "https://docs.botkube.io/next/examples-and-tutorials/tutorials/", + "https://docs.botkube.io/next/examples-and-tutorials/usecases/", + "https://docs.botkube.io/next/examples-and-tutorials/videos/", + "https://docs.botkube.io/next/installation/discord/", + "https://docs.botkube.io/next/installation/discord/cloud", + "https://docs.botkube.io/next/installation/discord/self-hosted", + "https://docs.botkube.io/next/installation/elasticsearch/", + "https://docs.botkube.io/next/installation/elasticsearch/cloud", + "https://docs.botkube.io/next/installation/elasticsearch/self-hosted", + "https://docs.botkube.io/next/installation/mattermost/", + "https://docs.botkube.io/next/installation/mattermost/cloud", + "https://docs.botkube.io/next/installation/mattermost/self-hosted", + "https://docs.botkube.io/next/installation/slack/", + "https://docs.botkube.io/next/installation/slack/cloud-slack", + "https://docs.botkube.io/next/installation/slack/socket-slack", + "https://docs.botkube.io/next/installation/socketslack", + "https://docs.botkube.io/next/installation/teams/", + "https://docs.botkube.io/next/installation/webhook/", + "https://docs.botkube.io/next/installation/webhook/cloud", + "https://docs.botkube.io/next/installation/webhook/self-hosted", + "https://docs.botkube.io/next/operation/common-problems", + "https://docs.botkube.io/next/operation/diagnostics", + "https://docs.botkube.io/next/plugin/", + "https://docs.botkube.io/next/plugin/custom-executor", + "https://docs.botkube.io/next/plugin/custom-source", + "https://docs.botkube.io/next/plugin/debugging", + "https://docs.botkube.io/next/plugin/dependencies", + "https://docs.botkube.io/next/plugin/interactive-messages", + "https://docs.botkube.io/next/plugin/local-testing", + "https://docs.botkube.io/next/plugin/quick-start", + "https://docs.botkube.io/next/plugin/repo", + "https://docs.botkube.io/next/plugin/troubleshooting.md", + "https://docs.botkube.io/next/plugin/using-kubeconfig", + "https://docs.botkube.io/next/usage/", + "https://docs.botkube.io/next/usage/automated-actions", + "https://docs.botkube.io/next/usage/event-notifications", + "https://docs.botkube.io/next/usage/executor/", + "https://docs.botkube.io/next/usage/executor/doctor", + "https://docs.botkube.io/next/usage/executor/exec", + "https://docs.botkube.io/next/usage/executor/flux", + "https://docs.botkube.io/next/usage/executor/helm", + "https://docs.botkube.io/next/usage/executor/kubectl", + "https://docs.botkube.io/next/usage/interactive-output-filtering", + "https://docs.botkube.io/next/usage/source/", + "https://docs.botkube.io/next/usage/source/argocd", + "https://docs.botkube.io/next/usage/source/keptn", + "https://docs.botkube.io/next/usage/source/kubernetes", + "https://docs.botkube.io/next/usage/source/prometheus", + "https://docs.botkube.io/community/contribute/", + "https://docs.botkube.io/community/contribute/elasticsearch-develop", + "https://docs.botkube.io/community/contribute/ms-teams-develop", + "https://docs.botkube.io/community/contribute/release", + "https://docs.botkube.io/community/contribute/webhook-develop", + "https://docs.botkube.io/community/credits", + "https://docs.botkube.io/", + "https://docs.botkube.io/architecture/", + "https://docs.botkube.io/architecture/cloud-teams", + "https://docs.botkube.io/cli/commands/botkube", + "https://docs.botkube.io/cli/commands/botkube_config", + "https://docs.botkube.io/cli/commands/botkube_config_get", + "https://docs.botkube.io/cli/commands/botkube_install", + "https://docs.botkube.io/cli/commands/botkube_login", + "https://docs.botkube.io/cli/commands/botkube_migrate", + "https://docs.botkube.io/cli/commands/botkube_telemetry", + "https://docs.botkube.io/cli/commands/botkube_telemetry_disable", + "https://docs.botkube.io/cli/commands/botkube_telemetry_enable", + "https://docs.botkube.io/cli/commands/botkube_uninstall", + "https://docs.botkube.io/cli/commands/botkube_version", + "https://docs.botkube.io/cli/getting-started", + "https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud", + "https://docs.botkube.io/configuration/", + "https://docs.botkube.io/configuration/action", + "https://docs.botkube.io/configuration/alias", + "https://docs.botkube.io/configuration/communication/", + "https://docs.botkube.io/configuration/communication/vault-csi", + "https://docs.botkube.io/configuration/executor/", + "https://docs.botkube.io/configuration/executor/doctor", + "https://docs.botkube.io/configuration/executor/exec", + "https://docs.botkube.io/configuration/executor/flux", + "https://docs.botkube.io/configuration/executor/helm", + "https://docs.botkube.io/configuration/executor/kubectl", + "https://docs.botkube.io/configuration/general", + "https://docs.botkube.io/configuration/helm-chart-parameters", + "https://docs.botkube.io/configuration/rbac", + "https://docs.botkube.io/configuration/source/", + "https://docs.botkube.io/configuration/source/argocd", + "https://docs.botkube.io/configuration/source/github-events", + "https://docs.botkube.io/configuration/source/keptn", + "https://docs.botkube.io/configuration/source/kubernetes", + "https://docs.botkube.io/configuration/source/prometheus", + "https://docs.botkube.io/examples-and-tutorials/", + "https://docs.botkube.io/examples-and-tutorials/getstarted/", + "https://docs.botkube.io/examples-and-tutorials/integrations/", + "https://docs.botkube.io/examples-and-tutorials/tutorials/", + "https://docs.botkube.io/examples-and-tutorials/usecases/", + "https://docs.botkube.io/examples-and-tutorials/videos/", + "https://docs.botkube.io/installation/discord/", + "https://docs.botkube.io/installation/discord/cloud", + "https://docs.botkube.io/installation/discord/self-hosted", + "https://docs.botkube.io/installation/elasticsearch/", + "https://docs.botkube.io/installation/elasticsearch/cloud", + "https://docs.botkube.io/installation/elasticsearch/self-hosted", + "https://docs.botkube.io/installation/mattermost/", + "https://docs.botkube.io/installation/mattermost/cloud", + "https://docs.botkube.io/installation/mattermost/self-hosted", + "https://docs.botkube.io/installation/slack/", + "https://docs.botkube.io/installation/slack/cloud-slack", + "https://docs.botkube.io/installation/slack/socket-slack", + "https://docs.botkube.io/installation/socketslack", + "https://docs.botkube.io/installation/teams/", + "https://docs.botkube.io/installation/webhook/", + "https://docs.botkube.io/installation/webhook/cloud", + "https://docs.botkube.io/installation/webhook/self-hosted", + "https://docs.botkube.io/operation/common-problems", + "https://docs.botkube.io/operation/diagnostics", + "https://docs.botkube.io/plugin/", + "https://docs.botkube.io/plugin/custom-executor", + "https://docs.botkube.io/plugin/custom-source", + "https://docs.botkube.io/plugin/debugging", + "https://docs.botkube.io/plugin/dependencies", + "https://docs.botkube.io/plugin/interactive-messages", + "https://docs.botkube.io/plugin/local-testing", + "https://docs.botkube.io/plugin/quick-start", + "https://docs.botkube.io/plugin/repo", + "https://docs.botkube.io/plugin/troubleshooting.md", + "https://docs.botkube.io/plugin/using-kubeconfig", + "https://docs.botkube.io/usage/", + "https://docs.botkube.io/usage/automated-actions", + "https://docs.botkube.io/usage/event-notifications", + "https://docs.botkube.io/usage/executor/", + "https://docs.botkube.io/usage/executor/doctor", + "https://docs.botkube.io/usage/executor/exec", + "https://docs.botkube.io/usage/executor/flux", + "https://docs.botkube.io/usage/executor/helm", + "https://docs.botkube.io/usage/executor/kubectl", + "https://docs.botkube.io/usage/interactive-output-filtering", + "https://docs.botkube.io/usage/source/", + "https://docs.botkube.io/usage/source/argocd", + "https://docs.botkube.io/usage/source/keptn", + "https://docs.botkube.io/usage/source/kubernetes", + "https://docs.botkube.io/usage/source/prometheus", + } +} + +func fixMarketingPages() []string { + return []string{ + "\n https://botkube.io\n ", + "\n https://botkube.io/professional-services-partner\n ", + "\n https://botkube.io/support\n ", + "\n https://botkube.io/integrations\n ", + "\n https://botkube.io/pricing\n ", + "\n https://botkube.io/contact\n ", + "\n https://botkube.io/learn\n ", + "\n https://botkube.io/privacy-policy\n ", + "\n https://botkube.io/terms-and-conditions\n ", + "\n https://botkube.io/events\n ", + "\n https://botkube.io/features\n ", + "\n https://botkube.io/news\n ", + "\n https://botkube.io/blog\n ", + "\n https://botkube.io/slack-app\n ", + "\n https://botkube.io/case-studies\n ", + "\n https://botkube.io/solutions/enabling-developers\n ", + "\n https://botkube.io/about\n ", + "\n https://botkube.io/blog/ai-for-kubernetes-operations\n ", + "\n https://botkube.io/blog/argo-cd-botkube-integration\n ", + "\n https://botkube.io/blog/beginners-guide-to-botkube-plugin-development-how-botkube-plug-ins-can-unify-your-cloud-native-tools\n ", + "\n https://botkube.io/blog/best-practices-for-kubernetes-troubleshooting-in-multi-cluster-environments\n ", + "\n https://botkube.io/blog/botkube-1-6-release\n ", + "\n https://botkube.io/blog/botkube-5-essential-devopstasks-to-automate\n ", + "\n https://botkube.io/blog/botkube-open-source-to-cloud-migration\n ", + "\n https://botkube.io/blog/botkube-socket-slack-getting-started\n ", + "\n https://botkube.io/blog/botkube-takes-on-amsterdam-a-kubecon-recap\n ", + "\n https://botkube.io/blog/botkube-v0-18-0-release-notes\n ", + "\n https://botkube.io/blog/botkube-v013-release-notes\n ", + "\n https://botkube.io/blog/botkube-v014-release-notes\n ", + "\n https://botkube.io/blog/botkube-v015-release-notes\n ", + "\n https://botkube.io/blog/botkube-v016-release-notes\n ", + "\n https://botkube.io/blog/botkube-v017-release-notes\n ", + "\n https://botkube.io/blog/botkube-v1-1-0-release-notes\n ", + "\n https://botkube.io/blog/botkube-v1-2-0-release-notes\n ", + "\n https://botkube.io/blog/botkube-v1-3-0-release-notes\n ", + "\n https://botkube.io/blog/botkube-v1-4-0-release-notes\n ", + "\n https://botkube.io/blog/build-a-github-issues-reporter-for-failing-kubernetes-apps-with-botkube-plugins\n ", + "\n https://botkube.io/blog/building-a-chatgpt-plugin-from-ideation-to-implementation\n ", + "\n https://botkube.io/blog/command-line-magic-simplify-your-life-with-custom-kubernetes-kubectrl-aliases-on-botkube\n ", + "\n https://botkube.io/blog/configure-event-sources-with-new-botkube-filters\n ", + "\n https://botkube.io/blog/creating-the-botkube-flux-plugin-for-day-2-operations\n ", + "\n https://botkube.io/blog/doctor-plug-in-tutorial\n ", + "\n https://botkube.io/blog/empowering-your-kubernetes-multi-cluster-observability-with-intelligent-monitoring\n ", + "\n https://botkube.io/blog/enhancing-gitops-workflows-with-botkube\n ", + "\n https://botkube.io/blog/explore-the-new-era-of-aiops-with-botkubes-ai-assistant\n ", + "\n https://botkube.io/blog/five-essential-kubernetes-tasks\n ", + "\n https://botkube.io/blog/get-botkube-running-in-under-3-minutes-the-new-slack-app\n ", + "\n https://botkube.io/blog/getting-started-with-botkube-and-argocd\n ", + "\n https://botkube.io/blog/implementing-your-own-botkube-plugin-a-real-life-use-case\n ", + "\n https://botkube.io/blog/integrating-microsoft-teams-with-azure-for-kubernetes-deployments\n ", + "\n https://botkube.io/blog/introducing-botkube-v1-0-the-future-of-kubernetes-troubleshooting\n ", + "\n https://botkube.io/blog/introducing-botkubes-integration-with-flux\n ", + "\n https://botkube.io/blog/is-chatops-a-kubernetes-dashboard-alternative\n ", + "\n https://botkube.io/blog/level-up-your-sre-workflow-automating-manual-tasks-with-botkube-ai-assistant\n ", + "\n https://botkube.io/blog/leveraging-botkube-for-kubernetes-cost-optimization-and-reporting\n ", + "\n https://botkube.io/blog/maximize-your-devops-teams-efficiency-with-botkube-and-microsoft-teams\n ", + "\n https://botkube.io/blog/microsoft-teams-integration-for-botkube-a-technical-journey\n ", + "\n https://botkube.io/blog/optimizing-collaboration-and-notifications-with-the-botkube-argocd-plugin\n ", + "\n https://botkube.io/blog/real-time-platform-engineer-advice-ai-assistant\n ", + "\n https://botkube.io/blog/revolutionize-your-kubernetes-troubleshooting-workflow-with-microsoft-teams-and-botkube\n ", + "\n https://botkube.io/blog/scaling-new-heights-taking-botkube-to-scale-20x\n ", + "\n https://botkube.io/blog/simplify-kubernetes-with-botkubes-ai-developer-self-service-made-easy\n ", + "\n https://botkube.io/blog/step-by-step-tutorial-leveraging-botkubes-cloud-slack-feature-for-kubernetes-collaborative-troubleshooting\n ", + "\n https://botkube.io/blog/streamlining-gitops-with-the-botkube-flux-plugin\n ", + "\n https://botkube.io/blog/streamlining-kubernetes-management-a-closer-look-at-botkube-chatops\n ", + "\n https://botkube.io/blog/supercharging-developer-collaboration-how-chatops-lives-on-with-botkube\n ", + "\n https://botkube.io/blog/the-state-of-kubernetes-errors-in-2023\n ", + "\n https://botkube.io/blog/use-chatgpt-to-troubleshoot-kubernetes-errors-with-botkubes-doctor\n ", + "\n https://botkube.io/tags/ai\n ", + "\n https://botkube.io/tags/aiops\n ", + "\n https://botkube.io/tags/argo-cd\n ", + "\n https://botkube.io/tags/botkube-cloud\n ", + "\n https://botkube.io/tags/chatops\n ", + "\n https://botkube.io/tags/development\n ", + "\n https://botkube.io/tags/gitops\n ", + "\n https://botkube.io/tags/helm\n ", + "\n https://botkube.io/tags/kubecon\n ", + "\n https://botkube.io/tags/kubernetes\n ", + "\n https://botkube.io/tags/microsoft-teams\n ", + "\n https://botkube.io/tags/monitoring\n ", + "\n https://botkube.io/tags/newsletter\n ", + "\n https://botkube.io/tags/release\n ", + "\n https://botkube.io/tags/slack\n ", + "\n https://botkube.io/tags/tutorial\n ", + "\n https://botkube.io/integration/argo-cd-botkube-kubernetes-integration\n ", + "\n https://botkube.io/integration/botkube-flux-kubernetes-integration\n ", + "\n https://botkube.io/integration/chatgpt-botkube-kubernetes-integration\n ", + "\n https://botkube.io/integration/custom-executor-plugin\n ", + "\n https://botkube.io/integration/discord\n ", + "\n https://botkube.io/integration/helm\n ", + "\n https://botkube.io/integration/kasten\n ", + "\n https://botkube.io/integration/keptn\n ", + "\n https://botkube.io/integration/mattermost\n ", + "\n https://botkube.io/integration/prometheus\n ", + "\n https://botkube.io/integration/slack\n ", + "\n https://botkube.io/integration/teams\n ", + "\n https://botkube.io/learn/ai-for-devops\n ", + "\n https://botkube.io/learn/ai-tools-for-kubernetes\n ", + "\n https://botkube.io/learn/aiops-tools\n ", + "\n https://botkube.io/learn/automate-kubernetes-compliance-with-botkube\n ", + "\n https://botkube.io/learn/azure-kubernetes-services\n ", + "\n https://botkube.io/learn/best-gitops-tools-for-kubernetes\n ", + "\n https://botkube.io/learn/chatops\n ", + "\n https://botkube.io/learn/cluster-status-check\n ", + "\n https://botkube.io/learn/copying-files-with-kubectl-cp\n ", + "\n https://botkube.io/learn/createcontainererror\n ", + "\n https://botkube.io/learn/demystifying-kubectl-drain-safely-evacuating-kubernetes-nodes\n ", + "\n https://botkube.io/learn/exit-code-125-issues\n ", + "\n https://botkube.io/learn/failed-to-push-some-refs-to\n ", + "\n https://botkube.io/learn/fix-the-unable-to-get-local-issuer-certificate-error-in-kubernetes\n ", + "\n https://botkube.io/learn/helm-charts\n ", + "\n https://botkube.io/learn/how-botkube-makes-monitoring-kubernetes-easy\n ", + "\n https://botkube.io/learn/how-to-debug-crashloopbackoff\n ", + "\n https://botkube.io/learn/how-to-fix-fatal-remote-origin-already-exists-git-error\n ", + "\n https://botkube.io/learn/is-kubernetes-an-operating-system\n ", + "\n https://botkube.io/learn/kubectl-cheat-sheet\n ", + "\n https://botkube.io/learn/kubernetes-alerts-to-teams\n ", + "\n https://botkube.io/learn/kubernetes-audit-log-best-practices\n ", + "\n https://botkube.io/learn/kubernetes-errors\n ", + "\n https://botkube.io/learn/kubernetes-monitoring-tools\n ", + "\n https://botkube.io/learn/kubernetes-observability-best-practices\n ", + "\n https://botkube.io/learn/kubernetes-rollbacks-a-guide\n ", + "\n https://botkube.io/learn/making-slack-talk-kubernetes-slack-powered-chatops-for-k8s\n ", + "\n https://botkube.io/learn/managing-kubernetes-clusters-from-chat\n ", + "\n https://botkube.io/learn/platform-engineering\n ", + "\n https://botkube.io/learn/real-time-event-log-in-slack\n ", + "\n https://botkube.io/learn/roles-of-swes-and-sres\n ", + "\n https://botkube.io/learn/slackops\n ", + "\n https://botkube.io/learn/spring-boot\n ", + "\n https://botkube.io/learn/the-benefits-and-use-cases-of-using-botkube-in-kubernetes-clusters\n ", + "\n https://botkube.io/learn/turning-kubernetes-k8s-alerts-into-k8s-notifications\n ", + "\n https://botkube.io/learn/understanding-kubernetes-executors\n ", + "\n https://botkube.io/learn/understanding-yaml-commenting\n ", + "\n https://botkube.io/learn/use-cases-for-aiops-platform\n ", + "\n https://botkube.io/learn/what-is-oomkilled\n ", + "\n https://botkube.io/learn-main-topic/ai\n ", + "\n https://botkube.io/learn-main-topic/definitions\n ", + "\n https://botkube.io/learn-main-topic/errors\n ", + "\n https://botkube.io/learn-main-topic/monitoring-kubernetes\n ", + "\n https://botkube.io/learn-main-topic/use-cases\n ", + "\n https://botkube.io/lp/5-essential-kubernetes-monitoring-and-troubleshooting-tasks-to-automate\n ", + "\n https://botkube.io/lp/mastering-developer-self-service\n ", + "\n https://botkube.io/lp/zapier-for-kubernetes\n ", + "\n https://botkube.io/case-studies/civo\n ", + } +} diff --git a/hack/assistant-setup/content-fetcher/testdata/TestFetcher_preparePageList/prepare-page-list.golden.yaml b/hack/assistant-setup/content-fetcher/testdata/TestFetcher_preparePageList/prepare-page-list.golden.yaml new file mode 100644 index 0000000..ff3f0f5 --- /dev/null +++ b/hack/assistant-setup/content-fetcher/testdata/TestFetcher_preparePageList/prepare-page-list.golden.yaml @@ -0,0 +1,242 @@ +- https://docs.botkube.io/license/ +- https://docs.botkube.io/search +- https://docs.botkube.io/support/ +- https://docs.botkube.io/telemetry/ +- https://docs.botkube.io/versions +- https://docs.botkube.io/community/contribute/ +- https://docs.botkube.io/community/contribute/elasticsearch-develop +- https://docs.botkube.io/community/contribute/ms-teams-develop +- https://docs.botkube.io/community/contribute/release +- https://docs.botkube.io/community/contribute/webhook-develop +- https://docs.botkube.io/community/credits +- https://docs.botkube.io/ +- https://docs.botkube.io/architecture/ +- https://docs.botkube.io/architecture/cloud-teams +- https://docs.botkube.io/cli/commands/botkube +- https://docs.botkube.io/cli/commands/botkube_config +- https://docs.botkube.io/cli/commands/botkube_config_get +- https://docs.botkube.io/cli/commands/botkube_install +- https://docs.botkube.io/cli/commands/botkube_login +- https://docs.botkube.io/cli/commands/botkube_migrate +- https://docs.botkube.io/cli/commands/botkube_telemetry +- https://docs.botkube.io/cli/commands/botkube_telemetry_disable +- https://docs.botkube.io/cli/commands/botkube_telemetry_enable +- https://docs.botkube.io/cli/commands/botkube_uninstall +- https://docs.botkube.io/cli/commands/botkube_version +- https://docs.botkube.io/cli/getting-started +- https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud +- https://docs.botkube.io/configuration/ +- https://docs.botkube.io/configuration/action +- https://docs.botkube.io/configuration/alias +- https://docs.botkube.io/configuration/communication/ +- https://docs.botkube.io/configuration/communication/vault-csi +- https://docs.botkube.io/configuration/executor/ +- https://docs.botkube.io/configuration/executor/doctor +- https://docs.botkube.io/configuration/executor/exec +- https://docs.botkube.io/configuration/executor/flux +- https://docs.botkube.io/configuration/executor/helm +- https://docs.botkube.io/configuration/executor/kubectl +- https://docs.botkube.io/configuration/general +- https://docs.botkube.io/configuration/helm-chart-parameters +- https://docs.botkube.io/configuration/rbac +- https://docs.botkube.io/configuration/source/ +- https://docs.botkube.io/configuration/source/argocd +- https://docs.botkube.io/configuration/source/github-events +- https://docs.botkube.io/configuration/source/keptn +- https://docs.botkube.io/configuration/source/kubernetes +- https://docs.botkube.io/configuration/source/prometheus +- https://docs.botkube.io/examples-and-tutorials/ +- https://docs.botkube.io/examples-and-tutorials/getstarted/ +- https://docs.botkube.io/examples-and-tutorials/integrations/ +- https://docs.botkube.io/examples-and-tutorials/tutorials/ +- https://docs.botkube.io/examples-and-tutorials/usecases/ +- https://docs.botkube.io/examples-and-tutorials/videos/ +- https://docs.botkube.io/installation/discord/ +- https://docs.botkube.io/installation/discord/cloud +- https://docs.botkube.io/installation/discord/self-hosted +- https://docs.botkube.io/installation/elasticsearch/ +- https://docs.botkube.io/installation/elasticsearch/cloud +- https://docs.botkube.io/installation/elasticsearch/self-hosted +- https://docs.botkube.io/installation/mattermost/ +- https://docs.botkube.io/installation/mattermost/cloud +- https://docs.botkube.io/installation/mattermost/self-hosted +- https://docs.botkube.io/installation/slack/ +- https://docs.botkube.io/installation/slack/cloud-slack +- https://docs.botkube.io/installation/slack/socket-slack +- https://docs.botkube.io/installation/socketslack +- https://docs.botkube.io/installation/teams/ +- https://docs.botkube.io/installation/webhook/ +- https://docs.botkube.io/installation/webhook/cloud +- https://docs.botkube.io/installation/webhook/self-hosted +- https://docs.botkube.io/operation/common-problems +- https://docs.botkube.io/operation/diagnostics +- https://docs.botkube.io/plugin/ +- https://docs.botkube.io/plugin/custom-executor +- https://docs.botkube.io/plugin/custom-source +- https://docs.botkube.io/plugin/debugging +- https://docs.botkube.io/plugin/dependencies +- https://docs.botkube.io/plugin/interactive-messages +- https://docs.botkube.io/plugin/local-testing +- https://docs.botkube.io/plugin/quick-start +- https://docs.botkube.io/plugin/repo +- https://docs.botkube.io/plugin/troubleshooting.md +- https://docs.botkube.io/plugin/using-kubeconfig +- https://docs.botkube.io/usage/ +- https://docs.botkube.io/usage/automated-actions +- https://docs.botkube.io/usage/event-notifications +- https://docs.botkube.io/usage/executor/ +- https://docs.botkube.io/usage/executor/doctor +- https://docs.botkube.io/usage/executor/exec +- https://docs.botkube.io/usage/executor/flux +- https://docs.botkube.io/usage/executor/helm +- https://docs.botkube.io/usage/executor/kubectl +- https://docs.botkube.io/usage/interactive-output-filtering +- https://docs.botkube.io/usage/source/ +- https://docs.botkube.io/usage/source/argocd +- https://docs.botkube.io/usage/source/keptn +- https://docs.botkube.io/usage/source/kubernetes +- https://docs.botkube.io/usage/source/prometheus +- https://botkube.io +- https://botkube.io/professional-services-partner +- https://botkube.io/support +- https://botkube.io/integrations +- https://botkube.io/pricing +- https://botkube.io/contact +- https://botkube.io/learn +- https://botkube.io/privacy-policy +- https://botkube.io/terms-and-conditions +- https://botkube.io/events +- https://botkube.io/features +- https://botkube.io/news +- https://botkube.io/blog +- https://botkube.io/slack-app +- https://botkube.io/case-studies +- https://botkube.io/solutions/enabling-developers +- https://botkube.io/about +- https://botkube.io/blog/ai-for-kubernetes-operations +- https://botkube.io/blog/argo-cd-botkube-integration +- https://botkube.io/blog/beginners-guide-to-botkube-plugin-development-how-botkube-plug-ins-can-unify-your-cloud-native-tools +- https://botkube.io/blog/best-practices-for-kubernetes-troubleshooting-in-multi-cluster-environments +- https://botkube.io/blog/botkube-1-6-release +- https://botkube.io/blog/botkube-5-essential-devopstasks-to-automate +- https://botkube.io/blog/botkube-open-source-to-cloud-migration +- https://botkube.io/blog/botkube-socket-slack-getting-started +- https://botkube.io/blog/botkube-takes-on-amsterdam-a-kubecon-recap +- https://botkube.io/blog/botkube-v0-18-0-release-notes +- https://botkube.io/blog/botkube-v013-release-notes +- https://botkube.io/blog/botkube-v014-release-notes +- https://botkube.io/blog/botkube-v015-release-notes +- https://botkube.io/blog/botkube-v016-release-notes +- https://botkube.io/blog/botkube-v017-release-notes +- https://botkube.io/blog/botkube-v1-1-0-release-notes +- https://botkube.io/blog/botkube-v1-2-0-release-notes +- https://botkube.io/blog/botkube-v1-3-0-release-notes +- https://botkube.io/blog/botkube-v1-4-0-release-notes +- https://botkube.io/blog/build-a-github-issues-reporter-for-failing-kubernetes-apps-with-botkube-plugins +- https://botkube.io/blog/building-a-chatgpt-plugin-from-ideation-to-implementation +- https://botkube.io/blog/command-line-magic-simplify-your-life-with-custom-kubernetes-kubectrl-aliases-on-botkube +- https://botkube.io/blog/configure-event-sources-with-new-botkube-filters +- https://botkube.io/blog/creating-the-botkube-flux-plugin-for-day-2-operations +- https://botkube.io/blog/doctor-plug-in-tutorial +- https://botkube.io/blog/empowering-your-kubernetes-multi-cluster-observability-with-intelligent-monitoring +- https://botkube.io/blog/enhancing-gitops-workflows-with-botkube +- https://botkube.io/blog/explore-the-new-era-of-aiops-with-botkubes-ai-assistant +- https://botkube.io/blog/five-essential-kubernetes-tasks +- https://botkube.io/blog/get-botkube-running-in-under-3-minutes-the-new-slack-app +- https://botkube.io/blog/getting-started-with-botkube-and-argocd +- https://botkube.io/blog/implementing-your-own-botkube-plugin-a-real-life-use-case +- https://botkube.io/blog/integrating-microsoft-teams-with-azure-for-kubernetes-deployments +- https://botkube.io/blog/introducing-botkube-v1-0-the-future-of-kubernetes-troubleshooting +- https://botkube.io/blog/introducing-botkubes-integration-with-flux +- https://botkube.io/blog/is-chatops-a-kubernetes-dashboard-alternative +- https://botkube.io/blog/level-up-your-sre-workflow-automating-manual-tasks-with-botkube-ai-assistant +- https://botkube.io/blog/leveraging-botkube-for-kubernetes-cost-optimization-and-reporting +- https://botkube.io/blog/maximize-your-devops-teams-efficiency-with-botkube-and-microsoft-teams +- https://botkube.io/blog/microsoft-teams-integration-for-botkube-a-technical-journey +- https://botkube.io/blog/optimizing-collaboration-and-notifications-with-the-botkube-argocd-plugin +- https://botkube.io/blog/real-time-platform-engineer-advice-ai-assistant +- https://botkube.io/blog/revolutionize-your-kubernetes-troubleshooting-workflow-with-microsoft-teams-and-botkube +- https://botkube.io/blog/scaling-new-heights-taking-botkube-to-scale-20x +- https://botkube.io/blog/simplify-kubernetes-with-botkubes-ai-developer-self-service-made-easy +- https://botkube.io/blog/step-by-step-tutorial-leveraging-botkubes-cloud-slack-feature-for-kubernetes-collaborative-troubleshooting +- https://botkube.io/blog/streamlining-gitops-with-the-botkube-flux-plugin +- https://botkube.io/blog/streamlining-kubernetes-management-a-closer-look-at-botkube-chatops +- https://botkube.io/blog/supercharging-developer-collaboration-how-chatops-lives-on-with-botkube +- https://botkube.io/blog/the-state-of-kubernetes-errors-in-2023 +- https://botkube.io/blog/use-chatgpt-to-troubleshoot-kubernetes-errors-with-botkubes-doctor +- https://botkube.io/tags/ai +- https://botkube.io/tags/aiops +- https://botkube.io/tags/argo-cd +- https://botkube.io/tags/botkube-cloud +- https://botkube.io/tags/chatops +- https://botkube.io/tags/development +- https://botkube.io/tags/gitops +- https://botkube.io/tags/helm +- https://botkube.io/tags/kubecon +- https://botkube.io/tags/kubernetes +- https://botkube.io/tags/microsoft-teams +- https://botkube.io/tags/monitoring +- https://botkube.io/tags/newsletter +- https://botkube.io/tags/release +- https://botkube.io/tags/slack +- https://botkube.io/tags/tutorial +- https://botkube.io/integration/argo-cd-botkube-kubernetes-integration +- https://botkube.io/integration/botkube-flux-kubernetes-integration +- https://botkube.io/integration/chatgpt-botkube-kubernetes-integration +- https://botkube.io/integration/custom-executor-plugin +- https://botkube.io/integration/discord +- https://botkube.io/integration/helm +- https://botkube.io/integration/kasten +- https://botkube.io/integration/keptn +- https://botkube.io/integration/mattermost +- https://botkube.io/integration/prometheus +- https://botkube.io/integration/slack +- https://botkube.io/integration/teams +- https://botkube.io/learn/ai-for-devops +- https://botkube.io/learn/ai-tools-for-kubernetes +- https://botkube.io/learn/aiops-tools +- https://botkube.io/learn/automate-kubernetes-compliance-with-botkube +- https://botkube.io/learn/azure-kubernetes-services +- https://botkube.io/learn/best-gitops-tools-for-kubernetes +- https://botkube.io/learn/chatops +- https://botkube.io/learn/cluster-status-check +- https://botkube.io/learn/copying-files-with-kubectl-cp +- https://botkube.io/learn/createcontainererror +- https://botkube.io/learn/demystifying-kubectl-drain-safely-evacuating-kubernetes-nodes +- https://botkube.io/learn/exit-code-125-issues +- https://botkube.io/learn/failed-to-push-some-refs-to +- https://botkube.io/learn/fix-the-unable-to-get-local-issuer-certificate-error-in-kubernetes +- https://botkube.io/learn/helm-charts +- https://botkube.io/learn/how-botkube-makes-monitoring-kubernetes-easy +- https://botkube.io/learn/how-to-debug-crashloopbackoff +- https://botkube.io/learn/how-to-fix-fatal-remote-origin-already-exists-git-error +- https://botkube.io/learn/is-kubernetes-an-operating-system +- https://botkube.io/learn/kubectl-cheat-sheet +- https://botkube.io/learn/kubernetes-alerts-to-teams +- https://botkube.io/learn/kubernetes-audit-log-best-practices +- https://botkube.io/learn/kubernetes-errors +- https://botkube.io/learn/kubernetes-monitoring-tools +- https://botkube.io/learn/kubernetes-observability-best-practices +- https://botkube.io/learn/kubernetes-rollbacks-a-guide +- https://botkube.io/learn/making-slack-talk-kubernetes-slack-powered-chatops-for-k8s +- https://botkube.io/learn/managing-kubernetes-clusters-from-chat +- https://botkube.io/learn/platform-engineering +- https://botkube.io/learn/real-time-event-log-in-slack +- https://botkube.io/learn/roles-of-swes-and-sres +- https://botkube.io/learn/slackops +- https://botkube.io/learn/spring-boot +- https://botkube.io/learn/the-benefits-and-use-cases-of-using-botkube-in-kubernetes-clusters +- https://botkube.io/learn/turning-kubernetes-k8s-alerts-into-k8s-notifications +- https://botkube.io/learn/understanding-kubernetes-executors +- https://botkube.io/learn/understanding-yaml-commenting +- https://botkube.io/learn/use-cases-for-aiops-platform +- https://botkube.io/learn/what-is-oomkilled +- https://botkube.io/learn-main-topic/ai +- https://botkube.io/learn-main-topic/definitions +- https://botkube.io/learn-main-topic/errors +- https://botkube.io/learn-main-topic/monitoring-kubernetes +- https://botkube.io/learn-main-topic/use-cases +- https://botkube.io/lp/5-essential-kubernetes-monitoring-and-troubleshooting-tasks-to-automate +- https://botkube.io/lp/mastering-developer-self-service +- https://botkube.io/lp/zapier-for-kubernetes +- https://botkube.io/case-studies/civo diff --git a/hack/assistant-setup/content/botkube.io.md b/hack/assistant-setup/content/botkube.io.md new file mode 100644 index 0000000..1744ede --- /dev/null +++ b/hack/assistant-setup/content/botkube.io.md @@ -0,0 +1,110 @@ +Title: Collaborative Kubernetes Troubleshooting Platform | Botkube + +URL Source: https://botkube.io/ + +Markdown Content: +[![Image 1: Kusk Kubernetes](https://assets-global.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](https://botkube.io/) + +A virtual SRE, powered by AI +---------------------------- + +### Powered by + +[![Image 2: Monitoring Kubernetes notifications in chat platforms](https://assets-global.website-files.com/633705de6adaa38599d8e258/642da9080827c967a39b0043_automation_new.gif)](https://botkube.io/solutions/enabling-developers) + +Empowering DevOps +----------------- + +Error to resolution in one thread: Centralize alerting and troubleshooting in one platform. + +Botkube integrates essential notifications, with context, and troubleshooting tools directly into your chat platform. Powered by artificial intelligence and automation, it allows teams to tackle common issues without wasting time on repetitive tasks. + +[Developer Self-Service ----------------------](https://botkube.io/solutions/enabling-developers) + +Developers aren’t Kubernetes experts, and they don’t have to be! + +Botkube empowers developers to self-service and solve Kubernetes problems from the comfort of their existing chat platforms without extensive K8s knowledge. Our AI assistant provides actionable insights and recommendations directly to developers, enabling quick problem resolution without heavy reliance on support teams. + +[![Image 3: Monitoring Kubernetes notifications in chat platforms](https://assets-global.website-files.com/633705de6adaa38599d8e258/654d07eb1993ada26a1f17b1_Enabling_Developers.gif)](https://botkube.io/solutions/enabling-developers) + +![Image 4: Monitoring Kubernetes notifications in chat platforms](https://assets-global.website-files.com/633705de6adaa38599d8e258/654d0856e99da8d8bd98bf27_flux-diff-1.gif) + +Improving Reliability +--------------------- + +Botkube gives you reliable Kubernetes monitoring in minutes, not days. + +With powerful filtering, Botkube gets the right notifications to the right teams. Lighten their workload by automating responses to common problems. Accelerate mean time to recovery by receiving alerts, troubleshooting, and resolving issues all in the same place — the chat platform where you already spend much of your time. + +See Botkube in Action +--------------------- + +Why our users love Botkube: Case Study +-------------------------------------- + +Livestream +---------- + +90DaysOfDevOps - 2024 Community Edition +--------------------------------------- + +Join Maria, Developer Advocate for Botkube, in an insightful workshop that leverages the power of Botkube for effortless multi-cluster management in Kubernetes. In this session, we will explore three key areas: + +1\. Overcoming the Challenges of Remote Troubleshooting with Kubernetes + +2\. Creating a Collaborative and Troubleshooting-Friendly Environment with Botkube + +3\. Simplifying Collaborative Kubernetes Troubleshooting: Three Best Practices with the aid of Botkube + +Speakers: + +![Image 5: Mateusz Stostok, Botkube Backend Engineer](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) + +Maria Ashby + +Developer Advocate + +Botkube + +Latest Blog Post +---------------- + +User Quotes +----------- + +![Image 6: automating tests staging cluster](https://assets-global.website-files.com/633705de6adaa38599d8e258/6387ccf6ff66597d5f414815_botkube-quote-sign.svg) + +The advantages of BotKube are its versatility and efficiency in managing and monitoring Kubernetes clusters. It offers seamless integration with various messaging platforms and provides real-time alerts and notifications. Its appeal is enhanced by Its user-friendly interface, and extensive customization options + +![Image 7: automating tests staging cluster](https://assets-global.website-files.com/633705de6adaa38599d8e258/6387ccf6ff66597d5f414815_botkube-quote-sign.svg) + +The advantages of BotKube are its versatility and efficiency in managing and monitoring Kubernetes clusters. It offers seamless integration with various messaging platforms and provides real-time alerts and notifications. Its appeal is enhanced by Its user-friendly interface, and extensive customization options + +![Image 8: three blue circles on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/6387cc6cd11dba9de0d3578f_botkube.gif) + +![Image 9: automating tests staging cluster](https://assets-global.website-files.com/633705de6adaa38599d8e258/6387ccf6ff66597d5f414815_botkube-quote-sign.svg) + +For me, monitoring health and performance of the infrastructure in realtime was done with the help of Botkube. Botkube provided me security features such as unauthorized access attempts. + +![Image 10: three blue circles on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/6387cc6cd11dba9de0d3578f_botkube.gif) + +![Image 11: a pair of white speech bubbles on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/64dbb86f74cb6622225312c2_quote-icon.svg) + +For me, monitoring health and performance of the infrastructure in realtime was done with the help of Botkube. Botkube provided me security features such as unauthorized access attempts. + +![Image 12: a pair of white speech bubbles on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/64dbb86f74cb6622225312c2_quote-icon.svg) + +The advantages of BotKube are its versatility and efficiency in managing and monitoring Kubernetes clusters. It offers seamless integration with various messaging platforms and provides real-time alerts and notifications. Its appeal is enhanced by Its user-friendly interface, and extensive customization options + +![Image 13: a pair of white speech bubbles on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/64dbb86f74cb6622225312c2_quote-icon.svg) + +“Perfect! When i have the repo i will write here, thank you very much for the support! I really like this project!” + +Stay in the Loop +---------------- + +![Image 14: Kusk Kubernetes](https://assets-global.website-files.com/633705de6adaa38599d8e258/636d3117b8612105c60e0bd9_botkube-front-right.svg) + +Join the Botkube Community in one of these channels + +Subscribe to our monthly newsletter to stay up to date with all-things Botkube. diff --git a/hack/assistant-setup/content/botkube.io__about.md b/hack/assistant-setup/content/botkube.io__about.md new file mode 100644 index 0000000..7396be3 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__about.md @@ -0,0 +1,123 @@ +Title: About Us | Botkube + +URL Source: https://botkube.io/about + +Markdown Content: +Designed to Connect the Cloud Native Landscape into your Chat Channel +--------------------------------------------------------------------- + +![Image 1: a blue bird flying over a mountain](https://assets-global.website-files.com/633705de6adaa38599d8e258/65b2a089afca9fd872a83d94_Main-Botkube-5.webp) + +Started in 2019 Reimagined in 2022 +---------------------------------- + +Botkube began as a tool forged in the fires of necessity. + +2019 + +The [Infracloud team](https://www.infracloud.io/kubernetes-monitoring-tool/), faced with daily challenges of troubleshooting client Kubernetes clusters, dreamt of a solution that streamlined the process and empowered collaboration. This vision led to the birth of Botkube, a messaging bot designed to simplify cluster monitoring, debug deployments, and offer invaluable insights through automated checks. + +As Botkube gained traction and the community rallied behind its potential, the [Kubeshop accelerator](https://kubeshop.io/) saw a kindred spirit. + +2022 + +In 2021, Botkube joined the ranks of other innovative Kubernetes tools like Testkube, marking the dawn of a new era where collaboration and development drive the future of cluster management. + +Now, Botkube stands poised to revolutionize the way we interact with Kubernetes, fueled by the passion of its creators and the unwavering support of its community. + +![Image 2: three blue and purple characters with speech bubbles that say hello i'm botube](https://assets-global.website-files.com/633705de6adaa38599d8e258/65a03662368d2582292298b1_bk_aboutus_ill.webp) + +Botkube is one of the three commercial products from Kubeshop, a first of its kind open source incubator and accelerator, focused on the challenges of Kubernetes and the cloud native ecosystem. + +Benefits of Joining Kubeshop +---------------------------- + +Joining the [Kubeshop accelerator](https://kubeshop.io/) proved a boon for Botkube, offering a potent blend of sharedresources and collaboration with industry leaders. + +Access to cutting-edge infrastructure and expertise facilitated rapid development, while close proximity to other top Kubernetes tools fostered cross-pollination of ideas and a vibrant collaborative spirit. The biggest draw, however, was the Kubeshop team's wealth of experience. + +![Image 3: a man wearing glasses and a jacket](https://assets-global.website-files.com/633705de6adaa38599d8e258/65a04ab9c691cc5bf77bca6b_ole-lensmar-2.webp) + +Working alongside seasoned veterans like Ole Lensmar—the CTO, and mastermind behind SOAP UI—provided invaluable mentorship and guidance, propelling Botkube's growth. + +![Image 4: a man with a beard wearing a black shirt](https://assets-global.website-files.com/633705de6adaa38599d8e258/634ee5c0455ce28d5f1d965c_blair-rampling.jpeg) + +Additionally, the accelerator enabled Botkube to bolster its own team with seasoned professionals like  the product lead, Blair Rampling. His enterprise expertise honed at Red Hat proved instrumental in shaping Botkube for the big leagues. + +![Image 5: a blue bird with a blue square on its head](https://assets-global.website-files.com/633705de6adaa38599d8e258/65a053449bd21c386e00da05_Bird-with-fire-Botkube-right%201.webp) + +We believe +---------- + +At Botkube, we envision a future where Kubernetes, GitOps, and Chat tools combine to create a seamless developer self-service portal. This portal empowers every team member, regardless of technical background, to interact with the Kubernetes cluster effortlessly. + +How do we do this? +------------------ + +Botkube combines the most useful DevOps tools and connects them to Slack, Microsoft Teams, or Discord to give everyone an easy user experience when interacting with the shared Kubernetes cluster in a chatops manner. + +Started with Slack, now we're here +---------------------------------- + +#### Easy connection to the most popular productivity tools: + +#### Executors for the most popular cluster maintenance: Kubectl, Helm, Argo CD, Flux... + +Upcoming Events +--------------- + +![Image 6: a white and black logo with a circle in the middle](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/647f5b651155fb498c472792_livestream-icon.svg) + +Livestream + +### 90DaysOfDevOps - 2024 Community Edition + +![Image 7: an orange arrow pointing down in a circle](https://assets-global.website-files.com/633705de6adaa38599d8e258/645d3896ae52ddf3bd9625c2_event-arrow.svg) + +Join Maria, Developer Advocate for Botkube, in an insightful workshop that leverages the power of Botkube for effortless multi-cluster management in Kubernetes. In this session, we will explore three key areas: + +1\. Overcoming the Challenges of Remote Troubleshooting with Kubernetes + +2\. Creating a Collaborative and Troubleshooting-Friendly Environment with Botkube + +3\. Simplifying Collaborative Kubernetes Troubleshooting: Three Best Practices with the aid of Botkube + +![Image 8: a white and black logo with a circle in the middle](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/647f5b0cb4328c0f07a53397_conference-icon.svg) + +Conference + +### Developer Week 2024 + +![Image 9: an orange arrow pointing down in a circle](https://assets-global.website-files.com/633705de6adaa38599d8e258/645d3896ae52ddf3bd9625c2_event-arrow.svg) + +San Francisco, CA USA + +Each year, 8,000+ developers, engineers, software architects, dev teams, managers, and executives from 70+ countries gather for DeveloperWeek to discover the latest in developer technologies, languages, platforms, and tools. + +Botkube DevRel, Maria Ashby, will present **_"Unlocking K8s Troubleshooting Best Practices with Botkube."_** See you there... + +![Image 10: a white and black logo with a circle in the middle](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/647f5b651155fb498c472792_livestream-icon.svg) + +Livestream + +### Office Hours: 5 Essential Kubernetes Monitoring and Troubleshooting Tasks to Automate + +![Image 11: an orange arrow pointing down in a circle](https://assets-global.website-files.com/633705de6adaa38599d8e258/645d3896ae52ddf3bd9625c2_event-arrow.svg) + +Join us for an office hours session where we'll explore five ways for DevOps teams to automate common Kubernetes tasks to save time each week.This session is useful and informative for those new to Kubernetes or those with years of K8s experience under their belt. We'll talk through: + +**\- Real-time Kubernetes Monitoring with Prometheus** + +**\- Resource Scaling** + +**\- Kubernetes Log Management** + +**\- GitOps Workflows** + +**\- K8s Configuration Management** + +Thought Leadership + News +------------------------- + +Recent Blog Posts +----------------- diff --git a/hack/assistant-setup/content/botkube.io__blog.md b/hack/assistant-setup/content/botkube.io__blog.md new file mode 100644 index 0000000..bb83f72 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog.md @@ -0,0 +1,103 @@ +Title: Blog + +URL Source: https://botkube.io/blog + +Markdown Content: +Blog posts +---------- + +< + +[1](https://botkube.io/blog?page=1)[2](https://botkube.io/blog?page=2)[3](https://botkube.io/blog?page=3)...[9](https://botkube.io/blog?page=9) + +[\>](https://botkube.io/blog?page=2) + +[![Image 1: botkube - screenshot thumbnail](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6620766f1b4d9e191b51bc9c_4_17%20Botkube%20BLOG%20Thumbnail(SRE%20AI%20assistant).png) + +Apr 18, 2024 + + read + +### Level Up Your SRE Workflow: Automating Manual Tasks with Botkube AI Assistant + +See how Botkube is optimizing SRE workflows with the new AI assistant + +](https://botkube.io/blog/level-up-your-sre-workflow-automating-manual-tasks-with-botkube-ai-assistant) + +[![Image 2: botkube - screenshot thumbnail](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/661eb9d9c3fe057b001d93b5_simplify-kubernetes-with-botkubes-ai-developer-self-service-made-easy.png) + +Apr 4, 2024 + +5 mins + + read + +### Developer Self-Service Made Easy with Botkube AI Assistant + +Discover how Botkube AI's simplifies Kubernetes troubleshooting for devs with natural language interactions, and seamless integration for enhanced productivity. + +](https://botkube.io/blog/simplify-kubernetes-with-botkubes-ai-developer-self-service-made-easy) + +[![Image 3: botkube tutorial - screenshot 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a70cf0a7f079f477b8a7c9_Botkube%20BLOG%20Thumbnail%20(2).png) + +Mar 11, 2024 + +5 mins + + read + +### Explore the New Era of AIOps with Botkube's AI Assistant + +Discover how to revolutionize Kubernetes management with Botkube's AI Assistant! Simplify K8s operations, automate incident reporting, and more. + +](https://botkube.io/blog/explore-the-new-era-of-aiops-with-botkubes-ai-assistant) + +[![Image 4: botkube - screenshot thumbnail](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a6f2c82818eaad200539d8_Botkube%20BLOG%20Thumbnail%20(8).png) + +Mar 6, 2024 + +5 mins + + read + +### 4 AI-Driven Strategies for Enhanced Kubernetes Troubleshooting Workflows + +Optimizing Kubernetes Management with Botkube's AI Insights + +](https://botkube.io/blog/ai-for-kubernetes-operations) + +[![Image 5: botkube announces a new game for android and ios](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65ea15e683d48fe21ddd98c5_Blog_Thumbnail%20(4).png) + +Mar 6, 2024 + +5min + + read + +### Real-Time Platform Engineer Advice with Botkube's AI Assistant + +Imagine having K8s experts available, providing help to your team 24/7. Get real-time, data-driven insights about your Kubernetes clusters without ever leaving your chat window with AI Assistant. + +](https://botkube.io/blog/real-time-platform-engineer-advice-ai-assistant) + +[![Image 6: botkube tutorial - screenshot 1](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65c5156e73ce06b361c822f6_Botkube%20BLOG%20Thumbnail%20(10).png) + +Feb 8, 2024 + +5 mins + + read + +### Empowering Your Kubernetes Multi-Cluster Observability with Intelligent Monitoring + +Discover how Botkube optimizes multi-cluster Kubernetes observability with automation, real time alerts and more.. + +](https://botkube.io/blog/empowering-your-kubernetes-multi-cluster-observability-with-intelligent-monitoring) + +< + +[1](https://botkube.io/blog?page=1)[2](https://botkube.io/blog?page=2)[3](https://botkube.io/blog?page=3)...[9](https://botkube.io/blog?page=9) + +[\>](https://botkube.io/blog?page=2) + +No results found. Please try to search with different keywords. diff --git a/hack/assistant-setup/content/botkube.io__blog__ai-for-kubernetes-operations.md b/hack/assistant-setup/content/botkube.io__blog__ai-for-kubernetes-operations.md new file mode 100644 index 0000000..9d67604 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__ai-for-kubernetes-operations.md @@ -0,0 +1,81 @@ +Title: 4 AI-Driven Strategies for Enhanced Kubernetes Troubleshooting Workflows + +URL Source: https://botkube.io/blog/ai-for-kubernetes-operations + +Published Time: Mar 06, 2024 + +Markdown Content: +![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) + +Maria Ashby + +Developer Advocate + +Botkube + +Optimizing Kubernetes Management with Botkube's AI Insights + +### Table of Contents + +* [Strategy 1: Automated Incident Reporting](#strategy-1-automated-incident-reporting) +* [Strategy 2: Optimize Resource Allocation](#strategy-2-optimize-resource-allocation) +* [Strategy 3: Enhance Cluster Diagnostics](#strategy-3-enhance-cluster-diagnostics-) +* [Strategy 4: Enable Proactive Anomaly Detection](#strategy-4-enable-proactive-anomaly-detection) +* [Bonus Strategy: Simplify Application Lifecycle Management](#bonus-strategy-simplify-application-lifecycle-management) +* [Getting Started with Botkube’s AI Assistant](#getting-started-with-botkube-s-ai-assistant) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +#### Get started with Botkube Cloud + +Kubernetes has transformed how we deploy and manage applications with unparalleled scalability and efficiency. But, mastering Kubernetes cluster management requires a high level of expertise to ensure everything runs smoothly, securely, and reliably. In recent years, new tools have been developed to make managing Kubernetes easier for engineering teams. AI assistants like GitHub’s Copilot are enhancing developer experiences, leading to the adoption of AIOps (Artificial Intelligence for IT Operations), including Kubernetes AI assistants.This shift emphasizes the need for automation, real-time monitoring, and intelligent problem-solving in managing Kubernetes. + +[Botkube’s AI Assistant](https://botkube.io/blog/real-time-platform-engineer-advice-ai-assistant), for instance, offers an intuitive way to manage Kubernetes by providing AI-powered monitoring and troubleshooting directly through chat platforms. This not only streamlines workflow but also improves system reliability through detailed alerts and automation, making Kubernetes more accessible to both experts and beginners. + +In this guide we will explore how AI assistants transform Kubernetes management and troubleshooting, making operations smoother and more efficient for all users. + +Strategy 1: Automated Incident Reporting +---------------------------------------- + +![Image 2: a screenshot of a chat window on a computer screen](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65ee1a5d521144e87f59161e_Botkube%20AI%20Assistant%20-failing%20GIF.gif) + +‍ + +Managing Kubernetes can be a challenging task, especially when dealing with complex errors, like ImagePullBackOff or CrashLoopBackOff. The traditional method of juggling dashboards and command lines to manage incidents can slow things down. Botkube offers a simpler solution by diagnosing issues and providing detailed reports through chat, making problem-solving more conversational and efficient. Moving away from conventional tools, Botkube allows for quick issue identification and resolution in a single chat thread, learning from your cluster to enhance its problem-spotting accuracy and streamline escalation for urgent matters. This method not only speeds up the process but also enhances system reliability and performance. + +Strategy 2: Optimize Resource Allocation +---------------------------------------- + +![Image 3: a screenshot of a message in a google chat](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a6ef180190c3682238b922_9kalnKKcBw_q5sdluVLbLDy9ch5mY-RxHKxDa6edtIj5fIITzJz8lL3BRAaSMnldHACqcEHteUaFeKIN4RYkB-uGXRCISEMHlvM2crujb2yRfN2_QtNFXUISA3-YfABPLl5_t6LcMKwsO0a39lZXKl4.gif) + +‍ + +Resource management is crucial for optimal performance and cost-efficiency in Kubernetes. Teams face difficulties in keeping pace with real-time requirements, which can lead to performance issues or unnecessary overspending on resources. Botkube’s AI assistant automates resource usage monitoring and analysis, providing recommendations for ideal distribution. It intelligently evaluates workload patterns, enabling dynamic CPU, memory, and storage adjustments, aligning with current demands without manual intervention. This predictive approach prevents performance bottlenecks and achieves cost savings, making Kubernetes resource allocation simpler and more effective. + +Strategy 3: Enhance Cluster Diagnostics +--------------------------------------- + +![Image 4: a screenshot of a twitter page showing a message](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65e8a0387271b3eec14634d8_Co_cwk72Ki64q1a3A6OAcxn0qQvCjlhWWlTtBLPzMwhPjvVn6oHn-e2_L4twExmcpGAuis9bZKJXC2JRzuOzxMXg5MsbAugaCwe1xt5GUqWsnbug3CQkm7uGo7GX2g4dgTc-TCK1oScC7aUd82RMlG4.png) + +Troubleshooting in Kubernetes production environments presents a significant challenge, requiring not just an in-depth knowledge of Kubernetes itself but also the ability to quickly address and resolve issues to maintain system stability. AI-powered Kubernetes assistants streamline this process through detailed diagnostics and automated resolution guides or runbooks. These tools are invaluable for those tasked with Kubernetes management, streamlining the identification and rectification of cluster issues. Botkube automatically detects issues, offering clear explanations and steps for resolution, thus ensuring system reliability and efficiency. These tools save time and promote consistency in troubleshooting, adapting to your cluster's specific needs and best practices. + +Strategy 4: Enable Proactive Anomaly Detection +---------------------------------------------- + +![Image 5: a screenshot of a tweet from a twitter account](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65e8a037ee1160c06c47b0cc_LopU3vbDXwRSiyWbJgwCkZ2vsifEeikrsi9f16OWeJE83BBJGt2tqJn2O-2mq8nTvDlNejOFdH2LyHXcKccnsFcyjeDoccaBZSLLuxm3HZtsE3-TBmPgOEkLEjSr9_K5DcIvpZkd1KVFyN4uly3aImU.png) + +In Kubernetes environments, catching and fixing issues early is key to avoiding big problems. A system that monitors in real-time helps keep things running smoothly. Kubernetes AI assistants, such as Botkube, are great at spotting problems early with their real-time monitoring, heading off issues before they impact performance. Botkube doesn't just spot problems; it also runs diagnostic commands (like kubectl get, describe, logs) to quickly give you a clearer picture of what's going wrong. It even suggests fixes tailored to your setup, boosting its ability to self-repair. Over time, Botkube gets better at predicting and fixing issues, thanks to its continuous learning. You can also customize it to take certain actions automatically, making sure it fits your operational needs. By handling anomaly detection and resolution on its own, Botkube lessens the need for manual checks, making managing Kubernetes simpler and ensuring systems run reliably. + +Bonus Strategy: Simplify Application Lifecycle Management +--------------------------------------------------------- + +![Image 6: a screen shot of a screen showing a screen showing a screen showing a screen showing a screen showing a screen showing](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64e6946be4cd9b0c47a55f75_flux-interactivity-1.gif) + +The application lifecycle in Kubernetes is a challenging process from development to deployment. This process demands constant vigilance over application performance, resource constraints, and deployment health. Botkube aids in automating deployment strategies, scaling, and updates, responding to real-time system needs. It analyzes performance metrics and user feedback to determine effective deployment strategies, offering a safety net for rollbacks based on historical data. + +Botkube eases the management of application secrets and configurations, automating updates and rotations to enhance both security and operational efficiency. This AI-centric approach simplifies managing the application lifecycle in Kubernetes, ensuring security, performance, and responsiveness to changing demands. + +Getting Started with Botkube’s AI Assistant +------------------------------------------- + +[Starting with our AI Assistant is simple and intuitive.](https://botkube.io/blog/explore-the-new-era-of-aiops-with-botkubes-ai-assistant) It's included in every Botkube Cloud instance, ensuring a smooth integration for users updating to the latest version. New users can easily begin with Botkube, quickly enjoying AI-enhanced Kubernetes management.\*\* [Start with Botkube here](http://app.botkube.io/). For those using the open-source version, [follow our migration guide](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud) to swiftly upgrade to Botkube Cloud and access all new features. Dive into the Botkube AI Assistant for a superior Kubernetes management experience. Sign up now to integrate real-time, AI-powered support into your cluster management, improving efficiency and reliability. With the Botkube AI Assistant, you gain a 24/7 platform engineer at your service. diff --git a/hack/assistant-setup/content/botkube.io__blog__argo-cd-botkube-integration.md b/hack/assistant-setup/content/botkube.io__blog__argo-cd-botkube-integration.md new file mode 100644 index 0000000..4f2907a --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__argo-cd-botkube-integration.md @@ -0,0 +1,77 @@ +Title: Argo & Botkube: A Match Made in Heaven? + +URL Source: https://botkube.io/blog/argo-cd-botkube-integration + +Published Time: Sep 22, 2023 + +Markdown Content: +![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) + +Maria Ashby + +Developer Advocate + +Botkube + +Argo CD now integrates with Botkube, allowing users to receive and interact with notifications in Slack, Discord, and more. + +### Table of Contents + +* [What is Argo CD?](#what-is-argo-cd-) +* [Why was a Botkube & Argo Connection Necessary?](#why-was-a-botkube-argo-connection-necessary-) +* [What is Botkube?](#what-is-botkube-) +* [Using Argo CD with Botkube](#using-argo-cd-with-botkube) +* [Get Started with Botkube’s new Argo CD Plugin](#get-started-with-botkube-s-new-argo-cd-plugin) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +#### Get started with Botkube Cloud + +Are you dealing with the complexities of scaling operations and collaborative workflows using GitOps tools like ArgoCD? As your organization expands, staying on top of repository and configuration changes, as well as managing pull requests and issues, can become increasingly difficult. + +‍ Today, we are happy to announce the new [Botkube Argo CD integration](https://docs.botkube.io/configuration/source/argocd/)! This integration enables you and your team to leverage automation to scale and optimize your Argo CD troubleshooting workflow. + +What is Argo CD? +---------------- + +![Image 2: a screen shot of a computer screen showing a number of different devices](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/650e09b69191288d41cf2161_rih56gy96kbqx4UzlDDmVadKW9ieXnfmbXLOwzJiDWgHBDzmW0vG867PZM74YdzH5YkNHY-9F2xaVfJTam8eFpvSgzoB4EX-FxDPzLzqMvKJmSNtSBwIRifp2EctcHW3oeh_ruepqkKpwhfFyDzS5Kc.gif) + +‍ + +[Argo CD](https://botkube.io/integration/argo-cd-botkube-kubernetes-integration) is a Kubernetes controller that oversees the status of all active applications. It can pull updated code from Git repositories and deploy it directly to Kubernetes resources. It enables developers to manage both infrastructure configuration and application updates in one system. + +Why was a Botkube & Argo Connection Necessary? +---------------------------------------------- + +With the new Botkube ArgoCD plugin, users can significantly enhance their Argo CD notifications experience. This plugin offers a streamlined approach to managing platform secrets and notifications, eliminating the need for project-specific configurations, whether it's Kubernetes, Prometheus, Argo, or others. Enabling Argo notifications becomes more straightforward, providing users with an efficient and centralized solution. + +Furthermore, the plugin enhances visibility into the Argo deployment process by consolidating GitHub and Argo events and delivering them directly to the user's configured communication platform, ensuring a more informed and responsive workflow. + +What is Botkube? +---------------- + +Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred collaboration platforms like [Slack, Microsoft Teams, Discord, and Mattermost.](https://botkube.io/integrations) This means you'll gain instant visibility and control over your cluster resources, all without ever having to leave your messaging platform. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. + +Using Argo CD with Botkube +-------------------------- + +![Image 3: a screenshot of a screen showing the status of an application](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/650e09c855b42178c42a1d9b_jOhrHB90gwPhqwSU94v3y1Q7Q2Y_1Ltfap5j-mY6XbgieOkVITkVOoOboVTaVHT55onYtmncvcVt_zMrOQehiIOKbM2unJi5NKvWpXhjN222CbEB31JP_oSxT9QowgHWFcKv0YoK2FvZZvJMwGpET4s.png) + +‍ + +The new [Botkube ArgoCD](https://docs.botkube.io/configuration/source/argocd/) plugin offers a compelling use case for users seeking seamless integration between Argo CD and their preferred communication platforms. With this plugin, users can effortlessly receive real-time notifications from their Argo CD deployments directly in their communication channels. This feature proves invaluable for teams relying on Argo CD for managing Kubernetes workflows within GitHub. Botkube's ArgoCD plugin harnesses Argo CD's native notification system, expanding its functionality by provinteractive notifications for popular cloud-based services like Slack, as well as support for platforms like Discord, which are not covered by Argo CD's default notifications. + +One of the standout benefits of this plugin is its automation of the entire notification system setup, simplifying a traditionally complex process. By configuring the plugin in Botkube, users can save time and effort previously required to define webhooks, triggers, templates, and annotations within Argo CD. + +Additionally, the plugin enhances notifications, allowing users to run commands and access application details conveniently in a slack channel, ultimately aiding in debugging and troubleshooting. Overall, the Botkube ArgoCD plugin enhances the user experience by bridging the gap between Argo CD and their communication platforms, offering a streamlined, efficient, and interactive approach to managing Kubernetes deployments. + +Get Started with Botkube’s new Argo CD Plugin +--------------------------------------------- + +Ready to try it out on your own? The easiest way to configure it is through the [Botkube web app](https://app.botkube.io/) if your cluster is connected. Otherwise you can enable it in your [Botkube YAML configuration](https://docs.botkube.io/configuration/source/argocd). Check our [tutorial](https://botkube.io/blog/getting-started-with-botkube-and-argocd) for step by step instruction on how to get started. + +Once enabled, you can ask questions about specific resources or ask free-form questions, directly from any enabled channel. Find out how to use [the Argo plugin](https://docs.botkube.io/usage/source/argocd) in the documentation. + +We’d love to hear how you are using the new Argo CD plugin! Share your experiences with us in the Botkube [Slack community](https://join.botkube.io/) or [email our Developer Advocate, Maria](mailto:maria@kubeshop.io) and we’ll send you some Botkube swag. + +‍ diff --git a/hack/assistant-setup/content/botkube.io__blog__beginners-guide-to-botkube-plugin-development-how-botkube-plug-ins-can-unify-your-cloud-native-tools.md b/hack/assistant-setup/content/botkube.io__blog__beginners-guide-to-botkube-plugin-development-how-botkube-plug-ins-can-unify-your-cloud-native-tools.md new file mode 100644 index 0000000..2b50bf3 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__beginners-guide-to-botkube-plugin-development-how-botkube-plug-ins-can-unify-your-cloud-native-tools.md @@ -0,0 +1,71 @@ +Title: Beginner's Guide to Botkube Plugin Development: Part 1 + +URL Source: https://botkube.io/blog/beginners-guide-to-botkube-plugin-development-how-botkube-plug-ins-can-unify-your-cloud-native-tools + +Published Time: Mar 30, 2023 + +Markdown Content: +![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) + +Maria Ashby + +Developer Advocate + +Botkube + +This introduction will teach you how Botkube plug-ins can unify your cloud native tools. + +### Table of Contents + +* [Why make a Botkube Plug-in: The Power of CNCF Tools Together](#why-make-a-botkube-plug-in-the-power-of-cncf-tools-together-) +* [How Botkube Plug-Ins Work:](#how-botkube-plug-ins-work-) +* [Conclusion](#conclusion-) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +So you want to make a [Botkube Plug-in](https://botkube.io/integrations), but don't know where to begin? Fear not, because this series has got you covered! In short, Botkube plugins are tools that enhance the Botkube user experience to make it more suited to fit their goals. They provide users with extra features and options to customize their experience. However, to fully utilize Botkube, it is necessary to configure it according to your specific needs. Starting from scratch with only documentation to guide you can be intimidating, which is why I am writing this series to help jumpstart your plug-in development journey regardless of your experience level. With this series, you’ll have everything you need to build your own Botkube Plug-in. + +![Image 2: a diagram showing the different parts of an app](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64259de0f04e131b26b323ab_YDm2BILjPQoWfmfEClCKc4da4Acv3ASayZTaEEEdd27wxMLEb-eWsECh1qpEKoqabyu43YFgDmSULoDFTIwBMCF7ndEFnTzG0bLBSjA1xFx0v_cBNjx8zBD1owLk8IfqA8nK2IiIJ_qtrJcU3dGb-s8.png) + +But first things first, let's talk about why plug-ins are so important. + +**Why make a Botkube Plug-in: The Power of CNCF Tools Together** +---------------------------------------------------------------- + +As a DevOps or platform engineer, your role is to ensure that your team has access to a suite of tools that enable efficient and quality deployments. However, with over 1,178 open-source tools available in the [CNCF Landscape](https://landscape.cncf.io/?organization=kubeshop&selected=botkube) across multiple categories, choosing which tools to use and integrating them into your organization's workflow can be overwhelming. + +![Image 3: a screenshot of the bottube logo](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64259def371cfe07bc0f2b8e_s7cvlLKT1mIpSir81gNynMEUtfKsi34yzhstUPE8tTuzP8sRizuzesbF3elxcr1ynfIKa_fWLqAsX2a0jT9Z52xisGCDxGUlKZACDTlJkmQ7lKOttNSomQgDDiYKJ0yt_mZF2KhHRlSbygHiNiod_3g.png) + +Choosing independent tools that work well together and unifying them to work alongside other collaborative conversation tools can be a daunting task. Furthermore, the lack of established or certified routes for Kubernetes deployment, monitoring, and management can lead to a situation where your tools don't communicate well with each other, which is a significant problem. + +Fortunately, [Botkube](https://botkube.io/) and its plugin system provide an effective solution to this problem. + +Botkube makes it easy to unify all the cloud-native tools into a single platform. As a developer or operations team member, you know that automation is the key to simplifying your workflow and increasing productivity. If you're using Botkube for monitoring and troubleshooting Kubernetes clusters, you're already ahead of the game. But with the [introduction of a plugin system](https://botkube.io/blog/botkube-v017-release-notes) in Botkube v0.17.0, you can take Botkube to the next level with your own custom plugins. + +The plugin system allows anyone to write new plugins for sources and executors, which can be published for other Botkube users to install and use. This means that you can extend the functionality of Botkube to fit your specific needs, making it an even more valuable tool in your toolkit. + +**How Botkube Plug-Ins Work:** +------------------------------ + +![Image 4: a diagram of a basic azure stack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64259e0b4fdb15ca2aa6e839_iKasmcohH7JW9C8d9Y10Y6AM8n1uSpA-HtyxcqE6jxI9XBN53Nott737B5XTDLMGB1nXUnkGPN-fHeNbq4RIbsuy6Kko3LdT9hrdf-YpXukG2kVCCgbSDNvPltY4coW4PmCmXIdeyO0luWUNcDxVk0I.png) + +Botkube's architecture is designed to make it easy for developers and operations teams to interact with APIs and other tools through sources and executors. Think of __sources as the ears of Botkube__ - they listen for events or notifications from any tool that can send them. This means that you can easily integrate any tool that can send events, like [Prometheus](https://botkube.io/integration/prometheus) into Botkube, and have those events sent to communication channels based on the source bindings that you've configured. + +Alternatively, __executors are like the hands of Botkube__ - they're used to run commands from other tools within a chat channel. This means that you can execute commands from your favorite tools, like kubectl or Helm, directly within your chat channel and have the output of those commands returned to the same channel for easy visibility. + +Botkube already comes with a native source for Kubernetes events, which has been part of Botkube since the beginning. But with the release of the new plugin system, you can now add additional sources and executors to Botkube, including helm and Prometheus plugins that we already support. + +**Conclusion** +-------------- + +Now that you understand the importance of Botkube's plugin system and how it works, it's time to start building your own Botkube plugin. In the next blog post, we'll walk through a step-by-step guide on how to build a Botkube plugin from scratch, using a simple example. + +Stay tuned for the next blog post, where we'll dive deep into the world of Botkube plugins and show you how to build one yourself. + +As always, we want to hear your feedback and ideas about Botkube. Help us plan the Botkube roadmap and get the features you’d like implemented. + +There are plenty of options to contact us: + +* [**GitHub issues**](https://github.com/kubeshop/botkube/issues) +* [**Slack**](https://join.botkube.io/) +* or email our Product Leader at blair@kubeshop.io. diff --git a/hack/assistant-setup/content/botkube.io__blog__best-practices-for-kubernetes-troubleshooting-in-multi-cluster-environments.md b/hack/assistant-setup/content/botkube.io__blog__best-practices-for-kubernetes-troubleshooting-in-multi-cluster-environments.md new file mode 100644 index 0000000..311311a --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__best-practices-for-kubernetes-troubleshooting-in-multi-cluster-environments.md @@ -0,0 +1,117 @@ +Title: Troubleshooting K8s in Multi-Cluster Environments + +URL Source: https://botkube.io/blog/best-practices-for-kubernetes-troubleshooting-in-multi-cluster-environments + +Published Time: Jul 20, 2023 + +Markdown Content: +![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) + +Maria Ashby + +Developer Advocate + +Botkube + +As K8s becomes the solution for container orchestration and remote work environments continue to prevail, a new obstacle emerges: remote collaborative troubleshooting. Here are some best practices. + +### Table of Contents + +* [Introduction to Troubleshooting Kubernetes](#introduction-to-troubleshooting-kubernetes) +* [What is Kubernetes Troubleshooting?](#what-is-kubernetes-troubleshooting-) +* [How does Kubernetes troubleshooting work?](#how-does-kubernetes-troubleshooting-work-) +* [What makes troubleshooting multiple Kubernetes clusters so difficult?](#what-makes-troubleshooting-multiple-kubernetes-clusters-so-difficult-) +* [Best Practices for Kubernetes Multi-cluster Troubleshooting](#best-practices-for-kubernetes-multi-cluster-troubleshooting) +* [Some Common Kubernetes Errors](#some-common-kubernetes-errors) +* [Conclusion](#conclusion) +* [CNCF Islamabad and Botkube Webinar](#cncf-islamabad-and-botkube-webinar) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +#### Get started with Botkube Cloud + +Introduction to Troubleshooting Kubernetes +------------------------------------------ + +Managing and troubleshooting multiple Kubernetes clusters comes with many challenges like complexity and coordination. However, there is a strategic approach to Kubernetes troubleshooting across multiple clusters. + +In this blog, we will explore some best practices that can enhance the efficiency and effectiveness of your Kubernetes troubleshooting efforts. I will delve into the benefits of centralizing monitoring, utilizing multi-cluster management features, streamlining command execution, and promoting effective incident response and collaboration. By addressing these challenges and leveraging the right tools, development and operations teams can unlock the full potential of Kubernetes in the cloud-native world. + +What is Kubernetes Troubleshooting? +----------------------------------- + +![Image 2: learn k8s help article on the process for troubleshooting Kubernetes related issues](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64b968a920dcc2ab5ff83fb7_4QTYY_4jwo5E0DeGgXARbgT_xYK4VyNKjg9OGcMmAMJPlaJFDcozwToB_GSkt5bM3rS5IIAFKBwiGFaLzuOrQMqHQoKHoDisEHGJRyZpMjS7yNHRciYG5KN9omOGrR6_AxCx1hKY5ksNqNLg81P24l8.png) + +A diagram of the K8s troubleshooting process from [LearnK8s](https://learnk8s.io/a/fae60444184ca7bd8c3698d866c24617.png) + +‍ + +Kubernetes troubleshooting is the process of identifying and resolving issues that arise within a Kubernetes cluster. It involves diagnosing and resolving problems related to application deployment, networking, resource allocation, configuration errors, and other factors that can impact the stability and performance of a Kubernetes environment. Troubleshooting in Kubernetes is a complex process that often requires a combination of monitoring tools, log analysis, and a knowledge of the Kubernetes architecture. + +How does Kubernetes troubleshooting work? +----------------------------------------- + +Kubernetes troubleshooting involves analyzing logs, examining cluster events, optimizing resource utilization, and ensuring network connectivity. Essential commands like `kubectl logs`, `kubectl describe`, and `kubectl exec` are valuable tools for uncovering and resolving problems within the cluster. By analyzing logs and events, Kubernetes Administrators can gain insights into their app behavior. Network connectivity is verified to maintain communication between pods and services. These techniques and commands aid in efficiently diagnosing and resolving issues, ensuring a smooth and efficient Kubernetes environment. + +What makes troubleshooting multiple Kubernetes clusters so difficult? +--------------------------------------------------------------------- + +Even in a small local Kubernetes cluster, unraveling the root causes of issues can be challenging, with problems hiding in individual containers, pods, controllers, or even components of the control plane. But when it comes to large-scale production environments, these challenges are amplified. Visibility diminishes, and the complexity increases. Engineering teams often find themselves juggling multiple tools to gather the necessary data for diagnosis, and additional tools may be required to address and resolve detected issues. Complicating matters further, Kubernetes is frequently employed in building microservices applications, involving separate development teams for each microservice or collaboration between DevOps and application development teams within the same cluster. + +The complexity of Kubernetes troubleshooting is further compounded by the ambiguity surrounding responsibility allocation. Without close coordination and access to the right tools, the process can quickly become chaotic, resulting in wasted resources and negative impacts on users and application functionality. + +Fortunately, there is a solution to streamline this challenging endeavor: Botkube, a collaborative tool built specifically for Kubernetes users. With Botkube, you can receive and respond to alerts effortlessly within your preferred messaging and collaboration platforms, such as Slack, Microsoft Teams, Mattermost and more. This integration eliminates the need to switch between multiple platforms, granting you immediate visibility and control over your cluster resources. + +Best Practices for Kubernetes Multi-cluster Troubleshooting +----------------------------------------------------------- + +### Centralize Monitoring and Observability + +Efficient troubleshooting across multiple Kubernetes clusters begins with the crucial step of consolidating monitoring and observability information in one centralized location. By doing so, you gain a bird's eye view of your entire infrastructure as data from all clusters is brought together. This comprehensive perspective enables quicker issue identification and streamlined troubleshooting, regardless of the specific cluster involved. Having all the essential information in one place empowers your team to tackle problems more efficiently, saving valuable time and ensuring a smooth troubleshooting process. + +![Image 3: Botkube performing Kubernetes error searches from slack interface](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a70a5bb3210007e280d3f8_Untitled%20design.gif) + +‍ + +Botkube’s high level view of all of your clusters allows you to pinpoint exactly which cluster(s) are in need of help. + +### Incident Response and Collaboration + +Effective incident response and collaboration are critical in multi-cluster environments. Implement solutions that facilitate real-time notifications and seamless communication among team members. By integrating incident response tools with popular collaboration platforms like Slack, Microsoft Teams, and Discord, teams can effectively resolve incidents and improve coordination, reducing downtime and enhancing overall productivity. As an example, Botkube integrates natively with Slack, Microsoft Teams, Mattermost, and Discord – all communication platforms that teams use daily to talk to each other. + +By leveraging incident response and collaboration tools that integrate with familiar communication platforms, teams can establish a streamlined workflow for incident resolution by consolidating incident reporting to specific channels for teams to troubleshoot together, ensuring that issues are addressed swiftly and effectively. Together, these solutions empower teams to work cohesively, minimizing disruptions and maximizing the reliability and stability of their multi-cluster environments. + +![Image 4: AI Kubernetes assistant helps find errors with cluster management or deployment for quick K8s troubleshooting](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64b96a341b5ccb59ffb87637_act-on-events.gif) + +### Establish a Feedback Loop + +To ensure continuous improvement in troubleshooting Kubernetes-based applications across multiple clusters, it is essential to establish a feedback loop. This feedback loop involves gathering comprehensive data about the application's behavior through tools like observability, performance monitoring, tracing, and logging. By providing developers with access to relevant data, they can gain insights into the application's performance and identify potential issues more effectively. This feedback loop enables prompt issue resolution, allowing for continuous enhancements and optimizations. + +### Streamline Command Execution + +Efficiency is key when troubleshooting Kubernetes across multiple clusters. Streamline command execution by leveraging tools that enable you to execute commands simultaneously across all connected clusters. This eliminates the need to perform actions individually on each cluster, saving time and effort. + +### Automate Observability and Delivery Processes + +Automation plays a crucial role in streamlining troubleshooting processes and ensuring the reliability of Kubernetes clusters. By automating the collection, aggregation, and correlation of observability data, such as metrics, logs, events, and traces, teams can significantly reduce the time and effort required for monitoring and managing services. Automated observability processes enable quick identification of anomalies or performance deviations, allowing for proactive troubleshooting and resolution. + +![Image 5: Scrolling through kubectl logs in slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64b9697c82dc01bf31f863b1_automation.gif) + +Some Common Kubernetes Errors +----------------------------- + +* [CreateContainerConfigError](https://botkube.io/learn/createcontainererror) +* [CrashLoopBackOff](https://botkube.io/learn/how-to-debug-crashloopbackoff) +* [OOMKilled](https://botkube.io/learn/what-is-oomkilled) + +Conclusion +---------- + +Troubleshooting Kubernetes-based applications across multiple clusters requires a strategic approach. By centralizing monitoring, utilizing multi-cluster management features, streamlining command execution, and promoting effective incident response and collaboration, teams can streamline troubleshooting processes in multi-cluster environments. Integrating tools and solutions like Botkube can significantly enhance efficiency and ensure reliable performance across all Kubernetes clusters. + +CNCF Islamabad and Botkube Webinar +---------------------------------- + +In conclusion, effective Kubernetes troubleshooting is paramount for maintaining the stability and performance of multiple clusters. If you are looking for a deep dive on this topic, I encourage you to watch the CNCF Islamabad webinar I did in August 2023. I presented more on this topic with a demo of Botkube and answered Kubernetes troubleshooting questions. + +‍ diff --git a/hack/assistant-setup/content/botkube.io__blog__botkube-1-6-release.md b/hack/assistant-setup/content/botkube.io__blog__botkube-1-6-release.md new file mode 100644 index 0000000..6d53191 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__botkube-1-6-release.md @@ -0,0 +1,79 @@ +Title: Rapid Onboarding of Microsoft Teams and Slack + +URL Source: https://botkube.io/blog/botkube-1-6-release + +Published Time: Nov 27, 2023 + +Markdown Content: +![Image 1: a woman with short hair smiling for the camera](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3fb36b4e60920a3b1b2_hPLC9itV8zp-raGDFmvOZMfn2hV8RFcl237qzT8Wa1g.jpeg) + +Kelly Revenaugh + +Developer Relations Lead + +Botkube + +This release marks a milestone in providing a smoother and faster path to Kubernetes monitoring and management with upgraded integrations of Slack and Microsoft Teams. + +### Table of Contents + +* [🚀 Botkube 1.6 Release](#-botkube-1-6-release) +* [What is Botkube?](#what-is-botkube-) +* [Microsoft Teams App: Elevate Your ChatOps Experience](#microsoft-teams-app-elevate-your-chatops-experience) +* [Cloud Slack for Everyone: Swift and Effortless](#cloud-slack-for-everyone-swift-and-effortless) +* [New Onboarding: Lightning-Fast Kubernetes Monitoring Setup](#new-onboarding-lightning-fast-kubernetes-monitoring-setup) +* [Various Bug Fixes and Small Improvements](#various-bug-fixes-and-small-improvements) +* [Upgrade Today](#upgrade-today) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +#### Get started with Botkube Cloud + +🚀 Botkube 1.6 Release +---------------------- + +The latest version of Botkube has arrived. v1.6 of Botkube is packed with exciting features and enhancements that elevate your Kubernetes experience. This release marks a milestone in providing a smoother and faster path to Kubernetes monitoring and management with upgraded integrations of Slack and Microsoft Teams. Let's dive into the highlights. + +What is Botkube? +---------------- + +[**Botkube**](http://app.botkube.io/) is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. This means you'll gain instant visibility and control over your cluster resources, all without ever having to leave your messaging platform. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. + +_If you have any feature requests or bug reports, reach out to us on_ [**_Slack_**](http://join.botkube.io/) _or submit a_ [**_Github issue_**](https://github.com/kubeshop/botkube/issues) + +Microsoft Teams App: Elevate Your ChatOps Experience +---------------------------------------------------- + +#### 🌐 New Botkube Integration for Microsoft Teams + +One of the standout features in v1.6 is the enhancement of our [Microsoft Teams integration](https://docs.botkube.io/installation/teams/). We’ve overhauled the Teams experience to include all of the well-loved features available in Botkube’s Slack experience – real-time notifications from Kubernetes clusters, interactivity to execute commands, collaborative troubleshooting, and more. Now, you can seamlessly bring Kubernetes into your Microsoft Teams environment, unlocking powerful ChatOps capabilities. + +We’ll have more announcements and tutorials this week. In the meantime, [read the thorough documentation](https://docs.botkube.io/installation/teams/) or [reach out to our product leader, Blair](mailto:blair@kubeshop.io), for onboarding assistance or feedback. We’d love to hear about your experience and how we can improve. + +Cloud Slack for Everyone: Swift and Effortless +---------------------------------------------- + +#### 🚀 Revolutionizing Slack Integration for Botkube + +Say goodbye to the manual hassles of setting up Socket Slack apps with complex webhooks and API keys. [Botkube 1.6 brings Cloud Slack](https://docs.botkube.io/installation/slack/cloud-slack) for everyone. In under 3 minutes, you can now establish a connection effortlessly. Botkube’s Developer Advocate Maria will guide you through the process in a [quick setup tutorial](https://botkube.io/blog/get-botkube-running-in-under-3-minutes-the-new-slack-app). Get ready for a smoother, more intuitive Slack integration experience! + +New Onboarding: Lightning-Fast Kubernetes Monitoring Setup +---------------------------------------------------------- + +#### 🚀 Rapid Onboarding for Microsoft Teams and Slack + +Time is of the essence and we've heard you! Our new onboarding process ensures that you can kickstart Kubernetes monitoring in a flash. Whether you're diving into Microsoft Teams or Slack, the setup is now quicker and more intuitive than ever. Maria will walk you through the process, ensuring you have your Kubernetes monitoring up and running in no time. + +Various Bug Fixes and Small Improvements +---------------------------------------- + +#### 🔧 Fine-Tuning for a Seamless Experience + +In our commitment to excellence, [we've squashed bugs and made several small but impactful improvements](https://github.com/kubeshop/botkube/releases/tag/v1.6.0) to enhance the overall stability and performance of Botkube. Your experience is our priority and we're dedicated to delivering a platform that exceeds your expectations. + +Upgrade Today +------------- + +The Botkube 1.6 release is a leap forward in simplifying Kubernetes management and collaboration. Embrace the power of ChatOps in Microsoft Teams, enjoy Cloud Slack with ease, and experience the swift onboarding that gets your Kubernetes monitoring up and running in record time. + +[Visit our documentation](http://docs.botkube.io/) for detailed instructions on upgrading to Botkube 1.6 and unlocking the full potential of Kubernetes management and monitoring. Your journey to streamlined collaboration starts now! diff --git a/hack/assistant-setup/content/botkube.io__blog__botkube-5-essential-devopstasks-to-automate.md b/hack/assistant-setup/content/botkube.io__blog__botkube-5-essential-devopstasks-to-automate.md new file mode 100644 index 0000000..a472ad3 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__botkube-5-essential-devopstasks-to-automate.md @@ -0,0 +1,147 @@ +Title: Optimizing K8s Management with Botkube: 5 Essential DevOps Tasks to Automate + +URL Source: https://botkube.io/blog/botkube-5-essential-devopstasks-to-automate + +Published Time: Jan 16, 2024 + +Markdown Content: +![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) + +Maria Ashby + +Developer Advocate + +Botkube + +Check out these five key Kubernetes tasks that Botkube can optimize and automate! + +### Table of Contents + +* [Task 1: Monitoring and Alerting Kubernetes Clusters](#task-1-monitoring-and-alerting-kubernetes-clusters) +* [Task 2: Resource Scaling](#task-2-resource-scaling) +* [Task 3: Kubernetes Log Management](#task-3-kubernetes-log-management) +* [Task 4: GitOps Workflows](#task-4-gitops-workflows) +* [Task 5: K8s Configuration Management](#task-5-k8s-configuration-management) +* [Conclusion](#conclusion) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +Kubernetes has greatly changed the DevOps space and how we deploy applications. While it offers many powerful features, it also introduces many complexities around managing Kubernetes clusters. Keeping these clusters running smoothly, securely, and reliably requires constant attention and expertise. To address these challenges and ensure efficient management of clusters, Botkube offers a solution. [Botkube](http://app.botkube.io/) is a collaborative Kubernetes troubleshooting and monitoring tool designed for both DevOps experts and developers who may not be Kubernetes experts. Botkube helps teams quickly respond to issues by sending timely alerts about what's happening in their Kubernetes environments. It's not just about alerts though; Botkube also lets teams automate responses, run Kubernetes commands, and follow Kubernetes best practices. Plus, it integrates with popular communication platforms like Slack, Microsoft Teams, Discord, and Mattermost, making it a valuable asset for any team working with Kubernetes. + +In this blog post, we will explore how Botkube improves Kubernetes management. We will dive into five key Kubernetes tasks that Botkube can optimize and automate. + +Task 1: Monitoring and Alerting Kubernetes Clusters +--------------------------------------------------- + +![Image 2: a screenshot of an error message on a website](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a0710c644fa0ebb76293d8_DJDInRt7FR5LTwmVqnG4WM9OBv7o9_FmRKnG5sA9F-UU-kqljSWEtByVtVP37PhGh2wq7eezjjCNzzjlYyIOyqlAfEMDA6UdSCs5AUJLKfcy3qqXg8cEOoJTdi4S-5Z_Otd9bgcKLoeY5gEcWNa0D4U.gif) + +[Monitoring](https://botkube.io/learn/how-botkube-makes-monitoring-kubernetes-easy) is the foundation of Kubernetes management. In a Kubernetes environment, real-time insights into resource utilization, application behavior, and system health are crucial. + +Botkube can automate your monitoring setup, transforming how you manage incoming queries and requests. It intelligently categorizes and responds to various types of queries based on their specific channel and frequency. This feature ensures a more efficient and streamlined handling of all incoming queries, enhancing your team's responsiveness and productivity. + +Additionally, Botkube incorporates proactive monitoring capabilities into your chat platform by seamlessly integrating with [Prometheus](https://botkube.io/integration/prometheus), a popular metrics tool for Kubernetes. + +This integration means you're not just responding to issues as they arise but are also able to actively monitor and preemptively address potential concerns in your Kubernetes environment. The automation of these processes significantly reduces manual oversight, allowing your team to focus on more strategic tasks. + +Manually setting up Prometheus alerts in Slack requires creating a PrometheusRule resource to define alert conditions in a YAML file. Following this, you must configure Alertmanager to route alerts to Slack channels based on routing rules, grouping, and timing settings, and establish a connection to Slack using a webhook. + +Botkube simplifies this process significantly. It allows you to bypass these steps by entering the Prometheus endpoint and selecting your preferred alert states and logging configuration. Additionally, while manual setup limits integration options to Slack, PagerDuty, and email, excluding MS Teams and Discord users, Botkube offers a comprehensive solution. + +‍ + +![Image 3: a screenshot of the settings page in a google chrome browser](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a6ef19dff9832e1e6921af_qoSGg0E14xJDRtOKrTN04Yhis2esc8cZSyYbg7BJR2-DBeeLcV5Ppkj3BtgQ83MDpA0EQEzMni_x4nqyaRpq7eNrKCQtO0JFO1_mQFsqV9i8vMfVfvBN891-Y3ulmFm2K-SYzt7wg4w-oYK7YqGG-x8.png) + +‍ + +Botkube excels at automating monitoring tasks by delivering real-time alerts and notifications, which empowers DevOps teams to respond quickly and reduce downtime. This streamlined approach enhances operational efficiency and flexibility in managing alerts and notifications. + +Task 2: Resource Scaling +------------------------ + +Resource scaling in Kubernetes can be a challenging endeavor, especially in response to fluctuating workloads. Manually adjusting resources can be time-consuming and error-prone, leading to inefficiencies. Botkube offers a valuable solution for automating resource scaling within a team. It simplifies access to Kubernetes clusters by providing actionable notifications and the ability to execute kubectl, helm, and GitOps commands directly from a shared team channel. + +![Image 4: a screenshot of a message in a google chat](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a6ef180190c3682238b922_9kalnKKcBw_q5sdluVLbLDy9ch5mY-RxHKxDa6edtIj5fIITzJz8lL3BRAaSMnldHACqcEHteUaFeKIN4RYkB-uGXRCISEMHlvM2crujb2yRfN2_QtNFXUISA3-YfABPLl5_t6LcMKwsO0a39lZXKl4.gif) + +‍ + +One example of this is the ability to [automate the process of creating GitHub issues](https://botkube.io/blog/build-a-github-issues-reporter-for-failing-kubernetes-apps-with-botkube-plugins) for failing Kubernetes resources such as jobs, deployments, statefulsets, and pods. This plugin can create [GitHub issues](https://docs.botkube.io/next/configuration/source/github-events/) that include Kubernetes-specific information, making debugging more efficient. The key advantage is that it eliminates the need to connect to your cluster via a terminal, install and run kubectl commands, or manually copy and paste information into a browser. Botkube offers an efficient and user-friendly solution to the challenges of resource scaling in Kubernetes. + +Task 3: Kubernetes Log Management +--------------------------------- + +![Image 5: a screenshot of the settings for a twitch channel](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a6ef18dc6fd8090139fc6b_ltpBkuCO8q4U1VzRan20ITCkj1pTWlbAT2BUN4o_sYYHZX7WViTLuhpvPI4LNAoE16dzT8UrUqiTzQQ1D4OnCM9eMV4Vip8dzv9zFVL0SHZRm_GAg0SmmKKZvJxIqFZBkoPMZr6HV7Q1OgpIu9AO8XI.png) + +‍ + +Effective l[og management](https://botkube.io/learn/kubernetes-audit-log-best-practices) is essential to maintaining and troubleshooting Kubernetes clusters. By automating the collection and analysis of logs, Botkube centralizes these critical data points, making them easily accessible for quick analysis. This centralization offers a comprehensive view of all events and errors within the Kubernetes environment, significantly easing the troubleshooting process. With Botkube, you gain enhanced visibility into your cluster's operations, simplifying debugging and accelerating issue resolution. Users can execute `kubectl logs` or `kubectl describe` commands directly from their chat window using simple drop-down menus. This integration not only makes the process more efficient but also halves the time typically spent on log analysis. + +This scenario illustrates Botkube's log management functionality: when a response message exceeds the messaging platform's size limit, Botkube efficiently handles this by uploading the response as a text file. This is a typical workflow within Botkube, showcasing its adaptability and ease of use in managing extensive data. + +‍ + +1. Start by listing the pods using the command @Botkube kubectl get pods -n kube-systemget\_pods + +![Image 6: a screenshot of a web page showing a number of different types of data](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a6ef187b627284d396b7f9_3Y1COCukHpcz9VD42EBi8QyYQOpSdosArtmifHwEUnGSBt_4qUaebUOMUi26jAgczZtLXDr8JQZSZUsGHeOGVBGejyQUF6GbsYzpHTsWoMAxZvyLiIrLcGjbyfl0hrkxh5pLO4nxnlJgbsQYhKKU_hg.png) + +2. Next, to access the logs for a specific pod, such as Traefik, use the command @Botkube kubectl logs -f traefik-df4ff85d6-f2mkz -n kube-system. + +![Image 7: a screenshot of a web page showing the results of a search](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a6ef1886f49705800e9d7b_daM1ilw9S5iqc3xAC9xmotCzuqcyJhOB9QBW7xDk1DZPy_E05t5U0CZANC-0hQrUIVIUOQYPpIVNUsYak46OEiKjo0JVCrLKbh73xreULqHIpcK5dHc-h3fS9Zp6JOoNGXqUNr_VfO5cglMsPvwGGsI.png) + +‍ + +3. If the output is too large, Botkube will upload the response as a file in a reply thread. You can view the complete output by expanding this thread. + +‍ + +4. For more specific log details, such as filtering for log lines containing the word "Configuration," enter "Configuration" into the Filter Output input box and hit enter. Botkube will then present you with the filtered log results. + +![Image 8: a screen shot of a web page with a text box and a button](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a6ef187b398bc7569516e9_zF_0o6ZVI24nmlcit4DYR0Pi6Pev79rAgvM-RMuxApGnmhBQQLdkb8795ObG5Ez905YtVhUwT5Q3t6g5Jc2I5OQU_E8QB_E9VeGfyT0yiDd21YQuTnwQdPzdOsrg-gcoiq8z2FoxyR0NNq_kobJ-sKE.png) + +‍ + +Task 4: GitOps Workflows +------------------------ + +![Image 9: a screen shot of a screen with a message on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64e694bca6bd600e8a7e88dd_flux-diff-1.gif) + +‍ + +Implementing [GitOps](https://botkube.io/blog/enhancing-gitops-workflows-with-botkube) practices in Kubernetes is crucial for engineering teams as it automates the management of Kubernetes resources through synchronization with Git repositories. This approach fosters collaboration, facilitates version control, and simplifies issue tracking within the team. Botkube plays a significant role in enhancing GitOps workflows by reducing manual intervention and providing real-time monitoring and collaboration capabilities. + +‍ + +A notable feature is the [Botkube Flux plugin](https://botkube.io/blog/introducing-botkubes-integration-with-flux), which streamlines the integration of Kubernetes clusters, GitHub repositories, and the Flux CLI. This plugin empowers users to execute Flux CLI commands directly from their preferred communication platforms, ensuring mobile-friendly interactivity. It automates tasks like monitoring GitHub pull requests, notifying users about new pull requests, and rendering event-aware buttons for running diff reports. Without the plugin, these tasks would involve multiple manual steps, elevating the risk of errors and hindering productivity. + +‍ + +In summary, Botkube's GitOps plugins bridge the gap between GitOps tools and communication platforms, offering an efficient, interactive, and user-friendly approach to managing Kubernetes deployments. + +Task 5: K8s Configuration Management +------------------------------------ + +![Image 10: a screenshot of a web page with a file output highlighted](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a6ef1841f8fcbf64004e51_0gkwjMX-mrCQfN7REuJLBmEOCIt29ZaMaWUSKcBpvLxMqUjCK88hnlNQDMDHiETnASkpYW9n30pDi-7gOAvkvBAukHSx7IySsAd2av4upfFdN2DbM1hBJQ4torAVEu7Ydc53GxtSrmTBa6I5pFImIUs.png) + +‍ + +Managing Kubernetes configurations can be challenging, especially when done manually. Traditional methods involve navigating through multiple interfaces and complex command lines, which can be time-consuming and prone to errors. This complexity often poses a significant hurdle in efficiently managing Helm releases. + +‍ + +[Botkube's Helm executor plugin](https://botkube.io/learn/helm-charts) enhances this process.This plugin allows users to run Helm commands directly from their chat interface. This integration streamlines Kubernetes configuration management, making it more accessible and less error-prone compared to manual methods. + +![Image 11: a screen shot of the settings for a game](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a6ef185ae0f9b8f277eca9_dMnDLc0lomaKWLSqQX2mtc8ozegyDiwz0vvdpvZRw0Y6BMDIidfU_tYNbb0nsO5JczHDgAyUU_eoOdTsTLAsAVelHY6cWwtdB8OaP9wkIby5oV2pAohoonjFF6y-rCOjyuPrA210xtL6dL97M3aCESM.gif) + +‍ + +With the Botkube Helm plugin, users can easily view, manage, and roll back Helm releases. This is helpful for application developers, who can quickly check the status of their releases without switching between different tools. By integrating Helm command functionalities into common communication platforms, Botkube not only simplifies Kubernetes management but also aligns it with contemporary workflows, making the entire process more efficient and user-friendly. + +Conclusion +---------- + +Botkube can automate a variety of Kubernetes tasks and can enable your DevOps team to build a more productive workflow. Each automation demonstrates Botkube's ability to simplify complex processes, from automating monitoring setups and streamlining log management to enhancing GitOps workflows and improving configuration management with its Helm plugin. Botkube not only addresses the manual challenges inherent in these tasks but also integrates these functionalities into familiar communication platforms, making Kubernetes management more accessible, efficient, and aligned with modern collaborative practices. + +### Getting Started with Botkube Today + +Try it for yourself! Follow our step-by-step [tutorial](https://botkube.io/blog/maximize-your-devops-teams-efficiency-with-botkube-and-microsoft-teams) to set up Botkube using our web app. We're excited to hear how you use Botkube. Create a support ticket directly in the dashboard, share your stories with us in the [Botkube Slack community](https://join.botkube.io/).We’ll even send you some cool swag as a thank you. diff --git a/hack/assistant-setup/content/botkube.io__blog__botkube-open-source-to-cloud-migration.md b/hack/assistant-setup/content/botkube.io__blog__botkube-open-source-to-cloud-migration.md new file mode 100644 index 0000000..624f28a --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__botkube-open-source-to-cloud-migration.md @@ -0,0 +1,94 @@ +Title: Seamlessly Migrate from Botkube Open Source to Cloud + +URL Source: https://botkube.io/blog/botkube-open-source-to-cloud-migration + +Published Time: Aug 09, 2023 + +Markdown Content: +![Image 1: a woman with short hair smiling for the camera](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3fb36b4e60920a3b1b2_hPLC9itV8zp-raGDFmvOZMfn2hV8RFcl237qzT8Wa1g.jpeg) + +Kelly Revenaugh + +Developer Relations Lead + +Botkube + +With our new CLI migration tool, current open-source users are able to migrate their data and configurations over to Botkube Cloud in minutes. + +### Table of Contents + +* [Differences Between Botkube Open Source and Botkube Cloud](#differences-between-botkube-open-source-and-botkube-cloud) +* [What is the Botkube CLI?](#what-is-the-botkube-cli-) +* [How to Migrate Your Existing Botkube Account to Cloud](#how-to-migrate-your-existing-botkube-account-to-cloud) +* [Give it a try!](#give-it-a-try-) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +#### Get started with Botkube Cloud + +With our latest release, we’ve made transitioning from the open source version of Botkube to our Cloud version even easier. [Botkube Cloud](http://botkube.io/) is built on top of our open source core and gives users even more benefits – including audit and event logs to track changes in your Kubernetes clusters, an easy-to-use visual dashboard to configure your settings, multi-cluster management, and much more. + +With our new [CLI migration too](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud)l, current open-source users are able to migrate their data and configurations over to the Cloud version of Botkube with a few simple steps. + +Differences Between Botkube Open Source and Botkube Cloud +--------------------------------------------------------- + +We believe that both the open source version and cloud version of Botkube help supercharge Kubernetes teams’ technical workflows with seamless alert consolidation, monitoring, and troubleshooting – all from the same communication platforms that teams use every day. + +Botkube was developed in 2019 and has helped hundreds of teams collaborate and take on challenging Kubernetes-related tasks each day. We’ve create Botkube Cloud for teams that have growing multi-cluster environments and/or want to take of advanced features, not available in our open source version. + +Here are some of the highlights of Botkube Cloud:**‍** + +**Easy configuration and installation** + +Botkube Cloud makes it easy to configure and install Botkube in a new Kubernetes cluster. Before Botkube Cloud, users had to manually install Botkube with a YAML file and update their Helm charts manually for each configuration change. To install with Cloud, just create an instance in the web app, then configure your communication platforms and Botkube plugins. You'll get an installation command that you can copy and paste to install Botkube. Once installed, Botkube will synchronize its configuration with the cloud and any changes you make in the web management interface will automatically be pushed to the cluster.**‍** + +**Multi-cluster management** + +![Image 2: a screen shot of a web page showing a list of items](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64d5072717f5862f1c0ba90e_64385d9ea0e4ca059b5a7a1d_Botkube.png) + +Botkube Cloud makes it easy to manage Botkube in multiple Kubernetes clusters. Previously, if users wanted to use Botkube executors (e.g. kubectl commands) and have multiple Kubernetes clusters, users needed to create and install a Botkube Slack app for each cluster. + +Today, with Botkube Cloud, you can see the status and manage configuration for all of your clusters in one place in the web hosted app. When adding new clusters, you can copy an existing configuration to get going even faster.**‍** + +**Advanced Multi-Cluster Slack bot** + +The Botkube Cloud Slack bot can be installed in your Slack workspace with a single click. It allows you to see your Slack channels in your instance configuration, ensure the Botkube bot is invited to the correct channels, and select which channels to use with Botkube plugins. It uses Botkube cloud services to route executor commands to the correct Kubernetes cluster so you can control multiple clusters from one Slack channel. This solves the multi-cluster problem that many open source users encountered previously.**‍** + +**Audit and Event logs** + +![Image 3: a screen shot of a web page showing a list of items](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64d507420a0b1ce9ecb2d0dd_64385e6998cfac2dfc8d887f_Event%20and%20Audit%20Logs.png) + +Botkube Cloud collects and aggregates audit and event logs from all of your Botkube-enabled Kubernetes clusters. All Botkube notifications are stored as events and any Botkube executor commands are stored as audit log entries. Logs can be filtered and sorted and you can see what activity is happening in your clusters, correlate events, and find the root cause of problems that arise.**‍** + +What is the Botkube CLI? +------------------------ + +[Botkube CLI](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud) is a tool for installing and migrating Botkube installations from an open source instance to a Botkube Cloud instance. + +Botkube CLI is the best way to do an interactive installation of Botkube. The botkube install command runs the installation process and reports the progress and any errors back to you immediately. For automated installations using CI or GitOps tools, you can still use Helm to install the Botkube Helm chart unattended.**‍** + +How to Migrate Your Existing Botkube Account to Cloud +----------------------------------------------------- + +If you are using Botkube in your Kubernetes cluster with local configuration, the CLI provides a simple on-ramp to the advanced Botkube Cloud services. Migrating to the Cloud version of Botkube is extremely easy and only takes a few commands! + +Here's how to [migrate your Botkube instance](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud): + +1. Create a [Botkube Cloud](https://app.botkube.io/) account + +2. Install the [Botkube CLI](https://docs.botkube.io/cli/getting-started) + +3. Run `botkube login` to [authenticate](https://docs.botkube.io/cli/getting-started#first-use) your CLI + +4. Run `botkube migrate` to [move your configuration](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud) to the cloud and connect your Botkube installation automatically + + +Give it a try! +-------------- + +**‍**We’re here to help! If you need some help about migrating over, please reach out to us on the Botkube Slack workspace. Our team is happy to lend a hand as you make the transition over and answer any questions you may have. We’d love for you to try out the advanced features that we’ve developed over the past few months to make managing and troubleshooting your Kubernetes clusters as painless as possible. + +Existing Botkube users can take advantage of new features like the interactive control plane and configuration dashboard immediately with the Free tier after migrating. New Cloud users also receive the Pro tier for free with a 30-day trial period (no credit card required!). If your team is looking to upgrade to the Pro or Enterprise tiers, we are giving a special discounted pricing to existing Botkube users. Please reach out to our [project leader, Blair](mailto:blair@kubeshop.io), to inquire about the discount. + +Hope you enjoy the new features. diff --git a/hack/assistant-setup/content/botkube.io__blog__botkube-socket-slack-getting-started.md b/hack/assistant-setup/content/botkube.io__blog__botkube-socket-slack-getting-started.md new file mode 100644 index 0000000..ffef404 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__botkube-socket-slack-getting-started.md @@ -0,0 +1,229 @@ +Title: Getting Started with the New Botkube Slack App + +URL Source: https://botkube.io/blog/botkube-socket-slack-getting-started + +Published Time: Dec 05, 2022 + +Markdown Content: +![Image 1: a man with a beard wearing a black shirt](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) + +Blair Rampling + +Product Leader + +Botkube + +The new Botkube Slack app provides more great interactive features and better security when compared to the legacy Botkube Slack app. + +### Table of Contents + +* [Installing the Slack App in your workspace](#installing-the-slack-app-in-your-workspace) +* [Botkube Slack App Tokens](#botkube-slack-app-tokens) +* [Invite Botkube to a channel](#invite-botkube-to-a-channel) +* [Installing Botkube](#installing-botkube) +* [Explore the New Slack App](#explore-the-new-slack-app) +* [What Could Go Wrong?](#what-could-go-wrong-) +* [Feedback - We’d Love to Hear From You!](#feedback-we-d-love-to-hear-from-you-) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +The [new Botkube Slack app](https://docs.botkube.io/installation/slack/) provides more great interactive features and better security when compared to the [legacy Botkube Slack app](https://docs.botkube.io/0.15/installation/slack/). We announced the new socket mode Slack app in the [Botkube v0.14.0 release notes](https://botkube.io/blog/botkube-v014-release-notes#new-botkube-slack-app). The new Slack app has some specific requirements and a new installation process, so let's have a look at how to get started with the most modern [ChatOps tool for Kubernetes!](http://botkube.io/) You can also use the Botkube [installation documentation](https://docs.botkube.io/installation/slack/) to get started, but this post is to give you more context about the changes to the new app and some caveats to watch out for. + +This blog post assumes that we're starting a completely new Botkube installation. + +Requirements: + +* A Slack workspace where you have permission to install apps and create channels + +* A Kubernetes cluster where you have access to install Botkube + +* Working kubectl and helm installation + + +Multi-cluster caveat: The architecture of socket-based Slack apps is different from the older Slack app. If you are using Botkube executors (e.g. kubectl commands) and have multiple Kubernetes clusters, you need to install a Botkube Slack app for each cluster. This is required so that the Slack to Botkube connections go to the right place. We recommend you set the name of each app to reflect the cluster it will connect to in the next steps. + +Installing the Slack App in your workspace +------------------------------------------ + +Let's go through the initial steps for installing the socket-based Slack app itself in your Slack workspace. + +1. Open the [Slack App Console](https://api.slack.com/apps) and click Create an App or Create New App. + +2. Click "From an app manifest" as we will use the Botkube-provided manifest for the new app. + + +![Image 2: Kubernetes Deployment Setup wizard](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/638defd5bd91dbba0faccc21_9xHsAYF1sDUzf92VzItiVmpg6pPfW8mLBma5StF_-j8ZfzyqSgBnPbqpPnTLGLzn2nCGy_wEPBw9E5dpwbZBNXbKm0jSWixj-ufmFk-7JtqPw5TXhXO4a4LpwXLVJgh2pRe2U-bx0KhPJoUCB5EkdhT20QMTg4VVQvty5IqPCG3ITKmfL_f1nNdZQ_hlcQ.png) + +3. Select the workspace into which you want to install the app and click Next. + +4. You can find the latest app manifests [in the Botkube documentation](https://docs.botkube.io/installation/slack/#create-slack-app). There are three different YAML manifests available. The manifests vary based on whether you want to use Botkube in a public Slack channel, a private channel, or both. This is one of the new improved security features that limits the scope of the token that Botkube uses. This is an example of the manifest for both public and private channels: + + +display_information: +name: Botkube +description: Botkube +background_color: "#a653a6" +features: +bot_user: +display_name: Botkube +always_online: false +oauth_config: +scopes: +bot: +- channels:read +- groups:read +- app_mentions:read +- chat:write +- files:write +settings: +event_subscriptions: +bot_events: +- app_mention +interactivity: +is_enabled: true +org_deploy_enabled: false +socket_mode_enabled: true +token_rotation_enabled: false + +If you are using Botkube with multiple Kubernetes clusters as mentioned in the earlier caveat, set the name and description fields to something specific to the cluster this app will manage. This will make it clear in Slack itself which bot maps to which cluster. Paste this YAML into the app manifest dialog and click Next. + +![Image 3: Kubernetes Manifest file for Botkube](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/638defd59be2c7f0b4231ab2_rT70Rd59URrbNTS0SF4iTHlKyh9YkqZylD9a_vi_umpJJghbKTkrlq4dc1SUb1JmLa-TvD-Zv0fgQZiAdNgv--_ptj2Jf7vwNDxX20KMin3O80Xrjyl1BzDCM8Sfe2MXizEODQqKb1Cuz-Rlz_69CzhYKRhFr12eYAXezbr5YnRkjw_k6VUft--i1led9Q.png) + +5. You now have a chance to review the app settings. Click the Create button. + +6. Click the Install to Workspace button to add this newly created app to the Slack Workspace. + + +![Image 4: Slack Webhook API for building Slack Bots](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/638defd53a3620a880c1429d_2lBQzqtvc7o-h5cHB7Hp-qyFgGwlqldNSxf1lHVyYUDUwGBXgpmBEPHOH5xj_bEQnudTJx6d1agQgl6EZoptfPbrgxwWU3hwn-C-0-23ImODUiph_cvEFxMcMPEjewJEeL8Gvj-NNj_ysyTstwz8fFB5jtyGIy6-dmpTM1v8D097Tx6VQ12Q-mumwzFGhA.png) + +7. Review the permissions and click Allow. The app is now installed in your Slack workspace. + +![Image 5: Allow Botkube permissions into Group Channels](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/638defd5d46fe3cc1ec655d1_kR2N0u3ZQlfHarVS2aC5lfyerRXjRmE25noMdLH2yp3l1Rd8gNeplU-JbQ4aak4LlhHk-H7-G3nxO8CXJyD5eH0mhy5-69gJsjwSUJaWeHijGc94iFse5AYCKYEG9-fxZ5Q57C9JUcPTfRsqiiPpBzU4Bc_7MlJo2lzKrnBhtudCygDS0M35okbc39reEg.png) + +Botkube Slack App Tokens +------------------------ + +Now that the Slack app is installed in your workspace, you can proceed to installing Botkube in your Kubernetes cluster. First, you need two tokens, a bot token and an app-level token. This is another additional security measure in the new Slack app. You can see details on these token types in the [Slack documentation](https://api.slack.com/authentication/token-types). You will use these tokens in the Botkube installation process. + +1. From the Slack app page where you left off after installing the app in your workspace, select OAuth & Permissions in the left navigation bar. + +2. Copy the Bot User OAuth Token shown here. + + +![Image 6: Oauth Tokens for Slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/638defd57f6d2658565c2802_EbTpqUY7Kxtxi7pDnIVQREtoVR7lLKJaHYlFSo5Ald7PPzcwWuoNxhTIfjSu5b8on04-YKAtxwuwBPSAlO-MBAGNkM9RsjYLb-D9prje8FoOORshIpi3AUvnyPP9aFj08weq-EjK0bMLtb_II93-zftUqceLGV3SropKhaNaRckmI7UHx3BMPSpyU0JhSQ.png) + +3. Click Basic Information in the left navigation bar. + +4. Scroll down to the App-Level Tokens section and click the Generate Token and Scopes button. + +5. Give the token an appropriate name and click Add Scope. + +6. Select the connections:write scope, then click the Generate button. + + +![Image 7: Generating app token for custom Slack Bot](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/638defd57787389c7b4d6eac_Wl7cvk72vCB_r0giRxWLTQlmew8rmPFkFTZUaj7urPf2C4LM_YaVuO5XrDXOl9Ql58cOrnQT3LiDl4dcY0PjyIUWHivxBlIsTOsWdYX4un0JJaI8DIQfIxOfTHjVxD50Yk9QaLTQ_zlbcmhdZzjZN_1-4FSFZCYzO8k8N1uLxDQRcIXRZZIAMLFQJuG5iw.png) + +7. Copy the created token and click Done. + +Invite Botkube to a channel +--------------------------- + +Now that everything is set up for the Slack app, you need to invite the Botkube bot to a Slack channel. This is the channel that you will use for notifications and command execution and is required for the Botkube configuration before it is installed in Kubernetes. + +You should see a new Slack bot in your workspace under "Apps" with the name that you specified in the manifest. You can create a new Slack channel or use an existing one. Whether the channel is public or private, make sure that you used the correct manifest earlier when creating the app. If the wrong manifest was used you will see error messages in the Botkube logs about the scope. + +Invite the bot to the channel. The easiest way to do this is to open the Slack channel and send a message to _@botkube bot name_. You will be prompted to add the bot to the channel, click the Add to Channel button. + +![Image 8: Adding Botube to your cluster chat channel](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/638defd5bd91db676aaccc2a_5FVGjg5gJZRQdEsdM2zokGiw_bH5m2tUJm100sy1unbpCAwupyN2hYkXLc21-emgPzST00zRg5srK_eQXKsJ_X8xnBRe4tHcyCnvH97uePNhnRt4TA2B6y0sqr-Um2-V1V9U-mJcpFvuPxo5LzH3kLBMnSbHWnycZ6BTSNb7e9issQ2kcAwLv6oue8ePUg.png) + +Installing Botkube +------------------ + +We now have everything we need to configure and install Botkube. We will use helm to install it in a Kubernetes cluster. First, configure some environment variables that we will pass to the `helm install` command. + +The Slack app bot token from earlier: + +`export SLACK_API_BOT_TOKEN="xoxb-{botToken}"` + +The Slack app-level token from earlier: + +`export SLACK_API_APP_TOKEN="xapp-{appToken}"` + +The cluster name that will be used when interacting with this instance of Botkube. Notifications and other interactive commands will use this name to reference this cluster: + +`export CLUSTER_NAME={cluster_name}` + +Set to true to allow execution of kubectl commands, false to make this bot instance for event notifications only: + +`export ALLOW_KUBECTL={allow_kubectl}` + +Specify the Slack channel name where you invited the bot earlier. Make sure you do not include the # in the channel name: + +`export SLACK_CHANNEL_NAME={channel_name}` + +Now that those five environment variables are set, make sure you have the Botkube helm repository configured: + +`helm repo add botkube https://charts.botkube.io` + +`helm repo update` + +Now you can simply run the helm install command shown here, or copy from the [documentation](https://docs.botkube.io/installation/slack/#install-botkube-backend-in-kubernetes-cluster). Note that this installs version v0.16.0 of Botkube which is the latest version as of this article: + +helm install --version v0.16.0 botkube --namespace botkube --create-namespace \ + +--set communications.default-group.socketSlack.enabled=true \ + +--set communications.default-group.socketSlack.channels.default.name=${SLACK_CHANNEL_NAME} \ + +--set communications.default-group.socketSlack.appToken=${SLACK_API_APP_TOKEN} \ + +--set communications.default-group.socketSlack.botToken=${SLACK_API_BOT_TOKEN} \ + +--set settings.clusterName=${CLUSTER_NAME} \ + +--set executors.kubectl-read-only.kubectl.enabled=${ALLOW_KUBECTL} \ + +botkube/botkube + + +If everything goes according to plans, you will see Botkube start up in the Slack channel and print the initial interactive help menu. + +![Image 9: Kubernetes Alerts now actively alerting Slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/638defd53a3620ccfbc1429e_T_WAEBM055UezMigtRJmb49_MhQocCrlbgee7nW_ekbsIKvexG3KzQrjn9gUsJkbOYCGPhanm9mYriXQu0JaDrB4Pr7AsQdg3xQfLqLB6Qi1gLRay8uSRfJGke15DOmfBFWoCL9xGQTjBdi50CRU4z_thYxXVS3mASf-cbxluEV7EezHvV4sill1apGpEw.png) + +Botkube is now ready to go! + +Explore the New Slack App +------------------------- + +The new Botkube Slack app adds some great features that weren't previously available, particularly around interactive event response. You saw the interactive help at the end of the installation process in the previous section. You can click the buttons in the interactive help to run the commands as shown. You can also make configuration changes interactively, try clicking the Adjust notifications button and you can set notification settings using a dialog rather than editing YAML. + +Another interactive feature is the Run command option shown with events. Any time an event is sent to the channel, you can select a contextual command from the Run command drop-down box. The list of commands will be only those relevant to the resource type in the event. Selecting a command will use the kubectl executor to run the command against the specific resource in the event. This saves typing out the kubectl commands by hand if you want to quickly get some information about a resource, like `describe` a new resource or get `logs` on a pod with errors. + +![Image 10: Run Kubernetes troubleshooting commands](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/638dfeee173eea4859c13681_aeB3oRSq_LvBSkdLujcv2ls4WiN8M1W-Mo6KDzL2MmC7bQ487s0DSqXd5X4iejHKHgtD1abNQn6LEREE-J4U-TR5VEre1aATDi51rzTn2WQVogIE6qV6bFYRZe_2O7o7ZkH_5iUa5j5DcVMbzzo7mXKi3N2n04WcE7cqj5MEly6On-gg-fRNpxsmDAxn9A.png) + +Another interactive feature can be found by running `@botkube kubectl` with no options. This starts the interactive command generator. This presents you with a list of verbs that you can run and as you make selections, automatically offers the contextually-relevant options in drop-down boxes until you have built a complete command. You can then click the Run command button and see the resulting output. You can also filter the output by specifying a match string in the Filter output box. + +![Image 11: Pulling K8s Logs](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/638dfeee5c48734b1151fe69_VBgNCtn62GTB7Ee-xc2z5xMXs92IaE5blN1CZPVNeV18fpAF4dSTi_giYZyoA80T4BBTnajpiBnsl7kX-xlWPKTdjTb1-6zKxNSJCQwjsqA9HyYinugvHNE-B0oQKj0MkV-FsRNbuIvmJe77SdtuFJv6tR5WxKwmvLkMzxDMFlLCA6lCItB8uUtFHS7Lmg.png) + +What Could Go Wrong? +-------------------- + +There are several steps in the process to look out for. These are where things could go wrong and you could end up with a Botkube installation that doesn't work. Always check the Botkube pod logs for details on why something might not be working, but here are a few things to look out for: + +* Slack App Manifest Scope: When using the YAML app manifest to create the Slack app, make sure you use the [appropriate version](https://docs.botkube.io/installation/slack/#create-slack-app) for public, private, or both Slack channel types. + +* Slack app-level token scope: The app-level token needs to have the `connections:write` scope assigned. + +* Multiple clusters: When using Botkube to execute commands in multiple Kubernetes clusters, you need to install a Slack app for each cluster to ensure the commands are routed to the correct one. If you are using Botkube for **notifications only** and have command execution disabled, you can get away with a single app for multiple clusters. If you ever do want to enable command executions though, you will need to revert to the Slack app per cluster model. + +* Incorrect tokens: Make sure your bot and app-level tokens are correct and match those in the Slack App Console. + +* Slack channel configuration: Make sure you omit the # when specifying the Slack channel that Botkube will use. + + +Feedback - We’d Love to Hear From You! +-------------------------------------- + +As always, we want to hear your feedback and ideas about Botkube. Help us plan the Botkube roadmap, get the features you’d like implemented, and get bugs fixed quickly. + +You can talk to us in the Botkube [GitHub issues](https://github.com/kubeshop/botkube/issues), Botkube [Slack community](http://join.botkube.io/), or email our Product Leader at [blair@kubeshop.io](mailto:blair@kubeshop.io). diff --git a/hack/assistant-setup/content/botkube.io__blog__botkube-takes-on-amsterdam-a-kubecon-recap.md b/hack/assistant-setup/content/botkube.io__blog__botkube-takes-on-amsterdam-a-kubecon-recap.md new file mode 100644 index 0000000..0f5a541 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__botkube-takes-on-amsterdam-a-kubecon-recap.md @@ -0,0 +1,101 @@ +Title: Botkube takes on Amsterdam: A Kubecon Recap + +URL Source: https://botkube.io/blog/botkube-takes-on-amsterdam-a-kubecon-recap + +Published Time: May 04, 2023 + +Markdown Content: +![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) + +Maria Ashby + +Developer Advocate + +Botkube + +The Kubecon Amsterdam conference was a wild ride, filled with exciting announcements, insightful talks, and countless networking opportunities. + +### Table of Contents + +* [What is Botkube?](#what-is-botkube-) +* [The booth experience](#the-booth-experience) +* [eBPF is Growing Like Crazy](#ebpf-is-growing-like-crazy) +* [Kubernetes Adoption is Through the Roof](#kubernetes-adoption-is-through-the-roof) +* [Kubernetes for Developers](#kubernetes-for-developers-) +* [Multi-Cloud & Hybrid](#multi-cloud-hybrid) +* [GitOps is the New Normal](#gitops-is-the-new-normal) +* [Looking to the Future](#looking-to-the-future) +* [Sign up now!](#sign-up-now-) +* [Feedback](#feedback) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +Kubecon EU was a wild ride, filled with exciting announcements, insightful talks, and countless networking opportunities. As an attendee and representative of Botkube, I had the privilege of observing the latest trends in the Kubernetes space, and I am thrilled to share my experience and my top five takeaways with you. + +Botkube in Amsterdam +-------------------- + +What is Botkube? +---------------- + +Botkube is a collaborative Chatops tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. This means you'll gain instant visibility and control over your cluster resources, all without ever having to leave your messaging platform. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. + +The booth experience +-------------------- + +For starters, I had the pleasure of meeting my Product Lead, Blair, and Product Designer, Lacho, in person for the first time- it was amazing! + +But the real highlight of the event was getting to connect with hundreds of Kubernetes users and hearing their feedback on Botkube. It was also great to see Botkube users out in the wild. The invaluable insights we gained over the three days were incredibly helpful, and it was so exciting to hear how Botkube has been improving people’s troubleshooting process. Plus, we were able to brainstorm some fresh new ideas to take our product to the next level. + +And just when we thought it couldn't get any better, we got a surprise visit from Kelsey Hightower, a true legend in the tech world. He stopped by our booth and gave us some praise on the product, which was an absolute thrill. He even shared some expert tips on how to elevate Botkube even further! + +Kubecon was an absolute blast! From the stroopwafels to the awesome people, time just flew by. Though I admit, I was exhausted, the event was one for the books. It made me realize the power of community engagement and the value of feedback for improving your product. + +The energy at Kubecon was electric, and I felt so grateful to be a part of it. I learned so much about Kubernetes and gained so much insight into what people really need from our product. + +Top Five Trends at Kubecon EU +----------------------------- + +eBPF is Growing Like Crazy +-------------------------- + +One of the most significant trends I observed at Kubecon Amsterdam was the explosive growth of eBPF, a framework for running sandboxed programs inside the Linux kernel. In particular, Cilium seems to be leading the charge, and their innovative use of eBPF promises to revolutionize the security and network layers of Kubernetes. With eBPF, organizations can achieve unprecedented visibility into their infrastructure, making it easier to detect and mitigate threats before they become a problem. + +Kubernetes Adoption is Through the Roof +--------------------------------------- + +It's no secret that Kubernetes is taking the world by storm, and Kubecon Amsterdam provided ample evidence of its popularity. With the biggest #kubecon in Europe to date, it's clear that both startups and enterprises alike have fully embraced Kubernetes. While there are certainly challenges involved in managing and scaling Kubernetes clusters, it's clear that the benefits far outweigh the costs. + +Kubernetes for Developers +------------------------- + +While most attendees at Kubecon Amsterdam were ops professionals, the buzz on the street was all about how we can make developers more productive. The next developer productivity tool to hit the scene are developer portals. [Port.ai](https://www.getport.io/), a new no-code platform for managing your software development lifecycle, was a major topic of discussion. By providing developers with a central hub for all their tools and services, Port.ai promises to streamline the development process and make it easier to onboard new team members. + +Multi-Cloud & Hybrid +-------------------- + +As more and more organizations move to the cloud, managing and scaling clusters across multiple providers has become a significant challenge. At Kubecon Amsterdam, I saw two approaches emerging: using tools like HashiCorp's Terraform or Crossplane to manage infrastructure, or using Kubernetes-native platforms like Rancher, Tanzuu, or Openshift. While there is still some debate over which approach is best, it's clear that multi-cloud and hybrid environments are here to stay. + +GitOps is the New Normal +------------------------ + +Last but certainly not least, GitOps was everywhere at Kubecon Amsterdam. I saw this trend at [Socal Linux](https://botkube.io/blog/scaling-new-heights-taking-botkube-to-scale-20x) a few months ago. Argo and Flux were the dominant players, but many organizations have developed their own GitOps workflows as well. By using Git as the single source of truth for your infrastructure, you can ensure that all changes are tracked and auditable, making it easier to roll back changes or diagnose issues. While GitOps is not a new trend, it's clear that it has become the standard for managing Kubernetes clusters. + +Looking to the Future +--------------------- + +While these five trends were certainly the most significant takeaways from Kubecon Amsterdam, I also saw two other trends emerging that are worth keeping an eye on: stateful applications (such as databases and queues) and MLOps (machine learning operations). As the Kubernetes ecosystem continues to mature, it will be fascinating to see how these trends evolve and how they will impact the Kubernetes project in the future. + +In conclusion, Kubecon Amsterdam was an incredible experience, and I am grateful to have been a part of it. With so many exciting trends emerging, the future of Kubernetes looks brighter than ever, and I cannot wait to see what the next conference has in store. + +Sign up now! +------------ + +Get started with Botkube! Whether you're a seasoned Kubernetes pro or just getting started, Botkube has something to offer. Sign up now for free and join the community of users who are already benefiting from the power of Botkube. Don't miss out on this opportunity to streamline your K8s workflow and take your skills to the next level - try Botkube today! + +Feedback +-------- + +We welcome developers and Kubernetes enthusiasts to explore the platform and share their valuable feedback. We want to know what you think of Botkube and how we can make it even better. We're doing quick 15-minute interviews to get your feedback, and as a thank you, we'll give you some cool Botkube plushies and t-shirts and enter you into a raffle for a chance to win a $50 Amazon gift card! Don't miss this opportunity to have your say - just email maria@kubeshop.io or use this calendly link to sign up. + +You can also talk to us in the Botkube GitHub issues, Botkube Slack community, or email our Product Leader at blair@kubeshop.io. diff --git a/hack/assistant-setup/content/botkube.io__blog__botkube-v0-18-0-release-notes.md b/hack/assistant-setup/content/botkube.io__blog__botkube-v0-18-0-release-notes.md new file mode 100644 index 0000000..1d1d5bb --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__botkube-v0-18-0-release-notes.md @@ -0,0 +1,63 @@ +Title: Botkube v0.18.0 Release Notes + +URL Source: https://botkube.io/blog/botkube-v0-18-0-release-notes + +Published Time: Feb 06, 2023 + +Markdown Content: +![Image 1: a man with a beard wearing a black shirt](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) + +Blair Rampling + +Product Leader + +Botkube + +Botkube v0.18.0 adds a Prometheus source plugin and command aliases. + +### Table of Contents + +* [Prometheus Plugin](#prometheus-plugin) +* [Aliases](#aliases) +* [Bug Fixes](#bug-fixes) +* [Feedback - We’d Love to Hear From You!](#feedback-we-d-love-to-hear-from-you-) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +Botkube v0.18.0 has arrived. We've added our first new source plugin for Prometheus, and customizable command aliases. Botkube is the most modern [ChatOps tool for Kubernetes](http://botkube.io/)! + +This release builds on the [plugin system](https://botkube.io/blog/build-a-github-issues-reporter-for-failing-kubernetes-apps-with-botkube-plugins) we released in [Botkube v0.17.0](https://botkube.io/blog/botkube-v017-release-notes). In that version we also released the first Botkube-developed executor [plugin for Helm](https://docs.botkube.io/configuration/executor/helm). We have made some other small enhancements to the plugin system in this version. + +_If you have any feature requests or bug reports, reach out to us on [Slack](http://join.botkube.io/) or submit a [Github issue](https://github.com/kubeshop/botkube/issues)_ + +Prometheus Plugin +----------------- + +While Botkube has supported Kubernetes events for a long time, K8s clusters tend to have a lot more state events and metrics going on. Typically tools like kube-state-metrics and custom applications are configured to use Prometheus as a store for metrics. Prometheus' Alertmanager can then find metrics that are in anomalous states and trigger alerts. We've built the Botkube source plugin for [Prometheus](https://docs.botkube.io/configuration/source/prometheus) to give Botkube access to those alerts. Once enabled, the Prometheus plugin can be configured to consume any alerts in the specified states and display them in any channels you have configured in your source binding configuration. + +![Image 2: Prometheus alerts in Slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/63e104c5fb11822e79cc09c8_ijd6WpT3jxksxNoy-fni7NrXRKM3p1iZAHutyVNDPEMjUTsgBkpAZ_pDEHEHgDKIHjjtpl_8V1Eu60mHmFUt2RIcRLv-TKdnmQIbF9op1r-VGZY6d6XTsB6zGkQHWB3r7wuk2ekw0o8Hl6adAZaoJmQ.png) + +See the [documentation](https://docs.botkube.io/configuration/source/prometheus) to enable and configure the Prometheus plugin, it only requires a few settings. + +Aliases +------- + +As a way to save typing, Botkube had implemented the k and kc aliases for the kubectl command, much like DevOps admins like to do on the command line. Now you can [configure your own custom aliases](https://docs.botkube.io/configuration/alias) for any command in Botkube. Not only can you alias a single command like kubectl, you can create an alias for the full command including options and flags. In the example shown here, `kgp` is an alias for the full `kubectl get pods` command. + +![Image 3: Kubectl aliases setup](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/63e104c5e04d8205b4b47aa9_yHASb87npDigom97MSabXqtK812CEfQ08iOuqf9UU9KgcSY0kRwbcCdapzCZDonNyKi-HuxxAWgAFcKaMt0MYLJKZDTW9LY75QCNi4JA_vS7V0n8A0XmMBh-WzJLxMMoyBms6HUjDEiGcEs_VSZbTms.png) + +Maria wrote another article on [Kubectl aliases](https://botkube.io/blog/command-line-magic-simplify-your-life-with-custom-kubernetes-kubectrl-aliases-on-botkube) and their use cases. For more details on how to configure your own Kubernetes aliases read this article and the documentation above. + +Bug Fixes +--------- + +We have also fixed a couple of small bugs in Botkube that were reported to us by users and found by us. You can see the full list of changes in the [changelog](https://github.com/kubeshop/botkube/releases/tag/v0.18.0). + +We appreciate your bug reports and pull requests! If you notice a bug in Botkube, please report it as a [GitHub issue](https://github.com/kubeshop/botkube/issues) and we are happy to collaborate with you on getting it resolved. + +Feedback - We’d Love to Hear From You! +-------------------------------------- + +As always, we want to hear your feedback and ideas about Botkube. Help us plan the Botkube roadmap, get the features you’d like implemented, and get bugs fixed quickly. + +You can talk to us in the Botkube [GitHub issues](https://github.com/kubeshop/botkube/issues), Botkube [Slack community](http://join.botkube.io/), or email our Product Leader at [blair@kubeshop.io](mailto:blair@kubeshop.io). diff --git a/hack/assistant-setup/content/botkube.io__blog__botkube-v013-release-notes.md b/hack/assistant-setup/content/botkube.io__blog__botkube-v013-release-notes.md new file mode 100644 index 0000000..3bef76c --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__botkube-v013-release-notes.md @@ -0,0 +1,112 @@ +Title: Botkube v0.13 Release Notes + +URL Source: https://botkube.io/blog/botkube-v013-release-notes + +Published Time: Sep 01, 2022 + +Markdown Content: +![Image 1: a man with a beard wearing a black shirt](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) + +Blair Rampling + +Product Leader + +Botkube + +The latest release of Botkube is here! This release from the new Botkube team includes user-requested multi-channel support and much more. + +### Table of Contents + +* [Multi-Channel Support](#multi-channel-support) +* [Bug Fixes](#bug-fixes) +* [Release Pipeline Enhancements](#release-pipeline-enhancements) +* [Telemetry](#telemetry) +* [Feedback - We’d Love to Hear From You!](#feedback-we-d-love-to-hear-from-you-) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +BotKube, welcome to Kubeshop! We're happy to have the most modern [ChatOps tool for Kubernetes](http://botkube.io/) join the team. + +BotKube v0.13.0 is the first release under Kubeshop and the newly formed dedicated Botkube team. We are picking up the pace of development and you can expect to see more frequent BotKube releases with lots of new, great features and bug fixes. + +_If you have any feature requests or bug reports, reach out to us on [Slack](http://join.botkube.io/) or submit a [Github issue](https://github.com/kubeshop/botkube/issues)_ + +In this release, we focused on multi-channel support, bug fixes, and optimizing the BotKube release pipeline. + +Multi-Channel Support +--------------------- + +![Image 2: Connecting Multiple Kubernetes Clusters to Multiple Slack Channels](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6360eb6a2fdfd662d24a9ca0_6310c1dc595cf2e50475bc23_2dGs46sYiazq09JJsR0RtJZwNSQPpS_FFV3EcATxfr7Om0vQQgafkiLDUdFNfVg31adYxk0VRVgyPxjr4nFPLENhF8XSeLPmBAAWVS6dDYtRkgat9EqCF5ApyMZyVhDBJX0cW0y9knrOPcDdSQIsRg.png) + +While BotKube is now part of the Kubeshop team, BotKube development is still community-driven. Multi-channel support was requested by several users in the BotKube community and the reason why we implemented it in our first release. We also worked with the community to review the [configuration proposal](https://github.com/kubeshop/botkube/issues/628) and will continue this kind of community involvement as we go. + +BotKube now supports multiple channels and communication tools using a single BotKube installation in your Kubernetes cluster. You can group and send events to different channels and tools. For example, some events are sent as Slack chat messages for an immediate response and others to ElasticSearch for archiving. You can even have multiple instances of these tools and send specific events to different channels in each of them. This previously required multiple BotKube installations in a cluster or complex annotations. You can also toggle filters and recommendations per-rule now, where filters and recommendation settings were global in previous versions. + +In future releases, we plan to streamline this source to channel mapping further and make the configuration even easier. + +It is also possible to configure the executor configuration on a per-channel basis, so that kubectl permissions can be controlled. You can set different kubectl permissions that restrict the commands, resources, and namespaces users in a specified channel can access. This is great for environments with multi-tenant Kubernetes clusters where teams use separate namespaces. + +We have simplified and enhanced the BotKube configuration syntax to enable the new multi-channel support. If you are running BotKube v0.12.4 (or earlier) using a default configuration, you can specify an updated configuration when using the helm upgrade command. If you are using a custom configuration, see the [changelog](https://github.com/kubeshop/botkube/blob/main/CHANGELOG.md#v0130-2022-08-29) for details on the configuration syntax changes. You can modify your config.yaml file with the new structure and pass that to the helm upgrade -f command. + +You can also see the configuration details for [sources](https://botkube.io/configuration/source/) and [executors](https://botkube.io/configuration/executor/) in the BotKube documentation. + +Bug Fixes +--------- + +We have fixed several bugs in BotKube that were reported to us by users. We also spent some time refactoring code and increasing test coverage to improve the quality of BotKube. You can see the list of bug fixes in the [changelog](https://github.com/kubeshop/botkube/blob/main/CHANGELOG.md#v0130-2022-08-29). + +We appreciate your bug reports and pull requests! If you notice a bug in BotKube, please report it as a [GitHub issue](https://github.com/kubeshop/botkube/issues) and we are happy to collaborate with you on getting it resolved. + +Release Pipeline Enhancements +----------------------------- + +We are working on improving the BotKube release pipeline with each release. Our goal is to fully automate the release pipeline, so that we can collect all pull requests in a release branch, perform automated end-to-end testing with the various communication platforms, and build and release the BotKube container image. + +In this release we have cleaned up the overall CI pipeline and automated end-to-end testing of BotKube on Slack. As we add more automation, BotKube releases will be more frequent and more reliable. + +Telemetry +--------- + +BotKube has introduced anonymized telemetry collection in v0.13. + +Why: We are collecting this telemetry data in order to focus our development efforts on the communication tools and actions that BotKube users are using the most. + +What:All data is anonymized. We use UUIDs in order to aggregate telemetry from individual BotKube installations. Other data that could identify users or environments is redacted, such as namespace names, pod names, etc. For transparency, we collect the following data: + +* BotKube version + +* Kubernetes version + +* Names of enabled integrations (notifiers and bots) + +* Handled events in anonymized form, grouped by the integration (communication platform) name + +* For each event, we collect its type (e.g. create or delete), resource API Version and resource Kind. Any custom resource API groups or Kinds are excluded from the analytics collection. + +* Executed commands in anonymized form + +* For kubectl commands, only the command verb is collected. Resource name and namespace are excluded from the analytics collection. + +* App errors (crashes, configuration and notification errors) + +* For identifying BotKube installations, we use unique identifiers generated in the following way: + +* As an anonymous cluster identifier, we use the uid of kube-system Namespace, + +* As an anonymous installation identifier, we use UUID generated during Helm chart installation and persisted in a ConfigMap. + + +Opt-out: **You can opt out of telemetry collection by setting the `analytics.disable: true` parameter when installing or upgrading the Helm chart.** This prevents all analytics collection and we do not track the installation and opt-out actions. + +Please see the BotKube [Privacy Policy](https://botkube.io/privacy/) for more details. + +Feedback - We’d Love to Hear From You! +-------------------------------------- + +As always, we want to hear your feedback and ideas about BotKube. Help us plan the BotKube roadmap, get the features you’d like implemented, and get bugs fixed quickly. + +You can talk to us in the BotKube [GitHub issues](https://github.com/kubeshop/botkube/issues), BotKube [Slack community](http://join.botkube.io/), or email our Product Leader at [blair@kubeshop.io](mailto:blair@kubeshop.io). + +‍ + +‍ diff --git a/hack/assistant-setup/content/botkube.io__blog__botkube-v014-release-notes.md b/hack/assistant-setup/content/botkube.io__blog__botkube-v014-release-notes.md new file mode 100644 index 0000000..66e9550 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__botkube-v014-release-notes.md @@ -0,0 +1,95 @@ +Title: Botkube v0.14 Release Notes + +URL Source: https://botkube.io/blog/botkube-v014-release-notes + +Published Time: Oct 06, 2022 + +Markdown Content: +![Image 1: a man with a beard wearing a black shirt](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) + +Blair Rampling + +Product Leader + +Botkube + +BotKube v0.14.0 addresses a number of community-suggested issues and adds some great features to help you control the notification levels you receive from your Kubernetes clusters. + +### Table of Contents + +* [Dynamic notification setting changes](#dynamic-notification-setting-changes) +* [New Botkube Slack App](#new-botkube-slack-app) +* [Improved Help](#improved-help) +* [Persistent Settings](#persistent-settings) +* [Mattermost v7 Support](#mattermost-v7-support) +* [Bug Fixes](#bug-fixes) +* [Feedback - We’d Love to Hear From You!](#feedback-we-d-love-to-hear-from-you-) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +In the previous release of Botkube we promised to accelerate the pace of development and release. Well, here is another new release of Botkube, the most modern [ChatOps tool for Kubernetes](http://botkube.io/)! + +BotKube v0.14.0 addresses a number of community-suggested issues and adds some great features to help you control the notification levels you receive from your Kubernetes clusters. + +_If you have any feature requests or bug reports, reach out to us on [Slack](http://join.botkube.io/) or submit a [Github issue](https://github.com/kubeshop/botkube/issues)_ + +In this release, we focused on improvements to the Botkube onboarding experience and notification tuning, persistent settings, and bug fixes. Some of the enhancements are currently Slack-specific using the additional interactive capabilities of the new Slack app. We plan to enhance other platforms with interactive features where technically feasible. + +Dynamic notification setting changes +------------------------------------ + +We've received frequent feedback from users about the notification settings in Botkube. By default, Botkube monitors and shows all Kubernetes events in a configured communication channel. Previously, this could only be configured in the YAML configuration or during the Helm installation/upgrade. + +You can now also configure notification settings right from the Botkube interface in your communication platform. Using the command @Botkube edit SourceBindings you can select the notifications you want to receive. After choosing the notifications, the configuration is dynamically updated with an automatic brief restart of Botkube. + +![Image 2: Monitoring Kubernetes in Slack Channel](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6360eb5b0c5188f8691d6b94_633ef84e656938a0ae571fc0_iRbu4PGydNxlrRVX0s4UpTz9QFyoUzE-l5Onxt_TW2YVakCXmxLkWfqXpgtJ7ecj136UrCZdgJGubxY_hdd2IEsiq8tyanu5ITCqu-fgUB0mP_tPZLGYtghrVHYx5uU3bhAi0H-lW6PKNIE24trMca9NWzPrlqHj-CYGLZqoA2CiKsNrr3i2TeFGfQ.png) + +New Botkube Slack App +--------------------- + +We have created a brand new Botkube Slack app. The new app uses the Slack Socket Mode which provides a much more robust platform for interactivity and uses the new Slack permissions model for enhanced security. + +You will see many enhancements to Botkube in Slack in this and upcoming releases. For example, you can use the interactive selector to change the notification settings mentioned earlier. Just run @Botkube, edit SourceBindings without specifying the notification level, and you can select the sources from an interactive dialog. + +![Image 3: Adding Kubernetes Alerts to Slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6360eb5b4e8002657684fc0e_633ef84e908df6431e4dd34d_SelrLZepl_wTwzOgctqA0qtliy6LH3SnfV8l8I2r6iMivCxRNdzhtdo9T5TvjNw9boEGHGD1jqnOcld_4B5MxTLxO01xwGq41cZ_SKhyFJLacFJFK7HMXOJ7lrP93TrM9M6CmhTpauoLdoG1D7bWLXYK-rryjw0SCVi5c-xXTh_eKe9JAB73QHI0Dg.png) + +The installation process has changed for the new Slack app. See the [installation guide](https://botkube.io/docs/installation/socketslack) to get started with the enhanced interactive experience. + +The [legacy Slack app](https://botkube.io/docs/installation/slack/) is still available, but will be deprecated in future versions. + +Improved Help +------------- + +The @Botkube help command has been enhanced when using the new Botkube Slack app. Run @Botkube help and you will see an interactive help message. You can click any of the buttons in the interactive help to run the commands, change settings, and more. + +This new, interactive help will enable new Botkube users to get up and running even faster. You can also send us feedback and access documentation and additional external help resources directly from the interactive help. + +![Image 4: Botkube help suggestions for cluster management](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6360eb5b82ec26bf25ce56ed_633ef850e5ef9f0d7d116776_EO0U7RPVKtnFJKGI9P-P-ra7xxTD04eyiGXF_khHkvFL8Age_YGzOa7YM3iTZZ6g9OfTmH_HgJYyJNEN75LDiP5jij3hsQjAF9z0nWw2xJ42aEJlskc_lNSh6XIiwwybgIl0TGxlJRgOSKkUmGbJv9d5NLGOW-x_iVWUj5GyPevaKTWieW5B1QmpCw.png) + +Persistent Settings +------------------- + +Changes to settings made from the Botkube interface, such as notifier start/stop, notification level settings, and filter enable/disable now persist across Botkube restarts. In earlier versions, these settings would reset to the settings in the Botkube configuration file upon restarting the Botkube pod. + +Mattermost v7 Support +--------------------- + +Botkube now supports Mattermost version 7.x! See the [installation guide for Mattermost](https://botkube.io/docs/installation/mattermost) to get started. + +Bug Fixes +--------- + +We have fixed several bugs in BotKube that were reported to us by users. We also spent some time refactoring code and increasing test coverage to improve the quality of BotKube. You can see the list of bug fixes in the [changelog](https://github.com/kubeshop/botkube/releases/tag/v0.14.0). + +We appreciate your bug reports and pull requests! If you notice a bug in BotKube, please report it as a [GitHub issue](https://github.com/kubeshop/botkube/issues) and we are happy to collaborate with you on getting it resolved. + +Feedback - We’d Love to Hear From You! +-------------------------------------- + +As always, we want to hear your feedback and ideas about BotKube. Help us plan the BotKube roadmap, get the features you’d like implemented, and get bugs fixed quickly. + +You can talk to us in the BotKube [GitHub issues](https://github.com/kubeshop/botkube/issues), BotKube [Slack community](http://join.botkube.io/), or email our Product Leader at [blair@kubeshop.io](mailto:blair@kubeshop.io). + +‍ + +‍ diff --git a/hack/assistant-setup/content/botkube.io__blog__botkube-v015-release-notes.md b/hack/assistant-setup/content/botkube.io__blog__botkube-v015-release-notes.md new file mode 100644 index 0000000..4090d31 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__botkube-v015-release-notes.md @@ -0,0 +1,83 @@ +Title: Botkube v0.15.0 Release notes + +URL Source: https://botkube.io/blog/botkube-v015-release-notes + +Published Time: Oct 24, 2022 + +Markdown Content: +![Image 1: a man with a beard wearing a black shirt](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) + +Blair Rampling + +Product Leader + +Botkube + +Botkube v0.15.0 adds some great interactivity features aimed at application developers who may not be Kubernetes experts. + +### Table of Contents + +* [Interactive kubectl](#interactive-kubectl) +* [Actionable Events](#actionable-events) +* [Output Filtering](#output-filtering) +* [Interactive Output Filtering](#interactive-output-filtering) +* [Bug Fixes](#bug-fixes) +* [Feedback - We’d Love to Hear From You!](#feedback-we-d-love-to-hear-from-you-) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +We have an exciting early release of Botkube, just in time for KubeCon! We've been working as fast as we can to get some great new features ready to release. Here's v0.15.0 of Botkube, the most modern [ChatOps tool for Kubernetes](http://botkube.io/)! + +v0.15.0 adds some great interactivity features aimed at application developers who may not be Kubernetes experts. + +_If you have any feature requests or bug reports, reach out to us on [Slack](http://join.botkube.io/) or submit a [Github issue](https://github.com/kubeshop/botkube/issues)_ + +In this release, we focused on interactivity with Botkube and the kubectl executor. Some of the enhancements are currently Slack-specific using the additional interactive capabilities of the [new Slack app](https://botkube.io/docs/installation/socketslack/). We plan to enhance other platforms with interactive features where technically feasible. + +Interactive kubectl +------------------- + +If you're using the new Slack app, you can now use kubectl interactively. Simply run @botkube kubectl (or use the alias k or kc) and you will see an interactive kubectl command builder. Select the verb (get, in this example) and you can select the object type to get. Once you have selected those, based on context, you can select a namespace and, optionally, a specific object to act on. Leaving out the object will generally show the list of available objects. Once you've made your selections, you can see a preview of the constructed command. You can also specify a filter string to apply to the output (more about that later!) and click Run command. The command runs and you can see the output in the channel as usual. + +This interactive kubectl tool is especially useful for developers and other users who want to see information about their applications but might not be Kubernetes and kubectl experts. + +![Image 2: Getting Log reports of Kubernetes reports into Slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6360eb442fdfd602024a9acd_6356bdf725fcea68c282c460_Y3wu_jOs-Ujqsrm-K_p5k9ixbT54IMlPnlOAyBDjuVsmkqOsLDkvcN2x3ji2mRn_CU0M-1ZAnp_lwDvLRhJ_eOTYodpOZAVhLHWxpjVfrTildXKVksWotV07CJHe9H7XRhRuxiVqJ2oTLEr7zr_vT6mRQQJKV_hD1EV65oMSXkUu2YYNFTXFdY6thg.png) + +Actionable Events +----------------- + +If you're receiving events in the new Slack app, you can now run contextual actions right from the event message. When a pod error comes in, for example, you can run kubectl commands that are relevant to the pod object right from the "Run command" drop-down box. The command runs automatically without any typing and returns the output in the channel. This makes it quick an easy to start investigating your alerts. + +![Image 3: Run Kubectl commands directly from Slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6360eb44adbd3b434f7dcbd4_6356bdf7fd97a85f48b6f4eb_tGR4IkDUpaGrpMiF7u7VXfDpliSzKiF6H8nCPk-xGSddI9heXZx6sKKPVzpy6PZVsMZ4znb37qqyJRsZZ5dQsOmxcVYNu_sXDLGcoFg88Htm7xjt_8pSsXxM3EQd-yigz8RAkChykcJEHGz8gY2zMUJca4nhxcaJoMfGLI2ZmD9YkWHn_4WTgsNPMQ.png) + +Output Filtering +---------------- + +You can now filter the output of any command you run with Botkube, on any platform. Simply run the command with the `--filter "string"` flag and you will only see the matching output. The filter flag does simple linewise string matching. Any line in the output with a matching string will be shown, lines without a match are discarded. + +![Image 4: Filtering Kubernetes logs for important alerts](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6360eb44701e5f37a18b49db_6356bdf7f7a6792610d5e3ca_kjx3ejlR6Aaq2y9mENfRr81flF6H3HMljZWwFis4-1rkG6jyjEiPmYwfxeMfU-_NoEE0OLtGHkPUxM90PhuFauG-7iPdakZtFEdZcqkbxRXEcnfkQnErMqivmwplsPmem-JQL-2X71Kpmh5-NS8jZJMSkWtfd2hqinQhht64CWwIJxgV4SBI1uwKzQ.png) + +Interactive Output Filtering +---------------------------- + +Output filtering is even easier if you're using the [new Slack app](https://botkube.io/docs/installation/socketslack/). When you run a command with a lot of output (>15 lines) you will see a Filter output box. If you type a string in the box and press enter, you will then see the output of the previous command filtered to only show lines matching the filter string. This is great for quickly sifting through logs of a problematic pod, for example. + +![Image 5: Searching through K8s logs](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6360eb4426a735c2c230b1cb_6356bdf7b95716455530d559_eIDU6Illetw8nvSmjY2RF0DUfo480e8Cg-z9oo9TrZoUMc82X5QeBP_LDPjPAByGdJGZVjqAZAeFF9MphVVECeN-D1KbDxttppO-YtjdKo6dUvOhLo9b1TypQbvEX9vTnvcTJVKaC1kDxQHOdTWFqHFty4VUYZKoIgXBMmch6sNCQp2-7Mde9Zm78g.png) + +Bug Fixes +--------- + +We have also fixed a couple of small bugs in Botkube that were reported to us by users and found by us. You can see the full list of changes in the [changelog](https://github.com/kubeshop/botkube/releases/tag/v0.15.0). + +We appreciate your bug reports and pull requests! If you notice a bug in BotKube, please report it as a [GitHub issue](https://github.com/kubeshop/botkube/issues) and we are happy to collaborate with you on getting it resolved. + +Feedback - We’d Love to Hear From You! +-------------------------------------- + +As always, we want to hear your feedback and ideas about Botkube. Help us plan the Botkube roadmap, get the features you’d like implemented, and get bugs fixed quickly. + +You can talk to us in the Botkube [GitHub issues](https://github.com/kubeshop/botkube/issues), Botkube [Slack community](http://join.botkube.io/), or email our Product Leader at [blair@kubeshop.io](mailto:blair@kubeshop.io). + +‍ + +‍ diff --git a/hack/assistant-setup/content/botkube.io__blog__botkube-v016-release-notes.md b/hack/assistant-setup/content/botkube.io__blog__botkube-v016-release-notes.md new file mode 100644 index 0000000..642453b --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__botkube-v016-release-notes.md @@ -0,0 +1,90 @@ +Title: Botkube v0.16 Release Notes + +URL Source: https://botkube.io/blog/botkube-v016-release-notes + +Published Time: Nov 28, 2022 + +Markdown Content: +![Image 1: a man with a beard wearing a black shirt](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) + +Blair Rampling + +Product Leader + +Botkube + +Botkube v0.16.0 adds new event filter criteria allowing more granular event tuning, and actions, which automatically run commands when specified event types are received. + +### Table of Contents + +* [Filters](#filters) +* [Actions](#actions) +* [Legacy Slack App Deprecation](#legacy-slack-app-deprecation) +* [Bug Fixes](#bug-fixes) +* [Feedback - We’d Love to Hear From You!](#feedback-we-d-love-to-hear-from-you-) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +The latest version of Botkube is here, v0.16.0. Like peanut butter and chocolate, we've brought together two great parts of Botkube to make your life working with Kubernetes even easier. Botkube is the most modern [ChatOps tool for Kubernetes](http://botkube.io/)! + +We've addressed two things that have been frequently requested by users. First, we've added a more configurable filter system for events, meaning you can better filter what kind of events you want to see. Second, we've added actions, which can be configured to run commands automatically when an event is received and the command output is included with the event. These features work behind the scenes in the Botkube engine and are not specific to any communication platform. + +_If you have any feature requests or bug reports, reach out to us on [Slack](http://join.botkube.io/) or submit a [Github issue](https://github.com/kubeshop/botkube/issues)_ + +Filters +------- + +Botkube now has additional event and resource constraints that you can use to filter events when you're defining sources. Sources define the event stream you want to watch and are then bound to a communication channel that will receive all matching events. + +In earlier versions of Botkube you could create sources based on Kubernetes resource type (e.g. Pod, ConfigMap, etc.), Namespace, and event type (e.g. Create, Delete, Error). This is useful for getting all events of a certain type in a namespace, for example, but in some cases still results in a lot of events that aren't relevant to all users in a channel. In addition, this doesn't provide the granular level of control needed to automatically act on events (see Actions below!). + +In Botkube v0.16.0 we've added the following [event filter criteria](https://docs.botkube.io/next/configuration/source#kubernetes-resource-events): + +* **labels and annotations**: These filters simply have to (exactly) match the labels or annotations applied to a resource in order for the event to be logged. +* **name**: This is a Regex field to match resource names. Events pertaining to any resource that matches the specified pattern will be logged. +* **event.reason and event.message**: These are Regex fields to match the event reason and event message. Events matching the specified pattern will be logged. + +The new filter criteria have lots of great uses. You may have a suspect resource like a flaky pod, for example. Now you can create a "flaky pod" Slack channel and send error events pertaining to that suspect pod with the specific failure reason to that Slack channel and monitor when and how often those failures occur. + +They also enable Botkube actions! + +Actions +------- + +Along with the new, more granular filter options, we have introduced [actions](https://docs.botkube.io/next/configuration/action) to Botkube. Actions allow you to automatically trigger a specific command when a matching event occurs. You can have more context for an event delivered directly to your communication channels with no additional manual work. + +Actions consist of two parts, the command and the source binding. The command is the specific executor command that will be run by the action. In v0.16.0 only the kubectl executor is available but more will be coming soon. The command itself is defined using the [Go template](https://golang.org/pkg/text/template/) syntax and allows you to pass the event metadata in order to build the command you need. The source binding specifies the event source that will trigger the action and uses the same sources that can be bound to communication channels. These sources use the event filters discussed earlier. + +When a source is bound to both an action and a communication channel, the results of the action command are delivered to the communication channel along with the original event. Actions can be used to get information using the default read-only kubectl configuration. If you want, you can even configure the executor to allow other actions beyond those that are read-only. You could have Botkube restart a hang pod automatically, for example, and the results will be sent to the communication channel along with the event. + +![Image 2: Config Map created in Kubernetes Cluster from Slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6384b39243714f0c359b33fb_vpk-kQTm3FfWa0WOV6yI7kl5Zg8Fv4kwQDDPDycWIDWbSbuoapqDwW-z95PUaA8qDINbpb92Z1k-gTtYC-qNf83CLnWJ_1nFQ4BJbniN-gywZtU2siAcyz8jIpvwKuGn90vIGCbnChTj7eIV21j7dGlO8_dAFNhtnOETwIPB4EU7-j5EX8S9G3qw1FQeCw.png) + +A Botkube action at work + +There are two preconfigured actions included with Botkube to help you get started quickly, they are disabled by default: + +* **describe-created resource**: This action runs the kubectl describe command against the resource associated with an event. It is bound to the default k8s-create-events source by default. When enabled, the command will be run each time a resource is created and the event is logged by the k8s-create-events source. The results of the kubectl describe command will then be attached to the event and delivered to any channel to which the k8s-create-events source is bound. +* **show-logs-on-error**: This action runs kubectl logs against a resource. It is bound to the k8s-err-with-logs-events source by default. Any event captured by this source (triggered by error event types) will include the output of the kubectl logs command and be delivered to any communication channel to which it is bound. + +Legacy Slack App Deprecation +---------------------------- + +With the release of the [new Socket-mode Slack app](https://docs.botkube.io/installation/socketslack/) in [Botkube v0.14.0](https://botkube.io/blog/botkube-v014-release-notes#new-botkube-slack-app), the legacy Slack app is being deprecated. In the next version (v0.17.0), it will no longer be supported in the Botkube app and Botkube will need to be configured to use the new Slack app. + +This change is happening because Botkube requires the socket-mode Slack app for the new [interactivity features](https://botkube.io/blog/botkube-v015-release-notes#interactive-kubectl) we introduced in Botkube v0.15.0. We plan to put all of our development efforts into this new app so we can continue to build great interactive features. In addition, Slack is recommending the migration from the legacy app type to socket mode as it introduces more granular permissions for bot users and OAuth tokens. This means you have more control over what Botkube and other Slack apps can do in your Slack workspace. + +Slack will be unapproving the legacy Botkube Slack app in their Slack App Directory on December 21, 2022. After this date you will still be able to install the legacy Slack app using the Add to Slack button in the [legacy Slack installation](https://docs.botkube.io/0.15/installation/slack/) guide but you will receive a warning that the app is not authorized by the Slack App Directory. You will need to accept this warning to proceed if you want to keep using the legacy Slack app with Botkube v0.16 or earlier. + +Bug Fixes +--------- + +We have also fixed a couple of small bugs in Botkube that were reported to us by users and found by us. You can see the full list of changes in the [changelog](https://github.com/kubeshop/botkube/releases/tag/v0.16.0). + +We appreciate your bug reports and pull requests! If you notice a bug in Botkube, please report it as a [GitHub issue](https://github.com/kubeshop/botkube/issues) and we are happy to collaborate with you on getting it resolved. + +Feedback - We’d Love to Hear From You! +-------------------------------------- + +As always, we want to hear your feedback and ideas about Botkube. Help us plan the Botkube roadmap, get the features you’d like implemented, and get bugs fixed quickly. + +You can talk to us in the Botkube [GitHub issues](https://github.com/kubeshop/botkube/issues), Botkube [Slack community](http://join.botkube.io/), or email our Product Leader at [blair@kubeshop.io](mailto:blair@kubeshop.io). diff --git a/hack/assistant-setup/content/botkube.io__blog__botkube-v017-release-notes.md b/hack/assistant-setup/content/botkube.io__blog__botkube-v017-release-notes.md new file mode 100644 index 0000000..9733da7 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__botkube-v017-release-notes.md @@ -0,0 +1,79 @@ +Title: Botkube v0.17.0 Release Notes + +URL Source: https://botkube.io/blog/botkube-v017-release-notes + +Published Time: Jan 09, 2023 + +Markdown Content: +![Image 1: a man with a beard wearing a black shirt](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) + +Blair Rampling + +Product Leader + +Botkube + +Botkube v0.17.0 adds a plugin system and the first executor plugin allowing you to run Helm commands right from your chat tools. + +### Table of Contents + +* [Plugin System](#plugin-system) +* [Helm Plugin](#helm-plugin) +* [Kubectl Prefix Required](#kubectl-prefix-required) +* [Botkube Command Tidying](#botkube-command-tidying) +* [Bug Fixes](#bug-fixes) +* [Feedback - We’d Love to Hear From You!](#feedback-we-d-love-to-hear-from-you-) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +Botkube v0.17.0 is here, and it's huge! We've introduced a plugin system for sources and executors along with the first plugin for Helm. Botkube is the most modern [ChatOps tool for Kubernetes](http://botkube.io/)! + +This release is a major upgrade for Botkube. Kubernetes users are embracing all kinds of new tools and technologies for their application delivery workflows. GitOps and other DevOps tooling is changing the way Kubernetes is managed and monitored and automating a lot of the traditional processes. We wanted to go beyond the Kubernetes basics of monitoring the Kubernetes event stream and running kubectl commands. We decided to do that by implementing a plugin system that allows anyone to build a plugin for Botkube to add sources and executors. + +With the addition of plugins in v0.17.0 combined with [actions](https://docs.botkube.io/next/configuration/action), which were added in [v0.16.0](https://botkube.io/blog/botkube-v016-release-notes), Botkube gains the ability to tie almost any tools together in the Kubernetes/CNCF ecosystem. Botkube is growing into an API automation engine that can listen for events from any source and respond with automated actions via any executor, all while reporting in to channels in your communication platform. + +_If you have any feature requests or bug reports, reach out to us on [Slack](http://join.botkube.io/) or submit a [Github issue](https://github.com/kubeshop/botkube/issues)_ + +Plugin System +------------- + +We have introduced a plugin system to Botkube in v0.17.0. This allows anyone to write new plugins for sources and executors and those plugins can be published for other Botkube users to install and use. We'll be leading the way with our own plugins, including the first executor plugin included in this release. + +Botkube has two ways of interacting with APIs and other tools, sources and executors. Sources are event sources, so any tool that sends events or notifications can be integrated into Botkube and those events and notifications can be sent to communication channels based on the configured source bindings. Kubernetes native events are an example of a source and have been included in Botkube since the beginning. Executors are used to run commands from other tools from within a chat channel. The output of the command is then returned back to the channel where the command was run and can be filtered if needed. The original executor in Botkube is kubectl, and we have added a helm plugin with this release. + +We will be publishing documentation and tutorials on the Botkube plugin system soon so you can design and create your own plugins. We are also working on additional plugins including the first new source plugin for Prometheus. + +Helm Plugin +----------- + +Along with the plugin system, we have introduced Helm as the first executor plugin for Botkube. The Helm plugin allows you to run Helm commands right from your communication platform. The Botkube Helm plugin provides a subset of the most useful Helm commands, you can list installed releases, rollback upgrades, and even install charts and uninstall releases. + +![Image 2: Helm list in Slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/63bc34953fa404bdf9e9b66c_lJAFGnZKp4HY98JtcnteqhObKFnrZ1RoxmMHj8jPZ3XcCk3TWjekXD_hQJNrucD7JANNaYNyHh4E5uIHDl1SS3RWRisuAd8boq7fXK388pca9Tae_CN2k0ZdMy1_QTC9ZGVNmLPwECEzvNKSRai2p3d4CfAMoQjNrV0VJzsfnjkjipqdmCkwT0FkrOr3EA.png) + +Imagine seeing an alert in your communications platform that a deployment was updated but something went wrong and the new release is failing. You can check the application pod logs, the helm release status, then run `@botkube helm rollback ` and fix the problem without ever leaving the chat! + +See the [documentation](https://docs.botkube.io/next/configuration/executor/helm) for how to enable and use the Helm plugin. Much like the kubectl executor, Helm is disabled by default and when enabled, only allows read-only operations by default. You can enable write actions if you want, and you can even segregate those to specific, more restricted channels in your communication platform. + +Kubectl Prefix Required +----------------------- + +The kubectl executor was the only executor available in older versions of Botkube. With the addition of the Botkube plugin system and additional executor plugins, kubectl has company. You now need to specify the executor when running commands with Botkube. For kubectl this would be something like `@botkube kubectl get pods`, and we've even added the aliases `@botkube k` and `@botkube kc` to save you some typing. For Helm it would look like `@botkube helm list`. We added a notification about this to the help message in Botkube v0.16.0, but as of v0.17.0 the implied kubectl (i.e. `@botkube get pods`) will no longer work. + +Botkube Command Tidying +----------------------- + +There were some inconsistencies in how Botkube commands were structured in previous versions. We put some effort into unifying the command structure. Now all Botkube commands follow the same `@botkube ` structure. For example: `@botkube notifier start` is now changed to `@botkube enable notifications`. You can see a list of all of the changed commands in the [changelog](https://github.com/kubeshop/botkube/releases/tag/v0.17.0). + +Bug Fixes +--------- + +We have also fixed a couple of small bugs in Botkube that were reported to us by users and found by us. You can see the full list of changes in the [changelog](https://github.com/kubeshop/botkube/releases/tag/v0.17.0). + +We appreciate your bug reports and pull requests! If you notice a bug in Botkube, please report it as a [GitHub issue](https://github.com/kubeshop/botkube/issues) and we are happy to collaborate with you on getting it resolved. + +Feedback - We’d Love to Hear From You! +-------------------------------------- + +As always, we want to hear your feedback and ideas about Botkube. Help us plan the Botkube roadmap, get the features you’d like implemented, and get bugs fixed quickly. + +You can talk to us in the Botkube [GitHub issues](https://github.com/kubeshop/botkube/issues), Botkube [Slack community](http://join.botkube.io/), or email our Product Leader at [blair@kubeshop.io](mailto:blair@kubeshop.io). diff --git a/hack/assistant-setup/content/botkube.io__blog__botkube-v1-1-0-release-notes.md b/hack/assistant-setup/content/botkube.io__blog__botkube-v1-1-0-release-notes.md new file mode 100644 index 0000000..8aa32eb --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__botkube-v1-1-0-release-notes.md @@ -0,0 +1,85 @@ +Title: Botkube v1.1.0 Release Notes + +URL Source: https://botkube.io/blog/botkube-v1-1-0-release-notes + +Published Time: Jun 21, 2023 + +Markdown Content: +![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) + +Maria Ashby + +Developer Advocate + +Botkube + +Our most recent realese of Botkube Cloud & Open Source brings important features that help with Kubernetes troubleshooting. This update brings quick Slack connection to your cluster! + +### Table of Contents + +* [What is Botkube?](#what-is-botkube-) +* [Botkube Cloud with Cloud Slack Integration](#botkube-cloud-with-cloud-slack-integration) +* [Here are the key features of Botkube Cloud:](#here-are-the-key-features-of-botkube-cloud-) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +We are excited to announce the latest release of Botkube, packed with new features and improvements to enhance your Kubernetes collaborative troubleshooting experience. In this release, we focused on two major areas: the introduction of Botkube Cloud with Cloud Slack integration and several bug fixes and enhancements for our open-source version. + +What is Botkube? +---------------- + +Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. This means you'll gain instant visibility and control over your cluster resources, all without ever having to leave your messaging platform. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. In this blog post, we'll give you an overview of all of Botkube’s newest features from the v1.1.0 release. + +Botkube Cloud with Cloud Slack Integration +------------------------------------------ + +With the growing popularity of cloud-based collaboration tools, we recognized the need to provide seamless integration with popular platforms like Slack. That's why we are thrilled to introduce the Botkube Cloud Slack app that integrates with the Botkube web app. This makes it easier than ever to receive Kubernetes alerts and notifications directly in your Slack workspace, and manage all of your Kubernetes clusters using a single Slack app. + +Here are the key features of Botkube Cloud: +------------------------------------------- + +### Easy Installation: + +Setting up Botkube Cloud is a breeze. Simply connect your Slack workspace to the Botkube app with the click of a button. + +![Image 2: connect cluster in azure stack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64940fc9213e4ff10a1b4672_jaaGtHC2ScR0Nac7Bts5ZqRHFfLVeeZYeY4oQk6BN3mYKpUVH09FW11MtSqAA7UBZAc-YOWj38D9F54ahYH5xRE0oDlxc9K17hYum4BIp30W64-cZxHWJJZwKrv7mNYV9-yJ46QlBcSWkiiLgIzIt20.png) + +‍ + +Invite the Botkube bot to the channels you want to use, and continue your configuration. Install Botkube into your Kubernetes clusters, and you're ready to manage your clusters from Slack. + +![Image 3: a screenshot of the adwords dashboard](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64940fe3950f20abf76fa3ce_StacAl4VR0BYqGhlJz4HOSii505G8uK8S4WNAptRmeQ0zBU3u_tzqj6Cnwmi5fjYC1aR0ssDiaKbxrrwFatfr0nolxyrFGtBbHKnlNXHpqE2oLA4GwMNU_qc6ufRj-4c71QTo5fDSK0GkHhH31kQjlY.png) + +‍ + +### Multi-Cluster Support: + +Botkube Cloud allows you to manage multiple Kubernetes clusters using a single Slack app. The new Botkube Slack app uses our cloud services to route executor commands to the correct cluster. There's no longer a need for a separate Slack app per cluster. This centralized approach saves time and effort when managing alerts and notifications across different environments. + +### Open Source Enhancements: + +While the majority of our efforts went into Botkube Cloud, we also dedicated some time to improving the open-source version. In this release, we focused on bug fixes and enhancing security and usability. Here are some of the notable changes: + +### Early Configuration Error Detection: + +We understand the frustration of misconfigurations, so we added a new feature to provide users with immediate feedback when there is an error in their configuration. This helps users identify and rectify any issues quickly, ensuring smooth operation. + +### Binary SHA Validation: + +To improve security, we now validate the SHA of downloaded binaries. This ensures the integrity of the Botkube installation and protects against potential tampering or unauthorized modifications. + +### Ignored Namespace Optimization: + +We addressed an issue where Botkube was spamming notifications about events in ignored namespaces. With the fix, you can now confidently ignore specific namespaces without being bombarded with unnecessary alerts. + +### Mattermost Bug Fix: + +Thanks to an external contribution, we resolved a bug related to Mattermost integration. The fix ensures smooth and reliable communication with Mattermost, enhancing the overall user experience. + +We would like to express our gratitude to the community for their ongoing support and feedback. Your contributions have helped us refine and enhance Botkube, making it a more robust and reliable tool for Kubernetes troubleshooting. + +We encourage you to update your Botkube installation to benefit from these enhancements. Your feedback and suggestions are invaluable in shaping the future of Botkube. + +You can talk to us in the Botkube [GitHub issues](https://github.com/kubeshop/botkube/issues), Botkube [Slack community](http://join.botkube.io/), or email our Product Leader at [blair@kubeshop.io](mailto:blair@kubeshop.io). + +‍ diff --git a/hack/assistant-setup/content/botkube.io__blog__botkube-v1-2-0-release-notes.md b/hack/assistant-setup/content/botkube.io__blog__botkube-v1-2-0-release-notes.md new file mode 100644 index 0000000..18db4c8 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__botkube-v1-2-0-release-notes.md @@ -0,0 +1,113 @@ +Title: Botkube v1.2.0 Release Notes + +URL Source: https://botkube.io/blog/botkube-v1-2-0-release-notes + +Published Time: Jul 18, 2023 + +Markdown Content: +![Image 1: a man with a beard wearing a black shirt](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) + +Blair Rampling + +Product Leader + +Botkube + +Our most recent realese of Botkube Cloud & Open Source brings important features that help with Kubernetes troubleshooting. This update brings quick Slack connection to your cluster! + +### Table of Contents + +* [What is Botkube?](#what-is-botkube-) +* [Doctor Plugin](#doctor-plugin) +* [Botkube CLI for Installation](#botkube-cli-for-installation) +* [Botkube CLI for Easy Cloud Migration](#botkube-cli-for-easy-cloud-migration) +* [Exec Plugin](#exec-plugin) +* [Bug Fixes](#bug-fixes) +* [Feedback - We’d Love to Hear From You!](#feedback-we-d-love-to-hear-from-you-) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +Botkube is introducing the power of AI to Kubernetes troubleshooting! We are excited to announce the latest release of Botkube, packed with new features and improvements to enhance your Kubernetes collaborative troubleshooting experience. This release introduces + +* Doctor, a ChatGPT plugin for Botkube + +* Botkube CLI for easier installation and simple migration to Botkube Cloud + +* Exec, a Botkube plugin that allows you to run any CLI command from your collaboration platform + + +What is Botkube? +---------------- + +Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. This means you'll gain instant visibility and control over your cluster resources, all without ever having to leave your messaging platform. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. In this blog post, we'll give you an overview of all of Botkube’s newest features from the v1.2.0 release. + +_If you have any feature requests or bug reports, reach out to us on [Slack](http://join.botkube.io/) or submit a [Github issue](https://github.com/kubeshop/botkube/issues)_ + +Doctor Plugin +------------- + +AI has been making incredible progress recently. Large Language Models power tools like ChatGPT to answer almost any question using the collective knowledge stored over years on the Internet. New applications for these tools are being recognized every day and now you can use the power of ChatGPT to troubleshoot your Kubernetes clusters with Botkube. + +The Doctor plugin only requires an OpenAI API key to configure. The easiest way to configure it is through the [Botkube web app](https://app.botkube.io/) if your cluster is connected. Otherwise you can enable it in your [Botkube YAML configuration](https://docs.botkube.io/configuration/executor/doctor). Once enabled, you can ask questions about specific resources or ask free-form questions, directly from any enabled channel. + +‍ + +![Image 2: a screenshot of a page with a number of different items on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64b6a35168a1227527eb6501_Screenshot%202023-07-18%20at%2016.13.06.png) + +Find out how to use the Doctor plugin in the [documentation](https://docs.botkube.io/usage/executor/doctor). + +Botkube CLI for Installation +---------------------------- + +We've introduced the Botkube CLI in order to streamline the installation process. Previous versions of Botkube were installed using Helm which was quick and easy but if misconfigurations or other errors occurred, they weren't so easy to find. Helm is great for unattended installations, but not very interactive. + +The new Botkube CLI still uses Helm in the background. The CLI ensures all of the necessary resources are created and streams the installation log to you in real time. This lets you respond to any errors or misconfigurations much quicker. + +‍ + +![Image 3: a screen shot of a computer screen with a black background](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64b6a3374b2b9c3d5500b9c2_Screenshot%202023-07-18%20at%2014.51.10.png) + +Botkube can still be installed using the Helm chart alone if you want to perform automated installations with CI or GitOps tools. + +It's easy to get started with the Botkube CLI, check out the [documentation](https://docs.botkube.io/cli/getting-started). + +Botkube CLI for Easy Cloud Migration +------------------------------------ + +[Botkube Cloud](https://app.botkube.io/) was released with Botkube v1.0 and enhanced with advanced Slack support in [v1.1.0](https://botkube.io/blog/botkube-v1-1-0-release-notes). Botkube Cloud provides quicker configuration and installation, multi-cluster configuration management, aggregated audit and event logs for all of your clusters, and advanced Slack multi-cluster executor routing. + +If you are using Botkube in your cluster with local configuration and you didn't install via Botkube Cloud, you now have a simple on-ramp to the advanced Botkube Cloud services. Here's how to migrate your Botkube installation: + +1. Create a [Botkube Cloud](https://app.botkube.io/) account + +2. Install the [Botkube CLI](https://docs.botkube.io/cli/getting-started) + +3. Run botkube login to [authenticate](https://docs.botkube.io/cli/getting-started#first-use) your CLI + +4. Run botkube migrate to [move your configuration](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud) to the cloud and connect your Botkube installation automatically + + +Botkube Cloud is free to use for a single cluster up to 20 nodes. For multi-cluster management, larger clusters (>20 nodes), and advanced Slack functionality, a Botkube Cloud subscription is required. + +Exec Plugin +----------- + +The Exec plugin is the result of an experiment to find out how flexible the Botkube plugin system really can be. Exec allows you to install and run any CLI directly from your communication platform with Botkube. It also lets you create your own interactive Slack interface for those CLIs. + +The Exec plugin is not meant as a replacement for dedicated executor plugins, but you can use it to get acquainted with the plugin system, to quickly test out a new CLI in Botkube, or in a lab environment. + +Check out the [installation](https://docs.botkube.io/configuration/executor/exec) and [usage](https://docs.botkube.io/usage/executor/exec) documentation for details on how to get started. + +Bug Fixes +--------- + +We have also fixed a couple of small bugs in Botkube that were reported to us by users and found by us. You can see the full list of changes in the [changelog](https://github.com/kubeshop/botkube/releases/tag/v1.2.0). + +We appreciate your bug reports and pull requests! If you notice a bug in Botkube, please report it as a [GitHub issue](https://github.com/kubeshop/botkube/issues) and we are happy to collaborate with you on getting it resolved. + +Feedback - We’d Love to Hear From You! +-------------------------------------- + +As always, we want to hear your feedback and ideas about Botkube. Help us plan the Botkube roadmap, get the features you’d like implemented, and get bugs fixed quickly. + +You can talk to us in the Botkube [GitHub issues](https://github.com/kubeshop/botkube/issues), Botkube [Slack community](http://join.botkube.io/), or email our Product Leader at [blair@kubeshop.io](mailto:blair@kubeshop.io). diff --git a/hack/assistant-setup/content/botkube.io__blog__botkube-v1-3-0-release-notes.md b/hack/assistant-setup/content/botkube.io__blog__botkube-v1-3-0-release-notes.md new file mode 100644 index 0000000..cf3f8a1 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__botkube-v1-3-0-release-notes.md @@ -0,0 +1,100 @@ +Title: Botkube v1.3.0 Release Notes + +URL Source: https://botkube.io/blog/botkube-v1-3-0-release-notes + +Published Time: Aug 15, 2023 + +Markdown Content: +![Image 1: a man with a beard wearing a black shirt](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) + +Blair Rampling + +Product Leader + +Botkube + +Our most recent release of Botkube Cloud & Open Source brings important features that help with Kubernetes troubleshooting. This update introduces several new Botkube plugins. + +### Table of Contents + +* [What is Botkube?](#what-is-botkube-) +* [Keptn Source Plugin](#keptn-source-plugin) +* [Flux CD Executor Plugin](#flux-cd-executor-plugin) +* [GitHub Events Source Plugin](#github-events-source-plugin) +* [Slack message reactions](#slack-message-reactions) +* [Bug Fixes](#bug-fixes) +* [Feedback - We’d Love to Hear From You!](#feedback-we-d-love-to-hear-from-you-) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +#### Get started with Botkube Cloud + +The Botkube plugin ecosystem is expanding! We are excited to announce the latest release of Botkube, packed with new features and improvements to enhance your Kubernetes collaborative troubleshooting experience. This release introduces: + +* GitHub source plugin + +* Keptn source plugin + +* Flux CD executor plugin + +* Slack message reactions + + +As usual, all of these plugins can be easily configured in [Botkube Cloud](https://app.botkube.io/) or via [manual YAML configuration](https://docs.botkube.io/configuration/) for the open source Botkube engine. + +[Botkube Actions](https://docs.botkube.io/configuration/action) also allow you to automate any of the Botkube plugins. That means that any source plugin can trigger a command in any executor plugin. Botkube is the automation glue that can tie together all of the tools you use both inside and outside of your Kubernetes cluster. We have more details coming up in future blog posts on how to use Botkube to manage and monitor your GitOps workflows with diverse tools. + +What is Botkube? +---------------- + +Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. This means you'll gain instant visibility and control over your cluster resources, all without ever having to leave your messaging platform. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. In this blog post, we'll give you an overview of all of Botkube’s newest features from the v1.2.0 release. + +_If you have any feature requests or bug reports, reach out to us on [Slack](http://join.botkube.io/) or submit a [Github issue](https://github.com/kubeshop/botkube/issues)_ + +Keptn Source Plugin +------------------- + +The Keptn source plugin is the latest edition to Botkube’s source plugin CNCF tool suite. By incorporating Keptn, you can effortlessly orchestrate load tests and validate the results. To simplify the understanding of Keptn's synergy with Botkube, we'll take a hands-on approach. We'll deploy a straightforward task using Keptn, and then seamlessly capture Keptn events through Botkube. The result? Notifications delivered straight to your chosen communication platform, such as Slack. This integration not only enhances your insight into the deployment process but also streamlines your workflow.With this exciting update, we're merging the capabilities of Keptn and Botkube to streamline your workflow, enhance collaboration, and ensure that your deployments are more efficient than ever before. + +Find out how to use the Keptn source plugin in the [documentation](https://docs.botkube.io/configuration/source/keptn). + +You can read all about how we developed the Keptn source plugin (and how to create your own source plugins) in this [Botkube blog post](https://botkube.io/blog/implementing-your-own-botkube-plugin-a-real-life-use-case). + +Flux CD Executor Plugin +----------------------- + +Introducing the New Flux Executor Plugin The Flux executor plugin marks a new approach to Botkube executor plugins. It doesn't just offer the convenience of running Flux CLI commands directly from communications platforms like Slack or Discord; it goes further by incorporating interactivity, such as tables and more. + +But the true game-changer is the integration of a practical, real-world use-case right from the start. With the Botkube Flux executor, executing a single command can initiate a thorough comparison between a specific pull request and the current state of your cluster. For example: Sample code This command streamlines tasks like: Automatically identifying the related GitHub repository linked to the provided kustomization. Effortlessly cloning the repository. Checking out the specified pull request. Seamlessly contrasting the changes in the pull request against the cluster's present state. Gone are the days of laborious manual processes.The Botkube Flux executor helps to eliminate these complexities out of the GitOps workflow. + +Find out how to use the Flux CD executor plugin in the [documentation](https://docs.botkube.io/configuration/executor/flux). + +GitHub Events Source Plugin +--------------------------- + +The GitHub Events source plugin is the first Botkube plugin that we have developed that works outside of the Kubernetes cluster. This plugin allows you to stream events from the GitHub repositories you select via Botkube to your collaboration platform. Botkube Actions make this plugin especially exciting. You can use the GitHub plugin to watch for pull requests that make application or configuration changes to your environment and trigger other tools, like GitOps reviews or security scans. + +Find out how to use the GitHub Events source plugin in the [documentation](https://docs.botkube.io/configuration/source/github-events). + +Slack message reactions +----------------------- + +Botkube has introduced a lot of new executor plugins to help you troubleshoot and manage your Kubernetes clusters. Some commands take some time to process in the background and until now, you couldn't see if the command had completed, you just had to wait for a response. We have introduced emoji reactions to executor requests that show the state of the command. If you see 👀, the command is still running. Once the command is complete, the reaction automatically changes to ✅. + +![Image 2: a screenshot of a screen showing a number of people](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64db6cd0c67e3e749437884e_Screenshot%202023-08-15%20at%2014.17.12.png) + +Note that if you are using Botkube already, you need to add the `reactions:write` scope to the Bot Token. If you are using the Botkube [Cloud Slack](https://docs.botkube.io/installation/slack/cloud-slack) app, you can update directly from the Botkube Cloud web app. If you are using the Botkube [Socket Slack](https://docs.botkube.io/installation/slack/socket-slack/self-hosted) app, you need to go to the [Slack App console](https://api.slack.com/apps/), select your Botkube app, navigate to OAuth & Permissions, and add the `reactions:write` scope to the Bot Token configuration. You then need to reinstall the Slack app from the console. + +Bug Fixes +--------- + +We have also fixed a couple of small bugs in Botkube that were reported to us by users and found by us. You can see the full list of changes in the [changelog](https://github.com/kubeshop/botkube/releases/tag/v1.3.0). + +We appreciate your bug reports and pull requests! If you notice a bug in Botkube, please report it as a [GitHub issue](https://github.com/kubeshop/botkube/issues) and we are happy to collaborate with you on getting it resolved. + +Feedback - We’d Love to Hear From You! +-------------------------------------- + +As always, we want to hear your feedback and ideas about Botkube. Help us plan the Botkube roadmap, get the features you’d like implemented, and get bugs fixed quickly. + +You can talk to us in the Botkube [GitHub issues](https://github.com/kubeshop/botkube/issues), Botkube [Slack community](http://join.botkube.io/), or email our Product Leader at [blair@kubeshop.io](mailto:blair@kubeshop.io). diff --git a/hack/assistant-setup/content/botkube.io__blog__botkube-v1-4-0-release-notes.md b/hack/assistant-setup/content/botkube.io__blog__botkube-v1-4-0-release-notes.md new file mode 100644 index 0000000..2b95640 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__botkube-v1-4-0-release-notes.md @@ -0,0 +1,104 @@ +Title: Botkube v1.4.0 Release Notes - Now with Native Argo CD Support + +URL Source: https://botkube.io/blog/botkube-v1-4-0-release-notes + +Published Time: Sep 19, 2023 + +Markdown Content: +![Image 1: a man with a beard wearing a black shirt](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) + +Blair Rampling + +Product Leader + +Botkube + +Our most recent release of Botkube brings important features that help with Kubernetes troubleshooting. This update introduces Botkube support for Argo CD sources and more. + +### Table of Contents + +* [What is Botkube?](#what-is-botkube-) +* [Argo CD Source Plugin](#argo-cd-source-plugin) +* [Mattermost Bot Account Support](#mattermost-bot-account-support) +* [Custom OpenAI API Parameters for the Doctor Plugin](#custom-openai-api-parameters-for-the-doctor-plugin) +* [Elasticsearch V8 Support](#elasticsearch-v8-support) +* [Restart Crashed Plugins](#restart-crashed-plugins) +* [Bug Fixes](#bug-fixes) +* [Feedback - We’d Love to Hear From You!](#feedback-we-d-love-to-hear-from-you-) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +#### Get started with Botkube Cloud + +Botkube continues to enhance your GitOps experience by adding support for Argo CD via a new source plugin! We are excited to announce the latest release of Botkube, packed with new features and improvements to enhance your Kubernetes collaborative troubleshooting experience. This release introduces: + +* [Argo CD source plugin](https://docs.botkube.io/configuration/source/argocd) + +* [Mattermost Bot Account support](https://docs.botkube.io/installation/mattermost/self-hosted) + +* [Custom OpenAI API parameters for the Doctor plugin](https://docs.botkube.io/configuration/executor/doctor) + +* [Elasticsearch V8 support](https://docs.botkube.io/installation/elasticsearch/self-hosted)) + +* Restart crashed plugins + + +As usual, plugins can be easily configured in [Botkube Cloud](https://app.botkube.io/) or via [manual YAML configuration](https://docs.botkube.io/configuration/) for the open source Botkube engine. + +[Botkube Actions](https://docs.botkube.io/configuration/action) also allow you to automate any of the Botkube plugins. That means that any source plugin can trigger a command in any executor plugin. Botkube is the automation glue that can tie together all of the tools you use both inside and outside of your Kubernetes cluster. We have more details coming up in future blog posts on how to use Botkube to manage and monitor your GitOps workflows with diverse tools. + +What is Botkube? +---------------- + +[Botkube](http://app.botkube.io/) is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. This means you'll gain instant visibility and control over your cluster resources, all without ever having to leave your messaging platform. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. + +_If you have any feature requests or bug reports, reach out to us on [Slack](http://join.botkube.io/) or submit a [Github issue](https://github.com/kubeshop/botkube/issues)_ + +Argo CD Source Plugin +--------------------- + +The [Argo CD source plugin](https://docs.botkube.io/configuration/source/argocd) is another addition to Botkube's [support for GitOps processes and lifecycles](https://botkube.io/blog/enhancing-gitops-workflows-with-botkube). The Argo CD source plugin allows users to receive and interact with crucial real time notifications when deploying applications in production -- how the deployment is progressing, a health check on the deployment, and more — all directly into communication platforms like Slack, Mattermost, MS Teams, and Discord. While Argo CD does provide a native notification system in some of these platforms, the set-up process can be cumbersome and difficult with many manual steps to get up and running. Botkube’s plug-and-play-style native Argo CD plugin can be configured in minutes directly in [Botkube’s web interface](http://app.botkube.io/). + +![Image 2: a screenshot of a screen showing the status of an application](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6509a59c63441b36226ea80d_argocd-events-e6eabb1f581e9822020d55461539bfcd.png) + +You can get started with the Argo CD with the [Documentation](https://docs.botkube.io/configuration/source/argocd). + +Mattermost Bot Account Support +------------------------------ + +Botkube now supports running as a [Mattermost bot account](https://developers.mattermost.com/integrate/reference/bot-accounts/). Mattermost bot accounts have more limited privileges, do not consume a user license, and are not associated with a specific user so there's no concern about Botkube continuing to run if someone leaves your organization. + +Get started with Mattermost and Botkube with the [documentation](https://docs.botkube.io/installation/mattermost/self-hosted). + +Custom OpenAI API Parameters for the Doctor Plugin +-------------------------------------------------- + +The Botkube Doctor plugin now supports configurable alternate base URLs for the OpenAI API. This means you can use other OpenAI-compatible APIs with the doctor plugin. You can use Azure OpenAI Service, 3rd party Llama models, OpenAI proxies, and more. + +Find out how to configure custom parameters for Doctor in the [documentation](https://docs.botkube.io/configuration/executor/doctor). + +Elasticsearch V8 Support +------------------------ + +Botkube now supports Elasticsearch V8 as a platform. If you're using the latest and greatest version of Elasticsearch, Botkube has you covered and will happily send your events over. + +Get set up with Elasticsearch with the [documentation](https://docs.botkube.io/installation/elasticsearch/self-hosted). + +Restart Crashed Plugins +----------------------- + +We have added advanced logic to the Botkube plugin system in order to detect plugins that might have crashed and automatically restart them. This makes Botkube more reliable as a core part of your observability and troubleshooting platform. Plugin crashes are logged to the Botkube pod log and will only attempt to restart a fixed number of times in order to avoid continuous restart loops. + +Bug Fixes +--------- + +We have also fixed a couple of small bugs in Botkube that were reported to us by users and found by us. You can see the full list of changes in the [changelog](https://github.com/kubeshop/botkube/releases/tag/v1.4.0). + +We appreciate your bug reports and pull requests! If you notice a bug in Botkube, please report it as a [GitHub issue](https://github.com/kubeshop/botkube/issues) and we are happy to collaborate with you on getting it resolved. + +Feedback - We’d Love to Hear From You! +-------------------------------------- + +As always, we want to hear your feedback and ideas about Botkube. Help us plan the Botkube roadmap, get the features you’d like implemented, and get bugs fixed quickly. + +You can talk to us in the Botkube [GitHub issues](https://github.com/kubeshop/botkube/issues), Botkube [Slack community](http://join.botkube.io/), or email our Product Leader at [blair@kubeshop.io](mailto:blair@kubeshop.io). diff --git a/hack/assistant-setup/content/botkube.io__blog__build-a-github-issues-reporter-for-failing-kubernetes-apps-with-botkube-plugins.md b/hack/assistant-setup/content/botkube.io__blog__build-a-github-issues-reporter-for-failing-kubernetes-apps-with-botkube-plugins.md new file mode 100644 index 0000000..67d0731 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__build-a-github-issues-reporter-for-failing-kubernetes-apps-with-botkube-plugins.md @@ -0,0 +1,316 @@ +Title: Build a GitHub Issues Reporter for failing K8s Apps + +URL Source: https://botkube.io/blog/build-a-github-issues-reporter-for-failing-kubernetes-apps-with-botkube-plugins + +Published Time: Feb 01, 2023 + +Markdown Content: +![Image 1: a man with his arms crossed in front of a black background](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3ec19d99029e7cfb5bd_n-vUM0Lz3yXA1WLyfxEMUxXQpUDEiKv9EmEe4NnCbCI.png) + +Mateusz Szostok + +Software Engineer + +Botkube + +Botkube 0.17 introduces plugin support. In this guide you will learn how to create your own Botkube executor plugin to build a GitHub issues reporter for Kubernetes apps that are failing. + +### Table of Contents + +* [Goal](#goal) +* [Prerequisites](#prerequisites) +* [What's under the hood](#what-s-under-the-hood) +* [Step-By-Step Instructions](#step-by-step-instructions) +* [Summary](#summary) +* [How can I get involved?](#how-can-i-get-involved-) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +Botkube gives you fast and simple access to your clusters right from your communication platform. It does that by sending [actionable notifications](https://docs.botkube.io/configuration/action) (via [_sources_](https://docs.botkube.io/architecture/#source)) and allowing you to run _kubectl_ and _helm_ commands (via [_executors_](https://docs.botkube.io/architecture/#executor)) straight from the platform (Slack, Discord, Microsoft Teams and Mattermost). + +In the recent Botkube 0.17 release, we took it to the next level by giving you an easy way to bring your own tools to a chat window! + +In this blog post, you will learn how to develop your own executor plugin to fill the gap in your daily workflow. + +Goal +---- + +To make it simple but functional, I will show you how to develop an executor that creates an issue for failing Kubernetes resources such as Job, Deployment, StatefulSet, and Pod. + +![Image 2: Github reporter bot for updating Slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/63d810824fa1ec68968b8ee2_gh-demo.gif) + +GitHub executor demo + +### Why it's worth it + +With just a few lines of code, we will automate the process of creating a GitHub issue that out-of-the box contains Kubernetes-specific information useful for further debugging. All of that, directly from Slack, Discord, Mattermost, or MS Teams! No need for connecting to your cluster in your terminal, installing and running _kubectl_ commands and copy-pasting fetched details into your browser. + +Instead, you will be able to type **_@Botkube gh create issue pod/foo_** from any device that has access to your chat, including mobile apps. + +Prerequisites +------------- + +* Access to a Kubernetes cluster**‍**‍ + +To create a local cluster for testing purposes using [`k3d`](https://k3d.io/v5.0.1/#installation), run: + +* [Botkube installed and configured](https://docs.botkube.io/)[](https://docs.botkube.io/installation/) * Basic understanding of the Go language[‍](https://go.dev/doc/install) + +* [Go](https://go.dev/doc/install) at least 1.18 + + +‍ + +What's under the hood +--------------------- + +To understand better what we will develop, I want to give you a bigger picture of the Botkube plugin system. The animation below focuses only on the executor part, but it's almost the same for sources. + +![Image 3: Custom built plugin system for Kubernetes tools](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/63d811d4762a4de9804bc215_arch-executor-plugin.gif) + +Botkube Plugin System + +The new part is a plugin repository that we introduced in 0.17. Plugin repository is a place where you store your plugin binaries and index files. Any static file server can be used, and in this blog post we will use a GitHub release. It’s similar to what you know from the Helm ecosystem. + +The plugin manager consumes user's configuration, and downloads and starts **only** enabled plugins from a given repository. Plugins are running directly on the Kubernetes cluster where the Botkube core was installed. + +Such approach allows us to decouple the Botkube core and its extensions. Thanks to that, we can: + +* Avoid having the Botkube core crash if a given plugin malfunctions + +* Write extensions in any language as gRPC is used + + +From the end-user's perspective, you can: + +* Specify and use multiple plugin repositories at the same time + +* Enable different plugin versions within the same Botkube version + + +To learn more, see [Botkube architecture](https://docs.botkube.io/architecture/). + +Step-By-Step Instructions +------------------------- + +To quickly onboard you to Botkube plugins, we maintain the [kubeshop/botkube-plugins-template](https://github.com/kubeshop/botkube-plugins-template) repository that has all batteries included. Our first step is to bootstrap your own GitHub repository. + +To check out the entire code, visit the [Botkube GitHub repository](https://github.com/kubeshop/botkube/tree/main/cmd/executor/gh/main.go). + +### Repository setup + +1. Navigate to [botkube-plugins-template](https://github.com/kubeshop/botkube-plugins-template). + +2. Click **Use this template**, and then **Create a new repository**. + + +‍ + +![Image 4: github pull request automation](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/63d812e448eb8e82ad2d44d9_tpl-repo.png) + +By doing so, you will create your own plugin repository with a single commit. + +3. Clone your repository locally:_‍_ + +4. Create and push a new tag to perform the initial release: + +After a few minutes, you should see a new GitHub release. + +Voilà! You are already an owner of fully functional Botkube plugins. Now it's time to add your own brick by creating a GitHub executor. + +‍ + +In this blog post, we use only GitHub releases that work out-of-the-box. Releasing plugins on GitHub Pages requires additional setup. To support them too, see the [use template document](https://docs.botkube.io/plugin/quick-start#use-template) + +‍ + +### Develop GitHub executor + +To make the code-snippets more readable, I skipped the error handling. However, it will be useful if you will add error handling for the final implementation. You can check the full [gh source-code](https://github.com/kubeshop/botkube/tree/main/cmd/executor/gh/main.go) for the reference. + +‍ + +1. Create a `cmd/gh/main.go` file with the following template: + +
package main
import (
"context"
"github.com/hashicorp/go-plugin"
"github.com/kubeshop/botkube/pkg/api"
"github.com/kubeshop/botkube/pkg/api/executor"
)
const (
pluginName = "gh"
)
// GHExecutor implements the Botkube executor plugin interface.
type GHExecutor struct{}
// Metadata returns details about the GitHub plugin.
func (*GHExecutor) Metadata(context.Context) (api.MetadataOutput, error) {
return api.MetadataOutput{
Version: "v1.0.0",
Description: "GH creates an issue on GitHub for a related Kubernetes resource.",
}, nil
}
// Execute returns a given command as a response.
func (e *GHExecutor) Execute(ctx context.Context, in executor.ExecuteInput) (executor.ExecuteOutput, error) {
return executor.ExecuteOutput{
Data: "Aloha! 🏄",
}, nil
}
func main() {
executor.Serve(map[string]plugin.Plugin{
pluginName: &executor.Plugin{
Executor: &GHExecutor{},
},
})
}
This template code imports required packages and registers `GHExecutor` as the gRPC plugin. Our `GHExecutor` service already implements the required [Protocol Buffers](https://github.com/kubeshop/botkube/blob/main/proto/executor.proto) contract. As you can see, we require **only 2 methods**. + +\- The `Metadata` method returns basic information about your plugin. This data is used when the plugin index is [generated in an automated way](https://docs.botkube.io/plugin/repo). + +\- The `Execute` method is the heart of your executor plugin. This method runs your business logic and returns the output as plaintext. Next, the Botkube core sends back the response to a given communication platform. + +‍ + +2. To download the imported dependencies, in your terminal, run: + +‍ + +3. Great! At this stage, you already have a functional Botkube executor plugin. However, for now, it only responds with a hard-coded "Aloha!" greeting. But it can do that already on all supported communication platforms. ‍ + +![Image 5: Getting GitHub reports in Slack about repo](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/63d814cf12ac7e2d4a40d002_demo-gh-aloha.gif) + +Don't worry, in the next steps, we will implement our business logic. + +4. Add support for user configuration: + +
package main
import (
"context"
"fmt"
"github.com/kubeshop/botkube/pkg/api/executor"
"github.com/kubeshop/botkube/pkg/pluginx"
)
// Config holds the GitHub executor configuration.
type Config struct {
GitHub struct {
Token string `yaml:"token"`
Repository string `yaml:"repository"`
IssueTemplate string `yaml:"issueTemplate"`
} `yaml:"gitHub"`
}
// Execute returns a given command as a response.
func (e *GHExecutor) Execute(_ context.Context, in executor.ExecuteInput) (executor.ExecuteOutput, error) {
var cfg Config
pluginx.MergeExecutorConfigs(in.Configs, &cfg)
}
+ +For each `Execute` method call, Botkube attaches the list of associated configurations. The input parameters are defined by the user, when enabling a given plugin: + +
executors:
"plugin-based":
repo-name/gh:
enabled: true # If not enabled, plugin is not downloaded and started.
config: # Plugin's specific configuration.
github:
repository: "mszostok/repository"
token: "github_pat_foo"
issueTemplate: |
## Description
This issue refers to the problems connected with {{ .Type | code "bash" }} in namespace {{ .Namespace | code "bash" }}
{{ .Logs | code "bash"}}
+ +In our case, we need to have a GitHub token, a GitHub repository where the issue should be created, and an issue template. The remaining parameters can be hard-coded on the plugin side, however, your plugin will be more flexible if you allow your users to change it without rebuilding your plugins.It's up to the plugin author to merge the passed configurations. You can use our helper function from the plugin extension package (`pluginx`). To learn more, see [Passing configuration to your plugin](https://docs.botkube.io/plugin/custom-executor#passing-configuration-to-your-plugin). + +‍**‍**‍ + +5. Let's implement command parsing to properly understand command syntax: + +Our goal is to parse `gh create issue KIND/NAME [-n, --namespace]` There are a lot of great libraries supporting command parsing. The most popular is probably [cobra](https://github.com/spf13/cobra), but for our use case, we will just use the helper function from our plugin extension package. + +
const (
pluginName = "gh"
)
// Commands defines all supported GitHub plugin commands and their flags.
type (
Commands struct {
Create *CreateCommand `arg:"subcommand:create"`
}
CreateCommand struct {
Issue *CreateIssueCommand `arg:"subcommand:issue"`
}
CreateIssueCommand struct {
Type string `arg:"positional"`
Namespace string `arg:"-n,--namespace"`
}
)
// Execute returns a given command as a response.
func (e *GHExecutor) Execute(ctx context.Context, in executor.ExecuteInput) (executor.ExecuteOutput, error) {
// ...
var cmd Commands
pluginx.ParseCommand(pluginName, in.Command, &cmd)
if cmd.Create == nil || cmd.Create.Issue == nil {
return executor.ExecuteOutput{
Data: fmt.Sprintf("Usage: %s create issue KIND/NAME", pluginName),
}, nil
}
// ...
}
+ +Under the hood, the `pluginx.ParseCommand` method uses [go-arg](https://github.com/alexflint/go-arg). + +‍ + +6. We are almost there! Now let's fetch the issue details: + +
const (
logsTailLines = 150
defaultNamespace = "default"
)
// Execute returns a given command as a response.
func (e *GHExecutor) Execute(ctx context.Context, in executor.ExecuteInput) (executor.ExecuteOutput, error) {
// ...
issueDetails, _ := getIssueDetails(ctx, cmd.Create.Issue.Namespace, cmd.Create.Issue.Type)
// ...
}
// IssueDetails holds all available information about a given issue.
type IssueDetails struct {
Type string
Namespace string
Logs string
Version string
}
func getIssueDetails(ctx context.Context, namespace, name string) (IssueDetails, error) {
if namespace == "" {
namespace = defaultNamespace
}
logs, _ := pluginx.ExecuteCommand(ctx, fmt.Sprintf("kubectl logs %s -n %s --tail %d", name, namespace, logsTailLines))
ver, _ := pluginx.ExecuteCommand(ctx, "kubectl version -o yaml")
return IssueDetails{
Type: name,
Namespace: namespace,
Logs: logs,
Version: ver,
}, nil
}
+ +Here, we fetch logs and the cluster version, but you can extend it to fetch other details about your cluster. To make it as simple as possible, we use the kubectl CLI and avoid reimplementing a bit more complicated logic for fetching logs from all different Kubernetes kinds. + +‍ + +7. Render issue description: + +
import (
"bytes"
"context"
"fmt"
"text/template"
"github.com/kubeshop/botkube/pkg/api/executor"
)
// Execute returns a given command as a response.
func (e *GHExecutor) Execute(ctx context.Context, in executor.ExecuteInput) (executor.ExecuteOutput, error) {
// ...
mdBody, _ := renderIssueBody(cfg.GitHub.IssueTemplate, issueDetails)
// ...
}
const defaultIssueBody = `
## Description
This issue refers to the problems connected with {{ .Type | code "bash" }} in namespace {{ .Namespace | code "bash" }}
Logs
{{ .Logs | code "bash"}}
### Cluster details
{{ .Version | code "yaml"}}
`
func renderIssueBody(bodyTpl string, data IssueDetails) (string, error) {
if bodyTpl == "" {
bodyTpl = defaultIssueBody
}
tmpl, _ := template.New("issue-body").Funcs(template.FuncMap{
"code": func(syntax, in string) string {
return fmt.Sprintf("\n```%s\n%s\n```\n", syntax, in)
},
}).Parse(bodyTpl)
var body bytes.Buffer
tmpl.Execute(&body, data)
return body.String(), nil
}
+ +In this step, we use the issue template that the user specified in plugin configuration. I decided to use the [Go template](https://pkg.go.dev/text/template), as it fits perfectly into our template rendering flow. + +‍ + +8. Finally! Submitting an issue! + +
package main
import (
"context"
"fmt"
"github.com/kubeshop/botkube/pkg/api/executor"
"github.com/kubeshop/botkube/pkg/pluginx"
)
// Execute returns a given command as a response.
func (e *GHExecutor) Execute(ctx context.Context, in executor.ExecuteInput) (executor.ExecuteOutput, error) {
// ...
title := fmt.Sprintf("The `%s` malfunctions", cmd.Create.Issue.Type)
issueURL, _ := createGitHubIssue(cfg, title, mdBody)
return executor.ExecuteOutput{
Data: fmt.Sprintf("New issue created successfully! 🎉\n\nIssue URL: %s", issueURL),
}, nil
}
func createGitHubIssue(cfg Config, title, mdBody string) (string, error) {
cmd := fmt.Sprintf("gh issue create --title %q --body '%s' --label bug -R %s", title, mdBody, cfg.GitHub.Repository)
envs := map[string]string{
"GH_TOKEN": cfg.GitHub.Token,
}
return pluginx.ExecuteCommandWithEnvs(context.Background(), cmd, envs)
}
GitHub provides a great [gh](https://cli.github.com/) CLI, which we use to submit our issue. To learn more about the CLI syntax, see their [manual](https://cli.github.com/manual/gh_issue_create). + +The `gh` CLI doesn't accept fine-grained access tokens. As a workaround, you can use the [Go SDK](https://gist.github.com/mszostok/defa5a5390e87b4f011b986742f714d8). + +‍ + +9. The last part is to download our dependencies. + +
var depsDownloadLinks = map[string]api.Dependency{
"gh": {
URLs: map[string]string{
"darwin/amd64": "https://github.com/cli/cli/releases/download/v2.21.2/gh_2.21.2_macOS_amd64.tar.gz//gh_2.21.2_macOS_amd64/bin",
"linux/amd64": "https://github.com/cli/cli/releases/download/v2.21.2/gh_2.21.2_linux_amd64.tar.gz//gh_2.21.2_linux_amd64/bin",
"linux/arm64": "https://github.com/cli/cli/releases/download/v2.21.2/gh_2.21.2_linux_arm64.tar.gz//gh_2.21.2_linux_arm64/bin",
"linux/386": "https://github.com/cli/cli/releases/download/v2.21.2/gh_2.21.2_linux_386.tar.gz//gh_2.21.2_linux_386/bin",
},
},
"kubectl": {
URLs: map[string]string{
"darwin/amd64": "https://dl.k8s.io/release/v1.26.0/bin/darwin/amd64/kubectl",
"linux/amd64": "https://dl.k8s.io/release/v1.26.0/bin/linux/amd64/kubectl",
"linux/arm64": "https://dl.k8s.io/release/v1.26.0/bin/linux/arm64/kubectl",
"linux/386": "https://dl.k8s.io/release/v1.26.0/bin/linux/386/kubectl",
},
},
}
func main() {
pluginx.DownloadDependencies(depsDownloadLinks)
//...
}
We already improved this step and in the 0.18 version Botkube will download defined [dependencies automatically](https://docs.botkube.io/next/plugin/dependencies). For now, you can use the `pluginx.DownloadDependencies` function to call our downloader explicitly. The syntax will remain the same. + +‍ + +Congrats! The _gh_ plugin is finally implemented. Now, let's play a DevOps role! 😈 In the next section, I will show you how to build and release your brand-new executor plugin. + +### Release the _gh_ executor + +It's time to build your plugin. For that purpose, we will use [GoReleaser](https://goreleaser.com/). It simplifies building Go binaries for different architectures. The important thing is to produce the binaries for the architecture of the host platform where Botkube is running. Adjust the **goos**, **goarch**, and **goarm** properties based on this architecture. + +‍ Add new build entry under _.goreleaser.yaml_: ‍ + +
builds:
- id: gh
main: cmd/gh/main.go
binary: executor_gh_{{ .Os }}_{{ .Arch }}
no_unique_dist_dir: true
env:
- CGO_ENABLED=0
goos:
- linux
- darwin
goarch:
- amd64
- arm64
goarm:
- 7
+ +‍ Now, we need to distribute our plugins. As we mentioned earlier, a plugin repository can be any static file server. The [kubeshop/botkube-plugins-template](https://github.com/kubeshop/botkube-plugins-template) repository comes with two [GitHub Actions](https://github.com/features/actions): + +1. The [.github/workflows/release.yml](https://github.com/kubeshop/botkube-plugins-template/blob/main/.github/workflows/release.yml) action, which builds the plugin binaries and index file each time a new tag is pushed. + +2. The [.github/workflows/pages-release.yml](https://github.com/kubeshop/botkube-plugins-template/blob/main/.github/workflows/pages-release.yml) action, which updates GitHub Pages with plugin binaries and index file each time a new tag is pushed. + + +To cut a new release, you need to commit all your work and tag a new commit: + +Next, let's push our changes and the new tag: + +This triggers GitHub Action: + +![Image 6: a screenshot of the google analytics dashboard](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/63d817a66682780daf595ab4_release-job.png) + +### What this automation does under the hood + +This automation: + +1. Installs the latest GoReleaser tool. + +2. Builds all plugin binaries defined in the _.goreleaser.yaml_ file. + +3. Generates an index file using the [Botkube helper tool](https://docs.botkube.io/plugin/repo#generate-index-file). + +4. Generates a release description. + +5. Uses the [gh](https://cli.github.com/) CLI to create a new GitHub release. + + +### Use the _gh_ executor + +In the description of a new GitHub release, you will see the repository URL that you can use within Botkube. + +### Steps + +1. Follow one of our [installation guides](https://docs.botkube.io/installation). Once you reach the Botkube deployment step, add flags specified in the steps below to _helm install_. + +2. Export required environment variables: + + +Follow the official GitHub guide on how to create a [personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token#creating-a-personal-access-token-classic). To be able to create GitHub issues, add the **repo** permission. + +3. Add the _gh_ executor related configuration: + +4. Depending on the selected platform, add the _plugin-based_ executor binding. For Slack, it looks like this: + +If you follow all the steps above, you will have all the necessary flags allowing you to install Botkube with the **_gh_** executor! + +Here's an example of a full command that you should have constructed for Slack installation: + +
export SLACK_CHANNEL_NAME={channel_name}
export SLACK_APP_TOKEN={token}
export SLACK_BOT_TOKEN={token}
export PLUGINS_URL={plugin_index_url}
export REPOSITORY={repo} # format OWNER/REPO_NAME, e.g. kubeshop/botkube
export GITHUB_TOKEN={token}
helm install --version v0.17.0 botkube --namespace botkube --create-namespace \
--set communications.default-group.socketSlack.enabled=true \
--set communications.default-group.socketSlack.channels.default.name=${SLACK_CHANNEL_NAME} \
--set communications.default-group.socketSlack.channels.default.bindings.executors={"plugin-based"} \
--set communications.default-group.socketSlack.appToken=${SLACK_APP_TOKEN} \
--set communications.default-group.socketSlack.botToken=${SLACK_BOT_TOKEN} \
--set 'plugins.repositories.botkube-plugins.url'=${PLUGINS_URL} \
--set 'executors.plugin-based.botkube-plugins/gh.config.github.repository'=${REPOSITORY} \
--set 'executors.plugin-based.botkube-plugins/gh.config.github.token'=${GITHUB_TOKEN} \
botkube/botkube
+ +### Testing + +1. Navigate to your communication channel. + +2. On a given channel, run: **@Botkube list executors** + + +![Image 7: a screenshot of a slack screen showing a message from a user](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/63d81ba395f87021e5d45685_list-exec.png) + +It returns information about enabled _gh_ executor + +3. Create a failing Job: + +
apiVersion: batch/v1
kind: Job
metadata:
name: oops
spec:
backoffLimit: 1
template:
spec:
restartPolicy: Never
containers:
- name: main
image: docker.io/library/bash:5
command: ["bash"]
args:
- -c
- echo "Hello from failing job!" && exit 42
‍ ![Image 8: a message from a job application](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/63d81bb595f870bd6ed45689_alert.png) + +After a few seconds, you should see a new alert on your channel + +4. To create a GitHub issue for a given alert, run: **_@Botkube gh create issue job/oops_**‍ + +Summary +------- + +Botkube executors are powerful because they can glue together three important parts: Kubernetes clusters, communicators, and tools of your choice. There would be nothing special about it if it wasn't, in fact, unburdening you of those implementation-specific details. + +As you noticed, you can focus purely on your business logic. Without the need to use different chat libraries, know how to establish secure connection, or make your extension available only on specific channels. What's more, not only do you not have to learn it, but you don't have to support it either, as we do it for you. + +Once Botkube is deployed, your extension will be available to you and your teammates in a given channel. There is no need to maintain your local setup. Thanks to that, you can also easily run executors on private clusters. + +Botkube extensions can be used with other Botkube functionality too. It means that you can use them to create [automation](https://docs.botkube.io/configuration/action). We will shed more light on that in the next blog post. Stay tuned! + +> Implement once, access everywhere (Slack, Discord, Mattermost, MS Teams). + +How can I get involved? +----------------------- + +The implemented plugin is as simple as possible. However, it is a great base for further extension based on your needs; for example: introduce your own Kubernetes annotation to route the notification to a specific repository, add a threshold to create issues only for constantly failing Pods, etc. The possibilities are endless, and we cannot wait to see what kind of great workflows you will create! + +As always, we want to hear your feedback and ideas about Botkube. Help us plan the Botkube roadmap, get the features you’d like implemented. + +There are plenty of options to contact us: + +* [GitHub issues](https://github.com/kubeshop/botkube/issues) + +* [Slack](https://join.botkube.io/) + +* or email our Product Leader at blair@kubeshop.io. + + +‍ Thank you for taking the time to learn about Botkube 🙌 diff --git a/hack/assistant-setup/content/botkube.io__blog__building-a-chatgpt-plugin-from-ideation-to-implementation.md b/hack/assistant-setup/content/botkube.io__blog__building-a-chatgpt-plugin-from-ideation-to-implementation.md new file mode 100644 index 0000000..d47f519 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__building-a-chatgpt-plugin-from-ideation-to-implementation.md @@ -0,0 +1,144 @@ +Title: Building a ChatGPT Plugin: From Ideation to Implementation + +URL Source: https://botkube.io/blog/building-a-chatgpt-plugin-from-ideation-to-implementation + +Published Time: Jul 27, 2023 + +Markdown Content: +![Image 1: a black and white photo of a man in a black shirt](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3ed2e11a11a3c6d7401_53d6BKOddSnzxKZMBQxx_KPWy4IOk8nhK4eSxM8uKIo.jpeg) + +Paweł Kosiec + +Software Engineer + +Botkube + +Botkube now includes AI recommendations to help you diagnose and troubleshoot issues in Kubernetes clusters. Learn how the Botkube team created this new feature in a recent team hackathon. + +### Table of Contents + +* [Introduction](#introduction) +* [Ideation Phase: The Company-Wide Hackathon](#ideation-phase-the-company-wide-hackathon) +* [Planning and Conceptualization](#planning-and-conceptualization) +* [Development Process](#development-process) +* [Result](#result) +* [Conclusion](#conclusion) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +#### Get started with Botkube Cloud + +Introduction +------------ + +The Botkube team is a group of dedicated individuals with a common focus on developing innovative solutions in the technology landscape. With AI getting more and more widely used, the team saw an opportunity to explore the potential of AI-powered chatbots in the DevOps space. + +A significant event that played a crucial role in shaping the trajectory of the ChatGPT plugin was the company-wide hackathon organized by Kubeshop. The hackathon was a great opportunity for the team to brainstorm ideas and collaborate on projects that would help people make Kubernetes life easier, simpler and faster. + +This blog post aims to document the entire process involved in the creation of the [Botkube ChatGPT plugin](https://docs.botkube.io/configuration/executor/doctor). From the initial spark of the idea during the hackathon to the final stages of implementation, we'll take you on a behind-the-scenes journey. Expect insights into the challenges, breakthroughs, and collaborative efforts that went into making this vision a reality. + +‍ + +Ideation Phase: The Company-Wide Hackathon +------------------------------------------ + +It all started with the internal Kubeshop hackathon. During this intense and collaborative event, team members from diverse backgrounds came together to brainstorm, experiment, and find novel solutions to challenges in the Kubernetes space, as a part of the existing projects in Kubeshop portfolio. The hackathon's theme was to help Developers, Testers, DevOps, SRE’s or their managers with making Kubernetes life easier, simpler, and faster. In 48 hours, the teams had to come up with an idea, build a prototype, and present their proof-of-concept solution to the judges. + +The Botkube team came up with 14 different ideas. As the hackathon time was limited, the team had to filter out the ideas we should focus on. After several discussions and internal voting, we decided to improve the Botkube onboarding experience. This consisted of 4 different parts: + +* Botkube Cloud Migration Tool, to seamlessly migrate existing Botkube installation to Botkube Cloud. + +* Botkube Cloud Instance Builder, a convenient drag-and-drop UI tool to configure Botkube instance. + +* Exec plugin, to install and run any CLI application directly from chat platform, without any hassle. + +* ChatGPT executor plugin, which is the main topic of this blog post. + + +The ChatGPT plugin was the most voted idea internally, as we all saw the potential to bring significant value to the users. The team, guided by the goal of selecting an idea with the highest impact, set specific criteria to evaluate each proposal. We considered factors such as feasibility, market demand, and alignment with the Botkube's long-term vision. The ChatGPT plugin idea ticked all the boxes, showing promise to address real customer needs and aligning perfectly with the Botkube's mission. + +‍ + +Planning and Conceptualization +------------------------------ + +Once the ChatGPT executor plugin was selected as a part of our hackathon topic, the team started working on the project. The first step was to define the goals and objectives of the plugin. + +The main goal was to lower the barrier of entry for new Botkube users. Sometimes it is hard to understand and troubleshoot the Kubernetes errors and their meaning, especially for beginners. That's why the idea was to introduce "Get help" button under incoming error events. + +‍ + +![Image 2: a purple screen with a purple background and a purple text](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c21a033e2e505f6d63b554_figma.png) + +‍ + +The button would pass the error data to the ChatGPT plugin, which would use return an AI-generated response with actionable buttons. The user would be able to click on the buttons to execute specific commands, such as `kubectl describe pod` or `kubectl logs pod`. This would help the user to troubleshoot the issue without the need to search for the solution on the Internet. + +Another use case we considered is answering human questions directly from the chat. The user would be able to ask questions like "How to create a Pod?" or "How to troubleshoot non-working Service?" and get an AI-generated response. This would be useful for new users who are not familiar with Kubernetes concepts and terminology. + +The final part of this phase was to come up with a name for the plugin. This was one of the hardest challenges. + +> There are only two hard things in Computer Science: cache invalidation and naming things. +> +> \-- Phil Karlton + +We decided to call it "Doctor", as it would help users to diagnose and fix Kubernetes issues. + +‍ + +Development Process +------------------- + +The enthusiasm and dedication displayed by the team during the ideation phase laid a strong foundation for the development of the ChatGPT plugin. As we already knew what we wanted to develop, we had to decide on the specific technologies and tools to use. + +Choosing plugin language was the first step. Botkube plugin API uses Hashicorp's [`go-plugin`](https://github.com/hashicorp/go-plugin) gRPC interface. While it has cross-language support, we decided to stick to Go as it is the primary language used in Botkube. We also wanted to leverage the existing Go SDK and pipelines we set up for the Botkube Go codebase. + +The next step was a bit more challenging: choosing the right AI model. We wanted to use a pre-trained model to avoid the need for training data and the time-consuming training process. The most important thing was to be able to answer Kubernetes-related questions efficiently. After careful consideration, we decided to use OpenAI's GPT-3 (`text-davinci-003`) model for the chatbot. + +While ChatGPT integration is very straightforward, another little challenge was to construct a prompt that produces predictable results and to parse the response from the model, so that we could render interactive output for a user. After a little bit of testing and experimenting, we achieved the desired result. + +The last part was to integrate the ChatGPT plugin into Kubernetes source plugin, which watches for Kubernetes events and sends notifications to the chat interface. We extended the Kubernetes plugin with `extraButtons` configuration property, which accepts command templates and renders them as interactive buttons as a part of each notification: + +This way, we were able to render the "Get help" button under each error event. As the implementation is generic, users can also benefit from it and configure virtually any command button under specific types of events. + +‍ + +Result +------ + +In 48 hours, Botkube team was able to deliver a fully-working ChatGPT plugin called "Doctor". The plugin is able to help troubleshooting Kubernetes cluster issues based on incoming events. It's best used in combination with Slack integration, as it provides interactive buttons to help users navigate through the troubleshooting process. No typing required! + +‍ + +![Image 3: a screen shot of a computer screen showing a number of options](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c21a2723cb531baf9f0867_doctor-interactive-help.gif) + +‍ + +It also exposes ChatGPT prompt, so you can ask some arbitrary, not necessarily Kubernetes-related questions: + +‍ + +![Image 4: what are the common problems with kubernetes service](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c21a323e2e505f6d63c5a8_common-k8s-service-problems.png) + +‍ + +![Image 5: a screenshot of a conversation between a customer and a developer](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c21a491f0e3972e7e5430d_how-to-create-a-pod.png) + +‍ + +The team was very happy with the result, and we decided to **ship it to all users in [Botkube 1.2 release](https://botkube.io/blog/botkube-v1-2-0-release-notes)**! 🎉 + +How to get started, you ask? [Install Botkube](https://docs.botkube.io/), if you haven't already, and enable Doctor plugin following the [Configuration](https://docs.botkube.io/configuration/executor/doctor) document. Then, learn how to use it by [following the tutorial that our DevRel Maria put together](https://botkube.io/blog/doctor-plug-in-tutorial). + +‍ + +Conclusion +---------- + +The journey from the hackathon ideation to the final ChatGPT plugin has been nothing short of remarkable. It all began with the internal Kubeshop hackathon, where the Botkube team collaborated intensely and passionately to brainstorm ideas for making Kubernetes life easier, simpler, and faster. After carefully evaluating various proposals, the ChatGPT plugin emerged as the most promising idea, driven by its potential to revolutionize the Botkube onboarding experience and provide users with an unparalleled DevOps tool. + +This would not have been possible without the spirit of cross-team collaboration and innovation that thrives within the company. The hackathon served as a platform for team members from diverse backgrounds to unite, share their expertise, and collectively explore innovative solutions. This collaborative approach fostered a culture of creativity and knowledge-sharing that continues to inspire future projects. + +The Doctor plugin was just the beginning of our journey. We plan to continually enhance its functionality, leveraging user feedback and insights to make it more versatile and user-friendly. That's why your feedback is very important to us. + +Let us know what do you think about the [ChatGPT-based Doctor plugin](https://docs.botkube.io/configuration/executor/doctor)! We are always open to feedback and suggestions. If you have any questions, feel free to reach out to us on [Slack](https://join.botkube.io/) or [Twitter](https://twitter.com/botkube_io). diff --git a/hack/assistant-setup/content/botkube.io__blog__command-line-magic-simplify-your-life-with-custom-kubernetes-kubectrl-aliases-on-botkube.md b/hack/assistant-setup/content/botkube.io__blog__command-line-magic-simplify-your-life-with-custom-kubernetes-kubectrl-aliases-on-botkube.md new file mode 100644 index 0000000..8d6f10a --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__command-line-magic-simplify-your-life-with-custom-kubernetes-kubectrl-aliases-on-botkube.md @@ -0,0 +1,78 @@ +Title: Command Line Magic: Simplify Your Life with Custom Aliases + +URL Source: https://botkube.io/blog/command-line-magic-simplify-your-life-with-custom-kubernetes-kubectrl-aliases-on-botkube + +Published Time: Mar 09, 2023 + +Markdown Content: +![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) + +Maria Ashby + +Developer Advocate + +Botkube + +With custom aliases, you can create shortcuts for those long and confusing Kubernetes commands, making it easy to manage your clusters and focus on what really matters - your code. + +### Table of Contents + +* [So how do you do it?](#so-how-do-you-do-it-) +* [Syntax](#syntax) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +Are you tired of typing out long and complex Kubernetes commands, only to realize you've made a typo and have to start over? Do you wish there was a way to make managing your Kubernetes clusters easier and more efficient? Fortunately, [custom kubectl aliases](https://docs.botkube.io/usage/executor/#aliases) on Botkube are here to save the day. With custom aliases, you can create shortcuts for those long and confusing Kubernetes commands, making it easy to manage your clusters and focus on what really matters - **your code**. + +Whether you're a seasoned Kubernetes pro or just starting out, custom aliases on Botkube can help you work more efficiently and productively. In this blog, we'll show you why custom aliases with Botkube should be in every developer's toolkit. + +### Prerequisites : + +* Access to a Kubernetes cluster + +* Botkube [installed](https://docs.botkube.io/) and configured + + +So how do you do it? +-------------------- + +Alias are a shortcut for a longer command or just a part of it. It can be defined for all commands, including [executor plugins](https://docs.botkube.io/usage/executor/) and built-in Botkube commands. This powerful tool lets you create shortcuts for longer, more complex commands, making them quicker and easier to execute. And the best part? You can create aliases for all commands, including built-in Botkube commands and executor plugins. When you use an alias, it replaces the original command with the underlying command before executing it, saving you precious seconds and reducing the risk of errors. + +To save on time, Botkube had implemented the `k` and `kc` aliases for the kubectl command, much like DevOps admins like to do on the command line. But we took it a step further: **now you can configure your own custom aliases for any command in Botkube**. Not only can you alias a single command like kubectl, you can create an alias for the full command, including options and flags. + +In the example shown below, kgp is an alias for the full kubectl get pods command. + +![Image 2: a screenshot of a buddha lab account](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ec7df6773520fc340602_sLERrE-WA2Iv0EldUqYb-eeTU_dmKcSc9eK3k6ryJguJX8MuZyReFo14bHFCWumC846c87NEyVpyjLs3bJBImbK_aF_0iH4k6JCgoQHl0hrLRWzBdnZ5Y8Hg8AMICY4tRhyP06K9v539W8TuW9mTvvY.png) + +Once you have configured aliases, you can use them interchangeably with a full command. For example: + +**k** as kubectl, + +**kgp** as `kubectl get pods`, + +**kgpa** as `kubectl get pods -A`, + +**hh** as `helm history`, + +**a** as list actions, the built-in Botkube command, + +and so on. + +Aliases are defined globally for the whole Botkube installation. To see which aliases are available for current conversation, run `@Botkube list aliases`. + +Syntax +------ + +![Image 3: a screenshot of a web page with a list of words](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/642d8fd3d44f31b2f4b28059_Screenshot%202023-04-05%20at%208.11.31%20AM.png) + +So there you have it- **the power of custom aliases on Botkube**. By creating personalized shortcuts for your most-used commands, you'll be able to work smarter, not harder, and get things done more efficiently than ever before. Plus, with the ability to create aliases for all commands, including built-in Botkube commands and executor plugins, the possibilities are truly endless. So, if you want to streamline your workflow and become a more efficient developer, custom alias feature on Botkube is definitely worth exploring + +As always, we want to hear your feedback and ideas about Botkube. Help us plan the Botkube roadmap and get the features you’d like implemented. + +There are plenty of options to contact us: + +* [GitHub issues](https://github.com/kubeshop/botkube/issues) + +* [Slack](https://join.botkube.io/) + +* or email our Product Leader at blair@kubeshop.io. diff --git a/hack/assistant-setup/content/botkube.io__blog__configure-event-sources-with-new-botkube-filters.md b/hack/assistant-setup/content/botkube.io__blog__configure-event-sources-with-new-botkube-filters.md new file mode 100644 index 0000000..c60354c --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__configure-event-sources-with-new-botkube-filters.md @@ -0,0 +1,61 @@ +Title: Configuring Event Sources with the New Botkube Filters + +URL Source: https://botkube.io/blog/configure-event-sources-with-new-botkube-filters + +Published Time: Dec 12, 2022 + +Markdown Content: +![Image 1: an image of a mountain with the words'botkube tutorial'](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6388d8a9440baf86c12e1332_BQ_cKZugm2gU2CJlE2SwuDKqkczTCA0n645DHiHJkUQ.png) + +[](#home) ![Image 2: a man with a beard wearing a black shirt](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) + +Blair Rampling + +Product Leader + +Botkube + +Configuring Event Sources with the New Botkube Filters + +### Table of Contents + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +![Image 3: a man with a beard wearing a black shirt](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3edbf5389368f6bef9c_cYbM1beBC5tQnSPVfaXCg_W9tkHugByZV2TOleN6pTw.jpeg) + +Blair Rampling + +Product Leader + +Botkube + +Related Content +--------------- + +Stay in the Loop +---------------- + +![Image 4: Kusk Kubernetes](https://assets-global.website-files.com/633705de6adaa38599d8e258/636d3117b8612105c60e0bd9_botkube-front-right.svg) + +Join the Botkube Community in one of these channels + +Subscribe to our monthly newsletter to stay up to date with all-things Botkube. + +[![Image 5: the logo for kubeshop](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) + +Botkube is made by Kubeshop +— a first of its kind open source accelerator focused on the cloud native ecosystem + +At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. + +[![Image 6: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 7: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 8: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 9: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 10: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) + +#### Get to Know Kubeshop + +#### Botkube + +Copyright © 2022 Kubeshop, LLC. All rights reserved. + +Copyright © 2024 Kubeshop, LLC. All rights reserved. + +#### Explore Kubeshop Projects diff --git a/hack/assistant-setup/content/botkube.io__blog__creating-the-botkube-flux-plugin-for-day-2-operations.md b/hack/assistant-setup/content/botkube.io__blog__creating-the-botkube-flux-plugin-for-day-2-operations.md new file mode 100644 index 0000000..931490c --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__creating-the-botkube-flux-plugin-for-day-2-operations.md @@ -0,0 +1,140 @@ +Title: Creating the Botkube Flux plugin for Day 2 operations + +URL Source: https://botkube.io/blog/creating-the-botkube-flux-plugin-for-day-2-operations + +Published Time: Sep 07, 2023 + +Markdown Content: +![Image 1: a man with his arms crossed in front of a black background](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3ec19d99029e7cfb5bd_n-vUM0Lz3yXA1WLyfxEMUxXQpUDEiKv9EmEe4NnCbCI.png) + +Mateusz Szostok + +Software Engineer + +Botkube + +From this deep dive you'll know the Zapier-like aspect of Botkube that connects K8s clusters, GitHub, and the Flux CLI—all of this to make you fall in love with your Day 2 operations. + +### Table of Contents + +* [Introduction](#introduction) +* [The Evolution of Flux Executor Plugin](#the-evolution-of-flux-executor-plugin) +* [Interactivity and Decision-Making](#interactivity-and-decision-making) +* [Manual Approach vs. Botkube Flux Plugin](#manual-approach-vs-botkube-flux-plugin) +* [Behind the Scenes: Developing the Botkube Flux Plugin](#behind-the-scenes-developing-the-botkube-flux-plugin) +* [Conclusion](#conclusion) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +#### Get started with Botkube Cloud + +Hey there, tech enthusiasts! Today we're diving into the world of GitOps with the brand-new Botkube Flux plugin. + +Introduction +------------ + +In Botkube, we move towards GitOps by developing extensions like the new [Flux plug-in](https://botkube.io/integration/botkube-flux-kubernetes-integration). We all know the importance of GitOps workflow automation—it's the backbone of modern Kubernetes management. But sometimes, we encounter situations where automation is needed but hasn't been implemented yet. That's where Botkube steps in. + +The Botkube Flux plugin is designed to bridge the gap between your Kubernetes clusters and GitHub repositories. It enables you to execute commands directly from Slack using interactive forms. Plus, it keeps you in the loop by notifying you about GitHub pull requests that are altering your kustomization files. It provides a dedicated button to show a diff report between the pull request and your current cluster state. + +In this blog post, we will reveal the cards and dive deep into the thought process and implementation details of the Flux plugin. You'll get to know the Zapier-like aspect of Botkube that connects Kubernetes clusters, GitHub, and the Flux CLI – all of this to make you fall in love with your Day 2 operations. + +The Evolution of Flux Executor Plugin +------------------------------------- + +Now, let's get into the nitty-gritty of this plugin's journey. Picture yourself as part of a team managing Kubernetes applications with multiple pull requests. Our goal is to integrate with Flux CD to simplify Day 2 operations for Flux users. Let's take a closer look at the user story: + +1. Be able to run Flux CLI commands from any communication platform, just like you do in your terminal: + +![Image 2: a screenshot of a web page showing different types of information](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f9944f5ec10d12756e4d2b_flux-get-source-git.png) + +‍ + +2. Next, let's make it mobile friendly. The secret ingredient is interactivity like buttons and select menus. ‍ + +![Image 3: a screen shot of a chat window with a button on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f9949ad7623bfae8357d71_flux-get-source-git-btns.png) + +Typing or copy-pasting a long names doesn't work well. Now, you have a handy Flux client right in your pocket, ready with just a few clicks. And we are just half-way there 😈‍ + +‍ + +3. Here comes the last, but unique, part that makes the difference: **support for Day 2 operations**. + +In our case, we stitched together three important parts: Kubernetes cluster, GitHub platform, and Flux CLI. As a result, we've provided a streamlined experience for generating a diff report in the context of GitHub pull requests and the current cluster state. + +![Image 4: a screen shot of a screen showing the status of a task](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f994c33a6f72e35362f50c_flux-diff.png) + +🎁 As you may notice, the diff report notification includes some useful actions out-of-the-box: + +* Posting the diff report as a GitHub comment. +* Approving the pull request. +* Viewing the pull request. + +4\. Now, when we're happy about the result, we are still missing one more part to **automate our day 2 operation.** + +‍ + +Even though the diffing flow integrates with GitHub, it still requires two manual steps: + +* discovering that a new pull request was created +* constructing a Flux related command + +That's how the GitHub Events source was born. Now we can set up a complete workflow to: + +1. Watch for GitHub pull requests that changes files in `kustomize` directory. Alternatively, we can use label selectors. +2. Get notification on Slack about new pull request. +3. Render and embed event-aware button to run a diff report. + +![Image 5: a screenshot of a page with the word adexpress on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f994dd9581964e18ef36bd_pr-event.png) + +‍ + +Now, you may think that what we achieve in those 4 steps it's great but will be hard to configure. Is it? We hope that included YAML sample proves that it is not: + +* Flux Executor, with optional GitHub token: + +* GitHub Events workflow: + +
botkube/github-events: # GitHub Events
github:
auth:
accessToken: "ghp_"
repositories:
- name: mszostok/podinfo
on:
pullRequests:
- types: ["open"]
paths:
include: ["kustomize/.*"]
notificationTemplate:
extraButtons:
- displayName: "Flux Diff"
commandTpl: "flux diff ks podinfo --path ./kustomize --github-ref {{ .HTMLURL }} "
We've kept the syntax generic, allowing you to configure different command buttons under specific types of events. Interactivity and Decision-Making --------------------------------- Thanks to automated notifications with event-aware buttons, you can easily generate reports and share them with your team or contributors. While posting diff reports can be fully automated, you might want to do it intentionally by clicking a button. Why? Because the report may contain sensitive information that you don't want to fully disclose to external contributors. Using, for example, GitHUb Action, unfortunately, doesn't give us this freedom. We tried to automate the whole workflow while still keeping you as the decision-maker when it comes to sharing the report or directly approving the PR. With that being said, nothing blocks us from adding in the future support for AI assistance. Imagine an AI that reviews the diff report and decides whether to proceed with automated approval. Are you ready for AIOps? Exciting times ahead! Manual Approach vs. Botkube Flux Plugin --------------------------------------- While you were reading the first part of the Flux plugin evolution, did you consider what kind of manual steps would be required without the plugin? Let's break it down: 1. Checking GitHub repository for a new pull requests. 2. **(One-time operation)** Downloading and installing Flux CLI on you localhost. 3. Manually connecting to the related Kubernetes cluster. 4. **(One-time operation)** Cloning the repository. 5. Checking out the pull request. 6. Constructing a Flux command. 7. Sharing the diff report on Slack/GitHub. Even if we exclude the one-time operations, we're left with 5 steps for each new pull request. Lots of manual steps mean lots of room for human errors. Plus, all that jumping between different sites and context switching can impact your productivity. It's much better to focus on the main aspect, which is the review, and let automation handle the rest. Behind the Scenes: Developing the Botkube Flux Plugin ----------------------------------------------------- The development of the Botkube Flux Executor plugin involved several key aspects: 1. 🕹️ **Interactivity**: We leveraged the [`exec`](https://docs.botkube.io/usage/executor/exec#table-parser) plugin developed in previous release, making adding interactivity almost out-of-the-box. The `exec` plugin allows you to port any CLI into the communication platform window. + +In this case, we reused it as Go SDK. Here is the blueprint that describes translation of CLI table output into an interactive message: ‍ + + +
- trigger:
command:
regex: "flux get sources (buc
type: "parser:table:space"
message:
selects:
- name: "Item"
keyTpl: "{{ .Name }}"
+ +This makes the implementation much simpler, so we could focus more on native support for the diffing flow. + +‍ + +2. 🗃️ **Storing blueprints**: The blueprints used for converting CLI output into interactive messages are not stored directly in the Go code. Instead, we store them as YAML files in a dedicated folder so that IDEs, the GitHub platform, and others can provide us with valid syntax highlighting and formatting. Next, we use Go embed functionality, which is really handy here. With just three lines of code, Go embeds the entire directory with our manifests: ‍ + +Thanks to embedding it, we can distribute it as a single plugin binary, and we don't need to make any external download calls on startup. + +‍ + +3. 🔍 & 🔐 **Auto-discovering GitHub repos**: In order to discover related GitHub repository, we need to get Flux custom resource. We used the [`controller-runtime`](https://github.com/kubernetes-sigs/controller-runtime/blob/main/pkg/client/client.go) client, which supports Go types natively. This eliminated the need to work with the unstructured type, making things smoother and less error-prone. This is backed by dedicated plugin **RBAC** impersonation that we introduced a couple releases ago. + +4. 🔄 **Cloning and checking out PR**: Checking out a pull request can be tricky, especially when dealing with external contributors and their forks. Instead of reinventing the wheel, we integrated the widely-known `gh` CLI. It was easy to add an external dependency just by defining: ‍ + + +
"gh": {
URLs: map[string]string{
"darwin/amd64": "https://github.com/cli/cli/releases/download/v2.32.1/gh_2.32.1_macOS_amd64.zip//gh_2.32.1_macOS_amd64/bin",
"linux/amd64": "https://github.com/cli/cli/releases/download/v2.32.1/gh_2.32.1_linux_amd64.tar.gz//gh_2.32.1_linux_amd64/bin",
// etc.
},
},
Under the hood we use \`go-getter\` library which has a lot of great features. If you need to download assets from different sources, we recommend that library your projects as well. ‍ ‍ The trickiest part was to develop GitHub Events source. The best way is to use GitHub App with the webhook approach. However, we didn't want to require you to have an external endpoint exposed from your cluster. We started with [GitHub repository events endpoint](https://docs.github.com/en/rest/activity/events?apiVersion=2022-11-28#list-repository-events). But it turned out that even though it serves events that we are interested in, it was not meant to be used for the real-time use-cases. We still integrate with the `events` API, but it's recommended for event subscription where time is not that important. For example, getting notification about new stars on your GitHub repositories: ‍ + +![Image 6: a white background with a number of different logos on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f994ee3a6f72e3536300f4_stars.png) + +‍ To achieve our e2e goal, we decided to develop a custom polling mechanism that uses [pull request endpoint](https://docs.github.com/en/rest/pulls/pulls?apiVersion=2022-11-28#list-pull-requests). The polling mechanism forces us to be more rational about the number of calls to fit into defined rate limits. We decided on two things: + +1. [Conditional requests](https://docs.github.com/en/rest/overview/resources-in-the-rest-api?apiVersion=2022-11-28#conditional-requests) because receiving a 304 response doesn't count against token rate limit. +2. Adding support for GitHub App tokens. By using GitHub Apps, you can increase your maximum rate limits because multiple GitHub Apps are independent and do not share the rate limits. Where, using multiple Personal Access Tokens (PATs) for the same account will result in sharing the same rate limit. + +In the future, we can consider adding a token rotator that automatically switches tokens before hitting the rate limit. + +For the [Botkube web app](https://app.botkube.io/) we will consider native integration using GitHub App, to reduce friction with the initial setup for Flux and GitHub Events plugins. + +Conclusion +---------- + +The [Botkube Flux plug-in](https://botkube.io/blog/introducing-botkubes-integration-with-flux) offers valuable solutions for streamlining GitOps workflows. Its capabilities, including mobile-friendly interactivity and automated Day 2 operations support, can significantly enhance your Kubernetes management. + +We encourage you to explore the Botkube Flux plugin and consider integrating it into your workflows. Don't hesitate to share your feedback and ideas about Botkube. Feel free to reach out to us on [Slack](https://join.botkube.io/) or [Twitter](http://twitter.com/botkube_io). + +Thank you for taking the time to learn about Botkube 🙌 diff --git a/hack/assistant-setup/content/botkube.io__blog__doctor-plug-in-tutorial.md b/hack/assistant-setup/content/botkube.io__blog__doctor-plug-in-tutorial.md new file mode 100644 index 0000000..ed8b990 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__doctor-plug-in-tutorial.md @@ -0,0 +1,163 @@ +Title: Troubleshoot K8s with ChatGPT + Botkube's Doctor Plugin + +URL Source: https://botkube.io/blog/doctor-plug-in-tutorial + +Published Time: Jul 31, 2023 + +Markdown Content: +![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) + +Maria Ashby + +Developer Advocate + +Botkube + +This Tutorial is about the new ChatGPT-powered Doctor plugin which allows for easy diagnosis and solution recommendations for Kubernetes troubleshooting. + +### Table of Contents + +* [Requirements](#requirements) +* [Method 1: Install the Doctor Plug into a new instance](#method-1-install-the-doctor-plug-into-a-new-instance) +* [Method 2: Install the Doctor plug-in into an already created Botkubeinstance.](#method-2-install-the-doctor-plug-in-into-an-already-created-botkubeinstance-) +* [Interactive Troubleshooting](#interactive-troubleshooting) +* [Support for Generic Questions](#support-for-generic-questions) +* [Scalable Plugin Pipelining](#scalable-plugin-pipelining) +* [Conclusion](#conclusion) +* [We'd Love Your Feedback](#we-d-love-your-feedback) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +#### Get started with Botkube Cloud + +Discover the future of efficient Kubernetes troubleshooting with Botkube’s new [Doctor plug-in](https://botkube.io/integration/chatgpt-botkube-kubernetes-integration)! By leveraging ChatGPT's powerful capabilities, you can now troubleshoot your Kubernetes cluster with unparalleled ease and save valuable time in the process. Say goodbye to tedious and time-consuming tasks, as ChatGPT helps to automate much of the troubleshooting process, allowing you to concentrate on more critical aspects of your workflow. Moreover, ChatGPT's comprehensive analysis of your cluster configuration and resource utilization offers invaluable insights to optimize performance and cut down on costs. Real-time errors and recommendations enhance your troubleshooting experience, ensuring you're always up-to-date with the health of your cluster. Seamlessly integrated with major communication channels, Botkube empowers you to act swiftly on identified errors, keeping your Kubernetes environment running smoothly at all times. + +Learn more about Botkube's ChatGPT-powered Doctor plugin in our [release announcement](https://botkube.io/blog/use-chatgpt-to-troubleshoot-kubernetes-errors-with-botkubes-doctor). + +In this tutorial, we will walk you through the step-by-step process of setting up and utilizing Botkube's new [Doctor plug-in](https://docs.botkube.io/usage/executor/doctor), optimizing your team’s performance, and maximizing your Kubernetes productivity. + +Requirements +------------ + +* A Slack workspace +* A [Botkube Cloud](http://app.botkube.io/) account +* \[OpenAI credits \[(https://openai.com/) Method 1: Install the Doctor Plug into a new instance ----------------------------------------------------- ### Creating a Botkube Cloud Account 1. On the Botkube [homepage](https://botkube.io/), locate the “Get Started” button and click on it. This will take you to the account registration page. +2. Fill in the required information in the registration form. You can sign up with your email address or Github account. + +* Click [here](https://botkube.io/blog/step-by-step-tutorial-leveraging-botkubes-cloud-slack-feature-for-kubernetes-collaborative-troubleshooting) for a more indepth Botkube installation tutorial + +### Connecting Kubernetes Cluster to Slack + +1. Select either the Wizard or the Block builder method to initiate the setup process for Botkube's Cloud Slack integration. + +![Image 2: Easy one click Kubernetes deployment for cloud](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a709dfd8e90bc79339fcd0_cQKP0DfzGkbQO4R8kCAnqr54pgSa_IKaPa756N-FFua5n9N1omSH9fg9nGI1JYNjRS6ZmkbNUYrZLK1Z2BmTjPVHBDP0U9jNpidqq7RIqKWJScUJ32pOPryOAp49HR6OoerKN7yJSu6yHr2DU1GDaoo.png) + +‍ + +2. Next, enter your instance display name. + +![Image 3: K8s cluster building GUI](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a709efd8e90bc7933a1393_nAeC7-04jk70WellyEP2GM4m75jP4jrLhnmbjAkZr3rLlNi7zaD2bMLx8rvebpfqFIrvB8OSIxIqKezCZngk7ooCH6WAOT_1PBSQKz-sAAl9WRSq-GqtR1gmHmwC87Oq443Bzdu_sMKsHw-_g8Jwrfo.png) + +‍ + +3. Select the _Official Botkube Slack_ option. (Note this option requires you to sign up for a 30 day free trial) + +![Image 4: Official Slack Kubernetes bot](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a709ffd8e90bc7933a2249_3GYyjQn-Uklnp1Bn8T7YmSOdKEaFnl3idDQcYJiD1mx7xeBbr6yvoRgbLI3Fir7TaW4a1N8l4tgB_Zbt6b3XryqzyYff4z1I_nffpWkoS6Hx7yPmmTrk2Z9tnAlXWUoM_VrAm0iBje2a8oaIiaGxRx0.png) + +‍ + +4. Access the app settings within Slack to configure the integration with Botkube. Click the "Add Slack" button to initiate the process. + +5. Select the workspace within Slack where you want to utilize Botkube. Botkube will now have access to public and private channels, enabling seamless communication and collaboration for Kubernetes troubleshooting tasks. + + +![Image 5: Multicluster setup screen for Slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a70a0bae43806c67551203_v-0W_ZDNIBT2Z7lbvKemYUyidm6L4ftXfEXxY9t0i5d6NB3_A_wrkVIluEVKfh8ZCCSYan2mS8PfS0YXm8DmViUyII5FXmmaLUPy6deAhqmYypJr0mZCg8aOo1FckVZaX3LOlTK6Epso_FqKUAde3Qw.png) + +‍ + +6. To include Botkube in private channels, utilize the "Add to Channel" feature. This ensures that Botkube is present in relevant channels where Kubernetes-related discussions and incident responses take place. + +![Image 6: One click slack sign in](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a70a1d00209556840fc2aa_qCmpnXKLE-S-5GKx1PijNsYeJOqKsWffvD0NIp708myAL6SynM44bx0khhpKpQCX-LnUoIQ2t5JAbqjdOfxrQSxIJPZWLRKYrX0O1lKJJQQj0hmkIM_5ADswoPXLaRPrMmLwAtVCSAsGEbySEsGW0WY.png) + +‍ ‍ + +7. Select the Plugins you would like to use. [Helm](https://docs.botkube.io/usage/executor/helm), [kubectl](https://docs.botkube.io/usage/executor/kubectl), and Kubernetes source are the Botkube default plug-ins. Select the [Doctor plug-in](https://docs.botkube.io/usage/executor/doctor). + +![Image 7: a screen shot of a web page showing a contact manager](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c821b8724cd267a8f2079e_S_D9N3SAYRhJit2YvTCT1mfdMWr6Ba5CAX33ioUVeqdNvcycYIkd7yrIZ5Av6kG-hVuQXtTODdwDYtzoCWuV2NMH5F0waTITlkQXvBxglTo8aU_feKRZqpp9pZcssPIvxotbXdoKE49GVO9r9CreqyY.png) + +‍ + +8. Navigate to the OpenAI website [here](https://beta.openai.com/account/api-keys) and create your API key +9. Paste your API key into the empty box and press submit. + +![Image 8: a screenshot of the connect doctor page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c821bb26bb53b2ce43074d_I-Jz17f6Ag1ojKmWY0MT8l-IgRvU82Q2Gfwqk9OQVLXHF4Wx_0yQM-iy3GPnmIgQrDm1_Nck_-M2bpccmV2VY9svcoSjN7yylToOVl21vWoeJb6pp_bldS9zT677JvGJ0022oJd5dWlKN06Nph8UAmw.png) + +10. On the next page, you will have the option to also enable [Command Alias](https://botkube.io/blog/command-line-magic-simplify-your-life-with-custom-kubernetes-kubectrl-aliases-on-botkube)and [Botkube Actions](https://docs.botkube.io/usage/automated-actions/). Make your selection and click the Create button. + +![Image 9: a screen shot of the slack settings page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c821b95d087e15b6d1ec7d_zoOK3PqJeNz8R8Mgngk-Qssdni9rpMmx6-CMe1cGxvODqzVz-vb4cJ62ZbWeGfeoAudmnhkwKCzY8bb1UwAIoeefzAAFgwHfLKt4VNkU9kX_0Q8UJFhbWcqfLdJoLcmeNHAcluZPXeEA5I0FkkfQ4kA.png) + +‍ + +11. You are now ready to start utilizing the Botkube Doctor plugin! + +Method 2: Install the Doctor plug-in into an already created Botkubeinstance. +----------------------------------------------------------------------------- + +### Creating your New Plug-In + +1. Select the `Add Plug-in` button + +![Image 10: a screenshot of a page showing different types of information](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c821b87c3808d8b8fb048d_fyMnDpgGrvfDOKs6zbiAj1SXGp5deepJ1_uWTLiYuXgcnv7tonGyf-NolV9U2d-IeH0nFMdnSpwX12xtV4355EoQ6kuWd2FmBEpjtpOrIc7UQQ5Mnc6YrB8kxajMO3yfbORKjh6Y6JYunOB5OLTfZAc.png) + +‍ + +2. Select the option for the Doctor plug-in + +![Image 11: a screen shot of a website with a button on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c821ba302266c000e029ec_FbpyK0RLgMWySuuwKBVfVBtsX-eDAoIuGqze913li_eZyDDjWoOpj7JmmeXKci6M7xzbGddBcqLz17gYRuDN0ISndRLHtc2gvkApV9GJIXUNfn2o7B-J8Zg-lpiNe9UUMKsffwaQ1A_-qImmfhAw1UY.png) + +‍ + +3. Navigate to the OpenAI website [here](https://beta.openai.com/account/api-keys) and create your API key +4. Paste your API key into the empty field and press Submit. + +![Image 12: a screenshot of the connect doctor page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c821bb26bb53b2ce43074d_I-Jz17f6Ag1ojKmWY0MT8l-IgRvU82Q2Gfwqk9OQVLXHF4Wx_0yQM-iy3GPnmIgQrDm1_Nck_-M2bpccmV2VY9svcoSjN7yylToOVl21vWoeJb6pp_bldS9zT677JvGJ0022oJd5dWlKN06Nph8UAmw.png) + +‍ + +5. Select the Save button and refresh your browser. +6. Start interacting with your new Doctor Plug-in! + +Interactive Troubleshooting +--------------------------- + +When the Doctor AI detects an error or anomaly in the Kubernetes environment, it takes proactive steps to assist users in resolving the issue. Upon detecting an error event, the Doctor AI generates a Slack message with a `Get Help` button. Clicking on this button triggers the Doctor AI to provide users with actionable solutions and next steps to tackle the problem. This interactive troubleshooting approach empowers users with the knowledge and confidence to resolve Kubernetes issues swiftly. + +Support for Generic Questions +----------------------------- + +Beyond its ability to tackle specific errors, the Doctor AI is also well-versed in answering general questions related to Kubernetes. Users can seek guidance on various Kubernetes concepts, best practices, or configurations directly within the Slack channel. This means no more interruptions to access a separate dashboard or documentation, making it easier to gain quick insights and expand Kubernetes expertise. + +![Image 13: a screenshot of an email from adobe adobe adobe adobe ad](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c821bb21a0701673853991__UHn0zhtq5mu4YOnbuJN0vHABCKyUNCqyhsohVmShvTAPqmc8RJo4DQNsiN-QDU2vZ03D-W9N8_x-G9jSQpxGfeErfnxuzMt4YCE7BavU_uuXf0nTRhDDzp3NaIedpaXj0_8ehtKPQdYiynaCK6sunk.png) + +Scalable Plugin Pipelining +-------------------------- + +The Doctor AI plugin's versatility extends beyond standalone usage. It can be easily combined with other [Botkube plug-ins](https://botkube.io/integrations), allowing users to create custom workflows tailored to their specific use cases. By pipelining the Doctor AI with other plugins, teams can orchestrate complex actions and integrations, further streamlining Kubernetes management processes. + +Conclusion +---------- + +Botkube's new Doctor plug-in brings the future of efficient Kubernetes troubleshooting to your fingertips. With the power of ChatGPT, you can now effortlessly troubleshoot your Kubernetes cluster, saving precious time and streamlining your workflow. Bid farewell to tedious tasks, as ChatGPT automates much of the troubleshooting process, allowing you to focus on critical aspects of your work. + +With seamless integration into [major communication channels](http://botkube.io/integrations), Botkube empowers you to take swift action on identified errors, ensuring your Kubernetes environment runs smoothly wherever you are. + +### Sign up now + +Whether you're a seasoned Kubernetes pro or just getting started, Botkube helps make troubleshooting Kubernetes easier and faster. [Sign up now for free](http://app.botkube.io/) and [join the community](https://join.botkube.io/) of users who are already benefiting from the power of Botkube. + +We'd Love Your Feedback +----------------------- + +We welcome developers and Kubernetes enthusiasts to explore the platform and share their valuable feedback. We want to know what you think of Botkube and how we can make it even better. We're doing quick 15-minute interviews to get your feedback, and as a thank you, we'll give away cool Botkube plushies and t-shirts. Just email [maria@kubeshop.io](mailto:maria@kubeshop.io) or [set up a meeting](https://calendly.com/maria-botkube/30min). + +You can also talk to us in the Botkube GitHub [issues](https://github.com/kubeshop/botkube/issues), connect with others and get help in the [Botkube Slack community](http://join.botkube.io/), or email our Product Leader at [blair@kubeshop.io](mailto:blair@kubeshop.io). diff --git a/hack/assistant-setup/content/botkube.io__blog__empowering-your-kubernetes-multi-cluster-observability-with-intelligent-monitoring.md b/hack/assistant-setup/content/botkube.io__blog__empowering-your-kubernetes-multi-cluster-observability-with-intelligent-monitoring.md new file mode 100644 index 0000000..5eee29b --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__empowering-your-kubernetes-multi-cluster-observability-with-intelligent-monitoring.md @@ -0,0 +1,69 @@ +Title: Empowering Your Kubernetes Multi-Cluster Observability with Intelligent Monitoring + +URL Source: https://botkube.io/blog/empowering-your-kubernetes-multi-cluster-observability-with-intelligent-monitoring + +Published Time: Feb 08, 2024 + +Markdown Content: +![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) + +Maria Ashby + +Developer Advocate + +Botkube + +Discover how Botkube optimizes multi-cluster Kubernetes observability with automation, real time alerts and more.. + +### Table of Contents + +* [Why Kubernetes Multi-Cluster Environments?](#why-kubernetes-multi-cluster-environments-) +* [Challenges of Multi-Cluster Management](#challenges-of-multi-cluster-management) +* [Optimizing Efficiency in Kubernetes Multi-Cluster Management](#optimizing-efficiency-in-kubernetes-multi-cluster-management-) +* [Conclusion](#conclusion) +* [Getting Started with Botkube Today](#getting-started-with-botkube-today) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +Organizations of all sizes are increasingly adopting Kubernetes, leading to the introduction of multi-cluster environments. These environments fulfill objectives like workload isolation, resource optimization, and geographical distribution. However, [managing multi-cluster](https://botkube.io/blog/best-practices-for-kubernetes-troubleshooting-in-multi-cluster-environments) setups poses challenges such as complexity and required Kubernetes knowledge. To address these challenges and ensure efficient cluster management, Botkube provides a solution. [Botkube](https://botkube.io/) is a collaborative Kubernetes troubleshooting and monitoring tool tailored for DevOps teams, enhancing their Kubernetes observability workflow by delivering timely alerts about issues within their Kubernetes environments. + +Why Kubernetes Multi-Cluster Environments? +------------------------------------------ + +![Image 2: a screenshot of an error message on a website](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64b9697c82dc01bf31f863b1_automation.gif) + +Multi-cluster environments offer a variety of benefits, including increased fault tolerance and high availability, geographical workload distribution for reduced latency, and isolation for security, compliance, and resource management. Regional clusters can be customized to meet local user needs, minimizing latency and complying with regional data laws. Dev/Test clusters provide segregated environments for uninterrupted development and testing, while production clusters prioritize high availability and performance for an exceptional customer experience. Moreover, automating alerting and command execution processes further boosts operational efficiency. Tools like Botkube are critical for enabling teams to quickly receive real-time notifications and seamlessly integrate automations for faster command execution. + +Challenges of Multi-Cluster Management +-------------------------------------- + +Building and operating a multi cluster Kubernetes setup presents several challenges that organizations must address to ensure smooth operations and optimal performance. First, implementing and managing observability across multiple clusters can be complex, particularly in a multi-cloud or hybrid environment with varying configurations, policies, and technologies. Ensuring all clusters have consistent monitoring and logging practices is essential for analyzing data and spotting trends or issues. But, it can be challenging to standardize tools and methods across various clusters. + +‍ + +Additionally, handling network latency and complexity in multi-cluster setups presents significant challenges. Monitoring network performance and inter-cluster communication is crucial for identifying and addressing bottlenecks affecting application performance. However, managing clusters spread across different locations or cloud providers adds complexity to monitoring and managing network performance. Ensuring apps run smoothly means closely monitoring and managing these aspects, which can be difficult in multi-cluster setups. + +Optimizing Efficiency in Kubernetes Multi-Cluster Management +------------------------------------------------------------ + +![Image 3: a screenshot of an error message on a website](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a0710c644fa0ebb76293d8_DJDInRt7FR5LTwmVqnG4WM9OBv7o9_FmRKnG5sA9F-UU-kqljSWEtByVtVP37PhGh2wq7eezjjCNzzjlYyIOyqlAfEMDA6UdSCs5AUJLKfcy3qqXg8cEOoJTdi4S-5Z_Otd9bgcKLoeY5gEcWNa0D4U.gif) + +Navigating and managing multiple clusters can present challenges, but utilizing [observability tools](https://botkube.io/learn/kubernetes-observability-best-practices) can simplify the process by providing insights into cluster performance, resource utilization, and potential issues across the entire multi-cluster environment.In this regard, Botkube offers convenient features for multi-cluster management, allowing users to easily switch between clusters, view connected deployments, and establish default instances for specific workspaces. These capabilities streamline the management of multi-cluster production environments. Efficiency is key when troubleshooting across multiple clusters. Botkube enables users to streamline command execution by executing commands simultaneously across all connected clusters, eliminating the need for manual actions on each cluster. + +![Image 4: a screen shot of a screen showing a list of items](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65c535a6fc3e2e7a64e5f1f4_202402081509-ezgif.com-video-to-gif-converter.gif) + +Consider the scenario of managing clusters across a development environment and two production environments in different locations. With Botkube, users can seamlessly connect their clusters to their preferred communication platform and initiate multi-cluster management within minutes. They can set a default instance for the Prod channel, deploy an application in the Dev environment, verify the application's status using kubectl and aliases, troubleshoot and debug issues in the Prod US cluster, review logs and cluster-specific commands, and execute commands for all clusters using the "all clusters'' option. This integrated approach to multi-cluster management with Botkube enhances efficiency and facilitates smoother operations across diverse Kubernetes environments. By providing seamless control and visibility across clusters, Botkube empowers teams to efficiently manage their Kubernetes environments and ensure optimal performance and reliability. + +Conclusion +---------- + +Botkube offers a comprehensive solution for enhancing multi-cluster Kubernetes observability. By providing timely alerts, streamlined command execution, and seamless integration with communication platforms, Botkube empowers DevOps teams to efficiently manage Kubernetes environments. Experience Botkube’s multi-cluster observability in action by watching our [full demo video](https://youtu.be/zN2tBq_Yubc). + +Getting Started with Botkube Today +---------------------------------- + +[Try it for yourself](https://app.botkube.io/)! Follow our step-by-step [tutorial](https://botkube.io/blog/maximize-your-devops-teams-efficiency-with-botkube-and-microsoft-teams) to set up Botkube using our web app. We're excited to hear how you use Botkube. Create a support ticket directly in the dashboard, share your stories with us in the [Botkube Slack community](https://join.botkube.io/). We’ll even send you some cool swag as a thank you. + +‍ diff --git a/hack/assistant-setup/content/botkube.io__blog__enhancing-gitops-workflows-with-botkube.md b/hack/assistant-setup/content/botkube.io__blog__enhancing-gitops-workflows-with-botkube.md new file mode 100644 index 0000000..935dd74 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__enhancing-gitops-workflows-with-botkube.md @@ -0,0 +1,121 @@ +Title: Enhancing GitOps Workflows with Botkube + +URL Source: https://botkube.io/blog/enhancing-gitops-workflows-with-botkube + +Published Time: Aug 23, 2023 + +Markdown Content: +In the ever-evolving landscape of software development and operations, efficient collaboration, seamless communication, and swift troubleshooting are the cornerstones of success. GitOps is a game-changing method that makes development operations smoother by using version control systems. While GitOps introduces an innovative method that refines development operations, it's not without its challenges. Enter [Botkube](http://botkube.io/) - a collaborative troubleshooting tool designed specifically for Kubernetes. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. It can also be harnessed as a powerful tool that can optimize GitOps workflows by streamlining manual processes, fostering real-time collaboration, and centralizing knowledge. In this blog post, we delve into the capabilities of Botkube and how it can significantly elevate your GitOps practices. + +What is GitOps? +--------------- + +GitOps is an operational framework that evolved from the core principles of DevOps, which include application development strategies like version control, collaborative workflows, compliance adherence, and continuous integration/continuous deployment (CI/CD). It hinges on four core principles: + +**Declarative:** Entire system described declaratively, using facts over instructions. Git becomes the source of truth for Kubernetes deployment. + +**Versioned and Immutable:** Canonical state stored in version-controlled Git repository, enabling simple rollbacks and audit trails. + +**Automated Pull:** Changes from Git to Kubernetes occur automatically, separating the operational environment from the defined state. Policies drive automated deployment. + +**Continuous Reconciliation:** Software agents detect deviations, ensuring the system is self-sufficient and resilient to human errors. + +The Gitops framework applies these practices to the realm of infrastructure automation and centers Git as the foundation for a streamlined approach to software deployment + +Benefits of GitOps +------------------ + +At its core, GitOps empowers organizations to oversee their entire infrastructure and application development lifecycle through a singular, unified tool. This innovative approach fosters unprecedented collaboration and coordination among teams, paving the way for streamlined workflows and minimizing the occurrence of errors. From an improved developer experience to reduced costs and accelerated deployments, + +Swift problem resolution becomes a reality, transforming the operational landscape. + +GitOps redefines the infrastructure and application lifecycle through a unified tool, driving collaboration and streamlined workflows while minimizing errors. This approach yields swift problem resolution and improves developer experience. It ensures auditable changes, heightened reliability, consistency, and standardization, underpinned by strong security measures. This translates to increased productivity, faster development, and efficient operations. With GitOps, compliance and auditing become seamless, incident response is expedited, and security is fortified. + +The Pitfalls of GitOps +---------------------- + +The manual approach to GitOps presents several challenges that hinder efficiency. Firstly, setting up and configuring GitOps tools on your local environment is a prerequisite. Additionally, directly managing connections to the Kubernetes cluster becomes a time-consuming obligation, involving context switches for various deployment stages. Handling repositories by manually cloning and inspecting pull requests for changes adds complexity to the workflow. Lastly, sharing updates and reports across platforms like Slack and GitHub requires constant navigation, demanding extra effort and impacting seamless communication. + +‍ + +### Auditing Complexity + +While Git provides an audit trail for infrastructure changes, this process is not without its complexities. Regulatory compliance and code reviews demand meticulous tracking of modifications. However, identifying the relevant repository, configuration file, and commit history can be a time-consuming task, especially for intricate applications with numerous data points. Additionally, the ability to force-push commits introduces the risk of inadvertently removing critical information from the central repository, further complicating the audit process. + +### Scalability Hurdles + +The scalability of GitOps can pose challenges, particularly as organizations expand. To effectively implement GitOps, maintaining a comprehensive record of pull requests and issues is crucial, necessitating a high level of visibility and accountability. This demand is more manageable in smaller organizations but can become overwhelming for enterprises with an extensive portfolio of repositories, environments, and applications. The complexities of managing a larger setup require a simplified structure with limited repositories and configuration files to fully harness GitOps benefits. + +### Governance Complexity + +Automated changes at scale are powerful yet come with substantial responsibilities. Organizations adopting GitOps face the task of managing changes efficiently while ensuring security. The potential introduction of security vulnerabilities through GitOps-driven alterations could lead to severe consequences. Although automation tools are invaluable, many open-source GitOps solutions lack built-in governance capabilities. A proactive approach to addressing this challenge is integrating policy as code (PaC) to embed policy-based governance into the software development process, mitigating risks and fostering control. + +‍ + +How Botkube Addresses these Challenges +-------------------------------------- + +Navigating the realm of GitOps workflows can be more efficient with Botkube. It adeptly addresses various challenges, from scalability concerns to auditing needs. By incorporating features like Automatic Issue Reporting, Implementing Best Practices, Improved Developer Experience, and Efficient Monitoring and Action, Botkube streamlines your team's operations, optimizing their efficiency within the GitOps framework. + +‍ + +![Image 1: a screen shot of a screen with a message on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64e694bca6bd600e8a7e88dd_flux-diff-1.gif) + +### Automatic Issue Reporting + +Botkube introduces a solution to scalability concerns through its automatic issue reporting feature. By identifying issues in Kubernetes environments and promptly notifying relevant parties, Botkube streamlines problem detection and resolution. This dynamic functionality alleviates the burden of monitoring multiple repositories and applications, enabling smoother scalability within the GitOps framework. + +### Implementing Best Practices + +GitOps, at its core, thrives on best practices that fortify its deployment. The integration of practices such as Policy as Code (PaC) and rigorous security scanning bolsters the foundation of governance. With PaC, organizations can encode policies directly into their version control repositories, ensuring that automated changes align with established protocols. Concurrently, security scanning serves as a robust barrier against vulnerabilities, preventing potentially risky alterations from being incorporated into the automated process. + +### Improved Developer Experience + +In a GitOps workflow, Botkube takes the lead by offering teams unmatched insights and control over their Kubernetes resources. It acts as a window into active clusters, functioning as the central hub for informed actions. With Botkube's capabilities, teams can receive real-time alert of changes and scan results, facilitating well-informed decision-making. Whether it's detecting changes or evaluating scan outcomes, Botkube's centralized interface ensures the smooth execution of every necessary action. + +### Efficient Monitoring and Action + +Botkube excels at monitoring Kubernetes resources, which lays the foundation for effective governance. Through Botkube, potential deviations from policies or security standards are quickly identified. This empowers the system to swiftly respond to unexpected issues in real-time. Equipped with a comprehensive overview of the entire automated process, a team can confidently take informed actions or implement automations to address any discrepancies. + +By incorporating best practices, harnessing Botkube's insights, and aligning with policies, organizations not only bolster security but also enhance the reliability and integrity of their automated deployments. + +Enter Botkube: A Smoother GitOps Workflow +----------------------------------------- + +‍ + +![Image 2: a screen shot of a screen showing a screen showing a screen showing a screen showing a screen showing a screen showing](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64e6946be4cd9b0c47a55f75_flux-interactivity-1.gif) + +‍ + +Botkube emerges as the solution to these challenges, making the GitOps workflow not just smoother, but remarkably efficient. Here's how Botkube transforms the game: + +### Real-time Collaboration + +Imagine a scenario where crucial alerts about pod crashes, resource constraints, or deployment failures are instantly delivered to your preferred chat platform. Botkube ensures that team members are promptly informed, enabling quick decision-making and streamlined troubleshooting. No more delays or communication gaps – Botkube fosters instant collaboration in its truest sense. + +### Centralized Knowledge + +With Botkube, all Kubernetes-related discussions, diagnoses, and actions unfold within your chat platform. This not only promotes the sharing of knowledge but also establishes a centralized repository of information and actions taken. Bid farewell to scattered conversations and context loss; everything is meticulously preserved for effortless access and accelerated onboarding of new team members. + +### Turbocharged Efficiency + +Botkube's automation capabilities eradicate repetitive tasks, allowing lightning-fast actions via simple chat commands. Whether scaling deployments, examining logs, or rolling back changes, these actions seamlessly integrate into your chat conversations. This fluid workflow minimizes context switching, amplifies productivity, and accelerates application deployment and management. + +### Flexibility and Scalability + +Be it a single Kubernetes cluster or a sprawling array of them, Botkube adapts effortlessly. Its scalability ensures that you can effectively monitor and manage your infrastructure without limitations. Moreover, Botkube's extensible architecture empowers you to integrate custom alerting mechanisms or notifications, tailoring the tool to precisely match your organizational needs. + +### Optimizing Flux + +![Image 3: a screen shot of a wordpress page with a purple background](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64e6c1703e7d7fa16f63c0db_ezgif.com-resize.gif) + +The [Botkube Flux executor](https://botkube.io/blog/botkube-v1-3-0-release-notes) streamlines the diff process by enabling a one-command execution for diffing between a specific pull request and the cluster state. An example command could be: + +`@BotKube flux diff kustomization podinfo --path ./kustomize --github-ref [PR Number| URL | Branch]` This command automates multiple tasks, including identifying the associated GitHub repository linked to the provided kustomization, repository cloning, pull request checkout, and comparison of pull request changes with the present cluster state. The results of this comparison are shared by posting a diff report on the designated Slack channel, allowing team members to easily review and discuss the alterations. Furthermore, the tool offers users a few additional buttons: * Option to post the diff report as a GitHub comment directly on the corresponding pull request. This feature provides intentionality and user control over the sharing of potentially sensitive information. * Ability to approve the pull request. * Access to view the details of the pull request. ‍ Conclusion ---------- In conclusion, Botkube is a revolutionary tool that elevates GitOps workflows by eradicating manual hurdles, propelling real-time collaboration, and consolidating knowledge. Embrace Botkube, and empower your team with the tools to succeed in the fast-paced world of modern software development and operations. Get Started with Botkube's Flux Plugin -------------------------------------- Ready to try it out on your own? The easiest way to configure it is through the [Botkube web app](https://app.botkube.io/) if your cluster is connected. Otherwise you can enable it in your [Botkube YAML configuration](https://docs.botkube.io/configuration/executor/flux). + +Once enabled, you can ask questions about specific resources or ask free-form questions, directly from any enabled channel. Find out how to use the Flux plugin in the [documentation](https://docs.botkube.io/usage/executor/flux/). + +We’d love to hear how you are using Gitops! Share your experiences with us in the Botkube [Slack community](http://join.botkube.io/) or [email our Developer Advocate, Maria](mailto:maria@kubeshop.io) and we’ll send you some fun swag. + +‍ diff --git a/hack/assistant-setup/content/botkube.io__blog__explore-the-new-era-of-aiops-with-botkubes-ai-assistant.md b/hack/assistant-setup/content/botkube.io__blog__explore-the-new-era-of-aiops-with-botkubes-ai-assistant.md new file mode 100644 index 0000000..76cfe67 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__explore-the-new-era-of-aiops-with-botkubes-ai-assistant.md @@ -0,0 +1,123 @@ +Title: Explore the New Era of AIOps with Botkube's AI Assistant + +URL Source: https://botkube.io/blog/explore-the-new-era-of-aiops-with-botkubes-ai-assistant + +Published Time: Mar 11, 2024 + +Markdown Content: +![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) + +Maria Ashby + +Developer Advocate + +Botkube + +Discover how to revolutionize Kubernetes management with Botkube's AI Assistant! Simplify K8s operations, automate incident reporting, and more. + +### Table of Contents + +* [Getting Started with Botkube's AI Assistant](#getting-started-with-botkube-s-ai-assistant) +* [How to use Botkube's AI Assistant](#how-to-use-botkube-s-ai-assistant) +* [Conclusion](#conclusion) +* [Get Started Today!](#get-started-today-) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +#### Start Receiving Kubernetes Notifications Now with Botkube Cloud + +Kubernetes management requires lots of expertise. In the era of artificial intelligence, this complexity has led to the advent of [AIOps](https://botkube.io/learn/aiops-tools)—artificial intelligence for IT operations—which aims to enhance operational processes through the use of AI. In addition, Kubernetes Assistant tools like [Botkube's AI Assistant](https://botkube.io/blog/real-time-platform-engineer-advice-ai-assistant) have launched in response to the challenge of Kubernetes developer experience. They can simplify the Kubernetes experience through automation, real-time monitoring, and intelligent troubleshooting directly from chat platforms. These new tools are vital for both seasoned DevOps professionals and newcomers to make Kubernetes operations more accessible and efficient. + +This tutorial walks you through how to use Botkube's AI Assistant to modernize, automate, and to enhance your Kubernetes management workflow. + +**Getting Started with Botkube's AI Assistant** +----------------------------------------------- + +### **Prerequisites** + +Before exploring Botkube's AI Assistant, you’ll need: + +* A Botkube account + +* Access to a Kubernetes cluster. + +* A chat platform supported by Botkube (e.g., Slack, Microsoft Teams). + + +1. ****Create Your Botkube Account:**** [Create an account](http://app.botkube.io/) to get started. + +**Note for Existing Users:** Ensure your setup is upgraded to version 1.9 or later before starting to use Botkube's AI Assistant. + +#### For Open Source Users + +* Follow our [straightforward guide](https://botkube.io/blog/botkube-open-source-to-cloud-migration) to migrate your OSS instances to Botkube. + +‍ + +‍ + +![Image 2: a screen shot of the sign in page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65ecd856e5a6e7c2b404c66d_N1o3vsdP6wCYKbJZGkhQRxDQXG9z_jKjVoZjvGeUH2CddQSNd0IY8Ue1-0CfDX5LWhmtSNYgncFxPntT9j3kr_YuzWezKrZXDmYTB-VAKuU2oXXOZ3UOGq8DrBNckB2ipzta_zpdWMNidFY7lNukoJs.png) + +‍ + +2. ****Cluster Integration:**** Connect your Kubernetes cluster with Botkube by following the straightforward setup guide. This step is essential for enabling the AI Assistant to interact with your cluster. + +![Image 3: a screen shot of a landing page for a website](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65ecd86310dd50a06df954e2_oeh6mJwm7VXV8-qP22EHYCGBGTD3Vkj_oNVMyhDANhHg-oI3h4xHJ2GQ_EMtiqxtwkKTdEsN73su0lsORSgBBuxnd3hL-KNkAyVdwLn5Qeo54tpzPL9Emihf-l1B-YdyvhlN8DJMCvmjtIIBytLwleo.png) + +‍ + +3. **Initiate AI Assistance:** After connecting your instance, the AI Assistant feature is automatically enabled as part of the installation process. Begin your interaction with the AI Assistant by using: **`@Botkube ai hi`** + +![Image 4: a screen shot of a screen with a message on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65ecd86f1927490939066d7b_jdK_nbhFbWzCMwC8aCYHZ5o7JZJ4G1LOVwrcWtEoEC1YlFx9oQzja864BYJEf1Ber1UtBcV2nB_y5ZIgf6C1-Sl8z-gbX7Y3jPXGemQc_yT4xeSw9JVTZjyIdqq7wWwmzunejS2Ncep2JV0gN8DgKsQ.png) + +‍ + +**How to use Botkube's AI Assistant** +------------------------------------- + +### **Automated Incident Reporting** + +![Image 5: a screenshot of a tweet from a twitter account](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65e8a037ee1160c06c47b0cc_LopU3vbDXwRSiyWbJgwCkZ2vsifEeikrsi9f16OWeJE83BBJGt2tqJn2O-2mq8nTvDlNejOFdH2LyHXcKccnsFcyjeDoccaBZSLLuxm3HZtsE3-TBmPgOEkLEjSr9_K5DcIvpZkd1KVFyN4uly3aImU.png) + +Botkube's AI Assistant simplifies incident management by analyzing issues and sharing detailed reports in your chat platform. + +### **To use Botkube's AI Assistant for incident management:** + +1. Integrate Botkube with your [preferred chat platform](https://botkube.io/integrations). + +2. Ask Botkube questions directly in your chat: + +**@Botkube ai are there any failing pods in my default namespace?** + + +In two steps, you can get immediate, detailed insights into your cluster's health and kick start your troubleshooting process. It also makes it easy to highlight and escalate critical issues with your team right in the chat. + +### **Cluster Analysis and Automated Runbooks** + +![Image 6: a screenshot of a twitter page showing a message](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65e8a0387271b3eec14634d8_Co_cwk72Ki64q1a3A6OAcxn0qQvCjlhWWlTtBLPzMwhPjvVn6oHn-e2_L4twExmcpGAuis9bZKJXC2JRzuOzxMXg5MsbAugaCwe1xt5GUqWsnbug3CQkm7uGo7GX2g4dgTc-TCK1oScC7aUd82RMlG4.png) + +‍ + +AI Assistant significantly enhances Kubernetes diagnostics by offering detailed analysis and automated runbooks for issue resolution, simplifying the management process. + +![Image 7: a screenshot of a chat window on a computer screen](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65ee1a5d521144e87f59161e_Botkube%20AI%20Assistant%20-failing%20GIF.gif) + +When an error occurs, Botkube will offer an in-depth analysis. + +1. **Ask a Question**: Use the command `@Botkube ai how do I fix this?` to describe your issue. +2. **Receive Guidance**: Botkube will offer a step-by-step guide to address the problem, aiming for a more reliable and efficient cluster. +3. **Apply Fixes**: Implement the provided suggestions by executing commands directly in your chat window. + +**Conclusion** +-------------- + +Botkube's AI Assistant redefines [Kubernetes management](https://botkube.io/learn/kubernetes-observability-best-practices), offering AI-enhanced troubleshooting and operational efficiency. By integrating AI Assistant into your workflow, you unlock a more accessible, reliable, and efficient Kubernetes ecosystem. Start your journey towards AI-driven Kubernetes management today and experience the benefits of having a virtual platform engineer by your side. + +**Get Started Today!** +---------------------- + +Starting with our AI Assistant is simple and intuitive. It's included in every Botkube Cloud instance, ensuring a smooth integration for users updating to the latest version. **New users can easily begin with Botkube, quickly enjoying AI-enhanced Kubernetes management.** [Start with Botkube here](http://app.botkube.io/). For those using the open-source version, [follow our migration guide](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud) to swiftly upgrade to Botkube Cloud and access all new features. + +Dive into the Botkube AI Assistant for an optimized Kubernetes management experience. Sign up now to integrate real-time, AI-powered support into your cluster management, improving efficiency and reliability. With the Botkube AI Assistant, you gain a 24/7 platform engineer at your service. + +‍ diff --git a/hack/assistant-setup/content/botkube.io__blog__five-essential-kubernetes-tasks.md b/hack/assistant-setup/content/botkube.io__blog__five-essential-kubernetes-tasks.md new file mode 100644 index 0000000..8507e21 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__five-essential-kubernetes-tasks.md @@ -0,0 +1,147 @@ +Title: 5 Essential Kubernetes Troubleshooting + Monitoring Tasks to Automate + +URL Source: https://botkube.io/blog/five-essential-kubernetes-tasks + +Published Time: Jan 11, 2024 + +Markdown Content: +![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) + +Maria Ashby + +Developer Advocate + +Botkube + +Learn how to simplify DevOps tasks directly within your favorite communication platform like Slack and Microsoft Teams + +### Table of Contents + +* [Real-time Kubernetes Monitoring with Prometheus](#real-time-kubernetes-monitoring-with-prometheus) +* [Receive Real Time ArgoCD Notifications in Slack](#receive-real-time-argocd-notifications-in-slack) +* [Kubernetes Insights with Botkube’s ChatGPT Assistant](#kubernetes-insights-with-botkube-s-chatgpt-assistant) +* [Kubernetes Troubleshooting Automations](#kubernetes-troubleshooting-automations) +* [Executor Plugin](#executor-plugin-) +* [Conclusion](#conclusion) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +If you're curious about the exciting possibilities of using Kubernetes in your chat platform, you've come to the right place. With Botkube you can complete all your collaborative Kubernetes troubleshooting and monitoring tasks right from your chat window! In this blog post, we'll explore five exciting ways to get the most out of Botkube. Whether you're a beginner or an experienced Kubernetes user, you'll learn how to simplify DevOps tasks, empower your teams, and enhance your Kubernetes experience. + +[Botkube](http://app.botkube.io/) is a collaborative Kubernetes troubleshooting and monitoring tool designed for both DevOps experts and developers who may not be Kubernetes experts. Botkube helps teams quickly respond to issues by sending timely alerts about what's happening in their Kubernetes environments. It's not just about alerts though; Botkube also lets teams automate responses, run Kubernetes commands, and follow Kubernetes best practices. Plus, it integrates with popular communication platforms like Slack, Microsoft Teams, Discord, and Mattermost, making it a valuable asset for any team working with Kubernetes. + +Real-time Kubernetes Monitoring with Prometheus +----------------------------------------------- + +![Image 2: a screenshot of a page with a message on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65baac094d6cd1122a89f719_Screenshot_Template_Botkube%20(3).png) + +[Real-time monitoring](https://botkube.io/solutions) of Kubernetes is the foundation of Botkube's features. With this feature, you gain access to a live, dynamic view of your Kubernetes environment. While Botkube has a long-standing history of supporting Kubernetes events, Kubernetes clusters often generate an abundance of state events and metrics. Typically, tools like kube-state-metrics and custom applications are configured to utilize Prometheus as a metrics store. Prometheus' Alertmanager then identifies metrics in anomalous states and triggers corresponding alerts. To seamlessly integrate this functionality into Botkube, we've developed the [Botkube source plugin for Prometheus](https://botkube.io/integration/prometheus). + +This feature enables you to instantaneously assess the performance and health of your applications, pods, and services. With real-time insight into your cluster's state, you can swiftly identify and address issues, minimizing downtime and optimizing resource allocation. + +Real-time monitoring brings significant advantages that help improve application reliability and system efficiency. DevOps teams, in particular, will find this feature invaluable for maintaining high-performance Kubernetes environments. + +The versatility of real-time monitoring extends across various use cases, from microservices health monitoring to resource consumption tracking and performance bottleneck identification. With Botkube's real-time monitoring capabilities, you're well-equipped to tackle a wide range of Kubernetes challenges. + +Receive Real Time ArgoCD Notifications in Slack +----------------------------------------------- + +Botkube's [integration with Argo CD](https://botkube.io/integration/argo-cd-botkube-kubernetes-integration) simplifies deployments and enables a seamless GitOps workflow. Argo CD is a continuous delivery tool that streamlines the code updates from Git repositories and deployment to Kubernetes resources, managing infrastructure configuration and application updates within a single system. + +The Botkube ArgoCD plugin simplifies Argo CD notifications by unifying platform secrets and notifications across projects like Kubernetes, Prometheus, and Argo. It enhances visibility by consolidating GitHub and Argo events, so users can now receive real-time notifications from their Argo CD deployments directly in their communication channels, especially valuable for teams managing Kubernetes workflows within GitHub. Setting up ArgoCD notification natively is a complex process that requires installing triggers and templates, adding email credentials to a secret, registering the email notification service with Gmail credentials, and subscribing to notifications for specific applications or projects. To begin receiving notifications with Botkube, simply provide your application name, Argo URL, and namespace, and ensure ArgoCD is enabled in your RBAC permissions. This plugin also allows you to utilize Argo CD's native notification system in chat platforms like MS Teams and Discord which are not supported natively. + +![Image 3: a screenshot of a screen showing the status of an application](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/650e09c855b42178c42a1d9b_jOhrHB90gwPhqwSU94v3y1Q7Q2Y_1Ltfap5j-mY6XbgieOkVITkVOoOboVTaVHT55onYtmncvcVt_zMrOQehiIOKbM2unJi5NKvWpXhjN222CbEB31JP_oSxT9QowgHWFcKv0YoK2FvZZvJMwGpET4s.png) + +Botkube sending ArgoCD notifications to Slack + +### Automating Kubernetes Operations + +![Image 4: a screenshot of an error message on a website](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a0710c644fa0ebb76293d8_DJDInRt7FR5LTwmVqnG4WM9OBv7o9_FmRKnG5sA9F-UU-kqljSWEtByVtVP37PhGh2wq7eezjjCNzzjlYyIOyqlAfEMDA6UdSCs5AUJLKfcy3qqXg8cEOoJTdi4S-5Z_Otd9bgcKLoeY5gEcWNa0D4U.gif) + +‍ + +Botkube excels in fostering collaboration and efficiency through its integration with popular chat platforms. Botkube's [automated action feature](https://docs.botkube.io/configuration/action) transforms Kubernetes management for DevOps teams.It introduces automated commands triggered by events, delivering context to communication channels seamlessly. Some examples of these automations are “get-created-resource” + +![Image 5: a screen shot of a web page showing a list of items](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a039d1bc5724b39fa1b44d_GXqDS0fufecSqTlSqV-h3ch5pmFTNSdEY7mE5IXYXidytlJBIM8f2EfS2_xpxIhxJqxK23lp5aXMrw6zlD5qK6RaFBh4l9ZZ5PZ5v7ud5JrE65atfkRPW0FdTqzm55LEYKPhvjjDSl8DQYShs_l1GAg.png) + +‍ + +Actions consist of two components: the command (currently kubectl) and the event source binding. The command, defined with Go template syntax, utilizes event metadata for execution. Event source bindings connect actions to specific sources, enhancing integration with event filters. When a source binds to both an action and a communication channel, action results accompany the original event. Actions offer flexibility, from read-only kubectl configurations to customized commands like auto-restarting hanging pods, sending results to channels. + +### Botkube includes two preconfigured actions in the Cloud Dashboard + +![Image 6: a screen shot of a window showing the email settings](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a0710b68ad02138d5720ff_v4OOZo5A1CCE3VZToEZfBiIuLviwI71gpu5gWv_erbnK1YfbO1a7oYWiqmNlwJZO-9ZuXEWD50ls3ylgorzhg76Lf6PpXpvjleX-sA3vrhuboF-61-bn37dMqsNd5Q6BvC9FIdMYbJ_KBfDJu3LtIkA.gif) + +#### describe-created resource: + +Automatically runs kubectl describe on resource creation events, delivering results to bound channels. + +‍ + +![Image 7: a screenshot of a conversation in a web browser](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a0710c7946a3e903c20f78_gh7vWb3pXGzzEya6P_SNo6ZdoeJHG1rE2whT7wfwf4-kF9hFunVFf2_O2j2zjJk6zUXCaT62Yw4GxcQCoPpmKaWTIzKXnOQu-fO9niWeypy2nsigHIBM1DyEu4Rr2WLf7KnXK0zlyBk_9I3HN9I8GJM.gif) + +#### Show-logs-on-error + +Executes kubectl logs on error events, delivering logs to relevant channels. + +Botkube's automated action feature simplifies Kubernetes management by automating commands in response to events, improving DevOps workflows, and ensuring effective collaboration. + +Kubernetes Insights with Botkube’s ChatGPT Assistant +---------------------------------------------------- + +![Image 8: a screen shot of a computer screen showing a number of options](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c21a2723cb531baf9f0867_doctor-interactive-help.gif) + +‍ + +Botkube doesn't stop at monitoring and alerting; [Botkube’s Doctor Plugin](https://botkube.io/blog/use-chatgpt-to-troubleshoot-kubernetes-errors-with-botkubes-doctor) allows you to tap into the power of ChatGPT right from your communication platform. There are many ways to use the Doctor plugin when troubleshooting Kubernetes clusters. It can help analyze logs, metrics, and other data from your Kubernetes cluster to identify issues – then returns recommendations on how to fix and improve errors and issues. + +### Here's a few use cases as examples: + +#### Assistance for Beginner Kubernetes Users + +![Image 9: a screenshot of a screen with a message on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a039d1b4b8569bc008cf16_d3_gGf91GFWCqjVrQEfoSLImw32RhITxnMPRZVlJg2Ybc5N6JFl5nXM2zJCM4goiFIgIAFe5vEjA5KJd4HIkFM8-ZBtLYvInlk_zYFHYK6ksTvaP1yo32cZf-3TpFnP97sl7WXWZj8SViQXXDA8ZMuo.png) + +‍ + +With the [Doctor plugin](https://botkube.io/integration/chatgpt-botkube-kubernetes-integration) installed, users are able to use the **Get Help** button located under incoming error events, like the one shown above. This helps lower the barrier of entry for new Kubernetes users. The Get Help button passes the error data to ChatGPT, which returns a response with actionable buttons to execute commands, like kubectl describe pod or kubectl logs pod which saves time instead of searching the internet or looking through Kubernetes docs. + +Users can also ask ChatGPT specific questions directly from the interface. Users can ask questions about Kubernetes, like “Where does Kubernetes store its state?” to tutorial-like questions like “How do I create a Pod?” + +‍ + +![Image 10: what are the common problems with kubernetes service](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a039d0a46841c35338b848_SuBeHwTBNG6pmzxQrBlBPNA4tbpFK17w_DWF3D_xXJK4gcjuMnNhFd5uCuKyjUSdCuplS-JAlksGeGcjil9V94LBJn0ZY2sNJ0RhwYC0UYvEIoHJkBK9c0IygnpLse9jwQmVuj8S6t6dwIvUfrmCtmE.png) + +#### ChatGPT Recommendations + +The Doctor plugin integrates with Botkube's existing Kubernetes recommendations, leveraging insights derived from cluster logs to offer personalized suggestions tailored to your Kubernetes environment. Whether it's optimizing resource allocation, enhancing security, or boosting overall performance, the Doctor plugin equips users with valuable insights to make informed decisions for their Kubernetes clusters. + +‍ + +![Image 11: a screenshot of a message from a customer](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a0710b0d200385a983c1f3_I196XuDKfbF_0Tq-brChXFXESPbAuAMK7UVl7oWnbS5TY0DEDg5mK4dOqO5WDIuTdcr9kFtivAoOezeqDYb6AkCWFCwW37jskmlzHgz6FDtz0AQwH9TWUUTCEUOE_yw_2zcBkYqYymnHml4Si8X0Rfw.png) + +Kubernetes Troubleshooting Automations +-------------------------------------- + +Botkube users can use the Doctor plugin to harness ChatGPT's capabilities to effortlessly create custom Botkube configurations and automated actions, seamlessly integrating with other plugins. With Slack interactivity as a command builder, users can interact efficiently with the system, receiving tailored suggestions for automations that address specific challenges within their Kubernetes clusters. The plugin empowers users to pinpoint precise solutions and execute commands with ease, streamlining the troubleshooting process and enhancing overall cluster management. + +This integration is particularly useful for developers and Ops teams seeking to navigate the complexities of Kubernetes, offering real-time assistance and guidance without the need for extensive Google searches or sifting through Kubernetes documentation for every encountered error. + +Executor Plugin +--------------- + +![Image 12: a screen shot of a screen showing a list of items](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a039d14c51c24d23107d67_be3NRGddT9iSoKYyGzqKfm0vAygUfhC7Tjt1sqpMpSKxIALefMbB_GeBXrxs4-Xy3vlMRz7Dq7vJtts06n1UhgydkWVbJs0WVBoEtZwu_UqM26jLT7u4Dxbh1993ioMwhORJwnbh0F_pcYmpJBm1Mgg.gif) + +Last but not least, Botkube's [Executor plugin](https://docs.botkube.io/usage/executor/) plays a pivotal role in allowing users to explore the flexibility within the plugin system. With the Exec plugin, you can seamlessly install and run any command-line interface (CLI) directly from your chosen communication platform through Botkube. It empowers you to create your personalized interactive interface for these CLIs. + +While the Executor plugin is not designed to replace our dedicated executor plugins, it serves as an excellent tool for exploring Botkube's [plugin system](https://botkube.io/integrations) by being able to quickly test new CLIs within Botkube, or in controlled lab environments. What sets it apart is its support for interactivity, featuring buttons and dropdowns that enable you to effortlessly utilize your preferred tools without the need for extensive typing, even when using your mobile device. + +Conclusion +---------- + +In conclusion, Botkube offers a variety of powerful [features](https://botkube.io/features) that cater to both beginners and seasoned Kubernetes users and can enhance your Kubernetes troubleshooting experience. From real-time monitoring with Prometheus for immediate insights into your cluster's health to a seamless ArgoCD integration that helps simplify deployments and [GitOps](https://botkube.io/blog/enhancing-gitops-workflows-with-botkube) workflows, Botkube empowers DevOps teams to work more efficiently and enables developers to troubleshoot their applications without Kubernetes expertise. Dive into these cool Botkube features and elevate your Kubernetes troubleshooting experience. + +### Getting Started with Botkube Today + +[Try it for yourself](https://app.botkube.io/)! Follow our step-by-step [tutorial](https://botkube.io/blog/maximize-your-devops-teams-efficiency-with-botkube-and-microsoft-teams) to set up Botkube using our web app. We're excited to hear how you use Botkube. Create a support ticket directly in the dashboard, share your stories with us in the [Botkube Slack community](https://join.botkube.io/). We’ll even send you some cool swag as a thank you. diff --git a/hack/assistant-setup/content/botkube.io__blog__get-botkube-running-in-under-3-minutes-the-new-slack-app.md b/hack/assistant-setup/content/botkube.io__blog__get-botkube-running-in-under-3-minutes-the-new-slack-app.md new file mode 100644 index 0000000..3c9014d --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__get-botkube-running-in-under-3-minutes-the-new-slack-app.md @@ -0,0 +1,53 @@ +Title: Get Botkube Running in Under 3 Minutes the New Slack App + +URL Source: https://botkube.io/blog/get-botkube-running-in-under-3-minutes-the-new-slack-app + +Published Time: Nov 06, 2023 + +Markdown Content: +![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) + +Maria Ashby + +Developer Advocate + +Botkube + +Life is short, install quickly - Learn how to get started with Botkube and Slack + +### Table of Contents + +* [Benefits of Easy Installation](#benefits-of-easy-installation) +* [Get Started with Botkube’s new Slack App](#get-started-with-botkube-s-new-slack-app) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +#### Get started with Botkube Cloud + +Botkube is engineered to optimize the operational efficiency of DevOps teams.With our new installation process, starting collaborative Kubernetes troubleshooting has never been more straightforward. We're here to make your DevOps team's life easier and more efficient, every step of the way .With our streamlined installation process, you can now get Botkube up and running effortlessly. No more complex setups—just a straightforward installation that saves you valuable time and ensures you're quickly set up to enjoy the benefits of Botkube. In just under three minutes, you can now effortlessly configure and deploy Botkube into your Slack workspace. + +Benefits of Easy Installation +----------------------------- + +### Swift Deployment + +The introduction of the new Slack app not only enhances the efficiency of Botkube but also significantly reduces the time and complexity traditionally associated with configuring Kubernetes monitoring tools. This streamlined installation process, now complemented by the Slack app, leads to a rapid setup for Botkube. Users can expect swift and simplified deployment, allowing them to harness the benefits of Botkube in no time at all. + +### Increased Productivity + +An easy installation process allows teams to get started with Botkube quickly and reap the benefits of its real-time alerts and interactivity. This can help minimize operational downtime and increase team’s mean time to recover for critical events. + +### Seamless Integration + +With the new installation method, Botkube ensures a seamless experience from deployment to operation. The Botkube Slack app integrates effortlessly into existing Slack workflows, offering a unified platform for collaboration, Kubernetes issue resolution, and streamlined action-taking. Additionally, a user-friendly interface and simplified installation process make Botkube accessible to individuals of varying Kubernetes expertise. + +‍ + +Get Started with Botkube’s new Slack App +---------------------------------------- + +Ready to try it out on your own? Check out this [tutorial](https://youtu.be/AGKJsNro4jE?feature=shared) for step by step instructions on how to get set up. The easiest way to configure it is through the [Botkube web app](https://app.botkube.io/) if your cluster is connected. Once enabled, you can ask questions about specific resources or ask free-form questions, directly from any enabled channel. We’d love to hear how you are using Botkube! Share your experiences with us in the Botkube [Slack community](https://join.botkube.io/) or [email our Developer Advocate, Maria](mailto:maria@kubeshop.io) and we’ll send you some fun swag. + +‍ + +By the time you're done reading this, Botkube will be up and running. diff --git a/hack/assistant-setup/content/botkube.io__blog__getting-started-with-botkube-and-argocd.md b/hack/assistant-setup/content/botkube.io__blog__getting-started-with-botkube-and-argocd.md new file mode 100644 index 0000000..5a3c62b --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__getting-started-with-botkube-and-argocd.md @@ -0,0 +1,142 @@ +Title: Tutorial: Infuse collaboration into your Argo workflows with Botkube + +URL Source: https://botkube.io/blog/getting-started-with-botkube-and-argocd + +Published Time: Sep 29, 2023 + +Markdown Content: +![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) + +Maria Ashby + +Developer Advocate + +Botkube + +Learn how to set up Botkube with ArgoCD plugins in this step-by-step tutorial. + +### Table of Contents + +* [Prerequisites](#prerequisites) +* [Install the ArgoCD Plugin into a new instance](#install-the-argocd-plugin-into-a-new-instance-) +* [Using the ArgoCD Plugin in Action](#using-the-argocd-plugin-in-action) +* [Conclusion](#conclusion) +* [Sign up now!](#sign-up-now-) +* [Feedback](#feedback) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +#### Start Receiving Kubernetes Notifications Now with Botkube Cloud + +Navigating through the complexity of scaling operations and collaborative workflows with GitOps tools like ArgoCD can pose significant challenges. As teams scale, real-time updates and troubleshooting efficiency become paramount. + +Enter [Botkube](http://botkube.io/), a Kubernetes collaborative troubleshooting solution designed to seamlessly integrate with widely-used collaboration platforms such as [Slack, Microsoft Teams, Discord, and Mattermost](http://botkube.io/integrations). Botkube doesn't just simplify Kubernetes monitoring; it also optimizes GitOps workflows through enhanced automation, real-time collaboration, and centralized knowledge management. + +Learn more about Botkube’s move towards [GitOps](https://botkube.io/blog/enhancing-gitops-workflows-with-botkube) and the new ArgoCD Plugin– the second installment in the Botkube GitOps plugin series in our [release announcement](https://botkube.io/blog/argo-cd-botkube-integration). + +In this tutorial, we'll delve into the capabilities of the [Botkube ArgoCD plugin](https://docs.botkube.io/configuration/source/argocd/). This powerful tool automates notifications, and enables bi-directional action. By the end of this tutorial, you will know how to create, configure, and effectively leverage the Botkube ArgoCD plugin to enhance and simplify your GitOps workflow. + +Prerequisites +------------- + +Before you begin, make sure you have the following prerequisites in place: + +* Basic familiarity with Kubernetes and its components +* Access to a Kubernetes cluster with Helm installed +* Access to Slack workspace +* A [Botkube Cloud Account](http://app.botkube.io/) +* [Argo CD](https://argoproj.github.io/cd/) must be installed on your Kubernetes cluster +* [Install the Argo CD CLI](https://argo-cd.readthedocs.io/en/stable/?_gl=1*10c1kh8*_ga*NDc0Nzg3NTU3LjE2OTU2NTg1MzI.*_ga_5Z1VTPDL73*MTY5NTkxNTMyMC4yLjEuMTY5NTkxNTM0NC4wLjAuMA..#getting-started) on your local machine + +* Set up port forwarding to securely access your Argo CD instance, avoiding exposure over the internet + +* Ensure that you have at least one application configured within ArgoCD + +Install the ArgoCD Plugin into a new instance +--------------------------------------------- + +### Creating Botkube Cloud Account + +1. Sign in to Botkube Cloud, either as a new user with a free account with an email or Github account or as an existing user. + +\* Click [here](https://botkube.io/blog/step-by-step-tutorial-leveraging-botkubes-cloud-slack-feature-for-kubernetes-collaborative-troubleshooting) for a more indepth Botkube installation tutorial + +### Connecting Kubernetes Cluster to Slack + +1. Next, enter your instance display name. + +2. Select the Official Botkube Slack option. (Note this option requires you to sign up for a 30 day free trial) + +3. Access the app settings within Slack to configure the integration with Botkube. Click the "Add Slack" button to initiate the process. + +4. Select the workspace within Slack where you want to utilize Botkube. You will now have access to public and private channels, enabling seamless communication and collaboration for Kubernetes troubleshooting tasks. + +5. To include Botkube in private channels, utilize the "Add to Channel" feature. This ensures that Botkube is present in relevant channels where Kubernetes-related discussions and incident responses take place. + +6. Select the Plugins you would like to use. + +### Enabling the Argo CD Source Plugin + +![Image 2: Botkube Setup Wizard for easy K8s tool deployment](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6516ed34d32d63db102a63d7_OKVRz-x5BxiFYrNR8MaOf7fpyY77Rel8xxgioY5wrTA1HSrT_B9mUrZXxY_BpJ2p71X-Ovr6eN1tHhoVryzsABM3sj8GmHJkY84sQu72IMwDrZieUtJDMvLcYKoLml5oggeDqgtsie5TboIxEDntW2M.png) + +1. Select the ArgoCD and kubectl Plugin + +2\. Begin by selecting the ArgoCD and kubectl plugins within your Botkube setup + +![Image 3: Adding Argo CD API Keys](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6516ed347d480ce1978008ad_ISJShwJ0wGBlQUqSnpW1Zt-9vzEKnLzwFnLMlxGIX0WI25KZ7tWnyapg0LSixCOslONWZfHErb-qmr_MvlqlWTDK3VxGnPKsZfDCnNKGJNAy90orbvT3HHXdkgm-D3JeArzT4pea8mUOExvfS7QY0rY.png) + +3. Configure the plugin with your Botkube instance + +4. Insert your resources from your ArgoCD UI + + +* Fill in your “Name” and “Namespace” +* Make sure your BaseURl matches the one found on your ArgoCD UI + +![Image 4: Setting Argo CD permissions on deployment](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6516ed337ad79fb0c8bb0436_zRBc4WDwcmJW7sKZjJaItEuxSAKmzxrqxw3C-QhoAPTf7Br_i67Eyk5XN6jYPowsCQ836d4ogBZ3Lh6rC42cbw1Ato5chhbOP9UOxTy6hQy_F0prcvSRmD7IBZtfCFMoKqcjlnUYMYCC9SVqJYl6NJ4.png) + +4. Configure Permissions + +* In the Argo plugin settings, select the "Permissions" tab. +* Choose the "Custom" option. +* Under the custom permissions, select the "Group" option +* Next, update the permissions for RBAC (Role-Based Access Control). +* Add "argocd” + +![Image 5: RBAC controls for Argo](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6516ed3352cdb1553efc2f21_7bqFl-gQuFLiZqajb4AXF0r0BOJ-_D0SseHOHPGjUQ6DKi6M_YWpc2qNljNslsn7UMMDmAULu_cbURDPd6ilRAbbtKE3sQHURZPpcGMMwzgEIuXq1dm0m0R1LTVkQirBVpOsBWF-ooL1EBd1bb2hogs.png) + +5. Click "Next" to proceed to the installation step. +6. On the next page, you will have the option to also enable [Command Alias](https://botkube.io/blog/command-line-magic-simplify-your-life-with-custom-kubernetes-kubectrl-aliases-on-botkube) and [Botkube Actions](https://docs.botkube.io/usage/automated-actions/). + +7\. Make your selection and click the create button. + +8. You are now ready to start playing with your Botkube plugin. + + +Using the ArgoCD Plugin in Action +--------------------------------- + +### Checking the Health Status of Apps + +![Image 6: ArgoCD events](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6509a59c63441b36226ea80d_argocd-events-e6eabb1f581e9822020d55461539bfcd.png) + +‍ + +Use Botkube’s ArgoCD plugin for seamless health status checks on your ArgoCD apps. Dive into the world of troubleshooting with just a couple of commands. Utilize "kubectl describe" and "kubectl get" within Botkube to verify the optimal functioning of the Argo CD source plugin. Leverage slack interactivity and automation to make health status checks a breeze. + +Conclusion +---------- + +In summary, the [ArgoCD Plugin by Botkube](https://botkube.io/integration/argo-cd-botkube-kubernetes-integration) stands as an indispensable resource for streamlining GitOps workflows. It excels in automating notifications, fostering collaboration, and bi-directional control. This makes Gitops workflows more efficient and easier to scale. + +Botkube significantly simplifies the ArgoCD troubleshooting process by offering a streamlined and user-friendly alternative to the complex manual process. Once enabled, Botkube takes charge of configuring notifications, utilizing its incoming webhook to effortlessly receive and forward events. This eliminates the need for intricate procedures like generating ArgoCD webhook secrets and manually setting up triggers for events. Botkube goes beyond simple alerting by allowing users to directly engage with ArgoCD events, performing actions like running commands on applications, viewing applications in the ArgoCD UI, or opening the source repository in a web browser—all from your communication platform of choice. This streamlined and interactive approach to troubleshooting ArgoCD takes your team’s efficiency to the next level. + +Sign up now! +------------ + +Get started with Botkube! Whether you're a seasoned Kubernetes pro or just getting started, Botkube can help supercharge your troubleshooting process. [Sign up now for free](http://app.botkube.io/) and [join the community of users on Slack](https://join.botkube.io/) who are already benefiting from the power of Botkube. + +Feedback +-------- + +We welcome developers and Kubernetes enthusiasts to explore the platform and share their valuable feedback. We want to know what you think of Botkube and how we can make it even better. [Reach out to our Developer Advocate, Maria](mailto:maria@kubeshop.io) or schedule a quick 15min meeting at your preferred time. As a thank you, we’ll send you some great Botkube swag! diff --git a/hack/assistant-setup/content/botkube.io__blog__implementing-your-own-botkube-plugin-a-real-life-use-case.md b/hack/assistant-setup/content/botkube.io__blog__implementing-your-own-botkube-plugin-a-real-life-use-case.md new file mode 100644 index 0000000..7d3427b --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__implementing-your-own-botkube-plugin-a-real-life-use-case.md @@ -0,0 +1,172 @@ +Title: Implementing Your Own Botkube Plugin - Keptn Use Case + +URL Source: https://botkube.io/blog/implementing-your-own-botkube-plugin-a-real-life-use-case + +Published Time: May 24, 2023 + +Markdown Content: +![Image 1: a man with long hair wearing a red bandana](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3f055589d08e3e7a3c4_w4WfaGM6LbgXbKSciuiiWfHDQQIN8gQVL0IxF369W1k.jpeg) + +Huseyin Babal + +Cloud Engineer + +Botkube + +Botkube has plugin system that allows you to extend the functionalities of Botkube core to satisfy your requirements. Here is a real-life example using Keptn. + +### Table of Contents + +* [Background](#background) +* [Keptn Installation](#keptn-installation) +* [Accessing Keptn Gateway](#accessing-keptn-gateway) +* [Keptn CLI](#keptn-cli) +* [Create Keptn Project](#create-keptn-project) +* [Create Keptn Service with Resource](#create-keptn-service-with-resource) +* [Trigger Keptn Sequence](#trigger-keptn-sequence) +* [Accessing API](#accessing-api) +* [Plugin Development](#plugin-development) +* [Plugin Configuration Structure](#plugin-configuration-structure) +* [Simple Keptn Client Implementation](#simple-keptn-client-implementation) +* [Keptn Plugin Core](#keptn-plugin-core) +* [Building Plugin](#building-plugin) +* [Running Botkube](#running-botkube) +* [Get Started with Botkube Plugin Development](#get-started-with-botkube-plugin-development) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +[Botkube's plugin system](https://botkube.io/blog/beginners-guide-to-botkube-plugin-development-how-botkube-plug-ins-can-unify-your-cloud-native-tools) allows users to extend the functionalities of Botkube core to enhance the capabilities of cloud native tools already in their tool belt. Whether you're using some of our pre-built plugins like [Helm](https://botkube.io/integration/helm) or [Prometheus](https://botkube.io/integration/prometheus), or want to use tools like Flux, Thanos, or any others on the CNCF landscape, the plugin system will help you and your team with collaborative troubleshooting instantly through your favorite messaging platform. + +So let's dive in! + +In this article, we will implement a Botkube plugin to integrate it with [Keptn,](https://botkube.io/integration/keptn) a cloud-native application lifecycle management tool for kubernetes. Use this as a starting point for your own creation! + +Background +---------- + +Before starting Keptn plugin implementation, let's take a look what it is and what kind of use-case it solves for us. Assume that you have CD flow that ships your features to live environment whenever you merge that specific feature into main branch. You might want to do a couple of checks before deployment, and Keptn is good for that kind of verifications. You can do a load test with [k6](https://k6.io/), an open source load testing tool, by using in Keptn to do load test and verify results. However, to make it simpler to understand how Keptn works and how to integrate it with Botkube, we will be deploying a simple task with Keptn and consume Keptn events with Botkube to receive notifications in communication platform like Slack. + +Keptn Installation +------------------ + +You can easily deploy keptn via Helm Chart with the following command. + +To execute a task in Keptn environment, we can use a Keptn integration which is 'Job Executor Service'. This will help us to execute task based on our configuration. You can deploy executor service as shown below. + +
export JES_VERSION=0.3.0
export TASK_SUBSCRIPTION="sh.keptn.event.remote-task.triggered"
helm upgrade --install --create-namespace -n keptn-jes job-executor-service \
https://github.com/keptn-contrib/job-executor-service/releases/download/${JES_VERSION}/job-executor-service-${JES_VERSION}.tgz \
--set remoteControlPlane.autoDetect.enabled="true" \
--set subscription.pubsubTopic=${TASK_SUBSCRIPTION}
+ +‍ Keptn produces lots of events during the lifecycle management, but notice we are only interested in the event type `sh.keptn.event.remote-task.triggered`. Since, we deploy job executor service in same Kubernetes cluster, it will automatically find Keptn gateway with the flag `remoteControlPlane.autoDetect.enabled="true"` + +Accessing Keptn Gateway +----------------------- + +You can visit http://localhost:8080 to access Keptn Gateway by providing user and password which we extracted before. + +Keptn CLI +--------- + +While you can handle everything in Keptn Gateway Dashboard, it would be beneficial to use Keptn CLI to handle things faster. You can install Keptn CLI with following command. + +In order to access Keptn Gateway, you need to authenticate Keptn CLI with following command. + +‍ You can copy this command from Keptn Gateway Dashboard under User icon in top right corner. + +![Image 2: a blue and white icon with a person's face on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/646b71df0ddcf082e6d025ff_keptn-user-icon.png) + +![Image 3: a screenshot of the get started screen for a keneo ai](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/646b72186e9e4352b281394a_keptn-auth-command-copy.png) + +Now we are ready to create resources in Keptn. + +‍ + +Create Keptn Project +-------------------- + +In Keptn, everything starts with Project where you basically define your Keptn resources. Keptn projects works with Git Upstream that you can also create one as shown below. + +‍ `$GITHUB_USERNAME` and `$GITHUB_TOKEN` is used by Keptn to maintain its state in remote repository which is defined by empty `$GITHUB_REPO`. `--shipyard` parameter is used to defined project stages each deployment should go through until production stage. You can see an example shipyard file as follows. + +
apiVersion: "spec.keptn.sh/0.2.4"
kind: "Shipyard"
metadata:
name: "botkube"
spec:
stages:
- name: "production"
sequences:
- name: "botkube-seq"
tasks:
- name: "remote-task"
+ +‍ We have only one stage `production` and it contains a task which is named as `remote-task`. Now that we defined our project, let's continue with creating a service as follows. + +Create Keptn Service with Resource +---------------------------------- + +‍ Above command simply creates a `hello` service under `botkube` project. Next step is to add resources to this service, for example a job definition as you can also see below. + +‍ We added job config to `hello` service for `production` stage under `botkube` project. Also, you can see the content of `jobconfig.yaml` below. + +
apiVersion: v2
actions:
- name: "Hello, Botkuber!"
events:
- name: "sh.keptn.event.remote-task.triggered"
tasks:
- name: "Say Hello"
image: "alpine"
cmd:
- echo
args:
- "Hello World"
+ +‍ As you can also understand, it simply provisions a task by using `alpine` image to print `Hello World`. Once the task is started, it will produce an event `sh.keptn.event.remote-task.triggered`. This event is the one our job executor service interested in. + +Trigger Keptn Sequence +---------------------- + +We have all the resources ready and now we can trigger a sequence to deploy remote task to see the response with following command. + +‍ You will see the result of the command, but to see everything in detail, you can navigate to Keptn Gateway and see Sequences as follows. + +![Image 4: a screen shot of a screen with a blue and green screen](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/646b723533b33f4cb5e03c8a_keptn-sequence.png) + +Now that we understand how to trigger a sequence in Keptn, let's take a look how to access its API to consume events to integrate with Botkube. + +Accessing API +------------- + +You can navigate to http://localhost:8080/api to see Swagger Documentation of Keptn APIs. It contains multiple modules, and to receive events, we can select `mongodb-datastore` from the dropdown. + +![Image 5: a screenshot of the mogoogle analytics dashboard](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/646b724ccd77eb686625a42e_swagger-docs.png) + +Notice we already authorized Keptn CLI in previous sections, and we can reuse the token inside `keptn auth ...` command to use in Swagger Authorize to call endpoints in Swagger UI or construct following curl command. + +‍ Now we have all of the requirements ready to be used in Botkube plugin development, let's continue with our fresh new plugin, Botkube Keptn Plugin! + +Plugin Development +------------------ + +Before implementing Keptn plugin business logic, I would like provide 2 source for plugin development: + +* [Botkube Plugin Development Quick Start](https://docs.botkube.io/plugin/quick-start) +* [Implementing Custom Botkube Source Plugin](https://docs.botkube.io/plugin/custom-source) + +‍ Now we are ready to implement actual business logic of the Keptn plugin to receive events. You will see partial examples of the codebase in this article, but don't worry, you can see the full codebase here. + +Plugin Configuration Structure +------------------------------ + +In order to integrate Botkube with Keptn, Botkube should now be the entrypoint of Keptn to consume events. Also, it needs a token for successful authentication with Keptn. Additionally, we can add filtering parameters like project and service to consume events for certain project and service. With those information, following Go struct can be used for plugin configuration. + +
// config.go
package keptn
...
// Config prometheus configuration
type Config struct {
URL string `yaml:"url,omitempty"`
Token string `yaml:"token,omitempty"`
Project string `yaml:"project,omitempty"`
Service string `yaml:"service,omitempty"`
Log config.Logger `yaml:"log,omitempty"`
}
...
+ +‍ To have a smooth plugin integration, we can have configuration defaults, and once end user provides their own configuration, we should merge those configs as follows. + +
// config.go
package keptn
import "github.com/kubeshop/botkube/pkg/pluginx"
...
// MergeConfigs merges all input configuration.
func MergeConfigs(configs []*source.Config) (Config, error) {
defaults := Config{}
var out Config
// You can see useful utility packages like `pluginx` in Botkube core.
if err := pluginx.MergeSourceConfigsWithDefaults(defaults, configs, &out); err != nil {
return Config{}, fmt.Errorf("while merging configuration: %w", err)
}
return out, nil
}
...
‍ Simple Keptn Client Implementation ---------------------------------- We will implement an SDK to connect Keptn API to consume events. This will be a facade to reduce complexity and coupling. Keptn already has a [Go SDK](https://botkube.io/blog/github.com/keptn/go-utils/pkg/api/utils/v2), and in our client we will initialize an instance of that client and call events endpoint as shown below. + +
// client.go
package keptn
import (
api "github.com/keptn/go-utils/pkg/api/utils/v2"
"time"
)
// Client Keptn client
type Client struct {
// API refers to Keptn client. https://github.com/keptn/go-utils
API *api.APISet
}
type GetEventsRequest struct {
Project string
FromTime time.Time
}
type Event struct {
ID string
Source string
Type string
Data Data
}
type Data struct {
Message string
Project string
Service string
Status string
Stage string
Result string
}
...
// NewClient initializes Keptn client
func NewClient(url, token string) (*Client, error) {
client, err := api.New(url, api.WithAuthToken(token))
if err != nil {
return nil, err
}
return &Client{
API: client,
}, nil
}
// Events returns only new events.
func (c *Client) Events(ctx context.Context, request *GetEventsRequest) ([]Event, error) {
fromTime := request.FromTime.UTC().Format(time.RFC3339)
var events []Event
res, err := c.API.Events().GetEvents(ctx, &api.EventFilter{
Project: request.Project,
FromTime: fromTime,
}, api.EventsGetEventsOptions{})
if err != nil {
return nil, err.ToError()
}
for _, ev := range res {
data := Data{}
err := ev.DataAs(&data)
if err != nil {
return nil, err
}
events = append(events, Event{
ID: ev.ID,
Source: *ev.Source,
Type: *ev.Type,
Data: data,
})
}
return events, nil
}
‍ To summaries above example, `Events` method accepts context and filter request to get events based on the filtering parameters. That method can return slice of Events or an error. Now that we have a client, let's implement the core of our plugin to call this Keptn client implementation. Keptn Plugin Core ----------------- In order to write a source plugin, we need to implement following contracts ‍ `Stream` is a gRPC endpoint that is consumed by a gRPC client in Botkube core. So, Botkube will stream events from this endpoint. `Metadata` is used for providing information about Keptn plugin. This will be also used by CI system to generate plugin metadata. Metadata can contain plugin configuration details. In `Stream` method, we need to consume Keptn events as follows.
// source.go
package keptn
const pollPeriodInSeconds = 5
...
func (p *Source) consumeEvents(ctx context.Context, cfg Config, ch chan<- source.Event) {
keptn, err := NewClient(cfg.URL, cfg.Token)
log := loggerx.New(cfg.Log)
exitOnError(err, log)
for {
req := GetEventsRequest{
Project: cfg.Project,
FromTime: time.Now().Add(-time.Second * pollPeriodInSeconds),
}
res, err := keptn.Events(ctx, &req)
if err != nil {
log.Errorf("failed to get events. %v", err)
}
for _, event := range res {
textFields := []api.TextField{
{Key: "Source", Value: PluginName},
{Key: "Type", Value: event.Type},
}
if event.Data.Status != "" {
textFields = append(textFields, api.TextField{Key: "State", Value: event.Data.Status})
}
var bulletLists []api.BulletList
if event.Data.Message != "" {
bulletLists = []api.BulletList{
{
Title: "Description",
Items: []string{
event.Data.Message,
},
},
}
}
msg := api.Message{
Type: api.NonInteractiveSingleSection,
Timestamp: time.Now(),
Sections: []api.Section{
{
TextFields: textFields,
BulletLists: bulletLists,
},
},
}
ch <- source.Event{
Message: msg,
RawObject: event,
}
}
// Fetch events periodically with given frequency
time.Sleep(time.Second * pollPeriodInSeconds)
}
}
...
‍ Above implementation will poll Keptn endpoint each for 5 seconds and will return a Message to Botkube so that it will dispatch this message to configured platform. Notice, we use `FromTime` parameter to fetch only last 5 seconds windowed events. As you also noticed, we use a special struct `api.Message` for structured message that you can see advanced details about that [here](https://docs.botkube.io/plugin/interactive-messages). + +Building Plugin +--------------- + +In order to build plugin, you can use following command. + +‍ This will build the plugin, and generate a metadata file for plugin index. `PLUGIN_DOWNLOAD_URL_BASE_PATH` environment variable is used for defining the base path of plugin download url. Now we have plugin binaries locally, then we can serve them with following command. + +‍ Once you navigate to http://localhost:8080/dist, you can see the keptn plugin binary. This means, Botkube core can consume this endpoint to donwload and register as Botkube plugin. + +Running Botkube +--------------- + +In order to use the Keptn plugin, we can use following repository config in Botkube configuration file. + +
// config.yaml
...
plugins:
repositories:
botkube:
url: http://localhost:8080/plugins-dev-index.yaml
...
+ +‍ The above config is just for making Keptn plugin visible to Botkube core, now we can add a Keptn source plugin configuration as follows. + +
'keptn':
## Keptn source configuration
## Plugin name syntax: /[@]. If version is not provided, the latest version from repository is used.
botkube/keptn:
# -- If true, enables `keptn` source.
enabled: true
config:
project: "botkube"
url: "http://localhost:8080/api"
token: "keptn_token"
log:
level: info
‍ All the Keptn configurations are defined under `config` section. Once Botkube application starts, it would stream Keptn plugin and that plugin consume the endpoint `http://localhost:8080/api` with query parameters `project=botkube` and with auth headers `X-Token=`. However, we need to add this Keptn source to `communications` configuration of Botkube as follows.
...
slack:
enabled: true
token: "xoxb-..."
channels:
'default':
name: botkube-demo
bindings:
sources:
- keptn
...
‍ Whenever an event is fired in Keptn, this event will be stored in mongodb-datasource and this will be consumed by Keptn plugin. Finally, with above configuration, it will be sent to platforms which are defined in `communications` section. ![Image 6: a screen shot of a screen showing a list of information](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/646b726bb3ed5ff180fca044_keptn-slack-message.png) + +Get Started with Botkube Plugin Development +------------------------------------------- + +We hope that this helps you get started with developing your own Botkube plugin! If you need some help or have any questions, we're always available on the [Botkube Community Slack](http://join.botkube.io/). Check out the [Botkube Plugin Development Quick Start](https://docs.botkube.io/plugin/quick-start) and [Implementing Custom Botkube Source Plugin](https://docs.botkube.io/plugin/custom-source) guides to help you along the way. diff --git a/hack/assistant-setup/content/botkube.io__blog__integrating-microsoft-teams-with-azure-for-kubernetes-deployments.md b/hack/assistant-setup/content/botkube.io__blog__integrating-microsoft-teams-with-azure-for-kubernetes-deployments.md new file mode 100644 index 0000000..8f155fe --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__integrating-microsoft-teams-with-azure-for-kubernetes-deployments.md @@ -0,0 +1,171 @@ +Title: Integrating Microsoft Teams with Azure for K8s Deployments + +URL Source: https://botkube.io/blog/integrating-microsoft-teams-with-azure-for-kubernetes-deployments + +Published Time: Oct 30, 2023 + +Markdown Content: +![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) + +Maria Ashby + +Developer Advocate + +Botkube + +Botkube is entering the MS teams world + +### Table of Contents + +* [Benefits of Using Botkube and MS Teams](#benefits-of-using-botkube-and-ms-teams) +* [Tutorial Guide](#tutorial-guide-) +* [Prerequisites](#prerequisites) +* [Creating Botkube Cloud Account](#creating-botkube-cloud-account) +* [Dashboard setup](#dashboard-setup) +* [Conclusion](#conclusion) +* [Get Started with Botkube](#get-started-with-botkube) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +#### Start Receiving Kubernetes Notifications Now with Botkube Cloud + +As Microsoft Teams continues its steady rise as the go to platform for enterprise-level workplace collaboration, it is parallel to the rapid adoption of Azure and Azure Kubernetes Service (AKS). These collective forces drive organizations toward innovation, scalability, and streamlined cloud-native application deployment. However, this highlights a major challenge: as teams begin to incorporate Kubernetes and all of its complexities into their workflows, the need for a collaborative troubleshooting tool becomes essential. + +Enter Botkube - a Kubernetes troubleshooting and monitoring tool designed to empower DevOps teams to work more efficiently. Botkube has now expanded its capabilities to seamlessly integrate with Microsoft Teams, fostering collaborative troubleshooting tailored to your organization's Teams workspace. + +**_Botkube has a new version of MS Teams. It is easy to install and get up in running in five minutes or less. Click_** [**_here_**](http://botkube.io/blog/revolutionize-your-kubernetes-troubleshooting-workflow-with-microsoft-teams-and-botkube) **_to find out more!_** + +Benefits of Using Botkube and MS Teams +-------------------------------------- + +Botkube’s integration offers useful features for Microsoft users working with Azure Kubernetes Service (AKS). It simplifies interactions with Kubernetes and the broader cloud-native ecosystem. With the Botkube plugin system, users can easily integrate tools like [Prometheus for monitoring](https://botkube.io/learn/how-botkube-makes-monitoring-kubernetes-easy) and [Helm for application package management](https://botkube.io/learn/helm-charts) within the Microsoft ecosystem. With Botkube, you can manage your deployments with Helm and customize your alerting set with Prometheus directly in Teams! This integration facilitates smoother deployment processes and more consistent monitoring. + +Botkube empowers developers with self-service access while ensuring a controlled and secure environment. It offers a controlled environment for developers to access their Kubernetes resources. It enables the whitelist of potent commands like 'create' and 'delete,' allowing developers to experiment with Kubernetes tools without granting them full control over the clusters. This is particularly useful for enterprise teams because it allows for a balance between developer autonomy and maintaining security standards. In essence, Botkube enhances the AKS experience by streamlining tool integration and offering controlled access for developers. + +Tutorial Guide +-------------- + +In this tutorial, we will guide you through the step-by-step process of configuring and leveraging [Botkube for Microsoft Teams and AKS](https://docs.botkube.io/installation/teams/). This enhancement empowers your team to efficiently establish a connection between Kubernetes and Microsoft Teams, facilitating the streamlined management of multiple Kubernetes clusters and significantly improving incident resolution times. + +Prerequisites +------------- + +* [Botkube Cloud](http://app.botkube.io/) account +* Access to a Kubernetes cluster +* MS Teams account + +#### One-Time Setup and Ongoing Flexibility + +_\*\* Steps 1-4 and 7-10 are one-time operations requiring administrative privileges. Once set up, Botkube can be configured across various channels and clusters without needing further admin access in Teams. This means after the initial setup, users can easily manage alerts and configurations through the Botkube Web App.\*\*_ + +Creating Botkube Cloud Account +------------------------------ + +1. On the [Botkube homepage](https://botkube.io/), locate the “Get Started” button and click on it. This will take you to the account registration page. +2. Fill in the required information in the registration form. You can sign up with your email address or Github account. + +Dashboard setup +--------------- + +1. Select create a new instance + +![Image 2: a screen shot of a landing page for a website](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7dd390269cbe2d3ba4_jCUYYPLNDFZDkosCGhXjsC4Cvk9OsKaPJowAXS_Yi3-gdAekdM-YYj_QvgqvMCkAOIDbqXTaJGZuJFAjb5pIwZWo0kFlQwPBcwAzKW6X7ax6gK3rQVjbGKOJg_9Ps9i28sE-f7xg0hdp8hoY5mPwnNI.png) + +![Image 3: a screen shot of the intel dgb jdk page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7e072ab825022ca51e_w3OobTivy6lb1zbPozEcTOySEmAZPSRU0WVO120nal_egmZ-HVayv2FIuTzLsJ6vBJuZBfrFLiMkzjzpOS2kJash0C8_p3scSVIAFUY5Rb_1YqE2xACl2811ugQ1E-VazSxtzki-AirkeARSEZ5sKq0.png) + +2. Next, use homebrew or curl to install Botkube CLI on your terminal (Step 1) +3. Copy and paste the `Botkube install`… command (Step 2) +4. Wait for the cluster to connect and click, **Next** + +‍ + +![Image 4: a screen shot of a web page showing a house and arrows](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7e1938916887fbf34f_WVBv6m9k1C5RWt4FI7QuA8VU-lSDXKQZOJWyqvfe7YZVDnNxquO3DBkznU2LP9TulrVxeDPloV4O7w40n6OVt3NjPPkMynGNKA_6wbc1knG-znVU3N5E8J6H1fqmpWafhnh4eOgb37W1Di2MgHUrrtU.png) + +5. Name your instance and select the **Teams** option + +![Image 5: a screenshot of the adobe adobe adobe adobe adobe](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7e6a852b2620a9b5fb_7fpjvjcPJcqBZKRJ2oNOisODdOt9vN9J-sYcsuFLYMzlKF8CzLOXI3vM83HZ0YvdShckXSZcDBTclvCv9IRPGrNqeIIMBA6KdnKhilwSek9nqKBLZOrwUUFMZYe5zIBJmv2nh3jwJuJK2kjgO5Lh1ZM.png) + +6. Select the Download button to download the Botkube App. It will show up as **Botkube.zip** + +‍ + +![Image 6: a screenshot of a google chrome browser showing a file on the screen](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7db9251f0d1db86ab7_w9yhNzeHzqqc4JawGTersD2qogEalGSUFs9xlGLhX_8OoCXcxSEEaJNnXaAdB3KyA25t6XnaNAzAM_P1cBjLNN68lZZGZ6GjAwWL8iAlXn4hyrwJ5FM3p8MLBCyUtwoSvw1ZRWBs7ds6jYHeYaJJJAU.png) + +### Installing Botkube to Microsoft Teams + +‍ + +1. Navigate to the Microsoft Teams application and select **Manage your Apps** at the button of the screen + +![Image 7: a screen shot of the microsoft office app](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d14da41d53c779535_oErOXojrwoCSfbs3A0830mnbkI1xb2rOD83YopN5B6k7Ti_O5OZdusUD4VrNjdFs_xHSaTxCjdipKQJuaLhpksHgW3Fwd8xx8MSFSq1HiuWVzsoTG90t1Dy4nlcAAkIuNdAsumH4sjQWXljJJ9y_Lbo.png) + +2. Next select **Upload an app** and select **Upload an app to your org’s app catalog** + +![Image 8: a screen shot of the azure portal](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/656eef4cf0cfa6050f79acc5_Screen%20Shot%202023-12-05%20at%201.36.02%20AM.png) + +3. Select the **Botkube.zip** file from the previous section +4. Navigate to the **Apps** section on the left hand side and select the **Built for your Org section.** The Botkube application will be there. + +‍ + +5. Select the **Add** button + +![Image 9: a screen shot of the google drive app](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d640c39e96661f69e_zpXrkocqwakQB8jrA8pwYH2CSrmRim4pp13-Pt8lZRgdgw33jCDfqnrxpYK3jt2fhSctK5cIyMt9taA-VAAUSD3tiicgAdTafZ7gAqBs08Bkljt7BJlUsxUh3OUdg1fhjCiCO5lTztUHXd8CrccWxXs.png) + +![Image 10: a screen shot of a google search page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d053e39713de9aa28_FNgbV-UuRUprEaIcHxqlypAX2PnrAGJjbfHZu8I2uJ4zRqP3ZXt3L4ez8rPqWhZZv_-ruLTTXoWLZFO5Nv4vKTfoJ8hjqFjrHX-M_RwhlaAPrF5IDEcZjDg523tVuwYOMranVLyV3IOVrbDzRI4OY5M.png) + +6. And then select the **Add to team** button + +![Image 11: a screen shot of the microsoft store page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7e778b3a2f89c145c5_2I5Ickc_OXlcgym-Ju-rDd9gVc0kVk-QW0_js_3gURGp0dgqj5jS0lOzoIox8vr07ky4hiHkn3LHiTIJ0JKU4jK6Q9rIsan8_lavBnIF7WETp-F_LEM0bTZW4keiuLe3cM3VA_9leLry29hAZ1_vXfU.png) + +7. Select your preferred team or channel you would like to add Botkube to + +![Image 12: a screen shot of a google adwords account](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7db157112561870666_ZfA2XrAwSEqm7yLkbUMoOEL_3sIULsNu2rHAaerMIvhOyKO79bjSFvausKcnNF_rxPc8rq0rFAl2VGRNct3Gb0aJimPt3pYbJInhW0-Z6ffQWq3_gPAbiJbHQHMhefcBbAbROu95icJakohqR-patiY.png) + +8. Next, Navigate to the chat window and a welcome message should appear +9. Select the **Grant Access** button + +![Image 13: a screen showing a microsoft account sign in screen](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d3cb1d0c7707a8a18_OHBLhhF5yDy9WTlI0AGKR5CnwnFjre9_Vz2BKdaUsnpAnxwk4hdqExTzBxp3yX0MH9wKGbktN0E6RG9YPeLlMShX0ybFtJ2eNbkt2WmHrLzTkBm7bZPnYcDLmy9YbQEcsbhNh5ZWj1HhibNRxe223IQ.png) + +10. A new window will pop up asking you to grant access. Click **Accept** + +‍ + +11. Navigate to the chat window and select **Connect to Botkube Cloud** + +![Image 14: a screen shot of a google adwords account](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7db157112561870666_ZfA2XrAwSEqm7yLkbUMoOEL_3sIULsNu2rHAaerMIvhOyKO79bjSFvausKcnNF_rxPc8rq0rFAl2VGRNct3Gb0aJimPt3pYbJInhW0-Z6ffQWq3_gPAbiJbHQHMhefcBbAbROu95icJakohqR-patiY.png) + +12. This will take you to the Botkube Cloud dashboard. Your Teams channel will appear. Select the **Connect** Button. + +![Image 15: a screen shot of a website with the words contact web project team](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/656eefd26cc09bfeec2845b3_Screen%20Shot%202023-12-05%20at%201.38.28%20AM.png) + +![Image 16: a screen shot of a sign up page with a green check mark](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d165a59345b2b698b__rEh9UH04sSf8XxhQi_3JhGSjynIaVLwD--bRFqQa3v2Rqrahxpnna3yryM1a4omthQ-Fize-gyhNgRAXDTl-DYQXkJ1LUhp1OvRWNwn62jwfra7qa806TPcVm13W3pbeA52XN47_MlPkUVEvvyb6KA.png) + +13. All of your Teams information will appear in the dashboard. Select the channels you want to use with Botkube. + +![Image 17: a screen shot of a form in the adobe adobe adobe adobe](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7ead44d850b34e7f35_nSgmglbxW-mAFvthFI-1q0c0dcMg2m2wejlA2__CmM-vyDDeyLjUh84vTLufTx77jaJ-ifWWa1bzkFpn7bPK0KbehAARBOg2Zle9HbNUk3SXAP9-jcNbNXFypsfgSPY75R2BLLwmDi9nUFUY88StBNg.png) + +14. Connect your preferred plugins + +![Image 18: a screen shot of the google analytics dashboard](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7ddec01b0e38f3eb6d_pVkuqIiFGr5zQ8lNXQcSMQXQhDbPx5rZ6m0OptpyWKHIfpzzTwn1UbTR44-HU_YM2NOBfoOhvapjYfohK0AUjF5dsvV_8JGnujLfhEzupnaCMLJoD4pzbAE6aHZemjv1Rzzi3rsu8HoFbqrSxbu1TVI.png) + +15. Review and select your preferred Botkube defaults. + +![Image 19: a screenshot of the review blob details page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d6f8e75cab928022a_PVwnI51Br_JjDcyKQsNjixKmrtTDW10Ug0gHIUJMFxDo51P-_aRrStZiIrK-Pmqxg3DnFwrtTRZqhHUGhZv2d37pHnWMmUvx9p5o4FnQe8M-YkkM8wVZk7_P3-tUs0umUmnfE37H4QbtR8E-yg36w2A.png) + +16. Select **Apply changes** +17. Congratulations! You have successfully deployed Botkube for Microsoft Teams! + +Conclusion +---------- + +The new Botkube Microsoft Teams integration offers an all-in-one solution for MS Teams users. This integration enhances the Azure Kubernetes experience by simplifying interactions with Kubernetes and the broader cloud-native ecosystem. Botkube’s features like real-time notifications support across multiple channels streamline deployment management and open up a range of potential use cases for incident response management and troubleshooting. This integration empowers developers with self-service access while ensuring control and security, making it a valuable tool for enterprise teams seeking a balance between autonomy and compliance with security standards. + +Check out [Botkube Microsoft Teams integration here.](https://botkube.io/integration/teams) + +Get Started with Botkube +------------------------ + +Whether you're a seasoned Kubernetes pro or just getting started, Botkube can help supercharge your troubleshooting process. [Sign up now](https://app.botkube.io/) for free and join the community of users who are already benefiting from the power of Botkube. + +We want to know what you think of Botkube and how we can make it even better. [Email our Developer Advocate, Maria](mailto:maria@kubeshop.io) or schedule [a quick 15 meeting](https://calendly.com/maria-botkube/15min) at your preferred time. As a thank you, we’ll send you some great Botkube swag! diff --git a/hack/assistant-setup/content/botkube.io__blog__introducing-botkube-v1-0-the-future-of-kubernetes-troubleshooting.md b/hack/assistant-setup/content/botkube.io__blog__introducing-botkube-v1-0-the-future-of-kubernetes-troubleshooting.md new file mode 100644 index 0000000..fbab431 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__introducing-botkube-v1-0-the-future-of-kubernetes-troubleshooting.md @@ -0,0 +1,92 @@ +Title: Botkube v1.0 - the Future of Kubernetes Troubleshooting + +URL Source: https://botkube.io/blog/introducing-botkube-v1-0-the-future-of-kubernetes-troubleshooting + +Published Time: May 04, 2023 + +Markdown Content: +![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) + +Maria Ashby + +Developer Advocate + +Botkube + +Something new is coming to the Botkube universe... + +### Table of Contents + +* [What is Botkube?](#what-is-botkube-) +* [RBAC support](#rbac-support-) +* [Interactive Control Plane](#interactive-control-plane-) +* [Additional Features](#additional-features) +* [Sign up now!](#sign-up-now-) +* [Feedback](#feedback) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +We are thrilled to announce the launch of [Botkube v1.0](https://app.botkube.io/) This new version of Botkube introduces a hosted control plane for multi-cluster management and monitoring of all of your Botkube instances.Troubleshooting in the K8s world can be like trying to navigate through a mosh pit - chaotic and unpredictable. With alerts flying in from all directions and collaboration being a somewhat ad hoc process, it's easy to feel like you're drowning in a sea of chaos. Even if developers have access to the K8s cluster, it's often not a smooth process - secret keys can be tough to revoke and retrieving logs is done manually. And let's not forget about security - accessing the cluster to perform operations must be limited to approved networks and devices. Sometimes, remote troubleshooting just isn't an option. It's time for a better way to troubleshoot K8s.That’s where Botkube comes in. + +What is Botkube? +---------------- + +Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. This means you'll gain instant visibility and control over your cluster resources, all without ever having to leave your messaging platform. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more.. In this blog post, we'll give you an introduction to Botkube and highlight some of its key features and benefits. + +Key Features of Botkube v1.0 +---------------------------- + +RBAC support +------------ + +![Image 2: a diagram of a business process](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6437222690593713ca726589_botkube-read-only-717ed01cf9fa5e6621f2a09c7b29a32d.svg) + +Botkube RBAC Architecture + +Botkube features role-based access control ([RBAC](https://docs.botkube.io/configuration/rbac/)), enabling plugins or communication channels to map to Kubernetes users or groups. This means that when a plugin or channel is mapped, it takes on the permissions of the user or group, thereby limiting the actions that the plugin or channel can perform in the cluster. With this feature, Botkube's security and access controls are flexible and precise, providing enhanced security and control to developers and DevOps engineers alike. + +‍ + +Interactive Control Plane +------------------------- + +‍ + +Botkube brings an exciting new feature to the table - a [web-based control plane](https://app.botkube.io/) that works across multiple clusters. With this powerful tool, you can create new Botkube instances in a flash, making installation into a K8s cluster a breeze. The control plane also enables you to modify the configuration of communication platforms and plugins, and even synchronize the configuration to Botkube instances automatically. + +![Image 3: a screen shot of a web page showing a list of items](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/643728ace69f4305d971ce6f_Screen%20Shot%202023-04-12%20at%202.54.18%20PM.png) + +Botkube Control Plane + +The control plane also collects and displays event logs and audit logs in a single, easy-to-read list. This feature is incredibly useful for monitoring event notifications sent from all sources, as well as commands run by all executors. With this aggregated list, you can quickly identify and resolve any issues that arise in your K8s clusters. + +Additional Features +------------------- + +Botkube has made some exciting additions to its core features: + +‍ + +* The Kubernetes source and kubectl executors have been extracted as plugins to take advantage of all the plugin functionalities. +* Executors and sources now support more advanced message formatting and interactivity to enhance user experience. +* Prometheus messages are now more readable with new message formatting. +* Negative regex patterns for event and resource constraints are now supported. +* Plugin development guides have been updated to cover the new interactive features. + +‍ + +These improvements provide greater flexibility and functionality for Botkube users, making it easier to troubleshoot Kubernetes clusters and streamline communication between teams. + +Sign up now! +------------ + +[Get started with Botkube](https://app.botkube.io/)! Whether you're a seasoned Kubernetes pro or just getting started, Botkube has something to offer. Sign up now for free and join the community of users who are already benefiting from the power of Botkube. Don't miss out on this opportunity to streamline your K8s workflow and take your skills to the next level - try Botkube today! + +‍ + +Feedback +-------- + +We welcome developers and Kubernetes enthusiasts to explore the platform and share their valuable feedback. We want to know what you think of Botkube and how we can make it even better. We're doing quick 15-minute interviews to get your feedback, and as a thank you, we'll give you some cool Botkube plushies and t-shirts and enter you into a raffle for a chance to win a $50 Amazon gift card! Don't miss this opportunity to have your say - just email [maria@kubeshop.io](mailto:maria@kubeshop.io) or use this [calendly link](https://calendly.com/maria-botkube/15min) to sign up. + +You can also talk to us in the Botkube [**GitHub issues**](https://github.com/kubeshop/botkube/issues), Botkube [**Slack community**](http://join.botkube.io/), or email our Product Leader at [**blair@kubeshop.io**](mailto:blair@kubeshop.io). diff --git a/hack/assistant-setup/content/botkube.io__blog__introducing-botkubes-integration-with-flux.md b/hack/assistant-setup/content/botkube.io__blog__introducing-botkubes-integration-with-flux.md new file mode 100644 index 0000000..f11fd1e --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__introducing-botkubes-integration-with-flux.md @@ -0,0 +1,99 @@ +Title: Introducing Botkube's Integration with Flux + +URL Source: https://botkube.io/blog/introducing-botkubes-integration-with-flux + +Published Time: Aug 28, 2023 + +Markdown Content: +![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) + +Maria Ashby + +Developer Advocate + +Botkube + +As the demand for seamless scalability and efficient teamwork increases, an innovative solution is needed. Enter the Botkube Flux integration to tackle collaboration, automation, and scaling head-on. + +### Table of Contents + +* [Introduction](#introduction) +* [What is Flux?](#what-is-flux-) +* [What is Botkube?](#what-is-botkube-) +* [Why is it important?](#why-is-it-important-) +* [Optimized Flux Workflow](#optimized-flux-workflow) +* [Get Started with Botkube’s new Flux Plugin](#get-started-with-botkube-s-new-flux-plugin) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +#### Get started with Botkube Cloud + +Introduction +------------ + +Struggling to manage scaling operations and collaborative efforts with GitOps tools like Flux? When it comes to checking what changes have happened in your repositories and configurations, things can get complex. And as your organization grows, it becomes trickier to keep track of pull requests and issues in a straightforward way. As the demand for seamless scalability and efficient teamwork increases, an innovative solution is needed. Enter the [Botkube Flux integration](https://botkube.io/integration/botkube-flux-kubernetes-integration)—a game-changer in tackling your collaboration, automation, and scaling challenges head-on. It enables real-time collaboration by delivering immediate alerts about pod crashes, resource issues, or deployment failures to chat platforms, facilitating rapid decision-making. With Botkube, monitoring and actions take place in the chat platform, creating a centralized knowledge hub that streamlines information sharing and actions, while its automation capabilities reduce repetitive tasks and increase productivity for tasks like scaling deployments or examining logs.With Botkube, say goodbye to tedious manual processes and say hello to a new world of event-driven possibilities, empowering you with unparalleled cluster interactivity options. + +What is Flux? +------------- + +[Flux CD](https://fluxcd.io/) is an open-source continuous delivery and GitOps solution tailored to simplify and automate the deployment and lifecycle management of applications and infrastructure on Kubernetes. Designed for developers and operations professionals, Flux CD empowers teams to declaratively define the desired state of their applications and configurations using code stored in a Git repository. + +Flux continuously monitors your repository for any changes and seamlessly applies updates to your Kubernetes cluster. This ensures that your actual state matches the desired state. + +What is Botkube? +---------------- + +![Image 2: Showing how to run Kubernetes commands from Slack with Botkube](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64b96a341b5ccb59ffb87637_act-on-events.gif) + +Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred collaboration platforms like [Slack, Microsoft Teams, Discord, and Mattermost.](https://botkube.io/integrations) This means you'll gain instant visibility and control over your cluster resources, all without ever having to leave your messaging platform. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. Botkube now works with Flux! + +Why is it important? +-------------------- + +Before we dive into the realm of Botkube, let's address the pain points that many of us have encountered with traditional manual GitOps workflows. Consider the series of steps you'd need to navigate without Botkube's assistance + +### List of Common GitOps Issues + +#### Installing Flux CLI + +The first hurdle is configuring the Flux CLI on your local system, a process that often involves multiple configurations and settings. + +#### Cluster Connection + +Connecting to your Kubernetes cluster manually, and potentially switching contexts between different environments like development, staging, and production, can be time-consuming and error-prone. + +#### Repository Cloning/PR Checkout + +Locally cloning the repository housing the pull request for testing changes is yet another step in the manual approach. + +#### Sharing Insights + +Sharing updates and information requires toggling between platforms like Slack and GitHub to post diff reports, which can lead to fragmented communication. + +Optimized Flux Workflow +----------------------- + +![Image 3: Optimizing Flux CD workflow for Kubernetes](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64e694bca6bd600e8a7e88dd_flux-diff-1.gif) + +With Botkube's new Flux executor, you can simplify complex tasks using a single command + +@BotKube flux diff kustomization podinfo --path ./kustomize --github-ref [PR Number| URL | Branch] This command works right in your preferred chat platform like Slack or Teams, making everything easy. Get ready to experience a world where innovation and user-friendly simplicity come together! ### Auto-discovery of GitHub Repository Seamlessly identifies the associated GitHub repository linked to the provided kustomization. ### Effortless Repository Cloning The git repository is cloned without manual intervention. ### Precision with Pull Requests The specified pull request is accurately reviewed by our [AI assistant](https://botkube.io/integration/chatgpt-botkube-kubernetes-integration) for processing. + +### Seamless State Comparison + +A comprehensive comparison between the pull request changes and the current cluster state is performed. + +### Accessible Diff Reports + +The outcome of the comparison is shared conveniently via the designated Slack channel. + +Get Started with Botkube’s new Flux Plugin +------------------------------------------ + +![Image 4: Live Kubernetes Cluster connected to slack with Flux CD workflows](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64ecb79001bc7e01e2c88804_flux-interactivity.gif) + +Ready to try it out on your own? The easiest way to configure it is through the [Botkube web app](https://app.botkube.io/) if your cluster is connected. Otherwise you can enable it in your [Botkube YAML configuration](https://docs.botkube.io/configuration/executor/flux). + +Once enabled, you can ask questions about specific resources or ask free-form questions, directly from any enabled channel. Find out how to use [the Flux plugin](https://docs.botkube.io/usage/executor/flux) in the documentation. + +We’d love to hear how you are using GitOps! Share your experiences with us in the Botkube [Slack community](https://join.botkube.io/) or [email our Developer Advocate, Maria](mailto:maria@kubeshop.io) and we’ll send you some fun swag. diff --git a/hack/assistant-setup/content/botkube.io__blog__is-chatops-a-kubernetes-dashboard-alternative.md b/hack/assistant-setup/content/botkube.io__blog__is-chatops-a-kubernetes-dashboard-alternative.md new file mode 100644 index 0000000..5222c24 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__is-chatops-a-kubernetes-dashboard-alternative.md @@ -0,0 +1,97 @@ +Title: Is ChatOps a Kubernetes Dashboard Alternative? + +URL Source: https://botkube.io/blog/is-chatops-a-kubernetes-dashboard-alternative + +Published Time: Jul 10, 2023 + +Markdown Content: +![Image 1: a man in a blue shirt with his arms crossed](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a86fdda4d8d06ce598598e_evan%20image.jpg) + +Evan Witmer + +Growth Lead + +Botkube + +Can ChatOps replace the age old monitoring dashboards that DevOps teams still build? At least in the K8s space, it is worth a look at the comparison. + +### Table of Contents + +* [Comparing Kubernetes Dashboards to Chatbots for Kubernetes](#comparing-kubernetes-dashboards-to-chatbots-for-kubernetes) +* [Use Cases for Chat Operations in Kubernetes](#use-cases-for-chat-operations-in-kubernetes) +* [Conclusions](#conclusions) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +Kubernetes is a powerful container orchestration platform that can be used to deploy, manage, and scale containerized applications. However, Kubernetes can be complex to manage, especially for large deployments. This is where ChatOps can come in. + +[ChatOps](https://botkube.io/learn/chatops) is a way of using chat applications to interact with IT infrastructure. With ChatOps, you can use chat commands to deploy applications, manage resources, and troubleshoot problems. This can make it much easier to manage Kubernetes deployments, especially for teams that are already using chat applications for communication. + +So, can ChatOps be a substitute for Kubernetes dashboards? In some cases, yes. ChatOps can provide a more streamlined and efficient way to manage Kubernetes deployments. However, there are still some benefits to using Kubernetes dashboards. For example, dashboards can provide a more visual representation of your Kubernetes infrastructure. + +In this blog post, we will discuss the pros and cons of ChatOps and Kubernetes dashboards. We will also explore some specific use cases for ChatOps with Kubernetes. By the end of this post, you will have a better understanding of whether ChatOps is a good fit for your Kubernetes deployments. + +Comparing Kubernetes Dashboards to Chatbots for Kubernetes +---------------------------------------------------------- + +### Kubernetes Dashboards + +Pros: + +* Easy to install and use +* Provides a visual overview of your Kubernetes cluster +* Can be used to troubleshoot problems +* Supports a variety of metrics and logs + +Cons: + +* Can be difficult to customize +* Lacks some advanced features +* Not as scalable as some other monitoring solutions + +Overall, Kubernetes Dashboards are a good option for basic monitoring of Kubernetes clusters. However, if you need more advanced monitoring features or scalability, you may want to consider other solutions. + +### ChatOps & Chatbots for K8s + +Pros: + +* Real-time communication: ChatOps allows you to monitor your Kubernetes cluster in real time. This means that you can quickly identify and troubleshoot problems as they arise. +* Efficiency: ChatOps can help you to be more efficient in your monitoring activities. You can use chat commands to automate tasks, such as sending alerts when there are problems. +* Collaboration: ChatOps can help to improve collaboration between teams. Everyone can see the same information in real time, which can help to speed up problem resolution. + +Cons: + +* Complexity: ChatOps can be complex to set up and manage. You need to have a good understanding of Kubernetes and chat applications in order to get the most out of ChatOps. +* Security: ChatOps can introduce security risks. If your chat application is not secure, then attackers could gain access to your Kubernetes cluster. +* Adoption: ChatOps requires buy-in from all team members. If not everyone is on board with ChatOps, then it will be difficult to implement and maintain. + +Overall, ChatOps can be a powerful tool for monitoring Kubernetes. However, it is important to weigh the pros and cons before deciding whether ChatOps is right for your team. + +Use Cases for Chat Operations in Kubernetes +------------------------------------------- + +* **Deploying applications:** ChatOps can be used to deploy applications to Kubernetes clusters. This can be done by using kubectl commands in chat. For example, you could use the kubectl apply command to deploy a new application to your cluster directly from Slack! +* **Managing resources:** ChatOps can be used to manage resources in Kubernetes clusters. This can be done by using kubectl commands to get, set, and delete resources. For example, you could use the kubectl get pods command to get a list of all the pods running in your cluster. +* **Troubleshooting problems:** ChatOps can be used to troubleshoot problems in Kubernetes clusters. This can be done by using kubectl commands to get logs, view metrics, and run commands. For example, you could use the kubectl logs command to get the logs for a pod that is having problems. +* **Collaborating with team members:** ChatOps can be used to collaborate with team members on Kubernetes deployments. This can be done by sharing chat commands with team members, or by using chat to discuss problems and solutions. For example, you could use chat to share the kubectl get pods command with a team member who is not familiar with Kubernetes. + +ChatOps can be used to improve the efficiency and effectiveness of Kubernetes deployments in a number of ways. For example, ChatOps can: + +* **Reduce the number of context switches:** By using chat commands, you can avoid having to switch between different tools and applications. This can save time and improve productivity. +* Automate tasks: ChatOps can be used to automate tasks, such as deploying applications, managing resources, and troubleshooting problems. This can free up your time to focus on other tasks. +* **Improve communication:** ChatOps can improve communication between team members. This can help to speed up problem resolution and improve the overall efficiency of Kubernetes deployments. + +Conclusions +----------- + +In this blog post, we discussed the pros and cons of ChatOps and Kubernetes dashboards. We also explored some specific use cases for ChatOps with Kubernetes. So what does it come down to keep your applications running smoothly? + +Ultimately, the best way to monitor Kubernetes depends on your specific needs and requirements. If you need a simple and easy-to-use solution, then a Kubernetes dashboard may be a good option. If you need a more powerful and flexible solution, then ChatOps may be a better choice. + +### How can Botkube Help? + +In conclusion, ChatOps is a great alternative to Kubernetes Dashboards. It allows you to monitor and troubleshoot your Kubernetes cluster in a collaborative environment, where you can chat with your team members and get help from experts. Botkube is the best solution for ChatOps in Kubernetes. It is easy to set up and use, and it has a wide range of features, including monitoring, troubleshooting, and automation. With Botkube Cloud's new web graphical user interface and live audit log, you can also get a little bit of a dashboard about your cluster, but most of the action is in the Chat Ops functions, which will alert you when something is wrong and suggest the change automatically. + +If you are looking for a way to improve your Kubernetes operations, I highly recommend giving [Botkube a try](http://app.botkube.io/). + +‍ diff --git a/hack/assistant-setup/content/botkube.io__blog__level-up-your-sre-workflow-automating-manual-tasks-with-botkube-ai-assistant.md b/hack/assistant-setup/content/botkube.io__blog__level-up-your-sre-workflow-automating-manual-tasks-with-botkube-ai-assistant.md new file mode 100644 index 0000000..cfa4d99 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__level-up-your-sre-workflow-automating-manual-tasks-with-botkube-ai-assistant.md @@ -0,0 +1,105 @@ +Title: Level Up Your SRE Workflow: Automating Manual Tasks with Botkube AI Assistant + +URL Source: https://botkube.io/blog/level-up-your-sre-workflow-automating-manual-tasks-with-botkube-ai-assistant + +Published Time: Apr 18, 2024 + +Markdown Content: +![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) + +Maria Ashby + +Developer Advocate + +Botkube + +See how Botkube is optimizing SRE workflows with the new AI assistant + +### Table of Contents + +* [The Challenges of Repetitive SRE Work](#the-challenges-of-repetitive-sre-work) +* [Generate Your Deployment Manifest Instantly with Botkube](#generate-your-deployment-manifest-instantly-with-botkube) +* [More Ways Botkube Enhances Your Workflow](#more-ways-botkube-enhances-your-workflow) +* [Get Started with Botkube Today](#get-started-with-botkube-today) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +#### Start Using Botkube AI Assistant Today! + +Site reliability engineers (SREs) and platform teams face the never-ending challenge of ensuring system reliability and scalability. They must tackle complex system issues and handle time-sensitive alerts. This requires deep knowledge of the whole software delivery process and cloud architecture. Even with a high level of Kubernetes knowledge, manual tasks like generating manifests, analyzing logs, and interpreting metrics can overwhelm platform teams. This repetitive work consumes valuable time. + +Botkube, [the AI-Powered Kubernetes Troubleshooting Platform](https://botkube.io/blog/explore-the-new-era-of-aiops-with-botkubes-ai-assistant?gad_source=1&gclid=CjwKCAjw5v2wBhBrEiwAXDDoJQruzfU4JfBTnz6dmEoIcsjk3EOpezrrGmXWPZUa47zRgTCfXBhZrBoC0mcQAvD_BwE), helps tackle this challenge. By leveraging automation for incident resolution, manifest generation and error-analysis, Botkube eliminates manual processes and enables proactive infrastructure management. It works in your preferred communication platforms like Slack, Microsoft Teams, Discord, and Mattermost. By automating repetitive tasks like log analysis,root cause identification, and post-mortem generation, Botkube boosts SRE productivity for a reliable, scalable system. + +The Challenges of Repetitive SRE Work +------------------------------------- + +### Manifest Management + +![Image 2: a screen shot of a web page with text on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6620427a1e5102e6a6bed019_generate%20a%20manifest.gif) + +Manually generating Kubernetes manifests is a notorious time sink. YAML's simplicity can be deceiving; even minor errors can lead to manifest parsing failures and subsequent deployment issues. Scaling applications increases manifest complexity, demanding precise configurations for resources, secrets, and health checks. Errors here lead to wasted time troubleshooting, misallocated resources, and even application failures. This leads to increased K8s troubleshooting and deployment delays, slowing down Kubernetes workflows and decreasing the efficiency of platform teams. + +#### Botkube's Solution - Effortless Manifest Creation + +Generate manifests effortlessly by asking Botkube in either plain English or with kubectl syntax (e.g., "Create a deployment manifest for my new service with 3 replicas"). Review and integrate these manifests into your Kubernetes workflow to speed up deployments, standardize practices, and reduce errors caused by manual editing. + +### Manual Log retrieval + +![Image 3: a screenshot of an error message on a website](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a0710c644fa0ebb76293d8_DJDInRt7FR5LTwmVqnG4WM9OBv7o9_FmRKnG5sA9F-UU-kqljSWEtByVtVP37PhGh2wq7eezjjCNzzjlYyIOyqlAfEMDA6UdSCs5AUJLKfcy3qqXg8cEOoJTdi4S-5Z_Otd9bgcKLoeY5gEcWNa0D4U.gif) + +While isolating root causes within log data is a critical part of troubleshooting, it is a significant challenge for SREs. Manually sifting through complex and unstructured log streams drains SRE resources, increasing the risk of downtime and service disruptions. This also limits the ability of teams to identify patterns, trends, potential vulnerabilities before they cause major outages. + +#### Botkube's Solution - Intelligent Log Analysis + +Retrieve logs instantly with simple natural language requests, saving time and receiving the critical information SREs need quicker (e.g., "Show me error logs from the web app in the last hour"). + +![Image 4: a screenshot of a chat window on a computer screen](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6620424f69c1630d0e844f62_VjXHCgp2Yv_Ux-63VIn9d_D7cAL52_0UUcsX-2U0HlS1o8x_AOQp0MPSUxZp7yCcCui7FCBy0_xzPdJq0jsB7lf1n7PjdSLXKHFdz5qqhTb03qNptWPPBL7P8tq1SAOIZW4Bv-26RWIiEHcfyIcWyg8.gif) + +### Metric Monitoring + +![Image 5: a screen shot of a window showing the email settings](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/657c77914d9e2672b3b4f54a_654d07eb1993ada26a1f17b1_Enabling_Developers.gif) + +Staying on top of key system metrics is an essential part of maintaining safe and reliable systems, but constantly monitoring dashboards takes up valuable time that SREs could spend doing other tasks. These dashboards often target different audiences and have different levels of access, forcing engineers to switch between them, breaking their focus and limiting their productivity. + +#### Botkube's Solution - Real-Time Metric Analysis + +Botkube's intelligent monitoring goes beyond traditional by employing advanced analysis based on your cluster. Botkube can not only pinpoint potential issues before they escalate into outages, but also suggest optimizations for resource utilization, configuration settings, or deployment strategies.This comprehensive approach empowers teams to efficiently manage their Kubernetes environments enabling stability and performance. + +Generate Your Deployment Manifest Instantly with Botkube +-------------------------------------------------------- + +![Image 6: a screen shot of a web browser with a message screen](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/66207be4095de29d8a4fa8fd_deploy-serviceyaml-ezgif.com-video-to-gif-converter.gif) + +Manually creating Kubernetes manifests can be a time-consuming process. By automating manifest generation, Botkube eliminates the need for manual configuration and reduces the risk of errors. Simply specify your desired deployment configuration, and Botkube will generate the necessary Kubernetes manifests. In this example: + +1. **Ask Botkube: In your chat platform, type:** + +@Botkube ai create deployment for inventory-api with 2 replicas and port 8080 using container image company/inventory-api:latest + + +2. **Botkube Responds:** It instantly generates a valid Kubernetes deployment manifest. It might even suggest optimizations tailored to your cluster. +3. **Deploy with Confidence:** Apply the manifest to your cluster and get back to more important tasks. + +More Ways Botkube Enhances Your Workflow +---------------------------------------- + +### Work where you work - [Slack, Microsoft Teams, Discord and Mattermost.](https://botkube.io/integrations) + +![Image 7: a screen shot of a conversation between two people](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64b96a341b5ccb59ffb87637_act-on-events.gif) + +‍ + +Botkube integrates with your existing toolkit, including communication platforms like Slack, Microsoft Teams, Discord and Mattermost. This eliminates the need to switch context, saving time and keeping you on track. Additionally, Botkube connects with your development pipeline through integrations with [GitHub events](https://docs.botkube.io/configuration/source/github-events/), [Helm](https://botkube.io/integration/helm), and [GitOps tools,](https://botkube.io/blog/enhancing-gitops-workflows-with-botkube) further optimizing your workflow and minimizing context switching. Additionally, Botkube centralizes Kubernetes knowledge, ensuring alerts and answers are accessible to your entire team. + +### Knowledge sharing made easy + +Botkube simplifies knowledge sharing, allowing you to distribute troubleshooting insights, logs, and other Kubernetes information throughout your team. This creates a collaborative learning environment where everyone benefits. Additionally, Botkube eliminates communication hurdles, providing your team with a shared pool of real-time information. This empowers them to work together on issues, leading to faster problem resolution. + +### Proactive, not reactive + +Botkube shifts your approach to Kubernetes troubleshooting from reactive to proactive. Unlike traditional tools that simply alert you to issues after they occur, Botkube’s AI Assistant goes beyond simple notifications, providing context and providing step by step solutions. This allows you to stay ahead of issues, preventing them from escalating into major outages. Botkube creates automations for common problems, optimizing your workflow and preventing repeat errors. This reduces downtime and allows systems to operate smoothly and reliably. + +Get Started with Botkube Today +------------------------------ + +Botkube's AI assistant is pre-installed and ready to go – no extra setup required! [Sign up for Botkube,](http://app.botkube.io/) link your Kubernetes cluster following our [easy instructions](https://botkube.io/blog/get-botkube-running-in-under-3-minutes-the-new-slack-app), and get started with the AI assistant. Use the `@Botkube ai` command for real-time, context-aware advice via your messaging platform, transforming Kubernetes management into an intuitive, efficient process. Join the Botkube community and get additional resources and help with any of your troubleshooting questions. diff --git a/hack/assistant-setup/content/botkube.io__blog__leveraging-botkube-for-kubernetes-cost-optimization-and-reporting.md b/hack/assistant-setup/content/botkube.io__blog__leveraging-botkube-for-kubernetes-cost-optimization-and-reporting.md new file mode 100644 index 0000000..f124ef7 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__leveraging-botkube-for-kubernetes-cost-optimization-and-reporting.md @@ -0,0 +1,102 @@ +Title: Leveraging Botkube for Kubernetes Cost Optimization and Reporting + +URL Source: https://botkube.io/blog/leveraging-botkube-for-kubernetes-cost-optimization-and-reporting + +Published Time: Jan 29, 2024 + +Markdown Content: +![Image 1: a man in a black shirt is standing in front of a circle with the words experts google cloud](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9dc3218bb2465f041cea7_1693115200398.jpeg) + +Rohit Ghumare + +Google Developer Expert – Google Cloud, CNCF Ambassador + +Botkube + +This tutorial will guide you through using Botkube to monitor resource usage and optimize costs in Kubernetes. Read on to learn more. + +### Table of Contents + +* [Introduction](#introduction) +* [What is Botkube?](#what-is-botkube-) +* [Prerequisites](#prerequisites) +* [Setting Up Resource Monitoring in Botkube](#setting-up-resource-monitoring-in-botkube) +* [Creating Alerts for Resource Usage Anomalies](#creating-alerts-for-resource-usage-anomalies) +* [Generating Cost Reports](#generating-cost-reports) +* [Analyzing and Acting on the Data](#analyzing-and-acting-on-the-data) +* [Conclusion](#conclusion) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +#### Get started with Botkube Cloud + +**Introduction** +---------------- + +As Kubernetes environments grow in complexity and scale, managing costs becomes increasingly crucial. This tutorial will guide you through using Botkube to monitor resource usage and optimize costs in Kubernetes. By the end of this tutorial, you'll be able to set up alerts and reports to track and manage your Kubernetes resource utilization effectively. + +What is Botkube? +---------------- + +Botkube stands out as a vital messaging solution for keeping a close eye on and troubleshooting Kubernetes clusters. Seamlessly integrating with popular platforms such as [Slack](https://botkube.io/integration/slack), [Microsoft Teams](https://botkube.io/integration/teams), and Mattermost, it keeps you in the loop with instant alerts and updates on the status of Kubernetes resources. Tailor Botkube will keep tabs on particular resources and utilize its handy feature to run kubectl operations with ease, making cluster management a breeze. It's a game-changer for DevOps teams, offering them the agility to tackle issues swiftly, keep the health of clusters in check, and smooth out the overall process of operating Kubernetes. + +‍ + +![Image 2: a diagram of a basic azure stack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65b72fc399ffea33dc180476_botklube_diagram.png) + +botkube architecture diagram + +. + +The above architecture represents what Botkube is capable of and how it integrates with plugins and communications channels. We will focus on the monitoring side of this architecture more for this particular article; I’m talking about `executor`s and `events`. + +Botkube documentation includes a [diagnostics page](https://docs.botkube.io/operation/diagnostics) for the debugging issues in Helm whenever you’re stuck, so bookmark it for now. + +**Prerequisites** +----------------- + +* A Kubernetes cluster. +* Botkube is installed and configured in your cluster. +* Basic familiarity with Kubernetes resource management. +* We recommend checking the [previous blog](https://botkube.io/blog/streamlining-kubernetes-management-a-closer-look-at-botkube-chatops) for a detailed guide on Botkube Installation on the Kubernetes cluster for better understanding and learning. + +**Setting Up Resource Monitoring in Botkube** +--------------------------------------------- + +### A. **Configuring Botkube to Monitor Specific Resources** + +Configure BotKube to monitor resources that significantly impact costs, such as Pods, Deployments, and StatefulSets. Modify the BotKube configuration to include these resources and set the desired level of alerting. + +> **`If you’ve installed Botkube using the helm as given in the blog listed above, you must find the values.yaml file that helps you to configure the changes into Botkube as per your requirement.`** + +‍ + +
resources:
- name: pod
namespaces:
include:
- all
events:
- create
- delete
- error
- name: deployment
namespaces:
include:
- all
events:
- create
- delete
- error
+ +### B. **Enabling Resource Specification Checks** + +Enable checks for resource specifications like requests and limits to ensure optimal allocation of CPU and memory resources. This helps in preventing over-provisioning and under-provisioning of resources. + +
settings:
resources:
requests:
cpu: "100m"
memory: "100Mi"
limits:
cpu: "200m"
memory: "200Mi
+ +**Creating Alerts for Resource Usage Anomalies** +------------------------------------------------ + +### **1\. Configuring Alerts for Over-Utilization** + +Set up alerts in Botkube for scenarios where resource utilization exceeds a specified threshold. These alerts can notify you when resources are over-utilized, indicating potential cost inefficiencies. + +‍ + +### **2\. Alerts for Under-Utilization** + +Similarly, configure alerts for under-utilized resources, which can help identify opportunities for scaling down and cost savings. + +**Generating Cost Reports** +--------------------------- + +### **1\. Setting Up Periodic Reporting** + +To set up periodic reporting in BotKube, you must configure a custom script or plugin that periodically gathers resource usage data and sends a report. Let's assume we have a script named `generate_cost_report.sh` that compiles the report. We will schedule this script to run at regular intervals using a Kubernetes CronJob. + +
apiVersion: batch/v1
kind: CronJob
metadata:
name: cost-report-cronjob
spec:
schedule: "0 0 * * *" # This schedule is for daily execution at midnight
jobTemplate:
spec:
template:
spec:
containers:
- name: cost-report
image: your-report-generator-image
command: ["/bin/bash", "-c", "./generate_cost_report.sh"]
restartPolicy: OnFailure
In this configuration, replace `your-report-generator-image` with the Docker image that contains your script. The `generate_cost_report.sh` should output the report in a format Botkube can send to your communication platform. ### **2\. Custom Reporting Scripts** Here's a simple Bash script example to generate a cost report. This script could be expanded to pull more detailed data as per your requirements.
#!/bin/bash
# generate_cost_report.sh
# Fetch resource usage details
pod_usage=$(kubectl top pod --all-namespaces --sort-by='cpu' | head -5)
node_usage=$(kubectl top node | head -5)
# Format the report
report="Kubernetes Cost Report:\n\n"
report+="Top 5 CPU Consuming Pods:\n${pod_usage}\n\n"
report+="Top 5 CPU Consuming Nodes:\n${node_usage}"
# Send the report via BotKube
echo "$report" | botkube send -n botkube -c botkube-communication-channel
‍`‍` **Analyzing and Acting on the Data** ------------------------------------ ### **1\. Analyzing Reports** While the script handles the generation and sending of the reports, analysis is more of a manual process. You would typically read through the reports to identify trends and anomalies in resource usage. ### **2\. Implementing Cost-Saving Measures** Based on the analysis, you might write scripts to automate scaling actions. Here's a simple script to scale down a deployment if it's underutilized:
#!/bin/bash
# check_and_scale_down.sh
# Define threshold and deployment
cpu_threshold=30 # 30%
deployment_name="your-deployment"
namespace="your-namespace"
# Fetch current CPU usage (in percentage)
current_cpu_usage=$(kubectl top pod -n $namespace | grep $deployment_name | awk '{print $3}' | sed 's/%//')
# Check if current usage is below threshold and scale down if it is
if [ "$current_cpu_usage" -lt "$cpu_threshold" ]; then
echo "Current CPU usage ($current_cpu_usage%) is below threshold ($cpu_threshold%). Scaling down..."
kubectl scale deployment $deployment_name --replicas=1 -n $namespace
else
echo "Current CPU usage is above threshold. No scaling performed."
fi
`‍`The script `check_and_scale_down.sh` has been created. This script checks the CPU usage of a specific deployment and scales it down if the usage is below the defined threshold. You can customize the `cpu_threshold`, `deployment_name`, and `namespace` variables as per your requirements. > 💡 This script is a basic example and serves as a starting point. Depending on your cluster's complexity and specific needs, you may need to expand or modify it. Remember to test any automation scripts in a controlled environment before deploying them in production. **Conclusion** -------------- Following these steps, you can effectively use Botkube to monitor, report, and optimize your Kubernetes resource usage for better cost management. Regular monitoring and proactive management are key to maintaining an efficient and cost-effective Kubernetes environment. Remember, the configurations and scripts can be further customized to suit your specific needs and the complexity of your Kubernetes environment. For more details, Join the Botkube-related discussion on Slack! Create your Slack account on [Botkube](https://join.botkube.io/) workspace today. To report bugs or features, use [GitHub issues](https://github.com/kubeshop/botkube/issues/new/choose). diff --git a/hack/assistant-setup/content/botkube.io__blog__maximize-your-devops-teams-efficiency-with-botkube-and-microsoft-teams.md b/hack/assistant-setup/content/botkube.io__blog__maximize-your-devops-teams-efficiency-with-botkube-and-microsoft-teams.md new file mode 100644 index 0000000..78e5f09 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__maximize-your-devops-teams-efficiency-with-botkube-and-microsoft-teams.md @@ -0,0 +1,158 @@ +Title: Maximize Your DevOps Teams Efficiency with Botkube + Microsoft Teams + +URL Source: https://botkube.io/blog/maximize-your-devops-teams-efficiency-with-botkube-and-microsoft-teams + +Published Time: Nov 29, 2023 + +Markdown Content: +![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) + +Maria Ashby + +Developer Advocate + +Botkube + +Get Botkube up and running with Microsoft Teams in less than 5 mins with this walk-through tutorial + +### Table of Contents + +* [Introduction](#introduction) +* [Benefits of Using Botkube and Microsoft Teams](#benefits-of-using-botkube-and-microsoft-teams) +* [Tutorial Guide](#tutorial-guide-) +* [Conclusion](#conclusion-) +* [Get Started with Botkube](#get-started-with-botkube) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +#### Get started with Botkube Cloud + +Introduction +------------ + +Microsoft Teams is now a leading choice for collaboration in the business world, particularly in large enterprises. The platform is pivotal in the evolving landscape of hybrid work environments. Its growth aligns with the rapid adoption of Azure Cloud services and Azure Kubernetes Service (AKS), which are steering organizations towards more innovative, scalable, and efficient deployment of cloud-based applications. Yet, this advancement also introduces a key challenge: the complex task of integrating Kubernetes into DevOps workflows. + +Enter Botkube, a collaborative Kubernetes troubleshooting and monitoring tool. It empowers DevOps teams to work more efficiently by enabling developers to troubleshoot applications without requiring Kubernetes expertise. Botkube significantly improves team reliability by delivering timely, context-enhanced notifications about events in Kubernetes environments. This integration facilitates a seamless troubleshooting environment, perfectly tailored to the workflows of Microsoft Teams' user base. Beyond alerting, Botkube allows teams to automate actions based on events, executing kubectl and Helm commands, receiving best practices recommendations, and much more. + +Benefits of Using Botkube and Microsoft Teams +--------------------------------------------- + +Botkube’s integration offers useful features for Microsoft users working with Kubernetes. It simplifies interactions with Kubernetes and the broader cloud-native ecosystem. With the Botkube plugin system, users can easily integrate tools like [Prometheus for monitoring](https://botkube.io/learn/how-botkube-makes-monitoring-kubernetes-easy) and [Helm for application package management](https://botkube.io/learn/helm-charts) within the Microsoft ecosystem. With Botkube, you can manage your deployments with Helm and customize your alerting set with Prometheus in the Botkube web app and receive alerts directly in Teams. This integration facilitates smoother deployment processes and more consistent monitoring. Our [engineering team](http://learn%20more%20about%20the%20engineering%20process/) built this new Teams app with enterprise developer in-mind. + +Botkube empowers developers with self-service access while ensuring a controlled and secure environment. It offers a controlled environment for developers to access their Kubernetes resources. It enables the whitelist of powerful commands like 'create' and 'delete,' allowing developers to experiment with Kubernetes tools without granting them full control over the clusters. This is particularly useful for enterprise teams because it allows for a balance between developer autonomy and maintaining security standards. In essence, Botkube enhances the Kubernetes experience by streamlining tool integration and offering controlled access for developers. + +Tutorial Guide +-------------- + +In this tutorial, we will guide you through the step-by-step process of configuring and leveraging Botkube for Microsoft Teams.The previous (now deprecated) version of Botkube’s Teams integration included a lot of manual steps that required you to manually expose an ingress point. In this new version, you'll simply download the zip file of the Teams application from the Botkube Cloud dashboard, upload it directly to your Team app directory (with admin privileges), and connect your cluster to Botkube. Get up and running with Botkube in Teams in less than 5 minutes. + +### Prerequisites + +* [Botkube Cloud](http://app.botkube.io/) account +* Access to a Kubernetes cluster +* Microsoft Teams account with administrator privileges + +#### One-Time Setup and Ongoing Flexibility + +_\*\* Steps 1-4 and 7-10 are one-time operations requiring administrative privileges. Once set up, Botkube can be configured across various channels and clusters without needing further admin access in Teams. This means after the initial setup, users can easily manage alerts and configurations through the Botkube Web App.\*\*_ + +### Creating Botkube Cloud Account + +1. On the [Botkube homepage](https://botkube.io/), locate the “Get Started” button and click on it. This will take you to the account registration page. +2. Fill in the required information in the registration form. You can sign up with your email address or Github account. + +### Dashboard setup + +1. Select create a new instance + +![Image 2: a screen shot of a landing page for a website](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7dd390269cbe2d3ba4_jCUYYPLNDFZDkosCGhXjsC4Cvk9OsKaPJowAXS_Yi3-gdAekdM-YYj_QvgqvMCkAOIDbqXTaJGZuJFAjb5pIwZWo0kFlQwPBcwAzKW6X7ax6gK3rQVjbGKOJg_9Ps9i28sE-f7xg0hdp8hoY5mPwnNI.png) + +![Image 3: a screen shot of the intel dgb jdk page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7e072ab825022ca51e_w3OobTivy6lb1zbPozEcTOySEmAZPSRU0WVO120nal_egmZ-HVayv2FIuTzLsJ6vBJuZBfrFLiMkzjzpOS2kJash0C8_p3scSVIAFUY5Rb_1YqE2xACl2811ugQ1E-VazSxtzki-AirkeARSEZ5sKq0.png) + +2. Next, use homebrew or curl to install Botkube CLI on your terminal (Step 1) +3. Copy and paste the `Botkube install`… command (Step 2) +4. Wait for the cluster to connect and click, **Next** + +‍ + +![Image 4: a screen shot of a web page showing a house and arrows](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7e1938916887fbf34f_WVBv6m9k1C5RWt4FI7QuA8VU-lSDXKQZOJWyqvfe7YZVDnNxquO3DBkznU2LP9TulrVxeDPloV4O7w40n6OVt3NjPPkMynGNKA_6wbc1knG-znVU3N5E8J6H1fqmpWafhnh4eOgb37W1Di2MgHUrrtU.png) + +5. Name your instance and select the **Teams** option + +![Image 5: a screenshot of the adobe adobe adobe adobe adobe](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7e6a852b2620a9b5fb_7fpjvjcPJcqBZKRJ2oNOisODdOt9vN9J-sYcsuFLYMzlKF8CzLOXI3vM83HZ0YvdShckXSZcDBTclvCv9IRPGrNqeIIMBA6KdnKhilwSek9nqKBLZOrwUUFMZYe5zIBJmv2nh3jwJuJK2kjgO5Lh1ZM.png) + +6. Select the Download button to download the Botkube App. It will show up as **Botkube.zip** + +‍ + +![Image 6: a screenshot of a google chrome browser showing a file on the screen](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7db9251f0d1db86ab7_w9yhNzeHzqqc4JawGTersD2qogEalGSUFs9xlGLhX_8OoCXcxSEEaJNnXaAdB3KyA25t6XnaNAzAM_P1cBjLNN68lZZGZ6GjAwWL8iAlXn4hyrwJ5FM3p8MLBCyUtwoSvw1ZRWBs7ds6jYHeYaJJJAU.png) + +### Installing Botkube to Microsoft Teams + +1. Navigate to the Microsoft Teams application and select **Manage your Apps** at the button of the screen + +![Image 7: a screen shot of the microsoft office app](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d14da41d53c779535_oErOXojrwoCSfbs3A0830mnbkI1xb2rOD83YopN5B6k7Ti_O5OZdusUD4VrNjdFs_xHSaTxCjdipKQJuaLhpksHgW3Fwd8xx8MSFSq1HiuWVzsoTG90t1Dy4nlcAAkIuNdAsumH4sjQWXljJJ9y_Lbo.png) + +2. Next select **Upload an app** and select **Upload an app to your org’s app catalog** + +![Image 8: a screen shot of the azure portal](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/656eef4cf0cfa6050f79acc5_Screen%20Shot%202023-12-05%20at%201.36.02%20AM.png) + +3. Select the **Botkube.zip** file from the previous section +4. Navigate to the **Apps** section on the left hand side and select the **Built for your Org section.** The Botkube application will be there. +5. Select the **Add** buttton. + +![Image 9: a screen shot of the google drive app](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d640c39e96661f69e_zpXrkocqwakQB8jrA8pwYH2CSrmRim4pp13-Pt8lZRgdgw33jCDfqnrxpYK3jt2fhSctK5cIyMt9taA-VAAUSD3tiicgAdTafZ7gAqBs08Bkljt7BJlUsxUh3OUdg1fhjCiCO5lTztUHXd8CrccWxXs.png) + +![Image 10: a screen shot of a google search page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d053e39713de9aa28_FNgbV-UuRUprEaIcHxqlypAX2PnrAGJjbfHZu8I2uJ4zRqP3ZXt3L4ez8rPqWhZZv_-ruLTTXoWLZFO5Nv4vKTfoJ8hjqFjrHX-M_RwhlaAPrF5IDEcZjDg523tVuwYOMranVLyV3IOVrbDzRI4OY5M.png) + +6. And then select the **Add to team** button + +![Image 11: a screen shot of the microsoft store page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7e778b3a2f89c145c5_2I5Ickc_OXlcgym-Ju-rDd9gVc0kVk-QW0_js_3gURGp0dgqj5jS0lOzoIox8vr07ky4hiHkn3LHiTIJ0JKU4jK6Q9rIsan8_lavBnIF7WETp-F_LEM0bTZW4keiuLe3cM3VA_9leLry29hAZ1_vXfU.png) + +7. Select your preferred team or channel you would like to add Botkube to + +![Image 12: a screen shot of a google adwords account](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7db157112561870666_ZfA2XrAwSEqm7yLkbUMoOEL_3sIULsNu2rHAaerMIvhOyKO79bjSFvausKcnNF_rxPc8rq0rFAl2VGRNct3Gb0aJimPt3pYbJInhW0-Z6ffQWq3_gPAbiJbHQHMhefcBbAbROu95icJakohqR-patiY.png) + +8. Next, Navigate to the chat window and a welcome message should appear +9. Select the **Grant Access** button + +![Image 13: a screen showing a microsoft account sign in screen](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d3cb1d0c7707a8a18_OHBLhhF5yDy9WTlI0AGKR5CnwnFjre9_Vz2BKdaUsnpAnxwk4hdqExTzBxp3yX0MH9wKGbktN0E6RG9YPeLlMShX0ybFtJ2eNbkt2WmHrLzTkBm7bZPnYcDLmy9YbQEcsbhNh5ZWj1HhibNRxe223IQ.png) + +10. A new window will pop up asking you to grant access. Click **Accept** + +11. Navigate to the chat window and select **Connect to Botkube Cloud** + +![Image 14: a screen shot of a google adwords account](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7db157112561870666_ZfA2XrAwSEqm7yLkbUMoOEL_3sIULsNu2rHAaerMIvhOyKO79bjSFvausKcnNF_rxPc8rq0rFAl2VGRNct3Gb0aJimPt3pYbJInhW0-Z6ffQWq3_gPAbiJbHQHMhefcBbAbROu95icJakohqR-patiY.png) + +12. This will take you to the Botkube Cloud dashboard. Your Teams channel will appear. Select the **Connect** Button. + +![Image 15: a screen shot of a website with the words contact web project team](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/656eefd26cc09bfeec2845b3_Screen%20Shot%202023-12-05%20at%201.38.28%20AM.png) + +![Image 16: a screen shot of a sign up page with a green check mark](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d165a59345b2b698b__rEh9UH04sSf8XxhQi_3JhGSjynIaVLwD--bRFqQa3v2Rqrahxpnna3yryM1a4omthQ-Fize-gyhNgRAXDTl-DYQXkJ1LUhp1OvRWNwn62jwfra7qa806TPcVm13W3pbeA52XN47_MlPkUVEvvyb6KA.png) + +13. All of your Teams information will appear in the dashboard. Select the channels you want to use with Botkube. + +![Image 17: a screen shot of a form in the adobe adobe adobe adobe](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7ead44d850b34e7f35_nSgmglbxW-mAFvthFI-1q0c0dcMg2m2wejlA2__CmM-vyDDeyLjUh84vTLufTx77jaJ-ifWWa1bzkFpn7bPK0KbehAARBOg2Zle9HbNUk3SXAP9-jcNbNXFypsfgSPY75R2BLLwmDi9nUFUY88StBNg.png) + +14. Connect your preferred plugins + +![Image 18: a screen shot of the google analytics dashboard](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7ddec01b0e38f3eb6d_pVkuqIiFGr5zQ8lNXQcSMQXQhDbPx5rZ6m0OptpyWKHIfpzzTwn1UbTR44-HU_YM2NOBfoOhvapjYfohK0AUjF5dsvV_8JGnujLfhEzupnaCMLJoD4pzbAE6aHZemjv1Rzzi3rsu8HoFbqrSxbu1TVI.png) + +15. Review and select your preferred Botkube defaults. + +![Image 19: a screenshot of the review blob details page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678f7d6f8e75cab928022a_PVwnI51Br_JjDcyKQsNjixKmrtTDW10Ug0gHIUJMFxDo51P-_aRrStZiIrK-Pmqxg3DnFwrtTRZqhHUGhZv2d37pHnWMmUvx9p5o4FnQe8M-YkkM8wVZk7_P3-tUs0umUmnfE37H4QbtR8E-yg36w2A.png) + +16. Select **Apply changes** +17. Congratulations! You have successfully deployed Botkube for Microsoft Teams! + +Conclusion +---------- + +The updated Botkube Microsoft Teams integration offers an all-in-one solution for Microsoft Teams users. Botkube’s features like real-time notifications support across multiple channels streamline deployment management and open up a range of potential use cases for incident response management and troubleshooting. This integration empowers developers with self-service access while ensuring control and security, making it a valuable tool for enterprise teams seeking a balance between autonomy and compliance with security standards. + +Get Started with Botkube +------------------------ + +Whether you're a seasoned Kubernetes pro or just getting started, Botkube can help supercharge your troubleshooting process. [Sign up now](https://app.botkube.io/) for free and join the community of users who are already benefiting from the power of Botkube. Once signed in, follow the tutorial above or read the [official Botkube documentation](https://docs.botkube.io/installation/teams/). + +We want to know what you think of Botkube and how we can make it even better. [Email our Developer Advocate, Maria](mailto:maria@kubeshop.io) or schedule [a quick 15 meeting](https://calendly.com/maria-botkube/15min) at your preferred time. As a thank you, we’ll send you some great Botkube swag. diff --git a/hack/assistant-setup/content/botkube.io__blog__microsoft-teams-integration-for-botkube-a-technical-journey.md b/hack/assistant-setup/content/botkube.io__blog__microsoft-teams-integration-for-botkube-a-technical-journey.md new file mode 100644 index 0000000..6c899e8 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__microsoft-teams-integration-for-botkube-a-technical-journey.md @@ -0,0 +1,141 @@ +Title: Microsoft Teams Integration for Botkube: A Technical Journey + +URL Source: https://botkube.io/blog/microsoft-teams-integration-for-botkube-a-technical-journey + +Published Time: Dec 14, 2023 + +Markdown Content: +![Image 1: a black and white photo of a man in a black shirt](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3ed2e11a11a3c6d7401_53d6BKOddSnzxKZMBQxx_KPWy4IOk8nhK4eSxM8uKIo.jpeg) + +Paweł Kosiec + +Software Engineer + +Botkube + +Discover the technical journey behind enhancing Microsoft Teams integration for Botkube. Learn about user-inspired improvements, system design for the refined multi-cluster solution. + +### Table of Contents + +* [Introduction](#introduction-) +* [Inspiration from the Field](#inspiration-from-the-field-) +* [Technical journey](#technical-journey-) +* [New Microsoft Teams integration: Key Features](#new-microsoft-teams-integration-key-features-) +* [Setting Up and Configuration](#setting-up-and-configuration-) +* [What do you think? Let us know!](#what-do-you-think-let-us-know-) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +#### Start Receiving Kubernetes Notifications Now with Botkube Cloud + +Introduction +------------ + +If you are already familiar with Botkube, then you know that it's a collaborative tool to help you monitor and troubleshoot Kubernetes clusters. Botkube integrates the most popular communication platforms, and Microsoft Teams is one of them. + +The initial version of our integration debuted in [February 2020](https://github.com/kubeshop/botkube/pull/242), marking a significant milestone in our journey. Since then, we've been continuously evolving and improving. In this release cycle, we've identified and acknowledged its limitations in the user-experience and ease of set up. + +Fortunately, these times are over now! We've been working hard on a brand-new Microsoft Teams integration, which we introduced as a part of [Botkube 1.6 release](https://botkube.io/blog/botkube-1-6-release). + +Now, let's talk about how we got here. + +Inspiration from the Field +-------------------------- + +During our conversations with users at events like KubeCon and Civo Navigate, we found out that many IT companies rely on Microsoft Teams for their communication. It's not surprising, considering that Microsoft Teams is one of the most popular communication platforms in the world. It is used by over 1 million organizations and 320 million users ([source](https://www.demandsage.com/microsoft-teams-statistics/)). + +Through discussions with various users and organizations, a common problem surfaced--many faced challenges due to the requirement for a public endpoint on their Kubernetes clusters and difficult configuration steps. Also, the integration lacked some of the core features that were available in other platforms like Slack. This was usually a blocker for them. + +Right after the Botkube Cloud launch, we focused on building the seamless multi-cluster Slack integration, as it was without doubt the most popular communication platform among our users. However, we knew that we had to do something about the Microsoft Teams integration as well. Because of the way the Microsoft Teams API works, the only way we could fix this problem properly was a dedicated infrastructure for handling the communication between Botkube and Microsoft Teams. + +That was the time we were approached by a large enterprise company that was using Microsoft Teams as their main communication tool. They were interested in a proper multi-cluster solution for their customer's Kubernetes clusters. After a series of interviews and discussions, we used their feedback to start developing a new Microsoft Teams integration. + +‍ + +![Image 2: let's do this](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/657956af7d97aef6d1200ecc_lets-do-this.gif) + +Source: [tenor.com](https://tenor.com/) + +Technical journey +----------------- + +### Investigation and research + +The very first stage was to investigate various aspects of the Microsoft Teams communication platform and its API. We wanted to understand the limitations and challenges we would face during the development process. We also wanted to make sure that we could deliver the features that were missing in the previous version of the integration. + +This phase consisted of multiple different steps, including: + +* Research around Microsoft Teams Bot Framework and Graph API capabilities. + +* Multi-tenancy architecture design with a proof of concept application (covering security, multi-cluster support, and scalability). + +* App distribution, installation and permission granting process. + +* Interactivity support for the Microsoft Teams messages. + + +Every single step was crucial to the success of the feature and had it own challenges. During the investigation stage, we quickly realized that this solution will be slightly different from the multi-cluster Slack integration we've built before. + +### Architecture design + +After our set of investigations, we had a clear picture what we're going to build. We established the following architecture: + +![Image 3: a flow diagram showing how a user interacts with an app](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/657956df81f7578f9bec69ec_architecture.png) + +Let me go through the diagram. + +Until our Microsoft Teams app is approved by Microsoft and listed in the Microsoft Teams apps catalog, we distribute a ZIP file for manual sideloading by a Microsoft Teams organization administrator. + +After installing the app, to use Microsoft API for fetching team and channel information, we need to grant the app permissions to access the Microsoft Teams API. This is done by the organization administrator only once for the whole organization. + +Same as for Slack integration, in Botkube Cloud we use a message broker internally, to ensure scalability, and reliability. Every Botkube Agent connects via gRPC to Botkube Cloud to receive events from Microsoft Teams. + +Because of the way the Microsoft Teams API works, and to ensure proper tenant separation, both source notifications and executor commands are routed via Botkube Cloud. This is different from the Slack integration, where we could use the Slack API directly from the Botkube instance for handling incoming notifications. However, Botkube Cloud is used simply as a proxy, without storing any event data. + +### Interactivity support + +Interactivity support for the Microsoft Teams messages was one of the challenging parts of the development process. We wanted to make sure that the user experience is as good as possible, and close to the Slack integration. Fortunately, Microsoft Teams uses Microsoft's Adaptive Cards format, which is a flexible way to present interactive content in Microsoft Teams messages. Moreover, in-place message updates are supported, to ensure the content is always up-to-date. But, of course, technical details were different from the Slack integration, so we needed to render the messages differently. + +After a while we were able to achieve similar feeling to the users familiar with our multi-cluster Slack solution. Here's a quick comparison: + +![Image 4: a screenshot of the microsoft team page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/657957112416eb71be03a4ac_teams-vs-slack-interactivity.png) + +### Development and testing + +Thanks to the Microsoft Teams proof of concept application, we were able to quickly start the development process. The fact that we built the multi-cluster Slack integration before also helped tremendously. We were able to reuse some of the concepts like gRPC communication between Botkube Agent and Botkube Cloud, and the message broker infrastructure. + +After busy weeks full of development and testing, we were able to deliver the first version of the new Microsoft Teams integration. While it's not yet perfect, it's a huge step forward. We are working on adding more features and improving the existing ones, continuously refining the integration based on user feedback, including the one from the company that came to us with the initial request. + +New Microsoft Teams integration: Key Features +--------------------------------------------- + +So what the first version of the new Microsoft Teams integration brings to the table? Let's take a look at the key features: + +* Multi-cluster support. + +* Enhanced per-channel plugin configuration including RBAC policy. + +* Interactive messages. + +* Actionable notifications. + + +While some features known from Slack, such as the Kubectl command builder, are not yet available in the new Microsoft Teams integration, we are working on adding them in the future releases. + +Still, every single item listed above weren't available in the previous version of the Microsoft Teams integration. And, what's the most important, **we simplified the configuration process**. It still isn't perfect, but we think that it's a huge step forward. + +As the previous integration was so painful to set up, we decided to deprecate it. Worry not, though! The new Microsoft Teams integration is now available to all users as a part of the [Botkube Cloud](https://app.botkube.io/) offering--both Free and Team plans. + +![Image 5: a man with long hair looking at a laptop](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65795734bc6d6051bcdd0d01_new-teams-reaction.gif) + +Your reaction after trying out the new Microsoft Teams integration (hopefully!) source: [tenor.com](https://tenor.com/) + +Setting Up and Configuration +---------------------------- + +Interested in trying out the brand-new Microsoft Teams integration in Botkube? To get started, create a free [Botkube Cloud](https://app.botkube.io/) account and follow the [Microsoft Teams](https://docs.botkube.io/installation/teams) instruction. To see the multi-cluster support in action, enable the free Botkube Cloud trial and connect as many Botkube installations as you want! + +What do you think? Let us know! +------------------------------- + +We are constantly working on improving Botkube and its new Microsoft Teams integration. Our roadmap is driven by user feedback and community contributions. Let us know what you think about the new integration and how we can make it better. You can reach out to us on the [Botkube Community Slack workspace](https://join.botkube.io/), or simply [create an issue](https://github.com/kubeshop/botkube) on our GitHub repository. diff --git a/hack/assistant-setup/content/botkube.io__blog__optimizing-collaboration-and-notifications-with-the-botkube-argocd-plugin.md b/hack/assistant-setup/content/botkube.io__blog__optimizing-collaboration-and-notifications-with-the-botkube-argocd-plugin.md new file mode 100644 index 0000000..2a6588f --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__optimizing-collaboration-and-notifications-with-the-botkube-argocd-plugin.md @@ -0,0 +1,104 @@ +Title: Botkube's ArgoCD Plugin Optimizes Collaboration + Notifications + +URL Source: https://botkube.io/blog/optimizing-collaboration-and-notifications-with-the-botkube-argocd-plugin + +Published Time: Oct 26, 2023 + +Markdown Content: +![Image 1: a man in sunglasses taking a selfie in the mountains](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3f0810c273feb4b4ad3_VEyGvbbIe6fYlHwidQsOYSS3FvzlHuQsOUjeuZzXWJw.jpeg) + +Josef Karásek + +Software Engineer + +Botkube + +A closer look into the Botkube team's process for developing the ArgoCD plugin + +### Table of Contents + +* [ArgoCD Plugin for Kubernetes Deployment Management](#argocd-plugin-for-kubernetes-deployment-management) +* [How Botkube Uses ArgoCD for GitOps Management](#how-botkube-uses-argocd-for-gitops-management) +* [Conclusion](#conclusion) +* [Sign up now!](#sign-up-now-) +* [Feedback](#feedback) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +#### Get started with Botkube Cloud + +IT operations have always been very dynamic and rapidly evolving and even more so in the cloud-native world. Insight into the state of the system is crucial for maintaining operational awareness and ensuring that the system is running as expected. This is especially true in Kubernetes where the system is constantly changing and evolving. At Botkube we believe that notifications from Continuous Delivery tools, such as ArgoCD, are a key part of this. + +ArgoCD Plugin for Kubernetes Deployment Management +-------------------------------------------------- + +![Image 2: Argo CD branches being checked for app health](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/650e09b69191288d41cf2161_rih56gy96kbqx4UzlDDmVadKW9ieXnfmbXLOwzJiDWgHBDzmW0vG867PZM74YdzH5YkNHY-9F2xaVfJTam8eFpvSgzoB4EX-FxDPzLzqMvKJmSNtSBwIRifp2EctcHW3oeh_ruepqkKpwhfFyDzS5Kc.gif) + +‍ + +ArgoCD has become the standard solution for managing Kubernetes applications. It provides a declarative GitOps workflow for continuous delivery and automated updates. Which is why we decided to invest our time and effort into developing a new [Botkube plugin for ArgoCD](https://botkube.io/integration/argo-cd-botkube-kubernetes-integration). We wanted to make it easier for ArgoCD users to get started with Botkube by auto-configuring notifications and providing default message templates and triggers. + +‍ + +The Botkube engineering team developed a [new plugin that automatically configures ArgoCD notifications](https://docs.botkube.io/usage/source/argocd) for all communication platforms supported by Botkube, such as [Slack, Microsoft Teams, and Discord](https://botkube.io/integrations). This plugin greatly reduces the barrier to entry for ArgoCD users and enhances collaboration and notifications in Kubernetes management. In this article, we'll explore the Botkube engineering team's journey from using ArgoCD to developing their own Botkube ArgoCD plugin. + +How Botkube Uses ArgoCD for GitOps Management +--------------------------------------------- + +![Image 3: Diagram of Developer teams use of Argo CD and Git](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/653a912003e50d0ea9eb0c15_Argo%20Sync%20Image%20(1).png) + +Diagram trying to show how Botkube uses ArgoCD and Git to manage K8s Clusters + +At Botkube, we use two long-lived Kubernetes clusters which both run in Google Kubernetes Engine (GKE). One cluster is used for production and the other one is used for staging. Each cluster runs its own Argo instance, which is created during cluster creation. A majority of development and bug fixing is done in local dev environments, such as Kind or k3d clusters and is only merged into the main branch after passing all tests in CI. This means that the main branch is always in a deployable state and ArgoCD in the staging cluster consumes directly from the main branch with the auto-sync feature on. Releases into production need to be triggered manually and can happen less frequently. Although we incorporate time for changes to be tested during the staging process, we have a short feature development cycle and our team is quite comfortable with releasing to prod on Friday evenings. + +‍ + +As with every new Botkube feature, we were the first users. We wanted to make sure that the plugin was easy to use and that it provided value to our users. We also wanted to make sure that the plugin was stable and that it didn't cause any issues in our own ArgoCD instances. We were also able to get valuable feedback from our own team members and use that to improve the plugin. + +‍ + +[Once the plugin is installed](https://docs.botkube.io/configuration/source/argocd/), it automatically configures ArgoCD notifications for all communication platforms supported by Botkube, such as Slack, Microsoft Teams, and Discord. The plugin also provides real-time updates about ArgoCD events, such as "New Application Version Detected" or "Sync Started", detailed change information, and customizable alerts. This aligns with the GitOps philosophy of declarative configuration and enables users to easily monitor and manage their Kubernetes applications. + +The plugin can be installed either via web UI at [app.botkube.io](http://app.botkube.io/) or with the Botkube CLI. + +Botkube install --version v1.5.0 \\ +--set sources.argocd.Botkube/argocd.enabled=true \\ +--set 'rbac.groups.argocd.create'=true \\ +--set 'sources.argocd.Botkube/argocd.config.defaultSubscriptions.applications\[0\].name'=guestbook \\ --set 'sources.argocd.Botkube/argocd.config.defaultSubscriptions.applications\[0\].namespace'=argocd \\ --set communications.default-group.socketSlack.enabled=true \\ --set communications.default-group.socketSlack.channels.default.name=${SLACK\_CHANNEL\_NAME} \\ --set communications.default-group.socketSlack.appToken=${SLACK\_API\_APP\_TOKEN} \\ --set communications.default-group.socketSlack.botToken=${SLACK\_API\_BOT\_TOKEN} ‍ ‍ Of course, the Botkube engineering team uses Botkube in both staging and prod. We have a dedicated channel for Botkube notifications in our Slack workspace and we have configured the Botkube ArgoCD plugin to send notifications to this channel as well. ![Image 4: Showing Kubernetes Cluster created and deleted in Slack with Botkube](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/653a68dff56c4c123324282e_L72F7n2Dmu8c1Ua4Zpyw7FLyLF4LTUh7AjQ8cKUg5u8TguoHXxfwbYBJYMtZjMXCm6PXk3xyEj-dwF83OsRdwoA-RXiMUHSnIQppKb6WnZSim6V8x5_1vp94dlRVuFj7L_fFlwG7Ir_VYrORpIZkzmA.png) + +‍ + +### Setting Up ArgoCD Notifications + +First lesson after enabling the plugin was that setting up ArgoCD notifications, in this case for Slack, was really easy. We just had to point Botkube at which ArgoCD Applications it should watch and the plugin took care of the rest. We didn't have to worry about creating new message templates or event triggers. Botkube took care of all of that for us. After a while of using the plugin, we were happy that the defaults we'd gone with were working well for us. We didn't need to change anything. + +### Real Use Case: Horizontal Pod Autoscaler + +‍ + +The next big lesson was an issue between ArgoCD and the HorizontalPodAutoscaler controller which we found thanks to the incoming notifications. We stored HorizontalPodAutoscaler definition in our git, which then ArgoCD applies to the cluster and the HorizontalPodAutoscaler controller reads it (or rather HPO conversion [webhook](https://github.com/kubernetes/kubernetes/issues/74099)). What we did not know was that the webhook also maintains order of some of the fields and in this case it differed from what we had in git. This caused ArgoCD to think that the resource was out of sync and it kept trying to apply the same definition which the webhook reverted over and over again. Naturally, Botkube kept sending notifications about this: "OutOfSync" and "Synced". We fixed the issue by storing the resource definition in git in the same order as the webhook was expecting it. + +‍ + +Several staging and prod releases have now gone by and the value of the plugin has become clear. Easy path to greater operational awareness. The plugin handled all necessary configuration tasks and we're now able to keep track of changes and ensure consistency across environments. This is important to us especially when we run ArgoCD with auto-sync enabled. + +Conclusion +---------- + +As we continue to improve the capabilities of the plugin, we have identified potential improvements, including the implementation of features like simplified onboarding for a large number of ArgoCD Applications through label selectors or regular expressions. + +‍ + +Your feedback, whether you've already used the plugin or are just considering trying it out, is valuable to us. We encourage you to share your insights and suggestions.The Botkube team welcomes [contributions](https://github.com/kubeshop/botkube) from all its users. Together, we can improve and expand the functionality of this tool for the benefit of the entire community. + +Sign up now! +------------ + +Get started with Botkube! Whether you’re a seasoned Kubernetes pro or just getting started, Botkube has something to offer. Sign up now for free and join the community of users who are already benefiting from the power of Botkube. + +Feedback +-------- + +We welcome developers and Kubernetes enthusiasts to explore the platform and share their valuable feedback. We want to know what you think of Botkube and how we can make it even better. We're doing quick 15-minute interviews to get your feedback, and as a thank you, we'll give you some cool Botkube plushies and t-shirts and enter you into a raffle for a chance to win a $50 Amazon gift card! Just email our Developer Advocate, Maria or use this calendly [link](https://calendly.com/maria-botkube) to sign up.You can also talk to us in the Botkube GitHub issues, connect with others and get help in the Botkube [Slack community](http://join.botkube.io/), or email our Product Leader at blair@kubeshop.io. + +‍ diff --git a/hack/assistant-setup/content/botkube.io__blog__real-time-platform-engineer-advice-ai-assistant.md b/hack/assistant-setup/content/botkube.io__blog__real-time-platform-engineer-advice-ai-assistant.md new file mode 100644 index 0000000..602a46f --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__real-time-platform-engineer-advice-ai-assistant.md @@ -0,0 +1,92 @@ +Title: Real-Time Platform Engineer Advice with Botkube's AI Assistant + +URL Source: https://botkube.io/blog/real-time-platform-engineer-advice-ai-assistant + +Published Time: Mar 06, 2024 + +Markdown Content: +![Image 1: a woman with short hair smiling for the camera](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3fb36b4e60920a3b1b2_hPLC9itV8zp-raGDFmvOZMfn2hV8RFcl237qzT8Wa1g.jpeg) + +Kelly Revenaugh + +Developer Relations Lead + +Botkube + +Imagine having K8s experts available, providing help to your team 24/7. Get real-time, data-driven insights about your Kubernetes clusters without ever leaving your chat window with AI Assistant. + +### Table of Contents + +* [Designed for DevOps Teams with All Experience Levels](#designed-for-devops-teams-with-all-experience-levels) +* [Troubleshoot Kubernetes Errors in Seconds](#troubleshoot-kubernetes-errors-in-seconds) +* [Kubernetes Expertise Directly in Your Chat Platform](#kubernetes-expertise-directly-in-your-chat-platform) +* [Get Started with AIOps for Kubernetes](#get-started-with-aiops-for-kubernetes) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +#### Get started with Botkube Cloud + +‍ + +We’re thrilled to announce our newest Botkube feature, AI Assistant! This game-changing capability makes it easier than ever for teams to identify, diagnose, and troubleshoot issues in any Kubernetes cluster. Powered by a Kubernetes-focused LLM, Botkube provides crucial visibility into Kubernetes events while empowering teams to manage these events through direct communication platforms like Slack or Microsoft Teams. + +This integration goes beyond simplifying your [Kubernetes Observability](https://botkube.io/learn/kubernetes-observability-best-practices) workflow by making troubleshooting more efficient for both experienced and beginner users. + +‍ + +Designed for DevOps Teams with All Experience Levels +---------------------------------------------------- + +Whether your DevOps team is filled with seasoned K8s professionals or those that are getting started on their cloud journey, Botkube’s AI capabilities are designed to cater to the needs and skill level of every user, helping to make Kubernetes management easier for all. + +For experienced teams, the AI Assistant helps simplify and centralize cluster performance optimizations. For users still getting the hang of K8s deployments, our easy-to-understand Kubernetes advice provides useful context and explanations to guide you through the otherwise complex world of Kubernetes. **_It's like having a Kubernetes expert by your side, ready to guide you through every step of troubleshooting and resolution._** + +By bridging the gap between novice and experienced users, Botkube ensures that teams, regardless of their size or individual members' experience levels, can effectively manage their Kubernetes environments. + +### K8s Troubleshooting for Experienced Users + +**‍**Experienced K8s users benefit from having a unified interface that consolidates operational tasks. Execute advanced diagnostic commands, manage resources across multiple clusters, or set up custom alerts for specific events without leaving your chat interface. By leveraging Botkube to streamline workflows, focus is placed on optimization and scalability instead of repetitive checks and needless troubleshooting. With Botkube, seasoned DevOps professionals can: + +* Quickly compare the resource utilization of pods across different namespaces’ + +* Set up intelligent alerts to predict and notify potential issues based on trends in logs and metrics with ease + +* Manage other cluster needs all within their common chat system + +* and a whole lot more + + +Imagine having Kubernetes experts available to you, providing help within your team’s chat platform 24/7. Get real-time, data-driven insights about your Kubernetes clusters without ever leaving your chat window. + +### K8s Troubleshooting for Beginners + +For novices, navigating through Kubernetes' complexity is simplified through intuitive AI-driven suggestions and commands. New users can easily understand the state of their deployments, pods, and services by using plain language queries in the chat interface — bypassing the steep learning curve associated with Kubernetes' command-line tools. For instance, instead of memorizing and typing out complex **`kubectl`** commands, a new user can simply ask "__what is__ __the status of my Kubernetes clusters in the default namespace?__" and Botkube will provide the needed information in seconds without having to switch interfaces. + +Troubleshoot Kubernetes Errors in Seconds +----------------------------------------- + +![Image 2: a screenshot of a chat page with a purple background](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65ea186bc6cc4a02d07a8679_screens1hot.png) + +‍ Integrating AI into Botkube revolutionizes the way users interact with Kubernetes environments, making the debugging and management of Kubernetes clusters more intuitive and efficient. + +Through the 'AI Help' button, users can now execute commands like **`kubectl get pods`** to fetch logs or **`kubectl describe deployment`** for detailed insights into specific resources from Slack or Microsoft Teams. For example, suppose you encounter an error with a deployment. In this case, you can quickly gather logs for a pod in a failing state or retrieve configurations that might be causing issues, such as resource limits or image pull errors. + +In addition, Botkube's AI Assistant can intelligently suggest actions based on the context of the issue. For instance, if there's a Persistent Volume Claim (PVC) issue, you can fetch the status of the PVC and other related events, providing a holistic view helping to diagnose binding problems or storage class misconfigurations. Botkube also gathers information on network policies and ingress rules that might be affecting service connectivity, streamlining what traditionally would have involved multiple steps and commands into a seamless, single-click operation. + +Plain and simple: Botkube makes complex tasks more manageable by streamlining k8s troubleshooting tasks and providing valuable help and context to DevOps professionals of all knowledge levels. Botkube offers a centralized, easy-to-use interface for troubleshooting, that saves time and empowers users to manage Kubernetes environments more efficiently. + +Kubernetes Expertise Directly in Your Chat Platform +--------------------------------------------------- + +Navigating the vast world of K8s error messages is, at times, daunting. We’ve all wondered “what does `PodCrashExitCode` __actually__ mean?” Now, you can leverage the power of Botkube to resolve issues. From general questions about Kubernetes to environment-specific questions like asking for help to identify pods in a default namespace, Botkube makes centralized troubleshooting a reality. + +Once Botkube is connected to your K8s environment, you can prompt questions or commands such as “__What apps are deployed in my cluster?__” or “__Show me the logs for all of my failing pods across all namespaces__” using the `@botkube ai` command. You can also utilize the`Ask AI` button attached to error notifications that are displayed by Botkube. + +Get Started with AIOps for Kubernetes +------------------------------------- + +Getting started with our AI Assistant is straightforward and easy. Available out-of-the-box with every Botkube Cloud instance, existing users who upgrade to the latest version will find integrating the AI Assistant into their workflow intuitive. **New users can [quickly set up Botkube](http://app.botkube.io/) and start benefiting from AI-driven Kubernetes management in minutes.** + +If you are using the OSS version of Botkube, check out [our migration tutorial](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud) to move your set up to Botkube Cloud in minutes and start taking advantage of all the latest features. + +Botkube’s AI Assistant is more than a feature — it’s the Platform Engineer you wish you had by your side 24/7. diff --git a/hack/assistant-setup/content/botkube.io__blog__revolutionize-your-kubernetes-troubleshooting-workflow-with-microsoft-teams-and-botkube.md b/hack/assistant-setup/content/botkube.io__blog__revolutionize-your-kubernetes-troubleshooting-workflow-with-microsoft-teams-and-botkube.md new file mode 100644 index 0000000..7b7a338 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__revolutionize-your-kubernetes-troubleshooting-workflow-with-microsoft-teams-and-botkube.md @@ -0,0 +1,71 @@ +Title: Revolutionize Kubernetes Troubleshooting with Microsoft Teams and Botkube + +URL Source: https://botkube.io/blog/revolutionize-your-kubernetes-troubleshooting-workflow-with-microsoft-teams-and-botkube + +Published Time: Nov 29, 2023 + +Markdown Content: +![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) + +Maria Ashby + +Developer Advocate + +Botkube + +Learn more about Botkube's new and improved Microsoft Teams support! + +### Table of Contents + +* [Benefits of the new Microsoft Teams App](#benefits-of-the-new-microsoft-teams-app-) +* [Getting Started with Botkube’s Microsoft Teams](#getting-started-with-botkube-s-microsoft-teams) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +#### Get started with Botkube Cloud + +In today's fast-paced, hybrid work environment, Microsoft Teams stands as a leader of enterprise communication tools that boasts a staggering 280 million active users monthly as of January 2023, including 91 of the Fortune 100 companies. The adoption of this tool is parallel to the rapid expansion of Azure Cloud services and Azure Kubernetes Service (AKS), that have helped propel organizations toward scalability and seamless deployment of cloud-native applications. + +Microsoft Teams, despite its extensive user base, has been a relatively underserved platform for Kubernetes users, particularly in areas like observability, monitoring, and troubleshooting tools. + +This leads to a critical challenge: **_integrating Kubernetes monitoring and troubleshooting into DevOps team workflows_**. Kubernetes’s complexity demands a sophisticated yet user-friendly solution for collaborative work. + +Enter Botkube, a collaborative Kubernetes troubleshooting and monitoring tool. It assists DevOps teams by allowing developers to troubleshoot applications without needing extensive Kubernetes knowledge. It empowers DevOps teams to work more efficiently by enabling developers to troubleshoot applications without requiring Kubernetes expertise. Botkube significantly improves reliability by delivering timely, context-enhanced notifications about events in Kubernetes environments. This integration facilitates a seamless troubleshooting environment, perfectly tailored to the workflows of Microsoft Teams' user base. Beyond alerting, Botkube allows teams to automate actions based on events, executing kubectl and Helm commands, receiving best practices recommendations, and much more. + +Botkube's new Microsoft Teams helps address the previously unmet needs of Kubernetes users working within the Microsoft ecosystem. This integration creates streamlined Kubernetes management directly within Microsoft Teams, enabling a more effective use of cloud-native functionalities. Particularly beneficial for large enterprises, this integration allows them to fully harness the capabilities of Botkube. They can now monitor and manage Kubernetes clusters within Microsoft Teams, leveraging the array of tools available in the cloud-native space for optimized, large-scale operations. + +The setup process is streamlined, making Kubernetes troubleshooting not only collaborative but also straightforward. Our vision is clear: **to optimize your team's workflow, boosting efficiency at every turn**. The new, simplified installation cuts through the complexity, saving your team invaluable time and effort. + +![Image 2: Botkube Cloud MS Teams List Instances](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/656a220f7060426086a6dbd9_cloud_teams_list_instances-0079ca8c5f306a230342b447ef8f31cb.png) + +Benefits of the new Microsoft Teams App +--------------------------------------- + +### Time Savings and Increased Efficiency + +Streamlining the installation process saves valuable time that teams would otherwise spend navigating complex setups. This efficiency is crucial in DevOps environments where time is often a critical factor. Faster installations mean teams can begin leveraging Botkube's functionalities in less than an hour, leading to more robust monitoring and management of Kubernetes environments. + +### Broader Accessibility and Adoption of Cloud Native tools + +Botkube's integration with Microsoft Teams provides users with direct access to a range of cloud-native tools such as [Prometheus, Helm, Keptn, Flux, and Argo CD](http://botkube.io/integrations), all within a single platform. These tools simplify the process of managing Kubernetes by allowing users to utilize these tools together. The integration enables the automation of various tasks, combining different cloud-native tools for an effective Kubernetes troubleshooting and management experience within the Microsoft Teams environment. + +‍ + +![Image 3: a screenshot of the google analytics dashboard](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6567879667dde77a83a5861b_p-Naa0ZdnovPq_SSVldIS1NhIah6tTIxeofzBX1tOEUJL7dmMubUhdobLqieWsTnIDdatibAbRqNC7dkwN_xYIje3QqjqgDWHO49bMbAkwBIyCtTM2h5gAbhBVBh1OJavuANnxvvOxS4Z5l_OLumnzI.png) + +### Improving Reliability + +Get Kubernetes monitoring up and running fast. Botkube gives you reliable Kubernetes monitoring in minutes, not days. With powerful filtering, Botkube gets the right notifications to the right teams. Lighten their workload by automating responses to common problems. Accelerate mean time to recovery by receiving alerts, troubleshooting, and resolving issues all in Microsoft Teams, the collaboration platform where you already spend much of your time. + +### Enhanced Collaboration in Teams Environment + +Botkube's integration with Microsoft Teams streamlines the collaborative process in managing Kubernetes. It allows teams to share insights and data effectively within a familiar platform, enhancing decision-making and teamwork. The integration offers two key features: data presentation in an easily understandable table format for quick access to Kubernetes information, and the ability to download or preview comprehensive outputs like ‘kubectl describe all’ as PDF files. These featuresimprove readability and information management while also facilitating better documentation and sharing within the Microsoft ecosystem. + +‍ + +![Image 4: a screenshot of a page with a message and a button](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65678794b1beb119ed7c14c8_t7Oj6aNKqMZhSXW1SgyrrWxobf3im5J0ypr0E0_DuJfBxrGmbemFqH02ZCBWIhQiDoPKnmR_UR5VeMNUrf4Fgcn89JSWMLkWZgBBDvR7_iEZ-_UDxC0gvdTlFWpJgeH4Z2ffYMywev5vyMhP3xIkMPg.png) + +Getting Started with Botkube’s Microsoft Teams +---------------------------------------------- + +Try it for yourself! Follow our [step-by-step tutorial](https://botkube.io/blog/maximize-your-devops-teams-efficiency-with-botkube-and-microsoft-teams) to set up Botkube using our web app or check out our [engineering blog](http://botkube.io/blog/microsoft-teams-integration-for-botkube-a-technical-journey) for a deep dive about how we made the new teams app. We're excited to hear how you use Botkube. Create a support ticket directly in the dashboard, share your stories with us in the [Botkube Slack community](https://join.botkube.io/) or [email our Developer Advocate, Maria](http://maria@kubeshop.io/). We’ll even send you some cool swag as a thank you. diff --git a/hack/assistant-setup/content/botkube.io__blog__scaling-new-heights-taking-botkube-to-scale-20x.md b/hack/assistant-setup/content/botkube.io__blog__scaling-new-heights-taking-botkube-to-scale-20x.md new file mode 100644 index 0000000..28fcdb2 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__scaling-new-heights-taking-botkube-to-scale-20x.md @@ -0,0 +1,49 @@ +Title: Scaling New Heights: Taking Botkube to SCaLE 20x + +URL Source: https://botkube.io/blog/scaling-new-heights-taking-botkube-to-scale-20x + +Published Time: Mar 21, 2023 + +Markdown Content: +![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) + +Maria Ashby + +Developer Advocate + +Botkube + +Botkube had their first devrel appearance of 2023 at the Southern California Linux Expo. In this blog, we'll explore the experience and insights from the event, including trends in the community and exciting encounters with other members of the tech community. + +### Table of Contents + +* [First Day - GitOps Workshops](#first-day-gitops-workshops-) +* [Second Day - Helping the Cloud Native Computing Foundation (CNCF) Booth](#second-day-helping-the-cloud-native-computing-foundation-cncf-booth-) +* [Conclusion](#conclusion) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +As I entered the Pasadena Convention Center for the Southern California Linux Expo, I felt a buzz in the air that set this event apart from others I'd attended before. This time, I was there to represent Botkube solo, which brought an added level of excitement. + +First Day - GitOps Workshops +---------------------------- + +On the first day of the event, I attended a GitOps workshop hosted by the Kubernetes Community Day. In simple terms, [GitOps](https://botkube.io/blog/enhancing-gitops-workflows-with-botkube) is a development methodology that uses a Git repository as the source of truth to manage and deploy applications and infrastructure. It automates the deployment process by using tools to trigger changes whenever there are updates to the Git repository. GitOps has become increasingly popular because of its ability to streamline the deployment process. This was reflected in the wide variety of attendees at the GitOps event. There were people from all sorts of industries and levels of Kubernetes proficiency in attendance. We are all tied together by our desire to learn more about GitOps deployment and an absence of plans on a Thursday afternoon. It was beginner-friendly, requiring only a laptop, a GitHub account, and a desire to learn more about GitOps. Although I had a basic understanding of GitOps development, I had never worked with it in a hands-on environment. But after just three hours, I was able to walk away with an intermediate understanding of how to use Flux and deploy a Go app successfully. Throughout the workshop, we went through topics like granting permissions, working with GitHub Actions, and creating alerts for events. + +During the workshop; I gained a deeper appreciation for the practical benefits of using Botkube. Manually setting up web hooks for slack alerts can be a tedious and downright frustrating task, especially when you're dealing with large-scale projects. Its streamlined approach to slack alerts is intuitive and user-friendly, making it a valuable tool to have in your arsenal. However, the most important thing I took away from the workshop was a sense of empowerment. It reminded me of the feeling I had when I first installed Botkube - that I could achieve more than I thought possible. A [Flux integration](https://botkube.io/integration/botkube-flux-kubernetes-integration) is definitely in the cards for my upcoming Botkube plug-in development series. + +Second Day - Helping the Cloud Native Computing Foundation (CNCF) Booth +----------------------------------------------------------------------- + +The following day, I took up my position at the [CNCF](https://www.cncf.io/) booth, armed with stickers, Legos, and a deep passion for open source. While working at the booth, I had the opportunity to observe the state of the community and the latest trends. Unlike other exhibitors, I wasn't there to sell anything, which allowed me to take a step back and analyze the bigger picture. One trend that caught my attention was the continued strength of the Argo and Flux communities. These platforms are helping to make continuous deployment more accessible to developers of all skill levels. This reinforces my belief that GitOps and platform engineering are here to stay and will only become more important in the years to come. + +![Image 2: Maria Ashby running the Cloud Native Computing Foundation Booth](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/641a062c9e98ce9131ed2cc1_botkube-image.jpg) + +I also noticed that security remained at the forefront of everyone's minds. Talks on supply chain security and role-based access control (RBAC) were particularly well-attended. This further emphasizes the importance of cybersecurity in the cloud native space. + +Conclusion +---------- + +Beyond my community research, I had a blast connecting with other members of the tech community at SCaLE 20x. One standout encounter was with a high school robotics team that had developed an open-source streaming server. I was truly impressed by their ingenuity and dedication to the craft, and it was a great reminder that the future of open source is in good hands. + +Overall, despite the rainy weather, I thoroughly enjoyed my time at SCaLE 20x and am eagerly looking forward to what Kubecon EU has in store! diff --git a/hack/assistant-setup/content/botkube.io__blog__simplify-kubernetes-with-botkubes-ai-developer-self-service-made-easy.md b/hack/assistant-setup/content/botkube.io__blog__simplify-kubernetes-with-botkubes-ai-developer-self-service-made-easy.md new file mode 100644 index 0000000..aa1d4e2 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__simplify-kubernetes-with-botkubes-ai-developer-self-service-made-easy.md @@ -0,0 +1,95 @@ +Title: Developer Self-Service Made Easy with Botkube AI Assistant + +URL Source: https://botkube.io/blog/simplify-kubernetes-with-botkubes-ai-developer-self-service-made-easy + +Published Time: Apr 04, 2024 + +Markdown Content: +![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) + +Maria Ashby + +Developer Advocate + +Botkube + +Discover how Botkube AI's simplifies Kubernetes troubleshooting for devs with natural language interactions, and seamless integration for enhanced productivity. + +### Table of Contents + +* [Challenge: Developers struggle with Kubernetes complexity](#challenge-developers-struggle-with-kubernetes-complexity) +* [‍Solution: Botkube Empowers Developers with Self-Service and Collaboration](#-solution-botkube-empowers-developers-with-self-service-and-collaboration) +* [How Botkube Simplifies Kubernetes for Developers](#how-botkube-simplifies-kubernetes-for-developers) +* [Empowering Developers with Automation](#empowering-developers-with-automation) +* [Conclusion: Transform Your Kubernetes Workflow with Botkube](#conclusion-transform-your-kubernetes-workflow-with-botkube) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +#### Start Using Botkube AI Assistant Today! + +Kubernetes continues to reign supreme as the chosen tool for managing and scaling applications. But its power comes at the price of complexity. Developers are increasingly feeling pressure to master Kubernetes which often leads to communication challenges, often slowing down the engineering process. The industry is flooded with tools promising to effortlessly solve all Kubernetes challenges. However, the need for developer-friendly Kubernetes solutions is not new. Botkube, a Kubernetes Troubleshooting AI assistant, simplifies Kubernetes management and empowers developers to access their Kubernetes resources without relying on their DevOps team. + +Challenge: Developers struggle with Kubernetes complexity +--------------------------------------------------------- + +Kubernetes, while incredibly useful, presents developers with significant challenges. Its intricate ecosystem of resources, configurations, and tools creates a steep learning curve for developers who don’t use it daily. Making matters worse, limited access to Kubernetes resources in production environments hinders developer troubleshooting. Developers often can’t directly inspect logs and other resources when their applications have errors, due to the strict security access SREs maintain over production environments, limiting the permissions developers have.This reliance on DevOps, SRE, or platform engineering teams to constantly answer resource requests from developers creates communication and development cycle delays. + +‍**Solution: Botkube Empowers Developers with Self-Service and Collaboration** +------------------------------------------------------------------------------ + +![Image 2: a screenshot of a chat window on a computer screen](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65ee1a5d521144e87f59161e_Botkube%20AI%20Assistant%20-failing%20GIF.gif) + +Botkube revolutionizes the developer experience by seamlessly integrating Kubernetes management into communication platforms like [Slack and Microsoft Teams](https://botkube.io/integrations).We understand how frustrating it can be for DevOps teams dealing with these challenges. Here's how it empowers developers: + +#### Direct Kubernetes Access for a Code-First Focus + +Developers can directly manage Kubernetes resources within their usual communication tools (like Slack or Microsoft Teams). For example, instead of navigating the Kubernetes dashboard or using the command line, a developer could send a message like `@Botkube AI retrieve my logs for my failing app` in their team channel to retrieve their logs. This simplifies their workflow and lets them focus on building features. + +#### AI-Powered Interaction for Streamlined Workflows + +Botkube's AI assistant lets app developers control their Kubernetes cluster using everyday language. Instead of memorizing the exact kubectl syntax to check their application's status, a developer could simply ask Botkube, `@Botkube AI What's the status of my inventory management app?` This simplifies Kubernetes interaction and lets developers quickly get the information they need. + +#### Cross-Team Collaboration for Enhanced Teamwork + +By connecting Kubernetes to your team's communication channels, Botkube fosters a collaborative environment where developers can quickly seek guidance, share insights, and troubleshoot problems together. This fuels rapid problem-solving and knowledge sharing. + +**How Botkube Simplifies Kubernetes for Developers** +---------------------------------------------------- + +![Image 3: a screenshot of a twitter page showing a message](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65e8a0387271b3eec14634d8_Co_cwk72Ki64q1a3A6OAcxn0qQvCjlhWWlTtBLPzMwhPjvVn6oHn-e2_L4twExmcpGAuis9bZKJXC2JRzuOzxMXg5MsbAugaCwe1xt5GUqWsnbug3CQkm7uGo7GX2g4dgTc-TCK1oScC7aUd82RMlG4.png) + +#### Natural Language Interaction + +Forget complex Kubernetes commands! Botkube's AI assistant empowers developers to interact with their Kubernetes cluster using natural language. Simply ask "what's wrong with my cluster?," and Botkube will provide an in-depth explanation of any potential issues. This intuitive approach removes the barrier of remembering or looking up complex commands, making Kubernetes more accessible to developers of all experience levels. + +#### Streamlined Issue Tracking + +Botkube seamlessly integrates with your existing workflows. It monitors your Kubernetes cluster and can be configured to automatically respond to alerts and errors. When an issue occurs, the AI assistant gathers relevant logs and data, then creates a detailed GitHub issue. + +Empowering Developers with Automation +------------------------------------- + +Botkube gives developers the tools to automate critical Kubernetes tasks, like deploying applications or managing resources, which saves time and boosts efficiency. For instance, instead of manually typing out kubectl commands to update an app, developers can set up Botkube to do it automatically with a simple message in Slack. Botkube not only saves time but also enhances the team's ability to preemptively address potential issues. + +#### Botkube Simplifies Log Analysis and Troubleshooting + +Botkube integrates with your existing kubectl workflow, supplementing it with intelligent log analysis. It gathers logs from your Kubernetes environment and uses AI to identify patterns, anomalies, and potential root causes. For example, if your application is throwing frequent "out of memory" errors, Botkube can analyze logs and tell you that a specific container within your deployment needs its memory limits adjusted. This helps developers proactively address potential stability issues before they cause major outages. + +#### AI-Powered Troubleshooting for Faster Resolution + +Botkube's AI assistant integrates within team communication platforms, delivering direct access to Kubernetes insights and troubleshooting support. This accessibility allows developers to quickly interact with their clusters, diagnose problems, and escalate issues within familiar channels, without the need to constantly switch tools. + +**Conclusion: Transform Your Kubernetes Workflow with Botkube** +--------------------------------------------------------------- + +![Image 4: a screen shot of a conversation between two people](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64b96a341b5ccb59ffb87637_act-on-events.gif) + +[Botkube's AI Assistant](https://botkube.io/blog/explore-the-new-era-of-aiops-with-botkubes-ai-assistant) signifies a step forward in Kubernetes management, introducing AI-enhanced troubleshooting and operational efficiency to the developer's toolkit. By simplifying Kubernetes operations, Botkube enables developers to self-serve and access data more easily, reducing the workload on Ops teams and making the platform more user-friendly and dependable.Integrating Botkube into your team’s workflow is the first step toward unlocking a more efficient, AI-driven Kubernetes ecosystem, elevating the developer experience to new heights. + +### **Getting Started with Botkube’s AI Assistant** + +Activating Botkube’s AI assistant is straightforward, with no extra setup required. [Sign up for Botkube,](http://app.botkube.io/) link your Kubernetes cluster following our [easy instructions](https://botkube.io/blog/get-botkube-running-in-under-3-minutes-the-new-slack-app), and get started with the AI assistant. + +Use the `@Botkube ai` command for real-time, context-aware advice via your messaging platform, transforming Kubernetes management into an intuitive, efficient process. + +Happy Troubleshooting! diff --git a/hack/assistant-setup/content/botkube.io__blog__step-by-step-tutorial-leveraging-botkubes-cloud-slack-feature-for-kubernetes-collaborative-troubleshooting.md b/hack/assistant-setup/content/botkube.io__blog__step-by-step-tutorial-leveraging-botkubes-cloud-slack-feature-for-kubernetes-collaborative-troubleshooting.md new file mode 100644 index 0000000..e71f158 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__step-by-step-tutorial-leveraging-botkubes-cloud-slack-feature-for-kubernetes-collaborative-troubleshooting.md @@ -0,0 +1,121 @@ +Title: Leveraging Our Cloud Slack for K8s Collaborative Troubleshooting + +URL Source: https://botkube.io/blog/step-by-step-tutorial-leveraging-botkubes-cloud-slack-feature-for-kubernetes-collaborative-troubleshooting + +Published Time: Jul 06, 2023 + +Markdown Content: +![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) + +Maria Ashby + +Developer Advocate + +Botkube + +This step-by-step tutorial gets you started with Botkube Cloud Slack App, which enables collaborative troubleshooting by seamlessly integrating with your organization's Slack workspace. + +### Table of Contents + +* [Creating Botkube Cloud Account](#creating-botkube-cloud-account) +* [Connecting Kubernetes Cluster to Slack](#connecting-kubernetes-cluster-to-slack) +* [Conclusion](#conclusion) +* [Sign up now](#sign-up-now) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +![Image 2: Diagram of how Botkube connects K8s Clusters to Slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a709cc5761791c793a83cb_FXqJSS9KtaIOKugq8s7dLxGlnmtLjrwb6L7gurT9lYJdDRz12RFZoLngWUxSDtvrMKpEnhFCEKOroy2rvA9MJiSEZV4DUJwBa58Vl2JiUXfXJ6b3RrHK-sXsLbaqGbijRlnbXXLmuqKB6ckrNR36yFE.png) + +‍ Botkube is a powerful tool designed to streamline incident and event response in Kubernetes environments. With its [Cloud](https://app.botkube.io/) [Slack integration](https://botkube.io/integration/slack), Botkube enables collaborative troubleshooting by seamlessly integrating with your organization's Slack workspace. In this tutorial, we will walk you through the step-by-step process of setting up and utilizing Botkube's new Cloud Slack feature, empowering your team to effectively create a kubernetes connection to slack and manage multiple Kubernetes clusters to improve incident resolution time + +This blog post assumes that we're starting a completely new Botkube installation, but will show the quickest way to get Kubernetes alerts into Slack. + +Requirements: + +* A Slack workspace where you have permission to install apps and create channels +* A Kubernetes cluster where you have access to install Botkube +* Working kubectl and helm installation +* A [Botkube Cloud](https://app.botkube.io/) account + +Here's a video walkthrough of the installation: ‍ + +Creating Botkube Cloud Account +------------------------------ + +1. On the Botkube [homepage](https://botkube.io/), locate the “Get Started” button and click on it. This will take you to the account registration page. +2. Fill in the required information in the registration form. You can sign up with your email address or Github account. + +Connecting Kubernetes Cluster to Slack +-------------------------------------- + +3. Select either the Wizard or the Block builder method to initiate the setup process for Botkube's Cloud Slack integration. + +![Image 3: Easy one click Kubernetes deployment for cloud](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a709dfd8e90bc79339fcd0_cQKP0DfzGkbQO4R8kCAnqr54pgSa_IKaPa756N-FFua5n9N1omSH9fg9nGI1JYNjRS6ZmkbNUYrZLK1Z2BmTjPVHBDP0U9jNpidqq7RIqKWJScUJ32pOPryOAp49HR6OoerKN7yJSu6yHr2DU1GDaoo.png) + +‍ + +4. Next, enter your instance display name. + +![Image 4: K8s cluster building GUI](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a709efd8e90bc7933a1393_nAeC7-04jk70WellyEP2GM4m75jP4jrLhnmbjAkZr3rLlNi7zaD2bMLx8rvebpfqFIrvB8OSIxIqKezCZngk7ooCH6WAOT_1PBSQKz-sAAl9WRSq-GqtR1gmHmwC87Oq443Bzdu_sMKsHw-_g8Jwrfo.png) + +5. Select the Official Botkube Slack option. (Note this option requires you to sign up for a 30 day free trial) + +![Image 5: Official Slack Kubernetes bot](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a709ffd8e90bc7933a2249_3GYyjQn-Uklnp1Bn8T7YmSOdKEaFnl3idDQcYJiD1mx7xeBbr6yvoRgbLI3Fir7TaW4a1N8l4tgB_Zbt6b3XryqzyYff4z1I_nffpWkoS6Hx7yPmmTrk2Z9tnAlXWUoM_VrAm0iBje2a8oaIiaGxRx0.png) + +‍ + +6. Access the app settings within Slack to configure the integration with Botkube. Click the "Add Slack" button to initiate the process. +7. Select the workspace within Slack where you want to utilize Botkube. You will now have access to public and private channels, enabling seamless communication and collaboration for Kubernetes troubleshooting tasks. + +![Image 6: Multicluster setup screen for Slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a70a0bae43806c67551203_v-0W_ZDNIBT2Z7lbvKemYUyidm6L4ftXfEXxY9t0i5d6NB3_A_wrkVIluEVKfh8ZCCSYan2mS8PfS0YXm8DmViUyII5FXmmaLUPy6deAhqmYypJr0mZCg8aOo1FckVZaX3LOlTK6Epso_FqKUAde3Qw.png) + +‍ + +8. To include Botkube in private channels, utilize the "Add to Channel" feature. This ensures that Botkube is present in relevant channels where Kubernetes-related discussions and incident responses take place. + +![Image 7: One click slack sign in](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a70a1d00209556840fc2aa_qCmpnXKLE-S-5GKx1PijNsYeJOqKsWffvD0NIp708myAL6SynM44bx0khhpKpQCX-LnUoIQ2t5JAbqjdOfxrQSxIJPZWLRKYrX0O1lKJJQQj0hmkIM_5ADswoPXLaRPrMmLwAtVCSAsGEbySEsGW0WY.png) + +‍ + +9. Select the Plugins you would like to use. Helm, kubectl, and kubernetes source are the botkube default plug-ins. + +![Image 8: Add plugins to your Kubernetes Cluster quickly with Botkube](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a70a29a107604e69f10a44_EqV_jhVu5WsrFY2awVlpBZ5UGrulD-EtQrKoYnYoyZP-7TuapKozeQFXiLnQB3g0sUT8YdFZX_yYBgeaJUHhuXpYq3fUuaV9SyJgI0MAwYeJM3to-VfmwRuNyLOkBupW9r32e61df73T4HIa50KMVlc.png) + +‍ + +10. Click the create button +11. Copy and paste the helm commands into your terminal and then click next + +![Image 9: Helm command to copy into command prompt](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a70a33b3210007e280a92a_kqmlF1iCEr1KDQYsMNCGC83a_ZPx0agVAUb6crdZHQOONeg4BlQbwXSWferYj26OZkxyG2cRZ7jtLoDQtbUdEQ9eriQ-KmQmeBcLGxc7QQTtraL3VOAUQW0rNCWGNjJj5HBdzIv8lbk6HgjLwIJwTNM.png) + +‍ + +12. You should see your Botkube instance being created. + +![Image 10: Slack Kubernetes integration setup complete](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a70a3e978de29171f3a547_pjoT_YHQoMpAqVlVcPpsEl0oupPk1cJLMMLXHbehvipxrb0tni3hVtXkLE52YZMypptKk1Uozszf0pPUCN_SpzzP4W49mZy7NwJfLYWEGMBpwjHwIvIvD--mO22yCj9kV3wE4T8jIA532dDf2oUzVY0.png) + +‍ + +### Let’s see it in action + +![Image 11: ChatOps for Kubernetes in Slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a70a5bb3210007e280d3f8_Untitled%20design.gif) + +The new Botkube Cloud Slack app adds some great features that weren't previously available, particularly around multi-cluster management. With new **@botkube cloud** commands you can easily navigate between instances. By using **"@botkube cloud list instances**," you can conveniently view your connected deployments. You can also establish a default instance for a specific workspace and easily switch between them using our slack interactivity feature. Increase your team’s efficiency with the ability to run commands across all your connected clusters by simply adding " **\--all-clusters.**" This feature saves you valuable time and lets you manage all your resources with a single command. + +Conclusion +---------- + +Botkube's [Cloud Slack integration](https://botkube.io/integration/slack) offers a range of key features and functionalities. From seamless [incident response](https://docs.botkube.io/usage/automated-actions) to enhanced [resource monitoring](https://docs.botkube.io/usage/source/prometheus/), Botkube empowers teams to troubleshoot and manage Kubernetes clusters effectively. Utilizing Botkube's Cloud Slack feature is crucial for teams seeking to optimize Kubernetes workflows and streamline troubleshooting processes. By leveraging Botkube, teams can improve incident resolution time, collaborate efficiently, and enhance overall operational efficiency in Kubernetes environments. + +‍ Integrate Botkube's Cloud with Slack to enhance your Kubernetes operations and improve incident response and collaboration. By utilizing Botkube's powerful features, you can streamline troubleshooting processes and achieve quicker resolutions for any Kubernetes-related issues. + +Sign up now +----------- + +Get started with [Botkube](https://app.botkube.io/)! Whether you're a seasoned Kubernetes pro or just getting started, Botkube has something to offer. Sign up now for free and join the community of users who are already benefiting from the power of Botkube. + +### Feedback + +We welcome developers and Kubernetes enthusiasts to explore the platform and share their valuable feedback. We want to know what you think of Botkube and how we can make it even better. We're doing quick 15-minute interviews to get your feedback, and as a thank you, we'll give you some cool Botkube plushies and t-shirts and enter you into a raffle for a chance to win a $50 Amazon gift card! Just email maria@kubeshop.io or use this calendly link to sign up. + +You can also talk to us in the Botkube GitHub [issues](https://github.com/kubeshop/botkube/issues), connect with others and get help in the Botkube Slack community, or email our Product Leader at [blair@kubeshop.io](mailto:blair@kubeshop.io). diff --git a/hack/assistant-setup/content/botkube.io__blog__streamlining-gitops-with-the-botkube-flux-plugin.md b/hack/assistant-setup/content/botkube.io__blog__streamlining-gitops-with-the-botkube-flux-plugin.md new file mode 100644 index 0000000..cd8e2ea --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__streamlining-gitops-with-the-botkube-flux-plugin.md @@ -0,0 +1,213 @@ +Title: Tutorial: Streamlining GitOps with the Botkube Flux Plugin + +URL Source: https://botkube.io/blog/streamlining-gitops-with-the-botkube-flux-plugin + +Published Time: Sep 01, 2023 + +Markdown Content: +![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) + +Maria Ashby + +Developer Advocate + +Botkube + +Learn how to set up Botkube with Flux and GitHub-events plugins in this step-by-step tutorial. Configure permissions, insert tokens, and install seamlessly. + +### Table of Contents + +* [Prerequisites](#prerequisites) +* [Using the Flux Plugin in Action](#using-the-flux-plugin-in-action) +* [Conclusion](#conclusion) +* [Sign up now!](#sign-up-now-) +* [Feedback](#feedback) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +#### Get started with Botkube Cloud + +In today's fast-paced world of Kubernetes management, embracing GitOps is a crucial step towards efficient collaboration and automation. However, it comes with its own set of challenges. Enter [Botkube](https://botkube.io/), a Kubernetes collaborative troubleshooting tool for Kubernetes that seamlessly integrates with popular collaboration platforms like [Slack, Microsoft Teams, Discord, and Mattermost](https://botkube.io/integrations). Botkube not only simplifies alert management but also optimizes GitOps workflows by enhancing automation, real-time collaboration and centralizing knowledge. Learn more about Botkube’s move towards [GitOps](https://botkube.io/blog/enhancing-gitops-workflows-with-botkube) and the new Flux Plugin in our [release announcemen](https://botkube.io/blog/introducing-botkubes-integration-with-flux)t. In this tutorial, we will explore the Botkube Flux plugin, a powerful tool that automates notifications, enhances GitOps practices, and simplifies the interaction between Kubernetes clusters and GitHub repositories. By the end of this tutorial, you'll have a solid understanding of how to create, configure, and leverage the Botkube Flux plugin to streamline your GitOps workflow. + +Prerequisites +------------- + +Before we dive into the tutorial, make sure you have the following prerequisites ready: + +* A GitHub account with access to tokens +* Basic familiarity with Kubernetes and its components. +* Access to a Kubernetes cluster with helm installed +* Access to Slack workspace +* A Botkube Cloud Account + +‍ + +### Creating Botkube Cloud Account + +1. On the Botkube [homepage](https://botkube.io/), locate the “Get Started” button and click on it. This will take you to the account registration page. +2. Fill in the required information in the registration form. You can sign up with your email address or Github account. + +* Click [here](https://botkube.io/blog/step-by-step-tutorial-leveraging-botkubes-cloud-slack-feature-for-kubernetes-collaborative-troubleshooting) for a more indepth Botkube installation tutorial + +![Image 2: Easy one click Kubernetes deployment for cloud](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a709dfd8e90bc79339fcd0_cQKP0DfzGkbQO4R8kCAnqr54pgSa_IKaPa756N-FFua5n9N1omSH9fg9nGI1JYNjRS6ZmkbNUYrZLK1Z2BmTjPVHBDP0U9jNpidqq7RIqKWJScUJ32pOPryOAp49HR6OoerKN7yJSu6yHr2DU1GDaoo.png) + +### Connecting Kubernetes Cluster to Slack + +Select either the Wizard or the Block builder method to initiate the setup process for Botkube's Cloud Slack integration. + +1. Next, enter your instance display name. + +![Image 3: K8s cluster building GUI](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a709efd8e90bc7933a1393_nAeC7-04jk70WellyEP2GM4m75jP4jrLhnmbjAkZr3rLlNi7zaD2bMLx8rvebpfqFIrvB8OSIxIqKezCZngk7ooCH6WAOT_1PBSQKz-sAAl9WRSq-GqtR1gmHmwC87Oq443Bzdu_sMKsHw-_g8Jwrfo.png) + +2. Select the Official Botkube Slack option. (Note this option requires you to sign up for a 30 day free trial) + +![Image 4: Official Slack Kubernetes bot](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a709ffd8e90bc7933a2249_3GYyjQn-Uklnp1Bn8T7YmSOdKEaFnl3idDQcYJiD1mx7xeBbr6yvoRgbLI3Fir7TaW4a1N8l4tgB_Zbt6b3XryqzyYff4z1I_nffpWkoS6Hx7yPmmTrk2Z9tnAlXWUoM_VrAm0iBje2a8oaIiaGxRx0.png) + +3. Access the app settings within Slack to configure the integration with Botkube. Click the "Add Slack" button to initiate the process. +4. Select the workspace within Slack where you want to utilize Botkube. You will now have access to public and private channels, enabling seamless communication and collaboration for Kubernetes troubleshooting tasks. + +![Image 5: Multicluster setup screen for Slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a70a0bae43806c67551203_v-0W_ZDNIBT2Z7lbvKemYUyidm6L4ftXfEXxY9t0i5d6NB3_A_wrkVIluEVKfh8ZCCSYan2mS8PfS0YXm8DmViUyII5FXmmaLUPy6deAhqmYypJr0mZCg8aOo1FckVZaX3LOlTK6Epso_FqKUAde3Qw.png) + +‍ + +5. To include Botkube in private channels, utilize the "Add to Channel" feature. This ensures that Botkube is present in relevant channels where Kubernetes-related discussions and incident responses take place. + +![Image 6: One click slack sign in](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a70a1d00209556840fc2aa_qCmpnXKLE-S-5GKx1PijNsYeJOqKsWffvD0NIp708myAL6SynM44bx0khhpKpQCX-LnUoIQ2t5JAbqjdOfxrQSxIJPZWLRKYrX0O1lKJJQQj0hmkIM_5ADswoPXLaRPrMmLwAtVCSAsGEbySEsGW0WY.png) + +‍ + +6. Select the Plugins you would like to use. + +### Enabling the Plugin + +![Image 7: a screenshot of the google analytics dashboard](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f219c6901138bd3fb3ecbb__JgXw9_EzpdpHItfymUJr5owqit0mMnoORy7I1PApaua66YV3GKd00wMc4TYYSpNpW-uhYDgGc0FHywymRF2Zf4tGny-TIORkO8LdDfmwTFyuOX5gDR4-najpP4gOHJs7XZ0TgmsOm_kCGFu08ZuRWw.png) + +‍ + +1. Select the Flux and GitHub-events Plugin + +* Begin by selecting the Flux and GitHub-events plugins within your Botkube setup. +2. Insert Your GitHub Access Token + +* To do this, navigate to your GitHub developer settings. + +* Locate your GitHub access token and copy it. + + +* Insert the copied access token into the appropriate field within the Flux plugin settings. + +![Image 8: a screen showing the settings for a github channel](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f218c651c3be1367d23eb4_RxmxZInIIFLvZUTkgh63JlGBKnJlN1oGd5RW1NGQ6dM0ZPgnXaTXJ48wRFBDJWzUvNlIo5H9PuOEBMbB_rCh15bW_VK2f3uXPwOl_y2P7QLtzLNs2aIZBukjuu2WQGfkJD3LznRWAQy-CropKTSXxbc.png) + +‍ + +‍ + +3. Configure Permissions + +* In the Flux plugin settings, select the "Permissions" tab. + +* Choose the "Custom" option. + +* Under the custom permissions, select the "Group" option + +* Next, update the permissions for RBAC (Role-Based Access Control). + + +* Add "flux-write" and "flux-read-patch" permissions since they are required for using the "flux install" command. + +![Image 9: a screenshot of a google adwords configuration screen](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f218e2755212a14074243d_bvJGmOwBNt4TLjh_yde1mlTZ_X-b0Mk-pXbKoJP3iLSNfw3ilvM_21hkaj0M5qAP8W04glEk1aWetaklzfuvZGGNBmmQefuFjt-4LWGz-WF2XTIsFnIcNliGTAL_izF_RQfj-6OjcUihJYdk66t2jkM.png) + +‍ + +4. Configure GitHub-events Plugin + +* Now, select the GitHub-events plugin +5. Insert GitHub Access Token + +* Insert the same GitHub access token that you used for the Flux plugin into the GitHub-events plugin settings. + +![Image 10: github events experimental source plugin](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f21921f9104d28d7620904_a-5ZlAVnumBSl5orUqAAU2Ma0aWx3xrJ7QjVRWZU-IKvraswRku8RkYh4Ax6QRo_W0lvDHnhGTCRKQm0dF3U-kyVq_1c6THoimLnlRy0uw8oZ0mahQbCxZKINNbdCKTVbNfoSr0KgqF-w9A8YG5fGe0.png) + +‍ + +6. Repository Configuration + +* Scroll down to the "Repository Configuration" section. + +* Insert the name of your repository into the appropriate field. + +* Scroll further down to the "Pull Request Matcher" section. + +* Select the types of pull requests you want Botkube to check for. + +* For this demo, choose the "open" option. + + +![Image 11: a screenshot of the repo configuration screen](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f2193d26a35a2059f5a9c2_zV2W8j7eAJbfFdR_eFsbWZQdpJmZY0uXib1XCLCk9HR3n8XuQuCnnmy8T0Lk_eSWv6ZVPy2iTd_KHrhLUvGlSI0kN6OVtwI4K9dLHYxUW_wR3piuJYV0KDB4Hsh9hFOBW-SrYC0bRe2GPg_0bxGLekU.png) + +‍ + +* In the same section, locate the "File Pattern" field. + +* Type in the file path that you want pull requests to match. + +* For this demo, use your "kustomize" folder. + + +![Image 12: a screenshot of the file patterns page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f2194b9e5c70cd869dbfb4_X_x4cE-nGwjogL8wBWDcCQOeuxeHW-JzGMp6YmgOJEU1rK9z-79prBw2HNnmkXnmJCBkraY_qsRPwBGuxXfzWFqY1PtocW51l3qfly2Gsu0ToaPZb62pcIR_O-hlNBKu5T_tN7cwrgixqPNxAkDObQc.png) + +‍ + +7. Click the "Submit" button to save your configurations. + +* If desired, configure any additional plugins you want to use at this stage. + +![Image 13: a screen shot of the google analytics dashboard](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64f2195fe9284fa6e17e51d1_9T2t8y3gIhVQPV4qHiXUcKwdYB_vYQ2wV06O1P7wM1zxib3rJlv8h2oTNW25bNehjGHDtQ2qYWwRy_96GYdI-bvl-0yEIKUjmfTqrARjZU4GcgVySZCldUnKHrlA5JjVwEXkxAFnyHu3SFQP4NMbok8.png) + +‍ + +8. Click "Next" to proceed to the installation step. + +9. On the next page, you will have the option to also enable [Command Alias](https://botkube.io/blog/command-line-magic-simplify-your-life-with-custom-kubernetes-kubectrl-aliases-on-botkube) and [Botkube Actions](https://docs.botkube.io/usage/automated-actions/). + +* Make your selection and click the create button. +10. You are now ready to start playing with your Botkube plugin. + + +‍ + +Using the Flux Plugin in Action +------------------------------- + +### Running a Flux install + +![Image 14: a screen shot of a web page with a white background](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64ecb79001bc7e01e2c88804_flux-interactivity.gif) + +With the Botkube Flux plugin, you have the power to streamline your Kubernetes deployment workflow even further. Beyond the ability to effortlessly manage GitHub pull requests, this plugin offers you the convenience of checking prerequisites on your cluster and performing a complete Flux installation – all from your preferred communication platform. This means that not only can you seamlessly collaborate with your team members by sharing and discussing pull request changes within your Slack channel, but you can also ensure that your cluster is properly configured before initiating the installation of Flux. This capability to validate prerequisites directly from your communication platform adds a layer of control and convenience to your Kubernetes operations. + +‍ + +### Automating a Flux Diff Workflow + +![Image 15: a screen shot of a screen with a message on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64e694bca6bd600e8a7e88dd_flux-diff-1.gif) + +This command streamlines several essential tasks in your workflow. It starts by automatically identifying the relevant GitHub repository linked to the provided kustomization. After that, it proceeds to clone this repository and check out a specified pull request. The command then performs a thorough comparison between the changes in the pull request and the current state of your cluster. What sets it apart is its ability to conveniently share the resulting diff report on your Slack channel, facilitating seamless collaboration among team members for reviewing and discussing the alterations. Moreover, the command enhances efficiency by offering additional contextual actions, including posting the diff report as a GitHub comment on the corresponding pull request, approving the pull request, and providing quick access to view the pull request itself. Combining Botkube's GitHub Slack integration for repo control and Flux CD integration for more tools allows for better GitOps workflow management. + +Conclusion +---------- + +In conclusion, the Botkube Flux plugin presents an invaluable asset for simplifying GitOps workflows. From automating notifications to enhancing collaboration, this tool streamlines the process of managing Kubernetes clusters and GitHub repositories. We encourage you to implement the plugin in your workflow and explore further automation possibilities.With seamless integration into major communication channels, Botkube empowers you to take swift action on identified errors, ensuring your Kubernetes environment runs smoothly wherever you are. + +Sign up now! +------------ + +Get started with [Botkube](http://cloud.botkube.io/)! Whether you’re a seasoned Kubernetes pro or just getting started, Botkube has something to offer. Sign up now for free and join the [community of users](https://join.botkube.io/) who are already benefiting from the power of Botkube. + +‍ + +Feedback +-------- + +We welcome developers and Kubernetes enthusiasts to explore the platform and share their valuable feedback. We want to know what you think of Botkube and how we can make it even better. We're doing quick 15-minute interviews to get your feedback, and as a thank you, we'll give you some cool Botkube plushies and t-shirts and enter you into a raffle for a chance to win a $50 Amazon gift card! Just email our Developer Advocate, Maria or use this calendly [link](https://calendly.com/maria-botkube) to sign up. + +You can also talk to us in the Botkube GitHub issues, connect with others and get help in the Botkube [Slack community](http://join.botkube.io/), or email our Product Leader at blair@kubeshop.io. diff --git a/hack/assistant-setup/content/botkube.io__blog__streamlining-kubernetes-management-a-closer-look-at-botkube-chatops.md b/hack/assistant-setup/content/botkube.io__blog__streamlining-kubernetes-management-a-closer-look-at-botkube-chatops.md new file mode 100644 index 0000000..5d13a41 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__streamlining-kubernetes-management-a-closer-look-at-botkube-chatops.md @@ -0,0 +1,275 @@ +Title: Streamlining Kubernetes Management: A Closer Look at Botkube ChatOps + +URL Source: https://botkube.io/blog/streamlining-kubernetes-management-a-closer-look-at-botkube-chatops + +Published Time: Jan 19, 2024 + +Markdown Content: +![Image 1: a man in a black shirt is standing in front of a circle with the words experts google cloud](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9dc3218bb2465f041cea7_1693115200398.jpeg) + +Rohit Ghumare + +Google Developer Expert – Google Cloud, CNCF Ambassador + +Botkube + +Learn about Botkube from Rohit Ghumare, Google Developer Expert – Google Cloud and CNCF Ambassador. + +### Table of Contents + +* [Step 1: Signing Up for Botkube](#step-1-signing-up-for-botkube) +* [Step 2: Setting Your Instance](#step-2-setting-your-instance-) +* [Debugging Botkube](#debugging-botkube-) +* [Botkube Meets Helm](#botkube-meets-helm) +* [Conclusion](#conclusion) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +#### Get started with Botkube Cloud + +Hey there, Kubernetes enthusiasts! Let's dive into the world of Botkube and its game-changing. Developed by the wizards at KubeShop, Botkube is not just another tool—it's a revolution in Kubernetes management. + +If you're in DevOps, you know the headache of debugging production issues, especially when juggling massive Kubernetes clusters. The complexity can be overwhelming, right? This post will give you the lowdown on Botkube’s Helm magic and its impact on your Kubernetes adventures. + +🔎 **Facing the Debugging Challenge:** Imagine dealing with a maze of applications relying on various system services. This scale makes it challenging to see what's going wrong when major issues crop up. Plus, there are always many tools to manage, and collaborating across different teams is only sometimes a walk in the park. + +🛠️ **Botkube to the Rescue:** Enter Botkube! This nifty tool is like having a Swiss Army knife for Kubernetes troubleshooting. It's an app that makes monitoring, debugging, and managing Kubernetes clusters a breeze. It hooks up with your favorite chat tools, like Slack or Microsoft Teams, turning them into a command center. You get real-time alerts, can mess around with deployments, check logs, and even use kubectl and Helm from your chat window! + +Ready to dive into the hands-on demo where we use Botkube for Kubernetes troubleshooting? Here's how to get started: + +**Step 1: Signing Up for Botkube** +---------------------------------- + +* **New Users:** If you're new to Botkube, welcome aboard! You can [sign up for a free](https://app.botkube.io/#first-login) account using your email or GitHub account. It's quick and easy. +* **Existing Users:** Already part of the Botkube family? Just [log in](https://app.botkube.io/#first-login) with your existing credentials, and you're good to go. +* You can expect your dashboard to be like this: + +![Image 2: a screen shot of a website with a blue background](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d4f685f0a8da71eabce5_Screenshot%202024-01-13%20at%2018.33.18.png) + +> **Linking Your Kubernetes Cluster to Slack:** Now that you're in, let's connect your Kubernetes cluster to Slack for real-time monitoring magic. + +**Step 2: Setting Your Instance** +--------------------------------- + +* Click “Create an Instance” and run the below commands in your terminal. +* Homebrew is the easiest way to install the CLI tool. Alternatively, you can download the binary directly for your system or use helm commands for installations. + +### **1\. Install the Botkube CLI** + +Use [Homebrew](https://brew.sh/) to install the latest Botkube CLI: + +`brew install kubeshop/botkube/botkube` + +Alternatively, download the Botkube CLI binary and move it to a directory under your `$PATH:` + +curl -Lo botkube https://github.com/kubeshop/botkube/releases/download/v1.7.0/botkube-darwin-arm64chmod +x botkube && mv botkube /usr/local/bin/botkube + + +### **2\. Install Botkube on your cluster** + +Install or upgrade Botkube and connect it to Botkube Cloud: + +botkube install --version=v1.7.0 \ +--set config.provider.endpoint=https://api.botkube.io/graphql \ +--set config.provider.identifier=b2b56b7d-392a-4614-b1ba-93eb0e92f424 \ +--set config.provider.apiKey=key:1d4ffcee-9df8-489c-bcd2-f288eb781dde + + +Now, Choose a display name for your Botkube instance. This is like giving a cool nickname to your new digital helper. + +![Image 3: a screen showing the creation of a house in adobe adobe adobe ado](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d575d9deb7aaf9866988_Screenshot%202024-01-13%20at%2020.15.55.png) + +### **Step 3: Choosing Your Integration Method** + +* Time to pick your integration method. As we know, Botkube provides multiple integrations, but I’m using Slack Integration here because I use it a lot for personal and community use. +* Go for the "**Official Botkube Slack**" option. Heads up, though – this requires a 30-day free trial sign-up. It's like a test drive for the whole experience! +* It also provides a free version if you want to set it up yourself. +* You can also check the [official documentation](https://docs.botkube.io/) for Botkube Integration with other chat platforms. + +### Comparison for Botkube bidirectional communication integrations: + +![Image 4: a table showing the differences between azure and youtube integrations](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65aed164c12e1b6851dff536_Screenshot%202024-01-22%20at%203.34.16%20PM.png) + +### **Step 4: Syncing with Slack** + +* Jump into your Slack app settings. Look for the "Add Slack" button and give it a click. This is where the real magic begins – integrating Botkube with your Slack world. + +![Image 5: a screen shot of a page with a button on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d5b8de7e130a53622129_Screenshot%202024-01-13%20at%2020.22.38.png) + +### **Step 5: Selecting Your Slack Workspace** + +* Head on to the Slack console and Create an app from an app manifest. + +![Image 6: a screen shot of a web page showing the add apps button](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d5d3de7e130a5362396c_Screenshot%202024-01-13%20at%2021.00.59.png) + +Pick a workspace of your choice where you want to install the Botkube + +![Image 7: a screenshot of the pick workspace to develop your app](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d5f1035f985e43bc7225_Screenshot%202024-01-13%20at%2021.02.50.png) + +You can use the manifest YAML file below for app creation. + +
display_information:
name: devreler # name your app as you want it to be.
description: devrel as service # description for your app.
background_color: "#a653a6"
features:
bot_user:
display_name: devreler # this name will be displayed when you call it.
always_online: false
oauth_config:
scopes:
bot:
- channels:read
- groups:read
- app_mentions:read
- reactions:write
- chat:write
- files:write
- users:read
settings:
event_subscriptions:
bot_events:
- app_mention
interactivity:
is_enabled: true
org_deploy_enabled: false
socket_mode_enabled: true
token_rotation_enabled: false
+ +Choose the Slack workspace where you want Botkube to be your sidekick. Now you can bridge the gap between Slack and Kubernetes, bringing them together in harmony. + +![Image 8: a screenshot of the adobe adobe adobe adobe adobe](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d62aeb09b9191aa90344_Screenshot%202024-01-13%20at%2021.28.43.png) + +You need to invite Botkube to your Slack workspace first, so click on “invite bot to channel” and add the name of the channel you want to invite Botkube from. + +![Image 9: a screen shot of a screen with a message box on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d674bcf59b0f274bfccb_Screenshot%202024-01-13%20at%2021.30.26.png) + +* Refer this [documentation](https://docs.botkube.io/installation/slack/socket-slack) for more details about integrating Slack with Botkube. +* Install an App in your workspace + +![Image 10: a screenshot of a screen showing a user's permission to access the theatrical stack workspace](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d6a944c186ec25c1d101_Screenshot%202024-01-13%20at%2021.09.44.png) + +* Now, We need to copy the **_Bot token and App level token_** from the Slack Console that is required afterward. +* Bot Token is directly available on Slack console - [Oauth token](https://www.notion.so/Streamlining-Kubernetes-Management-A-Closer-Look-at-Botkube-ChatOps-d5d0c9761ca449ea84d449aaf8031fa8?pvs=21) +* App Token can be created as follows: + +1. Select the **Basic Information** link from the left sidebar and scroll down to the **App-Level Token section**. Click on the **Generate Token and Scopes** button. + +![Image 11: a screen showing the app level tokens page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d6c60f818c7e0fa3d23d_Screenshot%202024-01-13%20at%2021.36.17.png) + +2. Enter a **Name**, select `connections:write` scope, and click **Generate**. + +![Image 12: generating an app level token](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d7029fa7ebdd68ebe769_Screenshot%202024-01-13%20at%2021.38.49.png) + +Export slack tokens from your terminal as follows: + +export SLACK_API_BOT_TOKEN="botToken" +export SLACK_API_APP_TOKEN="appToken" + + +* You need to make sure you’re adding Botkube to your channel where you’ll be using Botkube, as shown below. +* After installing the Botkube app to your Slack workspace, you could see a new bot user with the name "Botkube" added to your workspace. Add that bot to a Slack channel you want to receive notifications in. You can add it by inviting @Botkube to a channel. + +![Image 13: how to add a person to a group on tumblr](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d76a9e3dce9e6797a30d_Screenshot%202024-01-13%20at%2022.53.41.png) + +We’re going to install Botkube on our Kubernetes cluster now. Run below commands: + +
export CLUSTER_NAME={cluster_name} #your cluster name here
export ALLOW_KUBECTL=true
export ALLOW_HELM=true
export SLACK_CHANNEL_NAME={channel_name} #CHANNEL_NAME is the channel name where @Botkube is added
botkube install --version v1.7.0 \
--set communications.default-group.socketSlack.enabled=true \
--set communications.default-group.socketSlack.channels.default.name=${SLACK_CHANNEL_NAME} \
--set communications.default-group.socketSlack.appToken=${SLACK_API_APP_TOKEN} \
--set communications.default-group.socketSlack.botToken=${SLACK_API_BOT_TOKEN} \
--set settings.clusterName=${CLUSTER_NAME} \
--set 'executors.k8s-default-tools.botkube/kubectl.enabled'=${ALLOW_KUBECTL} \
--set 'executors.k8s-default-tools.botkube/helm.enabled'=${ALLOW_HELM}
+ +You should expect the output as given below: + +![Image 14: a screen shot of a black screen with text on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d79c9e3dce9e6797ca20_Screenshot%202024-01-14%20at%2001.13.47.png) + +![Image 15: a screen shot of a pc with a black screen](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d7a4e97f05231a340be0_Screenshot%202024-01-14%20at%2001.14.35.png) + +### **Step 6: Bringing Botkube to Your Channels** + +* Want Botkube in your private Slack channels? No problem! Just use the "Add to Channel" feature. This way, Botkube becomes part of the conversation, ready to assist in Kubernetes-related discussions and incident management. +* It’s time to head on to our web platform for Botkube, where we can now easily select the channels where we’ve already installed Botkube. + +![Image 16: a screenshot of the adwords settings page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d7eb0f818c7e0fa4e848_Screenshot%202024-01-13%20at%2023.12.43.png) + +### **Step 7: Customizing Your Plugins** + +* The final touch is selecting the plugins you want to use. This is like picking the right tools for your toolbox. Choose the ones that best fit your Kubernetes monitoring and troubleshooting needs. It's all about making Botkube work for you and your team. +* We had already configured Helm and Kubernetes in the above commands. If you have other use-cases, you can explore argocd, flux, keptn, etc. plugins. All the best 🚀 + +![Image 17: a screen shot of a google docs page](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d865ae8cb06de78b6563_Screenshot%202024-01-13%20at%2023.13.41.png) + +Create Instance by making changes: + +![Image 18: a screen shot of the google analytics dashboard](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d88aae0351187ae818a8_Screenshot%202024-01-13%20at%2023.14.04.png) + +**Congratulations!** You're all set up with Botkube Cloud and Slack. Now you've got a powerful ally in managing your Kubernetes clusters right within your Slack workspace. Go ahead, give it a spin, and see how it transforms your workflow! + +![Image 19: a screen shot of a website with a white background](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d8ae0f818c7e0fa582e7_Screenshot%202024-01-13%20at%2023.15.22.png) + +Go to your Slack workspace, you can expect below updates automatically! + +![Image 20: a screen shot of the adobe video editor in adobe adobe adobe video](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d8d6e97f05231a350620_Screenshot%202024-01-13%20at%2023.16.31.png) + +### Verify Botkube Installation + +In Slack, try running kubectl commands under the _kubernetes_ channel like this `@SLACK_APP_NAME kubectl get nodes` + +![Image 21: a screenshot of the chat screen on a computer](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a9d8fcb5f4e48c29b03978_Screenshot%202024-01-14%20at%2000.28.44.png) + +Debugging Botkube +----------------- + +‍ + +> Most likely, you’ll come across some common errors around slack channel name or botkube not recognizing your slack workspace channels. To resolve this, you can manually edit the botkube YAML configuration file. + +* Configure Botkube by editing the values.yaml file. + +vi botkube/values.yaml + + +Enable **_socketSlack_**_:_ under ”_communications:”_ and set the name of the default channel to match the name of your actual Slack channel. Set the **botToken** and **appToken** values to the tokens you retrieved from above. + +communications: +'default-group': +socketSlack: +enabled: true +channels: +'default': +name: 'kubernetes' ... +... +botToken: 'BOT_TOKEN' +appToken: 'APP_TOKEN' + + +Enable the Helm and Kubectl executors + +executors: +k8s-default-tools: +botkube/helm: +enabled: true +... +... +... +botkube/kubectl: +enabled: true +... +... + + +Alternatively, You can also use **helm** for the Installation process for efficient Kubernetes application management. + +**Botkube Meets Helm** +---------------------- + +A standout feature of Botkube? It's a [Helm executor plugin](https://botkube.io/integration/helm). This nifty integration lets you wield Helm commands right from your chat platform. Need to roll back a release or check an app’s status? Botkube’s got your back. + +**Botkube’s Toolkit ‍**Botkube isn’t just about deploying and monitoring. It’s a powerhouse for executing a range of Helm commands like install, upgrade, and rollback. Just remember to tweak those RBAC settings for read-write commands. + +**Why Botkube and Helm Are a Dream Team** + +* **Efficient Management:** Streamlines Kubernetes application management. +* **Instant Updates:** Get real-time feedback right in your chat window. +* **Accessibility:** Manage Kubernetes on the go, even from your phone. + +**Getting Hands-On: Botkube and Helm in Action** + +**‍**Let’s add practical magic to this post with a quick demo and code snippets. + +**Setting Up Botkube with Helm: A Step-by-Step Guide** + +# Adding Botkube to helm +helm repo add botkube https://charts.botkube.io. +helm search repo botkube + +# Reveals all available charts +helm search repo botkube + +# Botkube Installation +helm install botkube --namespace botkube --create-namespace botkube/botkube + +# Verifying Installation +kubectl get pods -n botkube + +# If you're using Slack, try this +@Botkube helm list + + +Conclusion +---------- + +‍**‍**Botkube emphasizes the challenges DevOps faces with Kubernetes, such as debugging in complex environments and coordinating across teams.This ingenious tool is all about making life easier. It offers streamlined monitoring, efficient debugging, and simplified management of Kubernetes clusters. Think of it as your go-to for instant alerts and the ability to fire off Kubernetes commands right from your chat window. From signing up to integrating your Kubernetes clusters with your favorite chat tools, it’s all about boosting your operational game. + +For more details, join the [Botkube community on Slack](https://join.botkube.io/) or reach out to the Botkube team via the [Botkube Dashboard](http://app.botkube.io/). diff --git a/hack/assistant-setup/content/botkube.io__blog__supercharging-developer-collaboration-how-chatops-lives-on-with-botkube.md b/hack/assistant-setup/content/botkube.io__blog__supercharging-developer-collaboration-how-chatops-lives-on-with-botkube.md new file mode 100644 index 0000000..6e8ffef --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__supercharging-developer-collaboration-how-chatops-lives-on-with-botkube.md @@ -0,0 +1,77 @@ +Title: Supercharging Developer Collaboration: ChatOps Lives On + +URL Source: https://botkube.io/blog/supercharging-developer-collaboration-how-chatops-lives-on-with-botkube + +Published Time: Jun 20, 2023 + +Markdown Content: +![Image 1: a woman wearing headphones on an airplane](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6408ed63e5b48fed17e54625_SE6Pjp9PW9TaOwePHJXRaxaLQgYdT2HX_5PYASmvIx8.jpeg) + +Maria Ashby + +Developer Advocate + +Botkube + +Chatops is not dead...it's making a comeback. In the fast-paced world of software development, collaboration and effective communication are extremely important. That's where ChatOps comes in. + +### Table of Contents + +* [Unleashing the Power of ChatOps:](#unleashing-the-power-of-chatops-) +* [Evolving with the Developer Community:](#evolving-with-the-developer-community-) +* [What is Botkube? Is it ChatOps for Kubernetes?](#what-is-botkube-is-it-chatops-for-kubernetes-) +* [How Botkube Innovates the Chatops Space](#how-botkube-innovates-the-chatops-space) +* [Embrace the Future of Collaborative Troubleshooting:](#embrace-the-future-of-collaborative-troubleshooting-) +* [Feedback - We’d Love to Hear From You!](#feedback-we-d-love-to-hear-from-you-) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +In the fast-paced world of software development, collaboration and effective communication are extremely important. That's where ChatOps comes in—a game-changing method that has transformed the way development and operations teams collaborate. Despite rumors of its demise, ChatOps is alive and well, and all thanks to an incredible tool called Botkube. In this blog post, we'll show the ways ChatOps has evolved and why every developer should be excited about Botkube's impact on their troubleshooting workflow. + +Unleashing the Power of ChatOps: +-------------------------------- + +As developers, we know that seamless collaboration and streamlined processes are the keys to success. [ChatOps](https://botkube.io/learn/chatops) harnesses the power of chat platforms to centralize discussions, actions, and alerts, providing a single hub for team collaboration. It's a practice that encourages transparency, knowledge sharing, and continuous improvement within development and operations workflows. ChatOps enables us to automate tasks, gather information, and trigger actions, all through the convenience of chat conversations. + +Evolving with the Developer Community: +-------------------------------------- + +While ChatOps initially gained traction with tools like Hubot and Lita, it has never stopped evolving to meet the dynamic needs of modern development teams. With the advent of Kubernetes and containerization, the demand for ChatOps tools tailored to these environments became apparent. This is where Botkube, a powerful open-source tool, steps in to revolutionize how we monitor and manage our Kubernetes infrastructure. + +What is Botkube? Is it ChatOps for Kubernetes? +---------------------------------------------- + +Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. This means you'll gain instant visibility and control over your cluster resources, all without ever having to leave your messaging platform. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more.. In this blog post, we'll give you an introduction to Botkube and highlight some of its key features and benefits. + +How Botkube Innovates the Chatops Space +--------------------------------------- + +### Real-time Collaboration: + +Imagine receiving instant alerts about pod crashes, resource constraints, or failed deployments, directly in your chat platform. Botkube ensures that the right team members are informed promptly, enabling quick decision-making and efficient troubleshooting. No more delays or miscommunications – just instant collaboration at its finest. + +### Centralized Knowledge: + +With Botkube, all our Kubernetes-related discussions, diagnoses, and actions take place within the chat platform. This not only encourages knowledge sharing but also creates a centralized repository of information and actions taken. No more scattered conversations or lost context. It's all neatly preserved for easy access and accelerated onboarding of new team members. + +### Turbocharged Efficiency: + +Botkube's automation capabilities eliminate repetitive tasks and enable lightning-fast actions through chat commands. We can scale deployments, inspect logs, or roll back changes with a few keystrokes, all while staying in the flow of our chat conversations. This seamless workflow minimizes context switching, boosts productivity, and expedites application deployment and management. + +### Flexibility and Scalability: + +Whether we're working with a single Kubernetes cluster or managing multiple ones, Botkube has us covered. It scales effortlessly, ensuring we can monitor and manage our infrastructure effectively. Moreover, Botkube's extensible architecture lets us integrate custom alerting mechanisms or notifications, tailoring it to our specific needs. + +Embrace the Future of Collaborative Troubleshooting: +---------------------------------------------------- + +ChatOps isn't going anywhere in fact, it's thriving, and with tools like Botkube, it's reaching new heights. This powerful combination empowers us to collaborate seamlessly, automate tasks effortlessly, and gain real-time insights into our Kubernetes infrastructure. + +As the Kubernetes community continues to push boundaries, ChatOps fueled by Botkube will remain an indispensable practice. Embrace the power of ChatOps and join the exciting journey of transforming how we collaborate, communicate, and code. + +Feedback - We’d Love to Hear From You! +-------------------------------------- + +As always, we want to hear your feedback and ideas about Botkube. Help us plan the Botkube roadmap, get the features you’d like implemented, and get bugs fixed quickly. + +You can talk to us in the Botkube GitHub issues, Botkube Slack community, or email our Product Leader at blair@kubeshop.io. diff --git a/hack/assistant-setup/content/botkube.io__blog__the-state-of-kubernetes-errors-in-2023.md b/hack/assistant-setup/content/botkube.io__blog__the-state-of-kubernetes-errors-in-2023.md new file mode 100644 index 0000000..648b1c0 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__the-state-of-kubernetes-errors-in-2023.md @@ -0,0 +1,101 @@ +Title: The State of Kubernetes Errors in 2023 + +URL Source: https://botkube.io/blog/the-state-of-kubernetes-errors-in-2023 + +Published Time: Aug 03, 2023 + +Markdown Content: +![Image 1: a man in a blue shirt with his arms crossed](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a86fdda4d8d06ce598598e_evan%20image.jpg) + +Evan Witmer + +Growth Lead + +Botkube + +What is the state of Kubernetes errors in 2023? What are the most popular errors and ideas for troubleshooting? + +### Table of Contents + +* [Two Commonly Seen K8s Errors](#two-commonly-seen-k8s-errors) +* [Trends for Troubleshooting K8s Issues](#trends-for-troubleshooting-k8s-issues) +* [Effective K8s Troubleshooting Chart](#effective-k8s-troubleshooting-chart) +* [Concluding Kubernetes Errors](#concluding-kubernetes-errors) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +#### Get started with Botkube Cloud + +Kubernetes is a powerful tool for managing containerized applications, but it's not immune to errors. In this blog post, we'll discuss the state of Kubernetes errors in 2023. We'll cover the two most commonly searched errors, trends in troubleshooting, and a graph of error severity. + +We'll also discuss some tips for preventing Kubernetes errors and how to troubleshoot them when they do occur. By the end of this blog post, you'll have a better understanding of the state of Kubernetes errors and how to keep your applications running smoothly. + +This post is written by the team at Botkube. Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. + +**Two Commonly Seen K8s Errors** +-------------------------------- + +Kubernetes problems are often found in kubctl logs. As more clusters are deployed, developers are likely to encounter them. Here are two very common K8s issues, as well as links to articles where we cover them in more depth. The article may also mention using Botkube's automated tools that make solving these errors a whole lot easier! + +### **OOMkilled Error (Out of Memory)** + +The OOMkilled error (Out Of Memory Killed) is a common issue that can occur when a process in a Kubernetes system consumes too much memory and causes the system to run out of available memory. This can lead to performance issues and can even cause the system to crash. + +In Kubernetes, pods are the basic unit of deployment. Pods can contain one or more containers, and each container has its own memory limit. If a pod exceeds its memory limit, Kubernetes may terminate the pod and generate an OOMKilled error because the system is unable to allocate more memory to the pod. + +The OOMkilled error is one of the most common errors encountered with Kubernetes Pods. There are a number of reasons why this error can occur, including: + +* Misconfiguration: If the memory limit for a pod is set too low, the pod may exceed its limit and be terminated with an OOMKilled error. +* Memory leak: A memory leak is a bug in a container that causes it to continue to consume memory even after it is no longer needed. This can eventually lead to the pod exceeding its memory limit and being terminated with an OOMKilled error. +* Spike in traffic: If a pod is suddenly subjected to a large spike in traffic, it may temporarily exceed its memory limit and be terminated with an OOMKilled error. + +We encourage you to learn more with our help article [What is OOMkilled?](https://botkube.io/learn/what-is-oomkilled) + +### **Create Container Config Error** + +The Create Container Config Error is a Kubernetes error that occurs when there is a problem with the configuration of a container. This error can occur for a variety of reasons, including: + +* Misconfiguration: If the configuration for a container is incorrect, Kubernetes may be unable to create the container. +* Missing files: If the configuration for a container references files that do not exist, Kubernetes may be unable to create the container. +* Invalid syntax: If the configuration for a container contains invalid syntax, Kubernetes may be unable to create the container. + +Once you have identified the cause of the Create Container Config Error, you can take steps to fix it. If the error is due to a misconfiguration, you can correct the configuration. If the error is due to missing files, you can copy the files to the pod's filesystem. If the error is due to invalid syntax, you can correct the syntax. + +For more on the createcontainerconfigerror, check out our [help article to troubleshoot your Kubernetes pods](https://botkube.io/learn/createcontainererror) further. + +**Trends for Troubleshooting K8s Issues** +----------------------------------------- + +The use of logging and monitoring tools is a trend in troubleshooting Kubernetes errors. These tools can help you to identify the root cause of an error, and they can also help you to track the progress of your troubleshooting efforts. + +Another trend is the adoption of automated troubleshooting tools. These tools can help you to automate the troubleshooting process, which can save you time and effort. + +### **Receiving Kubernetes alerts** + +The most important trend is to receive Kubernetes alerts about errors as soon as possible. This will allow you to troubleshoot the errors quickly and prevent them from causing downtime. + +ChatOps is a method of using chat tools to automate and streamline DevOps workflows. By integrating Botkube with a chat tool like Slack, you can receive Kubernetes alerts directly in your chat app. This makes it easy to stay up-to-date on errors and take action quickly to fix them. + +**Effective K8s Troubleshooting Chart** +--------------------------------------- + +Govardhana Miriyala Kannaiah wrote a great [LinkedIn post](https://www.linkedin.com/posts/govardhana-miriyala-kannaiah_gopuwrites-kubernetes-devops-activity-7076547924205146115-b6le/) where he outlined a chart for effective Kubernetes troubleshooting. The two axis of this chart are ‘ How effective it is’ and ‘How often to do it’. This shows the different troubleshooting techniques like checking logs or verifying pod configuration. We hope you enjoy his graph as much as we did! + +![Image 2: a diagram showing the different types of troubleshooting](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64cbf6afb711c416c4939db4_6xCx7eRWFrIzItkWAb9rcnUhWR2ID4us4Lc-1ynN0EHEgkmBQRO78zIdtlvPjq-SKy6ipbxlXLWjsnCsiuyC0WbGGq8svhXY3VOJuC4AKdzzVHpMS3XXzwQ9Izj59OGYUoTP5Eiu6EZv1W9sWpQEd_c.png) + +**Concluding Kubernetes Errors** +-------------------------------- + +In this blog post, we took a look at some common Kubernetes errors, such as the createcontainerconfig error. We also showed a chart from the community on common K8s error troubleshooting techniques and how effective they are. + +We also mentioned that Botkube's software tools allow platform engineers and DevOps teams to stay on top of their Kubernetes errors. The tool lets you connect alerts to come into a single chat channel and then suggests common solutions to the errors being encountered. + +If a company runs its applications in Kubernetes, they need to consider adding Botkube to their cluster to help prevent future Kubernetes errors. Botkube can help you to: + +* Identify and troubleshoot errors quickly. +* Reduce the time it takes to resolve errors. +* Prevent future errors from occurring. + +If you are looking for a way to improve your Kubernetes error management, then Botkube is a great option. Botkube is easy to use and can help you to save time and money. Thanks for taking the time to read about the state of K8s errors! + +‍ diff --git a/hack/assistant-setup/content/botkube.io__blog__use-chatgpt-to-troubleshoot-kubernetes-errors-with-botkubes-doctor.md b/hack/assistant-setup/content/botkube.io__blog__use-chatgpt-to-troubleshoot-kubernetes-errors-with-botkubes-doctor.md new file mode 100644 index 0000000..d72ad4c --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__blog__use-chatgpt-to-troubleshoot-kubernetes-errors-with-botkubes-doctor.md @@ -0,0 +1,91 @@ +Title: ChatGPT to Troubleshoot K8s Errors with Botkube’s Doctor Plug-in + +URL Source: https://botkube.io/blog/use-chatgpt-to-troubleshoot-kubernetes-errors-with-botkubes-doctor + +Published Time: Jul 31, 2023 + +Markdown Content: +![Image 1: a woman with short hair smiling for the camera](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/636df3fb36b4e60920a3b1b2_hPLC9itV8zp-raGDFmvOZMfn2hV8RFcl237qzT8Wa1g.jpeg) + +Kelly Revenaugh + +Developer Relations Lead + +Botkube + +People have been using ChatGPT and AI for many uses over the past year. But have you heard of ChatGPT recommendations for Kubernetes troubleshooting? Learn more about our latest feature. + +### Table of Contents + +* [Using ChatGPT with Kubernetes](#using-chatgpt-with-kubernetes) +* [How Botkube Makes ChatGPT for Kubernetes Even Better](#how-botkube-makes-chatgpt-for-kubernetes-even-better) +* [Common Use Cases with ChatGPT and Botkube](#common-use-cases-with-chatgpt-and-botkube) +* [Is ChatGPT Safe to Use in Kubernetes?](#is-chatgpt-safe-to-use-in-kubernetes-) +* [Get Started with Botkube’s Doctor Plugin](#get-started-with-botkube-s-doctor-plugin) + +#### Manage your Kubernetes Clusters Directly in Slack and Microsoft Teams! + +#### Get started with Botkube Cloud + +Artificial Intelligence (AI) and its counterpart, GPT (generative pre-trained transformer), have been making incredible progress over the past year. Large Language Models power tools like ChatGPT to answer almost any question using the collective knowledge stored over years on the Internet. + +And more recently, AI has entered the Kubernetes ecosystem. Throughout the past year, the industry has seen AI help with Kubernetes cost optimization, security management, troubleshooting, and more. So, the Botkube team harnessed the power of ChatGPT to answer questions and give recommendations on troubleshooting Kubernetes clusters with our new [AI Troubleshooting feature called Doctor](https://docs.botkube.io/usage/executor/doctor). ‍ + +‍ + +Learn more about how we developed Botkube’s Doctor (ChatGPT) plugin during an internal Hackathon in Pawel’s [blog post](https://botkube.io/blog/building-a-chatgpt-plugin-from-ideation-to-implementation). + +Using ChatGPT with Kubernetes +----------------------------- + +Using ChatGPT to troubleshoot issues in your Kubernetes cluster can save time and streamline your workflow. GPT (generative pre-trained transformer) automates many of the tedious and time-consuming tasks involved in troubleshooting, allowing you to focus on more important tasks. Additionally, ChatGPT's ability to analyze your cluster configuration and resource usage can help you optimize your cluster for better performance and cost savings. + +How Botkube Makes ChatGPT for Kubernetes Even Better +---------------------------------------------------- + +Now, through the ChatOps-based interface in communication platforms like [Slack, MS Teams, Discord](http://botkube.io/integrations), Botkube users can now interact with ChatGPT and get recommendations while troubleshooting Kubernetes. Even though Kubernetes has been widely adopted over the past few years, there are still many developers and Ops teams who struggle with the complexity of Kubernetes. The ChatGPT plugin will help beginner and intermediate K8s users who are faced with troubleshooting issues or questions without the need for a Google search on Kubernetes documentation. every error they encounter. + +Common Use Cases with ChatGPT and Botkube +----------------------------------------- + +There are many ways to use ChatGPT when troubleshooting Kubernetes clusters. AI can help analyze logs, metrics, and other data from your Kubernetes cluster to identify issues – then returns recommendations on how to fix and improve errors and issues. + +Here's a few use cases as examples: + +### Assistance for Beginner Kubernetes Users + +![Image 2: a purple screen with a purple background and a purple text](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c7f3a7c42051dab4872cab_8hyWVq9NOkFLCQpe-EqzxKczhU5VIqqG_bm2kP876TdzysK0Z3PGJOXCBF3aPo8wIV9w8bC5n77ksg5I62jg7KlzmZpnmxNRmP2yvLTrxWZaHYv2tZFxGfQAo21ky2infXvJraVs4RbpiM4Jiyl1ulA.png) + +After the Doctor plugin is installed, users are able to use the `Get Help` button located under incoming error events, like the one shown above. This helps lower the barrier of entry for new Kubernetes and/or Botkube users. + +The Get Help action passes the error data to ChatGPT, which returns a response with actionable buttons to execute commands, like `kubectl describe pod` or `kubectl logs pod`, instead of scouring the Internet for the correct answer. + +Users can also ask ChatGPT specific questions directly from the interface. Users can ask questions about Kubernetes, like “Where does Kubernetes store its state?” to tutorial-like questions like “How do I create a Pod?” + +__Keep in mind that the ChatGPT plugin will only give recommendations and expects the Botkube user to execute commands.__ + +### ChatGPT Recommendations + +![Image 3: a screenshot of a screen with a message on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c7f3b7be2361ae1bb5afd0_LEr5f9Rr-O1pgKD_dYqFRG8GcwopzDWXYkDiVyEL3as3vJF3r1DQhDHa4SZs0sQD2NmW8sHJ3XUVMxUAp5z8WJx-mIuyXanea4788oniZnR0o4m2UrCZXKe-Uj8RZufiLihfB__BQYzgNo3uG2IrIwY.png) + +The new Doctor plugin allows you to integrate [Botkube's existing Kubernetes recommendations](https://www.youtube.com/watch?v=9D2tASyx7eA) derived from cluster logs to receive personalized suggestions based on the specific information extracted from your Kubernetes cluster. + +Whether it's optimizing resource allocation, enhancing security measures, or improving overall performance, the Doctor plug-in empowers users with valuable insights to make informed decisions for their Kubernetes environments. + +### Troubleshooting Automations + +Users can harness ChatGPT capabilities to craft custom Botkube configurations and [automated actions](https://docs.botkube.io/usage/automated-actions) effortlessly, working seamlessly with other plugins. By leveraging Slack interactivity as a command builder, users can efficiently interact with the system, receiving tailored suggestions for automations that directly address the specific challenges encountered within their Kubernetes cluster. The Doctor plug-in empowers users to find precise solutions and execute commands with ease, streamlining the troubleshooting process and enhancing overall cluster management. + +Is ChatGPT Safe to Use in Kubernetes? +------------------------------------- + +Giving access to your Kubernetes clusters in production to __any__ tool can be nerve-wracking. We take our users’ data and security seriously. Luckily, ChatGPT in Botkube only generates information and recommendations based on what you ask it and will not execute any commands. Take a look at our [Terms of Service](https://app.botkube.io/terms-of-service), [End User License Agreement](https://app.botkube.io/eula) and [Privacy Policy](https://app.botkube.io/privacy-policy). + +Get Started with Botkube’s Doctor Plugin +---------------------------------------- + +Ready to try it out on your own? The easiest way to configure it is through the [Botkube web app](https://app.botkube.io/) if your cluster is connected. Otherwise you can enable it in your [Botkube YAML configuration](https://docs.botkube.io/configuration/executor/doctor). + +Once enabled, you can ask questions about specific resources or ask free-form questions, directly from any enabled channel. Find out how to use the Doctor plugin in the [documentation](https://docs.botkube.io/usage/executor/doctor). + +We’d love to hear how you are using ChatGPT to troubleshoot your Kubernetes clusters! Share your experiences with us in the Botkube [Slack community](http://join.botkube.io/) or [email our Developer Advocate, Maria](mailto:maria@kubeshop.io) and we’ll send you some fun swag. diff --git a/hack/assistant-setup/content/botkube.io__case-studies.md b/hack/assistant-setup/content/botkube.io__case-studies.md new file mode 100644 index 0000000..5b721b4 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__case-studies.md @@ -0,0 +1,9 @@ +Title: Case Studies + +URL Source: https://botkube.io/case-studies + +Markdown Content: +See why our users love Botkube +------------------------------ + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. diff --git a/hack/assistant-setup/content/botkube.io__case-studies__civo.md b/hack/assistant-setup/content/botkube.io__case-studies__civo.md new file mode 100644 index 0000000..5133a60 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__case-studies__civo.md @@ -0,0 +1,51 @@ +Title: Case Study | Streamlining Helm Deployments with Botkube - The Shawn Edition + +URL Source: https://botkube.io/case-studies/civo + +Markdown Content: +Introduction +------------ + +In this case study, we explore how Shawn, a seasoned DevOps engineer, utilizes Botkube to address challenges in a critical aspect of his Kubernetes workflows: Helm deployments. + +### The Problem + +#### Mastering Helm Deployments + +Shawn faces challenges when dealing with multiple Helm charts, striving to combine them into a unified deployment while ensuring accuracy. This complexity requires a solution that streamlines the process and maintains the correctness of the combined charts. + +### The Challenge + +#### Combining Helm Chart Deployments + +The challenge lies in the intricate process of combining multiple Helm charts. Currently, this is often a guessing game, requiring expertise to merge two similar charts effectively. Additionally, much of the work is done in the CLI terminal, hindering the deployment process. + +### Requirements for Use Case + +To address these challenges, a working solution should enable Shawn to combine Helm charts seamlessly, incorporating guardrails and checks to ensure correctness. + +### The Solution + +#### Mastering Helm Deployments + +Shawn leverages Botkube to efficiently combine multiple Helm charts. Shawn combines charts and validates their correctness using Botkube. The new Botkube Cloud interface further enhances this process, allowing users to select applications through checkboxes, automating the combination and deployment seamlessly. + +### Results and Benefits + +#### Mastering Helm Deployments Benefits + +* Efficient combination of multiple Helm charts. +* Validation of combined charts for correctness. +* Streamlined deployment process, utilizing Botkube Cloud interfaces. + +The Future +---------- + +Looking ahead, Botkube envisions further integrations to enhance the Kubernetes experience. The plan includes more integrations with platforms like Teams, providing a comprehensive environment for Helm deployments. Additionally, new Helm add-ins, such as the Helm Rollback command, will be introduced to bolster the capabilities of Botkube. + +In conclusion, Shawn's journey with Botkube highlights the tool's adaptability in addressing intricate deployment challenges. As Shawn continues to evolve in his role, Botkube remains an indispensable ally in his Kubernetes endeavors. + +Watch Shawn Explain this on Our Office Hours Live Webinar +--------------------------------------------------------- + +Watch Botkube's Office Hours with Shawn, a seasoned Civo Cloud Ambassador, and Maria Ashby, Botkube's developer relations expert, as they delve into combining Helm Charts. In this engaging discussion, discover Shawn's firsthand experiences leveraging Botkube's integration with Slack to foster seamless communication within Kubernetes clusters, making it an insightful watch for both seasoned professionals and those new to the Kubernetes landscape. diff --git a/hack/assistant-setup/content/botkube.io__contact.md b/hack/assistant-setup/content/botkube.io__contact.md new file mode 100644 index 0000000..bb5d7fd --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__contact.md @@ -0,0 +1,11 @@ +Title: Contact Us + +URL Source: https://botkube.io/contact + +Markdown Content: +Botkube is made by Kubeshop +— a first of its kind open source accelerator focused on the cloud native ecosystem + +At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. + +[![Image 1: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 2: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 3: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 4: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 5: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) diff --git a/hack/assistant-setup/content/botkube.io__demo.md b/hack/assistant-setup/content/botkube.io__demo.md new file mode 100644 index 0000000..c37d2ad --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__demo.md @@ -0,0 +1,25 @@ +Title: Botkube demo + +URL Source: https://botkube.io/demo + +Markdown Content: +See Botkube in Action +--------------------- + +#### Can’t try Botkube yourself? Get a live demo or sandbox trial environment + +### The best way to see the best of Botkube 
is to try it yourself + +If you don’t have access or permissions to install Botkube in your environment, we can help. Sign up now for either: + +This requires: + +1. + +A collaboration platform into which you have permission to install an app + +2. + +A working Kubernetes cluster in which to install Botkube + +The installation only takes a few minutes to get a fully functional Botkube environment. diff --git a/hack/assistant-setup/content/botkube.io__events.md b/hack/assistant-setup/content/botkube.io__events.md new file mode 100644 index 0000000..b351c7b --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__events.md @@ -0,0 +1,8 @@ +Title: Events + +URL Source: https://botkube.io/events + +Markdown Content: +Each year, 8,000+ developers, engineers, software architects, dev teams, managers, and executives from 70+ countries gather for DeveloperWeek to discover the latest in developer technologies, languages, platforms, and tools. + +Botkube DevRel, Maria Ashby, will present **_"Unlocking K8s Troubleshooting Best Practices with Botkube."_** See you there... diff --git a/hack/assistant-setup/content/botkube.io__features.md b/hack/assistant-setup/content/botkube.io__features.md new file mode 100644 index 0000000..fab82db --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__features.md @@ -0,0 +1,56 @@ +Title: Features + +URL Source: https://botkube.io/features + +Markdown Content: +[![Image 1: Kusk Kubernetes](https://assets-global.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](https://botkube.io/) + +Empowering DevOps with AI-Powered Kubernetes Troubleshooting +------------------------------------------------------------ + +Troubleshoot K8s Like a Pro, No Expert Knowledge Required +--------------------------------------------------------- + +### **Real-Time Visibility** + +Receive instant notifications and context-rich alerts for all your Kubernetes events. + +![Image 2: Monitoring Kubernetes notifications in chat platforms](https://assets-global.website-files.com/633705de6adaa38599d8e258/635bdb36e4f4074412c48a50_act-on-events.gif) + +![Image 3: ChatOps for Kubernetes](https://assets-global.website-files.com/633705de6adaa38599d8e258/635bdb5fc5a7514b6f2b08a7_kc-builder-min.gif) + +### ChatOps Management + +Act on events directly in the collaboration platform (including mobile apps) by sending commands to the configured Kubernetes clusters. Kubectl, helm, and other executors are supported. Some platforms support interactive command creation making it even easier for non-experts to work with Kubernetes. + +### Automation + +Actions allow you to automatically run commands based on specific events and see the results in the event message. Gather logs and other details on errors, get descriptions of newly created resources, and even auto-rollback failed deployments and upgrades with simple configuration steps. + +[Take a closer look ![Image 4: a screenshot of an error message on a website](https://assets-global.website-files.com/633705de6adaa38599d8e258/64025d7fab04582144112fc7_Screenshot%202023-02-27%20at%2017.42%201.png)](#) + +![Image 5: Automate K8s maintenance tasks](https://assets-global.website-files.com/633705de6adaa38599d8e258/642da9080827c967a39b0043_automation_new.gif) + +![Image 6: Collaboration with developer teams managing K8s](https://assets-global.website-files.com/633705de6adaa38599d8e258/6348669b8c031b85668d3a2b_KVP1-Monitoring.gif) + +### Collaboration + +Monitoring and troubleshooting is done in an environment where you chat and collaborate throughout the day. You can work together with your team, see what actions have already been taken, and perform troubleshooting tasks from any location and device that supports the collaboration app. + +### Extensibility + +Extend Botkube with plugins to add new sources and executors for any tools. Enable any tool for ChatOps and automation with easy-to-use APIs and Botkube as the engine. + +![Image 7: Quickly connect multiple cloud native tools](https://assets-global.website-files.com/633705de6adaa38599d8e258/6408f8feef5f2a301037ac23_botkube-diagr-01.svg) + +[![Image 8: Manage multiple Kubernetes Clusters from one channel](https://assets-global.website-files.com/633705de6adaa38599d8e258/64385d9ea0e4ca059b5a7a1d_Botkube.png)](#) + +### Multi-cluster Management + +Create and manage Botkube configurations for all of your Kubernetes clusters in one place. Set up platforms and plugins without complex YAML configuration and install Botkube in your cluster with a single command. Initial configuration and any future changes are automatically synchronized to the Botkube instance with no manual intervention necessary. + +### Event and Audit Logs + +See a consolidated view of events and notifications received via Botkube for all of your clusters. You can also see an audit of all commands run via Botkube in the same filterable log. The log allows you to correlate actions and events to easily trace and troubleshoot issues. + +[![Image 9: Full traceable audit log of DevOps activity](https://assets-global.website-files.com/633705de6adaa38599d8e258/64385e6998cfac2dfc8d887f_Event%20and%20Audit%20Logs.png)](#) diff --git a/hack/assistant-setup/content/botkube.io__integration__argo-cd-botkube-kubernetes-integration.md b/hack/assistant-setup/content/botkube.io__integration__argo-cd-botkube-kubernetes-integration.md new file mode 100644 index 0000000..327bd29 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__integration__argo-cd-botkube-kubernetes-integration.md @@ -0,0 +1,25 @@ +Title: Argo CD & Botkube Kubernetes Integration + +URL Source: https://botkube.io/integration/argo-cd-botkube-kubernetes-integration + +Markdown Content: +**What does Argo CD specialize in or how Argo Workflows work?** +--------------------------------------------------------------- + +Argo CD is a Kubernetes-native continuous delivery tool that streamlines the automation of Kubernetes workflows. It simplifies the management and deployment of containerized applications by synchronizing them with Git repositories. Argo CD empowers organizations to maintain a declarative approach to their infrastructure, ensuring that the desired application state is maintained in a Kubernetes cluster. With its user-friendly interface, it enables efficient monitoring, rollback, and version control for Kubernetes applications. Key features include continuous deployment, multi-environment support, integration with Kubernetes RBAC, and real-time visibility into application states. + +### **Benefits of adding an Argo Workflow** + +* Declarative GitOps: Argo CD enables a GitOps approach, ensuring that the desired application state is declared in Git repositories, enhancing infrastructure as code practices and traceability. +* Continuous Deployment: It automates continuous delivery by monitoring Git repositories for changes and synchronizing Kubernetes resources, reducing manual intervention and deployment errors. +* Multi-Environment Support: Argo CD simplifies managing applications across different environments, from development to production, making it well-suited for complex multi-cluster or multi-tenancy scenarios. +* RBAC Integration: Integrated with Kubernetes RBAC, it provides robust access control, allowing fine-grained permissions for teams and users to manage applications and resources securely. + +‍ + +**Use Cases of Botkube's Argo Plugin** +-------------------------------------- + +Botkube's integration with Argo CD offers significant advantages for teams looking to streamline their Kubernetes workflow management. By integrating Botkube with Argo CD, you can bring the power of Argo Workflows directly into collaboration platforms like Slack or other chat tools. This enables real-time notifications and updates on workflow progress, helping teams stay informed and aligned. + +Furthermore, the additional Argo GitHub integration makes it easy to manage pull requests within the same workflow. Team members can conveniently approve or reject pull requests directly from their chat interface, promoting efficient code review processes and enhancing overall collaboration and productivity in Kubernetes application development and deployment workflows. diff --git a/hack/assistant-setup/content/botkube.io__integration__botkube-flux-kubernetes-integration.md b/hack/assistant-setup/content/botkube.io__integration__botkube-flux-kubernetes-integration.md new file mode 100644 index 0000000..80050b5 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__integration__botkube-flux-kubernetes-integration.md @@ -0,0 +1,36 @@ +Title: Flux & Botkube Kubernetes Integration + +URL Source: https://botkube.io/integration/botkube-flux-kubernetes-integration + +Markdown Content: +**What does Flux specialize in or how Flux works?** +--------------------------------------------------- + +Flux CD is a set of open-source GitOps continuous delivery tools that automate the deployment and management of Kubernetes applications. It works by tracking changes to a Git repository and then applying those changes to a Kubernetes cluster. + +Benefits of using Flux: + +* Automated deployment and management: Flux can automate the deployment and management of Kubernetes applications, freeing up DevOps engineers to focus on other tasks. +* GitOps: Flux follows the GitOps principles, which means that all changes to a Kubernetes application are made through Git. This makes it easy to track changes and roll back to previous versions. +* Reliability: Flux is a reliable tool that has been used by many organizations to deploy and manage Kubernetes applications. + +**Use cases for the Botkube Flux Integration** +---------------------------------------------- + +The Botkube Flux integration allows DevOps engineers to use Slack, Teams, or Mattermost to interact with Flux. This makes it easy to manage Kubernetes applications from the chat tools that DevOps engineers are already using. + +Here are two of the best use cases for the Botkube Flux integration: + +* **GitHub approval workflow for Pull Request:** The Botkube Flux integration can be used to send GitHub approval workflow notifications to Slack. This allows DevOps engineers to approve, deny, or respond to Pull Requests directly from Slack. +* **Quicker deployment of Flux**: The Botkube Flux integration can be used to deploy Flux to a Kubernetes cluster quickly and easily. This is done through the Botkube Kubernetes Plug-In setup wizard. The wizard also allows DevOps engineers to add other helpful K8s toolsets like kubectl commands. + +**How does the Botkube Flux Integration help with GitOps?** +----------------------------------------------------------- + +The Botkube Flux integration helps with GitOps by making it easy to manage Kubernetes applications from the chat tools that DevOps engineers are already using. This allows DevOps engineers to stay in the flow of their work and to collaborate more effectively with their team. + +The Botkube Flux integration also helps to ensure that all changes to a Kubernetes application are made through Git. This is a key principle of GitOps, and it helps to ensure the reliability and auditability of Kubernetes applications. + +Overall, the Botkube Flux integration is a powerful tool that can help DevOps engineers to manage Kubernetes applications more effectively. It is a valuable addition to any GitOps workflow. + +‍ diff --git a/hack/assistant-setup/content/botkube.io__integration__chatgpt-botkube-kubernetes-integration.md b/hack/assistant-setup/content/botkube.io__integration__chatgpt-botkube-kubernetes-integration.md new file mode 100644 index 0000000..e633ab1 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__integration__chatgpt-botkube-kubernetes-integration.md @@ -0,0 +1,32 @@ +Title: ChatGPT & Botkube Kubernetes Integration (K8s Doctor Plugin) + +URL Source: https://botkube.io/integration/chatgpt-botkube-kubernetes-integration + +Markdown Content: +ChatGPT is a large language model (LLM) from OpenAI that can be used to help DevOps engineers and platform engineers deploy applications to Kubernetes. Users still have to open a new tab or ping the OpenAI API in order to use the benefits of ChatGPT Kubernetes. It can be used to: + +* Generating a Kubernetes manifest for a new application. +* Automating the deployment of a new application to Kubernetes. +* Testing a Kubernetes deployment for compliance with security policies. +* Troubleshooting a Kubernetes deployment that is not working properly. +* Documenting a Kubernetes deployment for future reference. + +ChatGPT is still under development, but it has the potential to be a valuable tool for DevOps engineers and platform engineers who deploy applications to Kubernetes. After seeing the benefits that Chat GPT can bring deploying applications into Kubernetes, a common question is how can we get that help faster? This is where the Botkube Kubernetes Doctor AI assistant comes into help! + +**ChatGPT + Botkube K8s Integration (The K8s Doc)** +--------------------------------------------------- + +Botkube Doctor is a new integration that allows ChatGPT to be used to troubleshoot Kubernetes problems. Botkube Doctor connects to your Kubernetes clusters and sends notifications to Slack or Teams when there are errors. ChatGPT can then be used to read the error message and suggest a solution. If the solution is a command, ChatGPT can also run the command directly from Slack or Teams. + +This integration makes ChatGPT better and quicker at troubleshooting Kubernetes in a few ways. First, it allows ChatGPT to see the error message in context. This means that ChatGPT can understand the cause of the error and suggest a more accurate solution. Second, it allows ChatGPT to run commands directly from Slack or Teams. This means that the platform engineer can quickly and easily fix the problem without having to leave their chat application. + +Overall, the Botkube Doctor Kubernetes Integration makes ChatGPT a more powerful and versatile tool for troubleshooting Kubernetes problems. This integration is the ultimate Chat Operation plugin for Kubernetes, as it allows platform engineers to quickly and easily diagnose and fix Kubernetes problems from within their chat application. + +Here are some additional benefits of the Botkube Doctor Kubernetes ai Integration: + +* It can help to reduce the time it takes to troubleshoot Kubernetes problems. +* It can help to improve the accuracy of troubleshooting solutions. +* It can help to reduce the number of errors in Kubernetes deployments. +* It can help to improve the security and compliance of Kubernetes deployments. + +Overall, the Botkube Doctor Kubernetes Integration is a valuable tool for DevOps engineers and platform engineers who deploy applications to Kubernetes. It can be used to create a Kubernetes Chatgpt bot for troubleshooting deployment or running errors. diff --git a/hack/assistant-setup/content/botkube.io__integration__custom-executor-plugin.md b/hack/assistant-setup/content/botkube.io__integration__custom-executor-plugin.md new file mode 100644 index 0000000..595176d --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__integration__custom-executor-plugin.md @@ -0,0 +1,13 @@ +Title: Botkube.io + +URL Source: https://botkube.io/integration/custom-executor-plugin + +Markdown Content: +Building Custom Bots to Execute Kubernetes Commands +--------------------------------------------------- + +Botkube, already a master of Kubernetes notifications in Slack and Teams, noticed a gap: users often needed to run specific commands for their clusters directly from their chat channels. Instead of forcing them to jump between tools, Botkube embraced the need for customization. Now, users can build their own "executors" – small scripts that combine existing tools like Helm packages or, as Huseyn demonstrated, even [Keptn for cluster backups](https://botkube.io/blog/implementing-your-own-botkube-plugin-a-real-life-use-case). This seamless integration empowers teams to manage their Kubernetes clusters with ease and agility, all within their familiar communication platforms. + +We allow custom Kubernetes resources to bridge the gap across DevOps, enabling bots to manage and monitor your deployed services like never before. + +Ready to unlock your creativity? [Build your own custom plugin](https://docs.botkube.io/plugin/custom-executor), or [share your innovative ideas](https://github.com/kubeshop/botkube/issues) for official plugins to benefit the entire Botkube community! diff --git a/hack/assistant-setup/content/botkube.io__integration__discord.md b/hack/assistant-setup/content/botkube.io__integration__discord.md new file mode 100644 index 0000000..3e54b8d --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__integration__discord.md @@ -0,0 +1,24 @@ +Title: Discord & Botkube Kubernetes Integration + +URL Source: https://botkube.io/integration/discord + +Markdown Content: +**Discord** is a popular communication platform that was initially developed for gamers, but it has since evolved to become a hub for all kinds of communities. The platform offers text, voice, and video communication features, enabling users to connect and interact with others in real-time. Discord allows users to join servers or create their own communities, making it easy to connect with like-minded people from all over the world. It also offers a range of customization options, including the ability to add bots, customize notifications, and more. With its user-friendly interface and extensive feature set, Discord has become a go-to platform for online communication and community building. + +Key Value Propositions: + +* Real-time communication: Discord allows users to communicate with others in real-time using text, voice, and video chat features. +* Community building: Users can join servers or create their own communities, making it easy to connect with people who share similar interests. +* Customization: Discord offers a range of customization options, allowing users to tailor their experience to their preferences. +* Accessibility: Discord is available on multiple platforms, including desktop, mobile, and web, making it accessible to users across different devices. +* Security: Discord offers a range of security features, including two-factor authentication, IP location tracking, and more, to help ensure the safety of its users. + +Kubernetes in Discord Before Botkube +------------------------------------ + +In the past, developers had to create their own custom webhooks to receive Kubernetes alerts in their Discord channel, which could be a time-consuming and complex process, especially when dealing with multiple alerts. Building custom webhooks was a time-intensive process that required developers to create and maintain multiple webhooks for each alert they wanted to receive, making it similar to building mini applications just to test their own applications. As a result, Botkube's integration with Discord has become a time-saving and efficient solution that simplifies Kubernetes alerting and allows developers to focus on building applications without the added burden of webhook maintenance. + +Discord + Botkube K8s Integration +--------------------------------- + +With the Botkube integration into Discord, developers can now receive Kubernetes and Cluster alerts directly in their collaboration tool of choice, including Discord. This integration allows for real-time notifications of Kubernetes cluster events, such as pod failures and autoscaling, to be sent directly to Discord channels. Even Helm deployment alerts can now show up in the channel, providing developers with the option to troubleshoot directly from the Chat. With Botkube's integration into Discord, developers can focus on their work and stay on top of Kubernetes alerts without having to worry about setting up and managing custom webhooks. diff --git a/hack/assistant-setup/content/botkube.io__integration__helm.md b/hack/assistant-setup/content/botkube.io__integration__helm.md new file mode 100644 index 0000000..a270b46 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__integration__helm.md @@ -0,0 +1,41 @@ +Title: Botkube.io + +URL Source: https://botkube.io/integration/helm + +Markdown Content: +How does Helm work? +------------------- + +### **Manage Complexity**‍ + +Charts describe even the most complex apps, provide repeatable application installation, and serve as a single point of authority. + +### **Easy Updates**‍ + +Take the pain out of updates with in-place upgrades and custom hooks. + +### **Simple Sharing**‍ + +Charts are easy to version, share, and host on public or private servers. + +### **Rollbacks**‍ + +**‍**Use helm rollback to roll back to an older version of a release with ease. + +Helm + Botkube Integration + +----------------------------- + +The official Botkube Helm executor plugin allows you to run Helm commands against your Kubernetes cluster directly from your configured chat platforms, including Slack, Discord, Microsoft Teams, and Mattermost. This allows you to view, manage, and even roll back Helm releases, and gives application developers a quick and easy way to see the status of their releases. + +![Image 1: User showing how to run Helm commands in Slack with Botkube](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64db7ea3a939c341a10123c0_Helm%20Charts%20in%20Slack%20(2).png) + +Get help running Helm commands directly in Slack with Botkube's Helm Plugin + +### Already have Helm Installed? Deploy Botkube with One Helm Chart! + +![Image 2: Command to run to deploy Botkube's Helm Charts](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64db7d28dc2649e806376a49_Helm%20Botkube%20Command.png) + +helm repo add botkube https://charts.botkube.io + +After running this helm chart deployment code, Helm users will have access to all the [great advantages](https://botkube.io/features) Botkube has to offer the K8s community. With Botkube chart deployment becomes easier and can be done ever from a cell phone with Botkube's Slack integration. diff --git a/hack/assistant-setup/content/botkube.io__integration__kasten.md b/hack/assistant-setup/content/botkube.io__integration__kasten.md new file mode 100644 index 0000000..b4bd3cb --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__integration__kasten.md @@ -0,0 +1,26 @@ +Title: Kasten & Botkube Kubernetes Integration + +URL Source: https://botkube.io/integration/kasten + +Markdown Content: +Kasten by Veeam is a company that specializes in Kubernetes backup and disaster recovery. Their solution is designed to help enterprise-level organizations tackle data management challenges that may arise during the operational phase of running applications on Kubernetes. Kasten K10 is their data management platform that is specifically built for Kubernetes, and it offers operations teams a secure and scalable system for tasks such as backup/restore, disaster recovery, and application mobility, with a focus on operational simplicity. Kasten is an independent Kubernetes business unit within Veeam2. + +### **Benefits Kasten for Kubernetes:** + +* It is a leader in Kubernetes backup and disaster recovery. +* Its solution helps enterprises overcome Day 2 data management challenges to confidently run applications on Kubernetes. +* Kasten K10 provides enterprise operations teams an easy-to-use, scalable, and secure system for backup/restore, disaster recovery, and application mobility with unparalleled operational simplicity. + +**K10 + Botkube K8s Integration** +--------------------------------- + +Botkube helps to make Kubernetes management with Kasten even easier by facilitating the connection between Kasten's K10 tool and productivity tools like Slack, Teams, and Mattermost. With Botkube, alerts from K10 can be delivered directly to these tools, enabling users to stay informed about their Kubernetes environment without having to leave their preferred productivity tool. Additionally, Botkube can connect to multiple productivity tools, making it a versatile solution for teams that use multiple tools. + +The chatops features of Botkube bring several benefits to Kasten users. These features allow users to view alerts and run commands to troubleshoot those alerts directly from within their productivity tool, reducing the need to switch between tools and streamlining the troubleshooting process. By using chatops with Botkube, Kasten users can improve their operational efficiency and make managing their Kubernetes environment even easier. + +**Integration Use Case** +------------------------ + +Imagine a scenario where a website administrator wants to backup their website using Kasten's K10 on a daily basis. With Botkube's integration, the administrator can set up a Slack channel to receive successful backup alerts. This provides an easy and convenient way for the administrator to stay informed about their backups without having to constantly monitor the K10 tool. + +If the backup alert fails, Botkube will notify the Slack channel immediately. If Botkube can identify a quick fix for the issue, it will suggest it along with the error message. If the fix is deemed safe and is whitelisted, anyone in the Slack channel can run the command to fix the issue without needing to access the command line. This not only saves time but also reduces the risk of human error. Botkube's chatops features help to streamline the backup process and make it even more efficient and hassle-free for website administrators. diff --git a/hack/assistant-setup/content/botkube.io__integration__keptn.md b/hack/assistant-setup/content/botkube.io__integration__keptn.md new file mode 100644 index 0000000..2d95860 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__integration__keptn.md @@ -0,0 +1,21 @@ +Title: Keptn & Botkube Kubernetes Integration + +URL Source: https://botkube.io/integration/keptn + +Markdown Content: +Keptn is an open-source platform that automates and simplifies the deployment, operations, and remediation of cloud-native applications. The platform aims to provide a framework for implementing continuous delivery, continuous deployment, and continuous operations practices for cloud-native applications. By automating the deployment and testing of applications, keptn helps to ensure consistent and reliable application deployment and updates across different environments. + +Some of the key benefits of Keptn include: + +* Simplifying the management of cloud-native applications +* Reducing the time and effort required for deployment, operations, and maintenance +* Providing a cloud-agnostic platform that can be used to manage applications deployed on any cloud infrastructure +* Enabling event-driven workflows and automated quality gates to ensure that applications are deployed and updated consistently and reliably +* Supporting blue-green and canary deployments, automated scaling of applications, and integration with popular DevOps tools. + +Keptn Slack Integration Through Botkube +--------------------------------------- + +Botkube is a powerful tool that helps to simplify some of the most challenging aspects of using Keptn for cloud-native application delivery. One of the most significant benefits of Botkube is its ability to integrate natively with popular productivity tools like Slack Channels or Teams Channel. This integration makes it easy to control permissions and receive valuable alerts from Keptn about your Kubernetes cluster directly in your productivity tools. By doing this, you can save time and streamline your workflow, ensuring that critical information is delivered promptly and efficiently. + +In addition to its native integrations, Botkube also offers a web-based GUI that makes it easy to deploy Keptn into your cluster quickly. This feature ensures that deployment is both faster and audited for correctness, making it an ideal solution for organizations that want to improve their application delivery processes. With Botkube, you can also monitor the status of your applications and receive alerts if there are any issues, ensuring that you can respond to problems quickly and efficiently. diff --git a/hack/assistant-setup/content/botkube.io__integration__mattermost.md b/hack/assistant-setup/content/botkube.io__integration__mattermost.md new file mode 100644 index 0000000..735575f --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__integration__mattermost.md @@ -0,0 +1,24 @@ +Title: Mattermost & Botkube Kubernetes Integration + +URL Source: https://botkube.io/integration/mattermost + +Markdown Content: +Mattermost is a team communication software that emphasizes its open-source nature, which means that its source code is publicly available and can be freely used, modified, and distributed by anyone. It provides a secure and flexible messaging platform with real-time messaging, file sharing, search, and integrations with popular tools. Being open-source allows Mattermost to be customized to meet the needs of teams of all sizes, offering complete control over data and infrastructure. It is often chosen as an alternative to proprietary messaging platforms because it provides greater flexibility and control over the technology stack, enabling teams to innovate and build on top of the platform. + +* Open-source: Mattermost is fully open-source, which means that its source code is publicly available and can be freely used, modified, and distributed by anyone. +* Real-time messaging: Mattermost provides a secure and flexible messaging platform with real-time messaging, file sharing, search, and integrations with popular tools. +* Customizable: Being open-source allows Mattermost to be customized to meet the needs of teams of all sizes, offering complete control over data and infrastructure. +* Self-hosted: Mattermost can be installed on-premises or on a cloud platform of your choice, providing complete control over your data and infrastructure. +* Kubernetes-compatible: Mattermost can be installed within Kubernetes, enabling teams to easily deploy and manage the software using Kubernetes tools and workflows. +* Security and compliance: Mattermost offers advanced features such as end-to-end encryption, compliance and governance controls, and webhooks and APIs for developers to ensure security and compliance with regulations. +* Integration-ready: Mattermost can be integrated with a variety of popular tools and platforms, such as GitHub, Jira, and Trello, making it easy to integrate into existing workflows and toolchains. + +Kubernetes in Mattermost Before Botkube +--------------------------------------- + +Previously, Kubernetes users had to use manual webhooks to receive notifications in Mattermost, which was a tedious and time-consuming process. However, with Botkube's integration with Mattermost, this process has become much simpler. Botkube provides error alerts and ChatOps functions that can be easily integrated into Mattermost, allowing users to receive notifications without having to set up manual webhooks. This integration stack also enables users to stay true to Open Source solutions while building their applications. Developers can now focus on their work instead of dealing with the complexities of setting up manual webhooks, which results in greater productivity and efficiency. + +Mattermost + Botkube K8s Integration +------------------------------------ + +Botkube has become the Kubernetes Integration partner for Mattermost, allowing users to receive Kubernetes-related alerts directly in their Mattermost channels. Botkube provides a seamless integration with Mattermost, which enables teams to collaborate more effectively by providing real-time notifications on Kubernetes cluster events, such as pod failures, deployments, and autoscaling. With Botkube, users can easily share permissions to their Kubernetes cluster through a shared team channel, ensuring that the right people have access to the right resources. Additionally, Botkube provides the ability to perform Kubernetes cluster commands directly from Mattermost, allowing users to restart their cluster or perform general maintenance tasks from their local machine without having to switch between different tools. This integration between Botkube and Mattermost streamlines Kubernetes operations, providing a more efficient and effective way to manage your Kubernetes clusters. diff --git a/hack/assistant-setup/content/botkube.io__integration__prometheus.md b/hack/assistant-setup/content/botkube.io__integration__prometheus.md new file mode 100644 index 0000000..025097a --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__integration__prometheus.md @@ -0,0 +1,34 @@ +Title: Botkube.io + +URL Source: https://botkube.io/integration/prometheus + +Markdown Content: +### Easy Prometheus Plugin Deployment + +There has never been an easier way to get started with alert manager by Prometheus. If it is not already installed into your Kubernetes cluster, just simply go over to Botkube’s setup wizard and select the different K8s plugins you would like to add. No more CLI deployment needed! + +![Image 1: Adding Alerts to your Kubernetes Cluster with Prometheus Alert manager](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6549321f3ab68ce0bef6a1a0_POEEPnLdeD8pzH-pcTbUwkuHvE46ilC2nSw5zPvp4f1DuxdIBV3hbRC-hBnuEAYpCS7UzSU2bpsNdmWXFGIot6nhEtZskDiPOP7K7er6bOy4-1p2AKkjcJYNaYaGHClmW5rrmFsd8rzXLO6MIFJabZg.png) + +How does Prometheus work? +------------------------- + +Key benefits that Promehteus brought to the Cloud Native landscape include: + +* A multi-dimensional data model with time series data identified by metric name and key/value pairs +* PromQL, a flexible query language to leverage this dimensionality +* No reliance on distributed storage; single server nodes are autonomous +* Time series collection happens via a pull model over HTTP +* Pushing time series is supported via an intermediary gateway +* Targets are discovered via service discovery or static configuration +* Multiple modes of graphing and dashboarding support + +All of these features are great among themselves, but the most impressive feature is that Promotheus syncs these to Alertmanager. This creates a trail of collected metrics that can be followed to draw helpful insights about how your K8s cluster is running. + +Botkube can be used to follow this trail and offer helpful suggestions to fix common Kubernetes errors or alerts. If your team already uses alertmanager to create prometheus alerts. + +Where did Promotheus come from? +------------------------------- + +Prometheus is an open-source systems monitoring and alerting toolkit originally built at SoundCloud. Since its inception in 2012, many companies and organizations have adopted Prometheus, and the project has a very active developer and user community. It is now a standalone open source project and maintained independently of any company. To emphasize this, and to clarify the project's governance structure, Prometheus joined the Cloud Native Computing Foundation in 2016 as the second hosted project, after Kubernetes. + +Prometheus is 100% open source and community-driven. All components are available under the Apache 2 License on GitHub. diff --git a/hack/assistant-setup/content/botkube.io__integration__slack.md b/hack/assistant-setup/content/botkube.io__integration__slack.md new file mode 100644 index 0000000..a80efe8 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__integration__slack.md @@ -0,0 +1,41 @@ +Title: Slack & Botkube Kubernetes Integration + +URL Source: https://botkube.io/integration/slack + +Markdown Content: +Building a Kubernetes Slack Bot? +-------------------------------- + +When developers want to receive notifications about the status of their cluster, they typically have to build an alert bot from scratch using webhooks into Slack. Save everyone the time and start with Botkube's easy Slack cluster connection. It integrates with alertmanager slack connection to allow for tracking of past events. Get started troubleshooting K8s from Slack now. + +### Now with Kubernetes AI Assistant for Troubleshooting k8s! + +![Image 1: Checking Kubernetes Namespaces in Slack with Botkube's AI Assistant](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65ee1a5d521144e87f59161e_Botkube%20AI%20Assistant%20-failing%20GIF.gif) + +Checking Kubernetes Namespaces in Slack with Botkube + +Botkube transforms your Slack channel into your Kubernetes command center. Its AI-powered Kubernetes assistant acts as your copilot, proactively alerting you to potential issues and helping you troubleshoot even the most complex Kubernetes errors directly within Slack. With Botkube by your side, you'll streamline problem resolution and maintain a healthy Kubernetes environment. + +‍ + +**Kubernetes in Slack Before Botkube** +-------------------------------------- + +Kubernetes users were once limited to manual webhooks if they wanted to get notifications into Slack. This process was cumbersome and time-consuming, and even with popular Kubernetes monitoring tools like Prometheus, it was difficult to get the necessary information into Slack. Furthermore, after the webhook was built, developers still had to go into the Command Line to run fixes suggested by the errors. BotKube simplifies this process by providing error alerts and ChatOps functions that can be quickly integrated and managed via Slack. + +What does Slack do? +------------------- + +Slack is a popular productivity tool that focuses on team collaboration through chat. It allows teams to communicate and collaborate in real-time, making it easy to share ideas, files, and feedback instantly. Slack also offers a range of native integrations, such as Google Drive, Trello, and Zoom, that allow teams to streamline their workflow by connecting various tools in one place. In addition to these integrations, Slack also provides the ability to create custom integrations through incoming webhooks, which enables teams to automate tasks and receive updates from external services directly in their Slack channels. Overall, Slack is a powerful tool that can help teams stay organized, communicate effectively, and increase productivity. + +* Facilitates real-time communication and collaboration within teams +* Centralizes communication channels and minimizes information silos +* Streamlines workflows by integrating with other tools and services +* Enables customization through the creation of custom integrations using incoming webhooks +* Provides powerful search functionality to easily find information +* Organizes conversations by topic or project, improving team coordination +* Offers support for voice and video calls, making remote collaboration easier +* Provides mobile app accessibility, allowing for flexible communication from anywhere +* Offers advanced security features and compliance certifications to protect sensitive information. + +‍ diff --git a/hack/assistant-setup/content/botkube.io__integration__teams.md b/hack/assistant-setup/content/botkube.io__integration__teams.md new file mode 100644 index 0000000..602bdea --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__integration__teams.md @@ -0,0 +1,38 @@ +Title: Microsoft Teams & Botkube K8s Integration + +URL Source: https://botkube.io/integration/teams + +Markdown Content: +**Building a Kubernetes Microsoft Teams Bot for Notifications?** +---------------------------------------------------------------- + +When developers seek timely notifications regarding their cluster's status, they often find themselves building an alert bot from the ground up, integrating webhooks into Microsoft Teams. This typically requires extensive Azure cloud experience as well. Save valuable time by leveraging Botkube's effortless Microsoft Teams cluster connection. Seamlessly integrate with Alertmanager for Teams, enabling the tracking of historical events. Kickstart your Kubernetes troubleshooting journey directly from Microsoft Teams! + +Addressing concerns from developer teams using Microsoft, we've diligently optimized Botkube to seamlessly function within Azure's Kubernetes environment. Our dedicated efforts ensure a smooth experience for teams compelled to operate in Azure, Microsoft Teams, and other Microsoft products, guaranteeing a hassle-free setup for Kubernetes ChatOps in the Microsoft ecosystem. + +### **Now with a Kubernetes AI Assistant Built In!** + +Turn Microsoft Teams into your Kubernetes control room with Botkube's Teams plugin. This intelligent Kubernetes copilot delivers timely alerts and empowers you to troubleshoot complex Kubernetes errors collaboratively within Teams. Botkube simplifies Kubernetes management, ensuring your team can quickly address and resolve issues. + +**Kubernetes Notifications in Microsoft Teams** +----------------------------------------------- + +Previously, Kubernetes users had to rely on manually built webhooks to receive notifications in Microsoft Teams. This process was complex and labor-intensive, even with the help of monitoring tools like Prometheus. Moreover, developers had to resort to the Command Line to implement the suggested fixes after setting up the webhook. + +Botkube's integration with Teams simplifies this procedure. Botkube offers error alerts and ChatOps features that can be seamlessly integrated into Teams, streamlining the notification process and allowing developers to focus on more pressing tasks. Sort of like a developer's personal Microsoft Teams Kubernetes debugger. + +What Does Microsoft Teams Do? +----------------------------- + +Microsoft Teams is a comprehensive productivity tool that facilitates team collaboration through chat, video calls, and file sharing on the cloud. It allows users to communicate and work together in real-time, even when they are physically distant. Teams is designed to work seamlessly with other Microsoft applications such as Office 365, OneNote, and Yammer. + +Additionally, Microsoft Teams natively integrates with a wide range of other popular apps, including Trello, Asana, and GitHub, and can also connect to custom-built integrations. The entire platform is built on Microsoft's Azure Cloud, which ensures secure, scalable, and reliable performance. Underlying all these functionalities is SharePoint, which provides the backbone for content management and collaboration within Teams. + +* Enables real-time communication and collaboration between team members via chat, video, and file sharing. +* Provides a centralized platform for team members to access and manage all their files and documents on the cloud. +* Allows for organized collaboration through channels, where specific topics or projects can be discussed and managed. +* Offers group membership, allowing team members to easily access and collaborate with other members of their team. +* Integrates with a variety of other applications to streamline workflows and enhance productivity. +* Provides enterprise-level security and compliance features to ensure data privacy and regulatory compliance. +* Built on Microsoft's Azure cloud platform, Teams offers scalable performance and seamless integration with other Microsoft tools. +* With Botkube, it can provide Microsoft Teams Kubernetes alerts when errors occur in a K8s cluster. diff --git a/hack/assistant-setup/content/botkube.io__integrations.md b/hack/assistant-setup/content/botkube.io__integrations.md new file mode 100644 index 0000000..e1a576c --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__integrations.md @@ -0,0 +1,11 @@ +Title: Integrations + +URL Source: https://botkube.io/integrations + +Markdown Content: +Botkube is made by Kubeshop +— a first of its kind open source accelerator focused on the cloud native ecosystem + +At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. + +[![Image 1: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 2: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 3: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 4: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 5: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) diff --git a/hack/assistant-setup/content/botkube.io__learn-main-topic__ai.md b/hack/assistant-setup/content/botkube.io__learn-main-topic__ai.md new file mode 100644 index 0000000..0df045e --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn-main-topic__ai.md @@ -0,0 +1,11 @@ +Title: Botkube.io + +URL Source: https://botkube.io/learn-main-topic/ai + +Markdown Content: +Botkube is made by Kubeshop +— a first of its kind open source accelerator focused on the cloud native ecosystem + +At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. + +[![Image 1: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 2: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 3: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 4: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 5: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) diff --git a/hack/assistant-setup/content/botkube.io__learn-main-topic__definitions.md b/hack/assistant-setup/content/botkube.io__learn-main-topic__definitions.md new file mode 100644 index 0000000..80e5032 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn-main-topic__definitions.md @@ -0,0 +1,11 @@ +Title: Botkube.io + +URL Source: https://botkube.io/learn-main-topic/definitions + +Markdown Content: +Botkube is made by Kubeshop +— a first of its kind open source accelerator focused on the cloud native ecosystem + +At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. + +[![Image 1: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 2: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 3: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 4: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 5: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) diff --git a/hack/assistant-setup/content/botkube.io__learn-main-topic__errors.md b/hack/assistant-setup/content/botkube.io__learn-main-topic__errors.md new file mode 100644 index 0000000..27ecc2e --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn-main-topic__errors.md @@ -0,0 +1,11 @@ +Title: Botkube.io + +URL Source: https://botkube.io/learn-main-topic/errors + +Markdown Content: +Botkube is made by Kubeshop +— a first of its kind open source accelerator focused on the cloud native ecosystem + +At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. + +[![Image 1: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 2: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 3: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 4: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 5: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) diff --git a/hack/assistant-setup/content/botkube.io__learn-main-topic__monitoring-kubernetes.md b/hack/assistant-setup/content/botkube.io__learn-main-topic__monitoring-kubernetes.md new file mode 100644 index 0000000..562ab15 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn-main-topic__monitoring-kubernetes.md @@ -0,0 +1,11 @@ +Title: Botkube.io + +URL Source: https://botkube.io/learn-main-topic/monitoring-kubernetes + +Markdown Content: +Botkube is made by Kubeshop +— a first of its kind open source accelerator focused on the cloud native ecosystem + +At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. + +[![Image 1: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 2: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 3: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 4: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 5: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) diff --git a/hack/assistant-setup/content/botkube.io__learn-main-topic__use-cases.md b/hack/assistant-setup/content/botkube.io__learn-main-topic__use-cases.md new file mode 100644 index 0000000..d557efe --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn-main-topic__use-cases.md @@ -0,0 +1,11 @@ +Title: Botkube.io + +URL Source: https://botkube.io/learn-main-topic/use-cases + +Markdown Content: +Botkube is made by Kubeshop +— a first of its kind open source accelerator focused on the cloud native ecosystem + +At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. + +[![Image 1: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 2: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 3: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 4: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 5: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) diff --git a/hack/assistant-setup/content/botkube.io__learn.md b/hack/assistant-setup/content/botkube.io__learn.md new file mode 100644 index 0000000..60247a6 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn.md @@ -0,0 +1,11 @@ +Title: Learn + +URL Source: https://botkube.io/learn + +Markdown Content: +Botkube is made by Kubeshop +— a first of its kind open source accelerator focused on the cloud native ecosystem + +At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. + +[![Image 1: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 2: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 3: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 4: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 5: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) diff --git a/hack/assistant-setup/content/botkube.io__learn__ai-for-devops.md b/hack/assistant-setup/content/botkube.io__learn__ai-for-devops.md new file mode 100644 index 0000000..1a4088b --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__ai-for-devops.md @@ -0,0 +1,72 @@ +Title: Botkube: Revolutionizing Kubernetes Troubleshooting with AI-Power + +URL Source: https://botkube.io/learn/ai-for-devops + +Markdown Content: +[![Image 1: Kusk Kubernetes](https://assets-global.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](https://botkube.io/) + +AI for DevOps: How Botkube's Kubernetes AI Assistant Revolutionizes Troubleshooting +----------------------------------------------------------------------------------- + +![Image 2: a blue phone with the word learn on it](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65fdbe5e2b0c291bb5ec0536_Botkube%20BLOG%20Thumbnail%20(6).png) + +Last updated + +April 18, 2024 + +![Image 3: a man in a blue shirt with his arms crossed](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a86fdda4d8d06ce598598e_evan%20image.jpg) + +Evan Witmer + +Growth Lead + +Botkube + +Table of Contents +----------------- + +* [What is Botkube?](#what-is-botkube-) +* [How Botkube's AI Assistant Transforms DevOps](#how-botkube-s-ai-assistant-transforms-devops) +* [Real-World Use Cases](#real-world-use-cases) +* [Conclusion](#conclusion) + +#### Get started with Botkube Cloud + +DevOps teams are constantly seeking ways to streamline workflows, increase efficiency, and minimize downtime. Artificial intelligence (AI) is rapidly transforming the DevOps landscape, offering innovative solutions to common challenges. Botkube stands out as a pioneer in this domain, leveraging a powerful Kubernetes AI assistant to optimize DevOps processes. + +**What is Botkube?** +-------------------- + +Botkube is a collaborative Kubernetes troubleshooting platform that brings essential notifications, context-rich information, and troubleshooting tools directly into your existing communication channels (Slack, Microsoft Teams, Mattermost, etc.). Powered by AI and automation, Botkube empowers DevOps teams to quickly address common problems, streamline incident response, and enhance overall Kubernetes operations. + +**How Botkube's AI Assistant Transforms DevOps** +------------------------------------------------ + +Botkube's Kubernetes AI assistant acts as a virtual member of your DevOps team, offering the following core benefits: + +* **Direct Kubernetes Interaction:** Botkube provides seamless communication with your Kubernetes clusters. DevOps engineers can execute essential kubectl commands directly from their familiar chat platforms, eliminating the need to switch between tools for basic troubleshooting. +* **AI-Powered Insights:** The AI assistant for DevOps engineers gathers and analyzes data from your Kubernetes clusters, such as information regarding pods, namespaces, logs, and events. This centralized access to crucial information, coupled with AI analysis, speeds up troubleshooting and helps identify the root causes of issues. +* **Proactive Monitoring:** Botkube continuously monitors your Kubernetes environment, sending real-time alerts to your communication channels for any detected anomalies or potential problems. This proactive approach allows your team to address issues before they escalate into major incidents, ensuring maximum uptime. +* **Collaboration and Knowledge Sharing:** Botkube fosters collaboration by centralizing Kubernetes alerts, data, and conversations within shared communication channels. This encourages knowledge sharing, reduces resolution time, and creates a comprehensive repository of solutions for future reference. + +**Real-World Use Cases** +------------------------ + +![Image 4: Using AI to solve DevOps Kubernetes problems](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65ee1a5d521144e87f59161e_Botkube%20AI%20Assistant%20-failing%20GIF.gif) + +Maria Using AI for DevOps to solve a Kubernetes Problem + +1. **Faster Incident Response:** When an alert is triggered, Botkube's AI assistant can quickly diagnose common issues through its access to real-time Kubernetes data. This information can be shared directly with the DevOps team, leading to faster problem resolution. +2. **Troubleshooting Assistance:** DevOps engineers can leverage the AI assistant to ask diagnostic questions, such as "What is the status of my pods?" or "Are there any errors in the logs?". Botkube provides insightful answers using natural language processing, streamlining the troubleshooting process. +3. **Self-Service for Developers:** Botkube empowers developers with controlled access to Kubectl commands and cluster resources. This self-service model reduces the burden on DevOps teams for routine tasks and enables developers to troubleshoot problems in their own environments. + +**Conclusion** +-------------- + +By integrating AI into Kubernetes operations, Botkube significantly enhances the DevOps or [SRE experience](https://botkube.io/blog/level-up-your-sre-workflow-automating-manual-tasks-with-botkube-ai-assistant). Its ability to execute Kubectl commands, proactively monitor clusters, and provide intelligent insights enables teams to collaborate more effectively, resolve issues faster, and ultimately improve the reliability of their Kubernetes applications. If you're looking to harness the power of AI for your DevOps workflows, Botkube is a solution worth exploring. + +### About Botkube + +Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](http://app.botkube.io/) + +### Dig deeper: diff --git a/hack/assistant-setup/content/botkube.io__learn__ai-tools-for-kubernetes.md b/hack/assistant-setup/content/botkube.io__learn__ai-tools-for-kubernetes.md new file mode 100644 index 0000000..7c50aa5 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__ai-tools-for-kubernetes.md @@ -0,0 +1,53 @@ +Title: Supercharge Your Kubernetes: Best AI Tools for Optimization + +URL Source: https://botkube.io/learn/ai-tools-for-kubernetes + +Markdown Content: +Kubernetes empowers you to orchestrate containerized applications seamlessly, but its complexity can be a hurdle. The good news is that AI is stepping in to revolutionize Kubernetes management, enhancing cluster monitoring, troubleshooting, and optimization. Let's delve into some of the top-tier AI tools out there. + +**Botkube: Leading the AI k8s Pack** +------------------------------------ + +Botkube stands out as a vanguard in the realm of AI-powered Kubernetes tools. Its AI assistant is a groundbreaking development, introducing these benefits: + +* **Instantaneous Monitoring and Troubleshooting:** Receive real-time alerts via your preferred communication channels like Slack or Microsoft Teams for critical Kubernetes events, and get guided troubleshooting steps to resolve issues swiftly. +* **Effortless Kubernetes Interaction:** Instead of grappling with complex command lines, use natural language to perform Kubernetes actions. +* **Knowledge Base at Your Fingertips:** Effortlessly access Kubernetes documentation, saving precious time and mental energy. + +Learn more about Botkube's revolutionary [AI Kubernetes assistant](https://botkube.io/blog/simplify-kubernetes-with-botkubes-ai-developer-self-service-made-easy). + +Botkube is emerging as an industry frontrunner in AI Kubernetes management because it is designed exclusively for this purpose. + +![Image 1: Botkube's Kubernetes AI Logo](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6613fd154cb1e600ad6af007_rWLJfGtMltX0oTYTp2w8pW4f3Gl451vsl3-1yXogBQZEM4eJBWnHrKCfkSUBWIA7KuC-u9jK03lkmQsuYizn-u8aZJ0iyFwn9zZA8AMMOtKfcfw0WIq19_wmwz1_G73LElOpDsfUEKkMapQurXgaqu4.png) + +**ChatGPT - A More Generic Approach to Kubernetes AI Tooling** +-------------------------------------------------------------- + +ChatGPT, the versatile language model from OpenAI, can also assist with Kubernetes queries. While beneficial, these drawbacks exist: + +* **Manual Process:** Requires you to manually formulate questions and interpret responses. +* **Not Kubernetes-Specific:** You might need to create a dedicated agent trained extensively on Kubernetes and DevOps knowledge to gain maximum value. + +Botkube integrates OpenAI's language model, allowing you to harness the power of ChatGPT-like technology directly within your workflows for even greater ease. + +![Image 2: ChatGPT Logo](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6613fd2ee5a66677c1097253_a-JoDZEDQ3PU2keZWt6Ai1NNr4VGmiIOfozoGN3xMCeaKHnR2o0qJkZCNQHOcc4wcts_JBUdUs6gvbpydJYUxQXh9wxcUgJatvw-Ltd1_cN4MfwNUxX5oqljijew1v9NdjvwPsKBzJE-p1yhEIZQ2Ig.png) + +**K8sGPT: A Noteworthy Side Project** +------------------------------------- + +While tools like K8sGPT provide additional AI capabilities for Kubernetes, it's important to acknowledge that they are often community-driven side projects. This raises questions about long-term support and future development of an open-source project. + +![Image 3: K8sGPT CNCF logo](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/661591d14aa3b800bd2b2465_39aaf890e4a45efcf32567e847633bf1802c438f2aa7cbfb956072e27c80744d.svg) + +‍ + +**Conclusion** +-------------- + +AI is rapidly transforming Kubernetes management. By streamlining tasks and proactively identifying issues, AI-driven tools pave the way for greater efficiency and reliability within your clusters. Botkube shines brightly in this field, delivering a user-friendly AI assistant that puts the power of Kubernetes expertise at your fingertips, making it an essential tool for any organization using Kubernetes. + +‍ + +### About Botkube + +Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](http://app.botkube.io/) diff --git a/hack/assistant-setup/content/botkube.io__learn__aiops-tools.md b/hack/assistant-setup/content/botkube.io__learn__aiops-tools.md new file mode 100644 index 0000000..8ffa609 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__aiops-tools.md @@ -0,0 +1,53 @@ +Title: AIOps Tools: The Future of IT Operations (2023) + +URL Source: https://botkube.io/learn/aiops-tools + +Markdown Content: +In today's fast-paced digital landscape, the complexities of IT operations have grown exponentially. Managing modern IT infrastructures and ensuring seamless performance can be a daunting task, with numerous challenges lurking at every corner. This is where the emergence of AIOps (Artificial Intelligence for IT Operations) tools has revolutionized the game. AIOps tools leverage the power of artificial intelligence and automation to streamline IT operations, providing real-time insights and intelligent automation. + +One of the most exciting developments within the realm of AIOps is the integration of OpenAI's ChatGPT into ChatOps tools. ChatOps, a methodology that centralizes operational activities within chat platforms, has gained popularity for its ability to enhance collaboration and efficiency among IT teams. + +While a detailed explanation of ChatOps is beyond the scope of this article, you can refer to [another article](https://botkube.io/learn/chatops) for a comprehensive definition. + +In this article, we'll explore how AIOps tools are changing the IT operations landscape and how ChatGPT's integration is becoming a game-changer in troubleshooting. Specifically, we'll focus on Botkube, a ChatOps tool that has emerged as a frontrunner in the Kubernetes space, offering a unique ChatGPT integration through its Doctor plugin. + +**AIOps Tools: Revolutionizing IT Operations** +---------------------------------------------- + +AIOps tools excel in their ability to process vast amounts of data in real-time, allowing them to identify patterns, anomalies, and potential issues that human operators might overlook. By automating routine tasks and providing proactive insights, AIOps tools empower IT professionals to allocate their time and expertise where it matters most—strategic planning, innovation, and optimizing performance. + +Moreover, AIOps tools enhance collaboration among IT teams by centralizing information and facilitating streamlined communication. This, in turn, leads to faster incident resolution, reduced downtime, and improved overall system reliability. As a result, organizations across various industries are embracing AIOps as an integral component of their IT strategy, propelling them into a new era of operational efficiency and resilience. + +**The ChatOps Paradigm** +------------------------ + +The ChatOps paradigm has revolutionized the way IT teams collaborate and manage operations by centralizing communication and action within chat platforms. It brings real-time visibility into system health and empowers developers and operators to respond swiftly to incidents, all from the comfort of their chat interface. What sets modern ChatOps apart is its integration of AIOps, marking a significant advancement. Now, developers not only receive alerts and updates directly within their chat platform but can also tap into the immense knowledge reservoir of OpenAI, particularly for [Kubernetes (K8s) troubleshooting](https://thenewstack.io/can-chatgpt-save-collective-kubernetes-troubleshooting/). This integration allows for quick and informed decision-making by prompting OpenAI's ChatGPT for insights, making it an invaluable tool for troubleshooting complex K8s issues. As a result, ChatOps has evolved into a more intelligent and efficient framework, where every message sent can be an opportunity to harness AI-driven knowledge and expertise for smoother operations. + +**Real-World Applications of AIOps** +------------------------------------ + +AIOps is not just a theoretical concept; it has found concrete applications across various industries, transforming the way businesses manage their IT operations. One prominent application is in the realm of predictive maintenance. In manufacturing and industrial sectors, AIOps tools analyze sensor data and historical maintenance records to predict when equipment is likely to fail. By proactively scheduling maintenance based on these predictions, companies can prevent costly downtime, extend the lifespan of their assets, and optimize operational efficiency. + +In the financial sector, AIOps is employed for fraud detection and prevention. Advanced algorithms analyze transaction data in real-time, flagging suspicious activities and patterns that may indicate fraudulent transactions. This proactive approach helps financial institutions mitigate risks and protect their customers' assets. Additionally, AIOps tools are used in customer service to provide personalized recommendations, improving customer satisfaction and increasing revenue through cross-selling and upselling opportunities. These real-world applications demonstrate the versatility and effectiveness of AIOps in enhancing business operations and decision-making across diverse industries. + +**Botkube: Elevating AIOps in the Kubernetes Space** +---------------------------------------------------- + +Botkube has been making waves in the Kubernetes community as the go-to ChatOps tool. It's designed to simplify Kubernetes cluster management by centralizing operations and communications within the team's preferred chat platform, such as Slack. While Botkube's core functionality is already a valuable asset for Kubernetes administrators, its recent integration with [OpenAI's ChatGPT](https://botkube.io/blog/doctor-plug-in-tutorial) takes it to the next level. + +[**Botkube**](http://app.botkube.io/) is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. This means you'll gain instant visibility and control over your cluster resources, all without ever having to leave your messaging platform. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. In this blog post, we'll give you an overview of all of Botkube’s newest features from the v1.2.0 release. + +[Botkube’s Doctor plugin](https://botkube.io/blog/use-chatgpt-to-troubleshoot-kubernetes-errors-with-botkubes-doctor), powered by ChatGPT, provides Kubernetes administrators and DevOps teams with an innovative way to troubleshoot issues within their clusters. No more sifting through logs or running complex commands in the terminal—Botkube's Doctor plugin allows users to harness the power of ChatGPT's natural language understanding to quickly diagnose and resolve problems directly from their Slack channels. + +![Image 1: AIOps tools connect OpenAI into Slack & Teams](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64ff4ae2ceb6be56bcfd2749_ZEQiRBR8IiMvCUsc962K45bn4fScHoE1ByR-SMm9yPwwCMLgcK5int407jHuSK6CzkbHkox8W6FSizqkhtUnD9Vwmz4UYSl6uIOtiejGTCCvybjr9ZrAuTMkslHBQBSsY0sRL4Vg3T66yu_DLkYYiHY.png) + +**Conclusion: The Future of AIOps and ChatOps** +----------------------------------------------- + +As we peer into the future of IT operations, it's clear that AIOps and ChatOps are poised for even greater advancements and widespread adoption. AIOps, driven by machine learning and artificial intelligence, will become increasingly sophisticated. Predictive analytics will play a pivotal role, allowing organizations to anticipate and address issues before they escalate. Imagine AIOps tools that not only detect anomalies but also prescribe optimal solutions based on historical data and real-time insights, ushering in a new era of proactive IT management. + +Moreover, ChatOps will continue to evolve as a hub for collaboration and automation. With the integration of AI models like ChatGPT becoming more seamless, teams will leverage natural language interfaces for not just troubleshooting but also for complex tasks like infrastructure provisioning, code deployment, and even strategic decision-making. The synergy between ChatOps and AI will blur the lines between human and machine interaction, making IT operations more intuitive and accessible to a wider audience within organizations. + +In this future landscape, IT professionals will find themselves working alongside AI-powered colleagues, streamlining processes, and focusing on strategic initiatives. The result? Enhanced efficiency, reduced downtime, and a more agile response to the ever-changing technology landscape. The future of AIOps and ChatOps promises not only smoother IT operations but also a more empowered and informed workforce. + +‍ diff --git a/hack/assistant-setup/content/botkube.io__learn__automate-kubernetes-compliance-with-botkube.md b/hack/assistant-setup/content/botkube.io__learn__automate-kubernetes-compliance-with-botkube.md new file mode 100644 index 0000000..4513c2f --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__automate-kubernetes-compliance-with-botkube.md @@ -0,0 +1,57 @@ +Title: Automated Kubernetes Compliance: Botkube Makes it Easy + +URL Source: https://botkube.io/learn/automate-kubernetes-compliance-with-botkube + +Markdown Content: +As Kubernetes becomes increasingly popular in the enterprise, organizations are under pressure to ensure that their Kubernetes clusters are compliant with a variety of standards. This can be a daunting task, but it is essential to protect sensitive data and applications from security threats. Botkube is an open source tool that can be used to automate the compliance of Kubernetes clusters against a variety of standards, making it a valuable tool for the modern enterprise. + +In this article, we will show you how Botkube can be used to automate Kubernetes compliance. We will start by providing an introduction to Botkube, including its features, benefits, and limitations. Then, we will discuss how Botkube can be used to automate the compliance of Kubernetes clusters against a variety of standards, including the CIS Kubernetes Benchmarks and the NSA/CISA Kubernetes Hardening Guidance. Finally, we will show how Botkube works with other Kubernetes tools for compliance. + +**What is Botkube?** +-------------------- + +Botkube is a Cloud Native Kubernetes AI assistant that can be used to automate the deployment and compliance of Kubernetes clusters. It is also known as one of the easiest ways to connect a Kubernetes Slack Bot up to monitor errors and events within K8s clusters. + +Botkube works by connecting to your Kubernetes cluster and running a series of checks to ensure that it is compliant with a variety of standards. It can also be used to automate the deployment of Kubernetes applications and services. Botkube is able to achieve this by connecting to many other popular K8s services such as Kubectl commands. + +Botkube is already well known for it's [K8s Slack Integration](https://botkube.io/integration/slack). The Slack integration allows you to receive alerts and notifications about events in your Kubernetes cluster directly in your Slack workspace. This makes it easy to stay up-to-date on the status of your cluster and to troubleshoot any problems that may arise. + +**How to Use Botkube for Kubernetes Automation & Compliance** +------------------------------------------------------------- + +Botkube can be used to automate a variety of tasks related to Kubernetes, including pulling logs from the cluster. Normally to do this, you can use the /logs my-pod command in a terminal. See below in the Gif how Botkube automates these commands to run and pull directly in Slack! + +![Image 1: Using Botkube in Slack to pull logs from a Kubernetes Cluster](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64da92f0f73a48636ca0d5f8_9IntyPTR_YQ_RYej4_os-k9COjOssSKCV1ja7o7Y2RQwJNRMEt9zs-LGyxqzhUkkkIrf-TqVnqKQJtShPXT1BXFwTUBdIw1J5zlmP98fHYwDsRr9mJaR6h4gxG1GQxws1bpgT3yvewoEgMgJuQ2r90M.gif) + +Botkube will then pull the logs for the pod and send them to you in Slack. This is a great way to quickly troubleshoot problems in your Kubernetes cluster without having to SSH into the cluster or use the command line. + +Botkube can also be used to automate other tasks related to Kubernetes, such as: + +* Deploying applications +* Managing services +* Monitoring the cluster +* Scaling the cluster +* Troubleshooting problems + +By automating these tasks, Botkube can help you to save time and effort and to improve the security and reliability of your Kubernetes cluster. + +In addition to automating complex commands, Botkube also breaks them down into smaller, more understandable steps. This makes it easier for users to understand what the command is doing and to troubleshoot any problems that may arise. + +Finally, Botkube can be integrated with a variety of tools and services, such as Slack, Teams, and Prometheus. This makes it easy to get alerts and notifications about events in your Kubernetes cluster directly in your preferred workspace. + +If you are looking for a powerful and easy-to-use tool to automate Kubernetes tasks, I recommend checking out Botkube. + +**Other Kubernetes Automation Tools & Services Botkube Connects to:** +--------------------------------------------------------------------- + +### **Kubectl -** + +Botkube integrates with Kubectl commands to allow users to run these commands directly from Slack, Mattermost, or Teams. This makes it easy to troubleshoot Kubernetes problems without having to switch back to the command line interface. For example, to run the kubectl get pods command, you would type /kubectl get pods in Slack. Botkube would then run the command and send the results to you in Slack. + +Refer to our [Kubectl Cheatsheet](https://botkube.io/learn/kubectl-cheat-sheet) for additional useful advice on handling Kubectl. + +### **Helm Charts -** + +Botkube can be deployed with a [Helm Chart](https://botkube.io/learn/helm-charts), making it a great option for developers who are already using Helm. It is also a great way for DevOps engineers to get started with Helm, as Botkube can help them easily deploy Helm Charts and offer suggestions on correcting incorrect Helm Chart deployments. + +‍ diff --git a/hack/assistant-setup/content/botkube.io__learn__azure-kubernetes-services.md b/hack/assistant-setup/content/botkube.io__learn__azure-kubernetes-services.md new file mode 100644 index 0000000..735f5a8 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__azure-kubernetes-services.md @@ -0,0 +1,43 @@ +Title: Azure Kubernetes & Microsoft Teams: The Botkube Symphony + +URL Source: https://botkube.io/learn/azure-kubernetes-services + +Markdown Content: +**What is Azure Kubernetes Services?** +-------------------------------------- + +Ever heard of Azure Kubernetes Services (AKS), Microsoft Azure's answer to hosting your cloud-native applications with the power and flexibility of Kubernetes? Think of it as your own personal orchestra conductor, expertly managing containerized apps and scaling them to rockstar status. But wait, there's more! Imagine conducting this symphony from the comfort of your favorite collaboration tool – Microsoft Teams. + +**Connecting Azure Kubernetes Services to Microsoft Teams** +----------------------------------------------------------- + +Now, hold on, before you assume AKS and Teams are two peas in a pod (pun intended), let's clarify. While they share a Microsoft family lineage, their native integration wasn't exactly a seamless tango. That's where Botkube steps in, the friendly robot who bridges the gap and makes managing your AKS clusters from Teams a breeze. + +### **Botkube's K8s Connection to Teams** + +Introducing the [Botkube Microsoft Teams Plugin](https://botkube.io/integration/teams) for Kubernetes – your one-stop shop for ChatOps magic! No more terminal juggling or web interface acrobatics. This plugin lets you: + +* Receive Kubernetes alerts directly in your Teams channels: Got a pod stuck in limbo? Botkube will ping you, and you can react like a superhero, all within Teams. +* Take action on those alerts, instantly: Need to restart a pod? Botkube's got your back. Just type the command in your Teams chat, and watch your pod spring back to life. Terminal, who? +* Train your team faster than ever: Forget the terminal bootcamp. Botkube's intuitive interface makes restarting pods a cinch, even for your non-technical colleagues. Collaboration and agility, FTW! + +**How to Restart Pod in Azure Kubernetes Services from MS Teams** +----------------------------------------------------------------- + +So, let's dive into that last point from the last section – restarting a pod in AKS with Botkube: + +1. Set up Botkube and connect it to your AKS cluster: Easy peasy with the Botkube documentation. +2. Grant Botkube the necessary permissions: Trust is key, so give Botkube the power to restart pods. +3. Join the relevant Teams channel: Where the pod party happens. +4. Type botkube restart : Bam! Your pod is back in the game, no terminal required. + +And that's just the tip of the iceberg! Botkube lets you scale deployments, manage secrets, and even deploy applications, all from the comfort of your Teams chat. It's like having a Kubernetes whisperer in your pocket, ready to answer your every pod-related question. + +So, ditch the terminal tango and embrace the ChatOps revolution with Botkube and Azure Kubernetes Services. Let the pod party begin, in the heart of Microsoft Teams! + +**Conclusion** +-------------- + +Ready to unleash your inner cloud conductor? Go to our [Microsoft Teams integration docs](https://docs.botkube.io/installation/teams/) to start today! + +P.S. Botkube works with other Kubernetes platforms too, so feel free to spread the pod love! diff --git a/hack/assistant-setup/content/botkube.io__learn__best-gitops-tools-for-kubernetes.md b/hack/assistant-setup/content/botkube.io__learn__best-gitops-tools-for-kubernetes.md new file mode 100644 index 0000000..3a69465 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__best-gitops-tools-for-kubernetes.md @@ -0,0 +1,35 @@ +Title: Best GitOps Tools for Kubernetes (2023): Streamline Your CI/CD + +URL Source: https://botkube.io/learn/best-gitops-tools-for-kubernetes + +Markdown Content: +Welcome, fellow tech explorers, to this thrilling journey through the realm of GitOps tools tailored for Kubernetes! If you've ever found yourself in the maze of managing Kubernetes clusters, fret not; we're here to guide you through the best tools that will turn your Kubernetes management into a breeze. But before we dive headfirst into this adventure, let's unravel the mystery of GitOps and understand how it's the secret sauce that can spice up your Kubernetes game. + +**What is GitOps?** +------------------- + +GitOps, the buzzword that's been buzzing around the DevOps world, is where the magic begins. Picture this: you're managing a Kubernetes cluster, and it feels like herding cats with YAML files scattered everywhere. Enter GitOps, a game-changer that brings harmony to this chaos. It's like having a magic wand that allows you to define, maintain, and automate your Kubernetes infrastructure using Git repositories as your all-knowing oracle. + +With GitOps, every change is a well-documented journey into the heart of your infrastructure. You declare the desired state of your Kubernetes setup in code, and GitOps tools handle the rest, ensuring that your cluster always aligns with your vision. But enough theory—let's dive into the practical magic and explore the best GitOps tools for Kubernetes. + +**Common GitOps Tools used in K8s** +----------------------------------- + +### **Argo CD** + +First up in our toolkit is Argo CD, the Swiss Army knife of GitOps for Kubernetes. This powerful tool allows you to declaratively manage your Kubernetes resources through Git repositories, making deployments and updates a walk in the park. And here's the cherry on top: Argo CD now has a nifty [integration with Botkube](https://botkube.io/blog/argo-cd-botkube-integration). This integration supercharges your Slack workspace by connecting it with Argo CD's management features, enabling you to wield the magic of ChatOps in your Kubernetes journey. + +### **Flux** + +Meet Flux, another gem in our GitOps arsenal. Flux is your trusty sidekick for continuous delivery and automated deployments in Kubernetes. With Flux, managing your cluster's configuration becomes as easy as pushing changes to your Git repo. And guess what? Flux joins the ChatOps party with its [Botkube integration](https://botkube.io/blog/streamlining-gitops-with-the-botkube-flux-plugin), ensuring that your team stays in the loop and collaborates seamlessly within Slack. + +### **Botkube for GitOps management** + +Now, it's no surprise that Botkube finds its way onto our list (a little bias from the writer, perhaps?). As we've already hinted, Botkube plays nicely with the other tools on this list, extending the capabilities of GitOps management in your Kubernetes realm. With Botkube, you can foster collaboration within your team through group channels in Slack, making Kubernetes management a delightful team sport. Who said managing containers couldn't be fun? + +**Conclusion** +-------------- + +As we conclude our whirlwind tour of the best GitOps tools for Kubernetes, we encourage you to dive deeper into these tools to see which ones align with your Kubernetes management dreams. GitOps isn't just a buzzword; it's a revolution that can streamline your operations and make managing Kubernetes clusters a joyous adventure. So, what are you waiting for? Explore these tools and embark on your own Kubernetes journey today! + +‍ diff --git a/hack/assistant-setup/content/botkube.io__learn__chatops.md b/hack/assistant-setup/content/botkube.io__learn__chatops.md new file mode 100644 index 0000000..b433755 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__chatops.md @@ -0,0 +1,33 @@ +Title: Chat Operations (ChatOps) Explained by Botkube + +URL Source: https://botkube.io/learn/chatops + +Markdown Content: +ChatOps is a term that describes the practice of using chat tools and bots to automate tasks and workflows in software development and operations. ChatOps enables teams to collaborate more effectively, share knowledge, and increase transparency and accountability. It can also help teams adopt a DevOps culture of continuous improvement and feedback. + +One example of a chat tool that supports ChatOps is Botkube, which integrates with Kubernetes and allows users to monitor, debug, and manage their clusters from chat platforms like Slack or Mattermost. Botkube's Product Lead, Blair Rampling, wrote an [article](https://thenewstack.io/chatops-where-automation-collaboration-and-devops-culture-meet/) on TheNewStack that explains more about ChatOps and how Botkube can help teams leverage it. + +What Activities in K8s can be Automated with ChatOps? +----------------------------------------------------- + +One domain that has a lot of potential for ChatOps automation is Kubernetes. Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications. Kubernetes allows users to run applications across multiple servers without worrying about the underlying infrastructure. However, Kubernetes also involves a lot of complex tasks that require a lot of commands and configurations. + +Some examples of activities related to Kubernetes that can be automated are: + +### Cluster Creation + +Instead of manually setting up a cluster of servers to run Kubernetes applications, automation tools can create clusters automatically using cloud services or local machines. This can save time and resources and ensure consistency and security of the cluster environment. + +### Application Deployment + +Instead of manually deploying applications to a Kubernetes cluster using command-line interface (CLI) commands or configuration files (YAML), automation tools can deploy applications automatically using graphical user interface (GUI) tools or declarative methods. This can simplify the deployment process and reduce human errors and failures. + +### Application Scaling + +Instead of manually scaling applications up or down based on demand or performance metrics using CLI commands or configuration files (YAML), automation tools can scale applications automatically using horizontal pod autoscaler (HPA) or vertical pod autoscaler (VPA). This can optimize the resource utilization and availability of the applications. + +### Appplication Monitoring + +Instead of manually monitoring applications for health status, performance metrics, logs, events, etc., using CLI commands or configuration files (YAML), automation tools can monitor applications automatically using dashboard tools or alerting systems. This can improve the visibility and troubleshooting of the applications. + +One way to make Kubernetes activities easier to automate is to use tools that allow users to create aliases or short phrases to reference long CLI commands. Maria put together a [tutorial](https://botkube.io/blog/command-line-magic-simplify-your-life-with-custom-kubernetes-kubectrl-aliases-on-botkube) covering how set up aliases using a ChatOps automation tool like [Botkube](http://botkube.io/?utm_source=learn). diff --git a/hack/assistant-setup/content/botkube.io__learn__cluster-status-check.md b/hack/assistant-setup/content/botkube.io__learn__cluster-status-check.md new file mode 100644 index 0000000..e9f147c --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__cluster-status-check.md @@ -0,0 +1,35 @@ +Title: Kubernetes Cluster Check: Master the Serve with Ping Pong Fun! + +URL Source: https://botkube.io/learn/cluster-status-check + +Markdown Content: +Ever been troubleshooting a frustrating developer error, only to discover the Kubernetes cluster itself is the culprit? It's a classic scenario: hours spent poring over code, pulling your hair out, when all along the cluster was down the whole time. + +Checking cluster status is a crucial yet inconvenient hurdle. Traditionally, developers face two unappealing options: + +A. **The Help Desk Shuffle:** Compose a desperate Slack message to the DevOps team, pleading for confirmation that the Kubernetes infrastructure is up and running, and if so, what version they're rocking. 🆘️ + +B. **Terminal Tango:** Brace yourself for a crash course in command-line kung fu as your friendly DevOps teammate tries to guide you through a series of cryptic terminal prompts. ️ + +But fear not, weary developers! ‍Enter Botkube, a friendly neighborhood cluster management bot, and its revolutionary Ping Pong method. + +**How to Ping a Pod in Kubernetes** +----------------------------------- + +Forget begging for help or wrestling with terminals. With Botkube installed in your cluster and connected to your Slack or Teams channel, checking cluster status is as simple as sending a message: + +**@botkube ping** + +![Image 1: Getting a Ping for a K8s Cluster in Slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a68edd2a232027d738e329_3N7bM6XGdLHPPHTNQnCKGQ0DyebCjtfJAr0aUd-XTriz8Os3kW0NIKHh10EZ7BQX4UatvELN482b70-P62ce77EF1nchC2DAMK3JzRFwJrFoj59f4WKfMfuArM4Hn23zWXVNOcwTTrFdc2KckXA66Ek.png) + +That's it! ✨ Within seconds, Botkube will bounce back with a cheerful Pong! and the Kubernetes version running in your cluster. This instant confirmation lets you know your cluster is alive and kicking, ready to serve your applications. + +![Image 2: Kubernetes Cluster Status Check](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a68edd0c165c192cae0124_U7kX4HVGBXqO5D7AQel9fANbORGqVzgrVVEVG14-qZpXrDCksAbYd9vysBZGAqrecAaYMFGxJJM2xXKmxv1Mmk2Og-beLI3yKqPfpcZF8Ih4L27CVa2DW-q4emG6bYoM2N8XLc47L95zalJ_WGRAH88.png) + +But what if you get a message like "Instance not connected"? This usually means your Kubernetes cluster is taking a nap, and it's time to call in the DevOps cavalry. + +![Image 3: Kubernetes Cluster not connected message from Slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a68edd1a5d2647f9e56939_KCq5BpPq46j4s-6KHOK86TTSGHJAahGe1bsbfFS-oxNBfXbSJu5xQtfrvH1gNAEMScFa_BlhOgTO_hgrCQeeygBfMvxp06mkJJqlKo3VgKU8jvWWzCIY0hMXxvKHK70CoK7VPKdGdcOB9nqLzX7ojys.png) + +For a deeper dive into the magic of Botkube's Ping Pong, check out Evan Witmer's excellent YouTube video: He demonstrates the ease of pinging in action, so you can witness the wonders firsthand. + +So next time you're facing a Kubernetes conundrum, ditch the help desk dance and terminal tango. Getting a Kubernetes cluster status check is easy! Just remember: **@botkube ping** and let Botkube be your ping pong partner in the fast-paced game of Kubernetes cluster management. diff --git a/hack/assistant-setup/content/botkube.io__learn__copying-files-with-kubectl-cp.md b/hack/assistant-setup/content/botkube.io__learn__copying-files-with-kubectl-cp.md new file mode 100644 index 0000000..f0eb661 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__copying-files-with-kubectl-cp.md @@ -0,0 +1,61 @@ +Title: Master File Transfers in Kubernetes with kubectl cp + +URL Source: https://botkube.io/learn/copying-files-with-kubectl-cp + +Markdown Content: +Kubernetes is a powerful tool for managing and deploying containerized applications. One of the many useful features of Kubernetes is the ability to copy files to and from pods using the kubectl cp command. In this article, we will explore how to use this command to copy files from a pod to your local machine and vice versa. + +**The kubectl cp command** +-------------------------- + +The kubectl cp command allows you to copy files and directories to and from containers in a Kubernetes pod. It works similarly to the cp command in Linux, but with the added functionality of being able to copy files to and from remote containers. + +**Copying files from a pod to your local machine** +-------------------------------------------------- + +To copy a file from a pod to your local machine, you will need to know the name of the pod and the path to the file you want to copy. You can use the kubectl get pods command to list all the pods in your cluster and find the name of the pod you want to copy from. + +Once you have the pod name, you can use the following command to copy the file to your local machine: + +kubectl cp : + +For example, if you want to copy a file named app.log from a pod named my-pod to your current working directory, you would use the following command: + +kubectl cp my-pod:/var/log/app.log . + +This will copy the file to your current working directory. + +**Copying files from your local machine to a pod** +-------------------------------------------------- + +To copy a file from your local machine to a pod, you will need to know the name of the pod and the path to the directory where you want to copy the file. You can use the kubectl get pods command to list all the pods in your cluster and find the name of the pod you want to copy to. + +Once you have the pod name, you can use the following command to copy the file to the pod: + +kubectl cp : + +For example, if you want to copy a file named config.yaml from your current working directory to a pod named my-pod in the /etc/config directory, you would use the following command: + +kubectl cp config.yaml my-pod:/etc/config + +This will copy the file to the specified directory in the pod. + +**Copying directories** +----------------------- + +The kubectl cp command also allows you to copy entire directories to and from pods. To copy a directory, simply add the -r flag to the command. For example: + +kubectl cp -r my-pod:/var/log . + +This will copy the entire /var/log directory from the pod to your current working directory. + +**Conclusion** +-------------- + +The `kubectl cp` command is a valuable asset in your Kubernetes toolkit. It streamlines file management within your pods, making it easy to transfer logs, configuration files, and other data. + +To further enhance your Kubernetes experience, consider integrating a tool like Botkube. Not only does Botkube provide other valuable features, but it also allows you to execute `kubectl` commands (including `kubectl cp`) directly from your Slack or Microsoft Teams workspace. Learn more about setting up the `kubectl` executor in Botkube's documentation: [https://docs.botkube.io/configuration/executor/kubectl](https://docs.botkube.io/configuration/executor/kubectl) + +Additionally, don't forget to take advantage of Botkube's other helpful resources, such as the [kubectl cheat sheet](https://botkube.io/learn/kubectl-cheat-sheet), to optimize your Kubernetes workflow. + +‍ diff --git a/hack/assistant-setup/content/botkube.io__learn__createcontainererror.md b/hack/assistant-setup/content/botkube.io__learn__createcontainererror.md new file mode 100644 index 0000000..2d7e5ec --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__createcontainererror.md @@ -0,0 +1,58 @@ +Title: Fixing CreateContainerError in Kubernetes Pods + +URL Source: https://botkube.io/learn/createcontainererror + +Markdown Content: +**How most encounter CreateContainerConfigError or CreateContainerError in Kubernetes?** +---------------------------------------------------------------------------------------- + +When attempting to create a container within a pod, Kubernetes may encounter two types of errors: CreateContainerConfigError and CreateContainerError. These errors arise before the container reaches the running state. + +To encounter these errors, you can execute the command "kubectl get pods" and view the pod status, which will display the error message shown below. + +_NAME READY STATUS RESTARTS AGE pod-test-a 0/1 CreateContainerConfigError 0 0m53s pod-test-b 0/1 CreateContainerError 0 2m05s_ + +This article will give you some tips on how to identify and fix these errors when they are easy to solve. However, if they are more complicated, you will need to use advanced methods and tools that we won’t cover here. Keep reading until the end to learn about a tool that helps find and solve these errors quicker. + +**Common CreateContainerError Causes and Solutions** +---------------------------------------------------- + +When you deploy Kubernetes, you may encounter the CreateContainerError, which indicates that the container runtime failed to create a container for your pod. This error can have different causes and resolutions depending on the situation. Next, we will discuss two common scenarios that can lead to this error and how to fix them. + +Most Common Cause of Error: ConfigMap or Secret is Missing +---------------------------------------------------------- + +### ConfigMap + +In Kubernetes, a ConfigMap, is an API object that stores configuration data in a key-value format, separated from container images. It enables one or more containers within a Pod to access the configuration data, making it easier to manage an application's settings across different environments without rebuilding the container image. + +### Secrets + +**‍**In Kubernetes, Secrets are API objects used to store sensitive data, such as passwords and access keys, in an encrypted format. They enable secure access to this data by authorized containers and users within the cluster. Secrets, like ConfigMaps, separate sensitive data from container images, enabling secure and efficient deployment of applications. + +### Simplified Solution + +**‍**To resolve the issue, locate the absent ConfigMap or Secert and either generate it within the namespace or attach another file that already exists. + +### Steps to Resolving Issue + +1. Run the command "kubectl describe" and look for any signs of pods missing Secrets or ConfigMaps. If the Kubernetes Pod is missing one of these, it would show in the response message as: _kubelet Error: configmap "configmap-2" not found_ +2. Once you have the name of the ConfigMap or Secert you believe to be missing, verify this with the "kubectl get (configmap\_name)" command. If this returns null, then the file you are searching for is missing. +3. Add a the missing file if it already exists or create the [ConfigMap](https://kubernetes.io/docs/concepts/configuration/configmap/) or [Secret](https://kubernetes.io/docs/tasks/configmap-secret/managing-secret-using-kubectl/) and place them in the pod. +4. Redo Step 2 with the "get configmap" or "get secrets" until you confirm the files are in the correct location. +5. Now verify the Pods Status to ensure that it is up and running with the "kubectl get pods" command. + +_NAME READY STATUS RESTARTS AGE pod-test-a 0/1 Running 0 0m59s_ + +It's worth noting that there is a method of controlling Kubernetes Secrets and ConfigMaps directly from within MySQL. This approach allows users to see everything in chart form, making it easy to find and replace file names. However, users may run into limitations when it comes to complex configurations or larger environments, making it necessary to revert to another tool to fully correct issues within SQL. + +Other Causes of CreateContainerError and CreateContainerConfigError +------------------------------------------------------------------- + +To diagnose and resolve a CreateContainerError, follow these steps: + +#### STEP 1: Collect Pod Info + +Retrieve the description of the pod by running the following command and save to a text file: + +_kubectl describe pod \[pod\_name\] /tmp/troubleshooting\_describe\_pod.txt_ #### STEP 2: Look into Pod Events Output Search through the text file that you just created for any of the below messages in your Pod Events: _Is waiting to start_ _Starting container process caused_ _Container name \[cont\_name\] is already in use by container_ _No command specified_ #### STEP 3: Troubleshoot the Error When error is **_"is waiting to start_**", it means that an object mounted by the container could not be found or is missing. * \*Be certain it is not related to ConfigMaps or Secrets, as mentioned earlier.\* * Examine the pod's configuration and verify that all items assigned to it or the container are accessible in the same workspace. If not, either generate them or modify the manifest to point to an existing object. When error is **_"starting container process caused"_**, * Observe words following the "container process caused" message to see the error that occurred when the container was started. * Find the error. Then modify the image or the container start command to fix. When the error is **_"container name \[cont\_name\] is already in use by container"_**, it means that the container runtime did not delete a previous container created with a similar name. * To fix this error, sign in with root access on the node and open the kubelet log located at /var/log/kubelet.log. * Find the issue in the kubelet log and solve it by reinstalling the container runtime or the kubelet. Sometimes this requires users to re-register the node with the cluster. When error is **_"no command specified",_** it means that the image configuration and pod configuration did not specify which command to run to start the container. * To fix this error, edit the image and pod configuration and add a valid command to start the container. Please note that these steps will only resolve the most common causes of CreateContainerError. If one of these quick fixes does not work, a more complex diagnosis procedure may be necessary to identify the contributing factors in the Kubernetes environment and resolve the problem. Introducing Botkube for Effortless Kubernetes Error Troubleshooting ------------------------------------------------------------------- Kubernetes troubleshooting can be a daunting task without the right tools. Even with best practices in place, errors can still occur, leading to stressful and time-consuming investigations. That's why we developed Botkube – a tool that simplifies the process of Kubernetes troubleshooting for DevOps teams. Botkube provides the following features to streamline the troubleshooting process: Change Intelligence: Every error in Kubernetes is a result of a change. With Botkube, you can quickly identify who made what changes and when they made them. Effortless Notifications: Botkube integrates seamlessly with existing communication channels like Slack, providing real-time notifications so you can quickly resolve issues as they occur. Comprehensive Visibility: Botkube offers a complete timeline of all code and configuration changes, deployments, alerts, code diffs, pod logs, and more. All this information is presented in a single pane of glass, with simple drill-down options for further investigation. Insight into Service Dependencies: Botkube makes it easy to visualize cross-service changes and the ripple effects of such changes across your entire system. If you're interested in exploring Botkube and its features, sign up for a [free trial using this link](https://docs.botkube.io/installation/). With Botkube, you'll never have to waste precious time and resources looking for needles in haystacks again. diff --git a/hack/assistant-setup/content/botkube.io__learn__demystifying-kubectl-drain-safely-evacuating-kubernetes-nodes.md b/hack/assistant-setup/content/botkube.io__learn__demystifying-kubectl-drain-safely-evacuating-kubernetes-nodes.md new file mode 100644 index 0000000..9731acd --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__demystifying-kubectl-drain-safely-evacuating-kubernetes-nodes.md @@ -0,0 +1,67 @@ +Title: Kubectl Drain Explained: Safe Node Evacuation in Kubernetes + +URL Source: https://botkube.io/learn/demystifying-kubectl-drain-safely-evacuating-kubernetes-nodes + +Markdown Content: +In a Kubernetes cluster, it is often necessary to safely evacuate nodes for maintenance or troubleshooting purposes. One of the tools that can help with this process is kubectl drain. However, understanding how to use kubectl drain effectively and safely can be a challenge. In this blog post, we will demystify kubectl drain and explore its various options and best practices for safely evacuating Kubernetes nodes. + +**Understanding kubectl drain** +------------------------------- + +### **What is kubectl drain?** + +* kubectl drain is a command-line tool that helps in safely evacuating Kubernetes nodes. +* It gracefully terminates all the pods running on a node and reschedules them to other available nodes in the cluster. + +### **Why use kubectl drain?** + +* kubectl drain ensures that pods are not abruptly terminated, avoiding any potential data loss or disruption to running applications. +* It allows for planned maintenance or troubleshooting of nodes without impacting the availability of applications. + +**Using kubectl drain** +----------------------- + +### **Syntax and basic usage** + +* The basic syntax of kubectl drain is kubectl drain . +* This command will gracefully evict all the pods from the specified node and reschedule them to other available nodes. + +### **Options and flags** + +* \--ignore-daemonsets: This flag allows kubectl drain to ignore DaemonSet-managed pods, which are typically meant to run on every node. +* \--force: This flag forces the drain operation, even if there are pods that are not managed by a ReplicationController, ReplicaSet, Job, or StatefulSet. +* \--delete-local-data: This flag deletes any local data associated with the pods being evicted. + +**Best practices for using kubectl drain** +------------------------------------------ + +### **Communicate with the team** + +* Before draining a node, communicate with the team to ensure that the planned maintenance or troubleshooting does not impact critical applications. + +### **Considerations for DaemonSets** + +* When using kubectl drain, it is important to consider DaemonSets, as they are meant to run on every node. +* Use the --ignore-daemonsets flag to exclude DaemonSet-managed pods from being evicted. + +### **Graceful termination of pods** + +* By default, kubectl drain waits for a pod's termination grace period to expire before evicting it. +* Ensure that the termination grace period is set appropriately for your pods to allow them enough time to gracefully shut down. + +**Conclusion** +-------------- + +In this blog post, we have explored the kubectl drain command and its various options and best practices for safely evacuating Kubernetes nodes. By understanding how to use kubectl drain effectively, you can ensure that your maintenance or troubleshooting tasks do not disrupt the availability of your applications. + +### **Further into kubectl commands** + +At Botkube, we have created a toolset that not only assists with other areas of K8s, our tool specifically has executor plugins that allow for kubectl command automations. Our chat platform integration allows users to set [kubectl aliases](https://botkube.io/blog/command-line-magic-simplify-your-life-with-custom-kubernetes-kubectrl-aliases-on-botkube) to run the commands directly from their preferred chat productivity platform such as Sl.ack or Teams. + +If you found our above article on kubectl drain, we invite you to check out our [kubectl cheat sheet](https://botkube.io/learn/kubectl-cheat-sheet) where we go further into kubectl commands. It talks about the benefits of running these commands during troubleshooting and how Botkube can help platform engineers run helpful scripts quickly. + +‍ + +### About Botkube + +Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](http://app.botkube.io/) diff --git a/hack/assistant-setup/content/botkube.io__learn__exit-code-125-issues.md b/hack/assistant-setup/content/botkube.io__learn__exit-code-125-issues.md new file mode 100644 index 0000000..572d892 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__exit-code-125-issues.md @@ -0,0 +1,45 @@ +Title: Exit Code 125 Explained: Easy Solutions & Expert Insights + +URL Source: https://botkube.io/learn/exit-code-125-issues + +Markdown Content: +When running a program or script, you may encounter an exit code 125 error. This can be frustrating and confusing, especially if you are not familiar with exit codes and their meanings. In this article, we will discuss what exit code 125 means and provide expert advice on how to resolve this issue. + +Understanding Exit Codes +------------------------ + +Before we dive into resolving exit code 125 issues, it is important to understand what exit codes are and how they work. An exit code is a number that is returned by a program or script when it finishes running. This code can indicate whether the program or script was successful or if there was an error. Exit codes range from 0 to 255, with 0 indicating success and any other number indicating an error. + +Exit code 125 is a specific error code that indicates a command or program was not found. This can happen for a variety of reasons, such as a typo in the command or the program not being installed on your system. It is important to note that exit code 125 is not a universal error code and can vary depending on the operating system and programming language being used. + +Troubleshooting Exit Code 125 +----------------------------- + +If you encounter an exit code 125 error, there are a few steps you can take to troubleshoot and resolve the issue. + +### Check for Typos + +The first thing you should do is double-check the command or program name for any typos. Even a small mistake can result in an exit code 125 error. Make sure to check for any missing or extra characters, as well as any incorrect capitalization. + +### Verify Program Installation + +If you are running a program and receiving an exit code 125 error, it is possible that the program is not installed on your system. Make sure to check that the program is installed and that you are using the correct command to run it. + +### Check File Permissions + +In some cases, an exit code 125 error can be caused by file permissions. If the program or script you are trying to run does not have the proper permissions, it may result in an exit code 125 error. Make sure to check the file permissions and adjust them if necessary. + +### Use a Different Shell + +If you are using a specific shell or terminal to run your commands, try using a different one. Sometimes, certain shells may not recognize a command or program, resulting in an exit code 125 error. Switching to a different shell may resolve the issue. + +### Consult Documentation or Seek Help + +If none of the above steps resolve the issue, it may be helpful to consult the documentation for the program or script you are trying to run. You can also seek help from online forums or communities for the specific programming language or operating system you are using. Experts in these communities may be able to provide more specific advice for resolving exit code 125 issues. + +Conclusion +---------- + +Exit code 125 errors can be frustrating, but with a little troubleshooting and expert advice, they can be resolved. By understanding what exit codes are and how they work, as well as following the steps outlined in this article, you can successfully troubleshoot and resolve exit code 125 issues. Have you encountered an exit code 125 error before? How did you resolve it? Let us know in the comments. + +‍ diff --git a/hack/assistant-setup/content/botkube.io__learn__failed-to-push-some-refs-to.md b/hack/assistant-setup/content/botkube.io__learn__failed-to-push-some-refs-to.md new file mode 100644 index 0000000..1eb1a68 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__failed-to-push-some-refs-to.md @@ -0,0 +1,62 @@ +Title: Git Push Error: "Failed to Push Some Refs To" - Fix It Now + +URL Source: https://botkube.io/learn/failed-to-push-some-refs-to + +Markdown Content: +In the realm of Git, developers often encounter the enigmatic `Failed to Push Some Refs to error.` This error arises when an attempt is made to push committed code to a remote Git repository, but the local repository is out of sync with the remote's updated changes. + +Unveiling the Culprits +---------------------- + +Several factors can trigger the `Failed to Push Some Refs to` error: + +* **Uncommitted Changes:** Pushing uncommitted changes can lead to this error. Ensure changes are committed before attempting to push. +* **Git Pre-Push Hook Issues:** Problematic Git pre-push hooks can hinder the push operation. Verify that pre-push hooks are functioning correctly. +* Incorrect Branch Name: Using an incorrect branch name can cause this error. Double-check the branch name before pushing. +* **Local Repository Desynchronization:** A desynchronized local repository can lead to the error. Update the local repository using git pull origin to resolve the issue. + +Resolving the Error: A Step-by-Step Guide +----------------------------------------- + +Updating the Local Repository: + +`git pull origin` + +This command fetches the latest changes from the remote repository and integrates them into your local repository, ensuring synchronization. + +Rebasing: + +`git push --rebase origin` + +Rebasing rewrites your local branch's history to align with the remote repository, eliminating conflicts and allowing you to push your changes. + +Stashing Local Changes: + +`git stash save git pull origin git stash pop` + +Stashing saves your local changes temporarily, allowing you to update the local repository without losing your work. + +The Force Flag: A Double-Edged Sword +------------------------------------ + +While the `--force` flag can override the error, it's generally discouraged due to potential inconsistencies. Instead, use --rebase to maintain repository integrity. + +Preventing the Error: Proactive Measures +---------------------------------------- + +* Feature Branches: Utilize feature branches for individual contributions, merging them into a master branch to prevent conflicts. +* Updating Before Pushing: Before pushing, always update your local repository using git pull to stay in sync with the remote. +* Rebase for Error Resolution: When encountering the error, employ `--rebase` to resolve the issue without introducing conflicts. + +By following these guidelines, you can effectively prevent and resolve the "Failed to Push Some Refs to" error, ensuring a smooth and harmonious Git experience. + +Enlisting Botkube: Your Troubleshooting Sidekick +------------------------------------------------ + +Beyond the manual troubleshooting steps, Botkube steps in to elevate your Git experience. It seamlessly integrates with your preferred communication platforms, like Slack or Microsoft Teams, transforming those channels into collaborative troubleshooting hubs. + +When the "Failed to Push Some Refs to" error strikes, Botkube promptly alerts you and your team within those channels. This eliminates the need for constant monitoring and ensures everyone is informed. Your team can then discuss solutions directly within the channel, harnessing the power of collective knowledge to diagnose and resolve the issue. Botkube even empowers you to extend your Git control with [Flux](https://botkube.io/integration/botkube-flux-kubernetes-integration) and [Argo CD](https://botkube.io/integration/argo-cd-botkube-kubernetes-integration) integrations. + +With Botkube as your trusty companion, tackling those pesky Git errors becomes a collaborative and efficient endeavor. + +‍ diff --git a/hack/assistant-setup/content/botkube.io__learn__fix-the-unable-to-get-local-issuer-certificate-error-in-kubernetes.md b/hack/assistant-setup/content/botkube.io__learn__fix-the-unable-to-get-local-issuer-certificate-error-in-kubernetes.md new file mode 100644 index 0000000..f4b6991 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__fix-the-unable-to-get-local-issuer-certificate-error-in-kubernetes.md @@ -0,0 +1,53 @@ +Title: Unable to Get Local Issuer Certificate Solved! + +URL Source: https://botkube.io/learn/fix-the-unable-to-get-local-issuer-certificate-error-in-kubernetes + +Markdown Content: +What is the "ssl certificate problem unable to get local issuer certificate" error? +----------------------------------------------------------------------------------- + +The `ssl certificate problem unable to get local issuer certificate` error is a security error that occurs when a Kubernetes cluster is configured to use a self-signed certificate. A self-signed certificate is a certificate that is not signed by a trusted certificate authority. This means that the certificate cannot be verified by the client, which prevents the client from establishing a secure connection to the server. + +This error sometimes can be shortened to "ssl git error". It is the Git Error that plagues local clusters on setup. It is hard to get self service security certificates perfect, but hopefully this page can be a good starting point. While security certificates are not unique to K8s, it is a common error that DevOps engineers face when deploying Kubernetes. + +What causes the "ssl certificate problem unable to get local issuer certificate" error? +--------------------------------------------------------------------------------------- + +The `ssl certificate problem unable to get local issuer certificate` error is caused by the misconfiguration of the SSL certificate on the Kubernetes cluster. When a client attempts to connect to the cluster, the client will not be able to verify the certificate because it is not signed by a trusted certificate authority. This will result in the error message `ssl certificate problem unable to get local issuer certificate`. + +**\*Quick Tip:** Sometimes detecting the error message is the hardest part, most of the time requiring sifting through cluster logs using the command line interface. We created Botkube to assist with this labor intensive process. Having Botkube in a cluster will give developers two advantages to troubleshooting this error: + +1. Slack or Teams alert to a shared channel when this error occurs to allow for immediate action. +2. Ability to automate the log pulling and filtering all directly from the shared group channel! + +See what else [Botkube Cloud can do to help errors and alerts.](https://botkube.io/features) + +How can you fix the "ssl certificate problem unable to get local issuer certificate" errors? +-------------------------------------------------------------------------------------------- + +There are two ways to fix the `ssl certificate problem unable to get local issuer certificate` errors: + +1. You can add the self-signed certificate to the trusted certificate store on the client. This will allow the client to verify the certificate and establish a secure connection to the cluster. +2. You can use a certificate signed by a trusted certificate authority. This will ensure that the certificate can be verified by the client and that the connection to the cluster is secure. + +How to prevent "ssl certificate problem unable to get local issuer certificate" errors? +--------------------------------------------------------------------------------------- + +To prevent `ssl certificate problem unable to get local issuer certificate` errors, you should use a certificate signed by a trusted certificate authority. You can also add the self-signed certificate to the trusted certificate store on the client. + +Here are the steps on how to add a self-signed certificate to the trusted certificate store on a Linux machine: + +1. Open the file `/etc/ssl/certs/ca-certificates.crt`. +2. Add the self-signed certificate to the file. +3. Save the file. +4. Restart the web browser. + +Here are the steps on how to install a certificate signed by a trusted certificate authority: + +1. Obtain the certificate from the certificate authority. +2. Import the certificate into the trusted certificate store on the client. +3. Restart the web browser. + +I hope this article helps you fix the `ssl certificate problem unable to get local issuer certificate` error in Kubernetes. Be sure to check out the other [K8s error articles](https://botkube.io/learn-main-topic/errors) that try to cover other common errors that developers run into while orchestrating Kubernetes. + +One final tip, **do not be afraid to search for tooling that helps with troubleshooting of common errors**. Botkube's AI assistant is a great example of a tool that helps with K8s specific troubleshooting tasks. [Try out Botkube for free](http://app.botkube.io/) to get started with collaborative troubleshooting directly in your communications platform. diff --git a/hack/assistant-setup/content/botkube.io__learn__helm-charts.md b/hack/assistant-setup/content/botkube.io__learn__helm-charts.md new file mode 100644 index 0000000..1620a6c --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__helm-charts.md @@ -0,0 +1,61 @@ +Title: Helm Charts: Deploy Apps on Kubernetes Effortlessly + +URL Source: https://botkube.io/learn/helm-charts + +Markdown Content: +Helm charts are a popular way to package and deploy applications on Kubernetes clusters. They are especially useful for developers and platform engineers who are deploying backend infrastructure, such as databases, caching systems, and load balancers. + +### What is a Helm Chart? + +Helm charts are a way of packaging and deploying applications on Kubernetes clusters. They are composed of a set of templates that define the Kubernetes manifest files for the application and its dependencies. Helm charts also include metadata, such as the chart name, version, description, and dependencies. + +Helm charts can be installed on a Kubernetes cluster using the `helm install` command, which creates a helm release. A Helm release is an instance of a chart running on a cluster. Each release has a unique name and can be managed by Helm commands, such as helm list, helm upgrade, helm uninstall, etc. + +Helm charts can simplify the deployment and management of complex applications on Kubernetes, but they can also introduce some challenges and errors. In this article, we will discuss some common troubleshooting issues when deploying Helm charts to Kubernetes clusters and how to resolve them. + +**Helm Chart Troubleshooting: Failed with Error Message** +--------------------------------------------------------- + +One of the most common issues when deploying helm charts is that the `helm install` command fails with an error message. This can happen for various reasons, such as: + +### **Helm Chart Not Found** + +![Image 1: Having trouble finding Helm Charts? Botkube can Help!](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64cd5fcfd7459365e603ef62_i6ThaPEWqaHz_8NN_9-oU7occjK6iNuOEiGAfDU1M9KgKCvXCBheOidD7bf262iNmcWW8Noma9zeuC_9cW3gp537myDP9QZCVNfluCU372ZmhkHnKwN6oQsCcGCIzXwRD0cOalluClSC0ONyOUPoqtc.png) + +This error occurs when Helm cannot find the chart that you are trying to install. You can fix this error by adding the chart repository to your local Helm client. + +### **Invalid YAML** + +If there is an error in your YAML file, Helm will not be able to create the Kubernetes resources. You can use a YAML validator to check your file for errors. Check into Botkube's solution YAML validator. + +### **Invalid Chart** + +If there is an error in your chart, Helm will not be able to create the Kubernetes resources. You can use a chart linter to check your chart for errors. + +### **Insufficient Permissions** + +If you do not have sufficient permissions to create Kubernetes resources, Helm will not be able to create them. You can check your permissions by running `kubectl auth can-i create `. + +To troubleshoot these issues, you should first check the error message and see if it provides any clues about the cause of the failure. + +You can also use the `--debug` flag to get more detailed information about the helm install process. At this point, Helm will show you all of the Kubernetes resources that it is creating. If there is an error, it will be displayed in the output. + +**The Easy Way: Botkube, Your Kubernetes Troubleshooting Assistant** +-------------------------------------------------------------------- + +Up until this point, troubleshooting Helm has sounded like a very manual process of looking through error messages. Not to mention, most of this is done from within the command line interface. What if troubleshooting didn’t have to be that manual? + +If you are having an issue deploying Helm to your cluster, [install Botkube’s Helm Plugin](https://botkube.io/integration/helm) to your cluster and connect it to your preferred productivity tool (Slack, Teams, or Mattermost). Now let Botkube read through all the error messages and give you the solution. Botkube can quickly fix things like wrong Helm version or problem with helm packaging. + +In addition to finding the solution for Helm errors, Botkube’s ChatOps functions let you take action directly from your productivity tool. Need to rename the Helm chart to match the version? No problem! Botkube found that solution and lets you fix it in one click! + +### **Kubernetes ChatOps now with ChatGPT!** + +Believe the hype around ChatGPT troubleshooting code? Botkube thinks it is pretty useful for suggesting solutions to common K8s errors as well. Our new [Doctor plugin](https://botkube.io/blog/use-chatgpt-to-troubleshoot-kubernetes-errors-with-botkubes-doctor) allows operation engineers to bring ChatGPT directly into their cluster! + +With Botkube's other powerful chat integrations, you can now prompt the power of ChatGPT directly from your Slack Channel. Between Botkube's helpful suggestions and ChatGPT, you should be able to navigate deploying helm charts in no time. Simply utilize [Botkube's web interface](https://botkube.io/blog/step-by-step-tutorial-leveraging-botkubes-cloud-slack-feature-for-kubernetes-collaborative-troubleshooting) to begin deploying your initial chart today! + +See how others are using Botkube with Helm Charts +------------------------------------------------- + +Check out this [case study](https://botkube.io/case-studies/civo) that we did with Shawn Garret where he talks about using Botkube to combine helm charts into a single deployment. diff --git a/hack/assistant-setup/content/botkube.io__learn__how-botkube-makes-monitoring-kubernetes-easy.md b/hack/assistant-setup/content/botkube.io__learn__how-botkube-makes-monitoring-kubernetes-easy.md new file mode 100644 index 0000000..41f2f96 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__how-botkube-makes-monitoring-kubernetes-easy.md @@ -0,0 +1,64 @@ +Title: Learn How Botkube Makes Kubernetes Monitoring Simple + +URL Source: https://botkube.io/learn/how-botkube-makes-monitoring-kubernetes-easy + +Markdown Content: +Kubernetes Monitoring is essential for ensuring the health and performance of your Kubernetes cluster. However, traditional monitoring solutions can be complex and difficult to set up and maintain. Botkube is a ChatOps-based monitoring tool that makes it easy to monitor your Kubernetes cluster from within your favorite messaging platform. With Botkube, you can: + +* Connect & setup other popular Kubernetes monitoring tools like Prometheus +* Set up alerts and notifications for any Kubernetes event +* Run checks on Kubernetes resources to ensure they are healthy +* Execute [kubectl commands](https://botkube.io/learn/kubectl-cheat-sheet) to debug issues +* Get recommendations for standard practices + +‍ + +![Image 1: Kubernetes errors connected to slack to allow K8s Monitoring](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c8096484766a4822cfe03d_h7KEmGG6uIsB0PrsO44vk6-KidQBbJ32mnVrWJJ33GL6gaqoX_tOr937XzAlk_lyo-SC61_zUoXy_9Dj0Lat2Sckr7j_FttOekh0IKY0nOHaOBqGEgQRBKOW2G9Ba5-j4JA7hSXjFJB3MgfzX4iW720.png) + +**Why Monitor Kubernetes? (Benefits)** +-------------------------------------- + +Monitoring Kubernetes is essential for maintaining a healthy and efficient container orchestration environment. With the dynamic nature of Kubernetes clusters, continuous monitoring of key metrics, such as memory usage, is crucial to identify potential issues and ensure smooth operation. By proactively monitoring Kubernetes, organizations can gain valuable insights into their containerized applications' performance and resource utilization, leading to improved overall system management and user experience. + +![Image 2: Use Botkube to Troubleshoot Kubernetes from any device](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c80964b83165eff2333268_1pfB9zUfHYmL9AUPmWaNSI482V6DZoCHo9vdTINtaiCFO6gANmDjCd2gAg8sYBkHVJZpL617B0klql03GIswdWzpFSzqfCB7AAnD27M5Ce_xoreM6391h8iYBV_Y5XD-d8Dr48aHtGvOfYQdxdzn604.jpeg) + +### **Benefits of Kubernetes Monitoring:** + +* **Resource Optimization:** Keep track of memory usage and other vital metrics to optimize resource allocation, preventing wasteful overprovisioning or resource bottlenecks. +* **Early Issue Detection:** Identify potential performance bottlenecks and anomalies in real-time, allowing prompt action to prevent service disruptions. +* **Improved Scalability**: Monitor cluster performance during spikes in usage to determine whether scaling resources up or down is necessary to maintain optimal performance. +* **Enhanced Stability:** Ensure the stability of Kubernetes nodes and applications by monitoring for memory leaks or excessive resource consumption. +* **Capacity Planning**: Gain insights into historical resource trends, enabling better capacity planning and infrastructure scaling decisions. +* **Cost Efficiency:** Avoid unnecessary cloud resource expenditures by monitoring and right-sizing containers, ultimately reducing operational costs. +* **Service-Level Agreement (SLA) Adherence:** Monitor Kubernetes to meet SLA commitments by proactively addressing potential issues before they impact users. +* **Security:** Monitor for unusual behavior or unauthorized access, enhancing the security posture of the Kubernetes environment. +* **Performance Optimization:** Use historical metrics to fine-tune applications and infrastructure for better overall performance. +* **Compliance and Auditing:** Ensure compliance with industry regulations by keeping track of resource utilization and performance over time. + +By adopting a robust Kubernetes monitoring strategy, organizations can harness the full potential of containerization and deliver reliable, high-performance services to their users, making monitoring a critical aspect of their Kubernetes operations. + +**Monitoring Points in Kubernetes Clusters** +-------------------------------------------- + +For effective management and optimization of Kubernetes clusters, users should focus on monitoring specific critical components within the cluster. These key monitoring points provide valuable insights into the cluster's health, resource utilization, and overall performance. Here are the primary areas where Kubernetes users should prioritize monitoring: + +1. **Cluster Health and Resource Metrics**: Monitoring the overall cluster health is fundamental, and this includes checking the availability and performance of the Kubernetes master components (API server, controller manager, and etcd). Additionally, monitoring resource metrics such as CPU and memory utilization for nodes and pods is crucial for identifying potential bottlenecks and ensuring efficient resource allocation. +2. **Pod and Container Metrics**: Users should closely monitor individual pods and containers within the cluster. This involves tracking metrics like CPU and memory usage, network traffic, and the number of restarts for each container. Monitoring pod health ensures that applications are running correctly and helps detect any issues that may arise due to misconfigurations or resource constraints. By closely observing pod and container metrics, users can proactively address problems, ensuring high availability and optimal performance for their applications in the Kubernetes cluster. + +**Botkube: Empowering Kubernetes Monitoring through ChatOps** +------------------------------------------------------------- + +Botkube stands out as the ultimate Kubernetes monitoring tool, offering a seamless ChatOps experience that revolutionizes cluster management. With its unparalleled features, Botkube becomes the go-to choice for Kubernetes users looking to optimize their monitoring efforts. Here's why Botkube's ChatOps capabilities make it the best Kubernetes monitoring tool: + +1. **Easy Integration with Other Monitoring Tools:** Botkube simplifies the integration of additional monitoring tools like Prometheus into the Kubernetes environment. Users can effortlessly set up Prometheus alerts to trigger notifications directly to their preferred communication platforms, such as Slack, Teams, or Mattermost. By leveraging the default Kubernetes error alerts, Botkube ensures that users receive immediate notifications about any critical issues happening within their cluster, enabling swift responses to potential problems. This integration is the easiest way how to monitor Kubernetes pods with Prometheus. + +![Image 3: Prometheus alerts are some of the most powerful in Kubernetes. Botkube allow users to Automate Prometheus for ease of Monitoring and Troubleshooting Kubernetes](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64c80964041699a929ce392f_N2bfxPNt233ldjIRgZ4Jcfkvp5PTU-HVC_uDLJse5nZa5Vh1JrmJhVutT9zLV2GWCHXS6QA_kik0XbJqyfK9_JnuNvQZjKFeOHvkUQPIIl7p6uTYjpTFUUn69cPIM6MCSlONqsmuGauMHcDpo1XnJuE.png) + +2. **Real-time Error Tracking and Troubleshooting:** Botkube provides an intuitive interface for monitoring and troubleshooting Kubernetes errors, all within the comfort of Slack or other supported platforms. Users can instantly view and comprehend the errors occurring in their cluster, allowing them to take prompt corrective actions without leaving their preferred communication channel. This real-time monitoring and response capability enhance cluster health and ensure smooth operation of applications. + +3. **Seamless Team Collaboration:** Sharing Kubernetes monitoring insights with the team becomes effortless through Botkube's integration with popular communication platforms. Collaboration is streamlined as team members can view and discuss cluster health, errors, and responses collectively, fostering a collaborative DevOps environment for efficient incident management. + +4. **Flexible and Mobile Cluster Management:** With Botkube's integration with Slack App, Kubernetes users can manage their clusters on the go. Whether on vacation, at the beach, or anywhere with an internet connection, users can execute Kubectl commands directly from Slack, enabling quick actions and decision-making remotely. This flexibility ensures uninterrupted cluster management, regardless of physical location. + + +In conclusion, Botkube's ChatOps features provide Kubernetes users with a comprehensive and accessible monitoring solution. The tool's ability to integrate with other monitoring tools, coupled with real-time error tracking and team collaboration, empowers users to efficiently manage their Kubernetes clusters, troubleshoot incidents, and respond proactively – all from within their preferred communication platforms. Whether in the office or on the go, Botkube's presence in Slack and other platforms enables users to stay connected with their clusters at all times, making it the ultimate Kubernetes monitoring companion for streamlined and efficient cluster management. diff --git a/hack/assistant-setup/content/botkube.io__learn__how-to-debug-crashloopbackoff.md b/hack/assistant-setup/content/botkube.io__learn__how-to-debug-crashloopbackoff.md new file mode 100644 index 0000000..e15faef --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__how-to-debug-crashloopbackoff.md @@ -0,0 +1,98 @@ +Title: Troubleshooting CrashLoopBackOff: A Step-by-Step Guide for K8s + +URL Source: https://botkube.io/learn/how-to-debug-crashloopbackoff + +Markdown Content: +Have you ever had a Kubernetes pod crash and then repeatedly fail to start again? If so, you're not alone. This common error is known as CrashLoopBackOff. The Botkube team put together this article to help troubleshoot this common Kubernetes error and also offer a possible easier solution to solving the error! + +**What is the CrashLoopBackOff Error?** +--------------------------------------- + +CrashLoopBackOff occurs when a pod fails to start for some reason. Kubernetes will try to restart the pod, but if the pod continues to fail, Kubernetes will eventually give up and mark the pod as CrashLoopBackOff. It is not as much of a pod erroring out as a pod delaying its start to give time for a fix to be implemented. + +If you're seeing the CrashLoopBackOff error, there are a few things you can do to troubleshoot the problem. First, check the pod's logs to see if there are any errors that might be causing the pod to fail. You can also use the command kubectl get pods to get more information about the pod, including its status and resources. + +![Image 1: CrashLoopBackOff Pod error displayed in the terminal](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/648b4b0e5495d47e6f22704c_gDm4R9_hU-uv1PUi3Xy60rBEJTpyY3c74aMfdtOzxlZfPUj-r8zcknnwL4W7q3P-8yuS2OervhgjCV4-rsSvRm2YGOVW8syS0bv7ECu9xhNPEEhR0dA_TCdgXaoooPHvxYG1evWNKep-yVjvGO1_PEQ.png) + +_Image mentioned in a_ [_help forum on Microsoft's site_](https://learn.microsoft.com/en-us/answers/questions/328469/understanding-aks-crashloopbackoff) _about users switching to Kubernetes._ + +**Common Causes of Pod CrashLoopBackOff** +----------------------------------------- + +CrashLoopBackOff occurs commonly in Kubernetes pods. It indicates that a pod has repeatedly failed to start and is now being restarted automatically. There are a number of reasons why this might happen, including: + +### **Docker Versioning Issue (Common on First K8s Deployment)** + +One common reason for the CrashLoopBackOff error is using an outdated version of Docker. This will happen often when first switching to a Kubernetes deployment. The app that is being switched over may be on an older version of Docker. The Docker version for the app and K8s pod must match in order to run the services correctly. + +To check your Docker version, run the following command: + +`docker -v` + +If your Docker version is outdated, you can update it by running the following command: + +`sudo apt update` + +`sudo apt install docker-ce` + +\*It is a best practice to use the latest version of Docker to prevent deprecated commands and inconsistencies that can cause containers to start and fail repeatedly. + +### **Memory Limits (OOMKilled Pod Error)** + +Another issue that could be causing the repeatedly crashing of your Kubernetes Pod could be memory. Each pod will have a limit to the amount of memory they are allowed to use. If actions within the pod cause memory usage to go over this limit, the pod will crash. Find out more on the [OOMKilled Error for Kubernetes](https://botkube.io/learn/what-is-oomkilled) on our other learn article. + +K8s repeatedly starting and running out of memory would trigger the CrashLoopBackOff eventually. + +### **Issue Caused by Third-Party Services** + +If you go to start a pod and receive the caused by post error, then it is most likely a third-party issue. Here is what the error what that would look like: + +`send request failure caused by: Post` + +This mostly has to do with how users set up their DNS for any third party services. This will also effect other environment variables as well. It is recommended you troubleshoot this issue with a shell, and check kube-dns config for issues. + +### **Pods Using the Same Port** + +Another possible cause of the CrashLoopBackOff error is a port conflict. This can happen when two containers are trying to use the same port. To check for a port conflict, you can run the following command: + +`netstat -an | grep LISTEN` + +This will show you a list of all ports that are currently in use. If you see a port that is in use by two different containers, this could be causing the CrashLoopBackOff error. + +**How to fix CrashLoopBackOff Kubernetes Pods** +----------------------------------------------- + +### **The Easy Way - with Botkube's K8s Tool** + +So if you truly intend on troubleshooting these pods instead of having them stuck in a restart loop, Botkube would speed the process up. Installing Botkube Cloud into your cluster allows for 3 timesaving K8s troubleshooting benifits: + +1. The Kubernetes alert of Crashloopbackoff error happening would come directly into Slack or your preferred chat platform. +2. Between Botkube's own troubleshooting suggestions and prompting our new [ChatGPT plugin](https://botkube.io/blog/use-chatgpt-to-troubleshoot-kubernetes-errors-with-botkubes-doctor), you receive suggestions of the best solution based on the error messages received. +3. Install executors, like our [Kubectl commands](https://docs.botkube.io/usage/executor/kubectl), to one click run troubleshooting commands solving CrashLoopBackOff error without leaving Slack or Teams. + +![Image 2: Executing commands, like Kubectl logs, from within Slack using Botkube](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/648b4b0fb5c403880b1a8a41_1udAXWvJx61eJFClbpPH4tnHH0IZUa-Y3YmL8M-_EBh0V1HVAaUzBuk2-9Y7XCzSG1jJwPauQRaHFNg2yfLeEFZzVjxui4z1-lJkbuQdHSPZF7pa5CMsW6x4wWuWddxSoQr2DXbsFmOvhoKC3EhBxuE.png) + +### **The Manual Way - Get Your Terminal Ready** + +Without our K8s AI assistant to help with Kubernetes audits, everything gets a little more manual. We will provide some troubleshooting tips to help here, but our team highly recommends using our troubleshooting tool! It just speeds up the troubleshooting process and provides more capabilities for feature K8s use cases. + +**See if running** `kubectl describe pod [name]` **displays one of the following error messages:** + +1. Liveness probe failed +2. Back-off restarting failed container + +These messages indicate that you are experiencing a temporary resource overload. This is often due to an activity spike. One solution is to adjust periodSeconds or timeoutSeconds to allow the application more time to process. This may resolve the issue or allow your application to work itself to another potential error. + +**If the error messages do not or no longer appear, you will need to check the pod logs.** + +To check a pods logs simply run the `kubectl logs --previous --tail 20`command and download the output. Now is where the true investigating work comes into Kubernetes. If it is not immediately obvious with the first 20 lines of logs, the command will have to be adjusted until an error log of value is found. + +You are looking for OOMKilled logs or disconnect logs, something that would have caused the pod to fail/require restart. Our team would like to mention our cloud product here again as it takes the manual searching out of Kubernetes error logging. + +**One last log check, this time from the pod deployment.** + +At this point you have checked the last 20 lines, and tried to find a back-off restarting failed error. If neither of those show a solution, you will have to pull deployment logs. These can be easily pulled into a file with the `kubectl logs -f deploy/ -n` command. + +These deployment logs may show other issues from within the cluster as well. Log for the file paths of your pod and everything that is being deployed there. Look for any error with deploying messages for numbers or names. Now search that code or name of the issue and try to fix the deployment issues. + +‍ diff --git a/hack/assistant-setup/content/botkube.io__learn__how-to-fix-fatal-remote-origin-already-exists-git-error.md b/hack/assistant-setup/content/botkube.io__learn__how-to-fix-fatal-remote-origin-already-exists-git-error.md new file mode 100644 index 0000000..64f881f --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__how-to-fix-fatal-remote-origin-already-exists-git-error.md @@ -0,0 +1,94 @@ +Title: "Fatal: remote origin already exists" Error: Fix (2023) + +URL Source: https://botkube.io/learn/how-to-fix-fatal-remote-origin-already-exists-git-error + +Markdown Content: +In this comprehensive blog post, we shall delve into the root causes behind the occurrence of the 'fatal: remote origin already exists’ error message while working with Git repositories. Understanding the intricacies of this error is crucial for ensuring smooth version control and collaborative software development. We will explore the various factors that might trigger the error, providing you with a holistic view of its origins. Armed with this knowledge, you'll be better equipped to tackle the issue and prevent its recurrence in your future projects. + +Beyond mere analysis, we are committed to equipping you with practical solutions to overcome this Git hiccup effectively. Throughout the article, we will showcase multiple approaches to address the error message, tailoring the solutions to different scenarios. Whether you're a seasoned Git expert seeking to fine-tune your repository management skills or a novice navigating through the version control landscape, our step-by-step guidance will empower you to resolve the error with confidence. + +Why does the "**Remote Origin Already Exists" Error Happen?** +------------------------------------------------------------- + +Imagine you're following an online Git tutorial, and everything has been going smoothly. However, at a certain point, you encounter a command that resembles the following: + +`git remote add origin /.git` + +To your dismay, executing this command leads to the dreaded error message: + +`fatal: remote origin already exists.` + +This error message may appear perplexing, but it's relatively straightforward to comprehend. Unlike centralized version control systems (VCSs), Git operates without a central server. Instead, Git employs what we refer to as "remote repositories" or simply "remotes." These remotes represent repositories with which you may have read and/or write access. They are typically located on machines other than your own and are accessible via SSH or HTTP. Interestingly, even though they are named "remotes," they can exist on your local machine, which might sound counterintuitive. + +Every remote has a unique name to distinguish it, and within a single repository, you can have multiple remotes as needed. However, it's important to note that you cannot have two remotes with the same name. If you attempt to add a remote with a name that matches an existing remote, a fatal error occurs, halting the process. + +To verify whether a remote called "origin" already exists in your repository, you can simply execute the following command: + +`git remote` + +This will prompt Git to display a list of all existing remotes for the current repository. If you desire more comprehensive information, you can use the verbose parameter with the remote command like this: + +`git remote -v` + +This will provide not only the names of each remote but also their associated URLs. + +Worth noting, the error message might not always contain the term "origin." For instance, if you attempt to add a remote named "remote1," and a remote with that name already exists, the error message would be: + +`fatal: remote remote1 already exists.` + +Similarly, just as the default branch in Git is traditionally called "controller" (although this could change in the future), the default remote is named "origin." However, you can freely choose any name for your remotes, provided it complies with the legal naming conventions in Git. So, feel free to explore and experiment with remotes to enhance your Git experience! + +Resolving the "Remote Origin Already Exists" Error (5 Solutions to Try) +----------------------------------------------------------------------- + +Now that we have delved into the reasons behind encountering the error message, let's explore several potential solutions to address this issue. Remember that the most suitable solution will depend on your specific situation, as various scenarios can trigger this problem. + +### 1\. Embrace Botkube's AI-Powered Assistance + +Innovative solutions are at our fingertips with Botkube's AI capabilities. By integrating Botkube into your Git workflow, you can rely on its intelligent algorithms to diagnose and resolve the "remote origin already exists" error efficiently. Botkube will analyze your repository setup, identify the root cause, and suggest the most appropriate course of action, tailored to your unique circumstances. + +Begin by registering for [Botkube Cloud](https://app.botkube.io/) at app.botkube.io. With Botkube's AI prowess at your disposal, navigating Git remote issues becomes a breeze! + +### 2\. Remove Any Existing Remotes + +Suppose you encounter the error due to an existing remote named "origin" that no longer suits your needs. Follow these steps to rectify the situation: + +* Create a new repository online using GitHub, GitLab, or your preferred platform. +* In your local repository, remove the existing "origin" remote: + +`git remote remove origin` + +* Add the new online repository as the correct "origin" remote. +* Push your code to the new "origin." + +### 3\. Change Existing Remote's URL + +A faster alternative to removing and re-adding the remote is updating the URL of the existing "origin" remote: + +`git remote set-url origin ` + +Remember, "origin" is just a name for the remote, and you can use any suitable name. + +### 4\. Modify the Name of Existing Remote + +When you need to keep the old "origin" remote while adding a new one, follow this simple approach: + +git remote rename origin + +For example, to rename your "origin" remote to "backup," execute: + +`git remote rename origin backup` + +After renaming, you can proceed to add the new "origin" without encountering the error. + +### 5\. Check Remote Configuration + +Sometimes, the error may arise if you unknowingly executed the "add remote" command in a previous step. To confirm if this is the case, use the Git remote command with the verbose option: + +`git remote -v` + +This will display a list of existing remotes along with their associated URLs. If the "origin" remote already points to the URL provided in the tutorial, your repository is ready to go, and no further action is required. + +By utilizing these diverse approaches, you can overcome the "remote origin already exists" error effectively and advance confidently in your Git endeavors. Let's embrace these solutions and make Git management a seamless experience! + +‍ diff --git a/hack/assistant-setup/content/botkube.io__learn__is-kubernetes-an-operating-system.md b/hack/assistant-setup/content/botkube.io__learn__is-kubernetes-an-operating-system.md new file mode 100644 index 0000000..0a42dee --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__is-kubernetes-an-operating-system.md @@ -0,0 +1,34 @@ +Title: Is Kubernetes an Operating System? Demystifying the Confusion + +URL Source: https://botkube.io/learn/is-kubernetes-an-operating-system + +Markdown Content: +Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications. It is often referred to as a "container orchestration platform" or "container management system." + +**So, is Kubernetes an Operating System?** +------------------------------------------ + +The answer is not simple. Kubernetes does not provide all of the features of a traditional operating system (OS), such as device drivers, file systems, or memory management. However, it does provide many of the same capabilities as an OS at the container level. + +For example, Kubernetes can be used to start, stop, and restart containers; to manage container resources; and to provide networking and storage for containers. It can also be used to deploy and scale containerized applications. + +In many ways, Kubernetes can be thought of as an OS for containers. It provides a way to manage and run containers at scale, and it can be used to deploy and scale containerized applications. + +However, it is important to remember that Kubernetes is not a traditional OS. It does not provide all of the features of an OS, and it is not designed to be used as a replacement for an OS. + +Instead, Kubernetes should be thought of as a tool that can be used to manage and run containerized applications. It can be used to simplify the deployment and management of containerized applications, and it can help to improve the scalability and reliability of containerized applications. + +**Benefits of Using Kubernetes** +-------------------------------- + +There are many benefits to using Kubernetes, including: + +* Scalability: Kubernetes can be used to scale containerized applications to meet demand. +* Reliability: Kubernetes can help to improve the reliability of containerized applications by providing features such as automatic failover and load balancing. +* Portability: Kubernetes is a portable platform, so it can be used to deploy and manage containerized applications on a variety of infrastructure. +* Cost-effectiveness: Kubernetes can help to reduce costs by automating the deployment and management of containerized applications. + +**Conclusion** +-------------- + +Kubernetes is a powerful tool that can be used to manage and run containerized applications. It provides a number of benefits, including scalability, reliability, portability, and cost-effectiveness. If you are looking for a way to deploy and manage containerized applications, Kubernetes is a good option to consider. diff --git a/hack/assistant-setup/content/botkube.io__learn__kubectl-cheat-sheet.md b/hack/assistant-setup/content/botkube.io__learn__kubectl-cheat-sheet.md new file mode 100644 index 0000000..8beff70 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__kubectl-cheat-sheet.md @@ -0,0 +1,147 @@ +Title: Kubectl Cheat Sheet: Essential Commands at Your Fingertips + +URL Source: https://botkube.io/learn/kubectl-cheat-sheet + +Markdown Content: +**What is Kubectl?** +-------------------- + +`Kubectl` is a command-line tool used to deploy and manage applications on a Kubernetes cluster. It allows you to interact with the Kubernetes API to create, update, and delete resources such as pods, services, and deployments. kubectl can be used to manage both local and remote Kubernetes clusters and is an essential tool for anyone working with Kubernetes. + +**How to Install Kubectl into Kubernetes** +------------------------------------------ + +### **Manual Installation Method** + +If you want to use kubectl, the command-line tool for Kubernetes, you need to install it on your machine. Depending on your operating system, there are different ways to do that. Some operating systems, such as Windows, Linux, and Mac, have local specific options that let you download and install kubectl directly. Other solutions, such as Minikube, allow you to install the tool set into your Kubernetes cluster without needing a local installation. + +Either way, installation is quick and easy, and you can find detailed steps for each option on the \[official Kubernetes documentation\]([https://kubernetes.io/docs/tasks/tools/install-kubectl/](https://kubernetes.io/docs/tasks/tools/install-kubectl/)). + +### **Botkube’s Setup Wizard for Kubectl Easy Installation** + +This Kubectl cheatsheet would not be complete without showing the new quickest way to install Kubectl commands on your cluster. With Botkube’s setup wizard, simply select that you want to add Kubectl into your cluster on the Step 3 plugin page. Feel free to add any other helpful K8s plugins like Helm. Once the setup wizard is complete, users can access Kubectl commands, such as kubectl restart pod, from their K8s cluster. + +![Image 1: Easily install kubectl into kubernetes clusters with one click on the Botkube Cluster setup wizard](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64d154ccef984e82336dae1a_UDXteleWUlLJ1h495wr-eU7OqNyx3C-_aON-kSFgRVCK_35_iIzuouiTIHDYyo8ERPM0wCxseEROlkkkkVZVDJNmSJnm1JhA53HDTMGkkUGeDLEl5jKVpVaNciIhllLYqpsYfuza79QwLhH0cp1UE0Q.png) + +**Tip #1 - How to check kubectl version?** +------------------------------------------ + +To check the version of `kubectl`, run the following command: + +`kubectl version` + +This will display the version information for both the client and server components of `kubectl`. + +**Tip #2 - What are kubectl logs?** +----------------------------------- + +`kubectl logs` is a command used to print the logs of a container in a pod. This is useful for debugging purposes and for getting information about what a container is doing. By default, it will print the logs from the first container in the specified pod. You can also specify a container name to print logs from a specific container within the pod. + +Logs is one area of the Kubernetes DevOps stack to get correct and make easily available to everyone on the team. Botkube has learned from our own [internal need for automed Kubernetes log pulling](https://botkube.io/blog/optimizing-collaboration-and-notifications-with-the-botkube-argocd-plugin#how-botkube-uses-argocd-for-gitops-management) how important it is that everyone has access and knows how to pull the logs they need. Botkube cloud enables this developer self service platform directly in a group chat channel. + +Botkube helps Automate K8s log management in three ways: + +1. **Alerts** \- Notification that a pod is having an error directly to preferred chat platform; Slack, Discord, Teams, or Mattermost. +2. **One-Click Log Management** \- Drop down of Kubectl log commands to run without switching back to the terminal. +3. **Multipurpose Log Commands** - Receive log trail in the shared channel for everyone on the team to see and learn from the troubleshooting process. + +![Image 2: Running Kubectl Logs command from Slack to describe a pod error](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6540047570b8a1cc0cd1d65c_SpSgE1gwyiRtteaKC-Spqsx8es_eBln7hmaQbAGhoyAG3WHx0lgEDOHghYjdqgXLo7X78d_is5SFVUUwpx4Tg6qFsQd3DP6XUB9Nqcobt-EaYs9TVblIS92-Jg9ZOUKcZaLAlt7PSUJYgZGaP3vyKRM.png) + +If this automated log pulling process is something that your K8s development team may need, [give it a try](https://app.botkube.io/) free of charge today! + +**Tip # 3 - Deleting with kubectl delete pod** +---------------------------------------------- + +`kubectl delete pod` is a command used to delete a pod. When you delete a pod, Kubernetes will create a new one to replace it. This is useful for updating pods with new configurations or images. If you want to delete the pod and prevent Kubernetes from creating a new one, you can use the --force flag. + +**Tip #4 - Running kubectl -k to Deploy Kustomization File** +------------------------------------------------------------ + +`kubectl -k` is a command used to deploy Kubernetes resources using a kustomization file. A kustomization file is a YAML file that defines a set of Kubernetes resources and how they should be deployed. It allows you to customize your deployments without modifying the original YAML files. + +**Tip #5 - Copying Files with kubectl cp** +------------------------------------------ + +`kubectl cp` is a command used to copy files and directories between a container and the user's local file system. This is useful for transferring files to and from a container for debugging purposes or to extract data from a container. + +To copy a file from a container to the local file system, use the following command: + +`kubectl cp /: ` + +To copy a file from the local file system to a container, use the following command: + +`kubectl cp /:` + +**Tip #6 - Run Container Commands with kubectl exec** +----------------------------------------------------- + +`kubectl exec` is a command used to run a command inside a container in a pod. This is useful for debugging purposes or for running commands that are not included in the container image. By default, it will run the command in the first container of the specified pod. You can also specify a container name to run the command in a specific container within the pod. + +**Tip #7 - Port Forwarding with kubectl Port Forward** +------------------------------------------------------ + +`kubectl port` forward is a command used to forward a local port to a port on a pod. This is useful for accessing services running inside a pod directly from your local machine. For example, if a pod is running a web server on `port 80`, you can use `kubectl port forward` to forward `port 80` on the pod to `port 8080` on your local machine. Then, you can access the web server by navigating to `http://localhost:8080` in your web browser. + +To forward a port, use the following command: + +`kubectl port-forward :` + +`` is the name of the pod you want to forward the port from. `` is the port on your machine that you want to forward to. `` is the port on the pod that you want to forward from. + +**Tip #8 - Submitting a File using the kubectl Apply Command** +-------------------------------------------------------------- + +`kubectl apply` is a command used to apply a configuration file to a Kubernetes cluster. It is the recommended way to manage Kubernetes resources and can be used to create, update, or delete resources. When you apply a configuration file, Kubernetes will compare the desired state of the resources in the file to the current state of the resources in the cluster and make any necessary changes to bring the resources to the desired state. + +\*`kubectl apply -f` typically requires a YAML or JSON filename afterward to instruct what resources need to be built. + +When you run `kubectl apply -f `, Kubernetes will read the specified configuration file and perform the following actions: + +1. If the resource(s) defined in the file do not already exist in the cluster, Kubernetes will create them. +2. If the resource(s) already exist in the cluster, Kubernetes will update them to match the desired state specified in the file. This is where the "apply" command differs from "kubectl create" – it can both create and update resources. +3. If there are resource definitions in the file that are no longer needed, Kubernetes will delete those resources from the cluster. + +**Tip # 9 - What does _kubectl create Namespace_ do?** +------------------------------------------------------ + +`kubectl create namespace` is a command used to create a new namespace in a Kubernetes cluster. Namespaces are a way to divide a Kubernetes cluster into multiple virtual clusters. They provide a scope for names, so resources with the same name can coexist in different namespaces. Namespaces can be used to separate different environments, such as production and development, or different teams working on the same cluster. To create a new namespace, use the following command: + +`kubectl create namespace ` + +Replace `` with the desired name of the new namespace. + +**Tip #10 - Troubleshooting with kubectl Debug Command** +-------------------------------------------------------- + +`kubectl debug` is a command used to enter a debug container that is co-located with a target container in the same pod. This is useful for debugging purposes, as it allows you to examine the environment of a container and debug issues that may be occurring. When you enter the debug container, you will have access to the same file system and network namespace as the target container, allowing you to run diagnostic commands and examine logs. + +To enter the debug container, use the following command: + +`kubectl debug -c ` + +`` is the name of the pod that contains the target container. `` is the name of the target container that you want to debug. + +**How Botkube makes Kubectl Easier** +------------------------------------ + +Botkube simplifies the use of `kubectl` in many areas, but three stand out as particularly beneficial. Let us break down how Botkube helps make using kubectl commands easy. + +1. **Run Kubectl Commands from Slack** + +Firstly, Botkube enables users to run `kubectl` commands directly from Slack or Teams, eliminating the need to open a separate command line interface. This feature enables developers, site reliability managers, and other employees in the group chat to run necessary `kubectl` commands with ease. + +![Image 3: Ran Kubectl get pods command from slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64d154cb1fc2678bcaa56f98_fbbDuo-oKj7sih4vmPrvRSy0yvKRbUtmy9fXEqKJpPOGxymF-frlxtR4oa90ANbmcy6g33uaxLtBYUfk9GGlazqWAZbQXPlo8eAOTWhhTAtBNxYWb51mRwQZRKtzQ1SBorlKAlSbpoOU_W9_EeCSRlc.png) + +2. **Get Kubectl help (Even Chatgpt Kubectl Help)** + +As seen in the image below, Botkube even gives an option to get kubectl help directly from Slack. Our AI assistant will bring up helpful Kubectl commands and describe a little what they do. This ability combined with the new [Kubernetes Doctor Plugin](https://botkube.io/blog/use-chatgpt-to-troubleshoot-kubernetes-errors-with-botkubes-doctor), that allows users to further query ChatGPT about the correct Kubectl command to run, should make anyone a Kubectl expert quick! + +![Image 4: Kubectl commands running in a slack channel](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64d154cb0b2e6541c7bf6681_tJUUtb_nGsLwC-FoHmfUBedMJRKPEdswkO5vIxsKpimjVmU-FGIIoL3vVw29Qf2WXtC6524Js6Id8RWfMkg_rkdUcmCjbQnLgfoZIlJcOroO24iy6sCWlCyYKl3kVhcDP9LvDK6Pm_ZasxgaTU2K5K0.png) + +3. **Set Kubectl Command Aliases** + +Finally, Botkube introduces the ability to create command aliases, allowing users to assign quick phrases or letters to commonly used kubectl commands. This feature eliminates the need to remember long and complex four-word commands, streamlining the Kubectl process for all users. These features make Botkube an essential tool for any team looking to simplify their Kubectl workflow and increase productivity. Read more about [Kubectl aliases on our blog](https://botkube.io/blog/command-line-magic-simplify-your-life-with-custom-kubernetes-kubectrl-aliases-on-botkube). + +![Image 5: creating a kubectl alias with Botkube's web interface](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64d154cb0dca04c16dae44db_fjOpVIQetAJ-b8hhrWV8fqy3H63TJPAW4zdIkRjc5uh0mlK5hvgU_YUAGOq7OJQXjtxzQTDURFH5tx9-JLL2NFvKNMrEQwbOH2oeHjZsrzaPvzD1iY5cJe8L4dF0tIqnpmdW86WyS2KNhrpzV-ouuJw.png) + +‍ diff --git a/hack/assistant-setup/content/botkube.io__learn__kubernetes-alerts-to-teams.md b/hack/assistant-setup/content/botkube.io__learn__kubernetes-alerts-to-teams.md new file mode 100644 index 0000000..82f6ff3 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__kubernetes-alerts-to-teams.md @@ -0,0 +1,49 @@ +Title: Kubernetes Alerts | Botkube + +URL Source: https://botkube.io/learn/kubernetes-alerts-to-teams + +Markdown Content: +Staying informed about real-time Kubernetes cluster events is crucial. This comprehensive guide demonstrates how to leverage Botkube's powerful integration with [Microsoft Teams](https://botkube.io/integration/teams) to enable seamless communication of Kubernetes alerts and monitoring within a shared Teams channel. + +**Benefits of Adding Botkube's Microsoft Teams Kubernetes Connection** +---------------------------------------------------------------------- + +Botkube prioritized replicating the benefits experienced by Slack users to ensure a seamless transition for teams. By tailoring its functionality to align with the unique features of Teams channels, Botkube guarantees a user-friendly experience that caters to the specific collaboration dynamics of Microsoft Teams. + +### **Unofficial RBAC-Driven Control Mechanism** + +Botkube follows RBAC controls of the Kubernetes cluster, providing a secure and controlled environment. Teams can define roles and permissions, enabling seamless collaboration between development and operations teams. + +### **Centralized Logs in Microsoft Teams** + +Botkube transforms your shared Microsoft Teams channel into a centralized hub for logs. Easily pull logs directly from Teams, providing a comprehensive view of Kubernetes activities without the need to switch between platforms. No longer just receive Kubernetes event notifications to Teams, but take action to correct the issue. + +### **Accelerating Mean Time to Recovery (MTTR)** + +Respond promptly to Kubernetes issues with Botkube's automated alerts. Accelerate mean time to recovery by receiving, troubleshooting, and resolving issues – all within the familiar Teams environment. + +**Getting Started with Botkube and Microsoft Teams Integration** +---------------------------------------------------------------- + +### **1\. Set Up Botkube and Microsoft Teams Connection** + +Begin by configuring Botkube and connecting it to Microsoft Teams. This requires users to obtain a Microsoft Teams webhook for Kubernetes to facilitate communication to Teams. We aim to simplify this experience for users. + +Create a free [Botkube Cloud account](http://app.botkube.io/) to begin. We will connect the K8s cluster in the next step. Account creation is simple with multiple social logins like Google and GitHub. Users must verify their email to activate their account. + +![Image 1: Botkube Cloud Signup for K8s Monitoring](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6566137f5fe7417be4f8a6fb_8Xa41Loqa_HXzlMcoEYZ_e2uDlGkXcTbQAAfLafcZCxXv5IbXkl0r_L7PUUDfGK3c05R7fPv8rFcR3d4whLL1Tt57FnkxIGJd77Y8UBIP_vWiBIFPlZ4dTYjN8QR05x71GsKEv-gxvk7i1bbX_vJAuU.png) + +### **2\. Seamless Kubernetes Event Notifications** + +Utilize Botkube's streamlined process to watch Kubernetes events in real-time. The Botkube dashboard ensures a user-friendly interface, allowing for efficient deployment of monitoring tools. Integrating with other common cloud-native tools, like Prometheus Alert Manager, allows for full monitoring of Kubernetes in Teams. + +![Image 2: Easily add other Cloud Native tool alerts to Teams](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6566137f6b27a8072723f369_5zfDhXApR4jKKGX-oj0PGxiWBrVbYr0o4Z5cJCFYe92gbk3pKxNel9ytu1T4uQMrMC-Kxok8q3yABjrI5lox7HICXcBIMs4vUhV1t-qUBbprZ5COuys0P7nih9mvQny8ja7KZtXR5wKUvxXiixhZyXY.png) + +Once users are through the email verification they just need to select the Microsoft Teams connection. This will prompt you to download the Botkube Microsoft Teams application file. Upload that to your Teams account following the [official Microsoft documentation](https://support.microsoft.com/en-us/office/add-an-app-to-microsoft-teams-b2217706-f7ed-4e64-8e96-c413afd02f77) for uploading apps to Teams. + +**Conclusion: Microsoft Teams Chatbot for Kubernetes Excellence** +----------------------------------------------------------------- + +In conclusion, Botkube emerges as a powerful tool for connecting Kubernetes seamlessly with Microsoft Teams. This article has explored how Botkube facilitates real-time Kubernetes alerts to Teams, empowers collaboration through RBAC controls, and centralizes logs and monitoring within a shared Teams channel. Elevate your Kubernetes communication experience with Botkube, ensuring timely responses and efficient troubleshooting directly from Microsoft Teams. + +_Explore the synergy between Kubernetes and Microsoft Teams with Botkube, transforming your collaboration platform into a hub for real-time insights and proactive issue resolution._ diff --git a/hack/assistant-setup/content/botkube.io__learn__kubernetes-audit-log-best-practices.md b/hack/assistant-setup/content/botkube.io__learn__kubernetes-audit-log-best-practices.md new file mode 100644 index 0000000..7e2d76d --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__kubernetes-audit-log-best-practices.md @@ -0,0 +1,33 @@ +Title: Leveraging the Power of Kubernetes Audit Logs with Botkube + +URL Source: https://botkube.io/learn/kubernetes-audit-log-best-practices + +Markdown Content: +In the ever-evolving landscape of Kubernetes management and orchestration, maintaining robust security and accountability measures has become paramount. Enter the era of "Kubernetes Audit Log Best Practices." With the introduction of Botkube's groundbreaking [Audit Log feature](https://botkube.io/features#Event-and-Audit-Logs), Kubernetes administrators and DevOps teams now have access to a comprehensive auditing capability that unveils every intricate detail of activity within their Kubernetes clusters. This newfound transparency empowers organizations to not only bolster their security posture but also gain invaluable insights into the actions of platform engineers and troubleshooters. In this article, we'll delve into the pivotal role of audit logs in Kubernetes and explore the best practices that can help you harness this powerful feature effectively, all while keeping a vigilant eye on the actions of your platform engineers as they navigate the intricate Kubernetes ecosystem. + +![Image 1: Kubernetes Audit Log in Botkube's Web Dashboard](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65006ea2094543e3943e69e1_RJwjPeeCL_IUsk-jKKqIZqA-HzTuasHFPNUQ-BYdL2nz0CNFPaZyMY1LTWMgBeh7ToyPLJ5A1i4_dSU-UP2WcxQO3eBU_ruedaYQKqYQRZWT8OboHQ4naUzqOpknTLJKYLB3bKk7yj8cOddDLtN78io.png) + +**Following the Audit Log for Enhanced Security** +------------------------------------------------- + +In the realm of Kubernetes management, ensuring robust security measures is non-negotiable, and the Kubernetes audit log emerges as a pivotal tool in this regard. With Botkube's Audit Log feature, organizations gain the capability to meticulously account for every command executed within their Kubernetes clusters during a defined time period. This level of transparency offers a potent defense against potential security breaches by enabling administrators to trace the origins of every command. + +As troubleshooting teams grow and multiple individuals are tasked with running commands within the same Kubernetes cluster, the importance of this audit trail becomes even more pronounced. It acts as a real-time, comprehensive ledger, allowing organizations to pinpoint not only the specific commands issued but also the precise source from which these commands originated. This granular visibility empowers administrators to quickly identify any anomalous or unauthorized activities, thus safeguarding the integrity and security of their Kubernetes infrastructure. Furthermore, the ability to track commands and their sources is invaluable in incident response and forensic analysis, enabling organizations to swiftly address and mitigate any security incidents or operational disruptions. In essence, following the audit log is not merely a best practice; it is an imperative step toward fortifying the security posture of Kubernetes environments, particularly in the context of growing and dynamic troubleshooting teams. + +**Monitoring Platform Engineers with Audit Logs: A New Era of Accountability** +------------------------------------------------------------------------------ + +The advent of Kubernetes ushered in a paradigm shift in the world of IT, introducing the relatively new and dynamic field of Platform engineering. Born out of the need to manage and scale applications as platforms, this field has rapidly evolved, creating a mystique around the roles and responsibilities of Platform engineers. Unlike traditional roles, Platform engineers navigate the intricate landscape of Kubernetes, orchestrating applications and services with finesse. Yet, this novelty has often left higher-ups wondering about the specifics of what these professionals do and how to assess their performance effectively. + +Enter Botkube's Audit Log feature, which marks a significant milestone in demystifying the world of Platform engineering. With every action and command executed within a Kubernetes cluster meticulously recorded, organizations gain the ability to monitor the performance of their Platform engineers in an easily auditable fashion. This newfound transparency means that CTOs and organizational leaders can finally gain insight into the day-to-day activities of their DevOps and SRE employees, comprehending not just what they're up to, but also the quality of the work they're delivering. + +The Audit Log feature not only enhances accountability but also fosters a culture of continuous improvement, enabling organizations to identify areas for optimization and further skill development within their Platform engineering teams. With this innovative tool at their disposal, CTOs and decision-makers can make informed assessments of their team's effectiveness, ensuring that the Kubernetes-driven Platform engineering field continues to thrive and evolve in a manner that aligns with their organization's goals and objectives. In essence, Botkube's Audit Log feature empowers higher-ups to bridge the gap between the mystique of Platform engineering and the tangible results it can deliver, all while fostering a culture of transparency and accountability within their Kubernetes ecosystem. + +**Conclusion: Elevating Kubernetes Management with Audit Log Mastery** +---------------------------------------------------------------------- + +In the ever-shifting landscape of Kubernetes management, the ability to harness Audit Logs has emerged as an indispensable practice. Botkube Cloud's Audit Log feature not only fortifies security measures but also demystifies the roles of Platform engineers while promoting accountability within DevOps and SRE teams. As we've explored in this article, the Audit Log provides a panoramic view of all activities within your Kubernetes clusters, empowering organizations to track and trace every command issued and assess the performance of their technical teams. + +With the Audit Log feature in place, organizations are better equipped than ever to safeguard their Kubernetes infrastructure, optimize operations, and elevate their Kubernetes management strategies. It's a tool that bridges the gap between the complexity of Kubernetes and the need for transparency, enabling leaders to make informed decisions, and ensuring that the dynamic field of Platform engineering thrives in alignment with organizational goals. In the ever-evolving Kubernetes ecosystem, mastering the art of Audit Logs with Botkube Cloud is the key to securing, optimizing, and understanding the full potential of your Kubernetes clusters. + +‍ diff --git a/hack/assistant-setup/content/botkube.io__learn__kubernetes-errors.md b/hack/assistant-setup/content/botkube.io__learn__kubernetes-errors.md new file mode 100644 index 0000000..023a0c4 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__kubernetes-errors.md @@ -0,0 +1,23 @@ +Title: Conquering Kubernetes Errors: Your Guide to K8s Troubleshooting + +URL Source: https://botkube.io/learn/kubernetes-errors + +Markdown Content: +Navigating the intricacies of Kubernetes often involves grappling with errors that can impede deployment and performance. Botkube presents a cutting-edge solution by offering an AI-powered ChatOps tool for Kubernetes troubleshooting. With real-time insights and proactive alerts, Botkube assists in identifying and resolving errors swiftly. + +![Image 1: debugging - screenshot thumbnail](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/66052475a9b6c818366145a1_Botkube-is-the-Kubernetes-Debugging-%26-Troubleshooting-Champ.png) + +Botkube is the Kubernetes Debugging & Troubleshooting Champ! + +Empowering Kubernetes Users Through Education: +---------------------------------------------- + +Beyond its troubleshooting capabilities, Botkube empowers users through a collection of comprehensive articles focused on common Kubernetes-related errors. These articles delve into the nuances of issues such as pod failures, networking glitches, and configuration pitfalls. By offering practical insights, best practices, and step-by-step guides, Botkube's educational resources equip users with the knowledge to handle errors independently, fostering a deeper understanding of Kubernetes operations. + +In a nutshell, Botkube not only acts as an invaluable AI companion for troubleshooting Kubernetes errors through ChatOps but also stands as an educator, arming users with the expertise needed to tackle common challenges effectively. + +‍ + +### About Botkube + +Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](http://app.botkube.io/) diff --git a/hack/assistant-setup/content/botkube.io__learn__kubernetes-monitoring-tools.md b/hack/assistant-setup/content/botkube.io__learn__kubernetes-monitoring-tools.md new file mode 100644 index 0000000..300b912 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__kubernetes-monitoring-tools.md @@ -0,0 +1,165 @@ +Title: Master Kubernetes Monitoring: Top Tools Compared for 2024 + +URL Source: https://botkube.io/learn/kubernetes-monitoring-tools + +Markdown Content: +Keeping your Kubernetes cluster healthy and efficient is crucial for a smooth cloud-native operation. With the dynamic nature of containerized environments, the right monitoring tools become essential allies. But with so many options available, choosing the best fit can be a daunting task. Worry not, this guide dives into the top 6 Kubernetes monitoring tools for 2024, helping you pick the perfect solution for your needs. + +**1) Botkube's AI K8s Monitoring Tools** +---------------------------------------- + +### **Born from Collaboration:** + +Originally developed by Infracloud to bridge the gap between Kubernetes and Slack, Botkube found its second life when Kubeshop saw its potential. Under Blair Rampling's leadership, Botkube transformed from a basic notification bot into an [AI-powered monitoring assistant](https://botkube.io/features#Monitoring), residing directly within your Slack or Teams workspace. + +![Image 1: Botkube's Chat Monitoring Tool for Kubernetes](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65b81113bc05828acc59f5cf_CfjAHYlDIKJ84qFL_VYqmFsb5E0uZ4aT46UGUQLRI5JaEVMm8I32QjLjc9y1lMoxTdbWWRFa-pPdLR47UD1h5YCCbKLK4BkuXQ0qo-2jjwbX-djotNucpQEKZrQ367IzWln1yEGZZuFdn4MiDc5mAVk.png) + +### **Chat-powered Monitoring:** + +Forget clunky dashboards - Botkube shines by making Kubernetes monitoring as familiar as your daily chat. Receive critical alerts, pull logs, even perform basic ChatOps actions, all within the comfort of your favorite messaging platform. Botkube seamlessly integrates with other cloud-native tools like Keptn, Flux CD, and Argo, bringing their notifications and functionalities straight to your fingertips. + +### **Pros:** + +* Effortless setup and use: Get operational in minutes with minimal configuration. +* Unmatched integration: Connect Botkube to your existing toolchain and unlock their potential. +* ChatOps powerhouse: Perform actions beyond monitoring, directly in your chat channel. +* Log pulling at your fingertips: One click is all it takes to access Kubernetes logs. +* No-hassle interface: Use Slack, Teams, Discord, or Mattermost as your monitoring hub. + +### **Cons:** + +* Dashboard-light: While informative, Botkube focuses on interactive chat rather than extensive data visualization. +* Evolving feature set: Botkube is constantly improving, but some advanced functionalities might still be under development. + +**2) Prometheus Alert Manager** +------------------------------- + +### **From Soundcloud to the World:** + +Born within the walls of Soundcloud, Prometheus quickly ascended to become the de facto standard for metric collection in the cloud-native landscape. This open-source toolkit lets you gather comprehensive data on your Kubernetes cluster, resources, and applications, offering a deep understanding of their performance and health. + +### **Metric Maestro:** + +Prometheus' core strength lies in its flexibility and extensive feature set. Easily scrape metrics from all corners of your infrastructure, define custom rules and alerts, and leverage the Prometheus ecosystem for additional analysis and visualization tools like [Botkube's Plugin.](https://botkube.io/integration/prometheus) + +### **Pros:** + +* Open-source powerhouse: A vibrant community contributes to Prometheus' development and vast plugin library. +* Highly customizable: Define exactly what you want to monitor and how you want to be notified. +* Scalable and robust: Handles large clusters and complex deployments with ease. +* Integrates seamlessly: Connects with Grafana, Alertmanager, and other tools for a complete observability suite. + +### **Cons:** + +* Steeper learning curve: Setting up and configuring Prometheus can be more complex than user-friendly options. +* Dashboard dependency: You'll need additional tools like Grafana for data visualization. +* Maintenance overhead: Running and maintaining your own Prometheus instance requires dedicated resources. + +**3) Elastic Stack (ELK Stack)** +-------------------------------- + +### **Search Giant for Observability:** + +The ELK Stack, comprising Elasticsearch, Logstash, and Kibana, brings enterprise-grade search and visualization capabilities to Kubernetes monitoring. Elasticsearch acts as the data powerhouse, ingesting and storing vast amounts of logs and metrics. Logstash processes and enriches the data, while Kibana transforms it into beautiful and interactive dashboards for insightful analysis. + +![Image 2: Elastic Search Kubernetes Monitoring Board](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65b81113b42acfb8671a9233_tbT65ycGZPY4WqSGnrg9vwqwNPJHJieo_1VfKoiDFkRNknM0slegRlEQTDOhzH25bwZV1zeOoiNkHsPxetj4XVB6dvfRd9sNPJ_heEwdgQsjwr8xPeFR31gXoMgZLADaYBWGbooeiHKb1NELjpiDw3A.png) + +### **Data Detective:** + +Unleash the power of search to analyze historical trends, troubleshoot incidents, and proactively identify potential issues. ELK Stack excels at handling large volumes of data and offers rich filtering and aggregation options. It integrates seamlessly with various Kubernetes plugins, making it a popular choice for comprehensive cluster monitoring. + +### **Pros:** + +* Unmatched data exploration: Deep dive into detailed logs and metrics with powerful search queries. +* Scalable and performant: Handles massive datasets and high-traffic environments with ease. +* Customizable dashboards: Tailor data visualization to your specific needs and preferences. +* Extensive plugin ecosystem: Integrates with a wide range of tools for enhanced observability. + +### **Cons:** + +* Steep learning curve: Mastering ELK Stack requires investment in learning and configuration. +* Resource-intensive: Running the full stack can be demanding on your infrastructure. +* Potential complexity: Configuring and maintaining ELK Stack can be involved for beginners. + +**4) Keptn for K8s Backup Monitoring** +-------------------------------------- + +### **AI-powered Continuous Delivery:** + +Keptn breaks the mold of traditional monitoring tools by offering an AI-driven platform for Continuous Delivery (CD) in Kubernetes. It monitors deployments, tests applications, and automates remediation actions, ensuring smooth and secure updates for your services. + +### **Smarter Delivery, Faster Feedback:** + +Keptn's AI assistant, "Keptn Lisa," learns from your infrastructure and automates manual tasks, streamlining your release processes. It integrates seamlessly with various CI/CD tools and frameworks, empowering you to deliver faster and with fewer errors. + +### **Pros:** + +* AI-powered automation: Reduce manual effort and accelerate your CD pipeline. +* Proactive anomaly detection: Identify potential issues before they impact your users. +* Self-learning capabilities: Keptn continually adapts to your environment for improved performance. +* Easy integration: Connects to existing CI/CD tools and Kubernetes ecosystems. + +### **Cons:** + +* Relative newcomer: Keptn is still evolving, and its feature set might not be as comprehensive as established tools. +* Focus on CD: While it monitors, Keptn's primary focus is on automating deliveries, not general cluster health. +* Learning curve: Understanding Keptn's AI approach and utilizing its full potential might require initial investment. + +**5\. Kubernetes Dashboard** +---------------------------- + +### **Open-source Hub for Visualization:** + +The [official Kubernetes Dashboard](https://github.com/kubernetes/dashboard), an open-source project within the Kubernetes ecosystem, emerges as a favorite for its simplicity and ease of use. It provides a centralized view of your cluster's health and performance through intuitive dashboards, making it ideal for quick monitoring and troubleshooting. + +![Image 3: Open Source Kubernetes Dashboard](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65b811147a0ebb7626b7c74b_CY588CHxwzGx_LdOaPzDYLA9blBAI35B8kXGy2xmL0s7_Z5hAxT6uIb7IZqb_ZktAT0gm4zwCGrHjVuJiS2CDThEsmQ0elT7qP02OyyEPiaLoSwhwI0_AcUkE8J86X3KRDa_wmJEirS0mVqlyV30R7Y.png) + +### **Visual Insight at a Glance:** + +Kubernetes Dashboard shines through its user-friendly interface, readily accessible even for those new to Kubernetes. It readily displays key metrics like resource utilization, pod status, and deployments, offering a clear understanding of your cluster's state. + +### **Pros:** + +* Low barriers to entry: Easily adopted by users of all skill levels, making it an ideal starting point for Kubernetes monitoring. +* Lightweight and efficient: Runs smoothly on limited resources, perfect for smaller clusters or individual deployments. +* Open-source and actively developed: Continuously evolving with promising features under development by the community. + +### **Cons:** + +* Focus on basic metrics: Compared to more comprehensive tools, it presents a narrower range of data and monitoring capabilities. +* Visualization-centric: Primarily focused on dashboard displays, it lacks advanced analysis and search functionalities. +* Relative newcomer: Being an open-source project, it might be less mature than commercially-backed options, with potential for minor bugs or limitations. + +**6) Datadog for Kubernetes** +----------------------------- + +### **Understood Name in Data Collection:** + +Datadog needs little introduction in the monitoring world. It offers a comprehensive suite of tools spanning metrics, tracing, logs, and security, catering to all your Kubernetes observability needs. + +### **Datadog for K8s:** + +Datadog integrates with your Kubernetes cluster, collecting in-depth data on containers, pods, and deployments. Its dashboards provide an intuitive overview of cluster health, while deep tracing capabilities pinpoint performance bottlenecks within microservices. Datadog excels at anomaly detection, proactively alerting you to potential issues before they impact users. + +### **Pros:** + +* All-encompassing platform: Consolidates various monitoring needs into a single solution. +* Rich in features: Offers metrics, tracing, logs, security, and more. +* Easy integration: Seamlessly connects with Kubernetes and popular tools. +* User-friendly interface: Provides clear dashboards and visualizations. + +### **Cons:** + +* Premium pricing: May be costlier than certain open-source alternatives. +* Steeper learning curve: Extensive toolset can require initial onboarding effort. + +‍ + +**Conclusion on K8s Monitoring Tools** +-------------------------------------- + +This is just a taste of the top 6 Kubernetes monitoring tools, with more detailed introductions and comparisons to follow in the next parts of your article. Stay tuned for insights into other powerful options like Jaeger, Grafana, ELK Stack, and more! + +Remember, the ideal tool depends on your specific needs and preferences. Consider factors like ease of use, feature set, community support, and cost when making your choice. By understanding the strengths and weaknesses of each tool, you can confidently ensure your Kubernetes cluster thrives in the dynamic cloud-native world. + +‍ diff --git a/hack/assistant-setup/content/botkube.io__learn__kubernetes-observability-best-practices.md b/hack/assistant-setup/content/botkube.io__learn__kubernetes-observability-best-practices.md new file mode 100644 index 0000000..85d9774 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__kubernetes-observability-best-practices.md @@ -0,0 +1,58 @@ +Title: Kubernetes Observability Made Easy: Essential Best Practices + +URL Source: https://botkube.io/learn/kubernetes-observability-best-practices + +Markdown Content: +In the complex world of Kubernetes, ensuring observability is paramount for maintaining healthy and efficient containerized applications. In this blog, we'll embark on a journey through the Kubernetes observability landscape, uncovering best practices and essential tools to help you gain valuable insights into your clusters and applications. + +**What is Observability in Kubernetes?** +---------------------------------------- + +Kubernetes observability is the practice of gaining insight into the inner workings of a Kubernetes cluster and the applications running within it. It encompasses the ability to collect, monitor, and analyze data about the performance, health, and behavior of containerized workloads orchestrated by Kubernetes. + +This observability extends to various aspects, including: + +1. **Metrics**: Gathering and visualizing quantitative data about resource utilization, application performance, and cluster behavior. Metrics can include CPU usage, memory consumption, network traffic, and more. +2. **Logs:** Capturing and centralizing log data generated by containers and applications. Logs provide detailed records of events, errors, and activities within the cluster, aiding in troubleshooting and debugging. +3. **Traces:** Tracking the flow of requests and transactions as they traverse the microservices within your Kubernetes environment. Distributed tracing helps in understanding the performance and dependencies of services. +4. **Alerting:** Setting up proactive alerts based on predefined thresholds or patterns in the data. Alerts notify operators and DevOps teams when anomalies or issues occur, allowing for rapid response. + +![Image 1: K8s Observability Solved Graphic](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/652553063ed2e2faeb86a964_K8s%20Observability.gif) + +**Why is K8s Observability Even Important?** +-------------------------------------------- + +Kubernetes observability is of paramount importance because it empowers organizations to navigate the intricate and dynamic landscape of container orchestration with confidence and efficiency. In an environment where countless containers and microservices interact, observability tools provide a crucial vantage point, allowing teams to rapidly identify and address issues, thereby minimizing downtime and ensuring high availability. Moreover, it enables efficient resource management, optimizing resource allocation and scaling decisions based on real-time data, leading to cost savings and enhanced performance. + +Beyond operational benefits, observability also plays a pivotal role in security and compliance, helping organizations detect and respond to threats and policy violations promptly. By fostering a data-driven approach to decision-making, Kubernetes observability is instrumental in achieving continuous improvement in application development, configuration management, and user experience, making it an indispensable practice in the era of cloud-native operations. + +**How Kubernetes Observability goes Further than Traditional Monitoring** +------------------------------------------------------------------------- + +* Visibility and Insights: Kubernetes observability goes beyond traditional monitoring solutions, offering a comprehensive view of the cluster's health and performance, while monitoring primarily focuses on predefined metrics and thresholds. +* Real-time Issue Identification: Observability platforms collect data in real time, allowing for rapid issue identification and resolution, whereas monitoring solutions might offer delayed or less detailed insights. +* Resource Efficiency: Observability tools aid in efficient resource allocation by providing granular data on container behavior, in contrast to monitoring, which often lacks the depth required for fine-tuning. +* Security and Compliance: Observability platforms excel at detecting security threats and compliance violations by collecting a wide range of data, whereas monitoring may not offer the same level of visibility. +* Data-Driven Decision-Making: Kubernetes observability enables data-driven decision-making throughout the DevOps lifecycle, fostering continuous improvement, while monitoring may primarily focus on alerting. + +In summary, Kubernetes observability, facilitated by observability platforms, is more comprehensive and provides real-time insights compared to traditional monitoring solutions, making it essential for efficient resource management, security, and informed decision-making in complex containerized environments. + +**Popular Kubernetes Observability Tools** +------------------------------------------ + +### **Prometheus Alert Manager** + +Prometheus Alert Manager is a popular Kubernetes observability tool renowned for its ability to monitor and create alerts for crucial Kubernetes events. It seamlessly integrates with Prometheus, a powerful monitoring system, to enable robust alerting capabilities. Prometheus Alert Manager not only helps in collecting metrics but also in defining alerting rules and routing alerts to the appropriate channels, making it an indispensable component of the Kubernetes observability stack. Its flexibility in setting up custom alerting policies ensures that you can proactively respond to incidents, ensuring the reliability and availability of your containerized applications. + +### **Botkube for K8s Troubleshooting** + +Another noteworthy tool in the Kubernetes observability landscape is Botkube. What sets Botkube apart is its ability to streamline the management of Kubernetes observations through ChatOps. This innovative tool integrates seamlessly with popular chat platforms like Slack, bringing observability right into your collaboration environment. By combining with alert managers like Prometheus Alert Manager, Botkube channels all alerts, notifications, and observability insights into the chat platform of your choice. This approach simplifies communication and collaboration among DevOps teams, allowing for quicker incident response, efficient troubleshooting, and better overall Kubernetes cluster management. With Botkube, you can harness the power of ChatOps to enhance the effectiveness of your Kubernetes observability strategy. + +**Concluding Observations** +--------------------------- + +In the ever-evolving realm of Kubernetes, where containerized applications thrive, the pursuit of observability is not just a choice; it's an imperative. Throughout this exploration of the Kubernetes observability landscape, we've uncovered its essence and significance. Observability in Kubernetes extends beyond mere monitoring; it encapsulates a holistic approach to understanding, optimizing, and securing your containerized workloads. + +By harnessing observability practices and leveraging powerful tools like Prometheus Alert Manager and Botkube, organizations can navigate the intricate Kubernetes ecosystem with finesse. They gain the ability to proactively address issues, ensure resource efficiency, fortify security, and drive continuous improvement. With observability as a guiding principle, Kubernetes becomes more than just a container orchestration platform—it becomes a vessel for innovation, resilience, and operational excellence in the ever-evolving world of cloud-native operations. So, as you set sail in the Kubernetes sea, remember that observability is your guiding star on the journey to success. + +‍ diff --git a/hack/assistant-setup/content/botkube.io__learn__kubernetes-rollbacks-a-guide.md b/hack/assistant-setup/content/botkube.io__learn__kubernetes-rollbacks-a-guide.md new file mode 100644 index 0000000..e27b593 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__kubernetes-rollbacks-a-guide.md @@ -0,0 +1,108 @@ +Title: Kubernetes Rollbacks: A Guide to Undoing Deployments with Botkube + +URL Source: https://botkube.io/learn/kubernetes-rollbacks-a-guide + +Markdown Content: +Kubernetes has become the de facto platform for orchestrating and managing application workloads. Kubernetes excels at deploying and scaling applications, but it's equally essential to have robust mechanisms for managing rollbacks application deployments. Whether you need to revert to a previous version of your application due to a critical bug, a failed update, or any other unforeseen issue, Kubernetes rollbacks play a vital role in maintaining application stability. + +In this comprehensive guide, we'll explore the use of Botkube as a powerful tool to assist with Kubernetes rollbacks. Botkube is not just a monitoring tool; it offers a comprehensive solution for managing and controlling rollbacks efficiently. We'll dive into two strategies to perform rollbacks: Helm Chart Rollbacks and Flux Rollbacks, and demonstrate how Botkube simplifies these processes while allowing users to control them from preferred chat platforms, such as Microsoft Teams or Slack. + +Kubernetes Rollbacks: An Overview +--------------------------------- + +Before delving into the specifics of Helm Chart Rollbacks and Flux Rollbacks, it's essential to understand why [Kubernetes rollbacks](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#rolling-back-a-deployment) are indispensable in the first place. A rollback in software development refers to the process of reverting a system, application, or configuration to a prior state or version. It is typically employed when unforeseen issues or complications arise after an update, release, or configuration change. This action allows software developers and operators to quickly restore a system to a known-good state, ensuring application stability and minimizing disruptions. + +In the context of Kubernetes, rollbacks serve a similar purpose. They allow Kubernetes operators to reverse changes made to the cluster. Kubernetes rollbacks are crucial in maintaining application reliability and ensuring that, in the event of unexpected issues, the cluster can swiftly return to a stable state, minimizing downtime and potential negative impacts on the application. + +Understanding Helm Chart Rollbacks +---------------------------------- + +[Helm](https://helm.sh/) is a popular Kubernetes package manager that simplifies deploying and managing applications on Kubernetes. Helm charts provide a convenient way to define, install, and upgrade even the most complex Kubernetes applications. However, in the world of software development, things don't always go as planned. Updates can introduce unexpected bugs, compatibility issues, or other unforeseen problems. + +[Learn more about Helm Charts and how to troubleshoot in our handy guide.](https://botkube.io/learn/helm-charts) + +This is where Helm chart rollbacks become crucial. Helm enables you to not only release new versions of your applications but also roll back to previous versions, ensuring your applications stay stable in the face of unexpected issues. This process is particularly vital in production environments where application downtime or instability can have severe consequences. + +Performing Helm Chart Rollbacks +------------------------------- + +To perform a Helm chart rollback, you typically follow these steps: + +1. List the available Helm releases to identify the release you want to rollback to using the helm list command. +2. `helm list` +3. Use the \`helm rollback\` command to perform the rollback, specifying the release name and the revision to which you want to revert. +4. `helm rollback` + +Maintaining a proper history of Helm releases is essential for successful rollbacks. Helm automatically records every release, allowing you to easily identify the desired revision. + +### Botkube's Helm Integration + +![Image 1: Running a Helm Rollback in Slack with Botkube](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65380a2ae699bc95b6523c00_helm%20(1).gif) + +Running a Helm Roll Back Command using Slack with Botkube + +While Helm provides the necessary tools to perform rollbacks, Botkube takes it a step further by simplifying the entire process and making it more accessible to your team. [Botkube offers seamless integration with Helm](https://botkube.io/integration/helm), allowing you to control Helm Chart rollbacks directly from your preferred chat platform, such as Microsoft Teams or Slack. + +Imagine you encounter a critical issue in your production environment, and you need to roll back to a stable release promptly. With Botkube's integration, you can initiate the rollback process with a simple chat command, without needing to access the Kubernetes command line, kubectl, directly. This not only streamlines the rollback procedure, but also facilitates collaboration within teams by ensuring that everyone is informed and involved in the decision-making process directly in the chat platform they already use. + +Flux Rollbacks Explained +------------------------ + +### GitOps and Flux + +In the realm of Kubernetes operations, [GitOps](https://www.gitops.tech/) has emerged as a best practice for managing infrastructure and applications. It's an approach where you use Git as the source of truth for defining and managing your Kubernetes configurations. [Flux](https://botkube.io/integration/botkube-flux-kubernetes-integration), a popular GitOps tool, plays a pivotal role in this process. It continuously synchronizes your Git repository with your Kubernetes cluster, ensuring that your applications are always in the desired state. + +### Flux Rollback Process + +Rollbacks in the context of Flux involve reverting to a previous commit or state in your Git repository. When an update or change in your Git repository results in unexpected issues, you can roll back to a known-good state to restore stability. This approach makes it easier to manage and maintain your application's history and configuration using GitOps workflow procedures. + +The Flux rollback process can be summarized as follows: + +1. Identify the Git commit or state to which you want to roll back. This should be a known-good configuration. +2. Update your Git repository with this specific commit. +3. Flux will detect the changes in your Git repository and apply the configuration, effectively rolling back your applications to the desired state. + +Maintaining a clear version history in your Git repository is essential to the success of Flux rollbacks. + +### Botkube's Flux Integration + +[Botkube integrates seamlessly with Flux](https://botkube.io/blog/introducing-botkubes-integration-with-flux), providing an extra layer of control and automation to your GitOps workflows. With Botkube, you can initiate Flux rollbacks from your chat platform, such as Microsoft Teams or Slack, with straightforward commands. + +Imagine a scenario such as a crash looping with a constant CrashLoopBackOff error where a configuration change results in unexpected application behavior. Instead of manually managing the rollback process to the previous version with Git and Flux, you can initiate the rollback directly from your chat platform,-- making it a collaborative and team-friendly process. Botkube simplifies the execution of GitOps rollbacks, ensuring your applications are quickly and accurately rolled back to a stable state. + +[Get started with Botkube and set up Flux integration quickly following our tutorial.](https://botkube.io/blog/streamlining-gitops-with-the-botkube-flux-plugin) + +Kubectl Rollback +---------------- + +While Helm and Flux are powerful tools for managing rollbacks, there might be situations where you need a more granular approach, particularly when making changes at the lower levels of your Kubernetes resources. This is where kubectl, the Kubernetes command-line tool, comes into play. + +### Kubectl Rollback Process + +The kubectl rollback process is a manual manual approach compared to Helm and Flux, but it provides fine-grained control over the rollback of individual Kubernetes resources. Here's a general overview of how a kubectl rollback works: + +1. Inspect Resource History: First, use kubectl to inspect the history of the specific Kubernetes resource you want to rollback. You can do this by running a command like: +2. `kubectl rollout history deployment/` +3. This command shows you the revisions and changes made to the resource over time. +4. Perform Rollback: Once you identify the desired revision to which you want to roll back, you can use kubectl to execute the rollback: +5. `kubectl rollout undo deployment/ --to-revision=` +6. This command effectively rolls back the deployment to the specified revision. + +Kubectl rollbacks are particularly useful when you need to roll back specific resources within a deployment or make precise adjustments to your cluster. + +![Image 2: a screen shot of a web page showing a number of options](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/653aaa45a423d53622d283b7_kubectl_rollback.gif) + +Kubectl Rollback Command being run from Shared Slack Channel + +### Botkube's Kubectl Integration + +Botkube also extends its [integration to kubectl](https://docs.botkube.io/usage/executor/kubectl), allowing users to initiate rollbacks of Kubernetes resources through the chat platform. This means you can manage even the most granular rollbacks with the simplicity and convenience of a chat command. Whether you're dealing with a specific deployment, service, or any other Kubernetes resource, Botkube ensures that your team can handle rollbacks efficiently, regardless of their complexity. + +In the next section, we'll examine how Botkube brings it all together as a comprehensive Kubernetes rollback solution. + +Conclusion to the K8s Rollback Solution +--------------------------------------- + +Botkube, with its powerful integrations, has emerged as an invaluable solution for Kubernetes rollback management. Whether you're dealing with Helm charts, GitOps with Flux, or granular kubectl rollbacks, Botkube simplifies the Kubernetes rollback process, making it accessible from your preferred chat platform. With Botkube, Kubernetes rollbacks become a collaborative and team-friendly processendeavor, ensuring application stability even in the face of unexpected issues. It unifies all these rollback mechanisms into a single, cohesive solution, making Botkube your go-to tool for Kubernetes rollback management. + +‍ diff --git a/hack/assistant-setup/content/botkube.io__learn__making-slack-talk-kubernetes-slack-powered-chatops-for-k8s.md b/hack/assistant-setup/content/botkube.io__learn__making-slack-talk-kubernetes-slack-powered-chatops-for-k8s.md new file mode 100644 index 0000000..38a2f86 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__making-slack-talk-kubernetes-slack-powered-chatops-for-k8s.md @@ -0,0 +1,66 @@ +Title: Learn How to Use Slack for Kubernetes ChatOps + +URL Source: https://botkube.io/learn/making-slack-talk-kubernetes-slack-powered-chatops-for-k8s + +Markdown Content: +Kubernetes has become the go-to solution for container orchestration, allowing organizations to deploy and manage applications at scale. However, with the increasing complexity of Kubernetes deployments, it can be challenging for teams to keep track of everything and ensure smooth operations. To DevOps and SRE individuals running Kubernetes, nothing is more important than receiving K8s Slack alerts. + +‍ + +That's where ChatOps comes in. ChatOps is a collaboration model that brings together people, tools, and processes in a chat environment, allowing teams to manage and automate tasks in a more efficient and transparent way. And with the popularity of Slack as a communication tool, it only makes sense to integrate it with Kubernetes for a more streamlined and user-friendly experience. Many DevOps engineers have chosen to bring these alerts into a shared chat channel with their developers to provide them with control over the K8s cluster as well. + +‍ + +In this article, we'll explore how Botkube makes Slack talk Kubernetes through ChatOps. We will also explore how it can benefit your team's Kubernetes deployment and monitoring processes. The ultimate goal should be a developer self service portal for Slack ChatOps. + +### **Streamlined Communication and Collaboration** + +One of the main benefits of using ChatOps for K8s is the streamlined communication and collaboration it offers. With ChatOps, all team members can access and interact with Kubernetes through a single chat interface, eliminating the need for multiple tools and platforms. + +This allows for faster decision-making and problem-solving, as team members can easily share information, troubleshoot issues, and make changes in real-time. It also promotes transparency and accountability, as all actions and conversations are recorded in the chat, making it easier to track changes and identify any potential issues. + +### **Automation and Efficiency** + +ChatOps also enables automation, allowing teams to perform tasks and execute commands through chatbots or scripts. This not only saves time and effort but also reduces the risk of human error. For example, instead of manually deploying a new application to Kubernetes, a team member can simply trigger a chatbot to do it for them, ensuring consistency and accuracy. + +### **Centralized Monitoring and Management** + +With ChatOps, teams can also monitor and manage their Kubernetes deployments from a single chat interface. This includes receiving alerts and notifications, checking the status of pods and nodes, and even scaling resources up or down. This centralized approach makes it easier for teams to keep track of their Kubernetes environment and quickly respond to any issues that may arise. + +**How to Set Up Slack Powered ChatOps for Kubernetes** +------------------------------------------------------ + +### **Step 1: Set Up a Kubernetes Cluster** + +Before you can integrate Slack with Kubernetes, you'll need to have a Kubernetes cluster up and running. If you're new to Kubernetes, you can use a managed service like [Google Kubernetes Engine (GKE)](https://cloud.google.com/kubernetes-engine) or Amazon Elastic Kubernetes Service (EKS) to set up your cluster quickly. + +### **Step 2: Open A Botkube Cloud Account** + +Next, you'll need to install the Botkube Slack Kubernetes app, which will act as the bridge between Slack and Kubernetes. To do this, create a free account at [app.botkube.io](http://docs.google.com/app.botkube.io). Then select the 'Create an Instance' button. + +![Image 1: Create a new Slack Instance for K8s cluster](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/655bb2eb3f0a2c0e4740dc59_7VGa3a5lV6LYmuS74DUTOp8xAdAmOsbWbj5NBsGiWkx8fr7XoP5XmsLmKsLlv3ZOM6_8ebrp_bguWThWb4RvM0u6Nfj_lF-e6MiKe7FqK5PgjkQSEMtbs16Z81jideuD1sdqaI7kUUdZNgieMLmiR27hxzY9QQlNr4dalENTZBXUCtJ6uAXXQUqLXS8Izw.png) + +### **Step 3: Configure the Slack Kubernetes App** + +Once the app is installed, you'll need to configure it to connect to your Kubernetes cluster. This involves providing the necessary plugins and access to your cluster, which can be done on the Botkube cluster management web GUI. + +![Image 2: Adding Prometheus alerts to Kubernetes](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/655bb2eb4e91433fcda304d7_s8PJ96D0QQC8bPZApPzf3SqM3RUUyBALccY1kOTf1yjTW-R5xmRd10FxaIKtGtC9fpjLj3WJ5FIMt_JRNo_DM9PMERTruFcJ9Ppd6JB4q8OdQXfWZ8l0CqcxOUhxy-O-3qY_ZD0893VnDdiyZb8P_yyrMHytznyMwXqCJAuKolGKAME66JewgxqEzxwL4Q.png) + +### **Step 4: Set Up ChatOps Commands** + +With the app configured, you can now set up ChatOps commands that will allow you to interact with Kubernetes through Slack. These commands can be used to perform various tasks, such as deploying applications, checking the status of pods, and scaling resources. + +To set up commands, you'll need to create a Kubernetes deployment that runs a chatbot or script. This deployment will listen for specific keywords or phrases in the chat and execute the corresponding command in Kubernetes. Botkube makes this easy in their cloud user interface seen below. + +![Image 3: Adding ChatOps Commands](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/655bb2eb58ada6d8c5353bc9_fCRsNS2AUCBZ6K2M-NtCZk7mKySsJs-lGK4IoFOWXYBNSva_zrw2TkWhz9zT0y8rJGcoYmXqbF-henIjKRIb6nx2GgszKKxBn_hQhK3vLLAlujFfkTwUk6PFGiwTACtqrqS6SvY27ZVn1cLGtDQbwMfva6O_MmTLDBPTDdp0Kfj6CcYFJ4lJw8Bg5Na0lQ.png) + +### **Step 5: Test and Refine** + +Once everything is set up, it's essential to test and refine your Slack ChatOps commands to ensure they work as intended. You can do this by triggering the commands in Slack and checking the results in Kubernetes. If there are any issues, you can make adjustments and test again until everything is working smoothly. + +**Conclusion - A New K8s Slack Bot** +------------------------------------ + +In conclusion, I trust this exploration has shed light on the pivotal synergy between Slack and Kubernetes, emphasizing the significance of seamless communication channels in the DevOps realm. The swift and user-friendly integration offered by Botkube empowers DevOps engineers to effortlessly establish a robust Slack ChatOps environment, streamlining workflows with efficiency. Thank you for delving into this journey with us. We invite you to join our [vibrant community](https://join.botkube.io/) on Slack, where like-minded K8s explorers converge to exchange insights and foster collective growth. Happy exploring! + +‍ diff --git a/hack/assistant-setup/content/botkube.io__learn__managing-kubernetes-clusters-from-chat.md b/hack/assistant-setup/content/botkube.io__learn__managing-kubernetes-clusters-from-chat.md new file mode 100644 index 0000000..b8699e8 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__managing-kubernetes-clusters-from-chat.md @@ -0,0 +1,46 @@ +Title: Managing Kubernetes Clusters from Chat + +URL Source: https://botkube.io/learn/managing-kubernetes-clusters-from-chat + +Markdown Content: +Tired of juggling multiple tools and interfaces just to manage your Kubernetes clusters? Enter Botkube, the open-source superhero that brings the power of chat platforms like Slack and Microsoft Teams directly to your Kubernetes operations. Forget the days of cryptic CLI commands and endless terminal windows – Botkube empowers you to manage your clusters entirely within your chat environment of choice. + +Unleash the Extensible Power of ChatOps +--------------------------------------- + +Botkube isn't just a pretty face; it's built with extensibility in its DNA. Whether you're a fan of Slack, [Microsoft Teams](https://botkube.io/integration/teams), Mattermost, or Discord, Botkube seamlessly integrates with your preferred chat platform, becoming a central hub for all your Kubernetes needs. + +But the magic doesn't stop there. Botkube also plays nice with popular GitOps tools like Flux and [Argo CD](https://botkube.io/integration/argo-cd-botkube-kubernetes-integration), ensuring your deployments and configurations are always in sync. And for those who crave even deeper integration, Botkube connects seamlessly with industry favorites like Alert Manager and Kubectl, providing one-stop access to all your essential Kubernetes tools. + +### ChatOps on Steroids: Run Commands Directly from Your Chat App + +With Botkube, your chat app transforms into a control center for your Kubernetes clusters. Imagine running Kubectl commands directly from Slack or Microsoft Teams, issuing deployments, scaling pods, and debugging issues – all without ever leaving your chat window. + +Botkube empowers you with out-of-the-box support for Kubectl commands, complete with built-in guardrails and intuitive permission settings. But for the truly adventurous, Botkube takes ChatOps to the next level. + +![Image 1: Run Kubectl log commands from Slack](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6577844d2debf992311cf2d0_Screenshot%20of%20Kubectl%20Command.png) + +Running the Kubectl Logs command from Slack + +Unlocking the Power of Custom Executors +--------------------------------------- + +Ever dreamed of controlling your entire infrastructure from a chat message? Botkube makes it possible! With custom executors, you can extend its reach beyond Kubernetes, allowing you to run commands for any API endpoint or service you can imagine. + +While running arbitrary commands through chat might not be the most secure practice, it showcases the incredible potential of Botkube. Within the bounds of user-defined permissions, you can configure Botkube to execute virtually any CLI command, empowering you to control your entire tech stack from the comfort of your chat app. + +Collaboration & Visibility: The True Power of ChatOps +----------------------------------------------------- + +But why ditch the terminal altogether? The true value of [ChatOps](https://botkube.io/learn/chatops) with Botkube lies in enhanced collaboration and visibility. Every command executed through Botkube is automatically logged and synchronized with your chosen chat channel. This creates a single source of truth for all your Kubernetes operations, allowing everyone on the team to stay informed and involved. + +Imagine a world where senior DevOps engineers can guide and monitor junior colleagues directly within chat, providing real-time support and troubleshooting assistance. No more frantic phone calls or endless email threads – just clear, concise communication that empowers everyone to contribute effectively. + +And when the lead developer takes a well-deserved vacation, the junior team doesn't need to panic. The chat history serves as a readily accessible archive of past commands and troubleshooting steps, allowing them to replicate solutions and solve minor issues independently. + +Conclusion: A New Era of Kubernetes Management +---------------------------------------------- + +Botkube represents a paradigm shift in Kubernetes management. By bringing the power of ChatOps to your fingertips, it fosters collaboration, simplifies workflows, and grants unprecedented visibility into your cluster operations. Say goodbye to the complexities of the terminal and embrace a new era of efficient, collaborative, and enjoyable Kubernetes management with Botkube. + +‍ diff --git a/hack/assistant-setup/content/botkube.io__learn__platform-engineering.md b/hack/assistant-setup/content/botkube.io__learn__platform-engineering.md new file mode 100644 index 0000000..778126a --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__platform-engineering.md @@ -0,0 +1,118 @@ +Title: Platform Engineering Explained: Building Scalable Systems + +URL Source: https://botkube.io/learn/platform-engineering + +Markdown Content: +Platform engineering is a term that has gained popularity in recent years, but what exactly does it mean? In this article, we will explore the basics of platform engineering, its role in the tech industry, and why it is an essential aspect of modern software development. + +**What is Platform Engineering?** +--------------------------------- + +### **The Basics** + +![Image 1: Platform engineering](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/659c2bb833448eeeb4c66452_1Sk7dcgaUtHVjQg5Ycz5Yj5DQ9LRUq_OdaG_SI19EYkJM18uA2slgFi9CI11rKsPE4_D7NnBf-dlA4JYypb42Frt5_CP27Z7L3uTah68EiQWokGUxh5bBVrmUvjxFBZqdOWloFg4N5ooei8kAEhgd6I.jpeg) + +by ThisisEngineering RAEng (https://unsplash.com/@thisisengineering) + +Platform engineering is the process of designing, building, and maintaining the underlying infrastructure and systems that support software applications. It involves creating a stable and scalable foundation for software development, deployment, and maintenance. + +Platform engineers are responsible for creating and managing the tools, frameworks, and services that developers use to build and deploy their applications. They work closely with software developers, DevOps engineers, and other IT professionals to ensure that the platform is reliable, efficient, and secure. + +### **The Role of Platform Engineering in Software Development** + +Platform engineering plays a crucial role in the software development process. It provides the necessary infrastructure and tools for developers to build and deploy their applications quickly and efficiently. + +Platform engineers are responsible for creating and maintaining the platform's architecture, which includes servers, databases, networking, and other essential components. They also develop and manage the tools and frameworks that developers use to build and deploy their applications. + +In addition to providing the necessary infrastructure and tools, platform engineering also focuses on automation and standardization. By automating processes and standardizing tools and frameworks, platform engineers can ensure consistency and efficiency in the software development process. + +**Why is Platform Engineering Important?** +------------------------------------------ + +### **Scalability and Flexibility** + +![Image 2: Scalability and flexibility](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/659c2bb853de97d6edeb1d44_z4KVNDmVs0Nqb5bHpJd0qH-xmRluGmHDGUX4v677o3RK9LJfzolEIzIITGU8qQlTYrRSHu9PcSKhj_WYU9ZHxUKOdMP1yFmWdMMmhxIvZjKsjtSsCHpfiuovt2vMMxHb5F6jDcJ8ys0i88r4c3Qh-qY.jpeg) + +by Resume Genius (https://unsplash.com/@resumegenius) + +One of the primary reasons why platform engineering is essential is its role in scalability and flexibility. As businesses grow and their software needs evolve, the platform must be able to adapt and scale accordingly. + +Platform engineers design and build systems that can handle increased traffic, data, and user demands. They also ensure that the platform is flexible enough to accommodate new technologies and changes in the software development process. + +### **Efficiency and Cost Savings** + +By automating processes and standardizing tools and frameworks, platform engineering can significantly improve efficiency and reduce costs. With a well-designed and maintained platform, developers can focus on building and deploying applications rather than managing infrastructure and tools. + +Additionally, platform engineering can help reduce costs by optimizing resource usage and minimizing downtime. By continuously monitoring and optimizing the platform, engineers can identify and address any issues before they become costly problems. + +### **Security and Reliability** + +![Image 3: Security and reliability](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/659c2bb87eddad49a32fb06b_o1hxp921vCcwmj7-ELyr4rw4HR_bTNhn4v3RZTX_M-DTzbtjZSUnA_3wwOPcujOaH1_lQHZ7S43aC2Eeor87dAie2GamivEjP3pZKUl9vmtV72BABkbyrTNUBm1i8pMYBaJaqI-cm3ckxfrGBqsmy1Y.jpeg) + +by Redd F (https://unsplash.com/@raddfilms) + +In today's digital landscape, security and reliability are critical concerns for any business. Platform engineering plays a crucial role in ensuring that the platform is secure and reliable. + +Platform engineers implement security measures and protocols to protect the platform and the applications built on it. They also monitor and maintain the platform to ensure that it is always available and performing at its best. + +**The Role of Platform Engineering in Modern Software Development** +------------------------------------------------------------------- + +### **Cloud Computing** + +Cloud computing has revolutionized the way software is developed and deployed. Platform engineering plays a crucial role in this process by designing and managing the infrastructure and tools that enable cloud computing. + +Platform engineers work closely with cloud service providers to ensure that the platform is optimized for the cloud environment. They also develop and maintain tools and frameworks that make it easier for developers to build and deploy applications in the cloud. + +### **Microservices Architecture** + +Microservices architecture is a software development approach that involves breaking down applications into smaller, independent services. Platform engineering plays a crucial role in this process by designing and managing the infrastructure and tools that support microservices. + +Platform engineers work closely with software developers to ensure that the platform can handle the increased complexity and communication between microservices. They also develop and maintain tools and frameworks that make it easier for developers to build and deploy microservices. + +### **DevOps** + +DevOps is a software development approach that emphasizes collaboration and communication between software developers and IT professionals. Platform engineering plays a crucial role in this process by providing the necessary infrastructure and tools for DevOps to be successful. + +Platform engineers work closely with DevOps engineers to ensure that the platform is optimized for the DevOps process. They also develop and maintain tools and frameworks that make it easier for DevOps teams to collaborate and deploy applications. + +**How to Become a Platform Engineer** +------------------------------------- + +### **Education and Skills** + +To become a platform engineer, you will need a strong foundation in computer science, software engineering, and IT. A degree in computer science or a related field is typically required, along with experience in software development and IT. + +In addition to technical skills, platform engineers also need strong communication and problem-solving skills. They must be able to work well with others and adapt to changing technologies and processes. + +### **Knowledge of Platform Engineer Tools** + +As a Platform Engineer delves deeper into areas like Kubernetes, microservices, and GitOps, they will likely realize the increased need for tooling. These technologies bring complexity and require specialized tools to effectively manage and deploy applications. Starting with a tool like Botkube can be beneficial as it simplifies the installation of other helpful tools through its setup wizard. + +![Image 4: Easy Platform Engineering Set Up Wizard](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64d154ccef984e82336dae1a_UDXteleWUlLJ1h495wr-eU7OqNyx3C-_aON-kSFgRVCK_35_iIzuouiTIHDYyo8ERPM0wCxseEROlkkkkVZVDJNmSJnm1JhA53HDTMGkkUGeDLEl5jKVpVaNciIhllLYqpsYfuza79QwLhH0cp1UE0Q.png) + +Additionally, Botkube facilitates the management of these tools by allowing most platform engineering tools to be connected to Slack and interact with them. For instance, with Botkube, a Platform Engineer can receive notifications in a shared channel when a new Git request needs approval and even approve it directly from Slack. This integration enables self-service platform engineering to be brought into Slack or Teams and managed in a ChatOps fashion, making the overall process more streamlined and efficient. + +### **Experience** + +Experience is crucial in becoming a successful platform engineer. Many platform engineers start their careers as software developers or IT professionals and gain experience in platform engineering through on-the-job training and mentorship. + +**Real-World Examples** +----------------------- + +### **Netflix** + +Netflix is a prime example of the importance of platform engineering in modern software development. The streaming giant has a highly complex and scalable platform that supports millions of users worldwide. + +Netflix's platform engineering team is responsible for designing and managing the infrastructure and tools that enable the streaming service to run smoothly. They also work closely with software developers to ensure that new features and updates are deployed seamlessly. + +### **Airbnb** + +Airbnb is another company that relies heavily on platform engineering. The platform connects millions of hosts and guests worldwide, and its success is dependent on a stable and scalable platform. + +Airbnb's platform engineering team is responsible for designing and managing the infrastructure and tools that support the platform. They also work closely with software developers to ensure that the platform can handle the increased traffic and data demands. + +**Conclusion** +-------------- + +Platform engineering is a crucial aspect of modern software development. It provides the necessary infrastructure and tools for developers to build and deploy applications quickly and efficiently. By understanding the role of platform engineering and its importance in the tech industry, you can better appreciate the work that goes into creating and maintaining the platforms that power our digital world. diff --git a/hack/assistant-setup/content/botkube.io__learn__real-time-event-log-in-slack.md b/hack/assistant-setup/content/botkube.io__learn__real-time-event-log-in-slack.md new file mode 100644 index 0000000..6b28046 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__real-time-event-log-in-slack.md @@ -0,0 +1,75 @@ +Title: Streamline Kubernetes Monitoring: Create Event Logs in Slack + +URL Source: https://botkube.io/learn/real-time-event-log-in-slack + +Markdown Content: +[![Image 1: Kusk Kubernetes](https://assets-global.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](https://botkube.io/) + +Revolutionize Kubernetes Monitoring: Create a Real-Time Event Log in Slack with Botkube +--------------------------------------------------------------------------------------- + +![Image 2: botkube monitoring kss - screenshot thumbnail](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65fa098d77182cff46cde451_LEARN_TN_Monitoring%20(1).png) + +Last updated + +April 22, 2024 + +![Image 3: a man in a blue shirt with his arms crossed](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a86fdda4d8d06ce598598e_evan%20image.jpg) + +Evan Witmer + +Growth Lead + +Botkube + +Table of Contents +----------------- + +* [Why a Slack Event Log?](#why-a-slack-event-log-) +* [Setting Up Your Slack Kubernetes Log with Botkube](#setting-up-your-slack-kubernetes-log-with-botkube) +* [Example: Catching a CrashLoopBackOff Error](#example-catching-a-crashloopbackoff-error) +* [Transform Your Kubernetes Workflow](#transform-your-kubernetes-workflow) + +#### Get started with Botkube Cloud + +Kubernetes environments are dynamic, and keeping track of every change and potential issue can be overwhelming. Botkube offers an elegant solution: a detailed, real-time Kubernetes event log streamed directly into your team's Slack channel, eliminating the need to constantly [switch between tools](https://botkube.io/learn/kubernetes-monitoring-tools). + +Why a Slack Event Log? +---------------------- + +* **Instant Visibility:** No more missed alerts. Everyone is immediately aware of issues like pod failures, resource constraints, and deployment changes. +* **Centralized Knowledge:** Your Slack channel becomes a searchable repository of past incidents, resolutions, and insights, accelerating problem-solving and improving team knowledge. +* **Reduced Alert Fatigue:** Botkube's customizable notifications ensure you only receive the alerts that matter, minimizing distractions. + +Setting Up Your Slack Kubernetes Log with Botkube +------------------------------------------------- + +1. **Connect Botkube to Your Cluster:** Botkube integrates seamlessly with your Kubernetes clusters. Follow the simple setup instructions on the Botkube website. +2. **Create a Dedicated Slack Channel:** Set up a new Slack channel specifically for Kubernetes events (e.g., #kubernetes-alerts) +3. **Configure Notifications:** Botkube lets you tailor which events trigger notifications, ensuring clarity and relevance. +4. **Start Monitoring:** That's it! As events occur, Botkube will post detailed updates to your Slack channel, complete with relevant context for fast troubleshooting. + +Example: Catching a CrashLoopBackOff Error +------------------------------------------ + +Imagine a pod enters a CrashLoopBackOff state. Botkube instantly posts a notification in your #kubernetes-alerts channel, providing: + +* Pod name +* Namespace +* Error messages +* Relevant logs + +Your team can immediately jump into action, using Slack's collaborative features to diagnose and fix the issue. + +Transform Your Kubernetes Workflow +---------------------------------- + +Botkube's Slack integration supercharges your Kubernetes operations. Experience increased transparency, accelerated troubleshooting, and a team that learns together. + +**Get started with Botkube today and see the difference!** + +‍ + +### About Botkube + +Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](http://app.botkube.io/) diff --git a/hack/assistant-setup/content/botkube.io__learn__roles-of-swes-and-sres.md b/hack/assistant-setup/content/botkube.io__learn__roles-of-swes-and-sres.md new file mode 100644 index 0000000..ba9ed8d --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__roles-of-swes-and-sres.md @@ -0,0 +1,44 @@ +Title: SWEs vs. SREs: Teamwork for High-Performing Software + +URL Source: https://botkube.io/learn/roles-of-swes-and-sres + +Markdown Content: +Software engineers (SWEs) and site reliability engineers (SREs) play vital roles in modern software development. SWEs focus on the design, creation, and implementation of software features. On the other hand, SREs ensure the overall reliability, scalability, and performance of the systems that run this software. + +‍ + +\*Just to clear things up, this article is talking about SWE as a software developer, not the SWE Organization. The [SWE Organization](https://swe.org/about-swe/) stands for the Society of Women Engineers, which is another great cause we support, just not the topic of this article. Shout out to the two great women engineers on the Botkube team, [Maria](https://www.linkedin.com/in/maria-ashby/) & [Kelly](https://www.linkedin.com/in/kellyrevenaugh/)! + +**Shared Tools and Distinct Focus** +----------------------------------- + +SWEs and SREs often overlap in their use of tools for testing and monitoring software. However, SREs dive deeper by using chaos engineering techniques to deliberately introduce failures, identifying potential vulnerabilities. SWEs prioritize tools that streamline the development process, like those for code management and release automation. + +Later on in this article we will explore how these two roles work in a Kubernetes environment and tools that help with the collaboration between the two. + +**Compensation Differences** +---------------------------- + +SREs often command higher salaries than SWEs at similar experience levels. This reflects the specialized skills SREs need in incident management, system troubleshooting, and ensuring the smooth operation of complex systems. + +**Symbiosis in Software Development** +------------------------------------- + +The relationship between SWEs and SREs is fundamentally collaborative. SWEs build the software, and SREs make sure it runs reliably and efficiently in production. This teamwork leads to the delivery of high-quality products that meet user expectations. + +**SWEs, SREs, and Kubernetes** +------------------------------ + +In Kubernetes environments, the interaction between SWEs and SREs becomes even more pronounced. Typically, developers don't interact directly with the Kubernetes cluster until they push new code or encounter issues. This is where SWEs often rely heavily on SREs or DevOps engineers to troubleshoot the cluster before they can proceed with updates or fix problems. + +**Botkube: Bridging the Gap** +----------------------------- + +Botkube aims to smooth this interaction between SWEs and SREs by establishing developer self-service portals (SWE Self Service) within familiar chat platforms like Slack, Teams, or Discord. This allows developers to directly engage with Kubernetes for tasks like: + +* **Status Checks:** Getting a quick overview of cluster health. +* **Pulling Logs:** Retrieving logs for troubleshooting. +* **Restarting the Cluster:** Addressing basic issues without SRE intervention. +* **Troubleshooting with AI ChatOps:** Leveraging Botkube's AI-powered commands for guided problem resolution. + +Without developer buy-in into the infrastructure everything is run on, teams will experience friction when it comes to pushing new features and maintaining the cluster. This is where Botkube’s [Kubernetes collaboration features](https://botkube.io/features) help connect the SWE developer team with the DevOps team. Remove friction and have our AI assistant change common k8s issues, such as namespace naming, in seconds. As with most AI tools, our assistant only gets better as it learns. So expect more helpful k8s troubleshooting features coming soon! diff --git a/hack/assistant-setup/content/botkube.io__learn__slackops.md b/hack/assistant-setup/content/botkube.io__learn__slackops.md new file mode 100644 index 0000000..072640e --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__slackops.md @@ -0,0 +1,40 @@ +Title: Beyond Bots & Channels: Building a Thriving SlackOps Culture + +URL Source: https://botkube.io/learn/slackops + +Markdown Content: +The world of DevOps can be a whirlwind of tools, alerts, and context switching. Kubernetes adds another layer of complexity, pushing collaboration and efficiency to the brink. But there's a beacon of hope: SlackOps. + +It's not a singular tool, but a revolutionary approach that leverages the power of Slack - the platform where your team already lives - to bridge the gap between Kubernetes and your existing DevOps world. Think of it as the missing link that transforms your communication into a symphony of streamlined workflows and collaborative problem-solving. + +**Why is SlackOps such a game-changer?** +---------------------------------------- + +* Centralized Command Center: Forget juggling dashboards and scattered notifications. SlackOps brings all your Kubernetes insights, alerts, and actions directly into Slack channels, keeping your team on the same page and in the loop. +* Real-Time Collaboration: No more playing phone tag or chasing cryptic emails. Discuss issues, share information, and coordinate responses seamlessly within the familiar interface of Slack, accelerating issue resolution and promoting transparency. +* Automation Unleashed: Repetitive tasks like deployments, rollbacks, and basic troubleshooting? Leave them to Botkube and other popular SlackOps tools. Free your team to focus on strategic initiatives and innovation. +* Empowered Developers: Give your developers self-service access to manage their own deployments and troubleshoot issues directly in Slack. It's faster, smoother, and fosters a culture of ownership and responsibility. + +**The Benefits of SlackOps are Undeniable:** +-------------------------------------------- + +* Increased Productivity: Reduced context switching and streamlined workflows lead to a dramatic boost in efficiency and output. +* Enhanced Collaboration: Open communication and real-time insights foster a collaborative environment, leading to quicker problem-solving and better team dynamics. +* Faster Software Delivery: Optimized processes and improved visibility allow for faster deployments and shorter release cycles. +* Reduced Operational Burden: Automation and self-service options free up valuable time for DevOps teams to focus on strategic initiatives. +* Handle Kubernetes Alerts Anywhere: Using the Slack Mobile App allows the development team to have access and act on Kubernetes Cluster errors. + +![Image 1: SlackOps performed on a mobile phone](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/6585f8ca58fa1f00d24a8665_eaeNNA67Ccjxi6rom7fWGHmQoGRMRAcoYgfZdmkv3lAWxxzKcauX_p11A4nVAjrpYZziSXNTHVh_6UTFZRp2-t-xhJTVNAYMS4xGPQClDplLu0K5wvcV5AukTjpz4oyjWbZd_XaLmi8bOjVrSTLHPvI.jpeg) + +**Beyond the Horizon: The Extensible Future of SlackOps** +--------------------------------------------------------- + +One exciting frontier is the rise of Large Language Models (LLMs) within the SlackOps troubleshooting channel. Imagine having access to an AI assistant like ChatGPT directly within your Slack conversations, instantly decoding cryptic Kubernetes errors and suggesting actionable solutions. + +At Botkube, we're pioneering this future with our [Doctor plugin](https://botkube.io/blog/use-chatgpt-to-troubleshoot-kubernetes-errors-with-botkubes-doctor), bringing the expertise of ChatGPT to your Kubernetes troubleshooting process. Doctor analyzes error messages, suggests fixes, and even learns from your team's interactions, becoming a valuable virtual teammate. + +And this is just the beginning. We're actively exploring integrating even more powerful LLMs like Google's Gemini, expanding the range of expertise available to your fingertips. Botkube also extends its integrations into the GitOps space with [Flux and Argo](http://botkube.io/integrations), making it endless the alerts users can send to Slack. + +### About Botkube + +Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](http://app.botkube.io/) diff --git a/hack/assistant-setup/content/botkube.io__learn__spring-boot.md b/hack/assistant-setup/content/botkube.io__learn__spring-boot.md new file mode 100644 index 0000000..ac82903 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__spring-boot.md @@ -0,0 +1,61 @@ +Title: Master Spring Boot & Kubernetes: Simplify Your Cloud-Native Devel + +URL Source: https://botkube.io/learn/spring-boot + +Markdown Content: +If you are a Java developer who wants to work in a commercial setting, chances are you will encounter Kubernetes as the preferred platform for deploying and managing your applications. Kubernetes offers many advantages such as scalability, reliability, and portability, but it also comes with its own challenges and learning curve. How can you easily migrate your existing Java applications to Kubernetes and troubleshoot any issues that may arise during the deployment process? This is where Spring Boot and Botkube come in handy. + +What is Spring Boot? +-------------------- + +Spring Boot is a framework that simplifies the creation of stand-alone, production-grade Spring-based applications that can run on Kubernetes. Spring Boot provides features such as: + +* Auto-configuration: Spring Boot automatically configures your application based on the dependencies you have added to your project. + +* Embedded servers: Spring Boot embeds Tomcat, Jetty, or Undertow directly into your executable jar or war file, so you don't need to deploy your application to an external server. + +* Starter dependencies: Spring Boot provides a set of starter dependencies that let you quickly add common functionality to your application, such as web, data access, security, testing, etc. + +* Actuator: Spring Boot provides a set of endpoints that let you monitor and manage your application, such as health, metrics, beans, env, etc. + + +With Springboot, you can create a fully functional Java application that can be packaged as a container image and deployed on Kubernetes with minimal configuration. + +What is Botkube? +---------------- + +Botkube is an app that helps you monitor your Kubernetes cluster, debug critical deployments, and get recommendations for standard practices by running checks on Kubernetes resources. Botkube can be integrated with multiple messaging platforms like Slack, Microsoft Teams, Discord, or Mattermost to help you communicate with your cluster from your chat tool. Botkube has the following features: + +* Monitoring: Botkube monitors your cluster events and sends notifications to your chat tool when something changes. You can also filter the events based on namespaces, resources, or actions. + +* ChatOps: Botkube lets you execute kubectl commands on your cluster from your chat tool. You can also use helm commands to install or upgrade charts. Botkube supports interactive command creation for some platforms, making it easier for non-experts to work with Kubernetes. + +* Automation: Botkube allows you to automatically run commands based on specific events and see the results in the event message. You can use this feature to gather logs and other details on errors, get descriptions of newly created resources, or even auto-rollback failed deployments and upgrades with simple configuration steps. + +* Extensibility: Botkube supports plugins that let you add new sources and executors for any tools. You can use plugins to enable any tool for ChatOps and automation with easy-to-use APIs and Botkube as the engine. + + +With Botkube, you can monitor and manage your Spring Boot applications on Kubernetes from your chat tool without switching contexts. + +How to Use Botkube with Springboot Kubernetes? +---------------------------------------------- + +To use Botkube with Spring Boot, you need to do the following steps: + +1. Create a Spring Boot application using [Spring Initializr](https://start.spring.io/). Choose the dependencies you need for your application, such as web, data access, security, etc. Download and unzip the project folder. + +2. Build a container image for your application using [Jib](https://github.com/GoogleContainerTools/jib). Jib is a tool that builds optimized Docker and OCI images for Java applications without a Docker daemon. Add the Jib plugin to your pom.xml file and run `mvn compile jib:build` to build and push the image to a registry of your choice. + +3. Deploy your application on Kubernetes using [Skaffold](https://skaffold.dev/). Skaffold is a tool that automates the workflow for building, pushing, and deploying applications on Kubernetes. Create a skaffold.yaml file that defines how to build and deploy your application using Jib and kubectl or helm. Run `skaffold dev` to start a continuous development mode that watches for changes in your source code or configuration files and updates your application on the cluster. + +4. Install Botkube on your cluster using [Helm](https://helm.sh/). Helm is a package manager for Kubernetes that lets you install and manage applications using charts. Add the Botkube chart repository and install the botkube chart with the configuration options for your chat platform. Get started with Botkube for free with our new [cloud app](https://botkube.io/blog/introducing-botkube-v1-0-the-future-of-kubernetes-troubleshooting). + +5. Configure Botkube to monitor and manage your application from the Cloud Based Web GUI. At this point Botkube should be connected to your instance and a channel in your messaging platform. Simply select the notifications you want to receive from the services and invite all the needed DevOps & SRE team members. + + +**Conclusion** +-------------- + +After the setup anyone can view and run necessary commands from one single channel in Slack. No more switching back and forth to run CLI commands when an error shows up! This brings security and flexibility to running your Java application within Kubernetes all through Slack. Slack is also mobile, so those error reports and ChatOps fixes Botkube bring can go wherever you go. + +In conclusion, Botkube empowers DevOps engineers with the agility and precision needed for streamlined Springboot deployments on Kubernetes. By automating routine tasks, Botkube significantly reduces deployment time and effort. Moreover, its built-in troubleshooting features provide invaluable assistance in pinpointing and resolving errors, expediting the debugging process. With Botkube, DevOps engineers can confidently manage Springboot Kubernetes deployments, ensuring efficient and reliable application delivery. diff --git a/hack/assistant-setup/content/botkube.io__learn__the-benefits-and-use-cases-of-using-botkube-in-kubernetes-clusters.md b/hack/assistant-setup/content/botkube.io__learn__the-benefits-and-use-cases-of-using-botkube-in-kubernetes-clusters.md new file mode 100644 index 0000000..7cc3983 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__the-benefits-and-use-cases-of-using-botkube-in-kubernetes-clusters.md @@ -0,0 +1,35 @@ +Title: Boost Efficiency & Visibility: Benefits of Using Botkube in K8s + +URL Source: https://botkube.io/learn/the-benefits-and-use-cases-of-using-botkube-in-kubernetes-clusters + +Markdown Content: +In the dynamic landscape of Kubernetes management, efficient communication and streamlined control over your clusters are paramount. Enter Botkube - a versatile tool that bridges the gap between Kubernetes alerts, real-time messaging platforms like Slack, and operational control. Originally designed as a means to connect Kubernetes alerts with popular chat platforms, Botkube has evolved into an indispensable tool for enhancing cluster management. In this article, we'll delve into the core use cases of Botkube and explore its [expanding functionalities](https://botkube.io/features). + +**1\.** Integrating Kubernetes Alerts with Chat Platforms +--------------------------------------------------------- + +The genesis of Botkube's utility lies in its ability to seamlessly connect Kubernetes alerts with chat platforms like [Slack](https://botkube.io/integration/slack). This integration transforms the way DevOps teams stay informed about their clusters. Instead of monitoring logs or checking emails for alerts, Botkube delivers real-time notifications directly to your preferred chat tool. This ensures that critical incidents are promptly acknowledged and addressed, reducing response times and minimizing downtime. + +**2.** Streamlining Administrative Tasks +---------------------------------------- + +A standout feature of Botkube is its capability to execute commands directly from the integrated chat platform. With just a single click, you can run Kubectl commands, eliminating the need to switch between terminals and chat tools. This streamlines administrative tasks by providing a unified interface for interacting with your Kubernetes clusters. Whether it's scaling resources, inspecting pod status, or diagnosing issues, Botkube empowers you to take action swiftly and effortlessly. + +**3\.** Extending Functionality for Springboot/Java Users +--------------------------------------------------------- + +While Botkube's original focus was on alerts and administrative tasks, its potential extends far beyond. For Springboot/Java users seeking to seamlessly integrate their applications with Kubernetes, Botkube serves as a valuable companion. It simplifies the deployment process, aids in monitoring application performance, and enhances collaboration between development and operations teams. Learn more about Botkube's ability to assist with [Springboot and Kubernetes management here](https://botkube.io/learn/spring-boot). + +**4\.** Continuous Enhancement Based on User Needs +-------------------------------------------------- + +At Botkube, innovation is an ongoing journey. Our development team consistently refines and expands the tool's functionality to cater to evolving use cases. We encourage you to check back frequently to discover new features and improvements that can enhance your Kubernetes management experience. + +In Conclusion +------------- + +Botkube revolutionizes Kubernetes cluster management by connecting alerts to chat platforms and facilitating direct command execution. Its ability to unify communication and control in a single interface streamlines operations and enhances collaboration. For deeper insights into Botkube's diverse use cases, we invite you to explore our [array of articles](https://botkube.io/learn-main-topic/use-cases) that delve into specific functionalities. As the landscape of Kubernetes management continues to evolve, Botkube remains committed to empowering users with innovative solutions. Keep an eye out for our updates and explore the full spectrum of possibilities that Botkube unlocks. + +_Note: This article is a general overview of Botkube's use cases. For more detailed insights into specific functionalities, please refer to our other articles._ + +‍ diff --git a/hack/assistant-setup/content/botkube.io__learn__turning-kubernetes-k8s-alerts-into-k8s-notifications.md b/hack/assistant-setup/content/botkube.io__learn__turning-kubernetes-k8s-alerts-into-k8s-notifications.md new file mode 100644 index 0000000..65e81df --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__turning-kubernetes-k8s-alerts-into-k8s-notifications.md @@ -0,0 +1,63 @@ +Title: Setting up Kubernetes Notifications Based on K8s Cluster Alerts + +URL Source: https://botkube.io/learn/turning-kubernetes-k8s-alerts-into-k8s-notifications + +Markdown Content: +**What are Kubernetes Alerts?** +------------------------------- + +Kubernetes Alerts are notifications that are sent out when certain conditions are met in a Kubernetes cluster. These conditions can be anything from a pod failing to start up to a resource running out of memory. DevOps teams use Kubernetes Alerts to stay up-to-date on the health of their clusters and to quickly identify and resolve any issues that may arise. + +By setting up and monitoring Kubernetes Alerts, DevOps teams can stay up-to-date on the health of their clusters and quickly identify and resolve any issues that may arise. This can help to prevent outages, improve performance, and improve security. + +Here are some additional benefits of using Kubernetes Alerts: + +* **Reduced downtime:** Alerts can help to reduce downtime by notifying DevOps teams of potential problems early on, so that they can be addressed before they cause an outage. +* **Improved performance:** Alerts can help to improve performance by identifying and resolving performance issues early on. +* **Improved security:** Alerts can help to improve security by identifying and resolving security vulnerabilities early on. It also allows for Role Based Access Control to receive notifications about anything to do with your cluster. + +**K8s Alert Setup Best Practices** +---------------------------------- + +There are a number of different ways to set up and monitor Kubernetes Alerts. One common approach is to use a monitoring tool like Prometheus or ELK. These tools can collect metrics from Kubernetes clusters and alert on any conditions that meet a pre-defined threshold. + +Another approach is to use a ChatOps tool like Slack or Discord. These tools can be used to send alerts directly to a chat room where DevOps engineers can see them and take action. Those users familiar with Botkube already know that this is our chosen method for Kubernetes notifications. However, Botkube does not restrict its users to only chat rooms as a method to monitor health and will gladly connect [Prometheus Alertmanager into Slack Chats](https://botkube.io/integration/prometheus). + +### **Common DevOps K8s Alerting Deployment Stack** + +As mentioned previously, the most common deployment for Kubernetes-based alerts is Prometheus deployed within the K8s cluster. Prometheus comes with some out-of-the-box monitoring, but it really needs to be set up. This is common with Kubernetes tools, as they offer a lot of functionality but require additional setup to be secure. + +Prometheus can be used to monitor a variety of metrics, including CPU and memory usage, network traffic, and errors. By monitoring these metrics, DevOps teams can identify potential problems early on and take action to prevent them from causing outages or other disruptions. + +Most DevOps engineers or Platform Engineers who choose Prometheus as their alert generator will add AlertManager to take advantage of the default alerting setup there. + +Here are some of the metrics that Prometheus can be used to monitor: + +* **CPU usage**: This metric tracks how much CPU time is being used by a pod or container. +* **Memory usage**: This metric tracks how much memory is being used by a pod or container. +* **Network traffic**: This metric tracks the amount of network traffic that is being generated by a pod or container. +* **Errors**: This metric tracks the number of errors that are being produced by a pod or container. + +‍ + +**Deploying Alerting in Kubernetes** +------------------------------------ + +Up until recently, the most convenient way to deploy Prometheus on Kubernetes was to use the [Prometheus Operator,](https://github.com/coreos/prometheus-operator) but the newest method is within Botkube's new Kubernetes instance building tool that allows drag-and-drop deployment of Kubernetes and popular tools used to manage K8s. + +See the screenshot below of a user getting to choose which Kubernetes monitoring tools should be deployed on the instance. This adds a simple drag and drop method for deployment of clusters and all the popular extras everyone adds to K8s. + +![Image 1: Using Botkube easy deployment to add Prometheus to a cluster for monitoring systems](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64906a2371c9ab8e6dc6ddb6_V-YOSfFBViuhopfKoGcUMj5JYzvnXh9tWjerWoQdI-j8vsK72wRwn5rtVwa86aBzqQY1TUrdT9NhaQTCCqJytn7Da0RLqTGRb7s-oaGf-tMn0yKn7smVOp_yMP6B_n-wIc4kRgpQ4A8o_GRqG_4Y3Co.png) + +In addition to deploying Prometheus and Alert Manager, the instance builder allows for the notifications to show up directly in a group chat! No longer having to set up manual webhooks every time you want to see cluster errors in Slack. Just simply add your group channel in the low-code/no-code Kubernetes Instance builder and the notifications will automatically flow! + +**Monitoring Notifications & Performing Operations from Slack (The Dream!)** +---------------------------------------------------------------------------- + +![Image 2: DevOps viewing Kubernetes related alerts in Slack Channel](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64906a23d5a2c2df94130c18_3Zs_vCZcuJoTEhihXXQraKFF46AmpDYF8PzyANRaig8u8WLHmCnTzx7BpBQ_dSqS7oKiF43cWS5PoasV_5KBHC446YpvadqyX5vfDpKg9KiAAENtgocmGhEbHY19P9yO5tJehoyJtzEkcWP8wecntlM.png) + +If the developer has followed the best practices up until this point, they should have Kubernetes monitoring within their clusters with notifications coming out in the form of chat messages in Slack, Teams, or Discord. This will show things like Pod Failing, Restart, or any number of other customizable Kubernetes alerts. + +Botkube also allows for operations to be run to fix any K8s alert that comes in based on its AI suggested fix. Simply click the button prompts Botkube gives with its troubleshooting suggestions and our software will run the commands directly in your cluster. No more switching back to Command Line Interfaces! Just run everything in your chat group! + +‍ diff --git a/hack/assistant-setup/content/botkube.io__learn__understanding-kubernetes-executors.md b/hack/assistant-setup/content/botkube.io__learn__understanding-kubernetes-executors.md new file mode 100644 index 0000000..cbde57b --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__understanding-kubernetes-executors.md @@ -0,0 +1,33 @@ +Title: Kubernetes Executors Explained - A Guide for Platform Engineers + +URL Source: https://botkube.io/learn/understanding-kubernetes-executors + +Markdown Content: +If you're a Platform Engineer, DevOps Engineer, or SRE responsible for managing infrastructure within Kubernetes, then Kubernetes executors are essential tools for your workflow. Let's dive into what they are and how they can streamline your Kubernetes operations. + +**What is a Kubernetes Executor?** +---------------------------------- + +At its core, a Kubernetes executor is a mechanism that facilitates the execution of tasks or workloads within your Kubernetes cluster. Think of the executor as the 'conductor' that orchestrates how your applications and processes are deployed and managed. Executors play a crucial role in automating routine tasks and ensuring streamlined operations within the complex environment of Kubernetes. + +### **Why should Platform, DevOps, and SRE teams care?** + +* **Enhanced Scalability:** Kubernetes executors enable you to scale your applications dynamically based on demand, ensuring optimal resource utilization. +* **Improved Reliability:** They offer fault tolerance by automatically restarting failed tasks or pods, minimizing downtime. +* **Streamlined Workflows:** Executors automate repetitive tasks and provide a structured approach to managing your Kubernetes deployments. + +Let's explore some of the most important executors you should be familiar with: + +* **Kubectl:** The cornerstone of Kubernetes control, Kubectl grants you direct command-line access to your cluster. Botkube's AIOps features take this one step further, allowing you to automate Kubectl commands based on intelligent suggestions from its AI DevOps Assistant. +* **GitOps Executors (Flux and Argo CD):** GitOps executors like Flux and Argo CD, which Botkube seamlessly integrates with, empower you to manage your entire Kubernetes configuration as code. Updates and changes are initiated through pull requests within your source control system and automatically reflected within your cluster – all accessible directly from Teams or Slack. To learn more about configuring a Flux executor, see the [official Flux executor documentation](https://docs.botkube.io/configuration/executor/flux). + +**Conclusion** +-------------- + +By strategically choosing and integrating Kubernetes executors, Platform, DevOps, and SRE teams can significantly enhance the efficiency, reliability, and scalability of their Kubernetes infrastructure. Botkube, along with its AI DevOps Assistant, provides a powerful toolkit to simplify executor usage and optimize your Kubernetes workflows, whether you're leveraging Kubectl, GitOps tools, or other specialized executors. + +‍ + +### About Botkube + +Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](http://app.botkube.io/) diff --git a/hack/assistant-setup/content/botkube.io__learn__understanding-yaml-commenting.md b/hack/assistant-setup/content/botkube.io__learn__understanding-yaml-commenting.md new file mode 100644 index 0000000..7109324 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__understanding-yaml-commenting.md @@ -0,0 +1,99 @@ +Title: Understanding YAML Comments in Kubernetes: Improve Collaboration + +URL Source: https://botkube.io/learn/understanding-yaml-commenting + +Markdown Content: +[![Image 1: Kusk Kubernetes](https://assets-global.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](https://botkube.io/) + +Understanding YAML Commenting for Better Kubernetes Management +-------------------------------------------------------------- + +![Image 2: an image of a cloud with the words'botkube definitions'](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65fa0b549adc75e0bdbbd27b_LEARN_TN_Definitions%20(9).png) + +Last updated + +March 19, 2024 + +![Image 3: a man in a blue shirt with his arms crossed](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a86fdda4d8d06ce598598e_evan%20image.jpg) + +Evan Witmer + +Growth Lead + +Botkube + +Table of Contents +----------------- + +* [What Does YAML Commenting Look Like?](#what-does-yaml-commenting-look-like-) +* [Why Use Comments in YAML?](#why-use-comments-in-yaml-) +* [Beyond Notes: Botkube for Team-Based Kubernetes Management](#beyond-notes-botkube-for-team-based-kubernetes-management) +* [Final Thoughts](#final-thoughts) + +#### Get started with Botkube Cloud + +YAML (YAML Ain't Markup Language) is a powerful and human-friendly data serialization format that has become the backbone of Kubernetes configuration. Within YAML files, comments serve a crucial role in explaining code, documenting decisions, and fostering collaboration. Let's explore how to comment in YAML and the benefits of using annotations effectively. + +**What Does YAML Commenting Look Like?** +---------------------------------------- + +YAML commenting is straightforward. The hash symbol (#) marks the beginning of a comment. Everything on a line after the # is ignored by the YAML parser, allowing you to insert notes and explanations directly within your configuration files. + +There are two primary types of YAML comments: + +* **Single-line comments:** Used for brief notes or for temporarily deactivating a line of YAML code. + + +
+view raw + +blog-comment-1.yaml + +hosted with ❤ by GitHub +
+ + + +* **Inline comments:** Can be added at the end of a line of code. This lets you insert short explanations alongside the code itself. + + +
+view raw + +gistfile1.yaml + +hosted with ❤ by GitHub +
+ + + +**Why Use Comments in YAML?** +----------------------------- + +There are many good reasons to utilize comments in your Kubernetes YAML files: + +* **Documentation:** Comments explain the purpose of different sections of code, design choices, and potential caveats, both for yourself and future collaborators. +* **Collaboration:** Leave notes for other team members working on the same project, fostering efficient communication and ensuring everyone is on the same page. +* **Debugging:** Temporarily comment out parts of your YAML configuration to pinpoint issues more easily during troubleshooting. +* **Historical record:** Comments create a log of changes and thought processes for troubleshooting Kubernetes deployment scenarios and maintaining your cluster effectively. + +**Beyond Notes: Botkube for Team-Based Kubernetes Management** +-------------------------------------------------------------- + +While YAML comments aid collaboration, tools like Botkube enhance the way your team works on Kubernetes. Let's understand how: + +* **Common K8s Alerts:** The first step to fixing a K8s issue, as a team, is making sure every team meber is aware of when the alert happened and what triggered that alert. Botkube brings in [Kubernetes notifications](https://botkube.io/learn/turning-kubernetes-k8s-alerts-into-k8s-notifications) directly to your team’s chat channel with mention of any errors that may have occurred. +* **ChatOps Integration:** Botkube bridges the gap between your Kubernetes cluster and collaborative platforms like Slack or Mattermost. Your team can directly communicate with Kubernetes from your chat channels. +* **Shared Context:** Troubleshooting happens right within conversations, providing everyone with relevant insights, historical records, and creating a searchable shared knowledge base. +* **Automated Log Pulling:** Finding tasks that your DevOps or other team members do, in regards to their cluster, can be automated with Botkube. One feature that Botkube comes with out of the box is the ability to automate log pulling on recurring errors. This is just one of the many automations that can be implemented! + +**Final Thoughts** +------------------ + +Comments may seem like simple additions, but in the world of Kubernetes configuration, they serve a vital role in ensuring both code clarity and collaboration effectiveness. Using them intelligently—and considering tools like Botkube to maximize their potential—empowers teams to seamlessly manage complex Kubernetes landscapes. + +‍ + +### About Botkube + +Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](http://app.botkube.io/) diff --git a/hack/assistant-setup/content/botkube.io__learn__use-cases-for-aiops-platform.md b/hack/assistant-setup/content/botkube.io__learn__use-cases-for-aiops-platform.md new file mode 100644 index 0000000..6d3728c --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__use-cases-for-aiops-platform.md @@ -0,0 +1,54 @@ +Title: Demystifying AIOps Platforms: Powerful Use Cases + +URL Source: https://botkube.io/learn/use-cases-for-aiops-platform + +Markdown Content: +[![Image 1: Kusk Kubernetes](https://assets-global.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](https://botkube.io/) + +Top Use Cases for AIOps Platform: Empowered DevOps with Chat-Based AI +--------------------------------------------------------------------- + +![Image 2: botkube definitions - screenshot thumbnail](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65fa0ba7997da02f4543c915_LEARN_TN_Definitions%20(8).png) + +Last updated + +March 19, 2024 + +![Image 3: a man in a blue shirt with his arms crossed](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/64a86fdda4d8d06ce598598e_evan%20image.jpg) + +Evan Witmer + +Growth Lead + +Botkube + +Table of Contents +----------------- + +* [AIOps Use Cases](#aiops-use-cases) +* [Concluding Thoughts](#concluding-thoughts) + +#### Get started with Botkube Cloud + +The landscape of DevOps is evolving at breakneck speed. With the booming popularity of chatbots and large language models (LLMs), a revolutionary trend is emerging: MLOps, or the application of AI and machine learning to streamline and automate IT operations. This translates to DevOps engineers increasingly leveraging "AIOps tools" and "AIOps solutions" to navigate the complexities of their Kubernetes environments. + +Botkube stands at the forefront of this exciting development, offering a unique AIOps platform specifically designed for Kubernetes. While several robust competitors exist, Botkube sets itself apart by seamlessly integrating AI-powered troubleshooting directly into familiar chat platforms like Teams and Slack. This innovative approach simplifies AI query control for common issues and fosters smoother collaboration between DevOps and developers. + +But what exactly are the key use cases that make AIOps platforms like Botkube so valuable? Let's explore some of the most impactful scenarios: + +1. Intelligent Alerting and Notification: Say goodbye to information overload! AIOps platforms can intelligently filter and prioritize alerts, sending relevant notifications via your preferred chat platform. This eliminates noise and empowers timely action on critical issues. Botkube, for instance, leverages AI to understand the context of alerts and deliver them directly within your chat environment, streamlining communication and response. +2. Knowledge Management and Collaboration: Capturing and sharing knowledge within DevOps teams is crucial. AIOps platforms can store and analyze past incidents, providing valuable insights and fostering knowledge sharing. Chat-based interfaces like Botkube's further enhance this collaboration by providing a central platform for discussing and resolving issues collaboratively. +3. Continuous Improvement: The power of AIOps lies not just in solving problems but in learning from them. By analyzing historical data and identifying recurring issues, AIOps platforms can suggest improvements to infrastructure and processes, leading to a more optimized and resilient environment. Botkube empowers this continuous improvement by capturing feedback and suggestions directly within the chat platform, ensuring continuous learning and evolution. +4. Automated Root Cause Analysis (RCA): No more chasing elusive gremlins! AIOps platforms leverage machine learning to analyze vast amounts of data and automatically pinpoint the root cause of issues. This saves DevOps teams precious time and effort, allowing them to focus on strategic tasks. Botkube goes a step further by allowing filtering of relevant code sections contributing to the issue, further accelerating resolution. +5. Predictive Maintenance: Proactive problem-solving is the key to operational excellence. AIOps platforms can analyze trends and predict potential issues before they occur, enabling preventative measures and minimizing downtime. By integrating into chat platforms, Botkube ensures real-time visibility into potential problems, fostering proactive collaboration between teams. + +**Concluding Thoughts** +----------------------- + +In conclusion, the rise of AIOps platforms, with Botkube leading the charge in the Kubernetes space, signifies a paradigm shift in DevOps. By leveraging AI and integrating seamlessly into communication tools like chat platforms, these solutions are empowering DevOps teams to gain deeper insights, automate tasks, and collaborate effectively. As the adoption of AIOps continues to accelerate, one thing is certain: the future of DevOps is intelligent, collaborative, and chat-driven. + +‍ + +### About Botkube + +Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](http://app.botkube.io/) diff --git a/hack/assistant-setup/content/botkube.io__learn__what-is-oomkilled.md b/hack/assistant-setup/content/botkube.io__learn__what-is-oomkilled.md new file mode 100644 index 0000000..b9c114f --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__learn__what-is-oomkilled.md @@ -0,0 +1,56 @@ +Title: OOMKilled Explained: Unraveling Kubernetes Memory Limit Errors + +URL Source: https://botkube.io/learn/what-is-oomkilled + +Markdown Content: +OOMKilled is an error that occurs when a container or pod in Kubernetes uses more memory than it is allowed. This can happen for a variety of reasons, such as a memory leak, a bug in the application, or a spike in traffic. When a container or pod is terminated due to OOMKilled, it will not be able to recover and will need to be restarted. + +**How to View the Error Message** +--------------------------------- + +If you see an OOMKilled error, you can view the error message by running the following command: + +`kubectl logs ` + +The error message will show you the name of the container that was terminated and the reason for the termination. + +**What is Error Code 137?** +--------------------------- + +Error Code 137 is the exit code that is returned when a container or pod is terminated due to OOMKilled. You can see the error code by running the following command: + +`kubectl get pod -o yaml` + +The error code will be listed in the "Status" section of the pod's YAML definition. + +**How to Prevent OOMKilled** +---------------------------- + +There are a few things that can be done to prevent OOMKilled in Kubernetes. One is to set memory limits on containers and pods. This will prevent containers from using more memory than they are allowed. Another is to use a memory profiler to identify and fix memory leaks. Finally, it is important to monitor your Kubernetes cluster for signs of OOMKilled errors. If you see an OOMKilled error, you can take steps to troubleshoot the issue and prevent it from happening again. + +**How to Troubleshoot OOMKilled** +--------------------------------- + +If you see an OOMKilled error, you can take the following steps to troubleshoot the issue: + +1. Identify the container or pod that was terminated. +2. Check the memory usage of the container or pod. +3. Look for any errors in the container or pod logs. +4. Update the container or pod image. +5. Increase the memory limit for the container or pod. + +**Conclusion** +-------------- + +OOMKilled is an error that can cause significant disruptions to your Kubernetes applications. By following the tips in this article, you can help to prevent OOMKilled and keep your applications running smoothly. + +### **Additional Tips for Troubleshooting OOMKilled** + +Here are some additional tips for troubleshooting OOMKilled errors: + +* Use a tool like Prometheus to collect metrics about your Kubernetes cluster. +* Use a tool like Botkube to see the error messages directly in Slack or Teams and use AI to suggest a troubleshooting action directly from the Slack channel. + +### About Botkube + +Botkube is a collaborative troubleshooting tool designed specifically for Kubernetes users. With Botkube, you can seamlessly receive and act on alerts directly within your preferred messaging and collaboration platforms like Slack, Microsoft Teams, Discord, and Mattermost. In addition, Botkube enables you to automate actions based on events, run kubectl and Helm commands, receive recommendations for best practices and much more. [Get started with Botkube for free.](http://app.botkube.io/) diff --git a/hack/assistant-setup/content/botkube.io__lp__5-essential-kubernetes-monitoring-and-troubleshooting-tasks-to-automate.md b/hack/assistant-setup/content/botkube.io__lp__5-essential-kubernetes-monitoring-and-troubleshooting-tasks-to-automate.md new file mode 100644 index 0000000..cc168c4 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__lp__5-essential-kubernetes-monitoring-and-troubleshooting-tasks-to-automate.md @@ -0,0 +1,44 @@ +Title: 5 Kubernetes Monitoring and Troubleshooting Tasks to Automate + +URL Source: https://botkube.io/lp/5-essential-kubernetes-monitoring-and-troubleshooting-tasks-to-automate + +Markdown Content: +Botkube helps teams monitor and respond to Kubernetes issues by sending intelligent notifications about what's happening in their environments — all directly in their preferred chat platform. It's not just about alerts though; Botkube also lets teams automate responses, run Kubernetes commands, and follow Kubernetes best practices. + +Join us for an office hours session where we'll explore five ways for DevOps teams to automate common Kubernetes tasks to save time each week. This session is useful and informative for those new to Kubernetes or those with years of K8s experience under their belt. We'll talk through: + + **- Monitoring and Alerting Kubernetes Clusters** + +Botkube can automate your monitoring setup, transforming how you manage incoming queries and requests. It intelligently categorizes and responds to various types of queries based on their specific channel and frequency. + + **- Resource Scaling** + +Manually adjusting resources can be time-consuming and error-prone, leading to inefficiencies. Botkube offers a valuable solution for automating resource scaling by simplifying access to Kubernetes clusters by providing actionable notifications and the ability to execute kubectl, helm, and GitOps commands directly from a shared team channel. + + **- Kubernetes Log Management** + +By automating the collection and analysis of logs, Botkube centralizes these critical data points, making them easily accessible for quick analysis. This centralization offers a comprehensive view of all events and errors within the Kubernetes environment, significantly easing the troubleshooting process for both Ops and Dev teams. + + **- GitOps Workflows** + +Botkube's GitOps plugins bridge the gap between GitOps tools and communication platforms, offering an efficient, interactive, and user-friendly approach to managing Kubernetes deployments. We'll show the[**Botkube Flux plugin**](https://botkube.io/blog/introducing-botkubes-integration-with-flux), which streamlines the integration of Kubernetes clusters, GitHub repositories, and the Flux CLI. + +**\- K8s Configuration Management**[**Botkube's Helm executor plugin**](https://botkube.io/learn/helm-charts) enhances configuration management by allowing users to run Helm commands directly from their chat interface. This integration streamlines config management, making it more accessible and less error-prone compared to manual methods. + +‍ + +![Image 1: a screenshot of an error message on a website](https://assets-global.website-files.com/634fabb21508d6c9db9bc46f/65a0710c644fa0ebb76293d8_DJDInRt7FR5LTwmVqnG4WM9OBv7o9_FmRKnG5sA9F-UU-kqljSWEtByVtVP37PhGh2wq7eezjjCNzzjlYyIOyqlAfEMDA6UdSCs5AUJLKfcy3qqXg8cEOoJTdi4S-5Z_Otd9bgcKLoeY5gEcWNa0D4U.gif) + +‍ + +### Additional Resources + +Learn more about tasks to automate in the "[Optimizing K8s Management with Botkube: 5 Essential DevOps Tasks to Automate](https://botkube.io/blog/botkube-5-essential-devopstasks-to-automate)" blog post. + +If you're new here, follow our step-by-step [**tutorial**](https://botkube.io/blog/maximize-your-devops-teams-efficiency-with-botkube-and-microsoft-teams) to set up Botkube in under an hour using our web app. + +### ‍**Who should attend this event?** + +**‍**DevOps Engineers, Software Developers, and SREs - or anyone in-between. If you're looking to improve your Kubernetes troubleshooting skills, automate your DevOps tasks, or explore the benefits of collaborative troubleshooting and monitoring, this event is for you. + +‍ diff --git a/hack/assistant-setup/content/botkube.io__lp__mastering-developer-self-service.md b/hack/assistant-setup/content/botkube.io__lp__mastering-developer-self-service.md new file mode 100644 index 0000000..2922717 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__lp__mastering-developer-self-service.md @@ -0,0 +1,26 @@ +Title: Mastering Developer Self-Service in Kubernetes + +URL Source: https://botkube.io/lp/mastering-developer-self-service + +Markdown Content: +In the ever evolving Kubernetes landscape, ensuring optimal management and operations is paramount. One key way to improving workflows is Developer  Self-Service in Kubernetes, which plays a vital role in the software development lifecycle. + +Developers face two main challenges: _they must either rely on getting their Kubernetes resources from their operations team or become Kubernetes experts themselves._ + +_‍_These scenarios delay the swift rollout of new features and solutions. Botkube enables developers to access their Kubernetes resources easily without needing to become a Kubernetes expert. + +Through Botkube’s Slack interactivity features, developers can perform tasks like running common **kubectl** commands such as **kubectl describe** and **kubectl get pods** — without the need to learn the syntax or navigate the command-line terminal. + +Join the Botkube team for an insightful session on how we enable Kubernetes Developer Self-Service, a transformative approach to Kubernetes management and operations. + +In this session, we will deep dive into best practices that are improving the way developers interact with Kubernetes clusters like Slack interactivity and command builder, aliases, and automation. + +* Learn how users can interact with Kubernetes directly from Slack or MS Teams, no deep K8s knowledge required +* Discover the benefits of creating Botkube automations +* Learn about collaborative troubleshooting techniques like aliases + +**Special Interview** +**‍**We’ll talk with some members of Botkube engineering team to learn how they leverage Botkube’s features to enhance their operational efficiency — ensuring timely releases and maintaining high standards of product quality. + +‍**Who should attend?** +DevOps Engineers, Software Developers, and SREs - or anyone in-between. This event is perfect for those looking to enhance their Kubernetes troubleshooting skills or explore the benefits of collaborative alerting and monitoring. diff --git a/hack/assistant-setup/content/botkube.io__lp__zapier-for-kubernetes.md b/hack/assistant-setup/content/botkube.io__lp__zapier-for-kubernetes.md new file mode 100644 index 0000000..60eb8ea --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__lp__zapier-for-kubernetes.md @@ -0,0 +1,22 @@ +Title: Zapier for Kubernetes: Botkube Plugins for K8s Troubleshooting + +URL Source: https://botkube.io/lp/zapier-for-kubernetes + +Markdown Content: +Unlock the power of Botkube's plugin system for efficient cloud-native tool management! Think of Botkube as Zapier for Kubernetes. +The cloud-native ecosystem keeps growing, adding new tools every day. For DevOps teams, integrating these tools can be a challenge. But with Botkube, you can effortlessly handle tools like Helm and Prometheus within your communication platform. Plus, take automation to the next level with Botkube actions! + +Join us for an exciting session about Botkube's plugin system and how it improves the Kubernetes troubleshooting process. In this session we will deep dive into some of Botkube's plugins including: Helm, Prometheus, and kubectl. We will also be covering Botkube actions which automate the bridge between alerts and responses, even across a variety of cloud-native tools. For DevOps focused on building infrastructure, organizing Kubernetes (K8s) operations can be daunting. We've tailored this session to make things simpler for you: + +\- Learn how Botkube lets you interact with Helm, Prometheus, and kubectl in Slack! + +\- Discover the benefits of automations with Botkube. + +\- Collaborative troubleshooting techniques + +**Special Interview** + +In this session, I will be interviewing Botkube's Product Lead, Blair Rampling, about Botkube's product vision and roadmap. + +‍**Who should attend?** +DevOps Engineers, Software Developers, and SREs - or anyone in-between. This event is perfect for those looking to enhance their Kubernetes troubleshooting skills or explore the benefits of collaborative alerting and monitoring. diff --git a/hack/assistant-setup/content/botkube.io__news.md b/hack/assistant-setup/content/botkube.io__news.md new file mode 100644 index 0000000..420ce31 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__news.md @@ -0,0 +1,82 @@ +Title: News + +URL Source: https://botkube.io/news + +Markdown Content: +Explore the new Era of AIOps: Read the article + +Product +Community +Company +Sign in +Get Started +Thought Leadership and News +APR 8, 2024 +7 +min. read +2 Ways AI Assistants Are Changing Kubernetes Troubleshooting + +AI that mimics how humans approach troubleshooting can democratize and improve how people identify and fix Kubernetes issues. + +SEP 8, 2023 +Can ChatGPT Save Collective Kubernetes Troubleshooting? + +Companies like OpenAI have been training models on public data from Stack Overflow, Reddit and others. With AI-driven DevOps platforms, more knowledge is locked inside proprietary models. + +APR 4, 2023 +Building Bridges across the CNCF Landscape + +Botkube offers fast, simple and secure access to your clusters directly from the chat and collaboration platform you’re already using like Slack. + +MAR 15, 2023 +Chatops: Where Automation, Collaboration and DevOps Culture Meet + +Fostering a collaborative cloud native environment is about transparency into your tech stack to give developers gentle onramps into complicated technical challenges. + +NOV 18, 2022 +Enable Collaborative K8s Troubleshooting via ChatOps + +With open source Botkube, you can monitor multiple clusters, debug deployments in real time and check the state of clusters for recommendations on where your team could continuously improve. + +JUL 7, 2022 +Kubeshop acquires Botkube, InfraCloud's popular ChatOps platform for K8s troubleshooting + +InfraCloud Technologies and Kubeshop.io have signed a definitive agreement whereby Kubeshop.io has acquired a majority stake in BotKube. + +Stay in the Loop + +Join the Botkube Community in one of these channels + +Subscribe to our monthly newsletter to stay up to date with all-things Botkube. + +Botkube is made by Kubeshop +— a first of its kind open source accelerator focused on the cloud native ecosystem +At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. +Get to Know Kubeshop +The Team +Investors +Kubeshop Blogs +Discord community +Careers +Kubeshop Github +Botkube +Integrations +Pricing +Support +Features +Documentation +Slack +Github +Learn +Status +About Us +Blog +News +Events +Contact Us +Sign In +Get Started +Case Studies +Copyright © 2024 Kubeshop, LLC. All rights reserved. +Privacy Policy | Terms and Conditions | End User License Agreement +Explore Kubeshop Projects diff --git a/hack/assistant-setup/content/botkube.io__pricing.md b/hack/assistant-setup/content/botkube.io__pricing.md new file mode 100644 index 0000000..b4d10b3 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__pricing.md @@ -0,0 +1,101 @@ +Title: Pricing + +URL Source: https://botkube.io/pricing + +Markdown Content: +Botkube Pricing +--------------- + +The Botkube pricing model is in beta. We are working on optimizing the pricing to best fit the needs of our users. We’d love to talk to you about it, please [contact us](https://botkube.io/contact). + +Node count + +Up to 5 nodes in one cluster + +GUI-based Centralized Configuration Management + +![Image 1: a blue check mark on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a3934a0f6e0a40562e415_pricing-yes.svg) + +AI Insights: AI-based troubleshooting and operations + +1000 Tokens + +Event and Audit Logging + +![Image 2: a blue check mark on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a3934a0f6e0a40562e415_pricing-yes.svg) + +Advanced Slack Bot for Multi-cluster Access + +![Image 3: a blue cross icon on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a388c9b10d4675fb225e7_pricing-no.svg) + +Advanced Microsoft Teams Multi-cluster Access + +![Image 4: a blue cross icon on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a388c9b10d4675fb225e7_pricing-no.svg) + +Node count + +$10 / node / month + +GUI-based Centralized Configuration Management + +![Image 5: a blue check mark on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a3934a0f6e0a40562e415_pricing-yes.svg) + +Event and Audit Logging + +![Image 6: a blue check mark on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a3934a0f6e0a40562e415_pricing-yes.svg) + +AI Insights: AI-based troubleshooting and operations + +100,000 Tokens + +Advanced Slack Bot for Multi-cluster Access + +![Image 7: a blue check mark on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a3934a0f6e0a40562e415_pricing-yes.svg) + +Advanced Microsoft Teams Multi-cluster Access + +![Image 8: a blue check mark on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a3934a0f6e0a40562e415_pricing-yes.svg) + +GUI-based Centralized Configuration Management + +![Image 9: a blue check mark on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a3934a0f6e0a40562e415_pricing-yes.svg) + +AI Insights: AI-based troubleshooting and operations + +Per contract + +Event and Audit Logging + +![Image 10: a blue check mark on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a3934a0f6e0a40562e415_pricing-yes.svg) + +Advanced Slack Bot for Multi-cluster Access + +![Image 11: a blue check mark on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a3934a0f6e0a40562e415_pricing-yes.svg) + +Advanced Microsoft Teams Multi-cluster Access + +![Image 12: a blue check mark on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/640a3934a0f6e0a40562e415_pricing-yes.svg) + +Data retention + +Per contract + +Up to 5 nodes in one cluster + +$10 / node / month + +[Contact Us](https://botkube.io/contact) + +GUI-based Centralized Configuration Management + +Botkube AI Assistant: AI-based troubleshooting and operations + +Advanced Slack Bot for Multi-cluster Access + +Advanced Microsoft Teams Bot for Multi-cluster Access + +4 hours + +90 days + +Per contract diff --git a/hack/assistant-setup/content/botkube.io__privacy-policy.md b/hack/assistant-setup/content/botkube.io__privacy-policy.md new file mode 100644 index 0000000..ccace11 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__privacy-policy.md @@ -0,0 +1,261 @@ +Title: Privacy policy + +URL Source: https://botkube.io/privacy-policy + +Markdown Content: +OVERVIEW +-------- + +This Privacy Policy (“Policy”) for Kubernetes Innovation Labs LLC, doing business as Botkube, ("Botkube," "We," "Us," or "Our") hereby notifies You, whether personally or on behalf of an entity (“You”), when, how, and why We might collect, store, use, and/or share (collectively, "Process") Your information when You: + +1. Visit Our website at [https://botkube.io/](https://botkube.io/), or any other website(s) of ours that link to this Policy; +2. Use or visit any other websites, domains, sub-domains, application programming interfaces (“APIs”), bots, frameworks, development environments, templates, documentation, configurations, mobile websites, or mobile applications (collectively, the “Services”) that We develop, manage, operate, or otherwise make available; + +(3) Engage with Us in other related ways, including any sales, marketing, online communications, or events. + +QUESTIONS OR CONCERNS? +---------------------- + +Reading this Policy will help You understand Your privacy rights and choices. If You do not agree with Our policies and practices, please do not use Our Services. If You still have any questions or concerns, please contact Us at [frontdesk@kubeshop.io](mailto:frontdesk@kubeshop.io). + +SUMMARY OF KEY POINTS +--------------------- + +#### What personal information do We Process? + +When You visit, use, or navigate Our Services, We may Process personal information depending on how You interact with Kubeshop and the Services, the choices You make, and the products and features You use. + +#### Do We Process any sensitive personal information? + +We do not Process sensitive personal information. + +#### Do We receive any information from third parties? + +We do not receive any information from third parties. + +#### How do We Process Your information? + +We Process Your information to provide, improve, and administer Our Services, communicate with You, for security and fraud prevention, and to comply with law. We may also Process Your information for other purposes with Your consent. We Process Your information only when We have a valid legal reason to do so. + +#### In what situations and with which parties do We share personal information? + +We may share information in specific situations and with specific third parties as necessary to analyze the effectiveness of and improve Our Services. We never share any sensitive personal information or personally identifiable data with other parties. + +#### How do We keep Your information safe? + +We have organizational and technical processes and procedures in place to protect Your personal information. However, no electronic transmission over the internet or information storage technology can be guaranteed to be 100% secure, so We cannot promise or guarantee that hackers, cybercriminals, or other unauthorized third parties will not be able to defeat Our security and improperly collect, access, steal, or modify Your information. + +#### What are Your rights? + +Depending on where You are located geographically, the applicable privacy law may mean You have certain rights regarding Your personal information. + +#### How do You exercise Your rights? + +The easiest way to exercise Your rights is by filling out Our data subject request form for the relevant Service which You are using, or by contacting Us. We will consider and act upon any request in accordance with applicable data protection laws. + +### TABLE OF CONTENTS + +1. WHAT INFORMATION DO WE COLLECT? +2. HOW DO WE PROCESS YOUR INFORMATION? +3. CONTROLS FOR DO-NOT-TRACK FEATURES +4. DO CALIFORNIA RESIDENTS HAVE SPECIFIC PRIVACY RIGHTS? +5. HOW CAN YOU CONTACT US ABOUT THIS NOTICE? +6. HOW CAN YOU REVIEW, UPDATE, OR DELETE THE DATA WE COLLECT FROM YOU? +7. INCORPORATION OF KUBESHOP PRIVACY POLICY BY REFERENCE + +1\. WHAT INFORMATION DO WE COLLECT? +----------------------------------- + +#### Personal information You disclose to Us + +We collect personal information that You voluntarily provide to Us when You register on the Services, express an interest in obtaining information about Us or Our products and Services, when You participate in activities on the Services, or otherwise when You contact Us. + +#### Sensitive Information. + +We do not Process sensitive information or personally identifiable information. + +All personal information that You provide to Us must be true, complete, and accurate, and You must notify Us of any changes to such personal information. + +#### Information automatically collected + +We automatically collect certain information when You visit, use, or navigate the Services, such as telemetry data. This information does not reveal Your specific identity (like Your name or contact information) but may include device and usage information, such as Your IP address, browser and device characteristics, operating system, language preferences, referring URLs, device name, country, location, information about how and when You use Our Services, and other technical information. This information is primarily needed to maintain the security and operation of Our Services, and for Our internal analytics and reporting purposes. + +Like many businesses, We also collect information through cookies and similar technologies. + +The information We collect includes: + +1. _Log and Usage Data._ Log and usage data is service-related, diagnostic, usage, and performance information Our servers automatically collect when You access or use Our Services and which We record in log files. Depending on how You interact with Us, this log data may include Your IP address, device information, browser type, and settings and information about Your activity in the Services (such as the date/time stamps associated with Your usage, pages and files viewed, searches, and other actions You take such as which features You use), device event information (such as system activity, error reports (sometimes called "crash dumps"), and hardware settings). +2. _Device Data._ We collect device data such as information about Your computer, phone, tablet, or other device You use to access the Services. Depending on the device used, this device data may include information such as Your IP address (or proxy server), device and application identification numbers, location, browser type, hardware model, Internet service provider and/or mobile carrier, operating system, and system configuration information. +3. _Telemetry Data._ For internal metrics and product optimizations, Kubeshop collects the following anonymized and untraceable data which is used only in aggregate form: the number of CLI installations; the number of unique CLI usages in a day; the number of installations to a cluster; the number of unique active cluster installations; the number of people who disable telemetry; the number of unique sessions in the UI; and, the number of API, Static Route, and EnvoyFleet creations. A user may opt-out of such telemetry data collection if they prefer not to share any information by contacting Kubeshop at the email address provided. + +2\. HOW DO WE PROCESS YOUR INFORMATION? +--------------------------------------- + +We Process Your personal information for a variety of reasons, depending on how You interact with Our Services, including: + +1. _To facilitate account creation and authentication and otherwise manage user accounts._ We may Process Your information so You can create and login to Your account, as well as keep Your account in working order. +2. _To protect Our Services._ We may Process Your information as part of Our efforts to keep Our Services safe and secure, including fraud monitoring and prevention. +3. _To identify usage trends._ We may Process information about how You use Our Services to better understand how they are being used so We can improve them. +4. _To determine the effectiveness of Our marketing and promotional campaigns._ We may Process Your information to better understand how to provide marketing and promotional campaigns that are most relevant to You. +5. _To save or protect an individual's vital interest._ We may Process Your information when necessary to save or protect an individual’s vital interest, such as to prevent harm. + +3\. CONTROLS FOR DO-NOT-TRACK FEATURES +-------------------------------------- + +Most web browsers and some mobile operating systems and mobile applications include a Do-Not-Track ("DNT") feature or setting You can activate to signal Your privacy preference not to have data about Your online browsing activities monitored and collected. At this stage no uniform technology standard for recognizing and implementing DNT signals has been finalized. As such, We do not currently respond to DNT browser signals or any other mechanism that automatically communicates Your choice not to be tracked online. If a standard for online tracking is adopted that We must follow in the future, We will inform You about that practice in a revised version of this Policy. + +4\. DO CALIFORNIA RESIDENTS HAVE SPECIFIC PRIVACY RIGHTS? +--------------------------------------------------------- + +California Civil Code Section 1798.83, also known as the "Shine The Light" law, permits Our users who are California residents to request and obtain from Us, once a year and free of charge, information about categories of personal information (if any) We disclosed to third parties for direct marketing purposes and the names and addresses of all third parties with which We shared personal information in the immediately preceding calendar year. If You are a California resident and would like to make such a request, please submit Your request in writing to Us using the contact information provided below. + +If You are under 18 years of age, reside in California, and have a registered account with Services, You have the right to request removal of unwanted data that You publicly post on the Services. To request removal of such data, please contact Us using the contact information provided below and include the email address associated with Your account and a statement that You reside in California. We will make sure the data is not publicly displayed on the Services, but please be aware that the data may not be completely or comprehensively removed from all Our systems (e.g., backups, compliance with legal obligations, etc.). + +#### CCPA Privacy Notice + +The California Code of Regulations defines a "resident" as: + +1. Every individual who is in the State of California for other than a temporary or transitory purpose and; +2. Every individual who is domiciled in the State of California who is outside the State of California for a temporary or transitory purpose. + +All other individuals are defined as "non-residents." + +If this definition of "resident" applies to You, We must adhere to certain rights and obligations regarding Your personal information. + +#### What categories of personal information do We collect? + +We have collected the following categories of personal information in the past twelve (12) months: + +
CategoryExamplesCollected
A. IdentifiersContact details, such as real name, alias, postal address, telephone or mobile contact number, unique personal identifier, online identifier, Internet Protocol (IP) address, email address, and account nameNo
B. Personal information categories listed in the California Customer Records statuteName, contact information, education, employment, employment history, and financial informationNo
C. Protected classification characteristics under California or deferral lawGender and date of birthNo
D. Commercial informationTransaction information, purchase history, financial details, and payment informationNo
E. Biometric informationFingerprints and voiceprintsNo
F. Internet or other similar network activityBrowsing history, search history, online behavior, interest data, and interactions with Our and other websites, applications, systems, and advertisementsNo
G. Geolocation dataDevice locationNo
H. Audio, electronic, visual, thermal, olfactory, or similar informationImages and audio, video or call recordings created in connection with Our business activitiesNo
I. Professional or employment-related informationBusiness contact details in order to provide You Our Services at a business level or job title, work history, and professional qualifications if You apply for a job with UsNo
J. Education informationStudent records and directory informationNo
K. Inferences drawn from other personal informationInferences drawn from any of the collected personal information listed above to create a profile or summary about, for example, an individual’s preferences and characteristicsNo
+ +‍ + +We may also collect other personal information outside of these categories through instances where You interact with Us in person, online, or by phone or mail in the context of: + +1. Receiving help through Our customer support channels; +2. Participation in customer surveys or contests; +3. Facilitation in the delivery of Our Services and to respond to Your inquiries. + +#### How do We use and share Your personal information? + +More information about Our data collection and sharing practices can be found in this [Policy](https://kubeshop.io/privacy). + +You may contact Us by email at [frontdesk@kubeshop.io](mailto:frontdesk@kubeshop.io), or by referring to the contact details at the bottom of this document. + +If You are using an authorized agent to exercise Your right to opt out We may deny a request if the authorized agent does not submit proof that they have been validly authorized to act on Your behalf. + +#### Will Your information be shared with anyone else? + +We may disclose Your personal information with Our service providers pursuant to a written contract between Us and each service provider. Each service provider is a for-profit entity that Processes the information on Our behalf. + +We may use Your personal information for Our own business purposes, such as for undertaking internal research for technological development and demonstration. This is not considered to be "selling" of Your personal information. + +We have not disclosed or sold any personal information to third parties for a business or commercial purpose in the preceding twelve (12) months. We will not sell personal information in the future belonging to website visitors, users, and other consumers. + +### Your rights with respect to Your personal data + +#### Right to request deletion of the data — Request to delete + +You can ask for the deletion of Your personal information. If You ask Us to delete Your personal information, We will respect Your request and delete Your personal information, subject to certain exceptions provided by law, such as (but not limited to) the exercise by another consumer of his or her right to free speech, Our compliance requirements resulting from a legal obligation, or any processing that may be required to protect against illegal activities. + +#### Right to be informed — Request to know + +Depending on the circumstances, You have a right to know: + +1. Whether We collect and use Your personal information; +2. The categories of personal information that We collect; +3. The purposes for which the collected personal information is used; +4. Whether We sell Your personal information to third parties; +5. The categories of personal information that We sold or disclosed for a business purpose; +6. The categories of third parties to whom the personal information was sold or disclosed for a business purpose; +7. The business or commercial purpose for collecting or selling personal information. + +In accordance with applicable law, We are not obligated to provide or delete consumer information that is de-identified in response to a consumer request or to re-identify individual data to verify a consumer request. + +#### Right to Non-Discrimination for the Exercise of a Consumer’s Privacy Rights + +We will not discriminate against You if You exercise Your privacy rights. + +#### Verification process + +Upon receiving Your request, We will need to verify Your identity to determine You are the same person about whom We have the information in Our system. These verification efforts require Us to ask You to provide information so that We can match it with information You have previously provided Us. For instance, depending on the type of request You submit, We may ask You to provide certain information so that we can match the information You provide with the information We already have on file, or We may contact You through a communication method (e.g., phone or email) that You have previously provided to Us. We may also use other verification methods as the circumstances dictate. + +We will only use personal information provided in Your request to verify Your identity or authority to make the request. To the extent possible, We will avoid requesting additional information from You for the purposes of verification. However, if We cannot verify Your identity from the information already maintained by Us, We may request that You provide additional information for the purposes of verifying Your identity and for security or fraud-prevention purposes. We will delete such additionally provided information as soon as We finish verifying You. + +#### Other privacy rights + +You may object to the Processing of Your personal information. + +You may request correction of Your personal data if it is incorrect or no longer relevant, or ask to restrict the Processing of the information. + +You can designate an authorized agent to make a request under the CCPA on Your behalf. We may deny a request from an authorized agent that does not submit proof that they have been validly authorized to act on Your behalf in accordance with the CCPA. + +You may request to opt out from future selling of Your personal information to third parties. Upon receiving an opt-out request, We will act upon the request as soon as feasibly possible, but no later than fifteen (15) days from the date of the request submission. + +To exercise these rights, You can contact Us by email at [frontdesk@kubeshop.io](mailto:frontdesk@kubeshop.io), or by referring to the contact details at the bottom of this document. If You have a complaint about how We handle Your data, We would like to hear from You. + +5\. HOW CAN YOU CONTACT US ABOUT THIS NOTICE? +--------------------------------------------- + +If You have questions or comments about this notice, You may email Us at [frontdesk@kubeshop.io](mailto:frontdesk@kubeshop.io) or by mail to: + +Kubernetes Innovation Labs LLC + +20 Brynwood Ln, Greenwich, CT 06831, USA + +Greenwich, CT 06831 + +United States + +6\. HOW CAN YOU REVIEW, UPDATE, OR DELETE THE DATA WE COLLECT FROM YOU? +----------------------------------------------------------------------- + +Based on the applicable laws of Your country, You may have the right to request access to the personal information We collect from You, change that information, or delete it. To request to review, update, or delete Your personal information, please submit a request form by contacting Us or submitting the necessary documents at [https://github.com/kubeshop/botkube/security/policy](https://github.com/kubeshop/botkube/security/policy). + +7\. INCORPORATION OF KUBESHOP PRIVACY POLICY BY REFERENCE +--------------------------------------------------------- + +By using the Services, You acknowledge (1) the Kubeshop Privacy Policy, and (2) this Policy. The Kubeshop Privacy Policy can be reviewed at [https://kubeshop.io/privacy](https://kubeshop.io/privacy). + +Together, these documents are referred to collectively as the “Policies” or “Policies.” You must at all times abide by the Policies in order to continue using the Services. + +Other supplemental policies or documents aside from the aforementioned Kubeshop Privacy Policy that may be posted on the Services from time to time are hereby expressly incorporated herein by reference. We reserve the right, in Our sole discretion, to make changes or modifications to these Policies from time to time. We will alert You about any changes by updating the “Last Updated” date of the Policies, and You waive any right to receive specific notice of each such change. Please ensure that You check the applicable Policies every time You use Our Services so that You understand which Policies apply. You will be deemed to have been made aware of the changes in any revised Policies by Your continued use of the Services after the date such revised Policies are posted. + +Data Retention Policy +--------------------- + +### Purpose + +At Botkube, we understand the importance of privacy and data protection. This policy outlines how we handle data deletion requests, and the steps we take to ensure that personal data is erased securely. + +### Policy + +For Users + +User data is retained for as long as the account is in active status. Data enters an “archived” state when the account is voluntarily closed. Archived account data will be retained indefinitely. Users that wish to voluntarily close their account should download their data manually or via the API prior to closing their account. + +If a user account is involuntarily suspended, there will be features which the account will be inaccessible but can be accessed if the customer meets their payment obligations and resolves any terms of service violations. + +If a user wishes to manually backup their data in a suspended account, then they must ensure that their account is brought back to good standing so that the user interface will be available for their use. After three billing cycles the suspended account will be closed and the data will enter the “archived” state. + +### Verification + +Before we can delete any personal data, we will verify the identity of the individual making the request. We will only accept requests from the individual who owns the data, or from someone who is authorized to act on their behalf. + +### Data Deletion Process + +Once we have verified the identity of the individual making the request, we will delete all personal data associated with their account. This includes any data stored in our systems, backups, and archives. We will also notify any third-party services that we have shared the individual’s data with, and request that they delete the data as well. + +### Data Retention + +We will only retain personal data for as long as necessary to fulfill the purposes for which it was collected or to be in compliance with local, state, and federal regulations. Once the data is no longer needed or is not required to be stored under an applicable regulation, we will securely delete it from our systems. + +### Security + +We take data security seriously, and have implemented appropriate technical and organizational measures to protect personal data from unauthorized access, loss, or theft. All personal data will be securely deleted using industry-standard data wiping techniques. + +### Conclusion + +At Botkube, we are committed to protecting the privacy and personal data of our users. We will ensure that all data deletion requests are handled in a timely and secure manner, and that personal data is deleted in accordance with applicable data protection regulations. + +‍ diff --git a/hack/assistant-setup/content/botkube.io__professional-services-partner.md b/hack/assistant-setup/content/botkube.io__professional-services-partner.md new file mode 100644 index 0000000..da439b6 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__professional-services-partner.md @@ -0,0 +1,34 @@ +Title: Professional Services for Botkube + +URL Source: https://botkube.io/professional-services-partner + +Markdown Content: +[![Image 1: Kusk Kubernetes](https://assets-global.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](https://botkube.io/) + +### Botkube Recommends + +InfraCloud as our Preferred Professional Services Partner +--------------------------------------------------------- + +![Image 2: a blue cube on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/63381eaca918c27a5f1fe111_botkube-wg-pers.png)![Image 3: a speech bubble with the words need help?](https://assets-global.website-files.com/633705de6adaa38599d8e258/633819299841f90bb49b7ba5_kusk-person-bubble.svg) + +Debug and monitor your clusters using Botkube in an interactive way. Want to use it with your own messaging tool? Or want some customizations? Reach out to our experts to get started. + +BotKube can monitor any Kubernetes resource. Our experts can create a customized monitoring solution to only track changes using BotKube that are important to you. + +Want to integrate BotKube with a tool that isn't listed here? We can help you with customized integrations to deliver notifications to the app you use. + +BotKube can monitor any Kubernetes resource. Our experts can create a customized monitoring solution to only track changes using BotKube that are important to you. + +We understand that each deployment is different and hence our experts can help you construct filters & checks specific to your setup. + +Get in touch for Professional Services Support +---------------------------------------------- + +![Image 4: the logo for infracacloud](https://assets-global.website-files.com/633705de6adaa38599d8e258/63484ada6acf164e4c5ac930_infracloud-logo.svg) + +InfraCloud unleashes growth by helping companies adopt cloud-native technologies with their products and services. + +Your extended team for all things related to Cloud-Native & DevOps + +Botkube recommends InfraCloud as our preferred professional services partner. They have modernized infrastructure of some of the world’s leading organizations—from retail to real-time ad bidding platforms. diff --git a/hack/assistant-setup/content/botkube.io__slack-app.md b/hack/assistant-setup/content/botkube.io__slack-app.md new file mode 100644 index 0000000..23e099d --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__slack-app.md @@ -0,0 +1,116 @@ +Title: Cloud Slack App + +URL Source: https://botkube.io/slack-app + +Markdown Content: +[![Image 1: Kusk Kubernetes](https://assets-global.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](https://botkube.io/) + +![Image 2: a blue bird is flying over a mountain in a video game](https://assets-global.website-files.com/633705de6adaa38599d8e258/64e8e512edbae7755379b2fe_bk-slack-logo-hero-bg.webp) + +![Image 3: slack logo on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/6500bcab958c3be57a5523a5_slack-logo-color.svg) + +#### Cloud App for Slack + +The Botkube Cloud App for Slack uses Botkube Cloud services to manage channels and route executor commands. This allows multi-cluster support without a need to create a dedicated Slack application for each cluster. Events and alerts are sent directly from your cluster to your Slack workspace for reliable, fast notifications. + +Installing Botkube in Slack +--------------------------- + +1. + +[![Image 4: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/6500c008d898dab566f70d85_install-1.svg)![Image5:abluecircleonablackbackground](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) + +Go to Botkube Cloud
[Web App](https://app.botkube.io/) + +and click
on New Instance button. + +2. + +[![Image 6: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/6500c1702080a8b5a26efb6d_install-2.svg)![Image7:abluecircleonablackbackground](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) + +Fill in the Instance Display Name and click Next button. + +3. + +[![Image 8: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/6500c17b5527fae1a4c5bc57_install-3.svg)![Image9:abluecircleonablackbackground](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) + +Click Add platform dropdown, and select Slack option. + +4. + +[![Image 10: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/6500c191387a00b2b474e1b3_install-5.svg)![Image11:abluecircleonablackbackground](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) + +Click Add to Slack button to add Cloud Slack integration to your Slack workspace. + +5. + +[![Image 12: a white square on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/6500c4fab232b58125653577_install-6.svg)![Image13:abluecircleonablackbackground](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) + +Click Allow to grant permission for Botkube Cloud App for Slack to access your Slack workspace. + +6. + +[![Image 14: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/6500c505324fd1b24eeb1ab6_install-7.svg)![Image15:abluecircleonablackbackground](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) + +Provide the details as described follows and click Next button. + +7. + +[![Image 16: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/6500c510d21725cf9c03a0c9_install-8.svg)![Image17:abluecircleonablackbackground](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) + +Add plugins you want 
to enable in your Botkube instance and click Next button. + +8. + +[![Image 18: a white square on a white background](https://assets-global.website-files.com/633705de6adaa38599d8e258/6500c51cd898dab566fcb743_install-9.svg)![Image19:abluecircleonablackbackground](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) + +Include optional default aliases and default actions and click Create button to create Botkube Cloud instance. + +9. + +[![Image 20: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/6500c528a593ecc0b3dcfa98_install-10.svg)![Image21:abluecircleonablackbackground](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) + +Follow the instructions 
in the summary page to deploy Botkube into your environment. + +#### Prerequisites + +A Botkube Cloud account with active subscription is required. + +You can try out the Botkube Cloud App for Slack for free by creating an account in the [Botkube Cloud app](https://app.botkube.io/) and starting a free trial. + +NOTE: If you downgrade a paid subscription to the Free plan, you will not be able to execute Botkube commands from Slack. However, you will still receive notifications from your clusters. + +Steps to get started with Botkube +--------------------------------- + +1. + +You can start using Botkube Cloud App for Slack by typing @Botkube cloud help in the Slack channel you configured in one of the previous steps. + +[![Image 22: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/650b312e6823f3bf4930026a_step1-cloud-help_pr.svg)![Image23:abluecircleonablackbackground](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) + +2. + +You can list all the Botkube Cloud instances by typing @Botkube cloud list instances in the Slack channel or click the button List connected instances in the help command response. Besides the instance name, ID, and status in the list response, you can also click the Get details button to go to instance details on Botkube Cloud Dashboard. + +[![Image 24: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/650b321b09f2a16899841a41_step2-cloud-instance_pr.svg)![Image25:abluecircleonablackbackground](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) + +3. + +Once a Botkube command is executed, it will be handled on target Kubernetes cluster specified with \--cluster-name flag. However, this is an optional flag, where if you have not specified it, Botkube Cloud will select the first instance. However, you can also achieve setting default instance with command @Botkube cloud set default-instance {instance-id}. + +After this point, all of your commands will be executed on the default instance. Moreover, if you want to execute a command on all the target clusters, you can use \--all-clusters flag. + +[![Image 26: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/650b3312250c2fba277c8242_step3-cloud-set-default_pr.svg)![Image27:abluecircleonablackbackground](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#)[![Image 28: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/650b338d0d105309da63525e_step3-5-cloud-command-all-clusters_pr.svg)![Image29:abluecircleonablackbackground](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) + +4. + +1\. Go to Botkube Cloud instances page and click Manage button of the instance you want to remove. + +[![Image 30: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/650b3581864c2eaa967f7417_step4-cloud_list_manage_pr.svg)![Image31:abluecircleonablackbackground](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) + +5. + +2\. Click Delete instance button, type instance name in the popup and click Delete instance. + +[![Image 32: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/650b35df6390bea044f2eb3b_step5-cloud_delete_pr.svg)![Image33:abluecircleonablackbackground](https://assets-global.website-files.com/633705de6adaa38599d8e258/650214f73dc8a48ae4075f8f_magnifier.svg)](#) diff --git a/hack/assistant-setup/content/botkube.io__solutions__enabling-developers.md b/hack/assistant-setup/content/botkube.io__solutions__enabling-developers.md new file mode 100644 index 0000000..76a3846 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__solutions__enabling-developers.md @@ -0,0 +1,51 @@ +Title: Enabling Developers | Botkube + +URL Source: https://botkube.io/solutions/enabling-developers + +Markdown Content: +[![Image 1: Kusk Kubernetes](https://assets-global.website-files.com/633705de6adaa38599d8e258/6338148fa3f8a509639804fa_botkube-logo.svg)](https://botkube.io/) + +![Image 2: a blue parrot with a square on its head](https://assets-global.website-files.com/633705de6adaa38599d8e258/659eb8b9715d644cd037118c_Bird-with-fire-Botkube.png) + +![Image 3: Monitoring Kubernetes notifications in chat platforms](https://assets-global.website-files.com/633705de6adaa38599d8e258/642da9080827c967a39b0043_automation_new.gif) + +### Efficient Application Troubleshooting + +Botkube gives developers access, context, and support that helps them streamline the application troubleshooting process directly in their preferred communication platforms. + +Quick access to troubleshooting not only reduces downtime of applications but also creates faster resolution of issues. Developers gain the necessary insights and resources to independently address problems, without having to rely on busy operations teams. Developers want to write code, not learn new Kubernetes commands. Botkube’s interactive command creation gives them the power to get what they need without learning complex CLIs. + +### Increased Developer Productivity + +Providing developers with tools to monitor and troubleshoot applications directly from their communication platform, like Microsoft Teams or Slack, enhances their productivity. + +With Botkube, developers can quickly address issues without reliance on operations teams, streamlining the troubleshooting process and allowing developers to focus on coding and improving applications. + +### Time Savings for DevOps Teams + +Botkube's capabilities alleviate the burden on operations teams by empowering developers to handle application troubleshooting tasks themselves. + +Rather than responding to requests for logs and other help, DevOps teams can use that extra time to ensure the overall reliability and performance of the infrastructure. Ops teams can focus on strategic tasks and proactively manage the health of the IT environment, while Devs can self-service their requests and get the information they need. + +![Image 4: a blue bird is flying over a fire](https://assets-global.website-files.com/633705de6adaa38599d8e258/659eb989e788cf2f162b2c5f_Solutions-Botkube.webp) + +User Quotes +----------- + +![Image 5: automating tests staging cluster](https://assets-global.website-files.com/633705de6adaa38599d8e258/6387ccf6ff66597d5f414815_botkube-quote-sign.svg) + +“Perfect! When i have the repo i will write here, thank you very much for the support! I really like this project!” + +Slide 2 of 2. + +![Image 6: automating tests staging cluster](https://assets-global.website-files.com/633705de6adaa38599d8e258/6387ccf6ff66597d5f414815_botkube-quote-sign.svg) + +The advantages of BotKube are its versatility and efficiency in managing and monitoring Kubernetes clusters. It offers seamless integration with various messaging platforms and provides real-time alerts and notifications. Its appeal is enhanced by Its user-friendly interface, and extensive customization options + +![Image 7: three blue circles on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/6387cc6cd11dba9de0d3578f_botkube.gif) + +![Image 8: automating tests staging cluster](https://assets-global.website-files.com/633705de6adaa38599d8e258/6387ccf6ff66597d5f414815_botkube-quote-sign.svg) + +For me, monitoring health and performance of the infrastructure in realtime was done with the help of Botkube. Botkube provided me security features such as unauthorized access attempts. + +![Image 9: three blue circles on a black background](https://assets-global.website-files.com/633705de6adaa38599d8e258/6387cc6cd11dba9de0d3578f_botkube.gif) diff --git a/hack/assistant-setup/content/botkube.io__support.md b/hack/assistant-setup/content/botkube.io__support.md new file mode 100644 index 0000000..d4f55af --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__support.md @@ -0,0 +1,53 @@ +Title: Support + +URL Source: https://botkube.io/support + +Markdown Content: +![Image 1: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/65e74ffd2f747033e1de81d8_bk_support-hero-img_web.svg) + +![Image 2: Monitoring Kubernetes notifications in chat platforms](https://assets-global.website-files.com/633705de6adaa38599d8e258/642da9080827c967a39b0043_automation_new.gif) + +### Need help with Botkube? + +We're happy to assist! + +The quickest way to receive help regarding onboarding, configuration issues,  or anything else is directly through our web app. Once logged in to [Botkube's Dashboard](http://app.botkube.io/) + +, click on the chat icon in the lower right side of the screen. Our support team will be on the way to help![‍](https://join.botkube.io/) + +![Image 3: a green, orange, and yellow striped background](https://assets-global.website-files.com/633705de6adaa38599d8e258/64de5389c7d816d1f6530501_botkube-status-icon.svg) + +Check the status of Botkube [here.](https://status.botkube.io/) + +FAQ +--- + +Can I integrate Botkube with other tools I use? + +![Image 4: an orange circle with an arrow pointing to the right](https://assets-global.website-files.com/633705de6adaa38599d8e258/65e7599d324d961f8d94065b_bk-faq-arrow%201.svg) + +Yes! Botkube's plugin system allows for seamless integration with cloud-native, GitOps, DevOps, and even LLM tools like ChatGPT. Popular integrations include Flux CD, Helm, and more. + +Can I customize the notifications I receive from Botkube? + +![Image 5: an orange circle with an arrow pointing to the right](https://assets-global.website-files.com/633705de6adaa38599d8e258/65e7599d324d961f8d94065b_bk-faq-arrow%201.svg) + +Absolutely! You can create custom notification scripts, filter alerts by severity, and choose which channels receive specific notifications. + +What messaging platforms does Botkube work with? + +![Image 6: an orange circle with an arrow pointing to the right](https://assets-global.website-files.com/633705de6adaa38599d8e258/65e7599d324d961f8d94065b_bk-faq-arrow%201.svg) + +Botkube works with Slack, Microsoft Teams, Discord, and Mattermost! It also supports custom setups using Elasticsearch or Webhooks. + +How do I install Botkube? (Link to installation guide) + +![Image 7: an orange circle with an arrow pointing to the right](https://assets-global.website-files.com/633705de6adaa38599d8e258/65e7599d324d961f8d94065b_bk-faq-arrow%201.svg) + +1\. Choose your messaging platform. 2. Install the Botkube CLI and follow the prompts to connect it to your cluster. 3. Check the installation guide: link to docs to get started + +What is Botkube and what does it do? + +![Image 8: an orange circle with an arrow pointing to the right](https://assets-global.website-files.com/633705de6adaa38599d8e258/65e7599d324d961f8d94065b_bk-faq-arrow%201.svg) + +Botkube is a Kubernetes monitoring and management tool that lives in your messaging platform (Slack, Teams, etc.). It helps you troubleshoot issues, understand cluster health, and apply Kubernetes best practices. diff --git a/hack/assistant-setup/content/botkube.io__tags__ai.md b/hack/assistant-setup/content/botkube.io__tags__ai.md new file mode 100644 index 0000000..f1f6247 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__tags__ai.md @@ -0,0 +1,44 @@ +Title: AI | Botkube tags + +URL Source: https://botkube.io/tags/ai + +Markdown Content: +Botkube blog +------------ + +Thank you! Your submission has been received! + +Oops! Something went wrong while submitting the form. + +### Open-source tools to help you with Kubernetes-native development & testing + +Whether you are a Developer, a Tester, or a DevOps, learn how to streamline your Kubernetes-based projects with Kubeshop tools. + +Botkube articles +---------------- + +Thank you! Your submission has been received! + +Oops! Something went wrong while submitting the form. + +Tag: +---- + +[![Image 1: the logo for kubeshop](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) + +Botkube is made by Kubeshop +— a first of its kind open source accelerator focused on the cloud native ecosystem + +At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. + +[![Image 2: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) + +#### Get to Know Kubeshop + +#### Botkube + +Copyright © 2022 Kubeshop, LLC. All rights reserved. + +Copyright © 2024 Kubeshop, LLC. All rights reserved. + +#### Explore Kubeshop Projects diff --git a/hack/assistant-setup/content/botkube.io__tags__aiops.md b/hack/assistant-setup/content/botkube.io__tags__aiops.md new file mode 100644 index 0000000..8c900e9 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__tags__aiops.md @@ -0,0 +1,44 @@ +Title: AIOps | Botkube tags + +URL Source: https://botkube.io/tags/aiops + +Markdown Content: +Botkube blog +------------ + +Thank you! Your submission has been received! + +Oops! Something went wrong while submitting the form. + +### Open-source tools to help you with Kubernetes-native development & testing + +Whether you are a Developer, a Tester, or a DevOps, learn how to streamline your Kubernetes-based projects with Kubeshop tools. + +Botkube articles +---------------- + +Thank you! Your submission has been received! + +Oops! Something went wrong while submitting the form. + +Tag: +---- + +[![Image 1: the logo for kubeshop](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) + +Botkube is made by Kubeshop +— a first of its kind open source accelerator focused on the cloud native ecosystem + +At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. + +[![Image 2: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) + +#### Get to Know Kubeshop + +#### Botkube + +Copyright © 2022 Kubeshop, LLC. All rights reserved. + +Copyright © 2024 Kubeshop, LLC. All rights reserved. + +#### Explore Kubeshop Projects diff --git a/hack/assistant-setup/content/botkube.io__tags__argo-cd.md b/hack/assistant-setup/content/botkube.io__tags__argo-cd.md new file mode 100644 index 0000000..6b90705 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__tags__argo-cd.md @@ -0,0 +1,44 @@ +Title: Argo CD | Botkube tags + +URL Source: https://botkube.io/tags/argo-cd + +Markdown Content: +Botkube blog +------------ + +Thank you! Your submission has been received! + +Oops! Something went wrong while submitting the form. + +### Open-source tools to help you with Kubernetes-native development & testing + +Whether you are a Developer, a Tester, or a DevOps, learn how to streamline your Kubernetes-based projects with Kubeshop tools. + +Botkube articles +---------------- + +Thank you! Your submission has been received! + +Oops! Something went wrong while submitting the form. + +Tag: +---- + +[![Image 1: the logo for kubeshop](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) + +Botkube is made by Kubeshop +— a first of its kind open source accelerator focused on the cloud native ecosystem + +At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. + +[![Image 2: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) + +#### Get to Know Kubeshop + +#### Botkube + +Copyright © 2022 Kubeshop, LLC. All rights reserved. + +Copyright © 2024 Kubeshop, LLC. All rights reserved. + +#### Explore Kubeshop Projects diff --git a/hack/assistant-setup/content/botkube.io__tags__botkube-cloud.md b/hack/assistant-setup/content/botkube.io__tags__botkube-cloud.md new file mode 100644 index 0000000..46b6535 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__tags__botkube-cloud.md @@ -0,0 +1,44 @@ +Title: Botkube Cloud | Botkube tags + +URL Source: https://botkube.io/tags/botkube-cloud + +Markdown Content: +Botkube blog +------------ + +Thank you! Your submission has been received! + +Oops! Something went wrong while submitting the form. + +### Open-source tools to help you with Kubernetes-native development & testing + +Whether you are a Developer, a Tester, or a DevOps, learn how to streamline your Kubernetes-based projects with Kubeshop tools. + +Botkube articles +---------------- + +Thank you! Your submission has been received! + +Oops! Something went wrong while submitting the form. + +Tag: +---- + +[![Image 1: the logo for kubeshop](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) + +Botkube is made by Kubeshop +— a first of its kind open source accelerator focused on the cloud native ecosystem + +At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. + +[![Image 2: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) + +#### Get to Know Kubeshop + +#### Botkube + +Copyright © 2022 Kubeshop, LLC. All rights reserved. + +Copyright © 2024 Kubeshop, LLC. All rights reserved. + +#### Explore Kubeshop Projects diff --git a/hack/assistant-setup/content/botkube.io__tags__chatops.md b/hack/assistant-setup/content/botkube.io__tags__chatops.md new file mode 100644 index 0000000..8098c3f --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__tags__chatops.md @@ -0,0 +1,44 @@ +Title: ChatOps | Botkube tags + +URL Source: https://botkube.io/tags/chatops + +Markdown Content: +Botkube blog +------------ + +Thank you! Your submission has been received! + +Oops! Something went wrong while submitting the form. + +### Open-source tools to help you with Kubernetes-native development & testing + +Whether you are a Developer, a Tester, or a DevOps, learn how to streamline your Kubernetes-based projects with Kubeshop tools. + +Botkube articles +---------------- + +Thank you! Your submission has been received! + +Oops! Something went wrong while submitting the form. + +Tag: +---- + +[![Image 1: the logo for kubeshop](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) + +Botkube is made by Kubeshop +— a first of its kind open source accelerator focused on the cloud native ecosystem + +At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. + +[![Image 2: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) + +#### Get to Know Kubeshop + +#### Botkube + +Copyright © 2022 Kubeshop, LLC. All rights reserved. + +Copyright © 2024 Kubeshop, LLC. All rights reserved. + +#### Explore Kubeshop Projects diff --git a/hack/assistant-setup/content/botkube.io__tags__development.md b/hack/assistant-setup/content/botkube.io__tags__development.md new file mode 100644 index 0000000..3223f59 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__tags__development.md @@ -0,0 +1,44 @@ +Title: Development | Botkube tags + +URL Source: https://botkube.io/tags/development + +Markdown Content: +Botkube blog +------------ + +Thank you! Your submission has been received! + +Oops! Something went wrong while submitting the form. + +### Open-source tools to help you with Kubernetes-native development & testing + +Whether you are a Developer, a Tester, or a DevOps, learn how to streamline your Kubernetes-based projects with Kubeshop tools. + +Botkube articles +---------------- + +Thank you! Your submission has been received! + +Oops! Something went wrong while submitting the form. + +Tag: +---- + +[![Image 1: the logo for kubeshop](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) + +Botkube is made by Kubeshop +— a first of its kind open source accelerator focused on the cloud native ecosystem + +At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. + +[![Image 2: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) + +#### Get to Know Kubeshop + +#### Botkube + +Copyright © 2022 Kubeshop, LLC. All rights reserved. + +Copyright © 2024 Kubeshop, LLC. All rights reserved. + +#### Explore Kubeshop Projects diff --git a/hack/assistant-setup/content/botkube.io__tags__gitops.md b/hack/assistant-setup/content/botkube.io__tags__gitops.md new file mode 100644 index 0000000..dd8c24e --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__tags__gitops.md @@ -0,0 +1,44 @@ +Title: Gitops | Botkube tags + +URL Source: https://botkube.io/tags/gitops + +Markdown Content: +Botkube blog +------------ + +Thank you! Your submission has been received! + +Oops! Something went wrong while submitting the form. + +### Open-source tools to help you with Kubernetes-native development & testing + +Whether you are a Developer, a Tester, or a DevOps, learn how to streamline your Kubernetes-based projects with Kubeshop tools. + +Botkube articles +---------------- + +Thank you! Your submission has been received! + +Oops! Something went wrong while submitting the form. + +Tag: +---- + +[![Image 1: the logo for kubeshop](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) + +Botkube is made by Kubeshop +— a first of its kind open source accelerator focused on the cloud native ecosystem + +At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. + +[![Image 2: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) + +#### Get to Know Kubeshop + +#### Botkube + +Copyright © 2022 Kubeshop, LLC. All rights reserved. + +Copyright © 2024 Kubeshop, LLC. All rights reserved. + +#### Explore Kubeshop Projects diff --git a/hack/assistant-setup/content/botkube.io__tags__helm.md b/hack/assistant-setup/content/botkube.io__tags__helm.md new file mode 100644 index 0000000..d16c3f4 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__tags__helm.md @@ -0,0 +1,8 @@ +Title: Helm | Botkube tags + +URL Source: https://botkube.io/tags/helm + +Markdown Content: +### Open-source tools to help you with Kubernetes-native development & testing + +Whether you are a Developer, a Tester, or a DevOps, learn how to streamline your Kubernetes-based projects with Kubeshop tools. diff --git a/hack/assistant-setup/content/botkube.io__tags__kubecon.md b/hack/assistant-setup/content/botkube.io__tags__kubecon.md new file mode 100644 index 0000000..dbb5e5b --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__tags__kubecon.md @@ -0,0 +1,44 @@ +Title: Kubecon | Botkube tags + +URL Source: https://botkube.io/tags/kubecon + +Markdown Content: +Botkube blog +------------ + +Thank you! Your submission has been received! + +Oops! Something went wrong while submitting the form. + +### Open-source tools to help you with Kubernetes-native development & testing + +Whether you are a Developer, a Tester, or a DevOps, learn how to streamline your Kubernetes-based projects with Kubeshop tools. + +Botkube articles +---------------- + +Thank you! Your submission has been received! + +Oops! Something went wrong while submitting the form. + +Tag: +---- + +[![Image 1: the logo for kubeshop](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) + +Botkube is made by Kubeshop +— a first of its kind open source accelerator focused on the cloud native ecosystem + +At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. + +[![Image 2: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) + +#### Get to Know Kubeshop + +#### Botkube + +Copyright © 2022 Kubeshop, LLC. All rights reserved. + +Copyright © 2024 Kubeshop, LLC. All rights reserved. + +#### Explore Kubeshop Projects diff --git a/hack/assistant-setup/content/botkube.io__tags__kubernetes.md b/hack/assistant-setup/content/botkube.io__tags__kubernetes.md new file mode 100644 index 0000000..e75d7d7 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__tags__kubernetes.md @@ -0,0 +1,44 @@ +Title: Kubernetes | Botkube tags + +URL Source: https://botkube.io/tags/kubernetes + +Markdown Content: +Botkube blog +------------ + +Thank you! Your submission has been received! + +Oops! Something went wrong while submitting the form. + +### Open-source tools to help you with Kubernetes-native development & testing + +Whether you are a Developer, a Tester, or a DevOps, learn how to streamline your Kubernetes-based projects with Kubeshop tools. + +Botkube articles +---------------- + +Thank you! Your submission has been received! + +Oops! Something went wrong while submitting the form. + +Tag: +---- + +[![Image 1: the logo for kubeshop](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) + +Botkube is made by Kubeshop +— a first of its kind open source accelerator focused on the cloud native ecosystem + +At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. + +[![Image 2: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) + +#### Get to Know Kubeshop + +#### Botkube + +Copyright © 2022 Kubeshop, LLC. All rights reserved. + +Copyright © 2024 Kubeshop, LLC. All rights reserved. + +#### Explore Kubeshop Projects diff --git a/hack/assistant-setup/content/botkube.io__tags__microsoft-teams.md b/hack/assistant-setup/content/botkube.io__tags__microsoft-teams.md new file mode 100644 index 0000000..b7b23b6 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__tags__microsoft-teams.md @@ -0,0 +1,44 @@ +Title: Microsoft Teams | Botkube tags + +URL Source: https://botkube.io/tags/microsoft-teams + +Markdown Content: +Botkube blog +------------ + +Thank you! Your submission has been received! + +Oops! Something went wrong while submitting the form. + +### Open-source tools to help you with Kubernetes-native development & testing + +Whether you are a Developer, a Tester, or a DevOps, learn how to streamline your Kubernetes-based projects with Kubeshop tools. + +Botkube articles +---------------- + +Thank you! Your submission has been received! + +Oops! Something went wrong while submitting the form. + +Tag: +---- + +[![Image 1: the logo for kubeshop](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) + +Botkube is made by Kubeshop +— a first of its kind open source accelerator focused on the cloud native ecosystem + +At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. + +[![Image 2: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) + +#### Get to Know Kubeshop + +#### Botkube + +Copyright © 2022 Kubeshop, LLC. All rights reserved. + +Copyright © 2024 Kubeshop, LLC. All rights reserved. + +#### Explore Kubeshop Projects diff --git a/hack/assistant-setup/content/botkube.io__tags__monitoring.md b/hack/assistant-setup/content/botkube.io__tags__monitoring.md new file mode 100644 index 0000000..83ebb99 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__tags__monitoring.md @@ -0,0 +1,44 @@ +Title: Monitoring | Botkube tags + +URL Source: https://botkube.io/tags/monitoring + +Markdown Content: +Botkube blog +------------ + +Thank you! Your submission has been received! + +Oops! Something went wrong while submitting the form. + +### Open-source tools to help you with Kubernetes-native development & testing + +Whether you are a Developer, a Tester, or a DevOps, learn how to streamline your Kubernetes-based projects with Kubeshop tools. + +Botkube articles +---------------- + +Thank you! Your submission has been received! + +Oops! Something went wrong while submitting the form. + +Tag: +---- + +[![Image 1: the logo for kubeshop](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) + +Botkube is made by Kubeshop +— a first of its kind open source accelerator focused on the cloud native ecosystem + +At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. + +[![Image 2: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) + +#### Get to Know Kubeshop + +#### Botkube + +Copyright © 2022 Kubeshop, LLC. All rights reserved. + +Copyright © 2024 Kubeshop, LLC. All rights reserved. + +#### Explore Kubeshop Projects diff --git a/hack/assistant-setup/content/botkube.io__tags__newsletter.md b/hack/assistant-setup/content/botkube.io__tags__newsletter.md new file mode 100644 index 0000000..57ee6e0 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__tags__newsletter.md @@ -0,0 +1,8 @@ +Title: Newsletter | Botkube tags + +URL Source: https://botkube.io/tags/newsletter + +Markdown Content: +### Open-source tools to help you with Kubernetes-native development & testing + +Whether you are a Developer, a Tester, or a DevOps, learn how to streamline your Kubernetes-based projects with Kubeshop tools. diff --git a/hack/assistant-setup/content/botkube.io__tags__release.md b/hack/assistant-setup/content/botkube.io__tags__release.md new file mode 100644 index 0000000..dc8271a --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__tags__release.md @@ -0,0 +1,44 @@ +Title: release | Botkube tags + +URL Source: https://botkube.io/tags/release + +Markdown Content: +Botkube blog +------------ + +Thank you! Your submission has been received! + +Oops! Something went wrong while submitting the form. + +### Open-source tools to help you with Kubernetes-native development & testing + +Whether you are a Developer, a Tester, or a DevOps, learn how to streamline your Kubernetes-based projects with Kubeshop tools. + +Botkube articles +---------------- + +Thank you! Your submission has been received! + +Oops! Something went wrong while submitting the form. + +Tag: +---- + +[![Image 1: the logo for kubeshop](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) + +Botkube is made by Kubeshop +— a first of its kind open source accelerator focused on the cloud native ecosystem + +At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. + +[![Image 2: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) + +#### Get to Know Kubeshop + +#### Botkube + +Copyright © 2022 Kubeshop, LLC. All rights reserved. + +Copyright © 2024 Kubeshop, LLC. All rights reserved. + +#### Explore Kubeshop Projects diff --git a/hack/assistant-setup/content/botkube.io__tags__slack.md b/hack/assistant-setup/content/botkube.io__tags__slack.md new file mode 100644 index 0000000..ed3e851 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__tags__slack.md @@ -0,0 +1,44 @@ +Title: Slack | Botkube tags + +URL Source: https://botkube.io/tags/slack + +Markdown Content: +Botkube blog +------------ + +Thank you! Your submission has been received! + +Oops! Something went wrong while submitting the form. + +### Open-source tools to help you with Kubernetes-native development & testing + +Whether you are a Developer, a Tester, or a DevOps, learn how to streamline your Kubernetes-based projects with Kubeshop tools. + +Botkube articles +---------------- + +Thank you! Your submission has been received! + +Oops! Something went wrong while submitting the form. + +Tag: +---- + +[![Image 1: the logo for kubeshop](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) + +Botkube is made by Kubeshop +— a first of its kind open source accelerator focused on the cloud native ecosystem + +At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. + +[![Image 2: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) + +#### Get to Know Kubeshop + +#### Botkube + +Copyright © 2022 Kubeshop, LLC. All rights reserved. + +Copyright © 2024 Kubeshop, LLC. All rights reserved. + +#### Explore Kubeshop Projects diff --git a/hack/assistant-setup/content/botkube.io__tags__tutorial.md b/hack/assistant-setup/content/botkube.io__tags__tutorial.md new file mode 100644 index 0000000..93af997 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__tags__tutorial.md @@ -0,0 +1,44 @@ +Title: Tutorial | Botkube tags + +URL Source: https://botkube.io/tags/tutorial + +Markdown Content: +Botkube blog +------------ + +Thank you! Your submission has been received! + +Oops! Something went wrong while submitting the form. + +### Open-source tools to help you with Kubernetes-native development & testing + +Whether you are a Developer, a Tester, or a DevOps, learn how to streamline your Kubernetes-based projects with Kubeshop tools. + +Botkube articles +---------------- + +Thank you! Your submission has been received! + +Oops! Something went wrong while submitting the form. + +Tag: +---- + +[![Image 1: the logo for kubeshop](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f53a16e2f2d9_Logo-Kubeshop.svg)](https://kubeshop.io/) + +Botkube is made by Kubeshop +— a first of its kind open source accelerator focused on the cloud native ecosystem + +At Kubeshop, our mission is to build a thriving open source ecosystem and pipeline of next-generation Kubernetes products and projects. + +[![Image 2: a black and white icon of a cat in a circle](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5ad84e2f2da_%EF%82%9B.svg)](https://github.com/kubeshop)[![Image 3: a white face with two eyes on it](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f5e948e2f2dc_%EF%8E%92.svg)](https://discord.com/invite/6zupCZFQbe)[![Image 4: a white twitter logo on a black background](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f56100e2f2dd_%EF%82%99.svg)](https://twitter.com/thekubeshop)[![Image 5: a black and white image of the linked logo](https://assets-global.website-files.com/61e00b3936e571a4ea7a5a4c/6229e3e36326f57933e2f2db_%EF%82%8C.svg)](https://www.linkedin.com/company/kubeshop)[![Image 6: a black background with a plane flying in the sky](https://assets-global.website-files.com/633705de6adaa38599d8e258/639be0ef872f3147b5c8f5a4_youtube.svg)](https://www.youtube.com/@thekubeshop) + +#### Get to Know Kubeshop + +#### Botkube + +Copyright © 2022 Kubeshop, LLC. All rights reserved. + +Copyright © 2024 Kubeshop, LLC. All rights reserved. + +#### Explore Kubeshop Projects diff --git a/hack/assistant-setup/content/botkube.io__terms-and-conditions.md b/hack/assistant-setup/content/botkube.io__terms-and-conditions.md new file mode 100644 index 0000000..9300341 --- /dev/null +++ b/hack/assistant-setup/content/botkube.io__terms-and-conditions.md @@ -0,0 +1,196 @@ +Title: Terms and Conditions + +URL Source: https://botkube.io/terms-and-conditions + +Markdown Content: +### TABLE OF CONTENTS + +1. AGREEMENT TO TERMS +2. FEES AND PAYMENT +3. FREE TRIAL +4. CANCELLATION +5. SOFTWARE AND SERVICES +6. PROHIBITED ACTIVITIES +7. USER GENERATED CONTRIBUTIONS +8. CONTRIBUTION LICENSE +9. SUBMISSIONS +10. U.S. GOVERNMENT RIGHTS +11. SITE MANAGEMENT +12. INCORPORATION OF KUBESHOP TERMS AND CONDITIONS BY REFERENCE +13. MISCELLANEOUS +14. CONTACT US + +1\. AGREEMENT TO TERMS +---------------------- + +These Botkube Terms and Conditions constitute a legally binding agreement made between You, whether personally or on behalf of an entity (“You”) and Kubernetes Innovation Labs LLC, doing business as Kubeshop and as Botkube ("Kubeshop", “Botkube”, “We”, “Us”, or “Our”), each a “Party” and collectively the “Parties,” concerning Your access to and use of the [https://kubeshop.io](https://kubeshop.io/) and [https://botkube.io/](https://botkube.io/) websites as well as any other websites, domains, sub-domains, application programming interfaces (“APIs”), bots, frameworks, development environments, templates, documentation, configurations, mobile websites, or mobile applications related, linked, or otherwise connected thereto (collectively, the “Services”). + +2\. FEES AND PAYMENT +-------------------- + +You may be required, at Our sole discretion, to purchase or pay a fee to access some or all of Our Services. You agree to provide current, complete, and accurate purchase and account information for all purchases made via the Services. You further agree to promptly update account and payment information, including email address, payment method, and payment card expiration date, so that We can complete Your transactions and contact You as needed. We bill You through an online billing account for purchases made via the Services. Sales tax will be added to the price of purchases as deemed required by Us. We may change prices at any time. All payments shall be in U.S. dollars. + +We accept the following forms of payment: + +1. Visa +2. Mastercard +3. American Express +4. Discover +5. PayPal + +You agree to pay all charges or fees at the prices then in effect for Your purchases, and You authorize Us to charge Your chosen payment provider for any such amounts upon making Your purchase. + +If Your purchase is subject to recurring charges, then You consent to Our charging Your payment method on a recurring basis without requiring Your prior approval for each recurring charge, until You notify Us of Your cancellation. + +We reserve the right to correct any errors or mistakes in pricing, even if We have already requested or received payment. We also reserve the right to refuse any order placed through the Services. + +3\. FREE TRIAL +-------------- + +We may, at Our sole discretion, offer a free trial to new users who register with the Services. Users may, at Our sole discretion, be able to return to being able to use some version of the Services at the end of the free trial. + +4\. CANCELLATION +---------------- + +All purchases are non-refundable. You can cancel Your subscription at any time by logging into Your account or contacting Us using the contact + +information provided below. Your cancellation will take effect at the end of the current paid term. + +If You are unsatisfied with Our services, please email Us at: [frontdesk@kubeshop.io](mailto:frontdesk@kubeshop.io). + +5\. SOFTWARE AND SERVICES +------------------------- + +We may include software for use in connection with Our Services. If such software is accompanied by a separate end user license agreement (“EULA”), the terms of the EULA will govern Your use of the software. If such software is not accompanied by a EULA, then We grant to You a non-exclusive, revocable, personal, and non-transferable license to use such software solely in connection with Our Services and in accordance with these Terms and Conditions. Any Software and any related documentation are provided “as is” without warranty of any kind, either express or implied, including, without limitation, the implied warranties of merchantability, fitness for a particular purpose, or non-infringement. You accept any and all risk arising out of use or performance of any Software. You may not reproduce or redistribute any software except in accordance with the EULA or these Terms and Conditions. + +OPEN SOURCE SOFTWARE (OSS) USER ACKNOWLEDGMENT + +If You are using an Open-Source version of the product and obtain support or assistance from Us, and in the process, have identified Yourself as being affiliated with a particular company or organization, You hereby grant Us the right to publicly acknowledge Your company or organization. This acknowledgment may include, but is not limited to, displaying Your company or organization’s logo, name, or other identifying information on Our website, marketing materials, or other public-facing media. If You do not wish for Your company or organization to be acknowledged as a user of Our Services, You may reach out to Us at frontdesk@kubeshop.io to request the removal of the acknowledgment. We will remove Your company’s name and any related identifying information within 72 business hours of receiving Your request. + +6\. PROHIBITED ACTIVITIES +------------------------- + +You may not access or use the Services for any purpose other than that for which We make the Services available. The Services may not be used in connection with any commercial endeavors except those that are specifically endorsed or approved by Us. + +As a user of the Services, You agree not to: + +1. Systematically retrieve data or other content from the Services to create or compile, directly or indirectly, a collection, compilation, database, or directory without written permission from Us. +2. Trick, defraud, or mislead Us and other users, especially in any attempt to learn sensitive account information such as user passwords. +3. Circumvent, disable, or otherwise interfere with security-related features of the Services, including features that prevent or restrict the use or copying of any Content or enforce limitations on the use of the Services and/or the Content contained therein. +4. Disparage, tarnish, or otherwise harm, in Our opinion, Us and/or the Services. +5. Use any information obtained from the Services in order to harass, abuse, or harm another person. +6. Make improper use of Our support services or submit false reports of abuse or misconduct. +7. Use the Services in a manner inconsistent with any applicable laws or regulations. +8. Engage in unauthorized framing of or linking to the Services. +9. Upload or transmit (or attempt to upload or to transmit) malicious content, malware, viruses, Trojan horses, or other material, including excessive use of capital letters and spamming (continuous posting of repetitive text), that interferes with any party’s uninterrupted use and enjoyment of the Services or modifies, impairs, disrupts, alters, or interferes with the use, features, functions, operation, or maintenance of the Services. +10. Engage in any automated use of the system, such as using scripts to send comments or messages, or using any data mining, robots, or similar data gathering and extraction tools. +11. Delete the copyright or other proprietary rights notice from any Content. +12. Attempt to impersonate another user or person or use the username of another user. +13. Upload or transmit (or attempt to upload or to transmit) any material that acts as a passive or active information collection or transmission mechanism, including without limitation, clear graphics interchange formats (“gifs”), 1×1pixels, web bugs, cookies, or other similar devices (sometimes referred to as “spyware” or “passive collection mechanisms”). +14. Interfere with, disrupt, or create an undue burden on the Services or the networks or services connected to the Services. +15. Harass, annoy, intimidate, or threaten any of Our employees or agents engaged in providing any portion of the Services to You. +16. Attempt to bypass any measures of the Services designed to prevent or restrict access to the Services, or any portion of the Services. +17. Copy or adapt the Services’ software, including but not limited to Flash, PHP, HTML, JavaScript, or other code. +18. Except as permitted by applicable law, decipher, decompile, disassemble, or reverse engineer any of the software comprising or in any way making up a part of the Services. +19. Except as may be the result of standard search engine or Internet browser usage, use, launch, develop, or distribute any automated system, including without limitation, any spider, robot, cheat utility, scraper, or offline reader that accesses the Services, or using or launching any unauthorized script or other software. +20. Use a buying agent or purchasing agent to make purchases on the Services. +21. Make any unauthorized use of the Services, including collecting usernames and/or email addresses of users by electronic or other means for the purpose offending unsolicited email, or creating user accounts by automated means rounder false pretenses. +22. Use the Services as part of any effort to compete with Us or otherwise use the Services and/or the Content for any revenue-generating endeavor or commercial enterprise without Our express written permission. + +7\. USER GENERATED CONTRIBUTIONS +-------------------------------- + +The Services do not offer users the ability to submit or post content which is publicly available to Users of the Services which are not in Your organization. We may, at Our sole discretion, provide You with the opportunity to upload, create, submit, post, display, transmit, perform, publish, distribute, or broadcast content and materials to Us or on the Services, including but not limited to text, writings, video, audio, photographs, graphics, comments, suggestions, or personal information or other material (collectively, "Contributions"). Contributions may be viewable by other users of the Services and through third-party websites. As such, any Contributions You transmit may be treated in accordance with the Services Privacy Policy and must abide by all other Terms and Conditions set forth in this Agreement. When You create or make available any Contributions, You thereby represent and warrant that: + +1. The creation, distribution, transmission, public display, or performance, and the accessing, downloading, or copying of Your Contributions do not and will not infringe the proprietary rights, including but not limited to the copyright, patent, trademark, trade secret, or moral rights of any third party. +2. You are the creator and owner of or have the necessary licenses, rights, consents, releases, and permissions to use and to authorize Us, the Services, and other users of the Services to use Your Contributions in any manner contemplated by the Services and these Terms and Conditions. +3. You have the written consent, release, and/or permission of each and every identifiable individual person in Your Contributions to use the name or likeness of each and every such identifiable individual person to enable inclusion and use of Your Contributions in any manner contemplated by the Services and these Terms and Conditions. +4. Your Contributions are not false, inaccurate, or misleading. +5. Your Contributions are not unsolicited or unauthorized advertising, promotional materials, pyramid schemes, chain letters, spam, mass mailings, or other forms of solicitation. +6. Your Contributions are not obscene, lewd, lascivious, filthy, violent, harassing, libelous, slanderous, or otherwise objectionable (as determined by Us). +7. Your Contributions do not ridicule, mock, disparage, intimidate, or abuse anyone. +8. Your Contributions are not used to harass or threaten (in the legal sense of those terms) any other person and to promote violence against a specific person or class of people. +9. Your Contributions do not violate any applicable law, regulation, or rule. +10. Your Contributions do not violate the privacy or publicity rights of any third-party. +11. Your Contributions do not violate any applicable law concerning child pornography, or otherwise intended to protect the health or well-being of minors. +12. Your Contributions do not include any offensive comments that are connected to race, national origin, gender, sexual preference, or physical handicap. +13. Your Contributions do not constitute malicious content, malware, viruses, Trojan horses, or other material that may in any way interfere with any party’s uninterrupted use and enjoyment of the Services or modifies, impairs, disrupts, alters, or interferes with the use, features, functions, operation, or maintenance of the Services. +14. Your Contributions do not otherwise violate, or link to material that violates, any provision of these Terms and Conditions, or any applicable law or regulation. + +Any use of the Services in violation of the foregoing violates these Terms and Conditions and may result in, among other things, termination or suspension of Your rights to use or access the Services. + +8\. CONTRIBUTION LICENSE +------------------------ + +You agree that We may access, store, process, and use any information and personal data that You provide following the terms of the Privacy Policy and Your choices (including settings). + +By submitting suggestions or other feedback regarding the Services, You agree that We can use and share such feedback for any purpose without compensating You. + +We do not assert any ownership over Your Contributions. You retain full ownership of all of Your Contributions and any intellectual property rights or other proprietary rights associated with Your Contributions. We are not liable for any statements or representations in Your Contributions provided by You in any area on the Services. You are solely responsible for Your Contributions to the Services and You expressly agree to indemnify and exonerate Us from any and all responsibility and to refrain from any legal action against Us regarding Your Contributions. + +9\. SUBMISSIONS +--------------- + +You acknowledge and agree that any questions, comments, suggestions, ideas, feedback, or other information regarding the Services ("Submissions") provided by You to Us are non-confidential and shall become Our sole property. We shall own exclusive rights, including all intellectual property rights, and shall be entitled to the unrestricted use and dissemination of these Submissions for any lawful purpose, commercial or otherwise, without acknowledgment or compensation to You. You hereby waive all moral rights to any such Submissions, and You hereby warrant that any such Submissions are original with You or that You have the right to submit such Submissions. You agree there shall be no recourse against Us for any alleged or actual infringement or misappropriation of any proprietary right in Your Submissions. + +10\. ACCESS INTERFACE(S) +------------------------ + +1. **Open-Source Interface:** The Services contain open-source components, and You agree to comply with the terms of the open-source licenses governing those components. You also agree not to remove any copyright or attribution notices from the Services. +2. **Cloud Interface:** You agree that Botkube is not liable for any loss of data, service interruption, or other issues related to the use of the software based upon the acts or omissions of any third-party cloud services which may provide cloud hosting for the Services. You agree to comply with the terms of service of the cloud provider and to take responsibility for any fees or charges incurred by Your use of the cloud service. +3. **Desktop Interface:** You agree to comply with Botkube’s desktop usage policies, which may include restrictions on the installation of third-party software or modifications to the operating system. You also agree to notify Botkube of any security vulnerabilities or other issues related to the Services that are discovered while using the Services on a desktop environment. + +11\. U.S. GOVERNMENT RIGHTS +--------------------------- + +Our services are “commercial items” as defined in Federal Acquisition Regulation(“FAR”) 2.101. If Our services are acquired by or on behalf of any agency not within the Department of Defense (“DOD”), Our services are subject to the terms of these Terms and Conditions in accordance with FAR 12.212 (for computer software) and FAR 12.211 (for technical data). If Our services are acquired by or on behalf of any agency within the Department of Defense, Our services are subject to the terms of these Terms and Conditions in accordance with Defense Federal Acquisition Regulation (“DFARS”) 227.7202-3. In addition, DFARS 252.227-7015 applies to technical data acquired by the DOD. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFARS, or other clause or provision that addresses government rights in computer software or technical data under these Terms and Conditions. + +12\. SITE MANAGEMENT +-------------------- + +We reserve the right, but not the obligation, to: + +1. Monitor the Services for violations of these Terms and Conditions; +2. Take appropriate legal action against anyone who, in Our sole discretion, violates the law or these Terms and Conditions, including without limitation, reporting such user to law enforcement authorities; +3. In Our sole discretion and without limitation, refuse, restrict access to, limit the availability of, or disable (to the extent technologically feasible) any of Your Contributions or any portion thereof; +4. In Our sole discretion and without limitation, notice, or liability, to remove from the Services or otherwise disable all files and content that are excessive in size or are in any way burdensome to Our systems; and +5. Otherwise manage the Services in a manner designed to protect Our rights and property and to facilitate the proper functioning of the Services. + +13\. INCORPORATION OF KUBESHOP TERMS AND CONDITIONS BY REFERENCE +---------------------------------------------------------------- + +To use the Services, You must accept (1) the Kubeshop Terms and Conditions, and (2) these Botkube Additional Terms and Conditions. Together, these documents are referred to collectively as the “Terms” or “Terms and Conditions.” You must at all times abide by the Terms in order to continue using the Services. + +Other supplemental terms and conditions or documents aside from the aforementioned Kubeshop Terms and Conditions that may be posted on the Services from time to time are hereby expressly incorporated herein by reference. We reserve the right, in Our sole discretion, to make changes or modifications to these Terms and Conditions from time to time. We will alert You about any changes by updating the “Last Updated” date of these Terms and Conditions, and You waive any right to receive specific notice of each such change. Please ensure that You check the applicable Terms every time You use Our Services so that You understand which Terms apply. You will be subject to and will be deemed to have been made aware of and to have accepted, the changes in any revised Terms and Conditions by Your continued use of the Services after the date such revised Terms and Conditions are posted. + +14\. MISCELLANEOUS +------------------ + +These Terms and Conditions and any policies or operating rules posted by Us on the Services or in respect to the Services constitute the entire agreement and understanding between You and Us. Our failure to exercise or enforce any right or provision of these Terms and Conditions shall not operate as a waiver of such right or provision. These Terms and Conditions operate to the fullest extent permissible by law. + +We may assign any or all of Our rights and obligations to others at any time. + +We shall not be responsible or liable for any loss, damage, delay, or failure to act caused by any cause beyond Our reasonable control. + +If any provision or part of a provision of these Terms and Conditions is determined to be unlawful, void, or unenforceable, that provision or part of the provision is deemed severable from these Terms and Conditions and does not affect the validity and enforceability of any remaining provisions. + +There is no joint venture, partnership, employment or agency relationship created between You and Us as a result of these Terms and Conditions or use of the Services. + +You agree that these Terms and Conditions will not be construed against Us by virtue of having drafted them. + +You hereby waive any and all defenses You may have based on the electronic form of these Terms and Conditions and the lack of signing by the parties hereto to execute these Terms and Conditions. + +15\. CONTACT US +--------------- + +In order to resolve a complaint regarding the Services or to receive further information regarding use of the Services, please contact Us at: + +Kubernetes Innovation Labs LLC + +20 Brynwood Ln, Greenwich, CT 06831, USA + +Greenwich, CT 06831 + +United States + +[frontdesk@kubeshop.io](mailto:frontdesk@kubeshop.io) diff --git a/hack/assistant-setup/content/docs.botkube.io.md b/hack/assistant-setup/content/docs.botkube.io.md new file mode 100644 index 0000000..ac38f87 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io.md @@ -0,0 +1,43 @@ +Title: Installation | Botkube + +URL Source: https://docs.botkube.io/ + +Markdown Content: +* [](https://docs.botkube.io/) * Installation Version: 1.10 Botkube has two components that need to be installed. 1. Botkube App Integration in your Slack/Mattermost/Microsoft Teams/Discord 2. Botkube agent in your Kubernetes cluster Feature map[​](#feature-map"DirectlinktoFeaturemap") +--------------------------------------------------------- + +Learn about Botkube features and their availability in different integrations. + +### Bots[​](#bots"DirectlinktoBots") + +Compare our bidirectional integrations: + +| Feature | Cloud Slack | Slack | Microsoft Teams | Discord | Mattermost | +| --- | --- | --- | --- | --- | --- | +| Source plugins support (e.g. `kubernetes`) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | +| Executor plugins support (e.g. `kubectl`) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | +| Multi-cluster support | ✔️ | ❌ | ✔️ | ✔️ | ✔️ | +| Enhanced per-channel plugin configuration including RBAC policy. | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | +| Interactive messages | ✔️ | ✔️ | ✔️ | ❌ | ❌ | +| Actionable notifications | ✔️ | ✔️ | ✔️ | ❌ | ❌ | +| Emoji reactions | ✔️ | ❌ | ❌ | ❌ | ❌ | + +### Sinks[​](#sinks"DirectlinktoSinks") + +Compare our unidirectional integrations: + +| Feature | Elasticsearch | Webhook | +| --- | --- | --- | +| Source plugins support (e.g. `kubernetes`, `prometheus`, etc.) | ✔️ | ✔️ | +| Multi-cluster support | ✔️ | ✔️ | + +Integrations[​](#integrations"DirectlinktoIntegrations") +------------------------------------------------------------ + +tip + +You can use a single Botkube agent to serve all the interfaces - Slack, Mattermost, Microsoft Teams, Elasticsearch and Webhook. +You just need to enable required mediums through the settings and add a necessary configuration. +_see the [configuration](https://docs.botkube.io/configuration) section for more information_ + +[Next Slack](https://docs.botkube.io/installation/socketslack) diff --git a/hack/assistant-setup/content/docs.botkube.io__architecture.md b/hack/assistant-setup/content/docs.botkube.io__architecture.md new file mode 100644 index 0000000..1bb0104 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__architecture.md @@ -0,0 +1,52 @@ +Title: Architecture | Botkube + +URL Source: https://docs.botkube.io/architecture/ + +Markdown Content: +This document describes high-level Botkube architecture, all components in the system and interactions between them. + +Botkube is split into two main parts: + +* Botkube agent: Botkube binary that serves as a bridge between communication platforms (e.g. Slack, Discord) and Botkube plugins (sources and executors). +* [Botkube plugins](https://docs.botkube.io/plugin/): The executable binaries that communicate with Botkube agent over an RPC interface. Botkube supports two types of plugins, respectively called Source plugins and Executor plugins. + +Components[​](#components"DirectlinktoComponents") +------------------------------------------------------ + +The following diagram visualizes all main components in the system. + +![Image 1: Architecture](https://docs.botkube.io/assets/images/arch-light-5dd32e39675b8833f7bcf6cfe2340542.svg#gh-light-mode-only)![Image 2: Architecture](https://docs.botkube.io/assets/images/arch-dark-d40e372bd6c7930979ab40b08b32ebfb.svg#gh-dark-mode-only) + +### Plugin repository[​](#plugin-repository"DirectlinktoPluginrepository") + +A plugin repository is a place where plugin binaries and index file are stored. This repository must be publicly available and supports downloading assets via HTTP(s). Any static file server can be used, for instance: GitHub Pages, `s3`, `gcs`, etc. + +### Plugin manager[​](#plugin-manager"DirectlinktoPluginmanager") + +Plugin manager takes care of downloading enabled and bound plugins, running a given plugin binary and maintaining the gRPC connection. Under the hood, the [`go-plugin`](https://github.com/hashicorp/go-plugin/) library is used. Plugin manager is responsible both for the executor and source plugins. + +### Plugin executor bridge[​](#plugin-executor-bridge"DirectlinktoPluginexecutorbridge") + +Plugin executor bridge is resolving the received Botkube command, calling the respective plugin, and sending back the response to a given communication platform. + +### Executor[​](#executor"DirectlinktoExecutor") + +Executor is a binary that implements the [executor](https://github.com/kubeshop/botkube/blob/main/proto/executor.proto) Protocol Buffers contract. Executor runs a given command, such as `kubectl` one, and returns the response in a synchronous way. + +Streaming command response is not supported. As a result, commands which take a lot of time doesn't work well, as the response won't be sent until the command is finished. + +### Plugin source bridge[​](#plugin-source-bridge"DirectlinktoPluginsourcebridge") + +Plugin source bridge is dispatching received source events to all configured communication channels. + +### Source[​](#source"DirectlinktoSource") + +Source is a binary that implements the [source](https://github.com/kubeshop/botkube/blob/main/proto/source.proto) Protocol Buffers contract. Source starts asynchronous streaming of domain-specific events. For example, streaming Kubernetes events. + +### Bot[​](#bot"DirectlinktoBot") + +Bot represents a bidirectional communication platform. Each bot is responsible for authenticating, managing connections, and providing an interface for receiving and sending messages for a given platform like Slack, Discord, etc. Connection is mostly done via WebSocket. + +### Sink[​](#sink"DirectlinktoSink") + +Sink represents a unidirectional communication platform. Each sink is responsible for authenticating, managing connections, and providing an interface for sending messages for a given platform like Elasticsearch, outgoing webhook, etc. diff --git a/hack/assistant-setup/content/docs.botkube.io__architecture__cloud-teams.md b/hack/assistant-setup/content/docs.botkube.io__architecture__cloud-teams.md new file mode 100644 index 0000000..dd30c6f --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__architecture__cloud-teams.md @@ -0,0 +1,140 @@ +Title: Cloud Teams connections overview | Botkube + +URL Source: https://docs.botkube.io/architecture/cloud-teams + +Markdown Content: +This document describes the communication between the Botkube Cloud control-plane and the Botkube Agent configured with the Cloud Teams platform enabled. + +![Image 1: teams-cloud.svg](https://docs.botkube.io/assets/images/teams-cloud-72519574ff0699035683647bd64f9254.png) + +### Agent outbound connections[​](#agent-outbound-connections"DirectlinktoAgentoutboundconnections") + +* HTTPS: `https://api.segment.io/*` +* HTTPS: `https://api.botkube.io/*` +* HTTPS: `https://github.com/kubeshop/botkube/releases/download/*` +* HTTP/2: `teams.botkube.io:50054` +* Docker images: [https://ghcr.io](https://ghcr.io/) more about required ports you can on [About GitHub's IP addresses](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/about-githubs-ip-addresses): +* `*.github.com` +* `*.pkg.github.com` +* `*.ghcr.io` +* `*.githubusercontent.com` + +### Agent inbound[​](#agent-inbound"DirectlinktoAgentinbound") + +The Botkube Agent doesn't export any endpoints. + +Components details +------------------ + +Agent[​](#agent"DirectlinktoAgent") +--------------------------------------- + +The Botkube Agent Docker image is hosted on the GitHub Container registry, which uses the package namespace [https://ghcr.io.](https://ghcr.io./) The image format link: + +* [`ghcr.io/kubeshop/botkube:{botkube_version}`](https://github.com/kubeshop/botkube/pkgs/container/botkube), e.g., `ghcr.io/kubeshop/botkube:v1.8.0` + +### Plugin manager[​](#plugin-manager"DirectlinktoPluginmanager") + +The index and archives for open source plugins are stored under a given Botkube GitHub release as [its assets](https://github.com/kubeshop/botkube/releases/tag/v1.8.0): + +* Plugin index: `https://github.com/kubeshop/botkube/releases/download/{botkube_version}/plugins-index.yaml`, e.g., [https://github.com/kubeshop/botkube/releases/download/v1.8.0/plugins-index.yaml](https://github.com/kubeshop/botkube/releases/download/v1.8.0/plugins-index.yaml) +* Plugin archive: `https://github.com/kubeshop/botkube/releases/download/{botkube_version}/{plugin_name_and_arch}.tar.gz` e.g., [https://github.com/kubeshop/botkube/releases/download/v1.8.0/executor\_kubectl\_linux\_amd64.tar.gz](https://github.com/kubeshop/botkube/releases/download/v1.8.0/executor_kubectl_linux_amd64.tar.gz) +* Plugin links can also be found in the `plugins-index.yaml` file. + +For the Botkube Cloud exclusive plugins, we serve plugin index via the Botkube Cloud API (`api.botkube.io`). As we use Google Cloud Storage as the storage provider, all the plugins are fetched from the `https://storage.googleapis.com` origin. + +During startup, the Botkube Agent downloads plugins index and all enabled plugins. They are stored under the `/tmp` folder mounted as the [`emptyDir`](https://github.com/kubeshop/botkube/blob/release-1.9/helm/botkube/templates/deployment.yaml#L146-L147). There is no Persistent Volume (PV), meaning that when the Agent Pod is, for example, rescheduled to another node, it downloads all dependencies again. To ensure that the [plugin manager](https://docs.botkube.io/architecture/#plugin-manager) does not make external calls, all required plugins must be present. You can achieve this by mounting a Persistent Volume Claim (PVC) at this path. Later, you can mount your Persistent Volume (PV) with cached plugins. + +### Plugin dependencies[​](#plugin-dependencies"DirectlinktoPlugindependencies") + +Each plugin may define required external dependencies that are downloaded by the [Plugin manager](#plugin-manager) at Agent startup. For now, those dependencies are taken from the official sources and are not mirrored to the Botkube Cloud registry. Here are the links that describe external dependencies for each officially supported plugin: + +* [`kubectl`](https://docs.botkube.io/configuration/executor/kubectl) executor: [https://github.com/kubeshop/botkube/blob/release-1.9/internal/executor/kubectl/executor.go#L33-L42](https://github.com/kubeshop/botkube/blob/release-1.9/internal/executor/kubectl/executor.go#L33-L42) + +`helm` plugin: + +* `helm` dependency: +* [https://get.helm.sh/helm-v3.6.3-darwin-amd64.tar.gz//darwin-amd64](https://get.helm.sh/helm-v3.6.3-darwin-amd64.tar.gz//darwin-amd64) +* [https://get.helm.sh/helm-v3.6.3-darwin-arm64.tar.gz//darwin-arm64](https://get.helm.sh/helm-v3.6.3-darwin-arm64.tar.gz//darwin-arm64) +* [https://get.helm.sh/helm-v3.6.3-linux-amd64.tar.gz//linux-amd64](https://get.helm.sh/helm-v3.6.3-linux-amd64.tar.gz//linux-amd64) +* [https://get.helm.sh/helm-v3.6.3-linux-arm64.tar.gz//linux-arm64](https://get.helm.sh/helm-v3.6.3-linux-arm64.tar.gz//linux-arm64) +* `exec` plugin: +* `eget` dependency: +* [https://github.com/zyedidia/eget/releases/download/v1.3.3/eget-1.3.3-darwin\_amd64.tar.gz//eget-1.3.3-darwin\_amd64](https://github.com/zyedidia/eget/releases/download/v1.3.3/eget-1.3.3-darwin_amd64.tar.gz//eget-1.3.3-darwin_amd64) +* [https://github.com/zyedidia/eget/releases/download/v1.3.3/eget-1.3.3-darwin\_arm64.tar.gz//eget-1.3.3-darwin\_arm64](https://github.com/zyedidia/eget/releases/download/v1.3.3/eget-1.3.3-darwin_arm64.tar.gz//eget-1.3.3-darwin_arm64) +* [https://github.com/zyedidia/eget/releases/download/v1.3.3/eget-1.3.3-linux\_amd64.tar.gz//eget-1.3.3-linux\_amd64](https://github.com/zyedidia/eget/releases/download/v1.3.3/eget-1.3.3-linux_amd64.tar.gz//eget-1.3.3-linux_amd64) +* [https://github.com/zyedidia/eget/releases/download/v1.3.3/eget-1.3.3-linux\_arm64.tar.gz//eget-1.3.3-linux\_arm64](https://github.com/zyedidia/eget/releases/download/v1.3.3/eget-1.3.3-linux_arm64.tar.gz//eget-1.3.3-linux_arm64) +* `flux` plugin: +* `flux` dependency: +* [https://github.com/fluxcd/flux2/releases/download/v2.0.1/flux\_2.0.1\_darwin\_amd64.tar.gz](https://github.com/fluxcd/flux2/releases/download/v2.0.1/flux_2.0.1_darwin_amd64.tar.gz) +* [https://github.com/fluxcd/flux2/releases/download/v2.0.1/flux\_2.0.1\_darwin\_arm64.tar.gz](https://github.com/fluxcd/flux2/releases/download/v2.0.1/flux_2.0.1_darwin_arm64.tar.gz) +* [https://github.com/fluxcd/flux2/releases/download/v2.0.1/flux\_2.0.1\_linux\_amd64.tar.gz](https://github.com/fluxcd/flux2/releases/download/v2.0.1/flux_2.0.1_linux_amd64.tar.gz) +* [https://github.com/fluxcd/flux2/releases/download/v2.0.1/flux\_2.0.1\_linux\_arm64.tar.gz](https://github.com/fluxcd/flux2/releases/download/v2.0.1/flux_2.0.1_linux_arm64.tar.gz) +* `gh` dependency: +* [https://github.com/cli/cli/releases/download/v2.32.1/gh\_2.32.1\_macOS\_amd64.zip//gh\_2.32.1\_macOS\_amd64/bin](https://github.com/cli/cli/releases/download/v2.32.1/gh_2.32.1_macOS_amd64.zip//gh_2.32.1_macOS_amd64/bin) +* [https://github.com/cli/cli/releases/download/v2.32.1/gh\_2.32.1\_macOS\_arm64.zip//gh\_2.32.1\_macOS\_arm64/bin](https://github.com/cli/cli/releases/download/v2.32.1/gh_2.32.1_macOS_arm64.zip//gh_2.32.1_macOS_arm64/bin) +* [https://github.com/cli/cli/releases/download/v2.32.1/gh\_2.32.1\_linux\_amd64.tar.gz//gh\_2.32.1\_linux\_amd64/bin](https://github.com/cli/cli/releases/download/v2.32.1/gh_2.32.1_linux_amd64.tar.gz//gh_2.32.1_linux_amd64/bin) +* [https://github.com/cli/cli/releases/download/v2.32.1/gh\_2.32.1\_linux\_arm64.tar.gz//gh\_2.32.1\_linux\_arm64/bin](https://github.com/cli/cli/releases/download/v2.32.1/gh_2.32.1_linux_arm64.tar.gz//gh_2.32.1_linux_arm64/bin) + +If a plugin is not listed here, then it doesn't have any external dependencies. + +### Analytics[​](#analytics"DirectlinktoAnalytics") + +The Agent uses the official [Go SDK](https://github.com/segmentio/analytics-go) to send anonymous analytics to [https://segment.io.](https://segment.io./) This library is sending a POST request on the `https://api.segment.io` endpoint. + +### Control-plane connection[​](#control-plane-connection"DirectlinktoControl-planeconnection") + +The Agent communicates with the Cloud control-plane using GraphQL. All requests are executed as a `POST` request on the `https://api.botkube.io/graphql` endpoint. We use that connection to: + +* Fetch Agent's configuration +* Send audit logs +* Periodically send Agent heartbeat +* Watch configuration changes +* all changes e.g., changing plugin configuration done on the Cloud UI Dashboard triggers Agent restart with 1 min (polling is used) + +#### Security[​](#security"DirectlinktoSecurity") + +The `https://api.botkube.io/graphql` endpoint is protected by JWT tokens. For the Agent, we use machine API tokens that are issued separately for each [Botkube Instance](#botkube-instance). This token allows you to work only in the context of a given Instance. + +### Cloud Teams connection[​](#cloud-teams-connection"DirectlinktoCloudTeamsconnection") + +The Cloud Teams platform communicates only with the Botkube control-plane using gRPC (HTTP/2 connection). For gRPC, TLS is enabled. We use [bidirectional streaming RPC](https://grpc.io/docs/what-is-grpc/core-concepts/#bidirectional-streaming-rpc%7D) to send the user `@Botkube` commands to the Agent and send Agent responses back to the Cloud control-plane. + +#### Security[​](#security-1"DirectlinktoSecurity") + +The `teams.botkube.io:50054` connection is protected by machine API tokens that are issued separately for each [Botkube Instance](#botkube-instance). This token allows you to work only in the context of a given Instance. + +Concurrency Limits[​](#concurrency-limits"DirectlinktoConcurrencyLimits") +------------------------------------------------------------------------------ + +Concurrency limits restrict the number of simultaneous connections to our Cloud Teams router. You are allowed a maximum of 2 concurrent connections to support rollback updates. + +Rate Limiting[​](#rate-limiting"DirectlinktoRateLimiting") +--------------------------------------------------------------- + +Rate limiting controls the frequency of requests that a component can send or receive. Rate limiting protects the Cloud Teams Router from misconfigured installations that may overload the system. Rate limiting is based on the Agent’s Instance ID. **We drop any messages that exceed the limit and do not push them into Pub/Sub.** You are allowed a maximum of 20 requests per second. + +Cloud Dashboard[​](#cloud-dashboard"DirectlinktoCloudDashboard") +--------------------------------------------------------------------- + +Such constrains applies in the context of the Cloud organization: + +1. The organization has exactly one owner +2. The organization owner cannot be removed. +3. The organization owner is also a billing person. +4. All organization members have the same full permission. They can add and remove members and update organization information. +5. A user can be a member of multiple organizations. +6. Instances are always scoped to a given organization. + +Useful links[​](#useful-links"DirectlinktoUsefullinks") +------------------------------------------------------------ + +* [Botkube Agent architecture](https://docs.botkube.io/architecture/) +* [Cloud Teams installation tutorial](https://docs.botkube.io/installation/teams/) + +Terminology[​](#terminology"DirectlinktoTerminology") +--------------------------------------------------------- + +### Botkube Instance[​](#botkube-instance"DirectlinktoBotkubeInstance") + +A Botkube Instance is created on the Botkube Cloud side and holds the Botkube Agent configuration. diff --git a/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube.md b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube.md new file mode 100644 index 0000000..5b6c8a7 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube.md @@ -0,0 +1,8 @@ +Title: botkube | Botkube + +URL Source: https://docs.botkube.io/cli/commands/botkube + +Markdown Content: +A utility that simplifies working with Botkube. + +-h, --help help for botkube -v, --verbose int/string[=simple] Prints more verbose output. Allowed values: 0 - disable, 1 - simple, 2 - trace (default 0 - disable) diff --git a/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_config.md b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_config.md new file mode 100644 index 0000000..48099b5 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_config.md @@ -0,0 +1,20 @@ +Title: botkube config | Botkube + +URL Source: https://docs.botkube.io/cli/commands/botkube_config + +Markdown Content: +botkube config[​](#botkube-config"Directlinktobotkubeconfig") +------------------------------------------------------------------ + +This command consists of multiple subcommands for working with Botkube configuration + +### Options[​](#options"DirectlinktoOptions") + +-h, --help help for config + +### Options inherited from parent commands[​](#options-inherited-from-parent-commands"DirectlinktoOptionsinheritedfromparentcommands") + +-v, --verbose int/string[=simple] Prints more verbose output. Allowed values: 0 - disable, 1 - simple, 2 - trace (default 0 - disable) ### SEE ALSO[​](#see-also"DirectlinktoSEEALSO") + +* [botkube](https://docs.botkube.io/cli/commands/botkube) - Botkube CLI +* [botkube config get](https://docs.botkube.io/cli/commands/botkube_config_get) - Displays Botkube configuration diff --git a/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_config_get.md b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_config_get.md new file mode 100644 index 0000000..677f2c5 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_config_get.md @@ -0,0 +1,25 @@ +Title: botkube config get | Botkube + +URL Source: https://docs.botkube.io/cli/commands/botkube_config_get + +Markdown Content: +Version: 1.10 + +botkube config get[​](#botkube-config-get"Directlinktobotkubeconfigget") +------------------------------------------------------------------------------ + +Displays Botkube configuration + +botkube config get [flags] ### Examples[​](#examples"DirectlinktoExamples") + +# Show configuration for currently installed Botkubebotkube config get# Show configuration in JSON formatbotkube config get -ojson# Save configuration in filebotkube config get > config.yaml + +### Options[​](#options"DirectlinktoOptions") + +--cfg-exporter-image-registry string Registry for the Config Exporter job image (default "ghcr.io") --cfg-exporter-image-repo string Repository for the Config Exporter job image (default "kubeshop/botkube-config-exporter") --cfg-exporter-image-tag string Tag of the Config Exporter job image (default "v9.99.9-dev") --cfg-exporter-poll-period duration Interval used to check if Config Exporter job was finished (default 1s) --cfg-exporter-timeout duration Maximum execution time for the Config Exporter job (default 1m0s) --cloud-env-api-key string API key environment variable name specified under Deployment for cloud installation. (default "CONFIG_PROVIDER_API_KEY") --cloud-env-endpoint string Endpoint environment variable name specified under Deployment for cloud installation. (default "CONFIG_PROVIDER_ENDPOINT") --cloud-env-id string Identifier environment variable name specified under Deployment for cloud installation. (default "CONFIG_PROVIDER_IDENTIFIER") -h, --help help for get -l, --label string Label used for identifying the Botkube pod (default "app=botkube") -n, --namespace string Namespace of Botkube pod (default "botkube") --omit-empty-values Omits empty keys from printed configuration (default true) -o, --output string Output format. One of: json | yaml (default "yaml") + +### Options inherited from parent commands[​](#options-inherited-from-parent-commands"DirectlinktoOptionsinheritedfromparentcommands") + +-v, --verbose int/string[=simple] Prints more verbose output. Allowed values: 0 - disable, 1 - simple, 2 - trace (default 0 - disable) ### SEE ALSO[​](#see-also"DirectlinktoSEEALSO") + +* [botkube config](https://docs.botkube.io/cli/commands/botkube_config) - This command consists of multiple subcommands for working with Botkube configuration diff --git a/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_install.md b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_install.md new file mode 100644 index 0000000..13b0e2c --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_install.md @@ -0,0 +1,12 @@ +Title: botkube install | Botkube + +URL Source: https://docs.botkube.io/cli/commands/botkube_install + +Markdown Content: +Use this command to install or upgrade the Botkube agent. + +# Install latest stable Botkube versionbotkube install# Install Botkube 0.1.0 versionbotkube install --version 0.1.0# Install Botkube from local git repository. Needs to be run from the main directory.botkube install --repo @local + +--atomic If set, process rolls back changes made in case of failed install/upgrade. The --wait flag will be set automatically if --atomic is used -y, --auto-approve Skips interactive approval when upgrade is required. --chart-name string Botkube Helm chart name. (default "botkube") --dependency-update Update dependencies if they are missing before installing the chart --description string add a custom description --disable-openapi-validation If set, it will not validate rendered templates against the Kubernetes OpenAPI Schema --dry-run Simulate an installation --force Force resource updates through a replacement strategy -h, --help help for install --kubeconfig string Paths to a kubeconfig. Only required if out-of-cluster. --namespace string Botkube installation namespace. (default "botkube") --no-hooks Disable pre/post install/upgrade hooks --release-name string Botkube Helm chart release name. (default "botkube") --render-subchart-notes If set, render subchart notes along with the parent --repo string Botkube Helm chart repository location. It can be relative path to current working directory or URL. Use @stable tag to select repository which holds the stable Helm chart versions. (default "https://charts.botkube.io/") --reset-values When upgrading, reset the values to the ones built into the chart --reuse-values When upgrading, reuse the last release's values and merge in any overrides from the command line via --set and -f. If '--reset-values' is specified, this is ignored --set stringArray Set values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2) --set-file stringArray Set values from respective files specified via the command line (can specify multiple or separate values with commas: key1=path1,key2=path2) --set-json stringArray Set JSON values on the command line (can specify multiple or separate values with commas: key1=jsonval1,key2=jsonval2) --set-literal stringArray Set a literal STRING value on the command line --set-string stringArray Set STRING values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2) --skip-crds If set, no CRDs will be installed. --timeout duration Maximum time during which the Botkube installation is being watched, where "0" means "infinite". Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h". (default 10m0s) -f, --values strings Specify values in a YAML file or a URL (can specify multiple) --version string Botkube version. Possible values @latest, 1.2.0, ... (default "@latest") -w, --watch --timeout Watches the status of the Botkube installation until it finish or the defined --timeout occurs. (default true) + +-v, --verbose int/string[=simple] Prints more verbose output. Allowed values: 0 - disable, 1 - simple, 2 - trace (default 0 - disable) diff --git a/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_login.md b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_login.md new file mode 100644 index 0000000..030ef72 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_login.md @@ -0,0 +1,23 @@ +Title: botkube login | Botkube + +URL Source: https://docs.botkube.io/cli/commands/botkube_login + +Markdown Content: +botkube login[​](#botkube-login"Directlinktobotkubelogin") +--------------------------------------------------------------- + +Login to a Botkube Cloud + +botkube login [OPTIONS] [flags] ### Examples[​](#examples"DirectlinktoExamples") + +# start interactive setupbotkube login + +### Options[​](#options"DirectlinktoOptions") + +--cloud-dashboard-url string Botkube Cloud URL (default "https://app.botkube.io") -h, --help help for login --local-server-addr string Address of a local server which is used for the login flow (default "localhost:8085") + +### Options inherited from parent commands[​](#options-inherited-from-parent-commands"DirectlinktoOptionsinheritedfromparentcommands") + +-v, --verbose int/string[=simple] Prints more verbose output. Allowed values: 0 - disable, 1 - simple, 2 - trace (default 0 - disable) ### SEE ALSO[​](#see-also"DirectlinktoSEEALSO") + +* [botkube](https://docs.botkube.io/cli/commands/botkube) - Botkube CLI diff --git a/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_migrate.md b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_migrate.md new file mode 100644 index 0000000..7b1b712 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_migrate.md @@ -0,0 +1,12 @@ +Title: botkube migrate | Botkube + +URL Source: https://docs.botkube.io/cli/commands/botkube_migrate + +Markdown Content: +Automatically migrates Botkube installation to Botkube Cloud. This command will create a new Botkube Cloud instance based on your existing Botkube configuration, and upgrade your Botkube installation to use the remote configuration. + +Use label selector to choose which Botkube pod you want to migrate. By default it's set to app=botkube. + +-y, --auto-approve Skips interactive approval for upgrading Botkube installation. --cfg-exporter-image-registry string Registry for the Config Exporter job image (default "ghcr.io") --cfg-exporter-image-repo string Repository for the Config Exporter job image (default "kubeshop/botkube-config-exporter") --cfg-exporter-image-tag string Tag of the Config Exporter job image (default "v9.99.9-dev") --cfg-exporter-poll-period duration Interval used to check if Config Exporter job was finished (default 1s) --cfg-exporter-timeout duration Maximum execution time for the Config Exporter job (default 1m0s) --cloud-api-url string Botkube Cloud API URL (default "https://api.botkube.io/graphql") --cloud-dashboard-url string Botkube Cloud URL (default "https://app.botkube.io") --cloud-env-api-key string API key environment variable name specified under Deployment for cloud installation. (default "CONFIG_PROVIDER_API_KEY") --cloud-env-endpoint string Endpoint environment variable name specified under Deployment for cloud installation. (default "CONFIG_PROVIDER_ENDPOINT") --cloud-env-id string Identifier environment variable name specified under Deployment for cloud installation. (default "CONFIG_PROVIDER_IDENTIFIER") -h, --help help for migrate --image-tag string Botkube image tag, e.g. "latest" or "v1.7.0" --instance-name string Botkube Cloud Instance name that will be created --kubeconfig string Paths to a kubeconfig. Only required if out-of-cluster. -l, --label string Label used for identifying the Botkube pod (default "app=botkube") -n, --namespace string Namespace of Botkube pod (default "botkube") -q, --skip-connect Skips connecting to Botkube Cloud after migration --skip-open-browser Skips opening web browser after migration --timeout duration Maximum time during which the Botkube installation is being watched, where "0" means "infinite". Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h". (default 10m0s) --token string Botkube Cloud authentication token -w, --watch --timeout Watches the status of the Botkube installation until it finish or the defined --timeout occurs. (default true) + +-v, --verbose int/string[=simple] Prints more verbose output. Allowed values: 0 - disable, 1 - simple, 2 - trace (default 0 - disable) diff --git a/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_telemetry.md b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_telemetry.md new file mode 100644 index 0000000..9150b3c --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_telemetry.md @@ -0,0 +1,21 @@ +Title: botkube telemetry | Botkube + +URL Source: https://docs.botkube.io/cli/commands/botkube_telemetry + +Markdown Content: +botkube telemetry[​](#botkube-telemetry"Directlinktobotkubetelemetry") +--------------------------------------------------------------------------- + +Configure collection of anonymous analytics + +### Options[​](#options"DirectlinktoOptions") + +-h, --help help for telemetry + +### Options inherited from parent commands[​](#options-inherited-from-parent-commands"DirectlinktoOptionsinheritedfromparentcommands") + +-v, --verbose int/string[=simple] Prints more verbose output. Allowed values: 0 - disable, 1 - simple, 2 - trace (default 0 - disable) ### SEE ALSO[​](#see-also"DirectlinktoSEEALSO") + +* [botkube](https://docs.botkube.io/cli/commands/botkube) - Botkube CLI +* [botkube telemetry disable](https://docs.botkube.io/cli/commands/botkube_telemetry_disable) - Disable Botkube telemetry +* [botkube telemetry enable](https://docs.botkube.io/cli/commands/botkube_telemetry_enable) - Enable Botkube telemetry diff --git a/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_telemetry_disable.md b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_telemetry_disable.md new file mode 100644 index 0000000..5cc8fa1 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_telemetry_disable.md @@ -0,0 +1,25 @@ +Title: botkube telemetry disable | Botkube + +URL Source: https://docs.botkube.io/cli/commands/botkube_telemetry_disable + +Markdown Content: +Version: 1.10 + +botkube telemetry disable[​](#botkube-telemetry-disable"Directlinktobotkubetelemetrydisable") +--------------------------------------------------------------------------------------------------- + +Disable Botkube telemetry + +botkube telemetry disable [flags] ### Examples[​](#examples"DirectlinktoExamples") + +# To improve the user experience, Botkube collects anonymized data.# It does not collect any identifying information, and all analytics# are used only as aggregated collection of data to improve Botkube# and adjust its roadmap.# Read our privacy policy at https://docs.botkube.io/privacy# The Botkube CLI tool collects anonymous usage analytics.# This data is only available to the Botkube authors and helps us improve the tool.# Disable Botkube telemetrybotkube telemetry disable + +### Options[​](#options"DirectlinktoOptions") + +-h, --help help for disable + +### Options inherited from parent commands[​](#options-inherited-from-parent-commands"DirectlinktoOptionsinheritedfromparentcommands") + +-v, --verbose int/string[=simple] Prints more verbose output. Allowed values: 0 - disable, 1 - simple, 2 - trace (default 0 - disable) ### SEE ALSO[​](#see-also"DirectlinktoSEEALSO") + +* [botkube telemetry](https://docs.botkube.io/cli/commands/botkube_telemetry) - Configure collection of anonymous analytics diff --git a/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_telemetry_enable.md b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_telemetry_enable.md new file mode 100644 index 0000000..f2024d5 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_telemetry_enable.md @@ -0,0 +1,25 @@ +Title: botkube telemetry enable | Botkube + +URL Source: https://docs.botkube.io/cli/commands/botkube_telemetry_enable + +Markdown Content: +Version: 1.10 + +botkube telemetry enable[​](#botkube-telemetry-enable"Directlinktobotkubetelemetryenable") +------------------------------------------------------------------------------------------------ + +Enable Botkube telemetry + +botkube telemetry enable [flags] ### Examples[​](#examples"DirectlinktoExamples") + +# To improve the user experience, Botkube collects anonymized data.# It does not collect any identifying information, and all analytics# are used only as aggregated collection of data to improve Botkube# and adjust its roadmap.# Read our privacy policy at https://docs.botkube.io/privacy# Enable Botkube telemetrybotkube telemetry enable + +### Options[​](#options"DirectlinktoOptions") + +-h, --help help for enable + +### Options inherited from parent commands[​](#options-inherited-from-parent-commands"DirectlinktoOptionsinheritedfromparentcommands") + +-v, --verbose int/string[=simple] Prints more verbose output. Allowed values: 0 - disable, 1 - simple, 2 - trace (default 0 - disable) ### SEE ALSO[​](#see-also"DirectlinktoSEEALSO") + +* [botkube telemetry](https://docs.botkube.io/cli/commands/botkube_telemetry) - Configure collection of anonymous analytics diff --git a/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_uninstall.md b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_uninstall.md new file mode 100644 index 0000000..a1f4e84 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_uninstall.md @@ -0,0 +1,29 @@ +Title: botkube uninstall | Botkube + +URL Source: https://docs.botkube.io/cli/commands/botkube_uninstall + +Markdown Content: +Version: 1.10 + +botkube uninstall[​](#botkube-uninstall"Directlinktobotkubeuninstall") +--------------------------------------------------------------------------- + +uninstall Botkube from cluster + +### Synopsis[​](#synopsis"DirectlinktoSynopsis") + +Use this command to uninstall the Botkube agent. + +botkube uninstall [OPTIONS] [flags] ### Examples[​](#examples"DirectlinktoExamples") + +# Uninstall default Botkube Helm releasebotkube uninstall# Uninstall specific Botkube Helm releasebotkube uninstall --release-name botkube-dev + +### Options[​](#options"DirectlinktoOptions") + +-y, --auto-approve Skips interactive approval for deletion. --cascade string Must be "background", "orphan", or "foreground". Selects the deletion cascading strategy for the dependents. Defaults to background. (default "background") --description string add a custom description --dry-run Simulate an uninstallation -h, --help help for uninstall --keep-history remove all associated resources and mark the release as deleted, but retain the release history --kubeconfig string Paths to a kubeconfig. Only required if out-of-cluster. --namespace string Botkube namespace. (default "botkube") --no-hooks prevent hooks from running during uninstallation --release-name string Botkube Helm release name. (default "botkube") --timeout duration time to wait for any individual Kubernetes operation (like Jobs for hooks) (default 5m0s) --wait if set, will wait until all the resources are deleted before returning. It will wait for as long as --timeout (default true) + +### Options inherited from parent commands[​](#options-inherited-from-parent-commands"DirectlinktoOptionsinheritedfromparentcommands") + +-v, --verbose int/string[=simple] Prints more verbose output. Allowed values: 0 - disable, 1 - simple, 2 - trace (default 0 - disable) ### SEE ALSO[​](#see-also"DirectlinktoSEEALSO") + +* [botkube](https://docs.botkube.io/cli/commands/botkube) - Botkube CLI diff --git a/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_version.md b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_version.md new file mode 100644 index 0000000..f7b88b6 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__cli__commands__botkube_version.md @@ -0,0 +1,23 @@ +Title: botkube version | Botkube + +URL Source: https://docs.botkube.io/cli/commands/botkube_version + +Markdown Content: +botkube version[​](#botkube-version"Directlinktobotkubeversion") +--------------------------------------------------------------------- + +Print the CLI version + +botkube version [flags] ### Examples[​](#examples"DirectlinktoExamples") + +botkube versionbotkube version -o=jsonbotkube version -o=yamlbotkube version -o=short + +### Options[​](#options"DirectlinktoOptions") + +-h, --help help for version -o, --output string Output format. One of: json | pretty | short | yaml (default "pretty") + +### Options inherited from parent commands[​](#options-inherited-from-parent-commands"DirectlinktoOptionsinheritedfromparentcommands") + +-v, --verbose int/string[=simple] Prints more verbose output. Allowed values: 0 - disable, 1 - simple, 2 - trace (default 0 - disable) ### SEE ALSO[​](#see-also"DirectlinktoSEEALSO") + +* [botkube](https://docs.botkube.io/cli/commands/botkube) - Botkube CLI diff --git a/hack/assistant-setup/content/docs.botkube.io__cli__getting-started.md b/hack/assistant-setup/content/docs.botkube.io__cli__getting-started.md new file mode 100644 index 0000000..28b3e7f --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__cli__getting-started.md @@ -0,0 +1,49 @@ +Title: Getting Started | Botkube + +URL Source: https://docs.botkube.io/cli/getting-started + +Markdown Content: +Version: 1.10 + +Botkube includes a command-line interface (CLI) that you can use to interact with Botkube and Botkube Cloud from your terminal, or from a script. + +Installation[​](#installation"DirectlinktoInstallation") +------------------------------------------------------------ + +Select tab depending on the system you use: + +* Mac with Apple Silicon +* Mac with Intel chip +* Linux +* Windows +* Other + +Use [Homebrew](https://brew.sh/) to install the latest Botkube CLI: + +brew install kubeshop/botkube/botkube + +* * * + +Alternatively, download the Botkube CLI binary and move it to a directory under your `$PATH`: + +curl -Lo botkube https://github.com/kubeshop/botkube/releases/download/v1.10.0/botkube-darwin-arm64chmod +x botkube && mv botkube /usr/local/bin/botkube + +First use[​](#first-use"DirectlinktoFirstuse") +--------------------------------------------------- + +For the commands that are nested under `cloud` command you first need to authenticate with Botkube cloud by running: + +If credentials are valid, the output is: + +All available commands you can simply discover by running `botkube --help` or `botkube -h` to see the help output which corresponds to a given command. + +Autocompletion[​](#autocompletion"DirectlinktoAutocompletion") +------------------------------------------------------------------ + +To learn how to enable autocompletion for your shell, run: + +botkube completion --help + +> **NOTE:** Be sure to **restart your shell** after installing autocompletion. + +When you start typing a `botkube` command, press the `` character to show a list of available completions. Type `-` to show available flag completions. diff --git a/hack/assistant-setup/content/docs.botkube.io__cli__migrating-installation-to-botkube-cloud.md b/hack/assistant-setup/content/docs.botkube.io__cli__migrating-installation-to-botkube-cloud.md new file mode 100644 index 0000000..94d017c --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__cli__migrating-installation-to-botkube-cloud.md @@ -0,0 +1,42 @@ +Title: Migrating installation to Botkube Cloud | Botkube + +URL Source: https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud + +Markdown Content: +Migrating installation to Botkube Cloud[​](#migrating-installation-to-botkube-cloud"DirectlinktoMigratinginstallationtoBotkubeCloud") +--------------------------------------------------------------------------------------------------------------------------------------------- + +If you have started using Botkube with the Open Source installation, you have the option to migrate this instance to be managed using [Botkube Cloud](https://app.botkube.io/). + +To make the migration process easier, we provide a dedicated `botkube cloud migrate` command that seamlessly transfers your Botkube installation to Botkube Cloud. + +Supported Botkube platforms: + +* Socket Slack +* Discord +* Mattermost + +Steps[​](#steps"DirectlinktoSteps") +--------------------------------------- + +1. [Install Botkube CLI](https://docs.botkube.io/cli/getting-started#installation) + +2. [Login into Botkube Cloud](https://docs.botkube.io/cli/getting-started#first-use) + +3. Run Botkube migrate: + + +Limitations[​](#limitations"DirectlinktoLimitations") +--------------------------------------------------------- + +The following list contains current limitations that we will address in the near future: + +* `extraObjects` in Botkube [helm configurations](https://github.com/kubeshop/botkube/blob/593746a70d9eb23469c28e5c0274c9a40a7b651d/helm/botkube/values.yaml#L1040) are ignored. If you have any extra resources under `extraObjects` section, you need to migrate them on your own. +* Custom `rbac.groups` are ignored. +* All 3rd-party plugins are ignored. +* Minimal supported Botkube version is v1.0.0. + +See more[​](#see-more"DirectlinktoSeemore") +------------------------------------------------ + +To learn more about `botkube cloud migrate` and all supported settings, visit the [Botkube migrate](https://docs.botkube.io/cli/commands/botkube_migrate) document. diff --git a/hack/assistant-setup/content/docs.botkube.io__community__contribute.md b/hack/assistant-setup/content/docs.botkube.io__community__contribute.md new file mode 100644 index 0000000..edde91a --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__community__contribute.md @@ -0,0 +1,182 @@ +Title: Contribute | Botkube + +URL Source: https://docs.botkube.io/community/contribute/ + +Markdown Content: +* [](https://docs.botkube.io/) * Contribute How to Contribute to Botkube ---------------------------- We'd love your help! Botkube is [MIT Licensed](https://github.com/kubeshop/botkube/blob/main/LICENSE) and accepts contributions via GitHub pull requests. This document outlines conventions on development workflow, commit message formatting, contact points and other resources to make it easier to get your contributions accepted. + +We gratefully welcome improvements to [documentation](https://docs.botkube.io/"Gotodocumentationsite") as well as to code. + +Contributing to documentation[​](#contributing-to-documentation"DirectlinktoContributingtodocumentation") +--------------------------------------------------------------------------------------------------------------- + +Follow the [botkube-docs/CONTRIBUTING.md](https://github.com/kubeshop/botkube-docs/blob/main/CONTRIBUTING.md) file to learn how to contribute to documentation. + +Build and run Botkube from source code[​](#build-and-run-botkube-from-source-code"DirectlinktoBuildandrunBotkubefromsourcecode") +------------------------------------------------------------------------------------------------------------------------------------------ + +This section describes how to build and run Botkube from source code. + +### Prerequisite[​](#prerequisite"DirectlinktoPrerequisite") + +* [Go](https://go.dev/), at least 1.18 + +* `make` + +* [Docker](https://docs.docker.com/install/) + +* Kubernetes cluster, at least 1.21 + +* Cloned Botkube repository + +Use the following command to clone it: + +git clone https://github.com/kubeshop/botkube.git + + +### Build and install on Kubernetes[​](#build-and-install-on-kubernetes"DirectlinktoBuildandinstallonKubernetes") + +1. Build Botkube and create a new container image tagged as `ghcr.io/kubeshop/botkube:v9.99.9-dev`. Choose one option: + +* **Single target build for your local K8s cluster** + +This is ideal for running Botkube on a local cluster, e.g. using [kind](https://kind.sigs.k8s.io/) or [`minikube`](https://minikube.sigs.k8s.io/docs/). + +Remember to set the `IMAGE_PLATFORM` env var to your target architecture. By default, the build targets `linux/amd64`. + +For example, the command below builds the `linux/arm64` target: + +IMAGE_PLATFORM=linux/arm64 make container-image-singledocker tag ghcr.io/kubeshop/botkube:v9.99.9-dev {your_account}/botkube:v9.99.9-devdocker push {your_account}/botkube:v9.99.9-dev + +Where `{your_account}` is Docker hub or any other registry provider account to which you can push the image. + +* **Multi-arch target builds for any K8s cluster** + +This is ideal for running Botkube on remote clusters. + +When tagging your dev image take care to add your target image architecture as a suffix. For example, in the command below we added `-amd64` as our target architecture. + +This ensures the image will run correctly on the target K8s cluster. + +> **Note** This command takes some time to run as it builds the images for multiple architectures. + +make container-imagedocker tag ghcr.io/kubeshop/botkube:v9.99.9-dev-amd64 {your_account}/botkube:v9.99.9-devdocker push {your_account}/botkube:v9.99.9-dev + +Where `{your_account}` is Docker hub or any other registry provider account to which you can push the image. + +2. Install Botkube with any of communication platform configured, according to [the installation instructions](https://docs.botkube.io/installation/). During the Helm chart installation step, set the following flags: + +export IMAGE_REGISTRY="{imageRegistry}" # e.g. docker.ioexport IMAGE_PULL_POLICY="{pullPolicy}" # e.g. Always or IfNotPresent--set image.registry=${IMAGE_REGISTRY} \--set image.repository={your_account}/botkube \--set image.tag=v9.99.9-dev \--set image.pullPolicy=${IMAGE_PULL_POLICY} + +Check [values.yaml](https://github.com/kubeshop/botkube/blob/main/helm/botkube/values.yaml) for default options. + + +### Build and run locally[​](#build-and-run-locally"DirectlinktoBuildandrunlocally") + +For faster development, you can also build and run Botkube outside K8s cluster. + +1. Build Botkube local binary: + +# Fetch the dependenciesgo mod download# Build the binarygo build -o botkube-agent ./cmd/botkube-agent/ + +2. Create a local configuration file to override default values. For example, set communication credentials, specify cluster name, and disable analytics: + +cat < local_config.yamlcommunications: default-group: socketSlack: enabled: true channels: default: name: random appToken: "xapp-xxxx" botToken: "xoxb-xxxx"configWatcher: enabled: falsesettings: clusterName: "labs"analytics: # -- If true, sending anonymous analytics is disabled. To learn what date we collect, # see [Privacy Policy](https://botkube.io/privacy#privacy-policy). disable: trueEOF + +To learn more about configuration, visit [https://docs.botkube.io/configuration/](https://docs.botkube.io/configuration/). + +3. Export paths to configuration files. The priority will be given to the last (right-most) file specified. + +export BOTKUBE_CONFIG_PATHS="$(pwd)/helm/botkube/values.yaml,$(pwd)/local_config.yaml" + +4. Export the path to Kubeconfig: + +export BOTKUBE_SETTINGS_KUBECONFIG=/Users/$USER/.kube/config # set custom path if necessary + +5. Make sure you are able to access your Kubernetes cluster: + +Kubernetes master is running at https://192.168.39.233:8443CoreDNS is running at https://192.168.39.233:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy... + +6. Run Botkube agent binary: + + +#### Develop Botkube plugins[​](#develop-botkube-plugins"DirectlinktoDevelopBotkubeplugins") + +**Prerequisite** + +* Being able to start the Botkube binary locally. +* [GoReleaser](https://goreleaser.com/install/) + +**Steps** + +1. Start fake plugins server to serve binaries from `dist` folder: + +go run test/helpers/plugin_server.go + +> **Note** If Botkube runs inside the k3d cluster, export the `PLUGIN_SERVER_HOST=http://host.k3d.internal` environment variable. + +2. Export Botkube plugins cache directory: + +export BOTKUBE_PLUGINS_CACHE__DIR="/tmp/plugins" + +3. In other terminal window, run: + +# rebuild plugins only for current GOOS and GOARCHmake build-plugins-single &&# remove cached pluginsrm -rf $BOTKUBE_PLUGINS_CACHE__DIR &&# start botkube to download fresh plugins./botkube-agent + +> **Note** Each time you make a change to the [source](https://github.com/kubeshop/botkube/blob/main/cmd/source) or [executors](https://github.com/kubeshop/botkube/blob/main/cmd/executor) plugins re-run the above command. + +> **Note** To build specific plugin binaries, use `PLUGIN_TARGETS`. For example `PLUGIN_TARGETS="x, kubectl" make build-plugins-single`. + + +Making A Change[​](#making-a-change"DirectlinktoMakingAChange") +--------------------------------------------------------------------- + +* Before making any significant changes, please [open an issue](https://github.com/kubeshop/botkube/issues). Discussing your proposed changes ahead of time will make the contribution process smooth for everyone. + +* Once we've discussed your changes, and you've got your code ready, make sure that the build steps mentioned above pass. Open your pull request against the [`main`](https://github.com/kubeshop/botkube/tree/main) branch. + +To learn how to do it, follow the **Contribute** section in the [Git workflow guide](https://github.com/kubeshop/botkube/blob/main/git-workflow.md). + +* To avoid build failures in CI, install [`golangci-lint`](https://golangci-lint.run/welcome/install/) and run: + +# From project root directorymake lint-fix + +This will run the `golangci-lint` tool to lint the Go code. + + +### Run the e2e tests[​](#run-the-e2e-tests"DirectlinktoRunthee2etests") + +Here [are the details you need](https://github.com/kubeshop/botkube/blob/main/test/README.md) to set up and run the e2e tests. + +### Create a Pull Request[​](#create-a-pull-request"DirectlinktoCreateaPullRequest") + +* Make sure your pull request has [good commit messages](https://chris.beams.io/posts/git-commit/): + +* Separate subject from body with a blank line +* Limit the subject line to 50 characters +* Capitalize the subject line +* Do not end the subject line with a period +* Use the imperative mood in the subject line +* Wrap the body at 72 characters +* Use the body to explain _what_ and _why_ instead of _how_ +* Try to squash unimportant commits and rebase your changes on to the `main` branch, this will make sure we have clean log of changes. + + +Support Channels[​](#support-channels"DirectlinktoSupportChannels") +------------------------------------------------------------------------ + +Join the Botkube-related discussion on Slack! + +Create your Slack account on [Botkube](https://join.botkube.io/) workspace. + +To report bug or feature, use [GitHub issues](https://github.com/kubeshop/botkube/issues/new/choose). + +[](https://docs.botkube.io/community/contribute/release) * [Contributing to documentation](#contributing-to-documentation) +* [Build and run Botkube from source code](#build-and-run-botkube-from-source-code) +* [Prerequisite](#prerequisite) +* [Build and install on Kubernetes](#build-and-install-on-kubernetes) +* [Build and run locally](#build-and-run-locally) +* [Making A Change](#making-a-change) +* [Run the e2e tests](#run-the-e2e-tests) +* [Create a Pull Request](#create-a-pull-request) +* [Support Channels](#support-channels) diff --git a/hack/assistant-setup/content/docs.botkube.io__community__contribute__elasticsearch-develop.md b/hack/assistant-setup/content/docs.botkube.io__community__contribute__elasticsearch-develop.md new file mode 100644 index 0000000..f96c495 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__community__contribute__elasticsearch-develop.md @@ -0,0 +1,111 @@ +Title: Elasticsearch notifier development | Botkube + +URL Source: https://docs.botkube.io/community/contribute/elasticsearch-develop + +Markdown Content: +* [](https://docs.botkube.io/) * [Contribute](https://docs.botkube.io/community/contribute/) +* Elasticsearch notifier development + +Elasticsearch notifier development +---------------------------------- + +Botkube has stable support for Elasticsearch `v8` and it is backward compatible to Elasticsearch `v7`. If you are using Elasticsearch `v7`, please follow the [Elasticsearch v7 setup](#elasticsearch-v7-setup) section. + +Elasticsearch v8 setup[​](#elasticsearch-v8-setup"DirectlinktoElasticsearchv8setup") +------------------------------------------------------------------------------------------ + +The easiest way to develop Botkube with Elasticsearch notifier enabled is to install Elasticsearch on your local Kubernetes cluster via [ECK](https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-deploy-eck.html). + +### Steps[​](#steps"DirectlinktoSteps") + +1. Install Elasticsearch: + +1. Install ECK custom resource definitions: + +kubectl create -f https://download.elastic.co/downloads/eck/2.9.0/crds.yaml + +2. Install ECK operator: + +kubectl apply -f https://download.elastic.co/downloads/eck/2.9.0/operator.yaml + +3. Deploy Elasticsearch: + +cat < /tmp/values.yaml << ENDOFFILEextraObjects: - apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: vault-database spec: provider: vault parameters: roleName: "database" vaultAddress: "http://vault.default:8200" objects: | - objectName: "slack-app-token" secretPath: "secret/data/slack-app-token" secretKey: "token" - objectName: "slack-bot-token" secretPath: "secret/data/slack-bot-token" secretKey: "token" secretObjects: - secretName: communication-slack type: Opaque data: - objectName: "slack-app-token" key: "slack-app-token" - objectName: "slack-bot-token" key: "slack-bot-token"communications: 'default-group': # Settings for SocketSlack socketSlack: enabled: true channels: {} # configure your channels # botToken - specified via env variable # appToken - specified via env variableextraEnv: - name: BOTKUBE_COMMUNICATIONS_DEFAULT-GROUP_SOCKET__SLACK_APP__TOKEN valueFrom: secretKeyRef: name: communication-slack key: slack-app-token - name: BOTKUBE_COMMUNICATIONS_DEFAULT-GROUP_SOCKET__SLACK_BOT__TOKEN valueFrom: secretKeyRef: name: communication-slack key: slack-bot-tokenextraVolumeMounts: - name: secrets-store-inline mountPath: "/mnt/secrets-store" readOnly: trueextraVolumes: - name: secrets-store-inline csi: driver: secrets-store.csi.k8s.io readOnly: true volumeAttributes: secretProviderClass: "vault-database"ENDOFFILE + +6. Install Botkube: + +helm install botkube --namespace default \-f /tmp/values.yaml \./helm/botkube diff --git a/hack/assistant-setup/content/docs.botkube.io__configuration__executor.md b/hack/assistant-setup/content/docs.botkube.io__configuration__executor.md new file mode 100644 index 0000000..fe210d2 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__configuration__executor.md @@ -0,0 +1,43 @@ +Title: Executor | Botkube + +URL Source: https://docs.botkube.io/configuration/executor/ + +Markdown Content: +The executor configuration allows you to define multiple executor configurations that can be later referred in [communication](https://docs.botkube.io/configuration/communication) bindings. For example, take a look at such executor definition: + +executors: "kubectl-global": # This is an executor configuration name, which is referred in communication bindings. botkube/kubectl: # ... trimmed ... "echo": # This is an executor configuration name, which is referred in communication bindings. botkube/echo: # ... trimmed ... + +This can be later used by the communication platforms: + +communications: "default-group": socketSlack: channels: "default": bindings: executors: # The order is important for merging strategy. - kubectl-global # The executor configuration name - echo # The executor configuration name # ... trimmed ... + +To use the Botkube executor plugins, first you need to define the plugins repository under the `plugins` property: + +plugins: repositories: repo-name: url: https://example.com/plugins-index.yaml + +Next, you can configure executor from a given repository: + +executors: "plugins": repo-name/executor-name@v1.0.0: # Plugin name syntax: /[@]. If version is not provided, the latest version from repository is used. enabled: true config: {} For all executor configuration properties, see the [**syntax**](#syntax) section. + +#### Restart Policy and Health Check Interval[​](#restart-policy-and-health-check-interval"DirectlinktoRestartPolicyandHealthCheckInterval") + +This section of the configuration allows you to configure the restart policy for the Botkube executor plugins. The restart policy is used when the executor plugin fails to start. The default restart policy is `DeactivatePlugin`, which means that the plugin is deactivated after a given number of restarts. The restart policy can be configured with the following properties: + +* `type` - restart policy type. Allowed values: `RestartAgent`, `DeactivatePlugin`. +* `threshold` - number of restarts before the policy takes into effect. + +Restart policy types: + +* `RestartAgent` - when the threshold is reached, the Botkube agent is restarted. +* `DeactivatePlugin` - when the threshold is reached, the plugin is deactivated. To activate the plugin again, you need to restart the Botkube agent. + +The health check interval is used to check the health of the executor plugins. The default health check interval is 10 seconds. The health check interval can be configured with the following property: + +* `healthCheckInterval` - health check interval. + +# Botkube Restart Policy on plugin failure.restartPolicy: # Restart policy type. Allowed values: "RestartAgent", "DeactivatePlugin". type: "DeactivatePlugin" # Number of restarts before policy takes into effect. threshold: 10healthCheckInterval: 10s + +Syntax[​](#syntax"DirectlinktoSyntax") +------------------------------------------ + +# Map of executors. The `executors` property name is an alias for a given configuration.# Key name is used as a binding reference.## Format: executors.{alias}executors: "tools": botkube/echo@v1.10.0: # Plugin name syntax: /[@]. If version is not provided, the latest version from repository is used. enabled: true # If not enabled, plugin is not downloaded and started. config: # Plugin's specific configuration. changeResponseToUpperCase: true botkube/kubectl: # If version is not provided, the latest version from repository is used. enabled: true # If not enabled, plugin is not downloaded and started.# Configuration for Botkube executors and sources plugins.plugins: # Directory, where downloaded plugins are cached. cacheDir: "/tmp" # List of plugins repositories. repositories: # This repository serves officially supported Botkube plugins. botkube: url: https://github.com/kubeshop/botkube/releases/download/v1.10.0/plugins-index.yaml # Other 3rd party repositories. repo-name: url: https://example.com/plugins-index.yaml # Configure Incoming webhook for source plugins. incomingWebhook: enabled: true port: 2115 targetPort: 2115 # Botkube Restart Policy on plugin failure. restartPolicy: # Restart policy type. Allowed values: "RestartAgent", "DeactivatePlugin". type: "DeactivatePlugin" # Number of restarts before policy takes into effect. threshold: 10 healthCheckInterval: 10s The default configuration for the Botkube Helm chart can be found in the [values.yaml](https://github.com/kubeshop/botkube/blob/main/helm/botkube/values.yaml) file. diff --git a/hack/assistant-setup/content/docs.botkube.io__configuration__executor__doctor.md b/hack/assistant-setup/content/docs.botkube.io__configuration__executor__doctor.md new file mode 100644 index 0000000..c08ad5d --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__configuration__executor__doctor.md @@ -0,0 +1,10 @@ +Title: Doctor | Botkube + +URL Source: https://docs.botkube.io/configuration/executor/doctor + +Markdown Content: +**This plugin is available as a part of the Botkube Cloud offering.** + +Botkube is introducing new plugins with advanced functionality that will be part of the Botkube Team and Enterprise packages. These advanced plugins require cloud services provided by Botkube and are not part of the Botkube open source software. + +As part of this change, some of the existing Botkube plugins are being moved to a new repository. This repository requires authentication with a Botkube account. To continue using these Botkube plugins, create an account at [https://app.botkube.io/](https://app.botkube.io/) and configure a Botkube instance, or [migrate an existing installation with the Botkube CLI](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud). diff --git a/hack/assistant-setup/content/docs.botkube.io__configuration__executor__exec.md b/hack/assistant-setup/content/docs.botkube.io__configuration__executor__exec.md new file mode 100644 index 0000000..6e6ccba --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__configuration__executor__exec.md @@ -0,0 +1,22 @@ +Title: Exec | Botkube + +URL Source: https://docs.botkube.io/configuration/executor/exec + +Markdown Content: +info + +**This plugin is available as a part of the Botkube Cloud offering.** + +Botkube is introducing new plugins with advanced functionality that will be part of the Botkube Team and Enterprise packages. These advanced plugins require cloud services provided by Botkube and are not part of the Botkube open source software. + +As part of this change, some of the existing Botkube plugins are being moved to a new repository. This repository requires authentication with a Botkube account. To continue using these Botkube plugins, create an account at [https://app.botkube.io/](https://app.botkube.io/) and configure a Botkube instance, or [migrate an existing installation with the Botkube CLI](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud). + +The `exec` executor plugin allows you to install and run CLI applications directly from chat (e.g., Slack, Discord, or Mattermost) without any hassle. + +The `exec` plugin is hosted by the Botkube Cloud plugin repository and requires active Botkube Cloud account. + +By default, the read-only `KUBECONFIG` is assigned. For enabling commands that require create, update or delete rules, you need to create specific (Cluster)Role and (Cluster)RoleBinding and reference it from plugin's `context` configuration. To learn more refer to the [RBAC section](https://docs.botkube.io/configuration/rbac). + +You can enable the plugin as a part of Botkube instance configuration. + +# An array of templates that define how to convert the command output into an interactive message.templates: # Link to templates source # It uses the go-getter library, which supports multiple URL formats (such as HTTP, Git repositories, or S3) and is able to unpack archives. # For more details, see the documentation at https://github.com/hashicorp/go-getter. - ref: github.com/kubeshop/botkube//cmd/executor/exec/templates?ref=release-1.8 diff --git a/hack/assistant-setup/content/docs.botkube.io__configuration__executor__flux.md b/hack/assistant-setup/content/docs.botkube.io__configuration__executor__flux.md new file mode 100644 index 0000000..30e0e7b --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__configuration__executor__flux.md @@ -0,0 +1,55 @@ +Title: Flux | Botkube + +URL Source: https://docs.botkube.io/configuration/executor/flux + +Markdown Content: +Version: 1.10 + +info + +**This plugin is available as a part of the Botkube Cloud offering.** + +Botkube is introducing new plugins with advanced functionality that will be part of the Botkube Team and Enterprise packages. These advanced plugins require cloud services provided by Botkube and are not part of the Botkube open source software. + +As part of this change, some of the existing Botkube plugins are being moved to a new repository. This repository requires authentication with a Botkube account. To continue using these Botkube plugins, create an account at [https://app.botkube.io/](https://app.botkube.io/) and configure a Botkube instance, or [migrate an existing installation with the Botkube CLI](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud). + +The Botkube Flux executor plugin allows you to run the [`flux`](https://fluxcd.io/) CLI commands directly within the chat window of your chosen communication platform. + +The Flux plugin is hosted by the Botkube Cloud plugin repository and requires active Botkube Cloud account. + +Prerequisite elevated RBAC permissions[​](#prerequisite-elevated-rbac-permissions"DirectlinktoPrerequisiteelevatedRBACpermissions") +------------------------------------------------------------------------------------------------------------------------------------------ + +One of the plugin capabilities is the `flux diff` command. To use it, you need to update the Flux plugin RBAC configuration. This is necessary because the command performs a server-side dry run that requires patch permissions, as specified in the [Kubernetes documentation](https://kubernetes.io/docs/reference/using-api/api-concepts/#dry-run-authorization). + +First, create RBAC resources on your cluster: + +cat > /tmp/flux-rbac.yaml << ENDOFFILE---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: fluxrules: - apiGroups: ["*"] resources: ["*"] verbs: ["get", "watch", "list", "patch"]---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: fluxroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: fluxsubjects:- kind: Group name: flux apiGroup: rbac.authorization.k8s.ioENDOFFILEkubectl apply -f /tmp/flux-rbac.yaml Next, use the `flux` group in the plugin RBAC configuration: ![Image 1: Flux RBAC](https://docs.botkube.io/assets/images/flux-rbac-bfe6d7c972bcfd611669afd75a3bab20.png) + +Enabling plugin[​](#enabling-plugin"DirectlinktoEnablingplugin") +--------------------------------------------------------------------- + +You can enable the plugin as a part of Botkube instance configuration. + +1. If you don't have an existing Botkube instance, create a new one, according to the [Installation](https://docs.botkube.io/) docs. +2. From the [Botkube Cloud homepage](https://app.botkube.io/), click on a card of a given Botkube instance. +3. Navigate to the platform tab which you want to configure. +4. Click **Add plugin** button. +5. Select the Flux plugin. +6. Click **Configure** button and then **Configuration as Code** tab. +7. Configure optional GitHub access token. + +The Flux plugin comes with integrated GitHub support. To enable it, you'll need a valid [GitHub token](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/#creating-a-token). Set the token with the following configuration: + +github: auth: accessToken: "" # your GitHub access token + +6. Click **Save** button. + +By default, the Flux plugin has read-only access. To perform actions like creating or deleting Flux-related sources, you'll need to customize the [RBAC](https://docs.botkube.io/configuration/rbac#configuration). + +Configuration Syntax[​](#configuration-syntax"DirectlinktoConfigurationSyntax") +------------------------------------------------------------------------------------ + +The plugin supports the following configuration: + +github: auth: # GitHub access token. # Instructions for token creation: https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/#creating-a-token. # Lack of token may limit functionality, e.g., adding comments to pull requests or approving them. accessToken: ""log: level: "info" diff --git a/hack/assistant-setup/content/docs.botkube.io__configuration__executor__helm.md b/hack/assistant-setup/content/docs.botkube.io__configuration__executor__helm.md new file mode 100644 index 0000000..750439c --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__configuration__executor__helm.md @@ -0,0 +1,10 @@ +Title: Helm | Botkube + +URL Source: https://docs.botkube.io/configuration/executor/helm + +Markdown Content: +**This plugin is available as a part of the Botkube Cloud offering.** + +Botkube is introducing new plugins with advanced functionality that will be part of the Botkube Team and Enterprise packages. These advanced plugins require cloud services provided by Botkube and are not part of the Botkube open source software. + +As part of this change, some of the existing Botkube plugins are being moved to a new repository. This repository requires authentication with a Botkube account. To continue using these Botkube plugins, create an account at [https://app.botkube.io/](https://app.botkube.io/) and configure a Botkube instance, or [migrate an existing installation with the Botkube CLI](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud). diff --git a/hack/assistant-setup/content/docs.botkube.io__configuration__executor__kubectl.md b/hack/assistant-setup/content/docs.botkube.io__configuration__executor__kubectl.md new file mode 100644 index 0000000..c369a91 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__configuration__executor__kubectl.md @@ -0,0 +1,18 @@ +Title: Kubectl | Botkube + +URL Source: https://docs.botkube.io/configuration/executor/kubectl + +Markdown Content: +The Botkube Kubectl executor plugin allows you to run the `kubectl` command directly in the chat window of each communication platform. + +By default, just the read-only `kubectl` commands are supported. For enabling commands that require create, update or delete rules, you need to create specific (Cluster)Role and (Cluster)RoleBinding and reference it in the RBAC configuration. To learn more, refer to the [RBAC section](https://docs.botkube.io/configuration/rbac). + +The Kubectl plugin is hosted by the official Botkube plugin repository. First, make sure that the `botkube` repository is defined under `plugins` in the [values.yaml](https://github.com/kubeshop/botkube/blob/main/helm/botkube/values.yaml) file. + +To enable Kubectl executor, add \``--set 'executors.k8s-default-tools.botkube/kubectl.enabled=true'` to a given Botkube [`install` command](https://docs.botkube.io/cli/commands/botkube_install). + +# Configures the default Namespace for executing Botkube `kubectl` commands. If not set, uses the 'default'.defaultNamespace: "default"# Configures the interactive kubectl command builder.interactiveBuilder: allowed: # Configures which K8s namespace are displayed in namespace dropdown. # If not specified, plugin needs to have access to fetch all Namespaces, otherwise Namespace dropdown won't be visible at all. namespaces: ["default"] # Configures which `kubectl` methods are displayed in commands dropdown. verbs: ["api-resources", "api-versions", "cluster-info", "describe", "explain", "get", "logs", "top"] # Configures which K8s resource are displayed in resources dropdown. resources: ["deployments", "pods", "namespaces"] + +For all collected `kubectl` executors bindings, configuration properties are overridden based on the order of the binding list for a given channel. The priority is given to the last binding specified on the list. Empty properties are omitted. + +communications: "default-group": socketSlack: channels: "default": name: "random" bindings: executors: - kubectl-one - kubectl-two - kubectl-threeexecutors: "kubectl-one": kubectl: enabled: true config: defaultNamespace: "default" interactiveBuilder: allowed: verbs: ["api-resources", "api-versions", "cluster-info", "describe", "explain", "get", "logs", "top"] resources: ["deployments", "pods", "namespaces"] "kubectl-two": kubectl: enabled: true config: interactiveBuilder: allowed: namespaces: ["default"] verbs: ["api-resources", "top"] "kubectl-three": kubectl: enabled: false config: interactiveBuilder: allowed: namespaces: ["kube-system"] diff --git a/hack/assistant-setup/content/docs.botkube.io__configuration__general.md b/hack/assistant-setup/content/docs.botkube.io__configuration__general.md new file mode 100644 index 0000000..4ae7981 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__configuration__general.md @@ -0,0 +1,8 @@ +Title: General | Botkube + +URL Source: https://docs.botkube.io/configuration/general + +Markdown Content: +The general settings holds a general configuration for the Botkube backend. For example, log level, disabling config watcher and similar. + +# General Botkube configuration.settings: # Cluster name to differentiate incoming messages. clusterName: not-configured # If true, notifies about new Botkube releases. upgradeNotifier: true # Botkube logging settings. log: # Sets one of the log levels. Allowed values: `info`, `warn`, `debug`, `error`, `fatal`, `panic`. level: info # Configures log format. Allowed values: `text`, `json`. formatter: json # If true, disable ANSI colors in logging. Ignored when `json` formatter is used. disableColors: false# Parameters for the Config Watcher component which reloads Botkube on ConfigMap changes.# It restarts Botkube when configuration data change is detected. It watches ConfigMaps and/or Secrets with the `botkube.io/config-watch: "true"` label from the namespace where Botkube is installed.configWatcher: # If true, restarts the Botkube Pod on config changes. enabled: true # In-cluster Config Watcher configuration. It is used when remote configuration is not provided. inCluster: # Resync period for the Config Watcher informers. informerResyncPeriod: 10m diff --git a/hack/assistant-setup/content/docs.botkube.io__configuration__helm-chart-parameters.md b/hack/assistant-setup/content/docs.botkube.io__configuration__helm-chart-parameters.md new file mode 100644 index 0000000..9b4bee4 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__configuration__helm-chart-parameters.md @@ -0,0 +1,6 @@ +Title: Helm chart parameters | Botkube + +URL Source: https://docs.botkube.io/configuration/helm-chart-parameters + +Markdown Content: +[image.registry](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L14)string`"ghcr.io"`Botkube container image registry.[image.repository](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L16)string`"kubeshop/botkube"`Botkube container image repository.[image.pullPolicy](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L18)string`"IfNotPresent"`Botkube container image pull policy.[image.tag](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L20)string`"v1.10.0"`Botkube container image tag. Default tag is `appVersion` from Chart.yaml.[podSecurityPolicy](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L24)object`{"enabled":false}`Configures Pod Security Policy to allow Botkube to run in restricted clusters. [Ref doc](https://kubernetes.io/docs/concepts/policy/pod-security-policy/).[securityContext](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L30)objectRuns as a Non-Privileged user.Configures security context to manage user Privileges in Pod. [Ref doc](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod).[containerSecurityContext](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L36)object`{"allowPrivilegeEscalation":false,"privileged":false,"readOnlyRootFilesystem":true}`Configures container security context. [Ref doc](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container).[rbac](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L43)object`{"create":true,"groups":{"botkube-plugins-default":{"create":true,"rules":[{"apiGroups":["*"],"resources":["*"],"verbs":["get","watch","list"]}]}},"rules":[],"serviceAccountMountPath":"/var/run/7e7fd2f5-b15d-4803-bc52-f54fba357e76/secrets/kubernetes.io/serviceaccount","staticGroupName":""}`Role Based Access for Botkube Pod and plugins. [Ref doc](https://kubernetes.io/docs/admin/authorization/rbac/).[rbac.serviceAccountMountPath](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L47)string`"/var/run/7e7fd2f5-b15d-4803-bc52-f54fba357e76/secrets/kubernetes.io/serviceaccount"`It is used to specify a custom path for mounting a service account to the Botkube deployment. This is important because we run plugins within the same Pod, and we want to avoid potential bugs when plugins rely on the default in-cluster K8s client configuration. Instead, they should always use kubeconfig specified directly for a given plugin.[rbac.create](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L50)bool`true`Configure RBAC resources for Botkube and (deprecated) `staticGroupName` subject with `rules`. For creating RBAC resources related to plugin permissions, use the `groups` property.[rbac.rules](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L52)list`[]`Deprecated. Use `rbac.groups` instead.[rbac.staticGroupName](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L54)string`""`Deprecated. Use `rbac.groups` instead.[rbac.groups](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L56)object`{"botkube-plugins-default":{"create":true,"rules":[{"apiGroups":["*"],"resources":["*"],"verbs":["get","watch","list"]}]}}`Use this to create RBAC resources for specified group subjects.[kubeconfig.enabled](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L67)bool`false`If true, enables overriding the Kubernetes auth.[kubeconfig.base64Config](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L69)string`""`A base64 encoded kubeconfig that will be stored in a Secret, mounted to the Pod, and specified in the KUBECONFIG environment variable.[kubeconfig.existingSecret](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L74)string`""`A Secret containing a kubeconfig to use.[actions](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L81)objectSee the `values.yaml` file for full object.Map of actions. Action contains configuration for automation based on observed events. The property name under `actions` object is an alias for a given configuration. You can define multiple actions configuration with different names.[actions.describe-created-resource.enabled](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L84)bool`false`If true, enables the action.[actions.describe-created-resource.displayName](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L86)string`"Describe created resource"`Action display name posted in the channels bound to the same source bindings.[actions.describe-created-resource.command](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L91)stringSee the `values.yaml` file for the command in the Go template form.Command to execute when the action is triggered. You can use Go template ([https://pkg.go.dev/text/template](https://pkg.go.dev/text/template)) together with all helper functions defined by Slim-Sprig library ([https://go-task.github.io/slim-sprig](https://go-task.github.io/slim-sprig)). You can use the `{{ .Event }}` variable, which contains the event object that triggered the action. See all available Kubernetes event properties on [https://github.com/kubeshop/botkube/blob/main/internal/source/kubernetes/event/event.go](https://github.com/kubeshop/botkube/blob/main/internal/source/kubernetes/event/event.go).[actions.describe-created-resource.bindings](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L94)object`{"executors":["k8s-default-tools"],"sources":["k8s-create-events"]}`Bindings for a given action.[actions.describe-created-resource.bindings.sources](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L96)list`["k8s-create-events"]`Event sources that trigger a given action.[actions.describe-created-resource.bindings.executors](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L99)list`["k8s-default-tools"]`Executors configuration used to execute a configured command.[actions.show-logs-on-error.enabled](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L103)bool`false`If true, enables the action.[actions.show-logs-on-error.displayName](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L106)string`"Show logs on error"`Action display name posted in the channels bound to the same source bindings.[actions.show-logs-on-error.command](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L111)stringSee the `values.yaml` file for the command in the Go template form.Command to execute when the action is triggered. You can use Go template ([https://pkg.go.dev/text/template](https://pkg.go.dev/text/template)) together with all helper functions defined by Slim-Sprig library ([https://go-task.github.io/slim-sprig](https://go-task.github.io/slim-sprig)). You can use the `{{ .Event }}` variable, which contains the event object that triggered the action. See all available Kubernetes event properties on [https://github.com/kubeshop/botkube/blob/main/internal/source/kubernetes/event/event.go](https://github.com/kubeshop/botkube/blob/main/internal/source/kubernetes/event/event.go).[actions.show-logs-on-error.bindings](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L113)object`{"executors":["k8s-default-tools"],"sources":["k8s-err-with-logs-events"]}`Bindings for a given action.[actions.show-logs-on-error.bindings.sources](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L115)list`["k8s-err-with-logs-events"]`Event sources that trigger a given action.[actions.show-logs-on-error.bindings.executors](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L118)list`["k8s-default-tools"]`Executors configuration used to execute a configured command.[sources](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L127)objectSee the `values.yaml` file for full object.Map of sources. Source contains configuration for Kubernetes events and sending recommendations. The property name under `sources` object is an alias for a given configuration. You can define multiple sources configuration with different names. Key name is used as a binding reference.[sources.k8s-recommendation-events.botkube/kubernetes](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L132)objectSee the `values.yaml` file for full object.Describes Kubernetes source configuration.[sources.k8s-all-events.botkube/kubernetes.context.rbac](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L135)object`{"group":{"prefix":"","static":{"values":["botkube-plugins-default"]},"type":"Static"}}`RBAC configuration for this plugin.[sources.k8s-create-events.botkube/kubernetes.context.rbac](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L135)object`{"group":{"prefix":"","static":{"values":["botkube-plugins-default"]},"type":"Static"}}`RBAC configuration for this plugin.[sources.k8s-recommendation-events.botkube/kubernetes.context.rbac](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L135)object`{"group":{"prefix":"","static":{"values":["botkube-plugins-default"]},"type":"Static"}}`RBAC configuration for this plugin.[executors.k8s-default-tools.botkube/kubectl.context.rbac](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L135)object`{"group":{"prefix":"","static":{"values":["botkube-plugins-default"]},"type":"Static"}}`RBAC configuration for this plugin.[sources.k8s-err-events.botkube/kubernetes.context.rbac](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L135)object`{"group":{"prefix":"","static":{"values":["botkube-plugins-default"]},"type":"Static"}}`RBAC configuration for this plugin.[sources.k8s-err-with-logs-events.botkube/kubernetes.context.rbac](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L135)object`{"group":{"prefix":"","static":{"values":["botkube-plugins-default"]},"type":"Static"}}`RBAC configuration for this plugin.[sources.k8s-create-events.botkube/kubernetes.context.rbac.group.type](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L138)string`"Static"`Static impersonation for a given username and groups.[sources.k8s-err-events.botkube/kubernetes.context.rbac.group.type](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L138)string`"Static"`Static impersonation for a given username and groups.[sources.k8s-err-with-logs-events.botkube/kubernetes.context.rbac.group.type](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L138)string`"Static"`Static impersonation for a given username and groups.[sources.k8s-recommendation-events.botkube/kubernetes.context.rbac.group.type](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L138)string`"Static"`Static impersonation for a given username and groups.[executors.k8s-default-tools.botkube/kubectl.context.rbac.group.type](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L138)string`"Static"`Static impersonation for a given username and groups.[sources.k8s-all-events.botkube/kubernetes.context.rbac.group.type](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L138)string`"Static"`Static impersonation for a given username and groups.[executors.k8s-default-tools.botkube/kubectl.context.rbac.group.prefix](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L140)string`""`Prefix that will be applied to .static.value\[\*\].[sources.k8s-err-events.botkube/kubernetes.context.rbac.group.prefix](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L140)string`""`Prefix that will be applied to .static.value\[\*\].[sources.k8s-all-events.botkube/kubernetes.context.rbac.group.prefix](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L140)string`""`Prefix that will be applied to .static.value\[\*\].[sources.k8s-err-with-logs-events.botkube/kubernetes.context.rbac.group.prefix](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L140)string`""`Prefix that will be applied to .static.value\[\*\].[sources.k8s-recommendation-events.botkube/kubernetes.context.rbac.group.prefix](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L140)string`""`Prefix that will be applied to .static.value\[\*\].[sources.k8s-create-events.botkube/kubernetes.context.rbac.group.prefix](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L140)string`""`Prefix that will be applied to .static.value\[\*\].[sources.k8s-recommendation-events.botkube/kubernetes.context.rbac.group.static.values](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L143)list`["botkube-plugins-default"]`Name of group.rbac.authorization.k8s.io the plugin will be bound to.[sources.k8s-err-events.botkube/kubernetes.context.rbac.group.static.values](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L143)list`["botkube-plugins-default"]`Name of group.rbac.authorization.k8s.io the plugin will be bound to.[sources.k8s-all-events.botkube/kubernetes.context.rbac.group.static.values](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L143)list`["botkube-plugins-default"]`Name of group.rbac.authorization.k8s.io the plugin will be bound to.[sources.k8s-err-with-logs-events.botkube/kubernetes.context.rbac.group.static.values](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L143)list`["botkube-plugins-default"]`Name of group.rbac.authorization.k8s.io the plugin will be bound to.[sources.k8s-create-events.botkube/kubernetes.context.rbac.group.static.values](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L143)list`["botkube-plugins-default"]`Name of group.rbac.authorization.k8s.io the plugin will be bound to.[executors.k8s-default-tools.botkube/kubectl.context.rbac.group.static.values](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L143)list`["botkube-plugins-default"]`Name of group.rbac.authorization.k8s.io the plugin will be bound to.[sources.k8s-recommendation-events.botkube/kubernetes.config.recommendations](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L157)object`{"ingress":{"backendServiceValid":true,"tlsSecretValid":true},"pod":{"labelsSet":true,"noLatestImageTag":true}}`Describes configuration for various recommendation insights.[sources.k8s-recommendation-events.botkube/kubernetes.config.recommendations.pod](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L159)object`{"labelsSet":true,"noLatestImageTag":true}`Recommendations for Pod Kubernetes resource.[sources.k8s-recommendation-events.botkube/kubernetes.config.recommendations.pod.noLatestImageTag](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L161)bool`true`If true, notifies about Pod containers that use `latest` tag for images.[sources.k8s-recommendation-events.botkube/kubernetes.config.recommendations.pod.labelsSet](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L163)bool`true`If true, notifies about Pod resources created without labels.[sources.k8s-recommendation-events.botkube/kubernetes.config.recommendations.ingress](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L165)object`{"backendServiceValid":true,"tlsSecretValid":true}`Recommendations for Ingress Kubernetes resource.[sources.k8s-recommendation-events.botkube/kubernetes.config.recommendations.ingress.backendServiceValid](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L167)bool`true`If true, notifies about Ingress resources with invalid backend service reference.[sources.k8s-recommendation-events.botkube/kubernetes.config.recommendations.ingress.tlsSecretValid](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L169)bool`true`If true, notifies about Ingress resources with invalid TLS secret reference.[sources.k8s-all-events.botkube/kubernetes](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L175)objectSee the `values.yaml` file for full object.Describes Kubernetes source configuration.[sources.k8s-all-events.botkube/kubernetes.config.filters](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L181)objectSee the `values.yaml` file for full object.Filter settings for various sources.[sources.k8s-all-events.botkube/kubernetes.config.filters.objectAnnotationChecker](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L183)bool`true`If true, enables support for `botkube.io/disable` resource annotation.[sources.k8s-all-events.botkube/kubernetes.config.filters.nodeEventsChecker](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L185)bool`true`If true, filters out Node-related events that are not important.[sources.k8s-all-events.botkube/kubernetes.config.namespaces](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L189)object`{"include":[".*"]}`Describes namespaces for every Kubernetes resources you want to watch or exclude. These namespaces are applied to every resource specified in the resources list. However, every specified resource can override this by using its own namespaces object.[sources.k8s-create-events.botkube/kubernetes.config.namespaces.include](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L193)list`[".*"]`Include contains a list of allowed Namespaces. It can also contain regex expressions: `- ".*"` - to specify all Namespaces.[sources.k8s-all-events.botkube/kubernetes.config.namespaces.include](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L193)list`[".*"]`Include contains a list of allowed Namespaces. It can also contain regex expressions: `- ".*"` - to specify all Namespaces.[sources.k8s-err-events.botkube/kubernetes.config.namespaces.include](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L193)list`[".*"]`Include contains a list of allowed Namespaces. It can also contain regex expressions: `- ".*"` - to specify all Namespaces.[sources.k8s-err-with-logs-events.botkube/kubernetes.config.namespaces.include](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L193)list`[".*"]`Include contains a list of allowed Namespaces. It can also contain regex expressions: `- ".*"` - to specify all Namespaces.[sources.k8s-all-events.botkube/kubernetes.config.event](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L203)object`{"message":{"exclude":[],"include":[]},"reason":{"exclude":[],"include":[]},"types":["create","delete","error"]}`Describes event constraints for Kubernetes resources. These constraints are applied for every resource specified in the `resources` list, unless they are overridden by the resource's own `events` object.[sources.k8s-all-events.botkube/kubernetes.config.event.types](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L205)list`["create","delete","error"]`Lists all event types to be watched.[sources.k8s-all-events.botkube/kubernetes.config.event.reason](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L211)object`{"exclude":[],"include":[]}`Optional list of exact values or regex patterns to filter events by event reason. Skipped, if both include/exclude lists are empty.[sources.k8s-all-events.botkube/kubernetes.config.event.reason.include](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L213)list`[]`Include contains a list of allowed values. It can also contain regex expressions.[sources.k8s-all-events.botkube/kubernetes.config.event.reason.exclude](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L216)list`[]`Exclude contains a list of values to be ignored even if allowed by Include. It can also contain regex expressions. Exclude list is checked before the Include list.[sources.k8s-all-events.botkube/kubernetes.config.event.message](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L219)object`{"exclude":[],"include":[]}`Optional list of exact values or regex patterns to filter event by event message. Skipped, if both include/exclude lists are empty. If a given event has multiple messages, it is considered a match if any of the messages match the constraints.[sources.k8s-all-events.botkube/kubernetes.config.event.message.include](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L221)list`[]`Include contains a list of allowed values. It can also contain regex expressions.[sources.k8s-all-events.botkube/kubernetes.config.event.message.exclude](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L224)list`[]`Exclude contains a list of values to be ignored even if allowed by Include. It can also contain regex expressions. Exclude list is checked before the Include list.[sources.k8s-all-events.botkube/kubernetes.config.annotations](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L228)object`{}`Filters Kubernetes resources to watch by annotations. Each resource needs to have all the specified annotations. Regex expressions are not supported.[sources.k8s-all-events.botkube/kubernetes.config.labels](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L231)object`{}`Filters Kubernetes resources to watch by labels. Each resource needs to have all the specified labels. Regex expressions are not supported.[sources.k8s-all-events.botkube/kubernetes.config.resources](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L238)listSee the `values.yaml` file for full object.Describes the Kubernetes resources to watch. Resources are identified by its type in `{group}/{version}/{kind (plural)}` format. Examples: `apps/v1/deployments`, `v1/pods`. Each resource can override the namespaces and event configuration by using dedicated `event` and `namespaces` field. Also, each resource can specify its own `annotations`, `labels` and `name` regex.[sources.k8s-err-events.botkube/kubernetes](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L352)objectSee the `values.yaml` file for full object.Describes Kubernetes source configuration.[sources.k8s-err-events.botkube/kubernetes.config.namespaces](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L359)object`{"include":[".*"]}`Describes namespaces for every Kubernetes resources you want to watch or exclude. These namespaces are applied to every resource specified in the resources list. However, every specified resource can override this by using its own namespaces object.[sources.k8s-err-events.botkube/kubernetes.config.event](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L363)object`{"types":["error"]}`Describes event constraints for Kubernetes resources. These constraints are applied for every resource specified in the `resources` list, unless they are overridden by the resource's own `events` object.[sources.k8s-err-events.botkube/kubernetes.config.event.types](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L365)list`["error"]`Lists all event types to be watched.[sources.k8s-err-events.botkube/kubernetes.config.resources](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L370)listSee the `values.yaml` file for full object.Describes the Kubernetes resources you want to watch.[sources.k8s-err-with-logs-events.botkube/kubernetes](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L396)objectSee the `values.yaml` file for full object.Describes Kubernetes source configuration.[sources.k8s-err-with-logs-events.botkube/kubernetes.config.namespaces](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L403)object`{"include":[".*"]}`Describes namespaces for every Kubernetes resources you want to watch or exclude. These namespaces are applied to every resource specified in the resources list. However, every specified resource can override this by using its own namespaces object.[sources.k8s-err-with-logs-events.botkube/kubernetes.config.event](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L407)object`{"types":["error"]}`Describes event constraints for Kubernetes resources. These constraints are applied for every resource specified in the `resources` list, unless they are overridden by the resource's own `events` object.[sources.k8s-err-with-logs-events.botkube/kubernetes.config.event.types](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L409)list`["error"]`Lists all event types to be watched.[sources.k8s-err-with-logs-events.botkube/kubernetes.config.resources](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L414)listSee the `values.yaml` file for full object.Describes the Kubernetes resources you want to watch.[sources.k8s-create-events.botkube/kubernetes](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L427)objectSee the `values.yaml` file for full object.Describes Kubernetes source configuration.[sources.k8s-create-events.botkube/kubernetes.config.namespaces](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L434)object`{"include":[".*"]}`Describes namespaces for every Kubernetes resources you want to watch or exclude. These namespaces are applied to every resource specified in the resources list. However, every specified resource can override this by using its own namespaces object.[sources.k8s-create-events.botkube/kubernetes.config.event](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L438)object`{"types":["create"]}`Describes event constraints for Kubernetes resources. These constraints are applied for every resource specified in the `resources` list, unless they are overridden by the resource's own `events` object.[sources.k8s-create-events.botkube/kubernetes.config.event.types](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L440)list`["create"]`Lists all event types to be watched.[sources.k8s-create-events.botkube/kubernetes.config.resources](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L445)listSee the `values.yaml` file for full object.Describes the Kubernetes resources you want to watch.[executors](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L463)objectSee the `values.yaml` file for full object.Map of executors. Executor contains configuration for running `kubectl` commands. The property name under `executors` is an alias for a given configuration. You can define multiple executor configurations with different names. Key name is used as a binding reference.[executors.k8s-default-tools.botkube/kubectl.config](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L472)objectSee the `values.yaml` file for full object including optional properties related to interactive builder.Custom kubectl configuration.[aliases](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L497)objectSee the `values.yaml` file for full object.Custom aliases for given commands. The aliases are replaced with the underlying command before executing it. Aliases can replace a single word or multiple ones. For example, you can define a `k` alias for `kubectl`, or `kgp` for `kubectl get pods`.[existingCommunicationsSecretName](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L518)string`""`Configures existing Secret with communication settings. It MUST be in the `botkube` Namespace. To reload Botkube once it changes, add label `botkube.io/config-watch: "true"`.[communications](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L525)objectSee the `values.yaml` file for full object.Map of communication groups. Communication group contains settings for multiple communication platforms. The property name under `communications` object is an alias for a given configuration group. You can define multiple communication groups with different names.[communications.default-group.socketSlack.enabled](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L530)bool`false`If true, enables Slack bot.[communications.default-group.socketSlack.channels](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L534)object`{"default":{"bindings":{"executors":["k8s-default-tools"],"sources":["k8s-err-events","k8s-recommendation-events"]},"name":"SLACK_CHANNEL"}}`Map of configured channels. The property name under `channels` object is an alias for a given configuration.[communications.default-group.socketSlack.channels.default.name](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L537)string`"SLACK_CHANNEL"`Slack channel name without '#' prefix where you have added Botkube and want to receive notifications in.[communications.default-group.socketSlack.channels.default.bindings.executors](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L540)list`["k8s-default-tools"]`Executors configuration for a given channel.[communications.default-group.socketSlack.channels.default.bindings.sources](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L543)list`["k8s-err-events","k8s-recommendation-events"]`Notification sources configuration for a given channel.[communications.default-group.socketSlack.botToken](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L548)string`""`Slack bot token for your own Slack app. [Ref doc](https://api.slack.com/authentication/token-types).[communications.default-group.socketSlack.appToken](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L551)string`""`Slack app-level token for your own Slack app. [Ref doc](https://api.slack.com/authentication/token-types).[communications.default-group.mattermost.enabled](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L555)bool`false`If true, enables Mattermost bot.[communications.default-group.mattermost.botName](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L557)string`"Botkube"`User in Mattermost which belongs the specified Personal Access token.[communications.default-group.mattermost.url](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L559)string`"MATTERMOST_SERVER_URL"`The URL (including http/https schema) where Mattermost is running. e.g [https://example.com:9243](https://example.com:9243/)[communications.default-group.mattermost.token](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L561)string`"MATTERMOST_TOKEN"`Personal Access token generated by Botkube user.[communications.default-group.mattermost.team](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L563)string`"MATTERMOST_TEAM"`The Mattermost Team name where Botkube is added.[communications.default-group.mattermost.channels](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L567)object`{"default":{"bindings":{"executors":["k8s-default-tools"],"sources":["k8s-err-events","k8s-recommendation-events"]},"name":"MATTERMOST_CHANNEL","notification":{"disabled":false}}}`Map of configured channels. The property name under `channels` object is an alias for a given configuration.[communications.default-group.mattermost.channels.default.name](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L571)string`"MATTERMOST_CHANNEL"`The Mattermost channel name for receiving Botkube alerts. The Botkube user needs to be added to it.[communications.default-group.mattermost.channels.default.notification.disabled](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L574)bool`false`If true, the notifications are not sent to the channel. They can be enabled with `@Botkube` command anytime.[communications.default-group.mattermost.channels.default.bindings.executors](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L577)list`["k8s-default-tools"]`Executors configuration for a given channel.[communications.default-group.mattermost.channels.default.bindings.sources](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L580)list`["k8s-err-events","k8s-recommendation-events"]`Notification sources configuration for a given channel.[communications.default-group.discord.enabled](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L587)bool`false`If true, enables Discord bot.[communications.default-group.discord.token](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L589)string`"DISCORD_TOKEN"`Botkube Bot Token.[communications.default-group.discord.botID](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L591)string`"DISCORD_BOT_ID"`Botkube Application Client ID.[communications.default-group.discord.channels](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L595)object`{"default":{"bindings":{"executors":["k8s-default-tools"],"sources":["k8s-err-events","k8s-recommendation-events"]},"id":"DISCORD_CHANNEL_ID","notification":{"disabled":false}}}`Map of configured channels. The property name under `channels` object is an alias for a given configuration.[communications.default-group.discord.channels.default.id](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L599)string`"DISCORD_CHANNEL_ID"`Discord channel ID for receiving Botkube alerts. The Botkube user needs to be added to it.[communications.default-group.discord.channels.default.notification.disabled](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L602)bool`false`If true, the notifications are not sent to the channel. They can be enabled with `@Botkube` command anytime.[communications.default-group.discord.channels.default.bindings.executors](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L605)list`["k8s-default-tools"]`Executors configuration for a given channel.[communications.default-group.discord.channels.default.bindings.sources](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L608)list`["k8s-err-events","k8s-recommendation-events"]`Notification sources configuration for a given channel.[communications.default-group.elasticsearch.enabled](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L615)bool`false`If true, enables Elasticsearch.[communications.default-group.elasticsearch.awsSigning.enabled](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L619)bool`false`If true, enables awsSigning using IAM for Elasticsearch hosted on AWS. Make sure AWS environment variables are set. [Ref doc](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html).[communications.default-group.elasticsearch.awsSigning.awsRegion](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L621)string`"us-east-1"`AWS region where Elasticsearch is deployed.[communications.default-group.elasticsearch.awsSigning.roleArn](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L623)string`""`AWS IAM Role arn to assume for credentials, use this only if you don't want to use the EC2 instance role or not running on AWS instance.[communications.default-group.elasticsearch.server](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L625)string`"ELASTICSEARCH_ADDRESS"`The server URL, e.g [https://example.com:9243](https://example.com:9243/)[communications.default-group.elasticsearch.username](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L627)string`"ELASTICSEARCH_USERNAME"`Basic Auth username.[communications.default-group.elasticsearch.password](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L629)string`"ELASTICSEARCH_PASSWORD"`Basic Auth password.[communications.default-group.elasticsearch.skipTLSVerify](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L632)bool`false`If true, skips the verification of TLS certificate of the Elastic nodes. It's useful for clusters with self-signed certificates.[communications.default-group.elasticsearch.logLevel](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L639)string`""`Specify the log level for Elasticsearch client. Leave empty to disable logging.[communications.default-group.elasticsearch.indices](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L644)object`{"default":{"bindings":{"sources":["k8s-err-events","k8s-recommendation-events"]},"name":"botkube","replicas":0,"shards":1,"type":"botkube-event"}}`Map of configured indices. The `indices` property name is an alias for a given configuration.[communications.default-group.elasticsearch.indices.default.name](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L647)string`"botkube"`Configures Elasticsearch index settings.[communications.default-group.elasticsearch.indices.default.bindings.sources](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L653)list`["k8s-err-events","k8s-recommendation-events"]`Notification sources configuration for a given index.[communications.default-group.webhook.enabled](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L660)bool`false`If true, enables Webhook.[communications.default-group.webhook.url](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L662)string`"WEBHOOK_URL"`The Webhook URL, e.g.: [https://example.com:80](https://example.com:80/)[communications.default-group.webhook.bindings.sources](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L665)list`["k8s-err-events","k8s-recommendation-events"]`Notification sources configuration for the webhook.[settings.clusterName](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L672)string`"not-configured"`Cluster name to differentiate incoming messages.[settings.healthPort](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L675)int`2114`Health check port.[settings.upgradeNotifier](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L677)bool`true`If true, notifies about new Botkube releases.[settings.log.level](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L681)string`"info"`Sets one of the log levels. Allowed values: `info`, `warn`, `debug`, `error`, `fatal`, `panic`.[settings.log.disableColors](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L683)bool`false`If true, disable ANSI colors in logging. Ignored when `json` formatter is used.[settings.log.formatter](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L685)string`"json"`Configures log format. Allowed values: `text`, `json`.[settings.systemConfigMap](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L688)object`{"name":"botkube-system"}`Botkube's system ConfigMap where internal data is stored.[settings.persistentConfig](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L693)object`{"runtime":{"configMap":{"annotations":{},"name":"botkube-runtime-config"},"fileName":"_runtime_state.yaml"},"startup":{"configMap":{"annotations":{},"name":"botkube-startup-config"},"fileName":"_startup_state.yaml"}}`Persistent config contains ConfigMap where persisted configuration is stored. The persistent configuration is evaluated from both chart upgrade and Botkube commands used in runtime.[ssl.enabled](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L708)bool`false`If true, specify cert path in `config.ssl.cert` property or K8s Secret in `config.ssl.existingSecretName`.[ssl.existingSecretName](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L714)string`""`Using existing SSL Secret. It MUST be in `botkube` Namespace.[ssl.cert](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L717)string`""`SSL Certificate file e.g certs/my-cert.crt.[service](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L720)object`{"name":"metrics","port":2112,"targetPort":2112}`Configures Service settings for ServiceMonitor CR.[serviceMonitor](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L727)object`{"enabled":false,"interval":"10s","labels":{},"path":"/metrics","port":"metrics"}`Configures ServiceMonitor settings. [Ref doc](https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#servicemonitor).[deployment.annotations](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L737)object`{}`Extra annotations to pass to the Botkube Deployment.[deployment.livenessProbe](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L739)object`{"failureThreshold":35,"initialDelaySeconds":1,"periodSeconds":2,"successThreshold":1,"timeoutSeconds":1}`Liveness probe.[deployment.livenessProbe.initialDelaySeconds](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L741)int`1`The liveness probe initial delay seconds.[deployment.livenessProbe.periodSeconds](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L743)int`2`The liveness probe period seconds.[deployment.livenessProbe.timeoutSeconds](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L745)int`1`The liveness probe timeout seconds.[deployment.livenessProbe.failureThreshold](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L747)int`35`The liveness probe failure threshold.[deployment.livenessProbe.successThreshold](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L749)int`1`The liveness probe success threshold.[deployment.readinessProbe](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L752)object`{"failureThreshold":35,"initialDelaySeconds":1,"periodSeconds":2,"successThreshold":1,"timeoutSeconds":1}`Readiness probe.[deployment.readinessProbe.initialDelaySeconds](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L754)int`1`The readiness probe initial delay seconds.[deployment.readinessProbe.periodSeconds](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L756)int`2`The readiness probe period seconds.[deployment.readinessProbe.timeoutSeconds](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L758)int`1`The readiness probe timeout seconds.[deployment.readinessProbe.failureThreshold](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L760)int`35`The readiness probe failure threshold.[deployment.readinessProbe.successThreshold](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L762)int`1`The readiness probe success threshold.[extraAnnotations](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L769)object`{}`Extra annotations to pass to the Botkube Pod.[extraLabels](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L771)object`{}`Extra labels to pass to the Botkube Pod.[priorityClassName](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L773)string`""`Priority class name for the Botkube Pod.[nameOverride](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L776)string`""`Fully override "botkube.name" template.[fullnameOverride](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L778)string`""`Fully override "botkube.fullname" template.[resources](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L784)object`{}`The Botkube Pod resource request and limits. We usually recommend not to specify default resources and to leave this as a conscious choice for the user. This also increases chances charts run on environments with little resources, such as Minikube. [Ref docs](https://kubernetes.io/docs/user-guide/compute-resources/)[extraEnv](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L796)list`[{"name":"LOG_LEVEL_SOURCE_BOTKUBE_KUBERNETES","value":"debug"}]`Extra environment variables to pass to the Botkube container. [Ref docs](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#environment-variables).[extraVolumes](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L810)list`[]`Extra volumes to pass to the Botkube container. Mount it later with extraVolumeMounts. [Ref docs](https://kubernetes.io/docs/reference/kubernetes-api/config-and-storage-resources/volume/#Volume).[extraVolumeMounts](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L825)list`[]`Extra volume mounts to pass to the Botkube container. [Ref docs](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#volumes-1).[nodeSelector](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L843)object`{}`Node labels for Botkube Pod assignment. [Ref doc](https://kubernetes.io/docs/user-guide/node-selection/).[tolerations](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L847)list`[]`Tolerations for Botkube Pod assignment. [Ref doc](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/).[affinity](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L851)object`{}`Affinity for Botkube Pod assignment. [Ref doc](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity).[serviceAccount.create](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L855)bool`true`If true, a ServiceAccount is automatically created.[serviceAccount.name](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L858)string`""`The name of the service account to use. If not set, a name is generated using the fullname template.[serviceAccount.annotations](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L860)object`{}`Extra annotations for the ServiceAccount.[extraObjects](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L863)list`[]`Extra Kubernetes resources to create. Helm templating is allowed as it is evaluated before creating the resources.[analytics.disable](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L891)bool`false`If true, sending anonymous analytics is disabled. To learn what date we collect, see [Privacy Policy](https://docs.botkube.io/privacy#privacy-policy).[configWatcher](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L895)object`{"enabled":true,"inCluster":{"informerResyncPeriod":"10m"}}`Parameters for the Config Watcher component which reloads Botkube on ConfigMap changes. It restarts Botkube when configuration data change is detected. It watches ConfigMaps and/or Secrets with the `botkube.io/config-watch: "true"` label from the namespace where Botkube is installed.[configWatcher.enabled](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L897)bool`true`If true, restarts the Botkube Pod on config changes.[configWatcher.inCluster](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L899)object`{"informerResyncPeriod":"10m"}`In-cluster Config Watcher configuration. It is used when remote configuration is not provided.[configWatcher.inCluster.informerResyncPeriod](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L901)string`"10m"`Resync period for the Config Watcher informers.[plugins](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L904)object`{"cacheDir":"/tmp","healthCheckInterval":"10s","incomingWebhook":{"enabled":true,"port":2115,"targetPort":2115},"repositories":{"botkube":{"url":"https://github.com/kubeshop/botkube/releases/download/v1.10.0/plugins-index.yaml"}},"restartPolicy":{"threshold":10,"type":"DeactivatePlugin"}}`Configuration for Botkube executors and sources plugins.[plugins.cacheDir](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L906)string`"/tmp"`Directory, where downloaded plugins are cached.[plugins.repositories](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L908)object`{"botkube":{"url":"https://github.com/kubeshop/botkube/releases/download/v1.10.0/plugins-index.yaml"}}`List of plugins repositories. Each repository defines the URL and optional `headers`[plugins.repositories.botkube](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L910)object`{"url":"https://github.com/kubeshop/botkube/releases/download/v1.10.0/plugins-index.yaml"}`This repository serves officially supported Botkube plugins.[plugins.incomingWebhook](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L915)object`{"enabled":true,"port":2115,"targetPort":2115}`Configure Incoming webhook for source plugins.[plugins.restartPolicy](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L920)object`{"threshold":10,"type":"DeactivatePlugin"}`Botkube Restart Policy on plugin failure.[plugins.restartPolicy.type](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L922)string`"DeactivatePlugin"`Restart policy type. Allowed values: "RestartAgent", "DeactivatePlugin".[plugins.restartPolicy.threshold](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L924)int`10`Number of restarts before policy takes into effect.[config](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L928)object`{"provider":{"apiKey":"","endpoint":"https://api.botkube.io/graphql","identifier":""}}`Configuration for synchronizing Botkube configuration.[config.provider](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L930)object`{"apiKey":"","endpoint":"https://api.botkube.io/graphql","identifier":""}`Base provider definition.[config.provider.identifier](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L933)string`""`Unique identifier for remote Botkube settings. If set to an empty string, Botkube won't fetch remote configuration.[config.provider.endpoint](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L935)string`"https://api.botkube.io/graphql"`Endpoint to fetch Botkube settings from.[config.provider.apiKey](https://github.com/kubeshop/botkube/blob/release-1.10/helm/botkube/values.yaml#L937)string`""`Key passed as a `X-API-Key` header to the provider's endpoint. diff --git a/hack/assistant-setup/content/docs.botkube.io__configuration__rbac.md b/hack/assistant-setup/content/docs.botkube.io__configuration__rbac.md new file mode 100644 index 0000000..c598999 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__configuration__rbac.md @@ -0,0 +1,164 @@ +Title: RBAC | Botkube + +URL Source: https://docs.botkube.io/configuration/rbac + +Markdown Content: +Botkube allows plugins to access Kubernetes API by defining [RBAC](https://en.wikipedia.org/wiki/Role-based_access_control) rules as part of plugin `context.rbac` configuration. Kubeconfig generation needs to be requested by defining `context.rbac` property. + +Based on this configuration Botkube generates a temporary [kubeconfig](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) with user and/or group impersonation. This kubeconfig is available to plugins in the `Execute` and `Stream` contexts. + +Architecture[​](#architecture"DirectlinktoArchitecture") +------------------------------------------------------------ + +Botkube uses its own cluster credentials to generate a temporary kubeconfig, and the kubeconfig uses [user/group impersonation](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#user-impersonation). + +For source plugins, the kubeconfig is generated once - during plugin startup. For executor plugins, the kubeconfig is generated every time a command is sent to the plugin, which allows greater flexibility, such as including the name of the channel the command was sent from. + +![Image 1: diagram](https://docs.botkube.io/assets/images/botkube-read-only-717ed01cf9fa5e6621f2a09c7b29a32d.svg) + +Configuration[​](#configuration"DirectlinktoConfiguration") +--------------------------------------------------------------- + +For each executor and source plugin, you can define a `context.rbac` configuration. This config is used to generate a dedicated kubeconfig. + +executors: "kubectl": botkube/kubectl@v1: enabled: true # ... context: rbac: user: type: Static # Static or ChannelName static: # applicable only for "Static" user mapping type value: botkube-internal-static-user prefix: "" # optional prefix for user name; useful especially for channel name mapping group: type: Static # Static or ChannelName static: # applicable only for "Static" group mapping type values: - "my-group1" - "my-group2" prefix: "" # optional prefix for all group names; useful especially for channel name mapping + +### Mapping types[​](#mapping-types"DirectlinktoMappingtypes") + +For both user and group, the following mapping types are supported: + +* `Static` + +For user, it uses a single static value. For group, it uses a list of static values. The value is prepended with an optional prefix. + +* `ChannelName` + +Channel name is used as subject for user or group impersonation. The channel name is prepended with an optional prefix. This mapping is only available for executor plugins. + + +### Default configuration[​](#default-configuration"DirectlinktoDefaultconfiguration") + +When a given plugin have `context.rbac` property undefined, Botkube doesn't generate a kubeconfig for this plugin. To request kubeconfig generation, define `context.rbac` property with empty value: + +executors: "kubectl": botkube/kubectl@v1: enabled: true # ... context: rbac: {} # enable kubeconfig generation + +However, such configuration will generate a kubeconfig with empty impersonation config, which effectively means an anonymous access to the Kubernetes API. + +During Botkube installation, Botkube generates Kubernetes ClusterRole and ClusterRoleBinding resources with read-only access for the default group `botkube-plugins-default`. This group is used by default across the `values.yaml` for all default plugins. + +rbac: # ... groups: "botkube-plugins-default": create: true rules: - apiGroups: ["*"] resources: ["*"] verbs: ["get", "watch", "list"] See the [`values.yaml`](https://github.com/kubeshop/botkube/blob/v1.10.0/helm/botkube/values.yaml) for more details. + +#### Defaults for user mapping when group mapping is used[​](#defaults-for-user-mapping-when-group-mapping-is-used"DirectlinktoDefaultsforusermappingwhengroupmappingisused") + +Kubernetes requires user for group impersonation. That's why when a group mapping is user without `context.rbac.user` mapping defined, Botkube uses `botkube-internal-static-user` user name for impersonation. For example, when the following configuration is used: + +executors: "kubectl": botkube/kubectl@v1: enabled: true # ... context: rbac: # no user mapping defined group: type: Static static: value: botkube-plugins-default + +It is equivalent to: + +executors: "kubectl": botkube/kubectl@v1: enabled: true # ... context: rbac: user: type: Static static: value: botkube-internal-static-user group: type: Static static: value: botkube-plugins-default + +#### Defaults for Botkube Cloud[​](#defaults-for-botkube-cloud"DirectlinktoDefaultsforBotkubeCloud") + +When configuring plugin on Botkube Cloud, the "Default" permissions mean that the `botkube-plugins-default` group will be used, which have read-only access to Kubernetes API and is configured during Botkube installation. See the [Default configuration](#default-configuration) section. + +![Image 2: Cloud RBAC defaults](https://docs.botkube.io/assets/images/cloud-rbac-default-9ffb455fa5b9f7e43b81da8a4b91f868.png) + +Examples[​](#examples"DirectlinktoExamples") +------------------------------------------------ + +This paragraph contains examples of RBAC configuration for different use cases. + +tip + +You can use `rbac.groups` or `extraObjects` overrides during Botkube installation to create custom RBAC resources. See the [`values.yaml`](https://github.com/kubeshop/botkube/blob/v1.10.0/helm/botkube/values.yaml) for more details. + +### Kubectl executor with read-only Pod access based on static group mapping[​](#kubectl-executor-with-read-only-pod-access-based-on-static-group-mapping"DirectlinktoKubectlexecutorwithread-onlyPodaccessbasedonstaticgroupmapping") + +In this example an executor plugin is defined with static RBAC that maps to group `read-pods`. + +1. Consider the following Botkube config: + +# ...executors: "kubectl-read-only": botkube/kubectl@v1: enabled: true # ... context: rbac: group: type: Static static: values: [read-pods] Let's assume this plugin is bound to at least one channel. 1. Consider the following Kubernetes RBAC configuration: apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: kubectl-read-podsrules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "watch", "list"]---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: kubectl-read-podsroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: kubectl-read-podssubjects: - kind: Group name: read-pods # <-- this is the group name used in Botkube config apiGroup: rbac.authorization.k8s.io In a result, when this executor plugin is invoked, Botkube generates a kubeconfig impersonating group `read-pods` and passes it to the plugin. The plugin then can authenticate with the API server with identity of group `read-pods`. In that way, the plugin can use read-only operations on Pods. ### Kubernetes source plugin with read-only access based on static user mapping[​](#kubernetes-source-plugin-with-read-only-access-based-on-static-user-mapping"DirectlinktoKubernetessourcepluginwithread-onlyaccessbasedonstaticusermapping") + +In this example a single source plugin is defined with static RBAC that maps to user `kubernetes-read-only`. + +1. Consider the following Botkube config: + +sources: "kubernetes": botkube/kubernetes@v1: enabled: true # ... context: rbac: user: type: Static static: value: kubernetes-read-only + +2. Consider the following Kubernetes RBAC configuration: + +apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: readerrules: - apiGroups: ["*"] resources: ["*"] verbs: ["get", "watch", "list"]---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: readerroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: readersubjects: - kind: User name: kubernetes-read-only # <-- this is the username used in Botkube config apiGroup: rbac.authorization.k8s.io In a result, the source plugin can access all Kubernetes resources with read-only permissions. ### Kubectl executor plugin with different permissions based on channel name mapping[​](#kubectl-executor-plugin-with-different-permissions-based-on-channel-name-mapping"DirectlinktoKubectlexecutorpluginwithdifferentpermissionsbasedonchannelnamemapping") + +In this example **kubectl** executor plugin is configured with channel name mapping and bound to two channels, `ch-1` and `ch-2`. In Kubernetes RBAC resources, group `ch-1` is given write access, while group `ch-2` is given only read access. + +1. Consider the following Botkube config: + +executors: "kubectl": botkube/kubectl@v1: # ... enabled: true context: rbac: group: type: ChannelNamecommunications: "default-group": socketSlack: enabled: true # ... channels: "ch-1": name: ch-1 bindings: executors: - kubectl "ch-2": name: ch-2 bindings: executors: - kubectl# ... + +2. Consider the following Kubernetes RBAC configuration: + +apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: editorrules: - apiGroups: ["*"] resources: ["*"] verbs: ["get", "watch", "list", "update", "create", "delete"]---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: editorroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: editorsubjects: - kind: Group name: ch-1 # <-- channel name used in Botkube config apiGroup: rbac.authorization.k8s.io---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: read-onlyrules: - apiGroups: ["*"] resources: ["*"] verbs: ["get", "watch", "list"]---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: read-onlyroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: read-onlysubjects: - kind: Group name: ch-2 # <-- channel name used in Botkube config apiGroup: rbac.authorization.k8s.io In a result, users in channel `ch-1` can execute all kubectl commands, while users in channel `ch-2` can only execute read-only commands. Limitations[​](#limitations"DirectlinktoLimitations") +--------------------------------------------------------- + +This paragraph contains limitations of the current implementation. + +### Shared file system[​](#shared-file-system"DirectlinktoSharedfilesystem") + +Botkube runs plugin processes in the same container within the same Pod. Therefore, all plugins share the same file system. + +If you're a plugin developer and decide to write kubeconfig to the file system, be aware that it can be accessible by all plugins in the container. + +### RBAC configuration merging[​](#rbac-configuration-merging"DirectlinktoRBACconfigurationmerging") + +The same executor plugins with different RBAC configuration cannot be bound to the same channel. This is validated during Botkube startup and will result in an error. + +For example, the following configuration is invalid: + +communications: "default-group": socketSlack: enabled: true # ... channels: "ch-1": name: ch-1 bindings: executors: - kubectl - kubectl-read-onlyexecutors: "kubectl": botkube/kubectl@v1: enabled: true # ... context: rbac: # Different RBAC configuration group: type: ChannelName "kubectl-read-only": botkube/kubectl@v1: enabled: true # ... context: rbac: # Different RBAC configuration user: type: Static static: value: kubectl-read-only + +### Supported RBAC mappings[​](#supported-rbac-mappings"DirectlinktoSupportedRBACmappings") + +While Executor plugins support multiple mapping types, there are the following limitations: + +* Source plugins support only the `Static` mapping. +* Automated [actions](https://docs.botkube.io/usage/automated-actions) support only the `Static` mapping. + +Troubleshooting[​](#troubleshooting"DirectlinktoTroubleshooting") +--------------------------------------------------------------------- + +In most cases troubleshooting Botkube RBAC issues means [troubleshooting Kubernetes RBAC](https://kubernetes.io/docs/reference/access-authn-authz/authorization/#checking-api-access), where `kubectl auth` command can help. + +If you see the following error: + +Error: create: failed to create: secrets is forbidden: User "botkube-internal-static-user" cannot create resource "secrets" in API group "" in the namespace "default" + +that means the RBAC rules configured for a given plugin are insufficient in a given context. + +Firstly, ensure what user/group is used for impersonation. To do that, check your configuration against the mapping description from the [Configuration](#configuration) section. + +### Checking available actions for a given user/group[​](#checking-available-actions-for-a-given-usergroup"DirectlinktoCheckingavailableactionsforagivenuser/group") + +After obtaining proper user and group, use the following command to list all available actions for a given user and/or group: + +kubectl auth can-i --as {user} --as-group {group} --list + +For example, to list all available actions for user `botkube-internal-static-user` and group `private-channel` use: + +kubectl auth can-i --as botkube-internal-static-user --as-group private-channel --list + +### Checking if a given user/group can perform a given action[​](#checking-if-a-given-usergroup-can-perform-a-given-action"DirectlinktoCheckingifagivenuser/groupcanperformagivenaction") + +To verify if a given user and/or group can perform a given action, use: + +kubectl auth can-i get pod -n botkube --as {user} --as-group {group} + +For example, to verify if user `botkube-internal-static-user` and group `private-channel` can get Secret in namespace `botkube` use: + +kubectl auth can-i get secret -n botkube --as botkube-internal-static-user --as-group private-channel + +Plugin development[​](#plugin-development"DirectlinktoPlugindevelopment") +------------------------------------------------------------------------------ + +If you are a plugin developer and want to learn how to use generated kubeconfig in the plugin codebase, refer to [Using kubeconfig](https://docs.botkube.io/plugin/using-kubeconfig) document. diff --git a/hack/assistant-setup/content/docs.botkube.io__configuration__source.md b/hack/assistant-setup/content/docs.botkube.io__configuration__source.md new file mode 100644 index 0000000..1afa78c --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__configuration__source.md @@ -0,0 +1,47 @@ +Title: Source | Botkube + +URL Source: https://docs.botkube.io/configuration/source/ + +Markdown Content: +Version: 1.10 + +The source configuration allows you to define multiple source configurations that can be later referred in [communication](https://docs.botkube.io/configuration/communication) bindings. For example, take a look at such source definition: + +sources: "k8s-recommendation-alerts": # This is a source configuration name, which is referred in communication bindings. botkube/kubernetes: # ... trimmed ... "k8s-all-events": # This is a source configuration name, which is referred in communication bindings. botkube/kubernetes: # ... trimmed ... + +This can be later used by the communication platforms: + +communications: "default-group": socketSlack: channels: "default": bindings: sources: # The order is important for merging strategy. - k8s-recommendation-events # The source configuration name - k8s-all-events # The source configuration name # ... trimmed ... + +To use the Botkube source plugins, first you need to define the plugins repository under the `plugins` property: + +plugins: repositories: repo-name: url: https://example.com/plugins-index.yaml + +Next, you can configure source from a given repository: + +sources: "plugins": repo-name/source-name@v1.0.0: # Plugin name syntax: /[@]. If version is not provided, the latest version from repository is used. enabled: true config: {} For all source configuration properties, see the [**syntax**](#syntax) section. + +#### Restart Policy and Health Check Interval[​](#restart-policy-and-health-check-interval"DirectlinktoRestartPolicyandHealthCheckInterval") + +This section of the configuration allows you to configure the restart policy for the Botkube source plugins. The restart policy is used when the source plugin fails to start. The default restart policy is `DeactivatePlugin`, which means that the plugin is deactivated after a given number of restarts. The restart policy can be configured with the following properties: + +* `type` - restart policy type. Allowed values: `RestartAgent`, `DeactivatePlugin`. +* `threshold` - number of restarts before the policy takes into effect. + +Restart policy types: + +* `RestartAgent` - when the threshold is reached, the Botkube agent is restarted. +* `DeactivatePlugin` - when the threshold is reached, the plugin is deactivated. To activate the plugin again, you need to restart the Botkube agent. + +The health check interval is used to check the health of the source plugins. The default health check interval is 10 seconds. The health check interval can be configured with the following property: + +* `healthCheckInterval` - health check interval. + +# Botkube Restart Policy on plugin failure.restartPolicy: # Restart policy type. Allowed values: "RestartAgent", "DeactivatePlugin". type: "DeactivatePlugin" # Number of restarts before policy takes into effect. threshold: 10healthCheckInterval: 10s + +Syntax[​](#syntax"DirectlinktoSyntax") +------------------------------------------ + +# Map of sources. The `sources` property name is an alias for a given configuration.# Key name is used as a binding reference.## Format: sources.{alias}sources: "k8s-recommendation-events": # Built-in kubernetes source configuration. botkube/kubernetes: enabled: true config: # Kubernetes configuration recommendations: pod: noLatestImageTag: true # ... trimmed ...# Configuration for Botkube executors and sources plugins.plugins: # Directory, where downloaded plugins are cached. cacheDir: "/tmp" # List of plugins repositories. repositories: # This repository serves officially supported Botkube plugins. botkube: url: https://github.com/kubeshop/botkube/releases/download/v1.10.0/plugins-index.yaml # Other 3rd party repositories. repo-name: url: https://example.com/plugins-index.yaml # Configure Incoming webhook for source plugins. incomingWebhook: enabled: true port: 2115 targetPort: 2115 # Botkube Restart Policy on plugin failure. restartPolicy: # Restart policy type. Allowed values: "RestartAgent", "DeactivatePlugin". type: "DeactivatePlugin" # Number of restarts before policy takes into effect. threshold: 10 healthCheckInterval: 10s + +The default configuration for the Botkube Helm chart can be found in the [values.yaml](https://github.com/kubeshop/botkube/blob/main/helm/botkube/values.yaml) file. diff --git a/hack/assistant-setup/content/docs.botkube.io__configuration__source__argocd.md b/hack/assistant-setup/content/docs.botkube.io__configuration__source__argocd.md new file mode 100644 index 0000000..891dbb2 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__configuration__source__argocd.md @@ -0,0 +1,82 @@ +Title: ArgoCD | Botkube + +URL Source: https://docs.botkube.io/configuration/source/argocd + +Markdown Content: +info + +**This plugin is available as a part of the Botkube Cloud offering.** + +Botkube is introducing new plugins with advanced functionality that will be part of the Botkube Team and Enterprise packages. These advanced plugins require cloud services provided by Botkube and are not part of the Botkube open source software. + +As part of this change, some of the existing Botkube plugins are being moved to a new repository. This repository requires authentication with a Botkube account. To continue using these Botkube plugins, create an account at [https://app.botkube.io/](https://app.botkube.io/) and configure a Botkube instance, or [migrate an existing installation with the Botkube CLI](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud). + +ArgoCD source plugin sends events from ArgoCD to configured communication platforms. During startup, the plugin configures ArgoCD webhooks, triggers, templates and subscriptions based on the [ArgoCD Notification Catalog](https://argo-cd.readthedocs.io/en/stable/operator-manual/notifications/catalog/). It uses native [ArgoCD notifications](https://argo-cd.readthedocs.io/en/stable/operator-manual/notifications/triggers/) configuration to send the events to Botkube communication platforms. + +The ArgoCD source plugin is hosted by the Botkube Cloud plugin repository and requires active Botkube Cloud account. + +Prerequisite elevated RBAC permissions[​](#prerequisite-elevated-rbac-permissions"DirectlinktoPrerequisiteelevatedRBACpermissions") +------------------------------------------------------------------------------------------------------------------------------------------ + +ArgoCD plugin requires specific RBAC permissions. First, create RBAC resources on your cluster: + +cat > /tmp/argocd-rbac.yaml << ENDOFFILE---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: argocdrules: - apiGroups: [""] resources: ["configmaps"] verbs: ["get", "update"] - apiGroups: ["argoproj.io"] resources: ["applications"] verbs: ["get", "patch"]---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: argocdroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: argocdsubjects:- kind: Group name: argocd apiGroup: rbac.authorization.k8s.ioENDOFFILEkubectl apply -f /tmp/argocd-rbac.yaml Next, use the `argocd` static group name in the plugin RBAC configuration: ![Image 1: ArgoCD RBAC](https://docs.botkube.io/assets/images/argocd-rbac-71831f5dfa99aade0bbccbcb140488fd.png) + +Enabling plugin[​](#enabling-plugin"DirectlinktoEnablingplugin") +--------------------------------------------------------------------- + +note + +In order to enable the plugin, ArgoCD has to be already installed on the cluster and all watched Applications need to be created. + +Also, remember to create RBAC resources for the plugin. See the [Elevated RBAC permissions required](#elevated-rbac-permissions-required)) section. + +You can enable the plugin as a part of Botkube instance configuration. + +1. If you don't have an existing Botkube instance, create a new one, according to the [Installation](https://docs.botkube.io/) docs. +2. From the [Botkube Cloud homepage](https://app.botkube.io/), click on a card of a given Botkube instance. +3. Navigate to the platform tab which you want to configure. +4. Click **Add plugin** button. +5. Select the ArgoCD plugin. +6. Click **Save** button. +7. Provide at least one ArgoCD application name and namespace in the configuration. + +defaultSubscriptions: applications: - name: guestbook namespace: argocd + +You can watch multiple ArgoCD Applications at the same time, for example: + +defaultSubscriptions: applications: - name: guestbook namespace: argocd - name: second-app namespace: second-app-namespace + +1. Click **Save**. + +Cleanup[​](#cleanup"DirectlinktoCleanup") +--------------------------------------------- + +When you disable or remove the plugin, it won't revert all changes made during the plugin startup. To clean up all ArgoCD follow the manual steps: + +* Clean up ArgoCD Notifications ConfigMap. It is usually named `argocd-notifications-cm` in the `argocd` Namespace. + +Remove all properties that contains `b-` or `botkube-` prefixes in the name. + +* Webhook property name follows the syntax `service.webhook.{webhook-name}`. For example, the `service.webhook.b-784e` property was created by Botkube. +* Template property name follows the syntax `template.{template-name}`. For example, the `template.template.botkube-argocd-ch05k-app-health-degraded` property was created by Botkube. +* Trigger property name follows the syntax `trigger.{trigger-name}`. For example, the `trigger.b-372839f86ed61c4c88` property was created by Botkube. +* Remove all `argocd.argoproj.io/notifications` annotations from ArgoCD Applications which contain `b-` prefix in the trigger and webhook names. + +The annotation key pattern is `notifications.argoproj.io/subscribe.{trigger-name}.{webhook-name}`. For example, the annotation `notifications.argoproj.io/subscribe.b-5cc4c004df01230f72.b-efc0: ""` was created by Botkube and it should be deleted if the plugin is disabled. + + +Configuration Syntax[​](#configuration-syntax"DirectlinktoConfigurationSyntax") +------------------------------------------------------------------------------------ + +### Basic configuration[​](#basic-configuration"DirectlinktoBasicconfiguration") + +This section lists all basic configuration options for the ArgoCD source plugin. The ArgoCD notification config is created automatically during plugin startup and uses triggers and templates based on the [ArgoCD Notification Catalog](https://argo-cd.readthedocs.io/en/stable/operator-manual/notifications/catalog/). + +defaultSubscriptions: # Provide application name and namespace to subscribe to all events for a given application. applications: - name: "guestbook" namespace: "argocd"argoCD: # ArgoCD UI base URL. It is used for generating links in the incoming events. uiBaseUrl: http://localhost:8080 # ArgoCD Notifications ConfigMap reference. notificationsConfigMap: name: argocd-notifications-cm namespace: argocd + +### Advanced configuration[​](#advanced-configuration"DirectlinktoAdvancedconfiguration") + +The basic configuration should be sufficient for most users. However, you can customize all triggers, templates, webhook registration and more. For advanced properties, see the full default configuration below: + +log: level: "info"# Interactivity configures command dropdown and additional buttons# for platforms which support interactivity (`isInteractive: true`) such as Socket Slack or Cloud Slack.interactivity: enableViewInUIButton: true enableOpenRepositoryButton: true commandVerbs: - "get" - "describe"# ArgoCD-related configuration.argoCD: # ArgoCD UI base URL. It is used for generating links in the incoming events. uiBaseUrl: http://localhost:8080 # ArgoCD Notifications ConfigMap reference. notificationsConfigMap: name: argocd-notifications-cm namespace: argocd# Webhook configuration.webhook: # If true, it registers Botkube webhook in ArgoCD notification config. register: true # If the name exceeds 6 characters, it might be truncated and modified to match the external constraints. name: "b-{{ .SourceName }}" url: "{{ .IncomingWebhook.FullURLForSource }}"# Triggers and templates are based on https://github.com/argoproj/argo-cd/blob/master/notifications_catalog/install.yaml.# Trigger might be created from existing template (`fromExisting`) or from scratch (`create`).notifications: - trigger: # fromExisting: # name: on-created # templateName: "botkube-{{ .SourceName }}-app-created" create: # If the name exceeds 20 characters, it might be modified to match the external constraints. name: "b-{{ .SourceName }}-create" conditions: # syntax: https://argo-cd.readthedocs.io/en/stable/operator-manual/notifications/triggers/ - description: Application is created. oncePer: app.metadata.name when: "true" send: - "botkube-{{ .SourceName }}-app-created" # template Name, you can use templating here subscriptions: &triggerSubscriptions # Even if false, the default subscriptions are still created. create: true # Additional subscriptions apart from `defaultSubscriptions` additional: [] # - name: "guestbook" # namespace: "argocd" - trigger: create: name: "b-{{ .SourceName }}-delete" conditions: - description: Application is deleted. oncePer: app.metadata.name when: app.metadata.deletionTimestamp != nil send: - "botkube-{{ .SourceName }}-app-deleted" subscriptions: *triggerSubscriptions - trigger: create: name: "b-{{ .SourceName}}-deploy" conditions: - description: Application is synced and healthy. Triggered once per commit. oncePer: app.status.operationState.syncResult.revision when: app.status.operationState.phase in ['Succeeded'] and app.status.health.status == 'Healthy' send: - "botkube-{{ .SourceName }}-app-deployed" subscriptions: *triggerSubscriptions - trigger: create: name: "b-{{ .SourceName}}-degrade" conditions: - description: Application has degraded when: app.status.health.status == 'Degraded' send: - "botkube-{{ .SourceName }}-app-health-degraded" subscriptions: *triggerSubscriptions - trigger: create: name: "b-{{ .SourceName }}-fail" conditions: - description: Application syncing has failed when: app.status.operationState != nil and app.status.operationState.phase in ['Error', 'Failed'] send: - "botkube-{{ .SourceName }}-app-sync-failed" subscriptions: *triggerSubscriptions - trigger: create: name: "b-{{ .SourceName }}-run" conditions: - description: Application is being synced when: app.status.operationState != nil and app.status.operationState.phase in ['Running'] send: - "botkube-{{ .SourceName }}-app-sync-running" subscriptions: *triggerSubscriptions - trigger: create: name: "b-{{ .SourceName }}-unknown" conditions: - description: Application status is 'Unknown' when: app.status.sync.status == 'Unknown' send: - "botkube-{{ .SourceName }}-app-sync-status-unknown" subscriptions: *triggerSubscriptions - trigger: create: name: "b-{{ .SourceName }}-success" conditions: - description: Application syncing has succeeded when: app.status.operationState != nil and app.status.operationState.phase in ['Succeeded'] send: - "botkube-{{ .SourceName }}-app-sync-succeeded" subscriptions: *triggerSubscriptionstemplates: - name: "botkube-{{ .SourceName }}-app-created" body: | { "message": { "sections": [ { "header": ":new: Application `{{.app.metadata.name}}` has been created" } ] }, "context": { "app": { "name": "{{.app.metadata.name}}", "namespace": "{{.app.metadata.namespace}}" }, "detailsUiPath": "/applications/{{.app.metadata.name}}", "repoUrl": "{{.app.spec.source.repoURL | call .repo.RepoURLToHTTPS}}" } } - name: "botkube-{{ .SourceName }}-app-deleted" body: | { "message": { "sections": [ { "header": ":no_entry_sign: Application `{{.app.metadata.name}}` has been deleted" } ] } } - name: "botkube-{{ .SourceName }}-app-deployed" body: | { "message": { "sections": [ { "header": ":rocket: New version of the application `{{.app.metadata.name}}` is up and running", "textFields": [ { "key": "Sync Status", "value": "{{.app.status.sync.status}}" }, { "key": "Health Status", "value": "{{.app.status.health.status}}" }, { "key": "Revision", "value": "{{.app.status.sync.revision}}" } {{range $index, $c := .app.status.conditions}} ,{ "key": "{{$c.type}}", "value": "{{$c.message}}" } {{end}} ] } ] }, "context": { "app": { "name": "{{.app.metadata.name}}", "namespace": "{{.app.metadata.namespace}}" }, "detailsUiPath": "/applications/{{.app.metadata.name}}", "repoUrl": "{{.app.spec.source.repoURL | call .repo.RepoURLToHTTPS}}" } } - name: "botkube-{{ .SourceName }}-app-health-degraded" body: | { "message": { "sections": [ { "header": ":exclamation: Application `{{.app.metadata.name}}` has degraded", "textFields": [ { "key": "Health Status", "value": "{{.app.status.health.status}}" }, { "key": "Revision", "value": "{{.app.status.sync.revision}}" } {{range $index, $c := .app.status.conditions}} ,{ "key": "{{$c.type}}", "value": "{{$c.message}}" } {{end}} ] } ] }, "context": { "app": { "name": "{{.app.metadata.name}}", "namespace": "{{.app.metadata.namespace}}" }, "detailsUiPath": "/applications/{{.app.metadata.name}}", "repoUrl": "{{.app.spec.source.repoURL | call .repo.RepoURLToHTTPS}}" } } - name: "botkube-{{ .SourceName }}-app-sync-failed" body: | { "message": { "timestamp": "{{.app.status.operationState.finishedAt}}", "sections": [ { "header": ":exclamation: The sync operation of application `{{.app.metadata.name}}` failed", "textFields": [ { "key": "Error message", "value": "{{.app.status.operationState.message}}" }, { "key": "Sync Status", "value": "{{.app.status.sync.status}}" }, { "key": "Revision", "value": "{{.app.status.sync.revision}}" } {{range $index, $c := .app.status.conditions}} ,{ "key": "{{$c.type}}", "value": "{{$c.message}}" } {{end}} ] } ] }, "context": { "app": { "name": "{{.app.metadata.name}}", "namespace": "{{.app.metadata.namespace}}" }, "detailsUiPath": "/applications/{{.app.metadata.name}}?operation=true", "repoUrl": "{{.app.spec.source.repoURL | call .repo.RepoURLToHTTPS}}" } } - name: "botkube-{{ .SourceName }}-app-sync-running" body: | { "message": { "timestamp": "{{.app.status.operationState.startedAt}}", "sections": [ { "header": ":bulb: The sync operation of application `{{.app.metadata.name}}` started", "textFields": [ { "key": "Sync Status", "value": "{{.app.status.sync.status}}" }, {{ if and (.app.status.operationState) (.app.status.operationState.operation) }} { "key": "Initiated by", "value": "{{.app.status.operationState.operation.initiatedBy.username}}" }, {{ if .app.status.operationState.operation.initiatedBy.automated }} { "key": "Automated", "value": "{{.app.status.operationState.operation.initiatedBy.automated}}" }, {{ end }} {{ end }} { "key": "Revision", "value": "{{.app.status.sync.revision}}" } {{range $index, $c := .app.status.conditions}} ,{ "key": "{{$c.type}}", "value": "{{$c.message}}" } {{end}} ] } ] }, "context": { "app": { "name": "{{.app.metadata.name}}", "namespace": "{{.app.metadata.namespace}}" }, "detailsUiPath": "/applications/{{.app.metadata.name}}?operation=true", "repoUrl": "{{.app.spec.source.repoURL | call .repo.RepoURLToHTTPS}}" } } - name: "botkube-{{ .SourceName }}-app-sync-status-unknown" body: | { "message": { "sections": [ { "header": ":warning: Application `{{.app.metadata.name}}` sync status is unknown", "textFields": [ { "key": "Sync Status", "value": "{{.app.status.sync.status}}" } {{range $index, $c := .app.status.conditions}} ,{ "key": "{{$c.type}}", "value": "{{$c.message}}" } {{end}} ] } ] }, "context": { "app": { "name": "{{.app.metadata.name}}", "namespace": "{{.app.metadata.namespace}}" }, "detailsUiPath": "/applications/{{.app.metadata.name}}", "repoUrl": "{{.app.spec.source.repoURL | call .repo.RepoURLToHTTPS}}" } } - name: "botkube-{{ .SourceName }}-app-sync-succeeded" body: | { "message": { "timestamp": "{{.app.status.operationState.finishedAt}}", "sections": [ { "header": ":white_check_mark: Application `{{.app.metadata.name}}` has ben successfully synced", "textFields": [ { "key": "Sync Status", "value": "{{.app.status.sync.status}}" }, { "key": "Health Status", "value": "{{.app.status.health.status}}" } {{range $index, $c := .app.status.conditions}} ,{ "key": "{{$c.type}}", "value": "{{$c.message}}" } {{end}} ] } ] }, "context": { "app": { "name": "{{.app.metadata.name}}", "namespace": "{{.app.metadata.namespace}}" }, "detailsUiPath": "/applications/{{.app.metadata.name}}?operation=true", "repoUrl": "{{.app.spec.source.repoURL | call .repo.RepoURLToHTTPS}}" } } diff --git a/hack/assistant-setup/content/docs.botkube.io__configuration__source__github-events.md b/hack/assistant-setup/content/docs.botkube.io__configuration__source__github-events.md new file mode 100644 index 0000000..1d580b3 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__configuration__source__github-events.md @@ -0,0 +1,110 @@ +Title: GitHub Events | Botkube + +URL Source: https://docs.botkube.io/configuration/source/github-events + +Markdown Content: +info + +**This plugin is available as a part of the Botkube Cloud offering.** + +Botkube is introducing new plugins with advanced functionality that will be part of the Botkube Team and Enterprise packages. These advanced plugins require cloud services provided by Botkube and are not part of the Botkube open source software. + +As part of this change, some of the existing Botkube plugins are being moved to a new repository. This repository requires authentication with a Botkube account. To continue using these Botkube plugins, create an account at [https://app.botkube.io/](https://app.botkube.io/) and configure a Botkube instance, or [migrate an existing installation with the Botkube CLI](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud). + +The GitHub Events source sends events for configured GitHub repositories. These events can be sent to communication channels or actions. To learn how to bind sources to communication channels or actions, refer to the [Communication](https://docs.botkube.io/configuration/communication/) and [Action](https://docs.botkube.io/configuration/action) documents. + +The GitHub Events plugin is hosted by the Botkube Cloud plugin repository and requires active Botkube Cloud account. + +Enabling plugin[​](#enabling-plugin"DirectlinktoEnablingplugin") +--------------------------------------------------------------------- + +You can enable the plugin as a part of Botkube instance configuration. + +1. If you don't have an existing Botkube instance, create a new one, according to the [Installation](https://docs.botkube.io/) docs. +2. From the [Botkube Cloud homepage](https://app.botkube.io/), click on a card of a given Botkube instance. +3. Navigate to the platform tab which you want to configure. +4. Click **Add plugin** button. +5. Select the GitHub Events plugin. +6. Click **Save** button. + +Configuration Syntax[​](#configuration-syntax"DirectlinktoConfigurationSyntax") +------------------------------------------------------------------------------------ + +This plugin supports the following configuration: + +# Logger configuration settings.log: level: info format: json# GitHub client configuration settings.github: # Auth allows you to set either PAT or APP credentials. # If none provided then watch functionality could not work properly, e.g. you can reach the API calls quota or if you are setting GitHub Enterprise base URL then an unauthorized error can occur. auth: # The GitHub access token. # Instruction for creating a token can be found here: https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/#creating-a-token. accessToken: your-github-token # AppConfig represents the GitHub App configuration. # This replaces the AccessToken. app: # GitHub App ID for authentication. id: "" # GitHub App Installation ID. installationId: "" # GitHub App private key in PEM format. privateKey: "" # The GitHub base URL for API requests. Defaults to the public GitHub API, but can be set to a domain endpoint to use with GitHub Enterprise. # Default: https://api.github.com/ baseUrl: "" # The GitHub upload URL for uploading files. It is taken into account only when the BaseURL is also set. If only the BaseURL is provided then this parameter defaults to the BaseURL value. # Default: https://uploads.github.com/ uploadUrl: ""# refreshDuration defines how often we should call GitHub REST API to check repository events.# It's the same for all configured repositories. For example, if you configure 5s refresh time, and you have 3 repositories registered,# we will execute maximum 2160 calls which easily fits into PAT rate limits.# You can create multiple plugins configuration with dedicated tokens to have the rate limits increased.## NOTE:# - we use conditional requests (https://docs.github.com/en/rest/overview/resources-in-the-rest-api?apiVersion=2022-11-28#conditional-requests), so if there are no events the call doesn't count against your rate limits.\# - if you configure file pattern matcher for merged pull request events we execute one more additional call to check which files were changed in the context of a given pull request## Rate limiting: https://docs.github.com/en/rest/overview/resources-in-the-rest-api?apiVersion=2022-11-28#rate-limitingrefreshDuration: 10srepositories: - name: owner/repo1 on: pullRequests: - types: [open, merged] # Allowed pull request types (open, closed, merged). paths: # Included file patterns for pull request changes. include: ["kustomize/.*"] # Excluded file patterns for pull request changes. # exclude: [ '.*\.js' ] labels: # Included labels for pull requests. include: ["bug"] # Excluded labels for pull requests. # exclude: [ 'enhancement' ] notificationTemplate: extraButtons: - displayName: "Flux Diff" commandTpl: "flux diff ks podinfo --path ./kustomize --github-ref {{ .HTMLURL }} " - name: owner/repo2 on: # EventsAPI watches for /events API containing events triggered by activity on GitHub. # This API is not built to serve real-time use cases. Depending on the time of day, event latency can be anywhere from 30s to 6h. # source: https://docs.github.com/en/rest/activity/events?apiVersion=2022-11-28#list-repository-events events: # WatchEvent for now emitted only when someone stars a repository. # https://docs.github.com/en/webhooks-and-events/events/github-event-types#watchevent - type: "WatchEvent" # IssuesEvent with json path filter - type: "IssuesEvent" # The JSONPath expression to filter events jsonPath: ".action" # The value to match in the JSONPath result value: "opened" notificationTemplate: previewTpl: |- Issue Opened #{{ .Issue.Number }} {{ .Issue.Title }} State: {{ .Issue.State }} extraButtons: - displayName: Open url: "{{ .Issue.HTMLURL }}" style: primary You can use either a [personal access token](#github-personal-access-token) or a [GitHub App](#github-app) for authentication. By using GitHub Apps, you can increase your maximum rate limits because multiple GitHub Apps are independent and do not share the rate limits. However, using multiple Personal Access Tokens (PATs) for the same account will result in sharing the same rate limit. + +### GitHub personal access token[​](#github-personal-access-token"DirectlinktoGitHubpersonalaccesstoken") + +Follow the instructions [here](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/#creating-a-token) to create a token. The required scope differs for public and private repositories. + +### GitHub App[​](#github-app"DirectlinktoGitHubApp") + +To use a GitHub App: + +1. [Create a GitHub App](https://docs.github.com/en/developers/apps/building-github-apps/creating-a-github-app). No callback or webhook URL is needed. + +2. Add read-only permission to the "Members" item of organization permissions. + +3. [Install the app in your organization](https://docs.github.com/en/developers/apps/managing-github-apps/installing-github-apps). + +4. Done! Use the following details for authentication: + +| Name | Description | +| --- | --- | +| GitHub App Private Key | PEM-format key generated when the app is installed. If you lost it, you can regenerate it ([docs](https://docs.github.com/en/developers/apps/building-github-apps/authenticating-with-github-apps#generating-a-private-key)). | +| GitHub App ID | Found in the app's "About" page (Organization settings -> Developer settings -> Edit button on your app). | +| GitHub App Installation ID | Found in the URL your organization's app install page (Organization settings -> Github Apps -> Configure button on your app). It's the last number in the URL, ex: `https://github.com/organizations/{my-org}/settings/installations/1234567890`. | + + +Subscriptions[​](#subscriptions"DirectlinktoSubscriptions") +--------------------------------------------------------------- + +The GitHub Events source plugin uses polling instead of Webhook endpoint for retrieving GitHub events. It calls two types of GitHub REST API endpoints with a configured refresh time window: + +* [`/repos/{owner}/{repo}/events`](https://docs.github.com/en/rest/activity/events?apiVersion=2022-11-28#list-repository-events) for `on.events` configuration +* [`/repos/{owner}/{repo}/pulls`](https://docs.github.com/en/rest/pulls/pulls?apiVersion=2022-11-28#list-pull-requests) for `on.pullRequests` configuration + +By default, we use [conditional requests](https://docs.github.com/en/rest/overview/resources-in-the-rest-api?apiVersion=2022-11-28#conditional-requests) to prevent excessive API calls. As a result, from `on.pullRequests` triggers may have up to a 60-second delay due to caching. + +### Pull requests[​](#pull-requests"DirectlinktoPullrequests") + +For a configured `refreshDuration` we call the [`/repos/{owner}/{repo}/pulls`](https://docs.github.com/en/rest/pulls/pulls?apiVersion=2022-11-28#list-pull-requests) endpoint for all registered repositories. It's configured to fetch 100 pull requests that were recently modified. We ignore all events that were already processed. + +#### Matching criteria[​](#matching-criteria"DirectlinktoMatchingcriteria") + +If no matching criteria are specified, all pull requests will be reported. For example: + +repositories: - name: owner/repo1 on: pullRequests: [] To narrow down emitted events, you can specify at least one of the available criteria: * `types`: This is a list of pull request types for which the event should be triggered. The allowed types are: `open`, `closed`, `merged`. * `paths.include`: This is a list of file patterns for which the event should be triggered. It supports [Go regular expressions](https://github.com/google/re2/wiki/Syntax). For example: `["kustomize/.*"]`. * `paths.exclude`: This is a list of file patterns for which the event should not be triggered. It also supports [Go regular expressions](https://github.com/google/re2/wiki/Syntax). For example: `['.*\.js']`. This exclusion criteria takes precedence over `paths.include`. * `labels.include`: This is a list of label patterns for which the event should be triggered. It supports [Go regular expressions](https://github.com/google/re2/wiki/Syntax). For example: `["backend-.*"]`. * `labels.exclude`: This is a list of label patterns for which the event should not be triggered. It supports [Go regular expressions](https://github.com/google/re2/wiki/Syntax). For example: `['bug']`. This exclusion criteria takes precedence over `labels.include`. #### Templating[​](#templating"DirectlinktoTemplating") + +You can customize the notification template with additional buttons: + +notificationTemplate: extraButtons: - displayName: "Flux Diff" commandTpl: "flux diff ks podinfo --path ./kustomize --github-ref {{ .HTMLURL }} " + +For the `commandTpl` you can use all fields that are available on [`pullRequest`](https://github.com/google/go-github/blob/899235e0a9d750d6fecf9048a676046d50f9d4a3/github/pulls.go#L29-L85) type. + +### Events[​](#events"DirectlinktoEvents") + +For a configured `refreshDuration` we call the [`/repos/{owner}/{repo}/events`](https://docs.github.com/en/rest/activity/events?apiVersion=2022-11-28#list-repository-events) endpoint for all registered repositories. + +note + +This API is not built to serve real-time use cases. Depending on the time of day, event latency can be anywhere from 30s to 6h. + +The Events API covers various event types. Refer to the [GitHub event types](https://docs.github.com/en/webhooks-and-events/events/github-event-types) page for more information. + +#### Matching criteria[​](#matching-criteria-1"DirectlinktoMatchingcriteria") + +To retrieve relevant events, you must define at least one entry within the `events` property. For instance: + +events: - type: "WatchEvent" + +If you provide an empty list `events: []`, no events will be emitted. For more precise filtering of events, you can optionally use JSONPath along with the event type to filter based on specific criteria within the event payload. #### Templating[​](#templating-1"DirectlinktoTemplating") + +The available fields for templating differ based on the event type. Refer to the [google/go-github](https://github.com/google/go-github/tree/899235e0a9d750d6fecf9048a676046d50f9d4a3/github) repository for dedicated event types. + +For instance, you can add an "Open" button to an `IssuesEvent` template: + +events: # IssuesEvent with json path filter - type: "IssuesEvent" # The JSONPath expression to filter events jsonPath: ".action" # The regex value to match in the JSONPath result value: "opened" notificationTemplate: previewTpl: |- Issue Opened #{{ .Issue.Number }} {{ .Issue.Title }} State: {{ .Issue.State }} extraButtons: - displayName: Open url: "{{ .Issue.HTMLURL }}" style: primary + +Here, the `jsonPath` field specifies the JSONPath expression to filter events, and the value field defines the regex value to match within the JSONPath result. This combination helps narrow down reported events based on specific conditions within the event payload. diff --git a/hack/assistant-setup/content/docs.botkube.io__configuration__source__keptn.md b/hack/assistant-setup/content/docs.botkube.io__configuration__source__keptn.md new file mode 100644 index 0000000..f58a4d6 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__configuration__source__keptn.md @@ -0,0 +1,10 @@ +Title: Keptn | Botkube + +URL Source: https://docs.botkube.io/configuration/source/keptn + +Markdown Content: +**This plugin is available as a part of the Botkube Cloud offering.** + +Botkube is introducing new plugins with advanced functionality that will be part of the Botkube Team and Enterprise packages. These advanced plugins require cloud services provided by Botkube and are not part of the Botkube open source software. + +As part of this change, some of the existing Botkube plugins are being moved to a new repository. This repository requires authentication with a Botkube account. To continue using these Botkube plugins, create an account at [https://app.botkube.io/](https://app.botkube.io/) and configure a Botkube instance, or [migrate an existing installation with the Botkube CLI](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud). diff --git a/hack/assistant-setup/content/docs.botkube.io__configuration__source__kubernetes.md b/hack/assistant-setup/content/docs.botkube.io__configuration__source__kubernetes.md new file mode 100644 index 0000000..2f631d6 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__configuration__source__kubernetes.md @@ -0,0 +1,156 @@ +Title: Kubernetes | Botkube + +URL Source: https://docs.botkube.io/configuration/source/kubernetes + +Markdown Content: +A `kubernetes` source plugin produces events for configured Kubernetes resources. These events can be sent to communication channels or actions. To learn how to bind sources to communication channels or actions, read the Communication and Action documents. + +Enabling plugin[​](#enabling-plugin"DirectlinktoEnablingplugin") +--------------------------------------------------------------------- + +### Self-hosted Botkube installation[​](#self-hosted-botkube-installation"DirectlinktoSelf-hostedBotkubeinstallation") + +The Kubernetes plugin is hosted by the official Botkube plugin repository. First, make sure that the `botkube` repository is defined under `plugins` in the [values.yaml](https://github.com/kubeshop/botkube/blob/main/helm/botkube/values.yaml) file. + +plugins: repositories: botkube: url: https://github.com/kubeshop/botkube/releases/download/v1.10.0/plugins-index.yaml + +To enable Kubernetes source, add `--set 'sources.{configuration-name}.botkube/kubernetes.enabled=true'` to a given Botkube [`install` command](https://docs.botkube.io/cli/commands/botkube_install). + +### Botkube Cloud[​](#botkube-cloud"DirectlinktoBotkubeCloud") + +You can enable the plugin as a part of Botkube instance configuration. + +1. If you don't have an existing Botkube instance, create a new one, according to the [Installation](https://docs.botkube.io/) docs. +2. From the [Botkube Cloud homepage](https://app.botkube.io/), click on a card of a given Botkube instance. +3. Navigate to the platform tab which you want to configure. +4. Click **Add plugin** button. +5. Select the Kubernetes plugin. +6. Click **Save** button. + +Event and resource constraints[​](#event-and-resource-constraints"DirectlinktoEventandresourceconstraints") +------------------------------------------------------------------------------------------------------------------ + +Define constraints for Kubernetes events to narrow down the events you want to receive. + +You can define both global constraints, that are applied to all resources within a given source, and also resource-specific constraints, which override global constraints. See the [Syntax](#syntax) paragraph for more details. + +There are multiple types of constraints. Each constraint type is described in the following sections. + +### Namespaces[​](#namespaces"DirectlinktoNamespaces") + +Include and/or exclude namespaces to watch. You can use exact values or regex expressions to specify namespaces. + +Exclude takes precedence over include. If a given namespace is excluded, it will be ignored, even if it included. + +**Examples** + +To watch all namespaces except those with `testing-` prefix, use the following constraint: + +namespaces: include: - ".*" # include all... exclude: - "testing-.*" # ...except any namespace that has `testing-` prefix + +To watch only `dev` and `prod` namespaces, use the following constraint: + +namespaces: include: - "dev" - "prod" exclude: [] ### Labels[​](#labels"DirectlinktoLabels") + +Specify exact match for resource labels. The watched resources must have all the specified labels. + +**Example** + +labels: # Match only the resources that have all the specified labels app: "my-app" environment: "production" + +### Annotations[​](#annotations"DirectlinktoAnnotations") + +Specify exact match for resource annotations. The watched resources must have all the specified annotations. + +**Example** + +annotations: # Match only the resources that have all the specified annotations. app: "my-app" my-annotation: "true" + +### Resource name[​](#resource-name"DirectlinktoResourcename") + +Filter events based on the resource name. If not defined, all resource names are matched. Exclude takes precedence over include. If a given resource name is excluded, it will be ignored, even if it included. + +You can use both exact values and regex expressions to specify resource names. This constraint can be set per resource only. See the [Syntax](#syntax) paragraph for more details. + +**Examples** + +To match resource names that have `testing-` prefix, use the following constraint: + +name: include: - "testing-.*" # include only resource names that have `testing-` prefix exclude: [] To match all resources except those that have `testing-` prefix, use the following constraint: name: include: - ".*" # include all resource names... exclude: - "testing-.*" # ...except those that have `testing-` prefix ### Event types[​](#event-types"DirectlinktoEventtypes") + +List the event types to watch. + +Possible values: + +* `create`, +* `update`, +* `delete`, +* `error`, +* `all`, which is equal to all of the above. + +**Example** + +event: types: # watch for create, delete and error events - create - delete - error + +### Event reason[​](#event-reason"DirectlinktoEventreason") + +Define exact values or regex expression to match the event reason. If not defined, all events are watched. Exclude takes precedence over include. If a given event reason is excluded, it will be ignored, even if it included. + +**Examples** + +To match events with reason equal to `BackOff`, use the following constraint: + +event: reason: include: - "^BackOff$" # match events with reason equal to `BackOff` exclude: [] To match all events except those with reason equal to `BackOff`, use the following constraint: event: reason: include: - ".*" # match all event reasons... exclude: - "^BackOff$" # ...except those equal to `BackOff` ### Event message[​](#event-message"DirectlinktoEventmessage") + +Define regex expression to match the event message. If not defined, all event messages are matched. + +Exclude takes precedence over include. If a given event message is excluded, it will be ignored, even if it included. + +**Example** + +To match events with message starting with `Back-off`, use the following constraint: + +event: message: include: - "^Back-off.*" # match all events with message starting with `Back-off` exclude: [] To match all events except those with message starting with `Back-off`, use the following constraint: event: message: include: - ".*" # match all event messages... exclude: - "^Back-off.*" # ...except those starting with `Back-off` ### Recommendations[​](#recommendations"DirectlinktoRecommendations") + +You can configure recommendations related to Kubernetes resources. Recommendations respect [namespaces](#namespaces) constraint regex patterns. + +Currently, Kubernetes source plugin can send recommendation about 2 resources: `Pods` and `Ingresses`. + +**Example** + +In order to send recommendation for the Pods that have containers with `latest` tag or the Pods without labels, use the following configuration. + +recommendations: # Recommendations for Pod Kubernetes resource. pod: # If true, notifies about Pod containers that use `latest` tag for images. noLatestImageTag: true # If true, notifies about Pod resources created without labels. labelsSet: true + +If you want to receive recommendations for Ingress that contains invalid backend service definition or TLS secret, use the following configuration. + +recommendations: # Recommendations for Ingress Kubernetes resource. ingress: # If true, notifies about Ingress resources with invalid backend service reference. backendServiceValid: true # If true, notifies about Ingress resources with invalid TLS secret reference. tlsSecretValid: true + +### Filters[​](#filters"DirectlinktoFilters") + +The filter configuration allows you to configure filters which are used for all processed Kubernetes events. + +# Filter settings for various sources.# Currently, all filters are globally enabled or disabled.# You can enable or disable filters with `@Botkube filters` commands.filters: kubernetes: # If true, enables support for `botkube.io/disable` resource annotations. objectAnnotationChecker: true # If true, filters out Node-related events that are not important. nodeEventsChecker: true + +Configuration Syntax[​](#configuration-syntax"DirectlinktoConfigurationSyntax") +------------------------------------------------------------------------------------ + +This plugin supports the following configuration: + +# Describes configuration for various recommendation insights.recommendations: # Recommendations for Pod Kubernetes resource. pod: # If true, notifies about Pod containers that use `latest` tag for images. noLatestImageTag: true # If true, notifies about Pod resources created without labels. labelsSet: true # Recommendations for Ingress Kubernetes resource. ingress: # If true, notifies about Ingress resources with invalid backend service reference. backendServiceValid: true # If true, notifies about Ingress resources with invalid TLS secret reference. tlsSecretValid: true# Filter settings for various sources.filters: # If true, enables support for `botkube.io/disable` resource annotation. objectAnnotationChecker: true # If true, filters out Node-related events that are not important. nodeEventsChecker: true# Describes namespaces for every Kubernetes resources you want to watch or exclude.# These namespaces are applied to every resource specified in the resources list.# However, every specified resource can override this by using its own namespaces object.namespaces: &k8s-events-namespaces # Include contains a list of allowed Namespaces. # It can also contain regex expressions: # `- ".*"` - to specify all Namespaces. include: - ".*" # Exclude contains a list of Namespaces to be ignored even if allowed by Include. # It can also contain regex expressions: # `- "test-.*"` - to specif all Namespaces with `test-` prefix. # Exclude list is checked before the Include list. # exclude: []# Describes event constraints for Kubernetes resources.# These constraints are applied for every resource specified in the `resources` list, unless they are overridden by the resource's own `events` object.event: # Lists all event types to be watched. types: - create - delete - error # Optional list of exact values or regex patterns to filter events by event reason. # Skipped, if both include/exclude lists are empty. reason: # Include contains a list of allowed values. It can also contain regex expressions. include: [] # Exclude contains a list of values to be ignored even if allowed by Include. It can also contain regex expressions. # Exclude list is checked before the Include list. exclude: [] # Optional list of exact values or regex patterns to filter event by event message. Skipped, if both include/exclude lists are empty. # If a given event has multiple messages, it is considered a match if any of the messages match the constraints. message: # Include contains a list of allowed values. It can also contain regex expressions. include: [] # Exclude contains a list of values to be ignored even if allowed by Include. It can also contain regex expressions. # Exclude list is checked before the Include list. exclude: []# Filters Kubernetes resources to watch by annotations. Each resource needs to have all the specified annotations.# Regex expressions are not supported.annotations: {}# Filters Kubernetes resources to watch by labels. Each resource needs to have all the specified labels.# Regex expressions are not supported.labels: {}# Describes the Kubernetes resources to watch.# Resources are identified by its type in `{group}/{version}/{kind (plural)}` format. Examples: `apps/v1/deployments`, `v1/pods`.# Each resource can override the namespaces and event configuration by using dedicated `event` and `namespaces` field.# Also, each resource can specify its own `annotations`, `labels` and `name` regex.resources: - type: v1/pods # namespaces: # Overrides 'source'.kubernetes.namespaces # include: # - ".*" # exclude: [] # annotations: {} # Overrides 'source'.kubernetes.annotations # labels: {} # Overrides 'source'.kubernetes.labels # # Optional resource name constraints. # name: # # Include contains a list of allowed values. It can also contain regex expressions. # include: [] # # Exclude contains a list of values to be ignored even if allowed by Include. It can also contain regex expressions. # # Exclude list is checked before the Include list. # exclude: [] # event: # # Overrides 'source'.kubernetes.event.reason # reason: # include: [] # exclude: [] # # Overrides 'source'.kubernetes.event.message # message: # include: [] # exclude: [] # # Overrides 'source'.kubernetes.event.types # types: # - create - type: v1/services - type: networking.k8s.io/v1/ingresses - type: v1/nodes event: message: exclude: - ".*nf_conntrack_buckets.*" # Ignore node related noisy messages from GKE clusters - type: v1/namespaces - type: v1/persistentvolumes - type: v1/persistentvolumeclaims - type: v1/configmaps - type: rbac.authorization.k8s.io/v1/roles - type: rbac.authorization.k8s.io/v1/rolebindings - type: rbac.authorization.k8s.io/v1/clusterrolebindings - type: rbac.authorization.k8s.io/v1/clusterroles - type: apps/v1/daemonsets event: # Overrides 'source'.kubernetes.event types: - create - update - delete - error updateSetting: includeDiff: true fields: - spec.template.spec.containers[*].image - status.numberReady - type: batch/v1/jobs event: # Overrides 'source'.kubernetes.event types: - create - update - delete - error updateSetting: includeDiff: true fields: - spec.template.spec.containers[*].image - status.conditions[*].type - type: apps/v1/deployments event: # Overrides 'source'.kubernetes.event types: - create - update - delete - error updateSetting: includeDiff: true fields: - spec.template.spec.containers[*].image - status.availableReplicas - type: apps/v1/statefulsets event: # Overrides 'source'.kubernetes.event types: - create - update - delete - error updateSetting: includeDiff: true fields: - spec.template.spec.containers[*].image - status.readyReplicascommands: # Configures which verbs are available in actionable items. verbs: ["api-resources", "api-versions", "cluster-info", "describe", "explain", "get", "logs", "top"] # Configure which resources are available in actionable items. resources: - "deployments" - "pods" - "namespaces" - "daemonsets" - "statefulsets" - "storageclasses" - "nodes" - "configmaps" - "services" - "ingresses"# Define extra buttons to be displayed beside the actionable notification message.extraButtons: - enabled: false trigger: type: ["error"] button: displayName: "Get Help" commandTpl: "doctor --resource={{ .Kind | lower }}/{{ .Name }} --namespace={{ .Namespace }} --error={{ .Reason }} --bk-cmd-header='AI assistance'"# Logger configurationlog: level: info disableColors: false Examples[​](#examples"DirectlinktoExamples") +------------------------------------------------ + +This section lists all examples for Kubernetes source plugin. They are based on the Botkube self-hosted installation but can be used with Botkube Cloud by extracting the `botkube/kubernetes.config` section. + +# Map of sources. Source contains configuration for Kubernetes events and sending recommendations.# The property name under `sources` object is an alias for a given configuration. You can define multiple sources configuration with different names.# Key name is used as a binding reference.# See the `values.yaml` file for full object.### Format: sources.{alias}sources: "k8s-recommendation-events": displayName: "Kubernetes Recommendations" # Describes Kubernetes source configuration. # See the `values.yaml` file for full object. botkube/kubernetes: enabled: true config: # Describes configuration for various recommendation insights. recommendations: # Recommendations for Pod Kubernetes resource. pod: # If true, notifies about Pod containers that use `latest` tag for images. noLatestImageTag: true # If true, notifies about Pod resources created without labels. labelsSet: true # Recommendations for Ingress Kubernetes resource. ingress: # If true, notifies about Ingress resources with invalid backend service reference. backendServiceValid: true # If true, notifies about Ingress resources with invalid TLS secret reference. tlsSecretValid: true "k8s-all-events": displayName: "Kubernetes Info" # Describes Kubernetes source configuration. # See the `values.yaml` file for full object. botkube/kubernetes: enabled: true config: # Logging configuration log: # Log level level: info # Describes namespaces for every Kubernetes resources you want to watch or exclude. # These namespaces are applied to every resource specified in the resources list. # However, every specified resource can override this by using its own namespaces object. namespaces: &k8s-events-namespaces # Include contains a list of allowed Namespaces. # It can also contain regex expressions: # `- ".*"` - to specify all Namespaces. include: - ".*" # Exclude contains a list of Namespaces to be ignored even if allowed by Include. # It can also contain regex expressions: # `- "test-.*"` - to specif all Namespaces with `test-` prefix. # Exclude list is checked before the Include list. # exclude: [] # Describes event constraints for Kubernetes resources. # These constraints are applied for every resource specified in the `resources` list, unless they are overridden by the resource's own `events` object. event: # Lists all event types to be watched. types: - create - delete - error # Optional list of exact values or regex patterns to filter events by event reason. # Skipped, if both include/exclude lists are empty. reason: # Include contains a list of allowed values. It can also contain regex expressions. include: [] # Exclude contains a list of values to be ignored even if allowed by Include. It can also contain regex expressions. # Exclude list is checked before the Include list. exclude: [] # Optional list of exact values or regex patterns to filter event by event message. Skipped, if both include/exclude lists are empty. # If a given event has multiple messages, it is considered a match if any of the messages match the constraints. message: # Include contains a list of allowed values. It can also contain regex expressions. include: [] # Exclude contains a list of values to be ignored even if allowed by Include. It can also contain regex expressions. # Exclude list is checked before the Include list. exclude: [] # Filters Kubernetes resources to watch by annotations. Each resource needs to have all the specified annotations. # Regex expressions are not supported. annotations: {} # Filters Kubernetes resources to watch by labels. Each resource needs to have all the specified labels. # Regex expressions are not supported. labels: {} # Describes the Kubernetes resources to watch. # Resources are identified by its type in `{group}/{version}/{kind (plural)}` format. Examples: `apps/v1/deployments`, `v1/pods`. # Each resource can override the namespaces and event configuration by using dedicated `event` and `namespaces` field. # Also, each resource can specify its own `annotations`, `labels` and `name` regex. # See the `values.yaml` file for full object. resources: - type: v1/pods # namespaces: # Overrides 'source'.kubernetes.namespaces # include: # - ".*" # exclude: [] # annotations: {} # Overrides 'source'.kubernetes.annotations # labels: {} # Overrides 'source'.kubernetes.labels # # Optional resource name constraints. # name: # # Include contains a list of allowed values. It can also contain regex expressions. # include: [] # # Exclude contains a list of values to be ignored even if allowed by Include. It can also contain regex expressions. # # Exclude list is checked before the Include list. # exclude: [] # event: # # Overrides 'source'.kubernetes.event.reason # reason: # include: [] # exclude: [] # # Overrides 'source'.kubernetes.event.message # message: # include: [] # exclude: [] # # Overrides 'source'.kubernetes.event.types # types: # - create - type: v1/services - type: networking.k8s.io/v1/ingresses - type: v1/nodes - type: v1/namespaces - type: v1/persistentvolumes - type: v1/persistentvolumeclaims - type: v1/configmaps - type: rbac.authorization.k8s.io/v1/roles - type: rbac.authorization.k8s.io/v1/rolebindings - type: rbac.authorization.k8s.io/v1/clusterrolebindings - type: rbac.authorization.k8s.io/v1/clusterroles - type: apps/v1/daemonsets event: # Overrides 'source'.kubernetes.event types: - create - update - delete - error updateSetting: includeDiff: true fields: - spec.template.spec.containers[*].image - status.numberReady - type: batch/v1/jobs event: # Overrides 'source'.kubernetes.event types: - create - update - delete - error updateSetting: includeDiff: true fields: - spec.template.spec.containers[*].image - status.conditions[*].type - type: apps/v1/deployments event: # Overrides 'source'.kubernetes.event types: - create - update - delete - error updateSetting: includeDiff: true fields: - spec.template.spec.containers[*].image - status.availableReplicas - type: apps/v1/statefulsets event: # Overrides 'source'.kubernetes.event types: - create - update - delete - error updateSetting: includeDiff: true fields: - spec.template.spec.containers[*].image - status.readyReplicas ## Custom resource example # - type: velero.io/v1/backups # namespaces: # include: # - ".*" # exclude: # - # event: # types: # - create # - update # - delete # - error # updateSetting: # includeDiff: true # fields: # - status.phase # List of available commands that can be used in actionable items under kubernetes events. commands: # Configures which verbs are available in actionable items. verbs: ["api-resources", "api-versions", "cluster-info", "describe", "explain", "get", "logs", "top"] # Configure which resources are available in actionable items. resources: [ "deployments", "pods", "namespaces", "daemonsets", "statefulsets", "storageclasses", "nodes", "configmaps", "services", "ingresses", ] # Filter settings for various sources. # Currently, all filters are globally enabled or disabled. # You can enable or disable filters with `@Botkube enable/disable filters` commands. filters: kubernetes: # If true, enables support for `botkube.io/disable` resource annotations. objectAnnotationChecker: true # If true, filters out Node-related events that are not important. nodeEventsChecker: true "k8s-err-events": displayName: "Kubernetes Errors" # Describes Kubernetes source configuration. # See the `values.yaml` file for full object. botkube/kubernetes: enabled: true config: # Describes namespaces for every Kubernetes resources you want to watch or exclude. # These namespaces are applied to every resource specified in the resources list. # However, every specified resource can override this by using its own namespaces object. namespaces: *k8s-events-namespaces # Describes event constraints for Kubernetes resources. # These constraints are applied for every resource specified in the `resources` list, unless they are overridden by the resource's own `events` object. event: # Lists all event types to be watched. types: - error # Describes the Kubernetes resources you want to watch. # See the `values.yaml` file for full object. resources: - type: v1/pods - type: v1/services - type: networking.k8s.io/v1/ingresses - type: v1/nodes - type: v1/namespaces - type: v1/persistentvolumes - type: v1/persistentvolumeclaims - type: v1/configmaps - type: rbac.authorization.k8s.io/v1/roles - type: rbac.authorization.k8s.io/v1/rolebindings - type: rbac.authorization.k8s.io/v1/clusterrolebindings - type: rbac.authorization.k8s.io/v1/clusterroles - type: apps/v1/deployments - type: apps/v1/statefulsets - type: apps/v1/daemonsets - type: batch/v1/jobs "k8s-err-with-logs-events": displayName: "Kubernetes Errors for resources with logs" # Describes Kubernetes source configuration. # See the `values.yaml` file for full object. botkube/kubernetes: enabled: true config: # Describes namespaces for every Kubernetes resources you want to watch or exclude. # These namespaces are applied to every resource specified in the resources list. # However, every specified resource can override this by using its own namespaces object. namespaces: *k8s-events-namespaces # Describes event constraints for Kubernetes resources. # These constraints are applied for every resource specified in the `resources` list, unless they are overridden by the resource's own `events` object. event: # Lists all event types to be watched. types: - error # Describes the Kubernetes resources you want to watch. # See the `values.yaml` file for full object. resources: - type: v1/pods - type: apps/v1/deployments - type: apps/v1/statefulsets - type: apps/v1/daemonsets - type: batch/v1/jobs # `apps/v1/replicasets` excluded on purpose - to not show logs twice for a given higher-level resource (e.g. Deployment) "k8s-create-events": displayName: "Kubernetes Resource Created Events" # Describes Kubernetes source configuration. # See the `values.yaml` file for full object. botkube/kubernetes: enabled: true config: # Describes namespaces for every Kubernetes resources you want to watch or exclude. # These namespaces are applied to every resource specified in the resources list. # However, every specified resource can override this by using its own namespaces object. namespaces: *k8s-events-namespaces # Describes event constraints for Kubernetes resources. # These constraints are applied for every resource specified in the `resources` list, unless they are overridden by the resource's own `events` object. event: # Lists all event types to be watched. types: - create # Describes the Kubernetes resources you want to watch. # See the `values.yaml` file for full object. resources: - type: v1/pods - type: v1/services - type: networking.k8s.io/v1/ingresses - type: v1/nodes - type: v1/namespaces - type: v1/configmaps - type: apps/v1/deployments - type: apps/v1/statefulsets - type: apps/v1/daemonsets - type: batch/v1/jobs The default configuration for Helm chart can be found in [values.yaml](https://github.com/kubeshop/botkube/blob/main/helm/botkube/values.yaml). + +Implementation details[​](#implementation-details"DirectlinktoImplementationdetails") +------------------------------------------------------------------------------------------ + +Kubernetes source plugin uses [Kubernetes Informers](https://pkg.go.dev/k8s.io/client-go/informers) to get Kubernetes events in real-time. As the informer's synchronized data is cached in-memory and, in some cases, might take a significant amount of memory, Kubernetes plugin comes with memory usage optimization. + +During startup, the plugin loads all Kubernetes source configurations and groups them by different Kubeconfigs. For each group, the plugin creates shared informers (`SharedInformerFactory`) and starts them in parallel in goroutines. + +As there are less background processes than actual Kubernetes source configurations, the plugin takes the very first source configuration (sorted alphabetically) as the "system" one. Then, the `log` and `informerResyncPeriod` configuration properties are used for all background processes except actual event handling. + +For more details, see the [Kubernetes plugin source code](https://github.com/kubeshop/botkube/blob/main/cmd/source/kubernetes/main.go). diff --git a/hack/assistant-setup/content/docs.botkube.io__configuration__source__prometheus.md b/hack/assistant-setup/content/docs.botkube.io__configuration__source__prometheus.md new file mode 100644 index 0000000..3d9038b --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__configuration__source__prometheus.md @@ -0,0 +1,10 @@ +Title: Prometheus | Botkube + +URL Source: https://docs.botkube.io/configuration/source/prometheus + +Markdown Content: +**This plugin is available as a part of the Botkube Cloud offering.** + +Botkube is introducing new plugins with advanced functionality that will be part of the Botkube Team and Enterprise packages. These advanced plugins require cloud services provided by Botkube and are not part of the Botkube open source software. + +As part of this change, some of the existing Botkube plugins are being moved to a new repository. This repository requires authentication with a Botkube account. To continue using these Botkube plugins, create an account at [https://app.botkube.io/](https://app.botkube.io/) and configure a Botkube instance, or [migrate an existing installation with the Botkube CLI](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud). diff --git a/hack/assistant-setup/content/docs.botkube.io__examples-and-tutorials.md b/hack/assistant-setup/content/docs.botkube.io__examples-and-tutorials.md new file mode 100644 index 0000000..37783ce --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__examples-and-tutorials.md @@ -0,0 +1,6 @@ +Title: Overview | Botkube + +URL Source: https://docs.botkube.io/examples-and-tutorials/ + +Markdown Content: +**New to Botkube?** Get started fast (and free!) with the [Botkube Cloud Web App](https://app.botkube.io/). diff --git a/hack/assistant-setup/content/docs.botkube.io__examples-and-tutorials__getstarted.md b/hack/assistant-setup/content/docs.botkube.io__examples-and-tutorials__getstarted.md new file mode 100644 index 0000000..f5234e4 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__examples-and-tutorials__getstarted.md @@ -0,0 +1,55 @@ +Title: Get Started | Botkube + +URL Source: https://docs.botkube.io/examples-and-tutorials/getstarted/ + +Markdown Content: +Get Started with Botkube in Minutes +----------------------------------- + +Welcome to Botkube! This guide will walk you through the process of setting up Botkube to send notifications and execute commands in your Kubernetes clusters directly from Slack and Microsoft Teams. + +[![Image 1: Watch our video tutorial for a step-by-step walkthrough](https://img.youtube.com/vi/AGKJsNro4jE/0.jpg)](https://www.youtube.com/watch?v=AGKJsNro4jE&t=59s"Watchourvideotutorialforastep-by-stepwalkthrough") + +Overview[​](#overview"DirectlinktoOverview") +------------------------------------------------ + +Botkube is a Kubernetes Monitoring and Tool designed to optimize your K8s workflow by providing real-time alerts from and commands within your Kubernetes environment. With Botkube, you can receive alerts, execute commands, and stay informed about your cluster's health and status, all from your preferred communication platform. + +Step 1: Sign up for Botkube[​](#step-1-sign-up-for-botkube"DirectlinktoStep1:SignupforBotkube") +-------------------------------------------------------------------------------------------------------- + +Visit [botkube.io](http://botkube.io/) and create an account. This account will enable you to access the Botkube Cloud Dashboard and manage your Botkube instances. + +Step 2: Connect Your Kubernetes Cluster[​](#step-2-connect-your-kubernetes-cluster"DirectlinktoStep2:ConnectYourKubernetesCluster") +-------------------------------------------------------------------------------------------------------------------------------------------- + +1. **Create a New Instance:** Log in to the Botkube Cloud Dashboard and select "create a new instance". + +![Image 2: Create New Instance](https://docs.botkube.io/assets/images/create-new-instance-e61971eb5a0d3d7d2359e31fc38d8870.png) + +2. **Install Botkube Agent:** Follow the instructions provided on the dashboard to install the Botkube Agent on your Kubernetes cluster. You can choose either Helm or a CLI command for installation. + +![Image 3: Install Botkube Agent](https://docs.botkube.io/assets/images/install-agent-1f2a430da33c7648736702596a696b5d.png) + + +Step 3: Connect to Your Preferred Communication Platform[​](#step-3-connect-to-your-preferred-communication-platform"DirectlinktoStep3:ConnecttoYourPreferredCommunicationPlatform") +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Follow the instructions provided on the Botkube Cloud Dashboard to connect Botkube to your preferred communication platform, such as [Slack](https://docs.botkube.io/installation/slack/cloud-slack) or [Microsoft Teams](https://docs.botkube.io/installation/teams/). + +Step 4: Setting Up a Botkube Cloud Instance[​](#step-4-setting-up-a-botkube-cloud-instance"DirectlinktoStep4:SettingUpaBotkubeCloudInstance") +-------------------------------------------------------------------------------------------------------------------------------------------------------- + +Once your Botkube instance is connected to your communication platform, you will start receiving alerts and notifications from your Kubernetes cluster. + +### Finalizing Your Botkube Cloud Instance[​](#finalizing-your-botkube-cloud-instance"DirectlinktoFinalizingYourBotkubeCloudInstance") + +1. **Select Channels:** From the dashboard, choose the channels you wish to use with Botkube. +2. **Configure Plugins:** Connect your preferred plugins to enhance Botkube's functionality. +3. **Set Preferences:** Review and select your preferred Botkube defaults. +4. **Apply Changes:** Finalize your setup by selecting "Apply changes." + +Step 5: Start Receiving Alerts[​](#step-5-start-receiving-alerts"DirectlinktoStep5:StartReceivingAlerts") +----------------------------------------------------------------------------------------------------------------- + +Congratulations! You're now ready to start using Botkube to streamline your Kubernetes workflow and stay informed about your cluster's status. If you encounter any issues or need further assistance, feel free to reach out to our community on [Slack](https://join.botkube.io/) or [schedule a call with one of our team](https://calendly.com/d/274-ytm-6mk/chat-with-the-botkube-team-30-minutes). Happy Monitoring! diff --git a/hack/assistant-setup/content/docs.botkube.io__examples-and-tutorials__integrations.md b/hack/assistant-setup/content/docs.botkube.io__examples-and-tutorials__integrations.md new file mode 100644 index 0000000..852b781 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__examples-and-tutorials__integrations.md @@ -0,0 +1,6 @@ +Title: Integrations | Botkube + +URL Source: https://docs.botkube.io/examples-and-tutorials/integrations/ + +Markdown Content: +**New to Botkube?** Get started fast (and free!) with the [Botkube Cloud Web App](https://app.botkube.io/). diff --git a/hack/assistant-setup/content/docs.botkube.io__examples-and-tutorials__tutorials.md b/hack/assistant-setup/content/docs.botkube.io__examples-and-tutorials__tutorials.md new file mode 100644 index 0000000..e16ed8f --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__examples-and-tutorials__tutorials.md @@ -0,0 +1,6 @@ +Title: Tutorials | Botkube + +URL Source: https://docs.botkube.io/examples-and-tutorials/tutorials/ + +Markdown Content: +**New to Botkube?** Get started fast (and free!) with the [Botkube Cloud Web App](https://app.botkube.io/). diff --git a/hack/assistant-setup/content/docs.botkube.io__examples-and-tutorials__usecases.md b/hack/assistant-setup/content/docs.botkube.io__examples-and-tutorials__usecases.md new file mode 100644 index 0000000..a3b120f --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__examples-and-tutorials__usecases.md @@ -0,0 +1,6 @@ +Title: Use Cases | Botkube + +URL Source: https://docs.botkube.io/examples-and-tutorials/usecases/ + +Markdown Content: +**New to Botkube?** Get started fast (and free!) with the [Botkube Cloud Web App](https://app.botkube.io/). diff --git a/hack/assistant-setup/content/docs.botkube.io__examples-and-tutorials__videos.md b/hack/assistant-setup/content/docs.botkube.io__examples-and-tutorials__videos.md new file mode 100644 index 0000000..7c814f6 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__examples-and-tutorials__videos.md @@ -0,0 +1,6 @@ +Title: Videos | Botkube + +URL Source: https://docs.botkube.io/examples-and-tutorials/videos/ + +Markdown Content: +**New to Botkube?** Get started fast (and free!) with the [Botkube Cloud Web App](https://app.botkube.io/). diff --git a/hack/assistant-setup/content/docs.botkube.io__installation__discord.md b/hack/assistant-setup/content/docs.botkube.io__installation__discord.md new file mode 100644 index 0000000..37c97b2 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__installation__discord.md @@ -0,0 +1,6 @@ +Title: Discord | Botkube + +URL Source: https://docs.botkube.io/installation/discord/ + +Markdown Content: +**New to Botkube?** Get started fast (and free!) with the [Botkube Cloud Web App](https://app.botkube.io/). diff --git a/hack/assistant-setup/content/docs.botkube.io__installation__discord__cloud.md b/hack/assistant-setup/content/docs.botkube.io__installation__discord__cloud.md new file mode 100644 index 0000000..4bf294e --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__installation__discord__cloud.md @@ -0,0 +1,57 @@ +Title: Discord for Botkube Cloud | Botkube + +URL Source: https://docs.botkube.io/installation/discord/cloud + +Markdown Content: +* Go to Botkube Cloud [Web App](https://app.botkube.io/) and create a new instance. + +You can do it by clicking "Create an Instance" button on Home Page or under this link [Create an Instance](https://app.botkube.io/instances/add) + +* Fill in the `Instance Display Name` and click `Next` button. + +![Image 1: Instance Display Name](https://docs.botkube.io/assets/images/discord_instance_display_name-b35605d19eef1ecc93de54d6eefacae5.png) + +* Click `Add platform` dropdown, and select `Discord` option. ![Image 2: Select Platform](https://docs.botkube.io/assets/images/discord_platform_select-aac36ca4e34549bef88cc00b3603f4ac.png) + +* Create Botkube app at your Discord Server + +Reach [https://discordapp.com/developers/applications](https://discordapp.com/developers/applications). + +![Image 3: discord_applications_portal](https://docs.botkube.io/assets/images/discord_applications_portal-a4e1b45cb3df4a271cbd599ec9f3b7ab.png) + +* Create a "New Application" named Botkube and add a bot named **Botkube** into the Application. + +![Image 4: discord_create_new](https://docs.botkube.io/assets/images/discord_create_new-ba9152ffe6f7be4f64af374d836c7062.png) + +* Copy the Application **APPLICATION ID** + +![Image 5: discord_copy_client_id](https://docs.botkube.io/assets/images/discord_copy_application_id-bf48ff3b0d9dc613c35d92dc287bd305.png) + +and paste it in the `BotID` field in the form. + +![Image 6: bot_id_form](https://docs.botkube.io/assets/images/discord_bot_id_form-a9a0d728ad26361d5454b3eac4af8838.png) + +* Add a description - `Botkube helps you monitor your Kubernetes cluster, debug critical deployments and gives recommendations for standard practices by running checks on the Kubernetes resources.`. + +Set the Botkube icon (Botkube icon can be downloaded from [this link](https://github.com/kubeshop/botkube/blob/main/branding/logos/botkube-color-192x192.png)). + +Click on Save Changes to update the Bot. + +* Now, reach the **Bot** page and Click **Add Bot** to add a Discord Bot to your application. + +![Image 7: discord_add_bot](https://docs.botkube.io/assets/images/discord_add_bot-867c43f73a079d08996072d3261d2fbc.png) + +* After Bot creation, now you can see a bot is added to your application. Click on the **Reset Token** button. + +![Image 8: discord_bot_created](https://docs.botkube.io/assets/images/discord_bot_created-845172424d2066002bff223d9a3afd36.png) + +* Copy the Token and paste it in `Token` field the form. + +![Image 9: discord_token_form](https://docs.botkube.io/assets/images/discord_token_form-0885aae7fa9636d7f896aae91ee10cdf.png) + +* Go to the **OAuth2** page. Generate the URL with suitable permissions using the **OAuth2 URL Generator** available under the OAuth2 section to add bot to your Discord server. + + +the generated URL contains **YOUR\_CLIENT\_ID**, Scope and permission details. + +https://discord.com/api/oauth2/authorize?client_id={YOUR_CLIENT_ID}&permissions={SET_OF_PERMISSIONS}&scope=bot diff --git a/hack/assistant-setup/content/docs.botkube.io__installation__discord__self-hosted.md b/hack/assistant-setup/content/docs.botkube.io__installation__discord__self-hosted.md new file mode 100644 index 0000000..301a6aa --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__installation__discord__self-hosted.md @@ -0,0 +1,117 @@ +Title: Discord for self-hosted Botkube | Botkube + +URL Source: https://docs.botkube.io/installation/discord/self-hosted + +Markdown Content: +Version: 1.10 + +Prerequisites[​](#prerequisites"DirectlinktoPrerequisites") +--------------------------------------------------------------- + +* Botkube CLI installed according to the [Getting Started guide](https://docs.botkube.io/cli/getting-started#installation) +* Access to Kubernetes cluster +* Discord server account + +Install Botkube to the Discord Server[​](#install-botkube-to-the-discord-server"DirectlinktoInstallBotkubetotheDiscordServer") +--------------------------------------------------------------------------------------------------------------------------------------- + +Follow the steps below to install Botkube Discord app to your Discord server. + +### Create Botkube app at your Discord Server[​](#create-botkube-app-at-your-discord-server"DirectlinktoCreateBotkubeappatyourDiscordServer") + +1. Reach [https://discordapp.com/developers/applications](https://discordapp.com/developers/applications). + +![Image 1: discord_applications_portal](https://docs.botkube.io/assets/images/discord_applications_portal-a4e1b45cb3df4a271cbd599ec9f3b7ab.png) + +2. Create a "New Application" named Botkube and add a bot named **Botkube** into the Application. + +![Image 2: discord_create_new](https://docs.botkube.io/assets/images/discord_create_new-ba9152ffe6f7be4f64af374d836c7062.png) + +3. Copy the Application **APPLICATION ID** and export it as the `DISCORD_BOT_ID` environment variable. + +export DISCORD_BOT_ID={APPLICATION_ID} + +![Image 3: discord_copy_client_id](https://docs.botkube.io/assets/images/discord_copy_application_id-bf48ff3b0d9dc613c35d92dc287bd305.png) + +4. Add a description - `Botkube helps you monitor your Kubernetes cluster, debug critical deployments and gives recommendations for standard practices by running checks on the Kubernetes resources.`. + +Set the Botkube icon (Botkube icon can be downloaded from [this link](https://github.com/kubeshop/botkube/blob/main/branding/logos/botkube-color-192x192.png)). + +Click on Save Changes to update the Bot. + +5. Now, reach the **Bot** page and Click **Add Bot** to add a Discord Bot to your application. + +![Image 4: discord_add_bot](https://docs.botkube.io/assets/images/discord_add_bot-867c43f73a079d08996072d3261d2fbc.png) + +6. After Bot creation, now you can see a bot is added to your application. Click on the **Reset Token** button. + +![Image 5: discord_bot_created](https://docs.botkube.io/assets/images/discord_bot_created-845172424d2066002bff223d9a3afd36.png) + +7. Copy the Token and export it as the `DISCORD_TOKEN` environment variable. + +export DISCORD_TOKEN={TOKEN} + +8. Go to the **OAuth2** page. Generate the URL with suitable permissions using the **OAuth2 URL Generator** available under the OAuth2 section to add bot to your Discord server. + +![Image 6: discord_bot_scope](https://docs.botkube.io/assets/images/discord_bot_scope-4024ad9c61ca1bab846e9181580bcd70.png) + +the generated URL contains **YOUR\_CLIENT\_ID**, Scope and permission details. + +https://discord.com/api/oauth2/authorize?client_id={YOUR_CLIENT_ID}&permissions={SET_OF_PERMISSIONS}&scope=bot + +9. Copy and Paste the generated URL in a new tab, select the discord server to which you want to add the bot, click Continue and Authorize Bot addition. + +![Image 7: discord_bot_auth](https://docs.botkube.io/assets/images/discord_bot_auth-54b4a2d05fe3c3a6125c0f2e77f0bc78.png) + +![Image 8: discord_bot_auth_2](https://docs.botkube.io/assets/images/discord_bot_auth_2-3fd072cd239d9cf517cc7c4a6c11e313.png) + +10. Switch to the Discord app. Navigate to **User settings** and select **Advanced** tab. + +Enable the **Developer Mode**. + +![Image 9: discord_developer_mode](https://docs.botkube.io/assets/images/discord_developer_mode-b11b51acab3db94669c26cd97cde6c50.png) + +11. Create a new channel or select an existing one and copy the **CHANNEL ID**. + +To get the channel ID, right-click on a channel you want to receive notification in and click on **Copy ID**. + +![Image 10: discord_copy_channel_id.png](https://docs.botkube.io/assets/images/discord_copy_channel_id-53f4972f2c412426a9d8a27ffaa2737a.png) + +Copy the channel ID and export it as the `DISCORD_CHANNEL_ID` environment variable. + +export DISCORD_CHANNEL_ID={ID} + +12. Now, go ahead and install the Botkube backend on your Kubernetes cluster. + + +note + +Follow the first 4 mins of this [Video Tutorial](https://youtu.be/8o25pRbXdFw) to understand the process visually. + +### Install Botkube in Kubernetes cluster[​](#install-botkube-in-kubernetes-cluster"DirectlinktoInstallBotkubeinKubernetescluster") + +To deploy Botkube agent in your cluster, run: + +export CLUSTER_NAME={cluster_name}export ALLOW_KUBECTL={allow_kubectl}botkube install --version v1.10.0 \--set communications.default-group.discord.enabled=true \--set communications.default-group.discord.channels.default.id=${DISCORD_CHANNEL_ID} \--set communications.default-group.discord.botID=${DISCORD_BOT_ID} \--set communications.default-group.discord.token=${DISCORD_TOKEN} \--set settings.clusterName=${CLUSTER_NAME} \--set 'executors.k8s-default-tools.botkube/kubectl.enabled'=${ALLOW_KUBECTL} + +where: + +* **DISCORD\_CHANNEL\_ID** is the channel name where @Botkube needs to send notifications, +* **DISCORD\_BOT\_ID** is the Botkube Application Client ID, +* **DISCORD\_TOKEN** is the Token you received after adding Botkube bot to your Discord Application, +* **CLUSTER\_NAME** is the cluster name set in the incoming messages, +* **ALLOW\_KUBECTL** set true to allow `kubectl` command execution by Botkube on the cluster. + +Configuration syntax is explained [here](https://docs.botkube.io/configuration). All possible installation parameters are documented [here](https://docs.botkube.io/configuration/helm-chart-parameters). + +Send `@Botkube ping` in the channel to see if Botkube is running and responding. + +### Remove Botkube from Discord Server[​](#remove-botkube-from-discord-server"DirectlinktoRemoveBotkubefromDiscordServer") + +* Go to Discord Developers Portal [Applications](https://discord.com/developers/applications) page, +* Click on "Botkube" and click on "Delete App" button. + +Remove Botkube from Kubernetes cluster[​](#remove-botkube-from-kubernetes-cluster"DirectlinktoRemoveBotkubefromKubernetescluster") +------------------------------------------------------------------------------------------------------------------------------------------ + +Execute the following command to completely remove Botkube and related resources from your cluster: diff --git a/hack/assistant-setup/content/docs.botkube.io__installation__elasticsearch.md b/hack/assistant-setup/content/docs.botkube.io__installation__elasticsearch.md new file mode 100644 index 0000000..0d89832 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__installation__elasticsearch.md @@ -0,0 +1,6 @@ +Title: Elasticsearch | Botkube + +URL Source: https://docs.botkube.io/installation/elasticsearch/ + +Markdown Content: +**New to Botkube?** Get started fast (and free!) with the [Botkube Cloud Web App](https://app.botkube.io/). diff --git a/hack/assistant-setup/content/docs.botkube.io__installation__elasticsearch__cloud.md b/hack/assistant-setup/content/docs.botkube.io__installation__elasticsearch__cloud.md new file mode 100644 index 0000000..6b04b9f --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__installation__elasticsearch__cloud.md @@ -0,0 +1,69 @@ +Title: Elasticsearch for Botkube Cloud | Botkube + +URL Source: https://docs.botkube.io/installation/elasticsearch/cloud + +Markdown Content: +* [](https://docs.botkube.io/) * [Installation](https://docs.botkube.io/) +* [Elasticsearch](https://docs.botkube.io/installation/elasticsearch/) +* Elasticsearch for Botkube Cloud + +Version: 1.10 + +Prerequisites[​](#prerequisites"DirectlinktoPrerequisites") +--------------------------------------------------------------- + +* Botkube Cloud account which you can create [here](https://app.botkube.io/) for free. + +Create a Botkube Cloud Instance with Elasticsearch[​](#create-a-botkube-cloud-instance-with-elasticsearch"DirectlinktoCreateaBotkubeCloudInstancewithElasticsearch") +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + +1. Go to Botkube Cloud [Web App](https://app.botkube.io/) and create a new instance. + +You can do it by clicking "Create an Instance" button on Home Page or under this link [Create an Instance](https://app.botkube.io/instances/add) + +2. Fill in the `Instance Display Name` and click `Next` button. + +![Image 1: Instance Display Name](https://docs.botkube.io/assets/images/els_instance_display_name-b35605d19eef1ecc93de54d6eefacae5.png) + +3. Click `Add platform` dropdown, and select `Elasticsearch` option. + +![Image 2: Select Platform](https://docs.botkube.io/assets/images/els_platform_select-aac36ca4e34549bef88cc00b3603f4ac.png) + +4. Fill in all required data in the form + +![Image 3: Form](https://docs.botkube.io/assets/images/els_form-940490b8840d8a700b57b3a803249bd9.png) + +5. Add plugins you want to enable in your Botkube instance and click `Next` button. + +![Image 4: Plugins](https://docs.botkube.io/assets/images/els_add_plugins-dbf20e334cdca6198e7d9b0f8c68847f.png) + +6. Include optional `default aliases` and `default actions` and click `Create` button to create Botkube Cloud instance. + +![Image 5: Create](https://docs.botkube.io/assets/images/els_create-4b637edb5bec18e1e53cf632d8bc6087.png) + +note + +If you don't include other platforms which use `Executor` plugins we recommend `default aliases` and `default actions` options unchecked + +7. Follow the instructions in the summary page to deploy Botkube into your environment. + +![Image 6: Summary](https://docs.botkube.io/assets/images/els_summary-bfdc3ff0af6735b41a17d7219fd6b6f0.png) + + +Clean up[​](#clean-up"DirectlinktoCleanup") +------------------------------------------------ + +### Remove Botkube from Kubernetes cluster[​](#remove-botkube-from-kubernetes-cluster"DirectlinktoRemoveBotkubefromKubernetescluster") + +1. Go to Botkube Cloud instances page and click `Manage` button of the instance you want to remove. + +2. Click `Delete instance` button, type instance name in the popup and click `Delete instance`. + +caution + +Remember to execute the displayed command to completely remove Botkube and related resources from your cluster. + +![Image 7: Delete](https://docs.botkube.io/assets/images/els_instance_delete-27fe3622760a4cbbd7c92d13d7ddcd41.png) + + +[Previous Elasticsearch for self-hosted Botkube](https://docs.botkube.io/installation/elasticsearch/self-hosted)[Next Outgoing webhook](https://docs.botkube.io/installation/webhook/) diff --git a/hack/assistant-setup/content/docs.botkube.io__installation__elasticsearch__self-hosted.md b/hack/assistant-setup/content/docs.botkube.io__installation__elasticsearch__self-hosted.md new file mode 100644 index 0000000..0416f50 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__installation__elasticsearch__self-hosted.md @@ -0,0 +1,10 @@ +Title: Elasticsearch for self-hosted Botkube | Botkube + +URL Source: https://docs.botkube.io/installation/elasticsearch/self-hosted + +Markdown Content: +export CLUSTER_NAME={cluster_name}export ELASTICSEARCH_ADDRESS={elasticsearch_address}export ELASTICSEARCH_USERNAME={elasticsearch_username}export ELASTICSEARCH_PASSWORD={elasticsearch_password}export ELASTICSEARCH_INDEX_NAME={elasticsearch_index_name}botkube install --version v1.10.0 \--set communications.default-group.elasticsearch.enabled=true \--set communications.default-group.elasticsearch.server=${ELASTICSEARCH_ADDRESS} \--set communications.default-group.elasticsearch.username=${ELASTICSEARCH_USERNAME} \--set communications.default-group.elasticsearch.password=${ELASTICSEARCH_PASSWORD} \--set communications.default-group.elasticsearch.indices.default.name=${ELASTICSEARCH_INDEX_NAME} \--set settings.clusterName=${CLUSTER_NAME} + +Configuration syntax is explained [here](https://docs.botkube.io/configuration). All possible installation parameters are documented [here](https://docs.botkube.io/configuration/helm-chart-parameters). + +Execute the following command to completely remove Botkube and related resources from your cluster: diff --git a/hack/assistant-setup/content/docs.botkube.io__installation__mattermost.md b/hack/assistant-setup/content/docs.botkube.io__installation__mattermost.md new file mode 100644 index 0000000..b15c3f6 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__installation__mattermost.md @@ -0,0 +1,6 @@ +Title: Mattermost | Botkube + +URL Source: https://docs.botkube.io/installation/mattermost/ + +Markdown Content: +**New to Botkube?** Get started fast (and free!) with the [Botkube Cloud Web App](https://app.botkube.io/). diff --git a/hack/assistant-setup/content/docs.botkube.io__installation__mattermost__cloud.md b/hack/assistant-setup/content/docs.botkube.io__installation__mattermost__cloud.md new file mode 100644 index 0000000..14b69f5 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__installation__mattermost__cloud.md @@ -0,0 +1,96 @@ +Title: Mattermost for Botkube Cloud | Botkube + +URL Source: https://docs.botkube.io/installation/mattermost/cloud + +Markdown Content: +* [](https://docs.botkube.io/) * [Installation](https://docs.botkube.io/) +* [Mattermost](https://docs.botkube.io/installation/mattermost/) +* Mattermost for Botkube Cloud + +Version: 1.10 + +Prerequisites[​](#prerequisites"DirectlinktoPrerequisites") +--------------------------------------------------------------- + +* Botkube Cloud account which you can create [here](https://app.botkube.io/) for free. + +Create a Botkube Cloud Instance with Mattermost[​](#create-a-botkube-cloud-instance-with-mattermost"DirectlinktoCreateaBotkubeCloudInstancewithMattermost") +--------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Follow the steps below to install Botkube in your Mattermost instance. + +1. Go to Botkube Cloud [Web App](https://app.botkube.io/) and create a new instance. + +You can do it by clicking "Create an Instance" button on Home Page or under this link [Create an Instance](https://app.botkube.io/instances/add) + +2. Fill in the `Instance Display Name` and click `Next` button. + +![Image 1: Instance Display Name](https://docs.botkube.io/assets/images/mattermost_instance_display_name-b35605d19eef1ecc93de54d6eefacae5.png) + +3. Click `Add platform` dropdown, and select `Mattermost` option. ![Image 2: Mattermost Platform Select](https://docs.botkube.io/assets/images/mm_platform_select-aac36ca4e34549bef88cc00b3603f4ac.png) + +4. Follow the [Mattermost instructions](https://developers.mattermost.com/integrate/reference/bot-accounts/) for creating a bot account. When creating the bot account, use the following details: + +* Username — `Botkube` + +note + +You can also use a custom username for your bot. Just remember that you'll need to provide this username during a later step of the Botkube installation. + +* Description — `Botkube helps you monitor your Kubernetes cluster, debug critical deployments and gives recommendations for standard practices by running checks on the Kubernetes resources.`. + +* Icon — You can download the Botkube icon from [this link](https://github.com/kubeshop/botkube/blob/main/branding/logos/botkube-black-192x192.png). + +5. Paste the bot name in the form + +![Image 3: Bot Name in the form](https://docs.botkube.io/assets/images/mm_form_bot_name-987d8023e3f95e038072afa00b124eef.png) + +6. Past the token in the form + +![Image 4: Personal Token in the form](https://docs.botkube.io/assets/images/mm_personal_token_form-1629ebe4b91aef0765809c70b619cba7.png) + +7. Add Botkube to a channel + +Make sure that the newly created bot account is added to your Mattermost team by following [these instructions](https://developers.mattermost.com/integrate/reference/bot-accounts/#bot-account-creation). + +![Image 5: Invite Bot Account](https://docs.botkube.io/assets/images/invite-93908b3daf15ba3c0b87ab8522107fe6.png) + +Add Botkube user created to the channel you want to receive notifications in. + +![Image 6: Channels in the form](https://docs.botkube.io/assets/images/mm_channels_form-2bcedf3a15e879c1c0fb01b22e95edc7.png) + +8. Add plugins you want to enable in your Botkube instance and click `Next` button. + +![Image 7: Plugins](https://docs.botkube.io/assets/images/mm_add_plugins-a9d627e9575fd90aa56676a8d809c700.png) + +9. Include optional `default aliases` and `default actions` and click `Create` button to create Botkube Cloud instance. + +![Image 8: Create](https://docs.botkube.io/assets/images/mm_create-069ec4b9176f0f58d424e665fa4b2472.png) + +10. Follow the instructions in the summary page to deploy Botkube into your environment. + + +![Image 9: Summary](https://docs.botkube.io/assets/images/mm_summary-bfdc3ff0af6735b41a17d7219fd6b6f0.png) + +Clean up[​](#clean-up"DirectlinktoCleanup") +------------------------------------------------ + +### Remove Botkube from Mattermost Team[​](#remove-botkube-from-mattermost-team"DirectlinktoRemoveBotkubefromMattermostTeam") + +* Deactivate or remove Botkube user from Mattermost Team. Login as System Admin, in the Menu proceed to System console -> Users -> botkube -> Deactivate. +* Archive Channel created for Botkube communication if required. + +### Remove Botkube from Kubernetes cluster[​](#remove-botkube-from-kubernetes-cluster"DirectlinktoRemoveBotkubefromKubernetescluster") + +1. Go to Botkube Cloud instances page and click `Manage` button of the instance you want to remove. + +2. Click `Delete instance` button, type instance name in the popup and click `Delete instance`. + +caution + +Remember to execute the displayed command to completely remove Botkube and related resources from your cluster. + +![Image 10: Delete](https://docs.botkube.io/assets/images/mm_instance_delete-27fe3622760a4cbbd7c92d13d7ddcd41.png) + + +[Previous Mattermost for self-hosted Botkube](https://docs.botkube.io/installation/mattermost/self-hosted)[Next Discord](https://docs.botkube.io/installation/discord/) diff --git a/hack/assistant-setup/content/docs.botkube.io__installation__mattermost__self-hosted.md b/hack/assistant-setup/content/docs.botkube.io__installation__mattermost__self-hosted.md new file mode 100644 index 0000000..243dcf4 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__installation__mattermost__self-hosted.md @@ -0,0 +1,111 @@ +Title: Mattermost for self-hosted Botkube | Botkube + +URL Source: https://docs.botkube.io/installation/mattermost/self-hosted + +Markdown Content: +Prerequisites[​](#prerequisites"DirectlinktoPrerequisites") +--------------------------------------------------------------- + +* Botkube CLI installed according to the [Getting Started guide](https://docs.botkube.io/cli/getting-started#installation) +* Access to Kubernetes cluster + +Install Botkube to the Mattermost[​](#install-botkube-to-the-mattermost"DirectlinktoInstallBotkubetotheMattermost") +--------------------------------------------------------------------------------------------------------------------------- + +Follow the steps below to install Botkube in your Mattermost instance. + +### Create the Botkube bot account[​](#create-the-botkube-bot-account"DirectlinktoCreatetheBotkubebotaccount") + +1. Follow the [Mattermost instructions](https://developers.mattermost.com/integrate/reference/bot-accounts/) for creating a bot account. When creating the bot account, use the following details: + +* Username — `Botkube` + +note + +You can also use a custom username for your bot. Just remember that you'll need to provide this username during a later step of the Botkube installation. + +* Description — `Botkube helps you monitor your Kubernetes cluster, debug critical deployments and gives recommendations for standard practices by running checks on the Kubernetes resources.`. + +* Icon — You can download the Botkube icon from [this link](https://github.com/kubeshop/botkube/blob/main/branding/logos/botkube-black-192x192.png). + +2. Export the bot name as an environment variable: + +export MATTERMOST_BOT_NAME="{bot_name}" + +3. Also, export the bot's token as an environment variable: + +export MATTERMOST_TOKEN="{token}" + + +### Add Botkube to a channel[​](#add-botkube-to-a-channel"DirectlinktoAddBotkubetoachannel") + +Make sure that the newly created bot account is added to your Mattermost team by following [these instructions](https://developers.mattermost.com/integrate/reference/bot-accounts/#bot-account-creation). + +![Image 1: Invite Bot Account](https://docs.botkube.io/assets/images/invite-93908b3daf15ba3c0b87ab8522107fe6.png) + +Next, invite the Botkube bot into the specific channel where you want to receive notifications. Export the channel name as an environment variable: + +export MATTERMOST_CHANNEL="{channel_name}" + +Install Botkube in Kubernetes cluster[​](#install-botkube-in-kubernetes-cluster"DirectlinktoInstallBotkubeinKubernetescluster") +--------------------------------------------------------------------------------------------------------------------------------------- + +To deploy Botkube agent in your cluster, run: + +export MATTERMOST_SERVER_URL={mattermost_server_url}export MATTERMOST_TEAM={mattermost_team_name}export CLUSTER_NAME={cluster_name}export ALLOW_KUBECTL={allow_kubectl}botkube install --version v1.10.0 \--set communications.default-group.mattermost.enabled=true \--set communications.default-group.mattermost.url=${MATTERMOST_SERVER_URL} \--set communications.default-group.mattermost.token=${MATTERMOST_TOKEN} \--set communications.default-group.mattermost.team=${MATTERMOST_TEAM} \--set communications.default-group.mattermost.channels.default.name=${MATTERMOST_CHANNEL} \--set communications.default-group.mattermost.botName=${MATTERMOST_BOT_NAME} \--set settings.clusterName=${CLUSTER_NAME} \--set 'executors.k8s-default-tools.botkube/kubectl.enabled'=${ALLOW_KUBECTL} + +where: + +* **MATTERMOST\_SERVER\_URL** is the URL (including http/https schema) where Mattermost is running, +* **MATTERMOST\_TOKEN** is the Token received by creating Personal Access Token for Botkube bot, +* **MATTERMOST\_TEAM** is the Team name where Botkube is added, +* **MATTERMOST\_CHANNEL** is the Channel name where Botkube is added and used for communication, +* **MATTERMOST\_BOT\_NAME** is the Mattermost bot username (usually it is `Botkube`), +* **CLUSTER\_NAME** is the cluster name set in the incoming messages, +* **ALLOW\_KUBECTL** set true to allow `kubectl` command execution by Botkube on the cluster. + +Configuration syntax is explained [here](https://docs.botkube.io/configuration). All possible installation parameters are documented [here](https://docs.botkube.io/configuration/helm-chart-parameters). + +Send `@Botkube ping` in the channel to see if Botkube is running and responding. + +Remove Botkube from Mattermost Team[​](#remove-botkube-from-mattermost-team"DirectlinktoRemoveBotkubefromMattermostTeam") +--------------------------------------------------------------------------------------------------------------------------------- + +* Deactivate or remove Botkube bot from Mattermost Team. +* Archive Channel created for Botkube communication if required. + +Remove Botkube from Kubernetes cluster[​](#remove-botkube-from-kubernetes-cluster"DirectlinktoRemoveBotkubefromKubernetescluster") +------------------------------------------------------------------------------------------------------------------------------------------ + +Execute the following command to completely remove Botkube and related resources from your cluster: + +Troubleshooting[​](#troubleshooting"DirectlinktoTroubleshooting") +--------------------------------------------------------------------- + +### Botkube doesn't start[​](#botkube-doesnt-start"DirectlinktoBotkubedoesn'tstart") + +**Symptoms** + +The Botkube Pod is restarting and the Botkube logs show the following error: + +{ "level": "fatal", "msg": "while running application: while waiting for goroutines to finish gracefully: 1 error occurred:\n\t* while creating Mattermost bot: while getting team details: team \"Botkube\" not found", "time": "2023-08-25T14:52:30+02:00"} + +**Solution** + +You need to ensure that the configuration used by Botkube is valid. + +1. Get and decode the communication Secret details: + +kubectl get secret botkube-communication-secret -n botkube --template='{{index .data "comm_config.yaml" | base64decode }}' + +2. Verify the following: + +* Ensure that the value of `communications.default-group.mattermost.team` in the configuration matches the actual team name in your Mattermost UI. + +* Confirm that the bot specified in `communications.default-group.mattermost.botName` has been invited to the relevant team and all specified channels. + +* Check the validity of the token provided in `communications.default-group.mattermost.token`. If you're unsure, navigate to the Bot Accounts section in Mattermost and generate a new one. + +3. Additional Steps: + +If you continue to experience issues with Botkube restarts, you can perform further troubleshooting by following the instructions provided by Mattermost on [testing bot connections](https://developers.mattermost.com/integrate/reference/bot-accounts/#how-can-i-quickly-test-if-my-bot-account-is-working). diff --git a/hack/assistant-setup/content/docs.botkube.io__installation__slack.md b/hack/assistant-setup/content/docs.botkube.io__installation__slack.md new file mode 100644 index 0000000..0bf8949 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__installation__slack.md @@ -0,0 +1,31 @@ +Title: Slack | Botkube + +URL Source: https://docs.botkube.io/installation/slack/ + +Markdown Content: +Botkube Slack App Versions[​](#botkube-slack-app-versions"DirectlinktoBotkubeSlackAppVersions") +------------------------------------------------------------------------------------------------------ + +In order to connect with Slack, Botkube requires a Slack application. There are two versions of the Botkube Slack App available: + +### Botkube Cloud App for Slack[​](#botkube-cloud-app-for-slack"DirectlinktoBotkubeCloudAppforSlack") + +The Botkube Cloud App for Slack offers several advanced features: + +* One-click installation into your Slack workspace +* Multi-cluster executor support with a single Slack App +* Manage Slack channels directly from the Botkube web app and ensure the Botkube bot is invited to the correct channels + +The Botkube Cloud App for Slack uses Botkube's cloud services to manage channels and route executor commands. Events and alerts are sent directly from your cluster to your Slack workspace for reliable, fast notifications. + +You can directly try Botkube Cloud App for Slack for free by creating an account in the [Botkube Web App](https://app.botkube.io/). Follow the [Cloud Slack app tutorial](https://docs.botkube.io/installation/slack/cloud-slack) to learn more. + +### Botkube Socket Slack App[​](#botkube-socket-slack-app"DirectlinktoBotkubeSocketSlackApp") + +The Socket-mode app works with the open-source Botkube Agent. The Botkube Socket-mode Slack App has the following caveats: + +* Must be installed manually into your Slack workspace using the provided configuration +* Slack channels must be managed manually, and you need to ensure the Botkube bot is invited to any channel you want to use with Botkube +* When using executor plugins (e.g. kubectl) in a multi-cluster environment, each cluster needs to have a dedicated Botkube Slack bot in order to route commands to the correct cluster. + +Follow the [instruction](https://docs.botkube.io/installation/slack/socket-slack) for more details. diff --git a/hack/assistant-setup/content/docs.botkube.io__installation__slack__cloud-slack.md b/hack/assistant-setup/content/docs.botkube.io__installation__slack__cloud-slack.md new file mode 100644 index 0000000..e7bdd31 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__installation__slack__cloud-slack.md @@ -0,0 +1,106 @@ +Title: Botkube Cloud App for Slack | Botkube + +URL Source: https://docs.botkube.io/installation/slack/cloud-slack + +Markdown Content: +The Botkube Cloud App for Slack uses Botkube Cloud services to manage channels and route executor commands. This allows multi-cluster support without a need to create a dedicated Slack application for each cluster. Events and alerts are sent directly from your cluster to your Slack workspace for reliable, fast notifications. + +Prerequisites[​](#prerequisites"DirectlinktoPrerequisites") +--------------------------------------------------------------- + +* A Botkube Cloud account. + +You can try out the Botkube Cloud App for Slack for free by creating an account in the [Botkube Cloud app](https://app.botkube.io/). + + +Create a Botkube Cloud Instance with Cloud Slack[​](#create-a-botkube-cloud-instance-with-cloud-slack"DirectlinktoCreateaBotkubeCloudInstancewithCloudSlack") +------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + +1. Go to Botkube Cloud [Web App](https://app.botkube.io/) and click on `New Instance` button. + +![Image 1: New Instance](https://docs.botkube.io/assets/images/cloud_slack_new_instance-65f57c9b6c2e30c7b6250b1ebebf306c.png) + +2. Install Botkube Agent on your Kubernetes cluster by following the instructions on the page. + +![Image 2: Install Agent](https://docs.botkube.io/assets/images/cloud_slack_install-c457bdc2758930b79f90849e72f6ebf2.png) + +3. Click `Add platform` dropdown, and select `Slack` option. + +![Image 3: Slack Platform Select](https://docs.botkube.io/assets/images/cloud_slack_select_slack-c32779447fc66ed5091a858d0c7e2e46.png) + +4. Click `Add to Slack` button to add Cloud Slack integration to your Slack workspace. + +![Image 4: Add to Slack](https://docs.botkube.io/assets/images/cloud_slack_add_to_slack-29428c5a907db8aeb0bd91a1488b35a6.png) + +5. Click `Allow` to grant permission for Botkube app to access your Slack workspace. + +![Image 5: Cloud Slack Grant](https://docs.botkube.io/assets/images/cloud_slack_grant-891b3b884c149cc8285622770dbdb140.png) + +6. Provide the Slack app details as described follows and click `Next` button. + +* **Connected Slack Workspace:** Slack workspace that you granted permission in the previous step. +* **Display Name:** Display name of the Cloud Slack configuration. +* **Channels:** Slack channes where you can execute Botkube commands and receive notification. + +![Image 6: Cloud Slack Workspace](https://docs.botkube.io/assets/images/cloud_slack_workspace_details-769c2e33f6d5b18a9c20071d671af71e.png) + +7. Add plugins you want to enable in your Botkube instance and click `Next` button. + +![Image 7: Cloud Slack Plugins](https://docs.botkube.io/assets/images/cloud_slack_add_plugins-889f253b85edf139ee9c89e70400e28a.png) + +8. Include optional default command aliases and actions and click `Apply Changes` button to update Botkube Cloud instance. + +![Image 8: Cloud Slack Create](https://docs.botkube.io/assets/images/cloud_slack_create-e87f2bc4d8da6a31a5c3b18c095735de.png) + + +Using Botkube Cloud App for Slack[​](#using-botkube-cloud-app-for-slack"DirectlinktoUsingBotkubeCloudAppforSlack") +--------------------------------------------------------------------------------------------------------------------------- + +You can start using Botkube Cloud App for Slack by typing `@Botkube cloud help` in the Slack channel you configured in one of the previous steps. + +![Image 9: Cloud Slack Command Help](https://docs.botkube.io/assets/images/cloud_slack_command_help-806b8a1c8238a93638259241e41741e3.png) + +### Listing Cloud Instances[​](#listing-cloud-instances"DirectlinktoListingCloudInstances") + +You can list all the Botkube Cloud instances by typing `@Botkube cloud list instances` in the Slack channel, or click the button `List connected instances` in the help command response. Besides the instance `name`, `ID`, and `status` in the list response, you can also click the `Get details` button to go to instance details on Botkube Cloud Dashboard. + +![Image 10: Cloud Slack List Instances](https://docs.botkube.io/assets/images/cloud_slack_command_list_instances-b9d9661ea10f591eb72f92a79430d9cf.png) + +### Setting Default Instances[​](#setting-default-instances"DirectlinktoSettingDefaultInstances") + +Once a Botkube command is executed, it will be handled on target Kubernetes cluster specified with `--cluster-name` flag. This is an optional flag, where if you have not specified it, Botkube Cloud will select the first instance. However, you can also achieve setting default instance with command `@Botkube cloud set default-instance {instance-id}`. + +![Image 11: Cloud Slack Set Default Instances](https://docs.botkube.io/assets/images/cloud_slack_command_set_default-8bdb16f71ec8f0cb97d41967707477e4.png) + +After this point, all of your commands will be executed on the default instance. Moreover, if you want to execute a command on all the target clusters, you can use `--all-clusters` flag. + +![Image 12: Cloud Slack All Clusters](https://docs.botkube.io/assets/images/cloud_slack_command_all_clusters-ff8c8984bb8097d34b419a6cfddb7cd0.png) + +### Setting Public Alias for Private Channels[​](#setting-public-alias-for-private-channels"DirectlinktoSettingPublicAliasforPrivateChannels") + +In order to maintain your confidentiality while using Botkube's plugins, you need to create a public alias for your private Slack channels. This alias will only be visible to Botkube Cloud administrators. + +#### During the Botkube Invitation to Private Channels[​](#during-the-botkube-invitation-to-private-channels"DirectlinktoDuringtheBotkubeInvitationtoPrivateChannels") + +When you invite Botkube to a private channel, a prompt will appear to guide you through the process of creating a public alias. + +#### For Existing Private Channels[​](#for-existing-private-channels"DirectlinktoForExistingPrivateChannels") + +To update an existing alias for a private channel, or if Botkube is already integrated, simply use this command: + +@Botkube cloud set channel-alias + +Cleanup[​](#cleanup"DirectlinktoCleanup") +--------------------------------------------- + +1. Go to Botkube Cloud instances page and click `Manage` button of the instance you want to remove. + +![Image 13: Cloud Slack Instance Manage](https://docs.botkube.io/assets/images/cloud_slack_instance_list_manage-49d417014a51479f9513b83a7ca2c9a2.png) + +2. Click `Delete instance` button, type instance name in the popup and click `Delete instance`. + +caution + +Remember to execute the displayed command to completely remove Botkube and related resources from your cluster. + +![Image 14: Cloud Slack Instance Delete](https://docs.botkube.io/assets/images/cloud_slack_instance_delete-27fe3622760a4cbbd7c92d13d7ddcd41.png) diff --git a/hack/assistant-setup/content/docs.botkube.io__installation__slack__socket-slack.md b/hack/assistant-setup/content/docs.botkube.io__installation__slack__socket-slack.md new file mode 100644 index 0000000..d8ebc2a --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__installation__slack__socket-slack.md @@ -0,0 +1,120 @@ +Title: Socket Slack App | Botkube + +URL Source: https://docs.botkube.io/installation/slack/socket-slack + +Markdown Content: +The Socket-mode app works with the open-source Botkube Agent and does not require an account or subscription. + +Prerequisites[​](#prerequisites"DirectlinktoPrerequisites") +--------------------------------------------------------------- + +* Botkube CLI installed according to the [Getting Started guide](https://docs.botkube.io/cli/getting-started#installation) +* Access to Kubernetes cluster +* Slack Workspace admin access + +Install Socket Slack App in Your Slack workspace[​](#install-socket-slack-app-in-your-slack-workspace"DirectlinktoInstallSocketSlackAppinYourSlackworkspace") +------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + +Botkube uses interactive messaging to provide better experience. Interactive messaging needs a Slack App with Socket Mode enabled and currently this is not suitable for Slack App Directory listing. For this reason, you need to create a Slack App in your own Slack workspace and use it for Botkube deployment. + +danger + +**Multi-cluster caveat:** The architecture of socket-based Slack apps has a limitation on the routing of executor commands. If you would like to use [Botkube executors](https://docs.botkube.io/configuration/executor/) (e.g. kubectl commands) and have multiple Kubernetes clusters, you need to create and install a Botkube Slack app for each cluster. This is required so that the Slack to Botkube connections go to the right place. We recommend you set the name of each app to reflect the cluster it will connect to in the next steps. + +To learn more about the Slack Socket API limitation, see the [comment](https://github.com/slackapi/bolt-js/issues/1263#issuecomment-1006372826) in the official Slack bot framework repository. + +The [Botkube Cloud App for Slack](#botkube-cloud-slack-app) does not have this limitation. + +Follow the steps below to create and install Botkube Slack app to your Slack workspace. + +### Create Slack app[​](#create-slack-app"DirectlinktoCreateSlackapp") + +1. Go to [Slack App console](https://api.slack.com/apps) to create an application. + +2. Click **Create New App** and select **From an app manifest** in the popup to create application from manifest. + +![Image 1: Create App from Manifest](https://docs.botkube.io/assets/images/slack_add_app-716017a6575f393b49e2cd157c67fe48.png) + +3. Select a workspace where you want to create application and click **Next**. + +![Image 2: Select Workspace](https://docs.botkube.io/assets/images/slack_select_workspace-082c3680c0653a819d556756493134d8.png) + +4. Select **YAML** tab, copy & paste one of the following manifests, and click **Next**, and then **Create**. + + +* Public channels only +* Private channels only +* Public and private channels + +display_information: name: Botkube description: Botkube background_color: "#a653a6"features: bot_user: display_name: Botkube always_online: falseoauth_config: scopes: bot: - channels:read - app_mentions:read - reactions:write - chat:write - files:write - users:read # Remote configuration only: Used to get Real Name for audit reportingsettings: event_subscriptions: bot_events: - app_mention interactivity: is_enabled: true org_deploy_enabled: false socket_mode_enabled: true token_rotation_enabled: false + +### Install Botkube to the Slack workspace[​](#install-botkube-to-the-slack-workspace"DirectlinktoInstallBotkubetotheSlackworkspace") + +Once the application is created, you will be redirected to application details page. Press the **Install your app** button, select the workspace and click **Allow to finish installation**. + +![Image 3: Install Slack App](https://docs.botkube.io/assets/images/slack_install_app-0c2fea83804d9a29ffe593d491d699c5.png) + +### Obtain Bot Token[​](#obtain-bot-token"DirectlinktoObtainBotToken") + +Follow the steps to obtain the Bot Token: + +1. Select **OAuth & Permissions** section on the left sidebar. On this page you can copy the bot token which starts with `xoxb...`. + +![Image 4: Retrieve Slack Bot Token](https://docs.botkube.io/assets/images/slack_retrieve_bot_token-98639453c7d18970dca8a4727a1c149e.png) + +2. Export Slack Bot Token as follows: + +export SLACK_API_BOT_TOKEN="{botToken}" + + +### Generate and obtain App-Level Token[​](#generate-and-obtain-app-level-token"DirectlinktoGenerateandobtainApp-LevelToken") + +Slack App with Socket Mode requires an App-Level Token for the websocket connection. + +Follow the steps to generate an App-Level Token: + +1. Select **Basic Information** link from the left sidebar and scroll down to section **App-Level Token**. Click on the **Generate Token and Scopes** button. + +2. Enter a **Name**, select `connections:write` scope, and click **Generate**. + +![Image 5: Generate App-Level Token](https://docs.botkube.io/assets/images/slack_generate_app_token-685ab59995edd5495a5f5cca626ae895.png) + +![Image 6: Retrieve App-Level Token](https://docs.botkube.io/assets/images/slack_retrieve_app_token-512945b00d08d0fdcb7a25a09ec5a950.png) + +3. Copy **App-Level Token** and export it as follows: + +export SLACK_API_APP_TOKEN="${appToken}" + + +### Add Botkube user to a Slack channel[​](#add-botkube-user-to-a-slack-channel"DirectlinktoAddBotkubeusertoaSlackchannel") + +After installing Botkube app to your Slack workspace, you could see a new bot user with the name "Botkube" added in your workspace. Add that bot to a Slack channel you want to receive notification in. You can add it by inviting `@Botkube` in a channel. + +Install Botkube in Kubernetes cluster[​](#install-botkube-in-kubernetes-cluster"DirectlinktoInstallBotkubeinKubernetescluster") +--------------------------------------------------------------------------------------------------------------------------------------- + +To deploy Botkube agent in your cluster, run: + +export CLUSTER_NAME={cluster_name}export ALLOW_KUBECTL={allow_kubectl}export SLACK_CHANNEL_NAME={channel_name}botkube install --version v1.10.0 \--set communications.default-group.socketSlack.enabled=true \--set communications.default-group.socketSlack.channels.default.name=${SLACK_CHANNEL_NAME} \--set communications.default-group.socketSlack.appToken=${SLACK_API_APP_TOKEN} \--set communications.default-group.socketSlack.botToken=${SLACK_API_BOT_TOKEN} \--set settings.clusterName=${CLUSTER_NAME} \--set 'executors.k8s-default-tools.botkube/kubectl.enabled'=${ALLOW_KUBECTL} + +where: + +* **SLACK\_CHANNEL\_NAME** is the channel name where @Botkube is added +* **SLACK\_API\_BOT\_TOKEN** is the Token you received after installing Botkube app to your Slack workspace +* **SLACK\_API\_APP\_TOKEN** is the Token you received after installing Botkube app to your Slack workspace and generate in App-Level Token section +* **CLUSTER\_NAME** is the cluster name set in the incoming messages +* **ALLOW\_KUBECTL** set true to allow `kubectl` command execution by Botkube on the cluster. + +Configuration syntax is explained [here](https://docs.botkube.io/configuration). All possible installation parameters are documented [here](https://docs.botkube.io/configuration/helm-chart-parameters). + +Send `@Botkube ping` in the channel to see if Botkube is running and responding. + +### Delete Botkube from Slack workspace[​](#delete-botkube-from-slack-workspace"DirectlinktoDeleteBotkubefromSlackworkspace") + +* Go to the [Slack apps](https://api.slack.com/apps) page, +* Click on "Botkube", scroll to bottom, and click on "Delete App" button. + +Remove Botkube from Kubernetes cluster[​](#remove-botkube-from-kubernetes-cluster"DirectlinktoRemoveBotkubefromKubernetescluster") +------------------------------------------------------------------------------------------------------------------------------------------ + +Execute the following command to completely remove Botkube and related resources from your cluster: diff --git a/hack/assistant-setup/content/docs.botkube.io__installation__socketslack.md b/hack/assistant-setup/content/docs.botkube.io__installation__socketslack.md new file mode 100644 index 0000000..e38ff3b --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__installation__socketslack.md @@ -0,0 +1,31 @@ +Title: Slack | Botkube + +URL Source: https://docs.botkube.io/installation/socketslack + +Markdown Content: +Botkube Slack App Versions[​](#botkube-slack-app-versions"DirectlinktoBotkubeSlackAppVersions") +------------------------------------------------------------------------------------------------------ + +In order to connect with Slack, Botkube requires a Slack application. There are two versions of the Botkube Slack App available: + +### Botkube Cloud App for Slack[​](#botkube-cloud-app-for-slack"DirectlinktoBotkubeCloudAppforSlack") + +The Botkube Cloud App for Slack offers several advanced features: + +* One-click installation into your Slack workspace +* Multi-cluster executor support with a single Slack App +* Manage Slack channels directly from the Botkube web app and ensure the Botkube bot is invited to the correct channels + +The Botkube Cloud App for Slack uses Botkube's cloud services to manage channels and route executor commands. Events and alerts are sent directly from your cluster to your Slack workspace for reliable, fast notifications. + +You can directly try Botkube Cloud App for Slack for free by creating an account in the [Botkube Web App](https://app.botkube.io/). Follow the [Cloud Slack app tutorial](https://docs.botkube.io/installation/slack/cloud-slack) to learn more. + +### Botkube Socket Slack App[​](#botkube-socket-slack-app"DirectlinktoBotkubeSocketSlackApp") + +The Socket-mode app works with the open-source Botkube Agent. The Botkube Socket-mode Slack App has the following caveats: + +* Must be installed manually into your Slack workspace using the provided configuration +* Slack channels must be managed manually, and you need to ensure the Botkube bot is invited to any channel you want to use with Botkube +* When using executor plugins (e.g. kubectl) in a multi-cluster environment, each cluster needs to have a dedicated Botkube Slack bot in order to route commands to the correct cluster. + +Follow the [instruction](https://docs.botkube.io/installation/slack/socket-slack) for more details. diff --git a/hack/assistant-setup/content/docs.botkube.io__installation__teams.md b/hack/assistant-setup/content/docs.botkube.io__installation__teams.md new file mode 100644 index 0000000..30e394a --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__installation__teams.md @@ -0,0 +1,218 @@ +Title: Microsoft Teams | Botkube + +URL Source: https://docs.botkube.io/installation/teams/ + +Markdown Content: +info + +The previous Microsoft Teams integration has been deprecated. If you need to use the legacy Microsoft Teams integration, see the [Botkube 1.5 Documentation](https://docs.botkube.io/1.5/installation/teams/). It is recommended to migrate to the new Microsoft Teams app per the below instructions. + +Botkube Cloud Microsoft Teams App[​](#botkube-cloud-microsoft-teams-app"DirectlinktoBotkubeCloudMicrosoftTeamsApp") +--------------------------------------------------------------------------------------------------------------------------- + +The Botkube Cloud Microsoft Teams app offers several advanced features: + +* Simplified installation into your Microsoft Teams workspace +* Multi-cluster executor support with a single Microsoft Teams app +* Manage Teams channels directly from the Botkube web app and ensure the Botkube bot is invited to the correct channels + +The Botkube Cloud Microsoft Teams app uses Botkube's cloud services to manage channels and route source events and executor commands. Currently, it requires a manual side-loading of the app, but we are working on getting it listed in Microsoft AppSource. + +You can directly try Botkube Cloud Microsoft Teams app for free by creating an account in the [Botkube Web App](https://app.botkube.io/). Follow the steps below to install the app. + +Prerequisites[​](#prerequisites"DirectlinktoPrerequisites") +--------------------------------------------------------------- + +* A Botkube Cloud account. + +You can try out the Botkube Cloud Microsoft Teams app for free by creating an account in the [Botkube Cloud app](https://app.botkube.io/). + + +Create a Botkube Cloud Instance with Microsoft Teams[​](#create-a-botkube-cloud-instance-with-microsoft-teams"DirectlinktoCreateaBotkubeCloudInstancewithMicrosoftTeams") +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + +### Connect Botkube Cloud to your Kubernetes cluster[​](#connect-botkube-cloud-to-your-kubernetes-cluster"DirectlinktoConnectBotkubeCloudtoyourKubernetescluster") + +1. Go to Botkube Cloud [Web App](https://app.botkube.io/) and click on `New Instance` button. + +![Image 1: New Instance](https://docs.botkube.io/assets/images/cloud_teams_new_instance-65f57c9b6c2e30c7b6250b1ebebf306c.png) + +2. Install Botkube Agent on your Kubernetes cluster by following the instructions on the page. + +![Image 2: Install Agent](https://docs.botkube.io/assets/images/cloud_teams_install-c457bdc2758930b79f90849e72f6ebf2.png) + +3. Click `Add platform` dropdown, and select `Teams` option. + +![Image 3: Teams Platform Select](https://docs.botkube.io/assets/images/cloud_teams_select_platform-682cdcc197682e6bdb909bdf4e6a5f80.png) + + +Proceed with the next section. + +### Install Botkube app to your Microsoft Teams organization and add it to your team[​](#install-botkube-app-to-your-microsoft-teams-organization-and-add-it-to-your-team"DirectlinktoInstallBotkubeapptoyourMicrosoftTeamsorganizationandaddittoyourteam") + +1. Download the Botkube Cloud Microsoft Teams app by clicking the `Download Botkube App for Teams` button. + +![Image 4: Download Teams App](https://docs.botkube.io/assets/images/cloud_teams_download_app-d7196c1a1d06c798599e6d798558823b.png) + +2. Sideload the Botkube app to your Microsoft Teams organization via Teams Admin Center, following the [official documentation](https://learn.microsoft.com/en-us/microsoftteams/teams-custom-app-policies-and-settings#upload-a-custom-app-using-teams-admin-center). + +info + +This step requires administrator permissions on your Microsoft Teams organization. Sideloading app is needed only once for the whole organization. + +* Ensure the Botkube app is allowed for the organization in the [Teams Admin Center](https://admin.teams.microsoft.com/policies/manage-apps) + +![Image 5: Teams Admin Center](https://docs.botkube.io/assets/images/cloud_teams_admin_center-8b857abd2f5aef5416b820878bbaa2a7.png) + +3. Add the Botkube app to your team. + +1. In your Microsoft Teams application, navigate to the **Apps** tab. + +2. Select the **Built for your organization** tab. + +3. On the Botkube app card, click on the **Add** button. + +![Image 6: Add Botkube App](https://docs.botkube.io/assets/images/cloud_teams_add_app-559531c09a0c06d3c0af4f70dc6f741b.png) + +4. Click the **Add to a team** button. + +![Image 7: Add app to team](https://docs.botkube.io/assets/images/cloud_teams_botkube_app_add-472d56ad47f55d7f7782a09eeacf2552.png) + +5. Select the team and default channel, where you'll get the welcome message. + +![Image 8: Select a team](https://docs.botkube.io/assets/images/cloud_teams_select_team-3df2e3153f0d02101671bf04dc1376b2.png) + +6. Click the **Set up a bot** button. + + +Once the Botkube app is added to your team, you'll receive a welcome message. + +![Image 9: Botkube Cloud Microsoft Teams Welcome Message](https://docs.botkube.io/assets/images/cloud_teams_welcome_msg-ff190292b2cd49e74dc49c4ba286c6bb.png) + +Proceed with the next section. + +### Grant permissions for Botkube app[​](#grant-permissions-for-botkube-app"DirectlinktoGrantpermissionsforBotkubeapp") + +info + +This step requires administrator permissions on your Microsoft Teams organization. Granting permissions is needed only once for the whole organization. + +1. Click on the **Grant access** button. + +2. Select your Microsoft account. + +![Image 10: Select account](https://docs.botkube.io/assets/images/cloud_teams_permissions_select_account-9d17c4cfaa2eb163cd114030675293c5.png) + +3. Click the **Accept** button. + +![Image 11: Grant access](https://docs.botkube.io/assets/images/cloud_teams_permissions_accept-9579403a6317274d931ab5fb5b37e8a0.png) + +4. You will be redirected to the confirmation page. + +![Image 12: Confirmation page](https://docs.botkube.io/assets/images/cloud_teams_permissions_success-05aa285e1c8e448c475932925a9ffb02.png) + + +Close the page and proceed with the next section. + +### Connect your team to Botkube Cloud[​](#connect-your-team-to-botkube-cloud"DirectlinktoConnectyourteamtoBotkubeCloud") + +Go back to the Microsoft Teams app channel, where you received the welcome message. + +1. Click the **Connect to Botkube Cloud** button in the welcome message. + +2. Log in to Botkube Cloud, if you haven't already. Ensure that you selected the correct organization, where you want to connect your team. + +3. Click the **Connect** button. + +![Image 13: Connect to Botkube Cloud](https://docs.botkube.io/assets/images/cloud_teams_team_connect-46d7192e61f8dcd220f7dd333e8cbaa3.png) + +4. You will see a confirmation page. + +![Image 14: Confirmation page](https://docs.botkube.io/assets/images/cloud_teams_team_connect_success-2121d79ce97a8f66bd660bf852a32cff.png) + + +Close the page and proceed with the next section. + +### Finalize Botkube Cloud instance configuration[​](#finalize-botkube-cloud-instance-configuration"DirectlinktoFinalizeBotkubeCloudinstanceconfiguration") + +Go back to the Botkube Cloud instance creation. + +1. In step 2, select your connected team and provide other details. + +* **Connected Microsoft Teams team:** Teams team that you connected in the previous section. +* **Display Name:** Display name of the Microsoft Teams team configuration. +* **Channels:** Teams channels where you can execute Botkube commands and receive notification. + +![Image 15: Botkube Cloud Instance Configuration](https://docs.botkube.io/assets/images/cloud_teams_config-c996765f7ed399d6ddd263bfd463a140.png) + +2. Add plugins you want to enable in your Botkube instance and click `Next` button. + +![Image 16: Microsoft Teams Plugins](https://docs.botkube.io/assets/images/cloud_teams_add_plugins-0236355cf8424353758934a96ca81112.png) + +3. Include optional default command aliases and actions and click `Apply Changes` button to update Botkube Cloud instance. + +![Image 17: Microsoft Teams Create](https://docs.botkube.io/assets/images/cloud_teams_create-c3ff681023bb64d1c92ecf2c85f112a3.png) + + +Using Botkube Cloud Microsoft Teams App[​](#using-botkube-cloud-microsoft-teams-app"DirectlinktoUsingBotkubeCloudMicrosoftTeamsApp") +--------------------------------------------------------------------------------------------------------------------------------------------- + +You can start using Botkube Cloud Microsoft Teams by typing `@Botkube cloud help` in one of the channels in the team you configured in one of the previous steps. + +![Image 18: Botkube Cloud Microsoft Teams Command Help](https://docs.botkube.io/assets/images/cloud_teams_command_help-7b1a978b74f7bb08c7062b6a80bbea07.png) + +### Listing Cloud Instances[​](#listing-cloud-instances"DirectlinktoListingCloudInstances") + +You can list all your Botkube Cloud instances by typing `@Botkube cloud list` in the Microsoft Teams channel, or click the button `List connected instances` in the help command response. Besides the instance `name`, `ID`, and `status` in the list response, you can also click the `Get details` button to go to instance details on Botkube Cloud Dashboard. + +![Image 19: Botkube Cloud Microsoft Teams List Instances](https://docs.botkube.io/assets/images/cloud_teams_list_instances-0079ca8c5f306a230342b447ef8f31cb.png) + +### Setting Default Instance[​](#setting-default-instance"DirectlinktoSettingDefaultInstance") + +Once a Botkube command is executed, it will be handled on target Kubernetes cluster specified with `--cluster-name` flag. This is an optional flag, where if you have not specified it, Botkube Cloud will select the first instance. However, you can also achieve setting default instance with command `@Botkube cloud set default-instance`. + +![Image 20: Cloud Microsoft Teams Set Default Instances](https://docs.botkube.io/assets/images/cloud_teams_command_set_default-3b37b0496c660bc70a102c910234456e.png) + +After this point, all of your commands will be executed on the default instance. Moreover, if you want to execute a command on all the target clusters, you can use `--all-clusters` flag. + +![Image 21: Cloud Microsoft Teams All Clusters](https://docs.botkube.io/assets/images/cloud_teams_command_all_clusters-a5c8c474816eb96d277a3dec873d8351.png) + +Cleanup[​](#cleanup"DirectlinktoCleanup") +--------------------------------------------- + +1. Go to Botkube Cloud instances page and click `Manage` button of the instance you want to remove. + +![Image 22: Cloud Teams Instance Manage](https://docs.botkube.io/assets/images/cloud_teams_instance_list_manage-e7ccd6d8aaabb01576a4ba21cd2f722d.png) + +2. Click `Delete instance` button, type instance name in the popup and click `Delete instance`. + +caution + +Remember to execute the displayed command to completely remove Botkube and related resources from your cluster. + +![Image 23: Cloud Teams Instance Delete](https://docs.botkube.io/assets/images/cloud_teams_instance_delete-27fe3622760a4cbbd7c92d13d7ddcd41.png) + + +Caveats[​](#caveats"DirectlinktoCaveats") +--------------------------------------------- + +### RBAC `ChannelName` mapping[​](#rbac-channelname-mapping"Directlinktorbac-channelname-mapping") + +Same as other communication platforms, Botkube Cloud Microsoft Teams app supports RBAC along with [all mappings](https://docs.botkube.io/configuration/rbac#mapping-types). However, because of the Microsoft Teams API limitation, for the default team channel the `ChannelName` is always `General`, regardless of the actual localized channel name. + +Limitations[​](#limitations"DirectlinktoLimitations") +--------------------------------------------------------- + +Botkube Cloud Microsoft Teams App currently doesn't support the following features yet: + +* Processing states from selected dropdowns, e.g., used for the `kubectl` command builder. In a result, the command builder is not available. + +* Adding 👀 and ✅ reactions to messages indicating process status. + +This seems to be a limitation of the Microsoft Teams platform, however we'll investigate if there is a workaround. + +* Sending messages visible only to specific users. + +* Replacing messages with new content, e.g., used for pagination. Currently, a new card is sent as a new message. + +* User mentions in messages. Instead, Botkube app uses plaintext mentions with first and last name. diff --git a/hack/assistant-setup/content/docs.botkube.io__installation__webhook.md b/hack/assistant-setup/content/docs.botkube.io__installation__webhook.md new file mode 100644 index 0000000..f9410b9 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__installation__webhook.md @@ -0,0 +1,12 @@ +Title: Outgoing webhook | Botkube + +URL Source: https://docs.botkube.io/installation/webhook/ + +Markdown Content: +Previous + +Elasticsearch for Botkube Cloud + +Next + +Outgoing webhook for self-hosted Botkube diff --git a/hack/assistant-setup/content/docs.botkube.io__installation__webhook__cloud.md b/hack/assistant-setup/content/docs.botkube.io__installation__webhook__cloud.md new file mode 100644 index 0000000..1020fb3 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__installation__webhook__cloud.md @@ -0,0 +1,69 @@ +Title: Outgoing webhook for Botkube Cloud | Botkube + +URL Source: https://docs.botkube.io/installation/webhook/cloud + +Markdown Content: +* [](https://docs.botkube.io/) * [Installation](https://docs.botkube.io/) +* [Outgoing webhook](https://docs.botkube.io/installation/webhook/) +* Outgoing webhook for Botkube Cloud + +Version: 1.10 + +Prerequisites[​](#prerequisites"DirectlinktoPrerequisites") +--------------------------------------------------------------- + +* Botkube Cloud account which you can create [here](https://app.botkube.io/) for free. + +Create a Botkube Cloud Instance with Webhook[​](#create-a-botkube-cloud-instance-with-webhook"DirectlinktoCreateaBotkubeCloudInstancewithWebhook") +------------------------------------------------------------------------------------------------------------------------------------------------------------ + +1. Go to Botkube Cloud [Web App](https://app.botkube.io/) and create a new instance. + +You can do it by clicking "Create an Instance" button on Home Page or under this link [Create an Instance](https://app.botkube.io/instances/add) + +2. Fill in the `Instance Display Name` and click `Next` button. + +![Image 1: Instance Display Name](https://docs.botkube.io/assets/images/webhook_instance_display_name-b35605d19eef1ecc93de54d6eefacae5.png) + +3. Click `Add platform` dropdown, and select `Webhook` option. + +![Image 2: Select Platform](https://docs.botkube.io/assets/images/webhook_platform_select-aac36ca4e34549bef88cc00b3603f4ac.png) + +4. Fill in all required data in the form + +![Image 3: Form](https://docs.botkube.io/assets/images/webhook_form-ccd69a8ec75ac03c98154db9bcf32b13.png) + +5. Add plugins you want to enable in your Botkube instance and click `Next` button. + +![Image 4: Plugins](https://docs.botkube.io/assets/images/webhook_add_plugins-0bafa9371a2d3bccfc36c138bd442456.png) + +6. Include optional `default aliases` and `default actions` and click `Create` button to create Botkube Cloud instance. + +![Image 5: Create](https://docs.botkube.io/assets/images/webhook_create-27a060686f00b0fb21f01839fd959e04.png) + +note + +If you don't include other platforms which use `Executor` plugins we recommend `default aliases` and `default actions` options unchecked + +7. Follow the instructions in the summary page to deploy Botkube into your environment. + +![Image 6: Summary](https://docs.botkube.io/assets/images/webhook_summary-bfdc3ff0af6735b41a17d7219fd6b6f0.png) + + +Clean up[​](#clean-up"DirectlinktoCleanup") +------------------------------------------------ + +### Remove Botkube from Kubernetes cluster[​](#remove-botkube-from-kubernetes-cluster"DirectlinktoRemoveBotkubefromKubernetescluster") + +1. Go to Botkube Cloud instances page and click `Manage` button of the instance you want to remove. + +2. Click `Delete instance` button, type instance name in the popup and click `Delete instance`. + +caution + +Remember to execute the displayed command to completely remove Botkube and related resources from your cluster. + +![Image 7: Delete](https://docs.botkube.io/assets/images/webhook_instance_delete-27fe3622760a4cbbd7c92d13d7ddcd41.png) + + +[Previous Outgoing webhook for self-hosted Botkube](https://docs.botkube.io/installation/webhook/self-hosted)[Next Overview](https://docs.botkube.io/examples-and-tutorials/) diff --git a/hack/assistant-setup/content/docs.botkube.io__installation__webhook__self-hosted.md b/hack/assistant-setup/content/docs.botkube.io__installation__webhook__self-hosted.md new file mode 100644 index 0000000..7458da7 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__installation__webhook__self-hosted.md @@ -0,0 +1,12 @@ +Title: Outgoing webhook for self-hosted Botkube | Botkube + +URL Source: https://docs.botkube.io/installation/webhook/self-hosted + +Markdown Content: +Botkube can be integrated with external apps via Webhooks. A webhook is essentially a POST request sent to a callback URL. So you can configure Botkube to send events on specified URL. + +export CLUSTER_NAME={cluster_name}export WEBHOOK_URL={url}botkube install --version v1.10.0 \--set communications.default-group.webhook.enabled=true \--set communications.default-group.webhook.url=${WEBHOOK_URL} \--set settings.clusterName=${CLUSTER_NAME} + +Configuration syntax is explained [here](https://docs.botkube.io/configuration). All possible installation parameters are documented [here](https://docs.botkube.io/configuration/helm-chart-parameters). + +Execute the following command to completely remove Botkube and related resources from your cluster: diff --git a/hack/assistant-setup/content/docs.botkube.io__license.md b/hack/assistant-setup/content/docs.botkube.io__license.md new file mode 100644 index 0000000..776e973 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__license.md @@ -0,0 +1,17 @@ +Title: License | Botkube + +URL Source: https://docs.botkube.io/license/ + +Markdown Content: +MIT License[​](#mit-license"DirectlinktoMITLicense") +--------------------------------------------------------- + +Copyright (c) 2022 Kubeshop + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +* [MIT License](#mit-license) diff --git a/hack/assistant-setup/content/docs.botkube.io__operation__common-problems.md b/hack/assistant-setup/content/docs.botkube.io__operation__common-problems.md new file mode 100644 index 0000000..1273b62 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__operation__common-problems.md @@ -0,0 +1,122 @@ +Title: Common problems | Botkube + +URL Source: https://docs.botkube.io/operation/common-problems + +Markdown Content: +This document describes how to identify and resolve common Botkube problems that might occur. + +Incompatible plugin API version[​](#incompatible-plugin-api-version"DirectlinktoIncompatiblepluginAPIversion") +--------------------------------------------------------------------------------------------------------------------- + +**Symptoms** + +* Botkube agent Pod is restarting + +* In [Botkube agent logs](https://docs.botkube.io/operation/diagnostics#agent-logs), you see such entry: + +while running application: while waiting for goroutines to finish gracefully: 1 error occurred: * while starting plugins manager: while creating executor plugins: Incompatible API version with plugin. Plugin version: 2, Client versions: [1] **Debugging steps** * [Check Botkube agent version](https://docs.botkube.io/operation/diagnostics#agent-version). + +* [Check plugin repository version](https://docs.botkube.io/operation/diagnostics#check-configured-plugin-repositories). + + +**Solution** + +In order to fix the problem, you need to make sure that the agent version is the same as the plugin repository version. For example, for agent image `ghcr.io/kubeshop/botkube:v1.5.0` you need to configure official plugin repository in version `v1.5.0`: `https://github.com/kubeshop/botkube/releases/download/v1.5.0/plugins-index.yaml`. To change the repository URL, run: + +helm upgrade botkube botkube/botkube -n botkube --reuse-values --set plugins.repositories.botkube.url="https://github.com/kubeshop/botkube/releases/download/v1.5.0/plugins-index.yaml" + +Helm chart loading error[​](#helm-chart-loading-error"DirectlinktoHelmchartloadingerror") +------------------------------------------------------------------------------------------------ + +**Symptoms** + +* You encounter the following errors when running the `botkube install` command: + +Error: while loading Helm chart: Chart.yaml file is missing + +or + +Error: while loading Helm chart: file 'botkube' does not appear to be a gzipped archive; got 'application/octet-stream' + + +**Solution** + +If you're experiencing these errors, it means that there is a conflict with a file or directory named `botkube` in the location where you executed the `botkube install` command. To resolve this issue, follow these steps: + +1. **rename or remove 'botkube':** You cannot have a file or directory named `botkube` in the same location where you are trying to install Botkube. You should either rename or remove the conflicting `botkube` file or directory. + +2. **Change Directory:** Alternatively, you can navigate to a different directory in your command line interface before executing the `botkube install` command. Ensure that the directory where you run the command does not contain any conflicting `botkube` files or directories. + + +Network connections[​](#network-connections"DirectlinktoNetworkconnections") +--------------------------------------------------------------------------------- + +Botkube can work in private clusters where inbound connections are limited. However, you need to allow outgoing connections to all configured plugin repositories and API endpoints, depending on the communication platform you intend to use. + +### Botkube official plugins[​](#botkube-official-plugins"DirectlinktoBotkubeofficialplugins") + +The official Botkube plugin index and binaries are hosted on [GitHub releases](https://github.com/kubeshop/botkube/releases). For instance, for the version `v1.5.0` the following URLs are used: + +* Plugin index URL: [https://github.com/kubeshop/botkube/releases/download/v1.10.0/plugins-index.yaml](https://github.com/kubeshop/botkube/releases/download/v1.10.0/plugins-index.yaml) +* Kubectl plugin binary for `linux/amd64`: [https://github.com/kubeshop/botkube/releases/download/v1.10.0/executor\_kubectl\_linux\_amd64.tar.gz](https://github.com/kubeshop/botkube/releases/download/v1.10.0/executor_kubectl_linux_amd64.tar.gz) + +As a result, you need to allow outbound connections for Botkube to successfully download GitHub assets. + +Additionally, each plugin may define additional dependencies that the [plugin manager](https://docs.botkube.io/architecture/#plugin-manager) downloads on startup. For example, the Helm plugin for `linux/amd64` requires `https://get.helm.sh/helm-v3.6.3-linux-amd64.tar.gz`. To learn more about all URLs that need to be accessible, you can download a plugin index and check all plugin definitions that you want to enable. + +### Socket Slack[​](#socket-slack"DirectlinktoSocketSlack") + +For the Slack communication platform, we use the [Socket mode](https://api.slack.com/apis/connections/socket) approach. In order to make this integration work, you need to allow all Slack API URLs defined under [https://my.slack.com/help/urls](https://my.slack.com/help/urls), especially: + +* api.slack.com +* upload.slack.com +* universal-upload-edge.slack.com +* global-upload-edge.slack.com +* wss://wss-backup.slack.com +* wss://wss-mobile.slack.com +* wss://wss-primary.slack.com + +Visit [Slack official guide](https://slack.com/help/articles/360001603387-Manage-Slack-connection-issues#network-settings) for troubleshooting your Slack connection. + +### Cloud Slack[​](#cloud-slack"DirectlinktoCloudSlack") + +Cloud Slack integration communicates via gRPC with the Botkube control-plane. In order to make this integration work, you need to allow access to `api.botkube.io`. + +Plugin's permissions[​](#plugins-permissions"DirectlinktoPlugin'spermissions") +----------------------------------------------------------------------------------- + +If you experience problems while configuring RBAC (Role-Based Access Control) for plugins, you can refer to the [troubleshooting](https://docs.botkube.io/configuration/rbac#troubleshooting) guide for assistance. + +Botkube doesn't respond on MS Teams[​](#botkube-doesnt-respond-on-ms-teams"DirectlinktoBotkubedoesn'trespondonMSTeams") +-------------------------------------------------------------------------------------------------------------------------------- + +In order to solve the problem, please refer to the [troubleshooting](https://docs.botkube.io/installation/teams/#troubleshooting) guide for assistance. + +I can't see my Slack private channels in Cloud Dashboard[​](#i-cant-see-my-slack-private-channels-in-cloud-dashboard"DirectlinktoIcan'tseemySlackprivatechannelsinCloudDashboard") +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +To comply with Slack's privacy policy, private channels won't be visible until you create a public alias for the respective channel. Refer to the provided instructions for guidance on completing this process: [Setting Public Alias for Private Channels](https://docs.botkube.io/installation/slack/cloud-slack#setting-public-alias-for-private-channels) + +Air-Gap installation[​](#air-gap-installation"DirectlinktoAir-Gapinstallation") +------------------------------------------------------------------------------------ + +**Please note that we do not support air-gap installations.** However, here are some suggestions that you may find helpful: + +* Mirror Botkube images to your private registry: + +* [`ghcr.io/kubeshop/botkube:{botkube_version}`](https://github.com/kubeshop/botkube/pkgs/container/botkube), e.g., `ghcr.io/kubeshop/botkube:v1.5.0` +* [`ghcr.io/kubeshop/k8s-sidecar:in-cluster-config`](https://github.com/orgs/kubeshop/packages/container/package/k8s-sidecar) +* During startup, Botkube downloads repository indexes and all enabled plugins. All of them are stored under the `/tmp` folder. To ensure that the [plugin manager](https://docs.botkube.io/architecture/#plugin-manager) does not make external calls, all required plugins must be present. You can achieve this by mounting a Persistent Volume Claim (PVC) at this path. By default, we use [`emptyDir`](https://github.com/kubeshop/botkube/blob/9d0627794078d519987309271b64c94047cd65d9/helm/botkube/templates/deployment.yaml#L176-L177). Later, you can mount your Persistent Volume (PV) with cached plugins in your air-gapped environment. + +* Select a communication platform that can be installed in the air-gapped environment, such as [Mattermost](https://docs.botkube.io/installation/mattermost/). + + +Others[​](#others"DirectlinktoOthers") +------------------------------------------ + +Having trouble finding a solution to your problem? No problem at all! We will help you to get your Botkube up and running. First, follow these steps: + +1. [Export the Botkube agent configuration](https://docs.botkube.io/operation/diagnostics#agent-configuration) +2. [Export the Botkube agent logs](https://docs.botkube.io/operation/diagnostics#agent-logs) + +After that, come join our Slack community workspace at [https://join.botkube.io.](https://join.botkube.io./) Head over to the [`#helping-hands`](https://slack.com/app_redirect?team=TG7TTBLJ0&channel=helping-hands) channel and share the assets you exported along with a description of your issue. Our team is ready to assist you! diff --git a/hack/assistant-setup/content/docs.botkube.io__operation__diagnostics.md b/hack/assistant-setup/content/docs.botkube.io__operation__diagnostics.md new file mode 100644 index 0000000..03c33a6 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__operation__diagnostics.md @@ -0,0 +1,81 @@ +Title: Basic diagnostics | Botkube + +URL Source: https://docs.botkube.io/operation/diagnostics + +Markdown Content: +Here you can find the list of basic diagnostic actions that may help you look for bug causes. + +In order to run the suggested commands, make sure that you have installed: + +* [`helm`](https://helm.sh/docs/intro/install/) +* [`kubectl`](https://kubernetes.io/docs/tasks/tools/) + +Agent[​](#agent"DirectlinktoAgent") +--------------------------------------- + +This section describes [Botkube agent](https://docs.botkube.io/architecture/) related diagnostic. + +### Agent version[​](#agent-version"DirectlinktoAgentversion") + +The easiest way to check the Agent version is to get the Docker image: + +kubectl get deploy botkube -n botkube -o=jsonpath="{'Used images\n'}{range .spec.template.spec.containers[*]}{.name}{':\t'}{.image}{'\n'}{end}" You should get an output similar to this: Used imagesbotkube: ghcr.io/kubeshop/botkube:v1.5.0cfg-watcher: ghcr.io/kubeshop/k8s-sidecar:in-cluster-config The `botkube` is the agent image. The container image tag (`v1.5.0`) is the version in which it was deployed on the cluster. ### Agent health[​](#agent-health"DirectlinktoAgenthealth") + +To check if the Agent Pods are in the `Running` state, run: + +kubectl get pod -n botkube -l app=botkube + +All the containers from Pods should be in the `Running` status. Restarts' number higher than one may also indicate problems, e.g. not enough resource, lack of permissions, network timeouts, etc. + +### Agent logs[​](#agent-logs"DirectlinktoAgentlogs") + +If the Botkube Agent is [healthy](#agent-health), you should be able to track any bug by checking the logs. To check the logs, run: + +kubectl logs -n botkube -l app=botkube -c botkube + +To get all logs specify `--tail=-1`, otherwise only 10 last lines are displayed. + +To check the logs since a given time, use the `--since-time` or `--since` flag, for example: + +--since-time=2020-03-30T10:02:08Z + +### Agent configuration[​](#agent-configuration"DirectlinktoAgentconfiguration") + +Select a tab to use a tool of your choice for getting Botkube configuration: + +* Botkube CLI +* kubectl + +note + +The `botkube config get` command is available from the `v1.4.0` version. + +Install [Botkube CLI](https://docs.botkube.io/cli/getting-started#installation) and run: + +botkube config get > /tmp/bk-config.yaml + +### Agent restart[​](#agent-restart"DirectlinktoAgentrestart") + +When Pods are unhealthy, or if the operation processing is stuck, you can restart the Pod using this command: + +kubectl delete po -n botkube -l app=botkube + +### Agent debug logging[​](#agent-debug-logging"DirectlinktoAgentdebuglogging") + +In order to change the logging level to `debug`, run: + +helm upgrade botkube botkube/botkube -n botkube --set settings.log.level="debug" --reuse-values + +If the Botkube agent Pod isn't restarted automatically, [restart it manually](#agent-restart). + +### Check configured plugin repositories[​](#check-configured-plugin-repositories"DirectlinktoCheckconfiguredpluginrepositories") + +Select a tab to use a tool of your choice for checking plugin repository configuration: + +* yq +* jq +* grep + +Install [`yq`](https://github.com/mikefarah/yq) and run: + +helm get values botkube --all -oyaml | yq '.plugins' diff --git a/hack/assistant-setup/content/docs.botkube.io__plugin.md b/hack/assistant-setup/content/docs.botkube.io__plugin.md new file mode 100644 index 0000000..22b14df --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__plugin.md @@ -0,0 +1,16 @@ +Title: Plugin Development | Botkube + +URL Source: https://docs.botkube.io/plugin/ + +Markdown Content: +The Botkube plugin system allows you to extend the Botkube core with custom logic. For example, call or receive events from third-party services. + +To learn more about the Botkube plugin system, follow the recommended steps: + +* Get familiar with the Botkube [architecture](https://docs.botkube.io/architecture). +* Enable and configure the [Helm](https://docs.botkube.io/configuration/executor/helm) executor. +* Use the [template repository](https://docs.botkube.io/plugin/quick-start). +* Learn how to develop a custom [executor](https://docs.botkube.io/plugin/custom-executor) or [source](https://docs.botkube.io/plugin/custom-source) plugin. +* [Distribute the plugins](https://docs.botkube.io/plugin/repo) that you built. + +Share feedback with us via [Slack](https://join.botkube.io/) or [GitHub](https://github.com/kubeshop/botkube/issues)! diff --git a/hack/assistant-setup/content/docs.botkube.io__plugin__custom-executor.md b/hack/assistant-setup/content/docs.botkube.io__plugin__custom-executor.md new file mode 100644 index 0000000..6ee49a5 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__plugin__custom-executor.md @@ -0,0 +1,88 @@ +Title: Custom executor | Botkube + +URL Source: https://docs.botkube.io/plugin/custom-executor + +Markdown Content: +You can extend Botkube functionality by writing custom executor plugin. An executor allows you to run a given command, such as `kubectl`, directly in the chat window of each communication platform For example. + +Plugin executor is a binary that implements the [executor](https://github.com/kubeshop/botkube/blob/main/proto/executor.proto) Protocol Buffers contract. + +Goal[​](#goal"DirectlinktoGoal") +------------------------------------ + +This tutorial shows you how to build a custom `echo` executor that responds with a command that was specified by the user in a chat window. + +![Image 1: echo-demo](https://docs.botkube.io/assets/images/echo-demo-ff35ba0e3555968d781b9a2ac6961311.gif) + +For a final implementation, see the [Botkube template repository](https://docs.botkube.io/plugin/quick-start). + +Prerequisites[​](#prerequisites"DirectlinktoPrerequisites") +--------------------------------------------------------------- + +* Basic understanding of the Go language. +* [Go](https://golang.org/doc/install) at least 1.18. +* See [go.mod](https://github.com/kubeshop/botkube/blob/main/go.mod#L1) for the recommended version used by Botkube team. +* [GoReleaser](https://goreleaser.com/) at least 1.13. + +### Develop plugin business logic[​](#develop-plugin-business-logic"DirectlinktoDeveloppluginbusinesslogic") + +1. Create an executor plugin directory: + +mkdir botkube-plugins && cd botkube-plugins + +2. Initialize the Go module: + +go mod init botkube-plugins + +3. Create the `main.go` file for the `echo` executor with the following template: + +cat << EOF > main.gopackage mainimport ( "context" "fmt" "github.com/MakeNowJust/heredoc" "github.com/hashicorp/go-plugin" "github.com/kubeshop/botkube/pkg/api" "github.com/kubeshop/botkube/pkg/api/executor")// EchoExecutor implements the Botkube executor plugin interface.type EchoExecutor struct{}func main() { executor.Serve(map[string]plugin.Plugin{ "echo": &executor.Plugin{ Executor: &EchoExecutor{}, }, })}EOF This template code imports required packages and registers `EchoExecutor` as the gRPC plugin. At this stage, the `EchoExecutor` service doesn't implement the required [Protocol Buffers](https://github.com/kubeshop/botkube/blob/main/proto/executor.proto) contract. We will add the required methods in the next steps. + +4. Download imported dependencies: + +5. Add the required `Metadata` method: + +// Metadata returns details about the Echo plugin.func (*EchoExecutor) Metadata(context.Context) (api.MetadataOutput, error) { return api.MetadataOutput{ Version: "1.0.0", Description: "Echo sends back the command that was specified.", JSONSchema: api.JSONSchema{ Value: heredoc.Doc(`{ "$schema": "http://json-schema.org/draft-04/schema#", "title": "echo", "description": "Example echo plugin", "type": "object", "properties": { "formatOptions": { "description": "Options to format echoed string", "type": "array", "items": { "type": "string", "enum": ["bold", "italic" ] } } }, "additionalProperties": false }`), }, }, nil} The `Metadata` method returns basic information about your plugin. This data is used when the plugin index is generated in an automated way. You will learn more about that in the next steps. Ąs a part of the `Metadata` method, you can define the plugin dependencies. To learn more about them, see the [Dependencies](https://docs.botkube.io/plugin/dependencies) document. + +6. Add the required `Execute` method: + +// Execute returns a given command as a response.func (*EchoExecutor) Execute(_ context.Context, in executor.ExecuteInput) (executor.ExecuteOutput, error) { return executor.ExecuteOutput{ Message: api.NewCodeBlockMessage(response, true), }, nil} + +The `Execute` method is the heart of your executor plugin. This method runs your business logic and returns the execution output. Next, the Botkube core sends back the response to a given communication platform. If the communication platform supports interactivity, you can construct and return interactive messages containing buttons, dropdowns, input text, and more complex formatting. To learn more about it, see the [Interactive Messages](https://docs.botkube.io/plugin/interactive-messages) guide. + +For each `Execute` method call, Botkube attaches the list of associated configurations. You will learn more about that in the [**Passing configuration to your plugin**](#passing-configuration-to-your-plugin) section. + +7. Add the required `Help` method: + +// Help returns help messagefunc (EchoExecutor) Help(context.Context) (api.Message, error) { btnBuilder := api.NewMessageButtonBuilder() return api.Message{ Sections: []api.Section{ { Base: api.Base{ Header: "Run `echo` commands", Description: description, }, Buttons: []api.Button{ btnBuilder.ForCommandWithDescCmd("Run", "echo 'hello world'"), }, }, }, }, nil} You can use `api.NewCodeBlockMessage` or `api.NewPlaintextMessage` helper functions, or construct your own message. Build plugin binaries[​](#build-plugin-binaries"DirectlinktoBuildpluginbinaries") +--------------------------------------------------------------------------------------- + +Now it's time to build your plugin. For that purpose, we will use GoReleaser. It simplifies building Go binaries for different architectures. The important thing is to produce the binaries for the architecture of the host platform where Botkube is running. Adjust the `goos`, `goarch`, and `goarm` properties based on your needs. + +note + +Instead of GoReleaser, you can use another tool of your choice. + +1. Create the GoReleaser configuration file: + +cat << EOF > .goreleaser.yamlproject_name: botkube-pluginsbefore: hooks: - go mod downloadbuilds: - id: echo binary: executor_echo_{{ .Os }}_{{ .Arch }} no_unique_dist_dir: true env: - CGO_ENABLED=0 goos: - linux - darwin goarch: - amd64 - arm64 goarm: - 7snapshot: name_template: 'v{{ .Version }}'EOF + +2. Build the binaries: + +goreleaser build --rm-dist --snapshot + + +Congrats! You just created your first Botkube executor plugin! 🎉 + +Now it's time to [test it locally with Botkube](https://docs.botkube.io/plugin/local-testing). Once you're done testing, see how to [distribute it](https://docs.botkube.io/plugin/repo). + +Passing configuration to your plugin[​](#passing-configuration-to-your-plugin"DirectlinktoPassingconfigurationtoyourplugin") +------------------------------------------------------------------------------------------------------------------------------------ + +Sometimes your executor plugin requires a configuration specified by the end-user. Botkube supports such requirement and provides an option to specify plugin configuration under `config`. An example Botkube configuration looks like this: + +communications: "default-group": socketSlack: channels: "default": name: "all-teams" bindings: executors: - echo-team-a - echo-team-bexecutors: "echo-team-a": # executor configuration group name botkube/echo: enabled: true config: formatOptions: ["italic"] "echo-team-b": # executor configuration group name botkube/echo: enabled: true config: formatOptions: ["bold"] This means that two different `botkube/echo` plugin configurations were bound to the `all-teams` Slack channel. Under `executor.ExecuteInput{}.Configs`, you will find the list of configurations in the YAML format as specified under the `config` property for each bound and enabled executor. The order of the configuration is the same as specified under the `bindings.executors` property. It's up to the plugin author to merge the passed configurations. You can use our helper function from the plugin extension package (`pluginx`). import ( "context" "github.com/kubeshop/botkube/pkg/api/executor" "github.com/kubeshop/botkube/pkg/pluginx")// Config holds the executor configuration.type Config struct { FormatOptions []string `yaml:"options,omitempty"`}func (EchoExecutor) Execute(_ context.Context, in executor.ExecuteInput) (executor.ExecuteOutput, error) { var cfg Config err := pluginx.MergeExecutorConfigs(in.Configs, &cfg) if err != nil { return executor.ExecuteOutput{}, err } // rest logic} caution Botkube starts only one process of a given executor plugin, and the list of configuration YAMLs can be different per gRPC call, so you shouldn't cache the merged configuration. Notes[​](#notes"DirectlinktoNotes") +--------------------------------------- + +* Streaming command response is not supported. As a result, commands like `helm install --wait` doesn't work well, as the response won't be sent until the command finishes. It's recommended to return the response as soon as possible. +* The interactive message is not yet supported. diff --git a/hack/assistant-setup/content/docs.botkube.io__plugin__custom-source.md b/hack/assistant-setup/content/docs.botkube.io__plugin__custom-source.md new file mode 100644 index 0000000..0fd5a44 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__plugin__custom-source.md @@ -0,0 +1,98 @@ +Title: Custom source | Botkube + +URL Source: https://docs.botkube.io/plugin/custom-source + +Markdown Content: +You can extend Botkube functionality by writing custom source plugin. A source allows you to get asynchronous streaming of domain-specific events. For example, streaming Kubernetes or Prometheus events . + +Source is a binary that implements the [source](https://github.com/kubeshop/botkube/blob/main/proto/source.proto) Protocol Buffers contract. + +Goal[​](#goal"DirectlinktoGoal") +------------------------------------ + +This tutorial shows you how to build a custom `ticker` source that emits an event at a specified interval. + +![Image 1: ticker-demo](https://docs.botkube.io/assets/images/ticker-demo-5f751c91c53d518e62975d56a6be5011.gif) + +For a final implementation, see the [Botkube template repository](https://docs.botkube.io/plugin/quick-start). + +Prerequisites[​](#prerequisites"DirectlinktoPrerequisites") +--------------------------------------------------------------- + +* Basic understanding of the Go language. +* [Go](https://golang.org/doc/install) at least 1.18. +* See [go.mod](https://github.com/kubeshop/botkube/blob/main/go.mod#L1) for the recommended version used by Botkube team. +* [GoReleaser](https://goreleaser.com/) at least 1.13. + +### Develop plugin business logic[​](#develop-plugin-business-logic"DirectlinktoDeveloppluginbusinesslogic") + +1. Create a source plugin directory: + +mkdir botkube-plugins && cd botkube-plugins + +2. Initialize the Go module: + +go mod init botkube-plugins + +3. Create the `main.go` file for the `ticker` source with the following template: + +cat << EOF > main.gopackage mainimport ( "context" "fmt" "time" "github.com/hashicorp/go-plugin" "github.com/kubeshop/botkube/pkg/api" "github.com/kubeshop/botkube/pkg/api/source" "gopkg.in/yaml.v3")// Config holds source configuration.type Config struct { Interval time.Duration}// Ticker implements the Botkube source plugin interface.type Ticker struct{}func main() { source.Serve(map[string]plugin.Plugin{ "ticker": &source.Plugin{ Source: &Ticker{}, }, })}EOF This template code imports required packages and registers `Ticker` as the gRPC plugin. At this stage, the `Ticker` service doesn't implement the required [Protocol Buffers](https://github.com/kubeshop/botkube/blob/main/proto/source.proto) contract. We will add the required methods in the next steps. + +4. Download imported dependencies: + +5. Add the required `Metadata` method: + +// Metadata returns details about the Ticker plugin.func (Ticker) Metadata(_ context.Context) (api.MetadataOutput, error) { return api.MetadataOutput{ Version: "0.1.0", Description: "Emits an event at a specified interval.", }, nil} + +The `Metadata` method returns basic information about your plugin. This data is used when the plugin index is generated in an automated way. You will learn more about that in the next steps. + +Ąs a part of the `Metadata` method, you can define the plugin dependencies. To learn more about them, see the [Dependencies](https://docs.botkube.io/plugin/dependencies) document. + +6. Add the required `Stream` method: + +// Stream sends an event after configured time duration.func (Ticker) Stream(ctx context.Context, in source.StreamInput) (source.StreamOutput, error) { cfg, err := mergeConfigs(in.Configs) if err != nil { return source.StreamOutput{}, err } ticker := time.NewTicker(cfg.Interval) out := source.StreamOutput{ Event: make(chan source.Event), } go func() { for { select { case <-ctx.Done(): ticker.Stop() case <-ticker.C: out.Event <- source.Event{ Message: api.NewPlaintextMessage("Ticker Event", true), } } } }() return out, nil}// mergeConfigs merges all input configuration. In our case we don't have complex merge strategy,// the last one that was specified wins :)func mergeConfigs(configs []*source.Config) (Config, error) { // default config finalCfg := Config{ Interval: time.Minute, } for _, inputCfg := range configs { var cfg Config err := yaml.Unmarshal(inputCfg.RawYAML, &cfg) if err != nil { return Config{}, fmt.Errorf("while unmarshalling YAML config: %w", err) } if cfg.Interval != 0 { finalCfg.Interval = cfg.Interval } } return finalCfg, nil} The `Stream` method is the heart of your source plugin. This method runs your business logic and push events into the `out.Output` channel. Next, the Botkube core sends the event to a given communication platform. The `Stream` method is called only once. Botkube attaches the list of associated configurations. You will learn more about that in the [**Passing configuration to your plugin**](#passing-configuration-to-your-plugin) section. + +7. Implement `HandleExternalRequest` method: + +Plugins can handle external requests from Botkube incoming webhook. Any external system can call the webhook and trigger a given source plugin. By default, the path of the incoming webhook is `http://botkube.botkube.svc.cluster.local:2115/sources/v1/{sourceName}` and it supports POST requests in JSON payload format. + +* If you don't want to handle external events from incoming webhook, simply nest the `source.HandleExternalRequestUnimplemented` under your struct: + +// Ticker implements the Botkube executor plugin interface.type Ticker struct { // specify that the source doesn't handle external requests source.HandleExternalRequestUnimplemented} + +* To handle such requests, you need to implement the `HandleExternalRequest` method. In this case, the `message` property from payload is outputted to the bound communication platforms: + + +// HandleExternalRequest handles incoming payload and returns an event based on it.func (Forwarder) HandleExternalRequest(_ context.Context, in source.ExternalRequestInput) (source.ExternalRequestOutput, error) { var p payload err := json.Unmarshal(in.Payload, &p) if err != nil { return source.ExternalRequestOutput{}, fmt.Errorf("while unmarshaling payload: %w", err) } if p.Message == "" { return source.ExternalRequestOutput{}, fmt.Errorf("message cannot be empty") } msg := fmt.Sprintf("*Incoming webhook event:* %s", p.Message) return source.ExternalRequestOutput{ Event: source.Event{ Message: api.NewPlaintextMessage(msg, true), }, }, nil} + + +Build plugin binaries[​](#build-plugin-binaries"DirectlinktoBuildpluginbinaries") +--------------------------------------------------------------------------------------- + +Now it's time to build your plugin. For that purpose we will use GoReleaser. It simplifies building Go binaries for different architectures. + +note + +Instead of GoReleaser, you can use another tool of your choice. The important thing is to produce the binaries for the architecture of the host platform where Botkube is running. + +1. Create the GoReleaser configuration file: + +cat << EOF > .goreleaser.yamlproject_name: botkube-pluginsbefore: hooks: - go mod downloadbuilds: - id: ticker binary: source_ticker_{{ .Os }}_{{ .Arch }} no_unique_dist_dir: true env: - CGO_ENABLED=0 goos: - linux - darwin goarch: - amd64 - arm64 goarm: - 7snapshot: name_template: 'v{{ .Version }}'EOF + +2. Build the binaries: + +goreleaser build --rm-dist --snapshot + + +Congrats! You just created your first Botkube source plugin! 🎉 + +Now it's time to [test it locally with Botkube](https://docs.botkube.io/plugin/local-testing). Once you're done testing, see how to [distribute it](https://docs.botkube.io/plugin/repo). + +Passing configuration to your plugin[​](#passing-configuration-to-your-plugin"DirectlinktoPassingconfigurationtoyourplugin") +------------------------------------------------------------------------------------------------------------------------------------ + +Sometimes your source plugin requires a configuration specified by the end-user. Botkube supports such requirement and provides an option to specify plugin configuration under `config`. An example Botkube configuration looks like this: + +communications: "default-group": socketSlack: channels: "default": name: "all-teams" bindings: sources: - ticker-team-a - ticker-team-bsources: "ticker-team-a": botkube/ticker: enabled: true config: interval: 1s "ticker-team-b": botkube/ticker: enabled: true config: interval: 2m + +This means that two different `botkube/ticker` plugin configurations were bound to the `all-teams` Slack channel. For each bound configuration [Botkube source dispatcher](https://docs.botkube.io/architecture/#plugin-source-bridge) calls `Stream` method with the configuration specified under the `bindings.sources` property. diff --git a/hack/assistant-setup/content/docs.botkube.io__plugin__debugging.md b/hack/assistant-setup/content/docs.botkube.io__plugin__debugging.md new file mode 100644 index 0000000..d95f24e --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__plugin__debugging.md @@ -0,0 +1,18 @@ +Title: Debugging | Botkube + +URL Source: https://docs.botkube.io/plugin/debugging + +Markdown Content: +Embedded logging allows you to access more information about the runtime operations of Botkube plugins. + +To change the default log level, export a dedicated environment variable following this pattern `LOG_LEVEL_{pluginType}_{pluginRepo}_{pluginName}`, e.g., `LOG_LEVEL_EXECUTOR_BOTKUBE_KUBECTL`. The possible log level values are: + +The plugin standard output is logged only if `debug` level is set. + +info + +The plugin name is normalized and all characters different from letters, digits, and the underscore (`_`) are replaced with underscore (`_`). + +To change the log level for a given plugin directly in the Botkube deployment, specify `extraEnv` in the [values.yaml](https://github.com/kubeshop/botkube/blob/main/helm/botkube/values.yaml) file. For example: + +extraEnv: - name: LOG_LEVEL_EXECUTOR_BOTKUBE_KUBECTL value: "debug" diff --git a/hack/assistant-setup/content/docs.botkube.io__plugin__dependencies.md b/hack/assistant-setup/content/docs.botkube.io__plugin__dependencies.md new file mode 100644 index 0000000..b7a52f7 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__plugin__dependencies.md @@ -0,0 +1,18 @@ +Title: Dependencies | Botkube + +URL Source: https://docs.botkube.io/plugin/dependencies + +Markdown Content: +Plugins can depend on other binaries, which are then downloaded by Botkube along with a given plugin. This is supported for both executor and source plugins. + +As a part of the `Metadata` method, define the `Dependencies` property. The key is the name of the dependency, and the value is a structure with links to binaries for each platform. + +info + +For downloading plugins and theirs dependencies, Botkube uses `go-getter` library. It supports multiple URL formats (such as HTTP, Git repositories or S3), and is able to unpack archives and extract binaries from them. For more details, see the documentation on the [`go-getter`](https://github.com/hashicorp/go-getter) GitHub repository. + +const ( kubectlVersion = "v1.28.1")// Metadata returns details about kubectl plugin.func (e *Executor) Metadata(context.Context) (api.MetadataOutput, error) { return api.MetadataOutput{ // ... Dependencies: map[string]api.Dependency{ "kubectl": { URLs: map[string]string{ "windows/amd64": fmt.Sprintf("https://dl.k8s.io/release/%s/bin/windows/amd64/kubectl.exe", kubectlVersion), "darwin/amd64": fmt.Sprintf("https://dl.k8s.io/release/%s/bin/darwin/amd64/kubectl", kubectlVersion), "darwin/arm64": fmt.Sprintf("https://dl.k8s.io/release/%s/bin/darwin/arm64/kubectl", kubectlVersion), "linux/amd64": fmt.Sprintf("https://dl.k8s.io/release/%s/bin/linux/amd64/kubectl", kubectlVersion), "linux/s390x": fmt.Sprintf("https://dl.k8s.io/release/%s/bin/linux/s390x/kubectl", kubectlVersion), "linux/ppc64le": fmt.Sprintf("https://dl.k8s.io/release/%s/bin/linux/ppc64le/kubectl", kubectlVersion), "linux/arm64": fmt.Sprintf("https://dl.k8s.io/release/%s/bin/linux/arm64/kubectl", kubectlVersion), "linux/386": fmt.Sprintf("https://dl.k8s.io/release/%s/bin/linux/386/kubectl", kubectlVersion), } }, }, }, nil} Such a definition will result in the following `dependencies` section in the plugin index: During Botkube startup, Botkube plugin manager fetches the plugin binaries along with all dependencies. Each dependency binary is named exactly as specified in the [plugin index](#define-dependencies-for-plugin-index-generation). The dependency is fetched to a directory specified in the `PLUGIN_DEPENDENCY_DIR` environment variable passed to the plugin. + +To make it easier, there's a helper function `plugin.ExecuteCommand` in the `github.com/kubeshop/botkube/pkg/plugin` package, which does all of the above. For example, the kubectl plugin uses the following code: + +// set additional env variablesenvs := map[string]string{ "KUBECONFIG": kubeConfigPath,}// runCmd is e.g. "kubectl get pods --all-namespaces"// plugin.ExecuteCommand will replace kubectl with full path to the kubectl binary dependencyout, err := plugin.ExecuteCommand(ctx, runCmd, plugin.ExecuteCommandEnvs(envs)) To get familiar with the full example, see the [kubectl plugin](https://github.com/kubeshop/botkube/tree/main/cmd/executor/kubectl) in the Botkube repository. The Kubectl plugin depends on the official [kubectl CLI](https://kubernetes.io/docs/tasks/tools/#kubectl) binary, which is defined as a part of the `Metadata` method. diff --git a/hack/assistant-setup/content/docs.botkube.io__plugin__interactive-messages.md b/hack/assistant-setup/content/docs.botkube.io__plugin__interactive-messages.md new file mode 100644 index 0000000..e2b1c23 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__plugin__interactive-messages.md @@ -0,0 +1,49 @@ +Title: Interactive messages | Botkube + +URL Source: https://docs.botkube.io/plugin/interactive-messages + +Markdown Content: +Some of our communication platforms support interactive messages. If interactivity is supported the `IsInteractivitySupported` property under source or execution context is set to **true**. + +In this guide, we describe how interactivity applies to messages, and show you how to build ones. + +![Image 1: demo](https://docs.botkube.io/assets/images/demo-msg-aa0290bb67438a1f83c756f4b50842df.gif) + +Primitives[​](#primitives"DirectlinktoPrimitives") +------------------------------------------------------ + +You can construct and return interactive messages containing buttons, dropdowns, input text, and more complex formatting. For that reason, we introduced a generic `api.Messages` model. + +* [Buttons](#buttons) +* [Dropdowns](#dropdowns) +* [Input text](#input-text-fields) + +For all primitives you need to attach the proper command that will be executed by Botkube. The pattern is: + +import "github.com/kubeshop/botkube/pkg/api"command := api.MessageBotNamePlaceholder + " " + " " + +The `api.MessageBotNamePlaceholder` constant, is our cross-platform placeholder that is replaced by Botkube core with a proper bot name. It's mandatory, otherwise Botkube core will ignore a given command, e.g. a button click. + +The `` and `` should be replaced based on your needs. You replace `` with your own plugin name, or other plugin name, like `kubectl`. However, if you use other plugin name, a given command won't work if plugin is not enabled. + +### Buttons[​](#buttons"DirectlinktoButtons") + +You can define a list of buttons under `Section` object. To construct a given button you can use our helper `api.NewMessageButtonBuilder` builder. For example: + +const pluginName = "msg"btnBuilder := api.NewMessageButtonBuilder()msg := api.Message{ Sections: []api.Section{ { Buttons: []api.Button{ btnBuilder.ForCommandWithDescCmd("Run act1", fmt.Sprintf("%s buttons act1", pluginName)), btnBuilder.ForCommandWithDescCmd("Run act2", fmt.Sprintf("%s buttons act2", pluginName), api.ButtonStylePrimary), btnBuilder.ForCommandWithDescCmd("Run act3", fmt.Sprintf("%s buttons act3", pluginName), api.ButtonStyleDanger), }, }, },} When a button is clicked, Botkube runs an associated command. For **Run act1** it's `msg buttons act1`. If there is a plugin named `msg` and it is enabled on a given channel, it will be called by Botkube with a given command string. As a result, you can parse input command and return proper output. If you use only `ForCommandWithoutDesc`, all buttons are render in the same line. ![Image 2: btns-desc](https://docs.botkube.io/assets/images/btns-desc-33bccf898c619eca04aa20266804baad.png) + +Otherwise, each button is rendered in new line with the description on the left side and button on the right side. ![Image 3: btns-inline](https://docs.botkube.io/assets/images/btns-inline-a7f68fcaac17c49eb65ef94a16ede58e.png) + +### Dropdowns[​](#dropdowns"DirectlinktoDropdowns") + +You can define dropdowns under `Section` object. You can split options into groups. Optionally, you can define the initial option. It must be included also under `OptionsGroups`. + +cmdPrefix := func(cmd string) string { return fmt.Sprintf("%s %s %s", api.MessageBotNamePlaceholder, pluginName, cmd)}msg := api.Message{ Sections: []api.Section{ { Selects: api.Selects{ ID: "select-id", Items: []api.Select{ { Name: "two-groups", Command: cmdPrefix("selects two-groups"), OptionGroups: []api.OptionGroup{ { Name: cmdPrefix("selects two-groups/1"), Options: []api.OptionItem{ {Name: "BAR", Value: "BAR"}, {Name: "BAZ", Value: "BAZ"}, {Name: "XYZ", Value: "XYZ"}, }, }, { Name: cmdPrefix("selects two-groups/2"), Options: []api.OptionItem{ {Name: "123", Value: "123"}, {Name: "456", Value: "456"}, {Name: "789", Value: "789"}, }, }, }, // MUST be defined also under OptionGroups.Options slice. InitialOption: &api.OptionItem{ Name: "789", Value: "789", }, }, }, }, }, },} When user select a given option, Botkube runs an associated command and appends selected option at the end. For **BAR** it's `msg selects two-gropus BAR`. If there is a plugin named `msg` and it is enabled on a given channel, it will be called by Botkube with a given command string. As a result, you can parse input command and return proper output. ### Input text fields[​](#input-text-fields"DirectlinktoInputtextfields") + +msg := api.Message{ PlaintextInputs: []api.LabelInput{ { Command: fmt.Sprintf("%s %s input-text", api.MessageBotNamePlaceholder, pluginName), DispatchedAction: api.DispatchInputActionOnEnter, Placeholder: "String pattern to filter by", Text: "Filter output", }, },} When user types an input string and clicks enter, Botkube runs an associated command and appends input text in quotes. For example, for input **"text"** it's `msg input-text "test"`. If there is a plugin named `msg` and it is enabled on a given channel, it will be called by Botkube with a given command string. As a result, you can parse input command and return proper output. Message visibility[​](#message-visibility"DirectlinktoMessagevisibility") +------------------------------------------------------------------------------ + +If the interactivity is enabled, you can change the default message visibility options: + +* The `OnlyVisibleForYou` property allows you to display the message only to the user who clicked a given button or dropdown. It's taken into account only if respond to the interactive message. It cannot be used initial messages that are automatically sent to a given channel. +* The `ReplaceOriginalMessage` property allows you to replace the message which triggered interactive command. You cannot change `OnlyVisibleForYou` as the message retains its initial visibility. diff --git a/hack/assistant-setup/content/docs.botkube.io__plugin__local-testing.md b/hack/assistant-setup/content/docs.botkube.io__plugin__local-testing.md new file mode 100644 index 0000000..270e9a5 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__plugin__local-testing.md @@ -0,0 +1,50 @@ +Title: Local testing | Botkube + +URL Source: https://docs.botkube.io/plugin/local-testing + +Markdown Content: +This document describes steps for running Botkube core locally together with a local file server for serving your plugins during development phase. + +**Prerequisite** + +* [Node.js](https://nodejs.org/en/download/), to use `npx` + +**Steps** + +1. Follow steps from [`CONTRIBUTING.md`](https://github.com/kubeshop/botkube/blob/main/CONTRIBUTING.md#build-and-run-locally) about running Botkube locally. + +2. Create a file with your plugins' repository, plugin configuration and bindings for enabled communication platform: + +plugins: repositories: local-repo: url: http://localhost:8080/plugins-index.yamlexecutors: "plugins": local-repo/executor-name: # Plugin name syntax: /[@]. If version is not provided, the latest version from repository is used. enabled: true config: {} # Plugin's specific configuration.sources: "plugins": local-repo/source-name: # Plugin name syntax: /[@]. If version is not provided, the latest version from repository is used. enabled: true config: {} # Plugin's specific configuration.communications: # Enable a given communication platform and define bindings to a given executor and source plugins. For example, for Slack and example `echo` and `ticker` plugins, provide `appToken` and `botToken` and run the script: Create /tmp/config-values.yaml 3. In your plugin project directory, start a static plugin server: # Use https://github.com/vercel/servenpx serve --listen 8080 note If Botkube runs on external Kubernetes cluster, you can use the tunneling software, for example [`ngrok`](https://ngrok.com/). It creates an externally addressable URL for a port you open locally on your machine. + +4. In your plugin project directory open a new terminal window. + +5. Export Botkube plugins cache directory: + +export BOTKUBE_PLUGINS_CACHE__DIR="/tmp/plugins" + +6. Export Botkube repository path cloned in the first step: + +export BOTKUBE_REPO_PATH={botkube_repo_path} + +7. Export configuration files: + +export BOTKUBE_CONFIG_PATHS="${BOTKUBE_REPO_PATH}/helm/botkube/values.yaml,/tmp/config-values.yaml" + +8. Build plugins and start Botkube: + +note + +Each time you change a plugin source code, re-run the above command. + + +* For scratch projects +* For projects created from template repository + +1. Download index builder: + +go get github.com/kubeshop/botkube/hack + +2. Build plugins and run Botkube: + +# rebuild plugins only for current GOOS and GOARCHgoreleaser build --rm-dist --snapshot --single-target &&# regenerate indexgo run github.com/kubeshop/botkube/hack -binaries-path "./dist" -url-base-path "http://localhost:8080/dist" -use-archive=false &&# remove cached pluginsrm -rf $BOTKUBE_PLUGINS_CACHE__DIR &&# start Botkube${BOTKUBE_REPO_PATH}/botkube diff --git a/hack/assistant-setup/content/docs.botkube.io__plugin__quick-start.md b/hack/assistant-setup/content/docs.botkube.io__plugin__quick-start.md new file mode 100644 index 0000000..32c0ca4 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__plugin__quick-start.md @@ -0,0 +1,59 @@ +Title: Quick start | Botkube + +URL Source: https://docs.botkube.io/plugin/quick-start + +Markdown Content: +* [](https://docs.botkube.io/) * [Plugin Development](https://docs.botkube.io/plugin/) +* Quick start + +Version: 1.10 + +Botkube provides a quick start repository to start developing Botkube [source](https://docs.botkube.io/architecture/#source) and [executor](https://docs.botkube.io/architecture/#executor) plugins in Go. It has all batteries included; example plugins: + +* The [`echo`](https://github.com/kubeshop/botkube-plugins-template/blob/main/cmd/echo/main.go) executor that sends back the command that was specified, +* The [`ticker`](https://github.com/kubeshop/botkube-plugins-template/blob/main/cmd/ticker/main.go) source that emits an event each time the configured time duration elapses, +* The [`forwarder`](https://github.com/kubeshop/botkube-plugins-template/blob/main/cmd/forwarder/main.go) source that echos the message sent as an incoming webhook request. + +and two example release jobs: + +* [GitHub releases](https://github.com/kubeshop/botkube-plugins-template/blob/main/.github/workflows/release.yml) +* [GitHub Pages](https://github.com/kubeshop/botkube-plugins-template/blob/main/.github/workflows/pages-release.yml) + +Use template[​](#use-template"DirectlinktoUsetemplate") +------------------------------------------------------------ + +1. Navigate to [`botkube-plugins-template`](https://github.com/kubeshop/botkube-plugins-template). + +2. Click **"Use this template"**, next **"Create a new repository"** + +![Image 1: Create Repo](https://docs.botkube.io/assets/images/use-tpl-abd758819e831ddf629b4e4f42e9a452.png) + +This creates your own plugin repository with a single commit. + +3. After a few seconds, the `.github/workflows/setup.yml` job will create a new commit. This job removes Kubeshop related files, such as: + +* `CONTRIBUTING.md` +* `CODE_OF_CONDUCT.md` +* `LICENSE` +* `SECURITY.md` +* `.github/CODEOWNERS` + +Additionally, it updates links in README.md to point to your own repository instead of Kubeshop's one. In case of job failure, you need to make and commit those changes manually. + +This job runs only once, later you can remove it or disable it. + +4. Decide which release job you prefer, the GitHub releases, or GitHub pages. Once decided, remove one the above workflow in your new repository: + +* GitHub releases, defined at `.github/workflows/release.yml` in your GitHub repository. +* GitHub Pages, defined at `.github/workflows/pages-release.yml` in your GitHub repository. + +If you pick the GitHub Pages, a further configuration is needed: + +1. In project settings, enable [publishing GitHub Pages via GitHub Action](https://docs.github.com/en/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site#publishing-with-a-custom-github-actions-workflow). +2. Adjust the `github-pages` deployment environment. You can either: +* remove the deployment environment if you don't need any protection rules +* add an environment protection rule so that you can deploy pages on each new tag. If you use tagging like `vX.Y.Z`, you can add the `v*` rule. As an alternative, can select **All branches** from the dropdown. +5. Add LICENSE file and update the README.md file to describe the plugins that you created. + + +[Previous Plugin Development](https://docs.botkube.io/plugin/)[Next Custom executor](https://docs.botkube.io/plugin/custom-executor) diff --git a/hack/assistant-setup/content/docs.botkube.io__plugin__repo.md b/hack/assistant-setup/content/docs.botkube.io__plugin__repo.md new file mode 100644 index 0000000..65ac40e --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__plugin__repo.md @@ -0,0 +1,116 @@ +Title: Repository | Botkube + +URL Source: https://docs.botkube.io/plugin/repo + +Markdown Content: +A plugin repository is a place where you store your plugin binaries. This repository must be publicly available and supports downloading assets via HTTP(s). This document explains how to create Botkube plugin repositories by providing examples based on GitHub functionality. However, any static file server can be used, for instance: `s3`, `gcs`, etc. + +This document describes how to set up such repository. If you use or plan to use GitHub you can adapt the [template repository](https://docs.botkube.io/plugin/quick-start) that has batteries included to start developing and hosting Botkube plugins right away. + +Index file +---------- + +Your plugin repository must contain at least one index file and one plugin binary. Depending on your needs and preferences, you can create one or more index files to categorize your plugins. You can host both the executor and source plugins in a single repository. You can also include them in the same index file. + +In the index file, provide an entry for every plugin from your plugin repository. The index file must have the following syntax: + +entries: - name: { plugin_name } type: { plugin_type } # executor or source description: { plugin_description } version: { plugin_version } urls: - url: { url_to_plugin_binary } platform: os: { plugin_operating_system } # darwin or linux architecture: { plugin_architecture } # amd64 or arm64 dependencies: # optional dependencies { dependency_name }: url: { url_to_dependency_binary } + +It is not required to host a plugin or dependency binary on the same server as the index file. + +Generate index file[​](#generate-index-file"DirectlinktoGenerateindexfile") +--------------------------------------------------------------------------------- + +You can create the index file by yourself our use our tool to generate it automatically based on the directory with plugins binaries. The binaries must be named according to the following pattern: + +* For executors, `executor_{plugin_name}_{os}_{arch}`; for example, `executor_kubectl_darwin_amd64`. +* For sources, `source_{plugin_name}_{os}_{arch}`; for example, `source_kubernetes_darwin_amd64`. + +**Steps** + +1. In your plugin repository, add `tools.go`: + +cat << EOF > tools.go//go:build toolspackage toolsimport ( _ "github.com/kubeshop/botkube/hack")EOF + +2. Refresh dependencies: + +3. Build all your plugins. See [**Build plugin binaries**](https://docs.botkube.io/plugin/custom-executor). + +4. Generate an index file: + +go run github.com/kubeshop/botkube/hack -binaries-path "./dist" -url-base-path "https://example.com" + +info + +Replace the `-url-base-path` flag with the base path of your HTTP server. See [**Hosting plugins**](#host-plugins) for some examples. + + +Host plugins +------------ + +This section describes example ways for serving Botkube plugins. + +GitHub releases[​](#github-releases"DirectlinktoGitHubreleases") +--------------------------------------------------------------------- + +A GitHub release allows you to upload additional assets that are later accessible with a predictable URL. When you generate the index file, specify the `-url-base-path` flag as `https://github.com/{owner}/{repo}/releases/download/{release_tag}`, for example, `https://github.com/kubeshop/botkube/releases/download/v1.0.0`. + +Once the plugin binaries are built and the index file is generated, you can create a GitHub release using [GitHub CLI](https://cli.github.com/). For example: + +gh release create v1.0.0 \ ./dist/source_* \ ./dist/executor_* \ ./plugins-index.yaml + +### Automation[​](#automation"DirectlinktoAutomation") + +You can use [GitHub Actions](https://docs.github.com/en/actions) to publish Botkube plugins automatically each time a new tag is pushed. See the [`release` workflow](https://github.com/kubeshop/botkube-plugins-template/blob/main/.github/workflows/release.yml) on the `botkube-plugins-template` repository for the out-of-the-box solution, which you can use and modify if needed. + +GitHub pages[​](#github-pages"DirectlinktoGitHubpages") +------------------------------------------------------------ + +GitHub allows you to serve static pages via GitHub Pages. When you generate the index file, specify the `-url-base-path` flag as `https://{user}.github.io/{repository}`, for example, `https://kubeshop.github.io/botkube-plugins`. + +**Initial setup** + +1. Navigate to the Git repository with your plugins. + +2. Create the `gh-pages` branch: + +git switch --orphan gh-pagesgit commit --allow-empty -m "Initialization commit"git push -u origin gh-pages + +3. Follow [this](https://docs.github.com/en/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site#publishing-from-a-branch) guide to make sure your `gh-pages` branch is set as the source for GitHub Pages. + + +**Publishing steps** + +1. Clone `gh-pages` into `/tmp/botkube-plugins`: + +git clone -b gh-pages "https://github.com/{owner}/{repo}.git" /tmp/botkube-plugins + +2. Move built binaries and generated index file: + +mv dist/executor_* /tmp/botkube-plugins/mv dist/source_* /tmp/botkube-plugins/mv plugins-index.yaml /tmp/botkube-plugins + +3. Commit and push copied files: + +cd /tmp/botkube-pluginsgit add -Agit commit -m "Release Botkube plugins"git push + +4. Remove cloned `gh-pages`: + +cd -rm -rf /tmp/botkube-charts + + +In such setup, you can use your default branch to store your plugins code, and the `gh-pages` branch as a plugin repository. + +### Automation[​](#automation-1"DirectlinktoAutomation") + +You can use [GitHub Actions](https://docs.github.com/en/actions) to publish Botkube plugins automatically each time a new tag is pushed. See the [`pages-release` workflow](https://github.com/kubeshop/botkube-plugins-template/blob/main/.github/workflows/pages-release.yml) on the `botkube-plugins-template` repository for the out-of-the-box solution, which you can use and modify if needed. + +Use hosted plugins[​](#use-hosted-plugins"DirectlinktoUsehostedplugins") +------------------------------------------------------------------------------ + +To use the plugins that you published, add your repository under `plugins` in the [values.yaml](https://github.com/kubeshop/botkube/blob/main/helm/botkube/values.yaml) file for a given Botkube deployment. For example: + +plugins: repositories: repo-name: url: https://example.com/plugins-index.yaml + +Once the plugin repository is added, you can refer to it in the `executor` or `sources` section. + +executors: "plugins": repo-name/executor-name@v1.0.0: # Plugin name syntax: {repo}/{plugin}[@{version}]. If version is not provided, the latest version from repository is used. enabled: true config: {} # Plugin's specific configuration.sources: "plugins": repo-name/source-name@v1.0.0: # Plugin name syntax: {repo}/{plugin}[@{version}]. If version is not provided, the latest version from repository is used. enabled: true config: {} # Plugin's specific configuration. diff --git a/hack/assistant-setup/content/docs.botkube.io__plugin__troubleshooting.md.md b/hack/assistant-setup/content/docs.botkube.io__plugin__troubleshooting.md.md new file mode 100644 index 0000000..46ea6d0 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__plugin__troubleshooting.md.md @@ -0,0 +1,67 @@ +Title: Troubleshooting | Botkube + +URL Source: https://docs.botkube.io/plugin/troubleshooting.md + +Markdown Content: +Version: 1.10 + +This document describes how to identify and resolve issues that might occur. + +### Missing source events[​](#missing-source-events"DirectlinktoMissingsourceevents") + +**Symptoms** + +You don't get event message on a given communication platform even though the event occurred in your 3rd party service. + +**Debugging steps** + +* [Enable debugging mode for a given plugin](https://docs.botkube.io/plugin/debugging). Once enabled, check the Botkube logs. You can filter them by your plugin name. You should see information about downloading and starting your source. For example: + +INFO[2023-01-09T21:21:24+01:00] Starting Plugin Manager for all enabled plugins component="Plugin Manager" enabledSources=botkube/cm-watcherINFO[2023-01-09T21:21:24+01:00] Downloading plugin. binPath=/tmp/plugins/botkube/source_v0.13.0_cm-watcher component="Plugin Manager" url="http://host.k3d.internal:3000/static/source_cm-watcher_darwin_amd64"INFO[2023-01-09T21:21:24+01:00] source plugin registered successfully. binPath=/tmp/plugins/botkube/source_v0.13.0_cm-watcher component="Plugin Manager" plugin=botkube/cm-watcher version=v0.13.0INFO[2023-01-09T21:21:25+01:00] Start source streaming... pluginName=botkube/cm-watcher sources="[plugin-based]" If you don't see any of the above log messages: * Make sure that `source.{group_name}.{plugin_name}.enabled` property is set to `true` * Make sure that a given source configuration (`sources.{group_name}`) is bind to a given communication platform (`bindings.sources: [{group_name}]`) If the source is not bound to any communication platform Botkube will not download and start such plugin. Even if it's enabled. * [Make sure that your plugin didn't crash](#plugin-process-exited). + + +### Missing executor response[​](#missing-executor-response"DirectlinktoMissingexecutorresponse") + +**Symptoms** + +You run a given executor command in a chat window, but you don't get any response. + +**Debugging steps** + +* [Enable debugging mode for a given plugin](https://docs.botkube.io/plugin/debugging). Once enabled, run a given executor command once again, and check the Botkube logs. You can filter them by your plugin name. You should see information about downloading and registering your executor. For example: + +INFO[2023-01-09T21:21:24+01:00] Starting Plugin Manager for all enabled plugins component="Plugin Manager" enabledExecutors=botkube/echoINFO[2023-01-09T21:21:24+01:00] Downloading plugin. binPath=/tmp/plugins/botkube/executor_v0.13.0_echo component="Plugin Manager" url="http://host.k3d.internal:3000/static/executor_echo_darwin_amd64"INFO[2023-01-09T21:21:24+01:00] executor plugin registered successfully. binPath=/tmp/plugins/botkube/executor_v0.13.0_echo component="Plugin Manager" plugin=botkube/echo version=v0.13.0 If you don't see any of the above log messages: * Make sure that `executors.{group_name}.{plugin_name}.enabled` property is set to `true` * Make sure that a given executor configuration (`executors.{group_name}`) is bind to a given communication platform (`bindings.executors: [{group_name}]`) If the executor is not bound to any communication platform Botkube will not download and start such plugin. Even if it's enabled. * [Make sure that your plugin didn't crash](#plugin-process-exited). + + +### Plugin process exited[​](#plugin-process-exited"DirectlinktoPluginprocessexited") + +**Symptoms** + +In Botkube logs, you see an error similar to: + +ERRO[2023-01-09T21:21:25+01:00] plugin process exited error="exit status 1" path=/tmp/plugins/botkube/executor_v0.13.0_echo pid=71127 plugin=botkube/echo **Solution** It means that your plugin exited once it was started by Botkube [plugin manager](https://docs.botkube.io/architecture/#plugin-manager). To start your plugin again, you need to restart the Botkube core process, as crashed plugins aren't restarted automatically. This issue is tracked in [botkube#878](https://github.com/kubeshop/botkube/issues/878). You need to make sure that our plugin doesn't exit once it's started. You should return each error on Botkube plugin interface, instead of crashing your application. To see your plugin standard output [set the `debug` for a given plugin](https://docs.botkube.io/plugin/debugging). + +### Plugin not found error[​](#plugin-not-found-error"DirectlinktoPluginnotfounderror") + +**Symptoms** + +In Botkube logs, you see an error similar to: + +2023/01/09 21:37:04 while starting plugins manager: not found source plugin called "cm-test" in "botkube" repository + +**Debugging steps** + +* Make sure that a given repository is defined under `plugins.repository`. +* Check that a given entry is defined in a given repository index file. You should find under `entries` a plugin with a given name, version and type (source or executor). + +### Botkube is killed by readiness probe while downloading plugins[​](#botkube-is-killed-by-readiness-probe-while-downloading-plugins"DirectlinktoBotkubeiskilledbyreadinessprobewhiledownloadingplugins") + +**Symptoms** + +In environments with low internet bandwidth Botkube might get killed by the readiness probe before it finishes downloading all plugins. The solution to this problem is to increase the wait time of the readiness probe. + +**Solution** + +To increase the wait time of the readiness probe, you need to set the `initialDelaySeconds` property in [values.yaml](https://github.com/kubeshop/botkube/blob/9e450fb63666b03118ee51fcf9b7eb6c3b74cbcf/helm/botkube/values.yaml#L794-L821) to a higher value. For example: + +--set deployment.readinessProbe.initialDelaySeconds=180 diff --git a/hack/assistant-setup/content/docs.botkube.io__plugin__using-kubeconfig.md b/hack/assistant-setup/content/docs.botkube.io__plugin__using-kubeconfig.md new file mode 100644 index 0000000..6b2b47c --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__plugin__using-kubeconfig.md @@ -0,0 +1,12 @@ +Title: Using kubeconfig | Botkube + +URL Source: https://docs.botkube.io/plugin/using-kubeconfig + +Markdown Content: +You can request Botkube to generate and pass kubeconfig file to your plugin by adding RBAC section to your plugin configuration. The following example requests a kubeconfig that impersonates user **User.rbac.authorization.k8s.io** `read-only-user`. For more information refer to the [RBAC section](https://docs.botkube.io/configuration/rbac). The example is for executor plugins, source plugins can access kubeconfig in their `Stream()` function in `source.StreamInput`. + +The kubeconfig is available in `executor.ExecuteInput` as a slice of bytes. There are two options to instantiate a Kubernetes Go client with this config. + +import ( "context" "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/kubernetes" "github.com/kubeshop/botkube/pkg/api/executor" "github.com/kubeshop/botkube/pkg/pluginx")func (ReaderExecutor) Execute(_ context.Context, in executor.ExecuteInput) (executor.ExecuteOutput, error) { config, err := clientcmd.RESTConfigFromKubeConfig(in.Context.KubeConfig) if err != nil { return executor.ExecuteOutput{}, err } clientset, err := kubernetes.NewForConfig(config) if err != nil { return executor.ExecuteOutput{}, err } ...} + +import ( "context" "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/kubernetes" "github.com/kubeshop/botkube/pkg/api/executor" "github.com/kubeshop/botkube/pkg/pluginx")func (ReaderExecutor) Execute(ctx context.Context, in executor.ExecuteInput) (executor.ExecuteOutput, error) { kubeConfigPath, deleteFn, err := pluginx.PersistKubeConfig(ctx, in.Context.KubeConfig) if err != nil { return executor.ExecuteOutput{}, fmt.Errorf("while writing kubeconfig file: %w", err) } defer func() { if deleteErr := deleteFn(ctx); deleteErr != nil { fmt.Fprintf(os.Stderr, "failed to delete kubeconfig file %s: %v", kubeConfigPath, deleteErr) } }() config, err := clientcmd.BuildConfigFromFlags("", kubeConfigPath) if err != nil { return executor.ExecuteOutput{}, err } clientset, err := kubernetes.NewForConfig(config) if err != nil { return executor.ExecuteOutput{}, err } ...} diff --git a/hack/assistant-setup/content/docs.botkube.io__search.md b/hack/assistant-setup/content/docs.botkube.io__search.md new file mode 100644 index 0000000..017cacc --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__search.md @@ -0,0 +1,6 @@ +Title: Botkube + +URL Source: https://docs.botkube.io/search + +Markdown Content: +**New to Botkube?** Get started fast (and free!) with the [Botkube Cloud Web App](https://app.botkube.io/). diff --git a/hack/assistant-setup/content/docs.botkube.io__support.md b/hack/assistant-setup/content/docs.botkube.io__support.md new file mode 100644 index 0000000..24d1824 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__support.md @@ -0,0 +1,8 @@ +Title: Support | Botkube + +URL Source: https://docs.botkube.io/support/ + +Markdown Content: +* [Need help with Botkube?](#need-help-with-botkube) + +By continuing to use our site, you consent to Kubeshop using cookies in accordance with our [Privacy Policy.](https://botkube.io/privacy-policy) diff --git a/hack/assistant-setup/content/docs.botkube.io__telemetry.md b/hack/assistant-setup/content/docs.botkube.io__telemetry.md new file mode 100644 index 0000000..cda68c1 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__telemetry.md @@ -0,0 +1,52 @@ +Title: Telemetry | Botkube + +URL Source: https://docs.botkube.io/telemetry/ + +Markdown Content: +### What data we collect[​](#what-data-we-collect"DirectlinktoWhatdatawecollect") + +The analytics data we collect is limited to: + +* Botkube Agent version, + +* Kubernetes version, + +* Number of cluster nodes (control plane and worker nodes count), + +* Names of enabled integrations (notifiers and bots), + +* Handled events in anonymized form, grouped by the integration (communication platform) name. + +For each event, we collect its type (e.g. `create` or `delete`), resource API Version and resource Kind. Any custom resource API groups or Kinds are excluded from the analytics collection. + +* Executed commands in anonymized form. + +For `kubectl` commands, only the command verb is collected. Resource name and namespace are excluded from the analytics collection. + +* Enabled plugin names and anonymized RBAC configuration. + +* App errors (crashes, configuration and notification errors). + + +As an anonymous cluster identifier, we use the `uid` of `kube-system` Namespace. + +Botkube CLI tool collects: + +* Botkube CLI version, +* OS type from which Botkube CLI is run, +* An information whether a successful `botkube login` was executed in a form of a boolean value (`true`/`false`) +* Anonymous machine ID from [machineid](https://github.com/denisbrodbeck/machineid) library, +* Executed command names, such as `login`, `install`, etc. + +### How to opt out[​](#how-to-opt-out"DirectlinktoHowtooptout") + +To disable sending the anonymous analytics, provide the `analytics.disable: true` override during Helm chart installation or upgrade. See the [Helm chart parameters](https://docs.botkube.io/configuration/helm-chart-parameters/#values) for more details about Helm chart configuration. + +To disable sending the anonymous analytics for Botkube CLI, execute the command + +botkube telemetry disable + +This configuration will be stored locally in `~/.botkube/config.json` file, if this file is deleted, the telemetry will be enabled again. + +* [What data we collect](#what-data-we-collect) +* [How to opt out](#how-to-opt-out) diff --git a/hack/assistant-setup/content/docs.botkube.io__usage.md b/hack/assistant-setup/content/docs.botkube.io__usage.md new file mode 100644 index 0000000..1f6b150 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__usage.md @@ -0,0 +1,18 @@ +Title: Usage | Botkube + +URL Source: https://docs.botkube.io/usage/ + +Markdown Content: +Botkube allows you to monitor your Kubernetes cluster, as well as debug and troubleshoot your workloads. + +See all available commands[​](#see-all-available-commands"DirectlinktoSeeallavailablecommands") +------------------------------------------------------------------------------------------------------ + +Run `@Botkube help` to find information about the supported commands. + +Check Botkube status[​](#check-botkube-status"DirectlinktoCheckBotkubestatus") +------------------------------------------------------------------------------------ + +Run `@Botkube ping` to the channel where Botkube is added. The Botkube will respond you with the **pong** message from all the configured clusters. + +For [multi-cluster configuration](https://docs.botkube.io/usage/executor/#specify-cluster-name), use the `--cluster-name` flag to get response from the cluster mentioned in the flag. Else check the deployment in Kubernetes cluster in the **botkube** namespace. diff --git a/hack/assistant-setup/content/docs.botkube.io__usage__automated-actions.md b/hack/assistant-setup/content/docs.botkube.io__usage__automated-actions.md new file mode 100644 index 0000000..3355b93 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__usage__automated-actions.md @@ -0,0 +1,33 @@ +Title: Automated actions | Botkube + +URL Source: https://docs.botkube.io/usage/automated-actions + +Markdown Content: +Actions allow you to automate your workflows by executing custom commands based on specific events. To read how to configure actions, see the [Action](https://docs.botkube.io/configuration/action) configuration document. + +Manage actions[​](#manage-actions"DirectlinktoManageactions") +------------------------------------------------------------------ + +Botkube allows you to manage actions using `@Botkube` commands. + +### List available actions[​](#list-available-actions"DirectlinktoListavailableactions") + +Run `@Botkube list actions` to get list of configured actions and their running status: + +![Image 1: List available actions](https://docs.botkube.io/assets/images/list-actions-e1d1d86e622d7a10077d5347958a3559.png) + +### Disable action[​](#disable-action"DirectlinktoDisableaction") + +Run `@Botkube disable action {action-name}` to disable an action named `{action-name}`. The action settings are persisted across Botkube app restarts. + +![Image 2: Disable action](https://docs.botkube.io/assets/images/disable-action-414dd23e8a7bcb9efc1d52251f68999c.png) + +When you disable an action, changes are applied once the Botkube is restarted. It is an automated process which usually takes a few seconds. + +### Enable action[​](#enable-action"DirectlinktoEnableaction") + +Run `@Botkube enable action {action-name}` to enable an action named `{action-name}`. The action settings are persisted across Botkube app restarts. + +![Image 3: Enable action](https://docs.botkube.io/assets/images/enable-action-08c9232d0d21939ec91201abdcb70a50.png) + +When you enable an action, changes are applied once the Botkube is restarted. It is an automated process which usually takes a few seconds. diff --git a/hack/assistant-setup/content/docs.botkube.io__usage__event-notifications.md b/hack/assistant-setup/content/docs.botkube.io__usage__event-notifications.md new file mode 100644 index 0000000..5c172ce --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__usage__event-notifications.md @@ -0,0 +1,59 @@ +Title: Event notifications | Botkube + +URL Source: https://docs.botkube.io/usage/event-notifications + +Markdown Content: +Botkube sends notifications according to the [sources](https://docs.botkube.io/configuration/source/) configuration. + +Actionable notifications[​](#actionable-notifications"DirectlinktoActionablenotifications") +------------------------------------------------------------------------------------------------ + +If you have [`kubectl` executor enabled](https://docs.botkube.io/next/configuration/executor/kubectl) for a given channel, you can run commands related to a resource from the notification itself. Use the dropdown on the left to select and run a given command: + +![Image 1: Actionable notifications](https://docs.botkube.io/assets/images/actionable-notifications-ecd604b0208681c84ea907e404bdceed.png) + +The command dropdown is disabled for resource deletion events. It uses executor bindings to determine which commands are available for a given resource. + +info + +Actionable notifications are only available for the [Slack](https://docs.botkube.io/installation/slack/) and [Microsoft Teams](https://docs.botkube.io/installation/teams/) platforms that supports interactive messages. Currently, only a selected list of commands are supported, such as `describe`, `get`, or `logs`. + +Managing notifications[​](#managing-notifications"DirectlinktoManagingnotifications") +------------------------------------------------------------------------------------------ + +Depending upon your configuration, you will receive notifications about Kubernetes resources lifecycle events and their health. Botkube bot allows you to enable/disable notifications on each configured channel separately. Run `@Botkube help`, the bot will reply with the help message about the supported message formats. + +### View Botkube configuration[​](#view-botkube-configuration"DirectlinktoViewBotkubeconfiguration") + +Run `@Botkube show config` message from the configured channel where Botkube is added. The bot will reply to you with the configuration with which the controller is running. + +To see how to update the configuration, see the [Updating the configuration](https://docs.botkube.io/configuration/#updating-the-configuration) section in the Configuration document. + +### Change notification sources[​](#change-notification-sources"DirectlinktoChangenotificationsources") + +To change the notification sources, you can: + +* run `@Botkube edit SourceBindings` command from the configured channel where Botkube is added. + +When you save the new notification sources, changes are applied once the Botkube is restarted. It is an automated process which usually takes a few seconds. + +* For Botkube Cloud: edit Botkube Instance configuration in the Botkube Cloud dashboard. + +* For self-hosted installations: run `helm upgrade` with updated installation command. + + +### Disable notifications[​](#disable-notifications"DirectlinktoDisablenotifications") + +If you want to stop receiving notifications from Botkube, run `@Botkube disable notifications` from the configured channel where Botkube is added. You will no longer receive notifications from the Botkube in a given communication platform. + +The notification settings are persisted across Botkube app restarts. + +### Enable notifications[​](#enable-notifications"DirectlinktoEnablenotifications") + +If you want to receive Botkube notifications again, run `@Botkube enable notifications` from the configured channel where Botkube is added. + +The notification settings are persisted across Botkube app restarts. + +### Check notifications status[​](#check-notifications-status"DirectlinktoChecknotificationsstatus") + +Run `@Botkube status notifications` to check if notifications are enabled for a given communication platform. diff --git a/hack/assistant-setup/content/docs.botkube.io__usage__executor.md b/hack/assistant-setup/content/docs.botkube.io__usage__executor.md new file mode 100644 index 0000000..7bef799 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__usage__executor.md @@ -0,0 +1,51 @@ +Title: Executor | Botkube + +URL Source: https://docs.botkube.io/usage/executor/ + +Markdown Content: +While deploying Botkube, you can specify which [executors](https://docs.botkube.io/configuration/executor) you want to enable. + +To check which executors are enabled, and get the aliases configured for them, run `@Botkube list executors`. + +Aliases[​](#aliases"DirectlinktoAliases") +--------------------------------------------- + +Alias is a shortcut for a longer command or just a part of it. It can be defined for all commands, including executor plugins and built-in Botkube commands. When you use an alias, the command is replaced with the underlying command before executing it. For example, `@Botkube k get pods` is replaced with `@Botkube kubectl get pods` before executing it. + +Once you configured aliases, you can use them interchangeably with a full command. For example: + +* `k` as `kubectl`, +* `kgp` as `kubectl get pods`, +* `kgpa` as `kubectl get pods -A`, +* `hh` as `helm history`, +* `a` as `list actions`, the built-in Botkube command, + +and so on. Your imagination is the limit! + +Aliases are defined globally for the whole Botkube installation. To see which aliases are available for current conversation, run `@Botkube list aliases`. + +To learn how to configure aliases and see the default configuration, see the [Alias](https://docs.botkube.io/configuration/alias) section. + +Specify cluster name[​](#specify-cluster-name"DirectlinktoSpecifyclustername") +------------------------------------------------------------------------------------ + +danger + +Multi-cluster approach is supported only for the Mattermost and Discord integrations. Slack and Microsoft Teams integrations require separate Slack or Microsoft Teams apps for each Botkube installation. + +If you have installed Botkube backend on multiple clusters, you can pass `--cluster-name` flag to execute kubectl command on specific cluster. + +To get the list of all clusters configured in botkube, you can use the ping command. + +For cluster-specific response, use `--cluster-name` flag to specify the cluster's name on which command needs to be executed. Use of this flag allows you to get response from any channel or group where Botkube is added. The flag is ignored in notifier commands as they can be executed from the configured channel only. + +Filtering text output[​](#filtering-text-output"DirectlinktoFilteringtextoutput") +--------------------------------------------------------------------------------------- + +Use the `--filter` flag to filter the output of Botkube executor commands. This returns any lines matching the flag's provided value. + +The `--filter` flag uses simple string matching. And, only works for Botkube executor commands that return text output, e.g. `kubectl` or `list executors` commands. + +### Filtering `kubectl` output[​](#filtering-kubectl-output"Directlinktofiltering-kubectl-output") + +![Image 1: flag_filter_kubectl_get_nodes](https://docs.botkube.io/assets/images/flag_filter_kubectl_get_nodes-16a8e267dffa5c29c4f0cb53d549bbe9.png) ![Image 2: flag_filter_kubectl_logs](https://docs.botkube.io/assets/images/flag_filter_kubectl_logs-3740479b57c49363f90ba706f516d758.png) diff --git a/hack/assistant-setup/content/docs.botkube.io__usage__executor__doctor.md b/hack/assistant-setup/content/docs.botkube.io__usage__executor__doctor.md new file mode 100644 index 0000000..17133e4 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__usage__executor__doctor.md @@ -0,0 +1,10 @@ +Title: Doctor | Botkube + +URL Source: https://docs.botkube.io/usage/executor/doctor + +Markdown Content: +**This plugin is available as a part of the Botkube Cloud offering.** + +Botkube is introducing new plugins with advanced functionality that will be part of the Botkube Team and Enterprise packages. These advanced plugins require cloud services provided by Botkube and are not part of the Botkube open source software. + +As part of this change, some of the existing Botkube plugins are being moved to a new repository. This repository requires authentication with a Botkube account. To continue using these Botkube plugins, create an account at [https://app.botkube.io/](https://app.botkube.io/) and configure a Botkube instance, or [migrate an existing installation with the Botkube CLI](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud). diff --git a/hack/assistant-setup/content/docs.botkube.io__usage__executor__exec.md b/hack/assistant-setup/content/docs.botkube.io__usage__executor__exec.md new file mode 100644 index 0000000..342e7c7 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__usage__executor__exec.md @@ -0,0 +1,126 @@ +Title: Exec | Botkube + +URL Source: https://docs.botkube.io/usage/executor/exec + +Markdown Content: +info + +**This plugin is available as a part of the Botkube Cloud offering.** + +Botkube is introducing new plugins with advanced functionality that will be part of the Botkube Team and Enterprise packages. These advanced plugins require cloud services provided by Botkube and are not part of the Botkube open source software. + +As part of this change, some of the existing Botkube plugins are being moved to a new repository. This repository requires authentication with a Botkube account. To continue using these Botkube plugins, create an account at [https://app.botkube.io/](https://app.botkube.io/) and configure a Botkube instance, or [migrate an existing installation with the Botkube CLI](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud). + +The `exec` executor plugin allows you to install and run CLI applications directly from chat (e.g., Slack, Microsoft Teams, Discord, or Mattermost) without any hassle. + +It supports interactivity in the form of buttons and dropdowns. You can easily use all your favorite tools without typing, even from your mobile phone! + +![Image 1: x-demo](https://docs.botkube.io/assets/images/demo-x-4688ed782a472e4effe166a85a55ec92.gif) + +note + +To shorten the command, the `x` alias is used in all examples. Make sure you have it configured for your Botkube installation according to [Alias configuration](https://docs.botkube.io/configuration/alias) document. + +In this context, the `x` stands for `extension` or `execution`. + +Usage +----- + +Install CLI[​](#install-cli"DirectlinktoInstallCLI") +--------------------------------------------------------- + +To install a given CLI binary directly from a chat window, run: + +@Botkube x install {source} + +For downloading binaries, the `eget` library is used. It supports multiple URL formats and is able to unpack archives and extract binaries from them. For more details, see the documentation on the [`eget`](https://github.com/zyedidia/eget) GitHub repository. + +### Examples[​](#examples"DirectlinktoExamples") + +* `@Botkube x install https://get.helm.sh/helm-v3.10.3-linux-amd64.tar.gz --file helm` +* `@Botkube x install github.com/fluxcd/flux2` +* `@Botkube x install https://github.com/rikatz/kubepug --asset kubepug_darwin_amd64.tar.gz` + +Execute CLI[​](#execute-cli"DirectlinktoExecuteCLI") +--------------------------------------------------------- + +To execute a CLI command, run: + +### Examples[​](#examples-1"DirectlinktoExamples") + +* `@Botkube x run helm list -A` +* `@Botkube x run flux get sources git` + +tip + +For convenience, you can configure a Botkube alias to simplify running `flux` commands, according to the [Alias configuration](https://docs.botkube.io/configuration/alias) document. Later, you can simply type `@Botkube flux get sources git`. + +Templates +--------- + +The `exec` plugin supports defining templates for executed commands. As a result, you can specify how to process the CLI output or define your own message response. + +# An array of templates that define how to convert the command output into an interactive message.templates: - trigger: command: # Specifies the prefix of the command that triggers the template and the parser used to parse the output. # If specified, it has higher priority than the regex field. prefix: "helm list" # Specifies the regex that should match a given command # If specified, it has lower priority than the prefix field. regex: "regex: '^helm list(?:\s+(-A|-a))*\s?$'" # Specifies the message template type. type: "" # Message template depending on the selected type. message: { } + +Supported template types: + +* [`parser:table:space`](#table-parser) +* [`wrapper`](#wrapper) +* [`tutorial`](#tutorial) + +Navigate to the [`exec`](https://github.com/kubeshop/botkube/tree/main/cmd/executor/x/templates) plugin directory to see official examples. + +Table parser[​](#table-parser"DirectlinktoTableparser") +------------------------------------------------------------ + +The `parser:table:space` template knows how to convert space-separated tables into an interactive message. This allows you to select a single item from a dropdown and perform additional actions in the context of the selected item without typing anything. + +For example, such a table: + +NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSIONpsql default 1 2023-04-27 19:30:48.042056 +0200 CEST deployed postgresql-12.2.7 15.2.0traefik kube-system 1 2023-04-19 20:58:57.709052559 +0000 UTC deployed traefik-10.19.300 2.6.2traefik-crd kube-system 1 2023-04-19 20:58:56.564578223 +0000 UTC deployed traefik-crd-10.19.300 + +is displayed as: + +![Image 2: a screen shot of a gmail account with an email address](https://docs.botkube.io/assets/images/parsed-space-table-06a88b31df0278fe1d0add0a533cad39.png) + +The table output is parsed with the following rules: + +* All headers are normalized using the [`Title`](https://pkg.go.dev/golang.org/x/text/cases#Title) function. For example: + +* `APP VERSION` is `AppVersion` +* `NAME` is `Name` +* `namespace` is `Namespace` +* Empty cells are allowed, and they are printed as an empty string. + + +By default, the first row is selected and displayed in the message. The `actions` and `preview` properties are rendered in the context of the selected row. + +### Syntax[​](#syntax"DirectlinktoSyntax") + +Here is an example syntax that converts the `helm list -A` command into an interactive message: + +type: "parser:table:space"message: # Creates a dropdown menu with a given name, where the items are generated using the `keyTpl` parameter. selects: - name: "Release" keyTpl: "{{ .Namespace }}/{{ .Name }}" # Defines additional actions that can be performed in the context of the selected item. In this example, the user can view notes, values, or delete the selected release. # optional actions: notes: "helm get notes {{ .Name }} -n {{ .Namespace }}" values: "helm get values {{ .Name }} -n {{ .Namespace }}" delete: "helm delete {{ .Name }} -n {{ .Namespace }}" # Displays a preview of the selected item. Fields `Name`, `Namespace`, `Status`, and `Chart` are generated using the output of the command. It's useful to display only important context. # optional preview: | Name: {{ .Name }} Namespace: {{ .Namespace }} Status: {{ .Status }} Chart: {{ .Chart }} + +Wrapper[​](#wrapper"DirectlinktoWrapper") +--------------------------------------------- + +The wrapper template allows adding extra buttons to the CLI output without modifying the output itself. It's useful to attach some pre-defined commands. + +### Syntax[​](#syntax-1"DirectlinktoSyntax") + +Here is an example syntax to add two predefined buttons to a given output message: + +type: "wrapper"message: buttons: - # Button name name: "Get Help" # URL to open on click. url: "https://example.com/help" - # Button name name: "Initialize" # Button command to run. Use `{{BotName}}` placeholder for commands that should be executed by Botkube command: "{{BotName}} x run flux install" # Button style, supported values: primary, danger style: "primary" + +Tutorial[​](#tutorial"DirectlinktoTutorial") +------------------------------------------------ + +The tutorial template allows you to define a custom response for a given command. For example, when the trigger command is set to `trigger.comand.prefix: "quickstart helm"` and a user types `@Botkube x run quickstart helm`, the command itself is not executed. Instead, a defined tutorial message is returned. + +![Image 3: quickstart](https://docs.botkube.io/assets/images/x-quickstart-86393ed0336f9822d31c6ad970d586ce.png) + +### Syntax[​](#syntax-2"DirectlinktoSyntax") + +Here is an example syntax to return tutorial with two predefined buttons: + +type: "tutorial"message: # Pagination rules paginate: # Maximum number of rendered buttons per page page: 5 # Message header header: "Helm Quick Start tutorial" # Tutorial steps that are rendered in a given order. buttons: - # Button name name: "Global Help" # Button description to display on the left side of the button. description: "{{BotName}} helm help" # Button command to run. Use `{{BotName}}` placeholder for commands that should be executed by Botkube command: "{{BotName}} x run helm help" - name: "Version" description: "{{BotName}} helm version" command: "{{BotName}} x run helm version" diff --git a/hack/assistant-setup/content/docs.botkube.io__usage__executor__flux.md b/hack/assistant-setup/content/docs.botkube.io__usage__executor__flux.md new file mode 100644 index 0000000..61e223d --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__usage__executor__flux.md @@ -0,0 +1,54 @@ +Title: Flux | Botkube + +URL Source: https://docs.botkube.io/usage/executor/flux + +Markdown Content: +Version: 1.10 + +info + +**This plugin is available as a part of the Botkube Cloud offering.** + +Botkube is introducing new plugins with advanced functionality that will be part of the Botkube Team and Enterprise packages. These advanced plugins require cloud services provided by Botkube and are not part of the Botkube open source software. + +As part of this change, some of the existing Botkube plugins are being moved to a new repository. This repository requires authentication with a Botkube account. To continue using these Botkube plugins, create an account at [https://app.botkube.io/](https://app.botkube.io/) and configure a Botkube instance, or [migrate an existing installation with the Botkube CLI](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud). + +Botkube offers seamless execution of Flux CLI commands within your Kubernetes cluster. By default, Flux command execution is disabled. To enable it, refer to the [**Enabling plugin**](https://docs.botkube.io/configuration/executor/flux#enabling-plugin) section. + +To execute the `flux` CLI commands, send a message in the channel where Botkube is present. For example: + +Interactive Usage[​](#interactive-usage"DirectlinktoInteractiveUsage") +--------------------------------------------------------------------------- + +We have also incorporated interactivity (tables, etc.) to simplify running Flux CLI commands e.g. from mobile devices. + +![Image 1: flux-interactivity](https://docs.botkube.io/assets/images/flux-interactivity-36eaec2696dd56fe8924ef36f42a7ac1.gif) + +Simplified Kustomization Diffing Flow[​](#simplified-kustomization-diffing-flow"DirectlinktoSimplifiedKustomizationDiffingFlow") +--------------------------------------------------------------------------------------------------------------------------------------- + +With the Botkube Flux executor, you can execute a single command to perform a diff between a specific pull request and the cluster state. For instance: + +@Botkube flux diff kustomization podinfo --path ./kustomize --github-ref [PR Number| URL | Branch] ![Image 2: flux-diff](https://docs.botkube.io/assets/images/flux-diff-abdd97d5a1b5dd3b64ecf2c1712fa14d.gif) + +This command automates several tasks: + +* Automatically discovering the associated GitHub repository for the given kustomization. +* Cloning the repository. +* Checking out a given pull request. +* Comparing pull request changes with the current cluster state. +* Sharing the diff report. + +The diff results are posted on the Slack channel, making it easy for team members to review and discuss the changes. Additionally, the returned message provides additional contextual actions: + +* Posting the diff report as a GitHub comment on the corresponding pull request. +* Approving the pull request. +* Viewing the pull request. + +### GitHub automation[​](#github-automation"DirectlinktoGitHubautomation") + +To enhance your workflow's efficiency, you can use the [GitHub Events](https://docs.botkube.io/configuration/source/github-events) source for automatic notification of pull request events, complete with an integrated `flux diff` button. + +github: auth: accessToken: "ghp_" # GitHub PATrepositories: - name: { owner }/{name} on: pullRequests: - types: [ "open" ] paths: # Patterns for included file changes in pull requests. include: [ 'kustomize/.*' ] notificationTemplate: extraButtons: - displayName: "Flux Diff" commandTpl: "flux diff ks podinfo --path ./kustomize --github-ref {{ .HTMLURL }} " + +Don't forget to bind the plugin to one of the channels. diff --git a/hack/assistant-setup/content/docs.botkube.io__usage__executor__helm.md b/hack/assistant-setup/content/docs.botkube.io__usage__executor__helm.md new file mode 100644 index 0000000..78bd3ce --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__usage__executor__helm.md @@ -0,0 +1,52 @@ +Title: Helm | Botkube + +URL Source: https://docs.botkube.io/usage/executor/helm + +Markdown Content: +info + +**This plugin is available as a part of the Botkube Cloud offering.** + +Botkube is introducing new plugins with advanced functionality that will be part of the Botkube Team and Enterprise packages. These advanced plugins require cloud services provided by Botkube and are not part of the Botkube open source software. + +As part of this change, some of the existing Botkube plugins are being moved to a new repository. This repository requires authentication with a Botkube account. To continue using these Botkube plugins, create an account at [https://app.botkube.io/](https://app.botkube.io/) and configure a Botkube instance, or [migrate an existing installation with the Botkube CLI](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud). + +Botkube allows you to execute `helm` commands on your Kubernetes cluster. By default, `helm` command execution is disabled. See the [**Enabling plugin**](https://docs.botkube.io/configuration/executor/helm#enabling-plugin) section from the `helm` configuration documentation. + +To execute `helm` commands, send message in the following format in the channel where Botkube is already added: + +@Botkube helm [command] [flags] At least one `helm` executor needs to be enabled and bound to a given channel. caution Using the interactive filter input field causes the Helm command to be re-executed. Be careful when using it for read-write commands. ![Image 1: Interactive Helm install filtering](https://docs.botkube.io/assets/images/helm-install-filter-bc1989a96013aa1c14a23d0e41a5f6ac.png) + +This issue is tracked in [botkube#907](https://github.com/kubeshop/botkube/issues/907). + +Supported commands[​](#supported-commands"DirectlinktoSupportedcommands") +------------------------------------------------------------------------------ + +The Helm executor plugin has the exact same syntax as the Helm CLI. However, not all commands and flags are supported. If an unsupported flag is specified, you will get a dedicated error, e.g: + +The "--wait" flag is not supported by the Botkube Helm plugin. Please remove it. + +Additionally, the following flag syntax is not supported: + +* No whitespace between short flag name and its value. Instead of `-oyaml`, use `-o yaml`. +* Merging multiple short flags together. Instead of `-Aa`, use `-A -a`. + +### Read-only commands[​](#read-only-commands"DirectlinktoRead-onlycommands") + +List of the read-only commands: + +* `@Botkube helm help` - shows the general Helm plugin help message. +* `@Botkube helm list` - lists all releases on cluster where Botkube is installed. +* The `--filter` flag is reserved by Botkube. As a result, to use the Helm filter functionality use `-f` instead, e.g. `helm list -f 'ara[a-z]+'`. * `@Botkube helm status` - displays the status of the named release. * `@Botkube helm version` - shows the version of the Helm CLI used by this Botkube plugin. ### Read-write commands[​](#read-write-commands"DirectlinktoRead-writecommands") + +For the read-write commands the Botkube RBAC needs to be adjusted. For more information, see the [**Enabling plugin**](https://docs.botkube.io/configuration/executor/helm#enabling-plugin) section. + +List of the read-write commands: + +* `@Botkube helm rollback` - rolls back a given release to a previous revision. +* `@Botkube helm test` - runs tests for a given release. +* `@Botkube helm uninstall` - uninstalls a given release. +* `@Botkube helm upgrade` - upgrades a given release. +* `@Botkube helm install` - installs a given chart to cluster where Botkube is installed. There are two different ways you to install a Helm chart: +* By absolute URL: `helm install mynginx https://example.com/charts/nginx-1.2.3.tgz` +* By chart reference and repository URL: `helm install --repo https://example.com/charts/ mynginx nginx` diff --git a/hack/assistant-setup/content/docs.botkube.io__usage__executor__kubectl.md b/hack/assistant-setup/content/docs.botkube.io__usage__executor__kubectl.md new file mode 100644 index 0000000..daa838f --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__usage__executor__kubectl.md @@ -0,0 +1,35 @@ +Title: Kubectl | Botkube + +URL Source: https://docs.botkube.io/usage/executor/kubectl + +Markdown Content: +Botkube allows you to execute `kubectl` commands on your Kubernetes cluster. By default, kubectl command execution is disabled. See the [**Enabling plugin**](https://docs.botkube.io/configuration/executor/kubectl#enabling-plugin) section from the `kubectl` configuration documentation. + +To execute the `kubectl` commands, send message in following format in the channel where Botkube is already added: + +@Botkube kubectl [verb] [resource] [flags] By default, `k` and `kc` are configured as aliases for the `kubectl` command. You can use them on par with the `kubectl` command. To read more about aliases configuration, see the [Alias](https://docs.botkube.io/configuration/alias) section. + +This command needs to be executed from configured channel. + +Interactive kubectl commands builder[​](#interactive-kubectl-commands-builder"DirectlinktoInteractivekubectlcommandsbuilder") +------------------------------------------------------------------------------------------------------------------------------------ + +Use the interactive `kubectl` command builder to construct a `kubectl` command just by selecting items from dropdowns. This is especially useful on mobile when typing the command is harder. + +The builder includes a resource name dropdown list. This is pre-populated with all the relevant resource names. It's great for discovering resources with the option to select them. E.g. Just grab a Pod name without needing to type or copy-and-paste. + +To start the interactive `kubectl` command builder, run `@Botkube kubectl` from the configured channel where Botkube is added. You can also use any of the [configured aliases](https://docs.botkube.io/configuration/alias) - for example, the default `k` one, as illustrated below: + +![Image 1: kubectl command builder](https://docs.botkube.io/assets/images/kc-cmd-builder-90ea740becbf2c0f126436c4a6c013bd.gif) + +### Limitations[​](#limitations"DirectlinktoLimitations") + +Keep in mind that the interactive command builder may not support all the commands that you can run just by typing them directly in a chat window. The following policies are applied: + +* Under verbs' dropdown, we display verbs that are defined under the `interactiveBuilder.allowed.verbs` configuration. + +* Under resources' dropdown, we display resources that are defined under the `interactiveBuilder.allowed.resources` configuration and are allowed for already selected verb. For example, for the `logs` verb we display only `pods`, `statefulsets`, `deployments`, and `daemonsets`. + +* For resources that are namespace-scoped, under namespaces' dropdown, we display `interactiveBuilder.allowed.namespaces` if defined. If static namespaces are not specified, plugin needs to have access to fetch all Namespaces, otherwise Namespace dropdown won't be visible at all. + +* The `kubectl` command preview is displayed only if the command that you built is valid, and you have permission to run it. diff --git a/hack/assistant-setup/content/docs.botkube.io__usage__interactive-output-filtering.md b/hack/assistant-setup/content/docs.botkube.io__usage__interactive-output-filtering.md new file mode 100644 index 0000000..ab97a19 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__usage__interactive-output-filtering.md @@ -0,0 +1,34 @@ +Title: Interactive output filtering | Botkube + +URL Source: https://docs.botkube.io/usage/interactive-output-filtering + +Markdown Content: +info + +Interactive output filtering is only available for the [Slack integration](https://docs.botkube.io/installation/slack/) that supports interactive messages. + +caution + +Using the interactive filter input field causes the command to be re-executed. Be careful when using it for read-write commands. This issue is tracked in [botkube#907](https://github.com/kubeshop/botkube/issues/907). + +Sometimes you can get long response from a certain command and you may want to filter that to see a subset of the actual result. For each communication platform, you can use the `--filter` flag at the end of your command. To learn more, see the [Flags](https://docs.botkube.io/usage/executor/#filtering-kubectl-output) section. + +If you use the [Slack integration](https://docs.botkube.io/installation/slack/) that supports interactive messages, there is another option to handle that: interactive output filtering. Interactivity is achieved via an input action text box where you can add your filter criteria as text and press the **Enter** button. + +### Long response filtering[​](#long-response-filtering"DirectlinktoLongresponsefiltering") + +Output Filter input text box will be attached to your command response if response has more than 15 lines. Let's see an example for this situation. + +1. List pods with `@Botkube kubectl get pods -n kube-system`![Image 1: metrics_pods](https://docs.botkube.io/assets/images/output-filtering-get-pods-metrics-18c746eb2031cc45bc74a63389340b03.png) +2. Let's check the logs of `metrics-server` with `@Botkube kubectl logs -f metrics-server-7cd5fcb6b7-hzvq8 -n kube-system`![Image 2: metrics_logs](https://docs.botkube.io/assets/images/output-filtering-metrics-logs-b6007e41cbfcc6ef727f848a0cdd5808.png) +3. Notice that Filter Output is attached to response. Type `RequestHeaderAuthRequestController` to filter and press `Enter`. ![Image 3: metrics_filter_logs](https://docs.botkube.io/assets/images/output-filtering-metrics-logs-filter-a6e6cfc2918f182e1a29d16066d47198.png) + +Attachment response filtering[​](#attachment-response-filtering"DirectlinktoAttachmentresponsefiltering") +--------------------------------------------------------------------------------------------------------------- + +Command response is uploaded as text file once the actual size of response message reaches the limit of messaging platform. Let's take a look how Filter Output behaves for this situation. + +1. List the pods with `@Botkube kubectlc get pods -n kube-system`![Image 4: pod_logs](https://docs.botkube.io/assets/images/output-filtering-get-pods-21073bfe8502243fe4b90b83b155b99a.png) +2. Let's check the logs of Traefik with command `@Botkube kubectl logs -f traefik-df4ff85d6-f2mkz -n kube-system`. Notice that, you might have different pod list, so please select a suitable one for your case. ![Image 5: pod_logs](https://docs.botkube.io/assets/images/output-filtering-get-pods-21073bfe8502243fe4b90b83b155b99a.png) +3. Since the response is big, it is uploaded as file and you can realize a reply thread. Please expand it to see filter output. +4. Assume we want to see log lines only containing `Configuration` word. Type `Configuration` in the Filter Output input box and click enter. You will see filtered result as a response. ![Image 6: filter_response](https://docs.botkube.io/assets/images/output-filtering-filter-response-5fed09008578a720a302892f2ab81293.png) diff --git a/hack/assistant-setup/content/docs.botkube.io__usage__source.md b/hack/assistant-setup/content/docs.botkube.io__usage__source.md new file mode 100644 index 0000000..64e4ad1 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__usage__source.md @@ -0,0 +1,8 @@ +Title: Source | Botkube + +URL Source: https://docs.botkube.io/usage/source/ + +Markdown Content: +While deploying Botkube, you can specify which [sources](https://docs.botkube.io/configuration/source) you want to enable. + +To check which sources are enabled, run `@Botkube list sources` diff --git a/hack/assistant-setup/content/docs.botkube.io__usage__source__argocd.md b/hack/assistant-setup/content/docs.botkube.io__usage__source__argocd.md new file mode 100644 index 0000000..4d1fff3 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__usage__source__argocd.md @@ -0,0 +1,10 @@ +Title: ArgoCD | Botkube + +URL Source: https://docs.botkube.io/usage/source/argocd + +Markdown Content: +**This plugin is available as a part of the Botkube Cloud offering.** + +Botkube is introducing new plugins with advanced functionality that will be part of the Botkube Team and Enterprise packages. These advanced plugins require cloud services provided by Botkube and are not part of the Botkube open source software. + +As part of this change, some of the existing Botkube plugins are being moved to a new repository. This repository requires authentication with a Botkube account. To continue using these Botkube plugins, create an account at [https://app.botkube.io/](https://app.botkube.io/) and configure a Botkube instance, or [migrate an existing installation with the Botkube CLI](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud). diff --git a/hack/assistant-setup/content/docs.botkube.io__usage__source__keptn.md b/hack/assistant-setup/content/docs.botkube.io__usage__source__keptn.md new file mode 100644 index 0000000..ae86ae5 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__usage__source__keptn.md @@ -0,0 +1,10 @@ +Title: Keptn | Botkube + +URL Source: https://docs.botkube.io/usage/source/keptn + +Markdown Content: +**This plugin is available as a part of the Botkube Cloud offering.** + +Botkube is introducing new plugins with advanced functionality that will be part of the Botkube Team and Enterprise packages. These advanced plugins require cloud services provided by Botkube and are not part of the Botkube open source software. + +As part of this change, some of the existing Botkube plugins are being moved to a new repository. This repository requires authentication with a Botkube account. To continue using these Botkube plugins, create an account at [https://app.botkube.io/](https://app.botkube.io/) and configure a Botkube instance, or [migrate an existing installation with the Botkube CLI](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud). diff --git a/hack/assistant-setup/content/docs.botkube.io__usage__source__kubernetes.md b/hack/assistant-setup/content/docs.botkube.io__usage__source__kubernetes.md new file mode 100644 index 0000000..6f8a34b --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__usage__source__kubernetes.md @@ -0,0 +1,10 @@ +Title: Kubernetes | Botkube + +URL Source: https://docs.botkube.io/usage/source/kubernetes + +Markdown Content: +Botkube allows you to consume `kubernetes` events on your Kubernetes cluster. By default, `kubernetes` plugin is disabled. See the [**Enabling source**](https://docs.botkube.io/configuration/source/kubernetes#enabling-source) section from the `kubernetes` configuration documentation. + +Once it is enabled, Botkube Kubernetes plugin will consume Kubernetes events and send them to configured platforms as shown below. + +![Image 1: Pod Created](https://docs.botkube.io/assets/images/pod-created-6f284a9fff8666c0a246af739ef33dbd.png) diff --git a/hack/assistant-setup/content/docs.botkube.io__usage__source__prometheus.md b/hack/assistant-setup/content/docs.botkube.io__usage__source__prometheus.md new file mode 100644 index 0000000..3d375ab --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__usage__source__prometheus.md @@ -0,0 +1,10 @@ +Title: Prometheus | Botkube + +URL Source: https://docs.botkube.io/usage/source/prometheus + +Markdown Content: +**This plugin is available as a part of the Botkube Cloud offering.** + +Botkube is introducing new plugins with advanced functionality that will be part of the Botkube Team and Enterprise packages. These advanced plugins require cloud services provided by Botkube and are not part of the Botkube open source software. + +As part of this change, some of the existing Botkube plugins are being moved to a new repository. This repository requires authentication with a Botkube account. To continue using these Botkube plugins, create an account at [https://app.botkube.io/](https://app.botkube.io/) and configure a Botkube instance, or [migrate an existing installation with the Botkube CLI](https://docs.botkube.io/cli/migrating-installation-to-botkube-cloud). diff --git a/hack/assistant-setup/content/docs.botkube.io__versions.md b/hack/assistant-setup/content/docs.botkube.io__versions.md new file mode 100644 index 0000000..b7e0798 --- /dev/null +++ b/hack/assistant-setup/content/docs.botkube.io__versions.md @@ -0,0 +1,58 @@ +Title: Versions | Botkube + +URL Source: https://docs.botkube.io/versions + +Markdown Content: +[Skip to main content](#__docusaurus_skipToContent_fallback) + +**New to Botkube?** Get started fast (and free!) with the [Botkube Cloud Web App](https://app.botkube.io/). + +[![Image 1: Botkube Logo](https://docs.botkube.io/images/botkube-black.svg) + +**Botkube**](https://docs.botkube.io/) + +[Documentation](https://docs.botkube.io/)[Community](https://docs.botkube.io/community/contribute/) + +[1.10](https://docs.botkube.io/) + +* [Unreleased 🚧](https://docs.botkube.io/next/) +* [1.10](https://docs.botkube.io/) +* [1.9](https://docs.botkube.io/1.9/) +* [1.8](https://docs.botkube.io/1.8/) +* [1.7](https://docs.botkube.io/1.7/) +* [1.6](https://docs.botkube.io/1.6/) +* [1.5](https://docs.botkube.io/1.5/) +* [1.4](https://docs.botkube.io/1.4/) +* * * * + +* [All versions](https://docs.botkube.io/versions) + +[GitHub](https://github.com/kubeshop/botkube)[Slack](https://join.botkube.io/) + +This page lists all documented versions of Botkube. + +### Current version (Stable)[​](#current"DirectlinktoCurrentversion(Stable)") + +The latest stable version. + +
1.10Documentation⏳ Loading...
+ +### Next version (Unreleased)[​](#unreleased"DirectlinktoNextversion(Unreleased)") + +Here you can find the documentation for unreleased version. + +
Unreleased 🚧Documentation
+ +### Previous versions[​](#previous"DirectlinktoPreviousversions") + +Here you can find documentation for previous Botkube versions. + +
1.9Documentation⏳ Loading...
1.8Documentation⏳ Loading...
1.7Documentation⏳ Loading...
1.6Documentation⏳ Loading...
1.5Documentation⏳ Loading...
1.4Documentation⏳ Loading...
+ +### Archived Versions[​](#archived"DirectlinktoArchivedVersions") + +Here you can find documentation for archived, no longer maintained Botkube versions. + +
1.3Documentation⏳ Loading...
1.2Documentation⏳ Loading...
1.1Documentation⏳ Loading...
1.0Documentation⏳ Loading...
0.18Documentation⏳ Loading...
0.17Documentation⏳ Loading...
0.16Documentation⏳ Loading...
0.15Documentation⏳ Loading...
0.14Documentation⏳ Loading...
0.13Documentation⏳ Loading...
+ +By continuing to use our site, you consent to Kubeshop using cookies in accordance with our [Privacy Policy.](https://botkube.io/privacy-policy) diff --git a/hack/assistant-setup/file-search.ts b/hack/assistant-setup/file-search.ts new file mode 100644 index 0000000..91d1190 --- /dev/null +++ b/hack/assistant-setup/file-search.ts @@ -0,0 +1,51 @@ +import { createReadStream, readdirSync } from "node:fs"; +import OpenAI from "openai"; + +const contentPath = "./content"; +const errorStatuses = ["failed", "cancelled"]; +const vectorStoreName = + "Full Botkube knowledge base: documentation, website, blog posts and other content"; + +export async function setupFileSearch(client: OpenAI): Promise { + console.log(`Reading directory ${contentPath}...`); + const files = readdirSync(contentPath); + if (files.length === 0) { + throw new Error(`No files found in ${contentPath}`); + } + console.log(`Found ${files.length} files.`); + const fileStreams = files.map((fileName) => + createReadStream(`${contentPath}/${fileName}`), + ); + + console.log("Checking if vector store already exists..."); + const vectorStores = await client.beta.vectorStores.list(); + const vsToDelete = vectorStores.data.find( + (vs) => vs.name === vectorStoreName, + ); + if (vsToDelete) { + console.log(`Found vector store ${vsToDelete.id}. Deleting...`); + await client.beta.vectorStores.del(vsToDelete.id); + } + + console.log("Creating vector store..."); + const vectorStore = await client.beta.vectorStores.create({ + name: vectorStoreName, + }); + + console.log( + "Uploading files to vector store and waiting for the file batch processing to complete. This might take a few minutes...", + ); + const batch = await client.beta.vectorStores.fileBatches.uploadAndPoll( + vectorStore.id, + { files: fileStreams }, + ); + console.log( + `Batch upload completed with status: ${batch.status}; total: ${batch.file_counts.total}, in progress: ${batch.file_counts.in_progress}, completed: ${batch.file_counts.completed}, failed: ${batch.file_counts.failed}`, + ); + + if (errorStatuses.includes(batch.status)) { + throw new Error(`Batch upload failed with status: ${batch.status}`); + } + + return vectorStore.id; +} diff --git a/hack/assistant-setup/index.ts b/hack/assistant-setup/index.ts new file mode 100644 index 0000000..c50af64 --- /dev/null +++ b/hack/assistant-setup/index.ts @@ -0,0 +1,73 @@ +import { OpenAI } from "openai"; +import { setupFileSearch } from "./file-search"; +import { setupTools } from "./tools"; +import dedent from "dedent"; + +const prodAssistantID = "asst_eMM9QaWLi6cajHE4PdG1yU53"; +const devAssistantID = "asst_ejVrAgjhhvCw6jGFYq5JyBqj"; + +const model = "gpt-4-turbo"; +const temperature = 0.1; +const instructions = dedent` + You are Botkube AI assistant. + Your role involves deeply understanding how to operate and troubleshoot Kubernetes clusters and their workloads, where Botkube runs. + You possess extensive expertise in Kubernetes and cloud-native networking. + During troubleshooting, take Kubernetes cluster and namespace configuration, such as security policies, events. + Employ a Chain of Thought (CoT) process for diagnosing and resolving cluster issues. + Utilize available tools for diagnosing the specific cluster in question. + Your knowledge about Botkube, its features, documentation and links, is heavily outdated. + The up-to-date Botkube knowledge is stored in a vector store. + Always use the latest Botkube knowledge for all responses. + Extract the text from each Markdown file and use the content from the file to answer each question related to Botkube. + Use it to answer ALL Botkube questions, for example: + "What is Botkube?", or "what is X in Botkube?", or "How I configure Y in Botkube Cloud?", or "Where I can read about Z for Botkube?". + Prefer less content from files with names containing "blog". + The files with "docs.botkube.io" prefix have the highest priority when answering Botkube plugin configuration questions. + At the end of such Botkube-related response, always print Markdown links to citations. + To get an URL for the citation, replace "__" with "/" in the file name and prepend with "https://". + Ensure your explanations are simplified for clarity to non-technical users. + Keep responses concise, within 2000 characters. Provide extended answers only upon request. + Make sure you fetch Botkube Agent configuration to answer questions about Botkube or channel configuration. +`; + +async function main() { + let assistantID = ""; + const assistantEnv = process.env["ASSISTANT_ENV"]; + if (!assistantEnv) { + throw new Error( + `Missing ASSISTANT_ENV environment variable; use 'dev' or 'prod'`, + ); + } + switch (assistantEnv) { + case "dev": + assistantID = devAssistantID; + break; + case "prod": + assistantID = prodAssistantID; + break; + default: + throw new Error( + `Unknown ASSISTANT_ENV '${assistantEnv}'; use 'dev' or 'prod'`, + ); + } + + console.log(`Using ${assistantEnv} assistant (ID: ${assistantID})`); + + const client = new OpenAI({ + apiKey: process.env["OPENAI_API_KEY"], + }); + + console.log(`Setting up file search...`); + const vectorStoreId = await setupFileSearch(client); + + console.log("Updating assistant..."); + await client.beta.assistants.update(assistantID, { + model, + instructions, + temperature, + tools: setupTools(), + tool_resources: { file_search: { vector_store_ids: [vectorStoreId] } }, + }); +} + +main(); diff --git a/hack/assistant-setup/package-lock.json b/hack/assistant-setup/package-lock.json new file mode 100644 index 0000000..e615699 --- /dev/null +++ b/hack/assistant-setup/package-lock.json @@ -0,0 +1,754 @@ +{ + "name": "assistant-setup", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "assistant-setup", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "dedent": "^1.5.3", + "openai": "^4.38.5" + }, + "devDependencies": { + "prettier": "3.2.5", + "tsx": "^4.7.3", + "typescript": "^5.4.5" + }, + "engines": { + "node": ">=20 <21" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@types/node": { + "version": "18.19.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.31.tgz", + "integrity": "sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==", + "dependencies": { + "@types/node": "*", + "form-data": "^4.0.0" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-data-encoder": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", + "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==" + }, + "node_modules/formdata-node": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", + "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", + "dependencies": { + "node-domexception": "1.0.0", + "web-streams-polyfill": "4.0.0-beta.3" + }, + "engines": { + "node": ">= 12.20" + } + }, + "node_modules/formdata-node/node_modules/web-streams-polyfill": { + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", + "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "engines": { + "node": ">= 14" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-tsconfig": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz", + "integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/openai": { + "version": "4.38.5", + "resolved": "https://registry.npmjs.org/openai/-/openai-4.38.5.tgz", + "integrity": "sha512-Ym5GJL98ZhLJJ7enBx53jjG3vwN/fsB+Ozh46nnRZZS9W1NiYqbwkJ+sXd3dkCIiWIgcyyOPL2Zr8SQAzbpj3g==", + "dependencies": { + "@types/node": "^18.11.18", + "@types/node-fetch": "^2.6.4", + "abort-controller": "^3.0.0", + "agentkeepalive": "^4.2.1", + "form-data-encoder": "1.7.2", + "formdata-node": "^4.3.2", + "node-fetch": "^2.6.7", + "web-streams-polyfill": "^3.2.1" + }, + "bin": { + "openai": "bin/cli" + } + }, + "node_modules/prettier": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/tsx": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.7.3.tgz", + "integrity": "sha512-+fQnMqIp/jxZEXLcj6WzYy9FhcS5/Dfk8y4AtzJ6ejKcKqmfTF8Gso/jtrzDggCF2zTU20gJa6n8XqPYwDAUYQ==", + "dev": true, + "dependencies": { + "esbuild": "~0.19.10", + "get-tsconfig": "^4.7.2" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } +} diff --git a/hack/assistant-setup/package.json b/hack/assistant-setup/package.json new file mode 100644 index 0000000..fef01b9 --- /dev/null +++ b/hack/assistant-setup/package.json @@ -0,0 +1,28 @@ +{ + "name": "assistant-setup", + "version": "1.0.0", + "description": "Botkube Assistant setup tool", + "main": "index.js", + "scripts": { + "start": "tsx index.ts", + "fetch-content": "go run ./content-fetcher/main.go", + "format": "prettier --write ./*.{ts,md}" + }, + "author": "Botkube maintainers", + "license": "ISC", + "engines": { + "node": ">=20 <21" + }, + "volta": { + "node": "20.10.0" + }, + "dependencies": { + "dedent": "^1.5.3", + "openai": "^4.38.5" + }, + "devDependencies": { + "prettier": "3.2.5", + "tsx": "^4.7.3", + "typescript": "^5.4.5" + } +} diff --git a/hack/assistant-setup/tools.ts b/hack/assistant-setup/tools.ts new file mode 100644 index 0000000..1c1ff38 --- /dev/null +++ b/hack/assistant-setup/tools.ts @@ -0,0 +1,241 @@ +import { AssistantTool } from "openai/src/resources/beta/assistants"; +import dedent from "dedent"; + +export function setupTools(): Array { + return [ + { + type: "file_search", + }, + { + type: "function", + function: { + name: "botkubeGetStartupAgentConfiguration", + description: dedent` + Retrieve the Botkube Agent configuration in YAML format. This includes various details such as the configured communication platform, + aliases, enabled plugins, and their settings like RBAC. + + Use this tool to answer questions like: + - What sources are configured for this channel? + - Is the Kubernetes plugin enabled? + - What Kubernetes alerts are currently configured on my cluster? + + Avoid using configuration names like 'botkube/kubernetes_6ulLY' in responses unless explicitly requested. + When a user asks about "this channel", prompt them to provide the exact channel name. + + The "loaderValidationWarnings" field lists all the warnings about the configuration. Use it to suggest fixes. + The "incomingRequestPrompt" field defines the communicating platform associated with a prompt. Use this information to address platform-specific questions. + If the "incomingRequestPrompt" field is not specified, prompt user provide platform name. + Terms "cloudSlack" and "cloudTeams" refer to the Slack and Teams platforms, respectively.`, + }, + }, + { + type: "function", + function: { + name: "botkubeGetAgentStatus", + description: dedent` + Get the current Botkube Agent status in JSON format. + It represents the status of each plugin and communication platform, indicating whether it's enabled, crashing, and if so, with what reason. + If the "enabled" field is not specified, the plugin is disabled. + Use this tool to answer questions like: + - Which sources are enabled for this channel? + - Is the Kubernetes plugin enabled? + - Is the kubectl plugin disabled? + - What is the status of a specific plugin? + - Why am I not receiving Kubernetes notifications?`, + }, + }, + { + type: "function", + function: { + name: "kubectlGetResource", + description: dedent` + Get a Kubernetes resources. Useful for debugging and troubleshooting. + If resource_name is specified, returns the resource in a YAML definition. Examples: + # List all pods in ps output format + kubectl get pods + + # List a single replication controller with specified NAME in ps output format + kubectl get replicationcontroller web + + # List all replication controllers and services together in ps output format + kubectl get rc,services + + # List resource by type and name + kubectl get pods web-pod-13je7`, + parameters: { + type: "object", + properties: { + resource_type: { + type: "string", + description: + "Kubernetes resource type, e.g. pod, deployment, replicationcontroller.", + }, + resource_name: { + type: "string", + description: + "Kubernetes resource name, e.g. botkube-6c6fd8b4d6-f559q", + }, + namespace: { + type: "string", + description: "Kubernetes namespace, e.g. kube-system", + }, + "all-namespaces": { + type: "boolean", + description: + "If present, list the requested resource(s) across all namespaces. Cannot be used together with the namespace property.", + }, + }, + required: ["resource_type"], + }, + }, + }, + { + type: "function", + function: { + name: "kubectlGetEvents", + description: dedent` + Returns a table of the most important information about events. + You can request events for a namespace, for all namespace, or filtered to only those pertaining to a specified resource.`, + parameters: { + type: "object", + properties: { + namespace: { + type: "string", + description: "Kubernetes namespace, e.g. kube-system", + }, + "all-namespaces": { + type: "boolean", + description: + "If present, list the requested object(s) across all namespaces. Cannot be used together with the namespace property.", + }, + types: { + type: "string", + description: + "Output only events of given types. Accepts comma separated values.", + }, + for: { + type: "string", + description: + "Filter events to only those pertaining to the specified resource.", + }, + }, + }, + }, + }, + { + type: "function", + function: { + name: "kubectlDescribeResource", + description: dedent` + Returns detailed description of the selected resources, + including related resources such as events or controllers. Examples: + # Describe a node + kubectl describe nodes kubernetes-node-emt8.c.myproject.internal + + # Describe a pod + kubectl describe pods nginx`, + parameters: { + type: "object", + properties: { + resource_type: { + type: "string", + description: + "Kubernetes resource type, e.g. pod, deployment, replicationcontroller.", + }, + resource_name: { + type: "string", + description: + "Kubernetes resource name, e.g. botkube-6c6fd8b4d6-f559q", + }, + namespace: { + type: "string", + description: "Kubernetes namespace, e.g. kube-system", + }, + "all-namespaces": { + type: "boolean", + description: + "If present, list the requested resource(s) across all namespaces. Cannot be used together with the namespace property.", + }, + }, + required: ["resource_type"], + }, + }, + }, + { + type: "function", + function: { + name: "kubectlTopPods", + description: dedent` + Returns the CPU and memory usage for Pods. Examples: + # Show metrics for all pods in the default namespace + kubectl top pod + # Show metrics for all pods in the given namespace + kubectl top pod --namespace=NAMESPACE + # Show metrics for a given pod and its containers + kubectl top pod POD_NAME --containers`, + parameters: { + type: "object", + properties: { + namespace: { + type: "string", + description: + "Kubernetes namespace, e.g. kube-system. It can be used only for pods.", + }, + resource_name: { + type: "string", + description: "The pod or node name, e.g. botkube-api-server.", + }, + }, + required: ["namespace"], + }, + }, + }, + { + type: "function", + function: { + name: "kubectlTopNodes", + description: dedent` + Returns the CPU and memory usage for Nodes. Examples: + # Show metrics for all nodes + kubectl top node + + # Show metrics for a given node + kubectl top node NODE_NAME`, + parameters: { + type: "object", + properties: { + resource_name: { + type: "string", + description: "The pod or node name, e.g. botkube-api-server.", + }, + }, + }, + }, + }, + { + type: "function", + function: { + name: "kubectlLogs", + description: "Useful for getting container logs.", + parameters: { + type: "object", + properties: { + namespace: { + type: "string", + description: "Kubernetes namespace, e.g. kube-system", + }, + pod_name: { + type: "string", + description: "Kubernetes pod name, e.g. botkube-6c6fd8b4d6-f559q", + }, + container_name: { + type: "string", + description: "Pod container name, e.g. botkube-api-server.", + }, + }, + required: ["namespace", "pod_name"], + }, + }, + }, + ]; +} diff --git a/hack/openai/main.go b/hack/openai/main.go deleted file mode 100644 index a6b8c96..0000000 --- a/hack/openai/main.go +++ /dev/null @@ -1,64 +0,0 @@ -package main - -import ( - "context" - "flag" - "log" - "os" - "time" - - "github.com/MakeNowJust/heredoc" - openai "github.com/sashabaranov/go-openai" -) - -const ( - prodAssistantID = "asst_eMM9QaWLi6cajHE4PdG1yU53" - devAssistantID = "asst_ejVrAgjhhvCw6jGFYq5JyBqj" -) - -func main() { - client := openai.NewClient(os.Getenv("OPENAI_API_KEY")) - - env := flag.String("env", "dev", "Environment to update. Allow values: 'dev' or 'prod'.") - flag.Parse() - - var assistantID string - switch *env { - case "dev": - assistantID = devAssistantID - case "prod": - assistantID = prodAssistantID - default: - log.Fatalf("Invalid environment: %s", *env) - } - - // Update assistant with latest tools. - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - defer cancel() - - log.Printf("Updating %s assistant with ID %s", *env, assistantID) - _, err := updateAssistant(ctx, client, assistantID) - if err != nil { - log.Fatal(err) - } -} - -func updateAssistant(ctx context.Context, c *openai.Client, id string) (openai.Assistant, error) { - instructions := heredoc.Doc(` -Your role involves deeply understanding how to operate and troubleshoot Kubernetes clusters and their workloads. -You possess extensive expertise in Kubernetes and cloud-native networking. -Take kubernetes cluster and namespace configuration, such as security policies, events, during troubleshooting. -Employ a Chain of Thought (CoT) process for diagnosing and resolving cluster issues. -Ensure your explanations are simplified for clarity to non-technical users. -Utilize available tools for diagnosing the specific cluster in question. Focus your responses to be concise and relevant. -Keep responses concise, within 2000 characters. Provide extended answers only upon request. - -Make sure you fetch Botkube Agent configuration to answer questions about Botkube or channel configuration. -`) - - return c.ModifyAssistant(ctx, id, openai.AssistantRequest{ - Model: openai.GPT4Turbo, - Instructions: &instructions, - Tools: openAITools, - }) -} diff --git a/hack/openai/tools.go b/hack/openai/tools.go deleted file mode 100644 index 0a5d6fd..0000000 --- a/hack/openai/tools.go +++ /dev/null @@ -1,233 +0,0 @@ -package main - -import ( - "github.com/MakeNowJust/heredoc" - "github.com/sashabaranov/go-openai" - "github.com/sashabaranov/go-openai/jsonschema" -) - -var openAITools = []openai.AssistantTool{ - { - Type: openai.AssistantToolType(openai.ToolTypeFunction), - Function: &openai.FunctionDefinition{ - Name: "botkubeGetStartupAgentConfiguration", - Description: heredoc.Doc(` - Retrieve the Botkube Agent configuration in YAML format. This includes various details such as the configured communication platform, - aliases, enabled plugins, and their settings like RBAC. - - Use this tool to answer questions like: - - What sources are configured for this channel? - - Is the Kubernetes plugin enabled? - - What Kubernetes alerts are currently configured on my cluster? - - Avoid using configuration names like 'botkube/kubernetes_6ulLY' in responses unless explicitly requested. - When a user asks about "this channel", prompt them to provide the exact channel name. - - The "loaderValidationWarnings" field lists all the warnings about the configuration. Use it to suggest fixes. - The "incomingRequestPrompt" field defines the communicating platform associated with a prompt. Use this information to address platform-specific questions. - - If the "incomingRequestPrompt" field is not specified, prompt user provide platform name. - - Terms "cloudSlack" and "cloudTeams" refer to the Slack and Teams platforms, respectively.`), - }, - }, - { - Type: openai.AssistantToolType(openai.ToolTypeFunction), - Function: &openai.FunctionDefinition{ - Name: "botkubeGetAgentStatus", - Description: heredoc.Doc(` - Get the current Botkube Agent status in JSON format. - It represents the status of each plugin and communication platform, indicating whether it's enabled, crashing, and if so, with what reason. - If the "enabled" field is not specified, the plugin is disabled. - - Use this tool to answer questions like: - - Which sources are enabled for this channel? - - Is the Kubernetes plugin enabled? - - Is the kubectl plugin disabled? - - What is the status of a specific plugin? - - Why am I not receiving Kubernetes notifications?`), - }, - }, - { - Type: openai.AssistantToolType(openai.ToolTypeFunction), - Function: &openai.FunctionDefinition{ - Name: "kubectlGetResource", - Description: heredoc.Doc(` - Get a Kubernetes resources. If resource_name is specified, returns the resource in a YAML definition. - Useful for debugging and troubleshooting. Examples: - # List all pods in ps output format - kubectl get pods - - # List a single replication controller with specified NAME in ps output format - kubectl get replicationcontroller web - - # List all replication controllers and services together in ps output format - kubectl get rc,services - - # List resource by type and name - kubectl get pods web-pod-13je7`), - - Parameters: jsonschema.Definition{ - Type: jsonschema.Object, - Properties: map[string]jsonschema.Definition{ - "resource_type": { - Type: jsonschema.String, - Description: "Kubernetes resource type, e.g. pod, deployment, replicationcontroller.", - }, - "resource_name": { - Type: jsonschema.String, - Description: "Kubernetes resource name, e.g. botkube-6c6fd8b4d6-f559q", - }, - "namespace": { - Type: jsonschema.String, - Description: "Kubernetes namespace, e.g. kube-system", - }, - "all-namespaces": { - Type: jsonschema.Boolean, - Description: "If present, list the requested resource(s) across all namespaces. Cannot be used together with the namespace property.", - }, - }, - Required: []string{"resource_type"}, - }, - }, - }, - { - Type: openai.AssistantToolType(openai.ToolTypeFunction), - Function: &openai.FunctionDefinition{ - Name: "kubectlGetEvents", - Description: "Returns a table of the most important information about events. You can request events for a namespace, for all namespace, or filtered to only those pertaining to a specified resource.", - Parameters: jsonschema.Definition{ - Type: jsonschema.Object, - Properties: map[string]jsonschema.Definition{ - "namespace": { - Type: jsonschema.String, - Description: "Kubernetes namespace, e.g. kube-system", - }, - "all-namespaces": { - Type: jsonschema.Boolean, - Description: "If present, list the requested object(s) across all namespaces. Cannot be used together with the namespace property.", - }, - "types": { - Type: jsonschema.String, - Description: "Output only events of given types. Accepts comma separated values.", - }, - "for": { - Type: jsonschema.String, - Description: "Filter events to only those pertaining to the specified resource.", - }, - }, - }, - }, - }, - { - Type: openai.AssistantToolType(openai.ToolTypeFunction), - Function: &openai.FunctionDefinition{ - Name: "kubectlDescribeResource", - Description: heredoc.Doc(` - Returns detailed description of the selected resources, - including related resources such as events or controllers. Examples: - # Describe a node - kubectl describe nodes kubernetes-node-emt8.c.myproject.internal - - # Describe a pod - kubectl describe pods nginx`), - Parameters: jsonschema.Definition{ - Type: jsonschema.Object, - Properties: map[string]jsonschema.Definition{ - "resource_type": { - Type: jsonschema.String, - Description: "Kubernetes resource type, e.g. pod, deployment, replicationcontroller.", - }, - "resource_name": { - Type: jsonschema.String, - Description: "Kubernetes resource name, e.g. botkube-6c6fd8b4d6-f559q", - }, - "namespace": { - Type: jsonschema.String, - Description: "Kubernetes namespace, e.g. kube-system", - }, - "all-namespaces": { - Type: jsonschema.Boolean, - Description: "If present, list the requested resource(s) across all namespaces. Cannot be used together with the namespace property.", - }, - }, - Required: []string{"resource_type"}, - }, - }, - }, - { - Type: openai.AssistantToolType(openai.ToolTypeFunction), - Function: &openai.FunctionDefinition{ - Name: "kubectlTopPods", - Description: heredoc.Doc(` - Returns the CPU and memory usage for Pods. Examples: - # Show metrics for all pods in the default namespace - kubectl top pod - # Show metrics for all pods in the given namespace - kubectl top pod --namespace=NAMESPACE - # Show metrics for a given pod and its containers - kubectl top pod POD_NAME --containers`), - Parameters: jsonschema.Definition{ - Type: jsonschema.Object, - Properties: map[string]jsonschema.Definition{ - "namespace": { - Type: jsonschema.String, - Description: "Kubernetes namespace, e.g. kube-system. It can be used only for pods.", - }, - "resource_name": { - Type: jsonschema.String, - Description: "The pod or node name, e.g. botkube-api-server.", - }, - }, - Required: []string{"namespace"}, - }, - }, - }, - { - Type: openai.AssistantToolType(openai.ToolTypeFunction), - Function: &openai.FunctionDefinition{ - Name: "kubectlTopNodes", - Description: heredoc.Doc(` - Returns the CPU and memory usage for Nodes. Examples: - # Show metrics for all nodes - kubectl top node - - # Show metrics for a given node - kubectl top node NODE_NAME`), - Parameters: jsonschema.Definition{ - Type: jsonschema.Object, - Properties: map[string]jsonschema.Definition{ - "resource_name": { - Type: jsonschema.String, - Description: "The pod or node name, e.g. botkube-api-server.", - }, - }, - }, - }, - }, - { - Type: openai.AssistantToolType(openai.ToolTypeFunction), - Function: &openai.FunctionDefinition{ - Name: "kubectlLogs", - Description: "Useful for getting container logs.", - Parameters: jsonschema.Definition{ - Type: jsonschema.Object, - Properties: map[string]jsonschema.Definition{ - "namespace": { - Type: jsonschema.String, - Description: "Kubernetes namespace, e.g. kube-system", - }, - "pod_name": { - Type: jsonschema.String, - Description: "Kubernetes pod name, e.g. botkube-6c6fd8b4d6-f559q", - }, - "container_name": { - Type: jsonschema.String, - Description: "Pod container name, e.g. botkube-api-server.", - }, - }, - Required: []string{"namespace", "pod_name"}, - }, - }, - }, -} diff --git a/internal/source/ai-brain/assistant.go b/internal/source/ai-brain/assistant.go index 5f688c2..49c3f61 100644 --- a/internal/source/ai-brain/assistant.go +++ b/internal/source/ai-brain/assistant.go @@ -7,6 +7,7 @@ import ( "fmt" "net/http" "os" + "strings" "time" "github.com/kubeshop/botkube-cloud-plugins/internal/otelx" @@ -74,6 +75,7 @@ func newAssistant(cfg *Config, log logrus.FieldLogger, out chan source.Event, ku Transport: newAPIKeySecuredTransport(), } config.BaseURL = cfg.OpenAICloudServiceURL + config.AssistantVersion = "v2" return &assistant{ log: log, @@ -175,7 +177,6 @@ func (i *assistant) handleThread(ctx context.Context, p *Payload) (err error) { "threadId": threadID, "prompt": p.Prompt, }) - log.Info("created a new assistant run") run, err := i.openaiClient.CreateRun(ctx, threadID, openai.RunRequest{ AssistantID: i.assistID, Temperature: &temperature, @@ -184,6 +185,9 @@ func (i *assistant) handleThread(ctx context.Context, p *Payload) (err error) { return fmt.Errorf("while creating a thread run: %w", err) } + log = log.WithField("runId", run.ID) + log.Info("created a new assistant run") + toolsRetries := 0 return wait.PollUntilContextCancel(ctx, openAIPollInterval, false, func(ctx context.Context) (bool, error) { run, err = i.openaiClient.RetrieveRun(ctx, run.ThreadID, run.ID) @@ -192,7 +196,7 @@ func (i *assistant) handleThread(ctx context.Context, p *Payload) (err error) { return false, fmt.Errorf("while retrieving assistant thread run: %w", err) } - i.log.WithFields(logrus.Fields{ + log.WithFields(logrus.Fields{ "messageId": p.MessageID, "runStatus": run.Status, }).Debug("retrieved assistant thread run") @@ -284,8 +288,10 @@ func (i *assistant) handleStatusCompleted(ctx context.Context, run openai.Run, p continue } + textValue := i.trimCitationsIfPresent(i.log, c.Text) + i.out <- source.Event{ - Message: msgAIAnswer(run, p, c.Text.Value), + Message: msgAIAnswer(run, p, textValue), } } @@ -339,6 +345,40 @@ func (i *assistant) handleStatusRequiresAction(ctx context.Context, run openai.R return nil } +const fileCitationAnnotation = "file_citation" + +func (i *assistant) trimCitationsIfPresent(log logrus.FieldLogger, in *openai.MessageText) string { + if in == nil { + return "" + } + + if len(in.Annotations) == 0 { + return in.Value + } + + outValue := in.Value + for _, a := range in.Annotations { + annotation, ok := a.(map[string]interface{}) + if !ok { + continue + } + + if annotation["type"] != fileCitationAnnotation { + continue + } + + text, ok := annotation["text"].(string) + if !ok { + continue + } + + log.Debugf("Citation found. Trimming %q...", text) + outValue = strings.Replace(outValue, text, "", 1) + } + + return outValue +} + type apiKeySecuredTransport struct { transport http.RoundTripper } diff --git a/internal/source/ai-brain/assistant_test.go b/internal/source/ai-brain/assistant_test.go new file mode 100644 index 0000000..abf2a9e --- /dev/null +++ b/internal/source/ai-brain/assistant_test.go @@ -0,0 +1,55 @@ +package aibrain + +import ( + "testing" + + "github.com/kubeshop/botkube/pkg/loggerx" + "github.com/sashabaranov/go-openai" + "github.com/stretchr/testify/assert" +) + +func TestTrimCitations(t *testing.T) { + // given + in := &openai.MessageText{ + Value: `Botkube supports a variety of source plugins, which are essentially event sources that can be integrated into Botkube. These plugins allow Botkube to receive events or notifications from different tools and services, which can then be sent to communication channels based on the configured source bindings. Here are some of the source plugins available for Botkube: + +1. **Kubernetes native events**: This has been a part of Botkube since its inception, allowing it to listen for and react to events occurring within a Kubernetes cluster. +2. **Helm**: As an executor plugin, Helm can also be configured to send notifications about Helm chart deployments. +3. **Prometheus**: Planned as a new source plugin, allowing Botkube to receive alerts from Prometheus. +4. **Argo CD**: This plugin enables Botkube to interact with Argo CD, providing notifications and allowing commands to be executed within Botkube. +5. **GitHub Events**: This plugin streams events from selected GitHub repositories to your communication platform via Botkube. +6. **Keptn**: Integrates with Keptn to orchestrate load tests and validate results, sending notifications to communication platforms. + +These plugins enhance Botkube's functionality, making it a versatile tool for monitoring and interacting with various systems directly from your communication platform【4:0†source】.`, + + Annotations: []interface{}{ + map[string]interface{}{ + "end_index": 1345.0, + "file_citation": map[string]interface{}{ + "file_id": "file-Gfa1ahzAvp7UB1hToG3Udzj0", + }, + "start_index": 1333.0, + "text": "【4:0†source】", + "type": "file_citation"}, + }, + } + expected := `Botkube supports a variety of source plugins, which are essentially event sources that can be integrated into Botkube. These plugins allow Botkube to receive events or notifications from different tools and services, which can then be sent to communication channels based on the configured source bindings. Here are some of the source plugins available for Botkube: + +1. **Kubernetes native events**: This has been a part of Botkube since its inception, allowing it to listen for and react to events occurring within a Kubernetes cluster. +2. **Helm**: As an executor plugin, Helm can also be configured to send notifications about Helm chart deployments. +3. **Prometheus**: Planned as a new source plugin, allowing Botkube to receive alerts from Prometheus. +4. **Argo CD**: This plugin enables Botkube to interact with Argo CD, providing notifications and allowing commands to be executed within Botkube. +5. **GitHub Events**: This plugin streams events from selected GitHub repositories to your communication platform via Botkube. +6. **Keptn**: Integrates with Keptn to orchestrate load tests and validate results, sending notifications to communication platforms. + +These plugins enhance Botkube's functionality, making it a versatile tool for monitoring and interacting with various systems directly from your communication platform.` + + a := &assistant{} + + // when + out := a.trimCitationsIfPresent(loggerx.NewNoop(), in) + + // then + + assert.Equal(t, expected, out) +} diff --git a/internal/source/ai-brain/response_test.go b/internal/source/ai-brain/response_test.go index 212795d..e9caf9f 100644 --- a/internal/source/ai-brain/response_test.go +++ b/internal/source/ai-brain/response_test.go @@ -15,7 +15,7 @@ import ( // // To update golden files run: // -// go test ./internal/source/ai-brain/... -run=TestConvertProperlyAIAnswer -update +// go test ./internal/source/ai-brain/... -run=TestConvertProperlyAIAnswer -update func TestConvertProperlyAIAnswer(t *testing.T) { // given md, err := os.ReadFile(filepath.Join("testdata", t.Name(), "aiAnswer.md"))