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