Weitere ähnliche Inhalte Kürzlich hochgeladen (20) Kubernetes [Jakub Kulhan] (6. sraz, Praha, 31.3.2016)1. commit => #GitHub =>
#CircleCI => #Docker =>
#Kubernetes #AWS cluster
6. sraz přátel Symfony v Praze
31.3.2016
5. fuck it!
🐙
#BitBucket => #Bamboo => SSH upload
WARka => jetty-runner.jar + automatický reload
po uploadu nového WARu (Node.JS skript)
8. fuck it!
🐙
#BitBucket => BB hook => checkout git do
~/commits/<commit> => hook.sh =>
(na stagingu automaticky) swap.sh
14. ❓ Java/PHP/Go/Node/…
❓ Java 7 vs. 8, PHP 5.3 vs. 7.0, …
❓ supervisor/autorestart
❓ rolling deployment
❓ porty
❓ nezávislé na hostingu
15. ❓ Java/PHP/Go/Node/… ✅ Docker
❓ Java 7 vs. 8, PHP 5.3 vs. 7.0, … ✅ Docker
❓ supervisor/autorestart ✅ Kubernetes
❓ rolling deployment ✅ Kubernetes
❓ porty ✅ Kubernetes
❓ nezávislé na providerovi ✅ Kubernetes
32. …a více
• Job (cron scheduler plánovaný na 1.3)
• DaemonSet
• Horizontal Pod Autoscaler
• Secret
• Ingress
34. $ kubectl create -f - <<EOF
> apiVersion: v1
> kind: ReplicationController
> metadata:
> name: billing-prod
> spec:
> replicas: 3
> template:
> metadata:
> labels:
> app: billing
> env: prod
> spec:
> containers:
> - name: billing
> image: docker-registry.liftago.com/billing:latest
> imagePullPolicy: Always
…
35. …
> env:
> - name: SPRING_PROFILES_ACTIVE
> value: prod
> ports:
> - containerPort: 8080
> livenessProbe:
> httpGet:
> path: /health
> port: 8080
> initialDelaySeconds: 60
> timeoutSeconds: 5
> readinessProbe:
> httpGet:
> path: /health
> port: 8080
> initialDelaySeconds: 1
> timeoutSeconds: 1
> imagePullSecrets:
> - name: docker-repository.liftago.com
> EOF
36. $ kubectl create -f <<EOF
> apiVersion: v1
> kind: Service
> metadata:
> name: billing-prod
> labels:
> app: billing
> env: prod
> spec:
> clusterIP: 10.1.0.1
> ports:
> - port: 80
> targetPort: 8080
> protocol: TCP
> selector:
> app: billing
> env: prod
> EOF
37. $ kubectl get po -l app=billing,env=prod
NAME READY STATUS RESTARTS AGE
billing-prod-e3jcm 1/1 Running 0 1m
billing-prod-4sdfb 1/1 Running 0 1m
billing-prod-sd134 1/1 Running 0 1m
$ kubectl get rc -l app=billing,env=prod
NAME DESIRED CURRENT AGE
billing-prod 3 3 1m
$ kubectl get svc -l app=billing,env=prod
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
billing-prod 10.1.0.1 <none> 80/TCP 1m
38. $ kubectl exec -it billing-prod-e3jcm bash
$ cat /etc/hosts
127.0.0.1 billing-prod-e3jcm
…
41. machine:
java:
version: oraclejdk8
environment:
DOCKER_TAG: $(date +%Y-%m-%d).$CIRCLE_BUILD_NUM
services:
- docker
post:
- docker login -e $DOCKER_EMAIL -u $DOCKER_USER -p $DOCKER_PASS $DOCKER_REGISTRY
dependencies:
post:
- sudo wget 'http://storage.googleapis.com/kubernetes-release/release/v1.2.0/bin/linux/amd64/kubectl' -O /usr/local/bin/kubectl
- sudo chmod 755 /usr/local/bin/kubectl
# docker pull suggested by https://discuss.circleci.com/t/caching-docker-image-with-docker-hub/1784
- docker pull $DOCKER_REGISTRY/$CIRCLE_PROJECT_REPONAME:latest || true
test:
…
deployment:
kubernetes:
branch: master
commands:
- docker build -t $DOCKER_REGISTRY/$CIRCLE_PROJECT_REPONAME:$DOCKER_TAG .
- docker push $DOCKER_REGISTRY/$CIRCLE_PROJECT_REPONAME:$DOCKER_TAG
- docker tag -f $DOCKER_REGISTRY/$CIRCLE_PROJECT_REPONAME:$DOCKER_TAG $DOCKER_REGISTRY/$CIRCLE_PROJECT_REPONAME:latest
- docker push $DOCKER_REGISTRY/$CIRCLE_PROJECT_REPONAME:latest
- >
kubectl config set-cluster kubernetes --server=$KUBERNETES_MASTER &&
kubectl config set-credentials circleci --token=$KUBERNETES_TOKEN &&
kubectl config set-context kubernetes --cluster=kubernetes --user=circleci &&
kubectl config use-context kubernetes
- kubectl rolling-update billing-prod --image=$DOCKER_REGISTRY/$CIRCLE_PROJECT_REPONAME:$DOCKER_TAG --update-period=10s