민한의 블로그

Botkube를 사용하여 슬랙에서도 kubenetes 명령어를 사용해보자! 본문

인프라/k8s

Botkube를 사용하여 슬랙에서도 kubenetes 명령어를 사용해보자!

minhan2 2023. 2. 27. 20:58
728x90
반응형

https://docs.botkube.io/installation/slack/

우리 회사는 쿠버네티스를 잘 다룰수 있는 사람이 없기 때문에, 배포, 운영관련 문제가 생기면 나에게 연락이 오게 되어있다.
아니 그냥 서버가 안돌아가거나 배포가 안되면 무조껀 연락이 온다.

그렇다고 휴가를 안쓸수도 없는 노릇이고, 휴가때마다 노트북을 들고 다닐수도 없는 노릇이다.

사실 환경 구축을 잘 해놓았다면, 평상시에는 왠만한 일로는 문제가 생길리가 없다.
HPA와 CA로 가용성에 문제가 없고, CICD도 문제 없이 작동하며, 빌드할때 문제가 생겨도 배포되지 않으므로..
그리고 무슨 큰 배포가 있을때 휴가를 나갈리가 없지않는가.

그렇기에 자잘한 문제들은 내가 로그를 확인해주고, 문제 해결을 요청하면 된다.
하드웨어적인 문제는 Grafana, Prometheus
웹상의 작동 문제는 EFK, Jaeger, Kiali
배포 문제는 Argocd, Github Actions
솔직히 이정도면 뭐든 안될건 없는데,, 사람의 욕심은 끝이 없었기에..
직접적으로 Kubectl CLI를 사용하고 싶다고 생각만 했었는데

Chatops라는 것으로 슬랙으로 직접 kubectl명령어를 사용할수 있다고 하여서 사용해보았다.

설치방법만 작성하고자 한다.
솔직히 설명이 잘되어 있어서 도큐먼트를 보면 되긴 하지만.. 번역해서 읽는것도 귀찮은 나같은 사람을 위하여 작성한다.

슬랙 앱을 생성한다

  1. 슬랙을 로그인 하고 아래의 링크로 들어간다.
    https://api.slack.com/apps
  2. Create New App 을 클릭후 From an app manifest를 선택한다.

image

  1. application을 설치하고 싶은 workspace를 선택하고 Next한다.
    image
  2. YAML 탭을 선택하고 다음 매니페스트 중 하나를 복사하여 붙여넣은 다음 Next를 클릭하고, Create를 클릭한다.
    아래는 public 채널의 예시이며, private 또는 public과 private 채널은 다른 yaml파일을 사용하여아한다.
    권한관련하여 oauth_config: scopes: bot: 부분이 바뀌는것 뿐이다.
display_information:
  name: Botkube
  description: Botkube
  background_color: "#a653a6"
features:
  bot_user:
    display_name: Botkube
    always_online: false
oauth_config:
  scopes:
    bot:
      - channels: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

슬랙 Workspace에 Botkube 설치

applicateion이 만들어지면 applicateion 세부 정보 페이지로 리디렉션됩니다.
Basic Information의 Install your app의 Install to Workspace를 선택한 후 허용을 클릭하여 설치를 완료합니다.

image

Bot Token 얻기

왼쪽 사이드 메뉴에서 OAuth & Permissions 섹션을 선택합니다.
이 페이지에서 다음으로 시작하는 Bot Token을 복사할 수 있습니다.

image

해당 값을 터미널창에 export 해줍니다.

export SLACK_API_BOT_TOKEN="xoxb-~~~~~~~~"

App-Level 토큰 생성 및 가져오기

소켓 모드가 있는 Slack 앱에는 websocket 연결을 위한 App-Level 토큰이 필요합니다.

App-Level 토큰을 생성하려면 다음 단계를 따르세요.
왼쪽 사이드 메뉴에서 Basic Information을 선택 하고 App-Level 토큰 섹션까지 아래로 스크롤합니다.

image

Generate Token and Scopes 버튼을 클릭합니다.
토큰 이름을 입력 하고 connections:write 범위를 선택한 다음 생성을 클릭하세요.

image

생성을 누르면 아래와 같이 Token값이 나옵니다.

image

해당 App-Level Token도 터미널에서 export 해줘야합니다.

export SLACK_API_APP_TOKEN="xapp-1~~~~~~~~"

이제까지
SLACK_API_APP_TOKENSLACK_API_APP_TOKEN 값을 환경변수로 저장하였습니다.

image

슬랙 채널에 Botkube 사용자 추가

이제 kubenetes에 botkube를 helm으로 설치해보겠습니다.

helm repo를 추가하고 업데이트 해줍니다.

helm repo add botkube https://charts.botkube.io
helm repo update

우리의 클러스터에 helm install로 botkube를 배포해줄건데요.

여기에 들어가는 값이 6개입니다.
그중 두개는 위에서 저희가 export해줬습니다.

  • SLACK_API_BOT_TOKEN은 Slack 작업 공간에 Botkube 앱을 설치한 후 받은 토큰입니다.
  • SLACK_API_APP_TOKEN은 Botkube 앱을 Slack 작업 공간에 설치하고 App-Level Token 섹션에서 생성한 후 받은 토큰입니다.
  • 4가지에 대해서 더 export해줘야 합니다.
  • SLACK_CHANNEL_NAME 은 @Botkube가 추가된 채널 이름입니다.
  • CLUSTER_NAME 은 수신 메시지에 설정된 클러스터 이름입니다.
  • kubectl클러스터에서 Botkube의 명령 실행을 허용하려면 ALLOW_KUBECTL을 true로 설정합니다.
  • helm클러스터에서 Botkube의 명령 실행을 허용하려면 ALLOW_HELM을 true로 설정합니다 .

CLUSTER_NAME은

kubectl config get-contexts

명령어로 본인이 사용하고있는 cluster name을 찾아서 작성하시면 됩니다.
나머지는 본인이 사용할 슬랙 채널과, kubectl, helm에 관한 허용을 작성합니다.

아래의 export값들은 모두 예시입니다.

image

export SLACK_API_BOT_TOKEN="xoxb-~~~~~~~~"
export SLACK_API_APP_TOKEN="xapp-1~~~~~~~~"
export CLUSTER_NAME=dev
export ALLOW_KUBECTL=true
export ALLOW_HELM=true
export SLACK_CHANNEL_NAME=bot-kube

helm install --version v0.18.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} \
--set 'executors.helm.botkube/helm.enabled'=${ALLOW_HELM} \
botkube/botkube

이제 설치가 완료 되었습니다.
해당 워크스페이스의 채널로 들어간후,

image


봇을 추가해서 사용하면 됩니다.

봇을 추가하면 명령어나 사용방법을 알려주니 확인하시고 사용하시면 됩니다.

사용하실때는 @ 로 bot을 태그해서 원하시는 명령어를 입력하여 사용하시면 됩니다.

image

이제 슬랙앱으로 컴퓨터와 핸드폰 상관없이 kubectl이 가능해졌습니다! 행복!

728x90
반응형
Comments