Helmize Slackbot

Page content

docker로 실행할 대는 환경 변수 파일에 필요한 token정보 등을 적어서 넘겼는데

docker run -d -p 3010:3010 --env-file=slackbot.env my-slackbot

helm으로 할 때는 configmap을 사용하거나, value의 env를 사용하거나 등등.

$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "infracloudio" chart repository
...Successfully got an update from the "myhelmrepo" chart repository
Update Complete. ⎈Happy Helming!⎈

$ helm search repo slackbot
NAME               	CHART VERSION	APP VERSION	DESCRIPTION                
myhelmrepo/slackbot	0.1.0        	1.16.0     	A Helm chart for Kubernetes
$ helm install -f ../../slackbot-value.yaml --version 0.1.0 slackbot myhelmrepo/slackbot
NAME: slackbot
LAST DEPLOYED: Thu Sep 10 09:47:26 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
  export NODE_PORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].nodePort}" services slackbot)
  export NODE_IP=$(kubectl get nodes --namespace default -o jsonpath="{.items[0].status.addresses[0].address}")
  echo http://$NODE_IP:$NODE_PORT

slackbot-value.yaml파일의 환경 변수에 필요한 token 정보들을 기술

$ cat ../../slackbot-value.yaml 

env:
  slack_api_token: XXX
  slack_events_token: YYY
  slack_signing_secret: ZZZ
  verification_token: AAA
  tz: Asia/Seoul

잠시 후 띠릭띠릭 하고 slack에서 notification이 올라오는데 흠.. 결과를 에러…

$ kubectl get pods
NAME                             READY   STATUS    RESTARTS   AGE
podcast-nginx-659bcb6485-vc6lb   1/1     Running   2          69d
slackbot-86bd64f8bf-84b7c        0/1     Running   3          3m26s
sosa0sa-nginx-87fc9949c-462s6    1/1     Running   1          5d10h

$ kubectl get svc
NAME            TYPE        CLUSTER-IP      EXTERNAL-IP     PORT(S)          AGE
kubernetes      ClusterIP   10.96.0.1       <none>          443/TCP          367d
podcast-nginx   NodePort    10.102.38.142   192.168.1.100   8099:32529/TCP   69d
slackbot        NodePort    10.96.167.110   <none>          3010:31144/TCP   3m32s
sosa0sa-nginx   NodePort    10.99.91.25     192.168.1.100   80:32492/TCP     22d

흠. Pod는 정상적으로 deploy가 되었는데 뭔가 좀 이상하네…. 일단 external IP가 없고. 이러면 외부에서 통신이 안될텐데….. 혹시나 하고 slack에서 talk을 걸어보지만 무심한 당신은 답변이 없네.

저건 service 설정이 잘못된 건데.

Helm chart의 template/service.yaml 파일에 NodePort를 사용하도록 변경하고 Helm chart 를 다시 업로드한 후 다시 시도 [[Helm chart 버전 변경]]

$ helm install -f slackbot-value.yaml --version 0.2.0 slackbot myhelmrepo/slackbot
NAME: slackbot
LAST DEPLOYED: Thu Sep 10 10:28:48 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
  export NODE_PORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].nodePort}" services slackbot)
  export NODE_IP=$(kubectl get nodes --namespace default -o jsonpath="{.items[0].status.addresses[0].address}")
  echo http://$NODE_IP:$NODE_PORT

$ kubectl get svc
NAME            TYPE        CLUSTER-IP      EXTERNAL-IP     PORT(S)          AGE
kubernetes      ClusterIP   10.96.0.1       <none>          443/TCP          367d
podcast-nginx   NodePort    10.102.38.142   192.168.1.100   8099:32529/TCP   69d
slackbot        NodePort    10.103.61.67    192.168.1.100   3010:31407/TCP   25s
sosa0sa-nginx   NodePort    10.99.91.25     192.168.1.100   80:32492/TCP     22d

이전과 달리 NodePort 관련 에러는 없어졌다. 여전히 Readiness와 Liveness 에러는 있지만.

$ kubectl get pods
NAME                             READY   STATUS    RESTARTS   AGE
podcast-nginx-659bcb6485-vc6lb   1/1     Running   2          69d
slackbot-86bd64f8bf-jhckf        0/1     Running   3          3m6s
sosa0sa-nginx-87fc9949c-462s6    1/1     Running   1          5d10h

이전에 K8s에 올린 것들은 모두 nginx나 ghost 같이 기본적인 처리(?)를 해줘서 저런 문제가 없었나 보다. Flask에도 readiness, liveness를 추가해야겠다. [[Readiness and Liveness in flask]]

Liveness 추가

[[Readiness and Liveness in flask]] 후에 드디어 정상적으로 flask 기반의 slackbot이 정상적으로 동작한다.

$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "infracloudio" chart repository
...Successfully got an update from the "myhelmrepo" chart repository
Update Complete. ⎈Happy Helming!⎈

@mini1:~/work/helm/helm-chart$ helm search repo slackbot
NAME               	CHART VERSION	APP VERSION	DESCRIPTION                
myhelmrepo/slackbot	0.3.0        	1.16.0     	A Helm chart for Kubernetes