Feature/k8s rolling update (#33)

* chore: k8s rolling update deployment

* chore: change param name

* docs: README for k8s rolling update

* docs: fix typo

* chore: add namespace, add loadbalancer

* docs: update doc for k8s deployment and service

* feat: crontab per 20 minutes

* fix: sed on linux
This commit is contained in:
Jay 2019-07-04 10:31:49 +08:00 committed by GitHub
parent 2b0db9f752
commit a13bba6c1e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 101 additions and 0 deletions

View File

@ -14,3 +14,7 @@ Image contains web tool to check routing and guidance result.
It uses MapBox GL JS and apply routing response on top of Mapbox vector tiles.
See details in [osrm-frontend-docker](./osrm-frontend-docker/README.md)
## Kubernetes Deployment
### k8s-rolling-update
Use kubernetes rolling update deployment strategy for timed replace container with new one. Latest traffic will be used during container startup.
See details in [k8s rolling update](./k8s-rolling-update/)

View File

@ -0,0 +1,48 @@
# Kubernetes Rolling Update Deployment
Use kubernetes rolling update deployment strategy for timed replace container with new one. Latest traffic will be used during container startup.
## Usage
```bash
# NOTE: prepare your image and fill into osrm.yaml
$ sed -i "s#TELENAV_OSRM_BACKEND_DOCKER_IMAGE#<your image>#g" ./osrm.yaml
# create deployment
$ kubectl create -f osrm.yaml
deployment.extensions/osrm created
# create loadbalancer
$ kubectl create -f osrm_svc.yaml
service/routing-osrm-service created
# OPTIONAL: checking deployment status, wait READY
$ kubectl get deployments -n routing-osrm
NAME READY UP-TO-DATE AVAILABLE AGE
osrm 0/1 1 0 20s
$ kubectl get pods -n routing-osrm
NAME READY STATUS RESTARTS AGE
osrm-67b55f46c9-tpfgs 0/1 Running 0 22s
# OPTIONAL: check deployment details for troubleshooting
$ kubectl describe deployments -n routing-osrm
...
$ kubectl describe pods -n routing-osrm
...
# OPTIONAL: check container running log for troubleshooting
$ kubectl logs -f --timestamps=true -n routing-osrm osrm-67b55f46c9-tpfgs
...
# start timed rolling update for traffic updating
$ crontab osrm_cron
$ crontab -l
*/30 * * * * export PATH=$HOME/bin:$PATH && kubectl set env --env="LAST_MANUAL_RESTART=$(date -u +\%Y\%m\%dT\%H\%M\%S)" deploy/osrm -n routing-osrm >> ${HOME}/osrm_cron.log 2>&1
# OPTIONAL: if want to stop
$ crontab -r
$ kubectl delete deployment osrm -n routing-osrm
deployment.extensions "osrm" deleted
$ kubectl delete routing-osrm-service -n routing-osrm
service "routing-osrm-service" deleted
```

View File

@ -0,0 +1,33 @@
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: osrm
namespace: routing-osrm
spec:
replicas: 1
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
template:
metadata:
labels:
app: routing
spec:
nodeSelector:
routing-osrm/role: routing-osrm
containers:
- name: osrm-backend
image: TELENAV_OSRM_BACKEND_DOCKER_IMAGE
imagePullPolicy: IfNotPresent
args: ["routed_startup"]
ports:
- containerPort: 5000
protocol: TCP
readinessProbe:
tcpSocket:
port: 5000
initialDelaySeconds: 10
periodSeconds: 5
failureThreshold: 1000

View File

@ -0,0 +1 @@
*/20 * * * * export PATH=$HOME/bin:$PATH && kubectl set env --env="LAST_MANUAL_RESTART=$(date -u +\%Y\%m\%dT\%H\%M\%S)" deploy/osrm -n routing-osrm >> ${HOME}/osrm_cron.log 2>&1

View File

@ -0,0 +1,15 @@
apiVersion: v1
kind: Service
metadata:
name: routing-osrm-service
namespace: routing-osrm
annotations:
service.beta.kubernetes.io/aws-load-balancer-internal: 0.0.0.0/0
spec:
selector:
app: routing
ports:
- port: 5001
protocol: TCP
targetPort: 5000
type: LoadBalancer