├── README.md ├── RESOURCE.TXT ├── SetupGuide.pdf ├── canary.yaml ├── cm-vars.yaml ├── countdown ├── default-storageclass.yaml ├── deployment.yaml ├── docker-compose.yml ├── google.yaml ├── history-27sep24.txt ├── httpbin.yaml ├── istio-canary.yaml ├── jaeger.yaml ├── kube-setup.sh ├── kustomization.yaml ├── lesson13lab ├── default-storageclass 2.yaml ├── default-storageclass.yaml ├── kustomization 2.yaml ├── kustomization.yaml ├── mysql-deployment 2.yaml ├── mysql-deployment.yaml ├── wordpress-deployment 2.yaml └── wordpress-deployment.yaml ├── lesson6lab ├── default-storageclass.yaml ├── kustomization.yaml ├── mysql-deployment.yaml └── wordpress-deployment.yaml ├── littlebird-gateway.yaml ├── may24.txt ├── minikube-docker-setup 3.sh ├── minikube-docker-setup.sh ├── multicontainer.yaml ├── myapp-test ├── TODO-APR20.txt ├── destination-rule-webshop.yaml ├── version-one-cm.yaml ├── version-three-cm.yaml ├── version-two-cm.yaml ├── version1-deploy.yaml ├── version2-deploy.yaml ├── version3-deploy.yaml ├── virtual-service-initial.yaml ├── virtual-service-webshop-80-20.yaml ├── webshop-gateway.yaml └── webshop-svc.yaml ├── mydb.yaml ├── nfs-pv-pod.yaml ├── nfs-pv.yaml ├── nfs-pvc.yaml ├── nginx-cm.yaml ├── nginx-custom-config.conf ├── nginxsvc-ingress-v1.yaml ├── nginxsvc-ingress.yaml ├── pullratelimitpatch 2.sh ├── pullratelimitpatch.sh ├── pv-pod.yaml ├── pv-pvc-pod.yaml ├── pv.yaml ├── pvc.yaml ├── pvcpod.yaml ├── pvctest.yaml ├── redis-deploy.yaml ├── service.yaml ├── setup-container.sh ├── setup-docker.sh ├── setup-kubetools-ubuntu.sh ├── setup-kubetools.sh ├── setup_istio_vars.sh ├── statefuldemo.yaml ├── statefulpv.yaml └── variables /README.md: -------------------------------------------------------------------------------- 1 | This Git repository contains supporting files for my "Building Microservices with Containers, Kubernetes and Istio" video course. See https://sandervanvugt.com for more details. 2 | 3 | The files are also used in the live class I'm teaching at https://learning.oreilly.com. 4 | 5 | SETUP INSTRUCTIONS 6 | Run minikube-docker-setup.sh as the recommended installation method for class. 7 | 8 | It requires an installation of Ubuntu with 4 GB or more RAM and 2 vCPUs 9 | -------------------------------------------------------------------------------- /RESOURCE.TXT: -------------------------------------------------------------------------------- 1 | # related recorded courses 2 | Getting started with Kubernetes 3/rd edition: https://learning.oreilly.com/course/getting-started-with/9780138057626/ 3 | KCNA: https://learning.oreilly.com/course/kubernetes-and-cloud/9780137993413/ 4 | CKAD 3/rd edition: https://learning.oreilly.com/course/certified-kubernetes-application/9780138086558/ 5 | CKA 3/rd edition: https://learning.oreilly.com/course/certified-kubernetes-administrator/9780138103804/ 6 | Managing Microservices with kubernetes and Istio: https://learning.oreilly.com/course/building-and-managing/9780137649686/ 7 | 8 | # related labs 9 | CKAD labs: https://learning.oreilly.com/playlists/ea6ea0fc-d8e2-422c-94dd-a0a8f608d224/ 10 | CKA lab: https://learning.oreilly.com/playlists/d6e3fe86-067c-4dc7-a36d-698802d0bdee/ 11 | 12 | # related live training 13 | CKA Crash Course: https://learning.oreilly.com/live-events/certified-kubernetes-administrator-cka-crash-course/0636920315766/ 14 | Building Microservices with Containers, Kubernetes and Istio: https://learning.oreilly.com/live-events/building-microservices-with-containers-kubernetes-and-istio/0636920408468/0636920097237/ 15 | Getting Started with OpenShift: https://learning.oreilly.com/live-events/getting-started-with-openshift/0636920244301/0636920097830/ 16 | -------------------------------------------------------------------------------- /SetupGuide.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sandervanvugt/microservices/5b0205e5b8e71ce1c35e0a3c2ac17c2df6fbe03a/SetupGuide.pdf -------------------------------------------------------------------------------- /canary.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: new-nginx 7 | type: canary 8 | name: new-nginx 9 | spec: 10 | replicas: 1 11 | selector: 12 | matchLabels: 13 | app: new-nginx 14 | strategy: {} 15 | template: 16 | metadata: 17 | creationTimestamp: null 18 | labels: 19 | app: new-nginx 20 | type: canary 21 | spec: 22 | containers: 23 | - image: nginx:latest 24 | name: nginx 25 | resources: {} 26 | volumeMounts: 27 | - name: configfile 28 | mountPath: /usr/share/nginx/html/ 29 | volumes: 30 | - name: configfile 31 | configMap: 32 | name: canary 33 | status: {} 34 | -------------------------------------------------------------------------------- /cm-vars.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: cm-vars 5 | spec: 6 | containers: 7 | - name: test1 8 | image: cirros 9 | command: ["/bin/sh", "-c", "env"] 10 | envFrom: 11 | - configMapRef: 12 | name: variables 13 | -------------------------------------------------------------------------------- /countdown: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | COUNTER=$1 4 | COUNTER=$(( COUNTER * 60 )) 5 | 6 | while true 7 | do 8 | echo $COUNTER seconds remaining in break 9 | COUNTER=$(( COUNTER - 1 )) 10 | sleep 1 11 | done 12 | -------------------------------------------------------------------------------- /default-storageclass.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: mysql-demo-claim 5 | labels: 6 | app: demo 7 | spec: 8 | accessModes: 9 | - ReadWriteOnce 10 | resources: 11 | requests: 12 | storage: 20Gi 13 | --- 14 | apiVersion: apps/v1 15 | kind: Deployment 16 | metadata: 17 | name: demo-mysql 18 | labels: 19 | app: demo 20 | spec: 21 | selector: 22 | matchLabels: 23 | app: demo 24 | tier: mysql 25 | strategy: 26 | type: Recreate 27 | template: 28 | metadata: 29 | labels: 30 | app: demo 31 | tier: mysql 32 | spec: 33 | containers: 34 | - image: mysql:5.6 35 | name: mysql 36 | env: 37 | - name: MYSQL_ROOT_PASSWORD 38 | value: password 39 | ports: 40 | - containerPort: 3306 41 | name: mysql 42 | volumeMounts: 43 | - name: mysql-persistent-storage 44 | mountPath: /var/lib/mysql 45 | volumes: 46 | - name: mysql-persistent-storage 47 | persistentVolumeClaim: 48 | claimName: mysql-demo-claim 49 | 50 | -------------------------------------------------------------------------------- /deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | annotations: 5 | deployment.kubernetes.io/revision: "1" 6 | creationTimestamp: "2019-09-20T14:54:12Z" 7 | generation: 1 8 | labels: 9 | k8s-app: nginx-friday20 10 | name: nginx-friday20 11 | namespace: default 12 | resourceVersion: "24766" 13 | selfLink: /apis/apps/v1/namespaces/default/deployments/nginx-friday20 14 | uid: 4c4e3217-0fcf-4365-987c-10d089a09c1e 15 | spec: 16 | progressDeadlineSeconds: 600 17 | replicas: 3 18 | revisionHistoryLimit: 10 19 | selector: 20 | matchLabels: 21 | k8s-app: nginx-friday20 22 | strategy: 23 | rollingUpdate: 24 | maxSurge: 25% 25 | maxUnavailable: 25% 26 | type: RollingUpdate 27 | template: 28 | metadata: 29 | creationTimestamp: null 30 | labels: 31 | k8s-app: nginx-friday20 32 | name: nginx-friday20 33 | spec: 34 | containers: 35 | - image: nginx 36 | imagePullPolicy: Always 37 | name: nginx-friday20 38 | resources: {} 39 | securityContext: 40 | privileged: false 41 | terminationMessagePath: /dev/termination-log 42 | terminationMessagePolicy: File 43 | dnsPolicy: ClusterFirst 44 | restartPolicy: Always 45 | schedulerName: default-scheduler 46 | securityContext: {} 47 | terminationGracePeriodSeconds: 30 48 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.3' 2 | 3 | services: 4 | db: 5 | image: mysql:5.7 6 | volumes: 7 | - db_data:/var/lib/mysql 8 | restart: always 9 | environment: 10 | MYSQL_ROOT_PASSWORD: somewordpress 11 | MYSQL_DATABASE: wordpress 12 | MYSQL_USER: wordpress 13 | MYSQL_PASSWORD: wordpress 14 | 15 | wordpress: 16 | depends_on: 17 | - db 18 | image: wordpress:latest 19 | ports: 20 | - "8000:80" 21 | restart: always 22 | environment: 23 | WORDPRESS_DB_HOST: db:3306 24 | WORDPRESS_DB_USER: wordpress 25 | WORDPRESS_DB_PASSWORD: wordpress 26 | WORDPRESS_DB_NAME: wordpress 27 | volumes: 28 | db_data: {} 29 | -------------------------------------------------------------------------------- /google.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.istio.io/v1alpha3 2 | kind: ServiceEntry 3 | metadata: 4 | name: google 5 | spec: 6 | hosts: 7 | - www.google.com 8 | ports: 9 | - number: 443 10 | name: https 11 | protocol: HTTPS 12 | resolution: DNS 13 | location: MESH_EXTERNAL 14 | -------------------------------------------------------------------------------- /history-27sep24.txt: -------------------------------------------------------------------------------- 1 | 1 sudo apt install ubuntu-desktop 2 | 2 sudo systemctl get-default 3 | 3 sudo systemctl disable pd-mapper.service 4 | 4 sudo systemctl disable systemd-networkd-wait-online 5 | 5 sudo apt update -y 6 | 6 ip a 7 | 7 ping nu.nl 8 | 8 sudo apt update 9 | 9 sudo apt upgrade 10 | 10 sudo dpkg --configure -a 11 | 11 sudo reboot 12 | 12 sudo -i 13 | 13 sudo poweroff 14 | 14 git clone https://github.com/sandervanvugt/microservices 15 | 15 cd microservices/ 16 | 16 ls 17 | 17 ./minikube-docker-setup.sh 18 | 18 minikube start 19 | 19 minikube delete 20 | 20 free -m 21 | 21 sudo poweroff 22 | 22 ls 23 | 23 history 24 | 24 cd microservices/ 25 | 25 ls 26 | 26 cd .. 27 | 27 git clone https://github.com/sandervanvugt/gitops 28 | 28 cd gitops/ 29 | 29 ls 30 | 30 cd dockerfiledemo/ 31 | 31 ls 32 | 32 vim Dockerfile 33 | 33 docker build -t docker.io/sandervanvugt/nmapapp:1.0 . 34 | 34 docker images 35 | 35 cd 36 | 36 sudo apt update 37 | 37 sudo apt install docker-compose 38 | 38 cd microservices/ 39 | 39 ls 40 | 40 vim docker-compose.yml 41 | 41 docker-compose up 42 | 42 minikube start 43 | 43 minikube stop 44 | 44 minikube delete 45 | 45 minikube start --help 46 | 46 minikube start --memory=6g --cni=calico 47 | 47 kubectl get all 48 | 48 source <(kubectl completion all) 49 | 49 source <(kubectl completion bash) 50 | 50 kubectl create deploy testapp --image=nginx --replicas=3 51 | 51 kubectl expose deploy testapp --port=80 52 | 52 kubectl get all 53 | 53 curl 10.103.189.7 54 | 54 kubectl edit svc testapp 55 | 55 kubectl get all 56 | 56 curl 192.168.49.2:31954 57 | 57 history 58 | 58 cd microservices/ 59 | 59 find . -name kustomi* 60 | 60 cat deployment.yaml 61 | 61 cat service.yaml 62 | 62 cat kustomization.yaml 63 | 63 kubectl apply -k . 64 | 64 kubectl get all 65 | 65 kubectl delete -k . 66 | 66 history 67 | 67 kubectl get storageclass 68 | 68 cd lesson6lab/ 69 | 69 ls 70 | 70 cat default-storageclass.yaml 71 | 71 ls 72 | 72 vim wordpress-deployment.yaml 73 | 73 vim kustomization.yaml 74 | 74 kubectl apply -k . 75 | 75 kubectl get secrets 76 | 76 kubectl get pvc 77 | 77 kubectl get svc 78 | 78 minikube service wordpress --url 79 | 79 kubectl get all 80 | 80 kubectl describe pod wordpress-mysql-6fd4468cd6-6t44r 81 | 81 kubectl delete -k . 82 | 82 ls 83 | 83 vim mysql-deployment.yaml 84 | 84 kubectl apply -k . 85 | 85 kubectl get all 86 | 86 kubectl delete -k . 87 | 87 vim mysql-deployment.yaml 88 | 88 ls 89 | 89 vim mysql-deployment.yaml 90 | 90 cd .. 91 | 91 kubectl get all 92 | 92 kubectl delete all 93 | 93 kubectl delete all -A 94 | 94 kubectl delete all all 95 | 95 kubectl delete deployments.apps testapp 96 | 96 kubectl delete svc testapp 97 | 97 cd 98 | 98 curl -L https://istio.io/downloadIstio | sh - 99 | 99 cd istio-1.23.2/ 100 | 100 ls 101 | 101 sudo cp bin/istioctl /usr/bin/ 102 | 102 istioctl install --set profile=demo -y 103 | 103 kubectl get ns 104 | 104 kubectl get all -n istio-system 105 | 105 kubectl label ns default istio-injection=enabled 106 | 106 kubectl run test --image=nginx 107 | 107 kubectl get pods 108 | 108 kubectl get crds 109 | 109 kubectl get crds | grep istio 110 | 110 kubectl delete pod test 111 | 111 kubectl get all -n istio-system 112 | 112 ../microservices/countdown 12 113 | 113 kubectl get svc -n istio-system 114 | 114 kubectl edit -n istio-system svc istio-ingressgateway 115 | 115 cd ../microservices/ 116 | 116 cd myapp-test/ 117 | 117 ls 118 | 118 cat version-three-cm.yaml 119 | 119 vim version2-deploy.yaml 120 | 120 vim webshop-svc.yaml 121 | 121 kubectl apply -f version-one-cm.yaml 122 | 122 kubectl apply -f version-two-cm.yaml 123 | 123 kubectl apply -f version-three-cm.yaml 124 | 124 kubectl apply -f version1-deploy.yaml 125 | 125 kubectl apply -f version2-deploy.yaml 126 | 126 kubectl apply -f version3-deploy.yaml 127 | 127 kubectl get pods 128 | 128 kubectl apply -f webshop-svc.yaml 129 | 129 kubectl get svc 130 | 130 kubectl describe svc webshop 131 | 131 curl 192.168.49.2:32000 132 | 132 kubectl get all -n istio-system 133 | 133 cd .. 134 | 134 vim setup_istio_vars.sh 135 | 135 echo $GATEWAY_URL || source setup_istio_vars.sh 136 | 136 source setup_istio_vars.sh 137 | 137 echo $GATEWAY_URL 138 | 138 cd myapp-test/ 139 | 139 vim webshop-gateway.yaml 140 | 140 kubectl apply -f webshop-gateway.yaml 141 | 141 vim virtual-service-initial.yaml 142 | 142 kubectl apply -f virtual-service-initial.yaml 143 | 143 curl $GATEWAY_URL -H "Hosst: webshop.svc.default.cluster.local" 144 | 144 curl $GATEWAY_URL -H "Host: webshop.svc.default.cluster.local" 145 | 145 istioctl proxy-config routes deploy/istio-ingressgateway.istio-system 146 | 146 istioctl proxy-config listeners deploy/istio-ingressgateway.istio-system 147 | 147 vim virtual-service-webshop-80-20.yaml 148 | 148 kubectl apply -f virtual-service-webshop-80-20.yaml 149 | 149 kubectl apply -f destination-rule-webshop.yaml 150 | 150 vim destination-rule-webshop.yaml 151 | 151 curl $GATEWAY_URL -H "Host: webshop.svc.default.cluster.local" 152 | 152 cd ../.. 153 | 153 cd istio-1.23.2/ 154 | 154 ls 155 | 155 ls samples/ 156 | 156 ls samples/addons/ 157 | 157 kubectl apply -f samples/addons/ 158 | 158 kubectl rollout status deployment kiali -n istio-system 159 | 159 kubectl get all -n istio-system 160 | 160 istioctl dashboard kiali 161 | 161 bg 162 | 162 for i in $(seq 1 100); do curl -s -o /dev/null http://$GATEWAY_URL -H "Host: webshop.svc.default.cluster.local"; done 163 | 163 cd 164 | 164 history > /tmp/history-27sep24.txt 165 | -------------------------------------------------------------------------------- /httpbin.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.istio.io/v1alpha3 2 | kind: ServiceEntry 3 | metadata: 4 | name: httpbin-ext 5 | spec: 6 | hosts: 7 | - httpbin.org 8 | ports: 9 | - number: 80 10 | name: http 11 | protocol: HTTP 12 | resolution: DNS 13 | location: MESH_EXTERNAL 14 | -------------------------------------------------------------------------------- /istio-canary.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: apps/v1 3 | kind: Deployment 4 | metadata: 5 | creationTimestamp: null 6 | labels: 7 | type: canary 8 | app: littlebird 9 | version: v1 10 | name: old-littlebird 11 | spec: 12 | replicas: 3 13 | selector: 14 | matchLabels: 15 | app: littlebird 16 | strategy: {} 17 | template: 18 | metadata: 19 | creationTimestamp: null 20 | labels: 21 | app: littlebird 22 | type: canary 23 | version: v1 24 | spec: 25 | containers: 26 | - image: nginx:1.14 27 | name: nginx 28 | resources: {} 29 | status: {} 30 | 31 | --- 32 | apiVersion: apps/v1 33 | kind: Deployment 34 | metadata: 35 | creationTimestamp: null 36 | labels: 37 | app: littlebird 38 | type: canary 39 | version: v2 40 | name: new-littlebird 41 | spec: 42 | replicas: 1 43 | selector: 44 | matchLabels: 45 | app: littlebird 46 | strategy: {} 47 | template: 48 | metadata: 49 | creationTimestamp: null 50 | labels: 51 | app: littlebird 52 | type: canary 53 | version: v2 54 | spec: 55 | containers: 56 | - image: nginx:latest 57 | name: nginx 58 | resources: {} 59 | volumeMounts: 60 | - name: configfile 61 | mountPath: /usr/share/nginx/html/ 62 | volumes: 63 | - name: configfile 64 | configMap: 65 | name: canary 66 | status: {} 67 | 68 | --- 69 | apiVersion: v1 70 | kind: Service 71 | metadata: 72 | creationTimestamp: null 73 | labels: 74 | app: littlebird 75 | type: canary 76 | name: littlebird 77 | spec: 78 | ports: 79 | - port: 9080 80 | name: http 81 | protocol: TCP 82 | targetPort: 80 83 | selector: 84 | type: canary 85 | status: 86 | loadBalancer: {} 87 | 88 | --- 89 | apiVersion: v1 90 | data: 91 | index.html: | 92 | 93 | 94 |
95 |Help the birds through winter!
108 | 109 | 110 | kind: ConfigMap 111 | metadata: 112 | creationTimestamp: null 113 | name: canary 114 | -------------------------------------------------------------------------------- /jaeger.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | labels: 6 | app: jaeger 7 | jager-infra: jaeger-service 8 | name: jaeger 9 | namespace: istio-system 10 | spec: 11 | ports: 12 | - name: query-http 13 | protocol: TCP 14 | port: 16686 15 | targetPort: 16686 16 | nodePort: 32686 17 | selector: 18 | app: jaeger 19 | type: NodePort 20 | -------------------------------------------------------------------------------- /kube-setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # verified on Fedora 31, 33, 34 and Ubuntu LTS 20.04 4 | 5 | echo this script is no longer supported 6 | echo use minikube-setup-docker.sh to install minikube on top of recent Ubuntu workstation 7 | echo if you want to use this script anyway, edit it to remove lines 4-9 8 | exit 9 | 10 | echo this script works on Fedora 31, 33, 34 and Ubuntu 20.04 11 | echo it does NOT currently work on Fedora 32 12 | echo it requires the machine where you run it to have 6GB of RAM or more 13 | echo press Enter to continue 14 | read 15 | 16 | ########## 17 | echo ######################################## 18 | echo WARNING 19 | echo ######################################## 20 | echo this script may give problems in VMware / MacOS environments 21 | echo if it does, use minikube-docker-setup.sh on Ubuntu 20.04 LTS (only distro tested so far) 22 | echo 23 | echo press Enter to continue 24 | read 25 | 26 | # setting MYOS variable 27 | MYOS=$(hostnamectl | awk '/Operating/ { print $3 }') 28 | OSVERSION=$(hostnamectl | awk '/Operating/ { print $4 }') 29 | 30 | egrep '^flags.*(vmx|svm)' /proc/cpuinfo || (echo enable CPU virtualization support and try again && exit 9) 31 | 32 | # debug MYOS variable 33 | echo MYOS is set to $MYOS 34 | 35 | #### Fedora config 36 | if [ $MYOS = "Fedora" ] 37 | then 38 | if [ $OSVERSION = 32 ] 39 | then 40 | echo Fedora 32 is not currently supported 41 | exit 9 42 | fi 43 | 44 | sudo dnf clean all 45 | sudo dnf -y upgrade 46 | 47 | # install KVM software 48 | sudo dnf install @virtualization -y 49 | sudo systemctl enable --now libvirtd 50 | sudo usermod -aG libvirt `id -un` 51 | fi 52 | 53 | ### Ubuntu config 54 | if [ $MYOS = "Ubuntu" ] 55 | then 56 | sudo apt-get update -y 57 | sudo apt-get install -y apt-transport-https curl 58 | sudo apt-get upgrade -y 59 | sudo apt-get install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils 60 | 61 | sudo adduser `id -un` libvirt 62 | sudo adduser `id -un` kvm 63 | fi 64 | 65 | # install kubectl 66 | curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl 67 | chmod +x ./kubectl 68 | sudo mv ./kubectl /usr/local/bin/kubectl 69 | 70 | # install minikube 71 | echo downloading minikube, check version 72 | curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 73 | 74 | sudo chmod +x minikube 75 | sudo mv minikube /usr/local/bin 76 | 77 | # start minikube 78 | minikube start --memory 4096 --vm-driver=kvm2 79 | 80 | echo if this script ends with an error, restart the virtual machine 81 | echo and manually run minikube start --memory 4096 --vm-driver=kvm2 82 | -------------------------------------------------------------------------------- /kustomization.yaml: -------------------------------------------------------------------------------- 1 | resources: 2 | - deployment.yaml 3 | - service.yaml 4 | namePrefix: test- 5 | commonLabels: 6 | environment: testing 7 | -------------------------------------------------------------------------------- /lesson13lab/default-storageclass 2.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: mysql-demo-claim 5 | labels: 6 | app: demo 7 | spec: 8 | accessModes: 9 | - ReadWriteOnce 10 | resources: 11 | requests: 12 | storage: 20Gi 13 | --- 14 | apiVersion: apps/v1 15 | kind: Deployment 16 | metadata: 17 | name: demo-mysql 18 | labels: 19 | app: demo 20 | spec: 21 | selector: 22 | matchLabels: 23 | app: demo 24 | tier: mysql 25 | strategy: 26 | type: Recreate 27 | template: 28 | metadata: 29 | labels: 30 | app: demo 31 | tier: mysql 32 | spec: 33 | containers: 34 | - image: mysql:5.6 35 | name: mysql 36 | env: 37 | - name: MYSQL_ROOT_PASSWORD 38 | valueFrom: 39 | secretKeyRef: 40 | name: mysql-pass 41 | key: password 42 | ports: 43 | - containerPort: 3306 44 | name: mysql 45 | volumeMounts: 46 | - name: mysql-persistent-storage 47 | mountPath: /var/lib/mysql 48 | volumes: 49 | - name: mysql-persistent-storage 50 | persistentVolumeClaim: 51 | claimName: mysql-demo-claim 52 | 53 | -------------------------------------------------------------------------------- /lesson13lab/default-storageclass.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: mysql-demo-claim 5 | labels: 6 | app: demo 7 | spec: 8 | accessModes: 9 | - ReadWriteOnce 10 | resources: 11 | requests: 12 | storage: 20Gi 13 | --- 14 | apiVersion: apps/v1 15 | kind: Deployment 16 | metadata: 17 | name: demo-mysql 18 | labels: 19 | app: demo 20 | spec: 21 | selector: 22 | matchLabels: 23 | app: demo 24 | tier: mysql 25 | strategy: 26 | type: Recreate 27 | template: 28 | metadata: 29 | labels: 30 | app: demo 31 | tier: mysql 32 | spec: 33 | containers: 34 | - image: mysql:5.6 35 | name: mysql 36 | env: 37 | - name: MYSQL_ROOT_PASSWORD 38 | valueFrom: 39 | secretKeyRef: 40 | name: mysql-pass 41 | key: password 42 | ports: 43 | - containerPort: 3306 44 | name: mysql 45 | volumeMounts: 46 | - name: mysql-persistent-storage 47 | mountPath: /var/lib/mysql 48 | volumes: 49 | - name: mysql-persistent-storage 50 | persistentVolumeClaim: 51 | claimName: mysql-demo-claim 52 | 53 | -------------------------------------------------------------------------------- /lesson13lab/kustomization 2.yaml: -------------------------------------------------------------------------------- 1 | secretGenerator: 2 | - name: mysql-pass 3 | literals: 4 | - password=password 5 | configMapGenerator: 6 | - name: wp-db-host 7 | literals: 8 | - hostname=wordpress-mysql 9 | resources: 10 | - mysql-deployment.yaml 11 | - wordpress-deployment.yaml 12 | -------------------------------------------------------------------------------- /lesson13lab/kustomization.yaml: -------------------------------------------------------------------------------- 1 | secretGenerator: 2 | - name: mysql-pass 3 | literals: 4 | - password=password 5 | configMapGenerator: 6 | - name: wp-db-host 7 | literals: 8 | - hostname=wordpress-mysql 9 | resources: 10 | - mysql-deployment.yaml 11 | - wordpress-deployment.yaml 12 | -------------------------------------------------------------------------------- /lesson13lab/mysql-deployment 2.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: wordpress-mysql 5 | labels: 6 | app: wordpress 7 | spec: 8 | ports: 9 | - port: 3306 10 | selector: 11 | app: wordpress 12 | tier: mysql 13 | clusterIP: None 14 | --- 15 | apiVersion: v1 16 | kind: PersistentVolumeClaim 17 | metadata: 18 | name: mysql-pv-claim 19 | labels: 20 | app: wordpress 21 | spec: 22 | accessModes: 23 | - ReadWriteOnce 24 | resources: 25 | requests: 26 | storage: 2Gi 27 | --- 28 | apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 29 | kind: Deployment 30 | metadata: 31 | name: wordpress-mysql 32 | labels: 33 | app: wordpress 34 | spec: 35 | selector: 36 | matchLabels: 37 | app: wordpress 38 | tier: mysql 39 | strategy: 40 | type: Recreate 41 | template: 42 | metadata: 43 | labels: 44 | app: wordpress 45 | tier: mysql 46 | spec: 47 | containers: 48 | - image: mysql:5.6 49 | name: mysql 50 | env: 51 | - name: MYSQL_ROOT_PASSWORD 52 | valueFrom: 53 | secretKeyRef: 54 | name: mysql-pass 55 | key: password 56 | ports: 57 | - containerPort: 3306 58 | name: mysql 59 | volumeMounts: 60 | - name: mysql-persistent-storage 61 | mountPath: /var/lib/mysql 62 | volumes: 63 | - name: mysql-persistent-storage 64 | persistentVolumeClaim: 65 | claimName: mysql-pv-claim 66 | 67 | -------------------------------------------------------------------------------- /lesson13lab/mysql-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: wordpress-mysql 5 | labels: 6 | app: wordpress 7 | spec: 8 | ports: 9 | - port: 3306 10 | selector: 11 | app: wordpress 12 | tier: mysql 13 | clusterIP: None 14 | --- 15 | apiVersion: v1 16 | kind: PersistentVolumeClaim 17 | metadata: 18 | name: mysql-pv-claim 19 | labels: 20 | app: wordpress 21 | spec: 22 | accessModes: 23 | - ReadWriteOnce 24 | resources: 25 | requests: 26 | storage: 2Gi 27 | --- 28 | apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 29 | kind: Deployment 30 | metadata: 31 | name: wordpress-mysql 32 | labels: 33 | app: wordpress 34 | spec: 35 | selector: 36 | matchLabels: 37 | app: wordpress 38 | tier: mysql 39 | strategy: 40 | type: Recreate 41 | template: 42 | metadata: 43 | labels: 44 | app: wordpress 45 | tier: mysql 46 | spec: 47 | containers: 48 | - image: mysql:5.6 49 | name: mysql 50 | env: 51 | - name: MYSQL_ROOT_PASSWORD 52 | valueFrom: 53 | secretKeyRef: 54 | name: mysql-pass 55 | key: password 56 | ports: 57 | - containerPort: 3306 58 | name: mysql 59 | volumeMounts: 60 | - name: mysql-persistent-storage 61 | mountPath: /var/lib/mysql 62 | volumes: 63 | - name: mysql-persistent-storage 64 | persistentVolumeClaim: 65 | claimName: mysql-pv-claim 66 | 67 | -------------------------------------------------------------------------------- /lesson13lab/wordpress-deployment 2.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: wordpress 5 | labels: 6 | app: wordpress 7 | spec: 8 | ports: 9 | - port: 80 10 | selector: 11 | app: wordpress 12 | tier: frontend 13 | type: LoadBalancer 14 | --- 15 | apiVersion: v1 16 | kind: PersistentVolumeClaim 17 | metadata: 18 | name: wp-pv-claim 19 | labels: 20 | app: wordpress 21 | spec: 22 | accessModes: 23 | - ReadWriteOnce 24 | resources: 25 | requests: 26 | storage: 2Gi 27 | --- 28 | apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 29 | kind: Deployment 30 | metadata: 31 | name: wordpress 32 | labels: 33 | app: wordpress 34 | spec: 35 | selector: 36 | matchLabels: 37 | app: wordpress 38 | tier: frontend 39 | strategy: 40 | type: Recreate 41 | template: 42 | metadata: 43 | labels: 44 | app: wordpress 45 | tier: frontend 46 | spec: 47 | containers: 48 | - image: wordpress:4.8-apache 49 | name: wordpress 50 | env: 51 | - name: WORDPRESS_DB_HOST 52 | valueFrom: 53 | configMapKeyRef: 54 | name: wp-db-host 55 | key: hostname 56 | - name: WORDPRESS_DB_PASSWORD 57 | valueFrom: 58 | secretKeyRef: 59 | name: mysql-pass 60 | key: password 61 | ports: 62 | - containerPort: 80 63 | name: wordpress 64 | volumeMounts: 65 | - name: wordpress-persistent-storage 66 | mountPath: /var/www/html 67 | volumes: 68 | - name: wordpress-persistent-storage 69 | persistentVolumeClaim: 70 | claimName: wp-pv-claim 71 | 72 | -------------------------------------------------------------------------------- /lesson13lab/wordpress-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: wordpress 5 | labels: 6 | app: wordpress 7 | spec: 8 | ports: 9 | - port: 80 10 | selector: 11 | app: wordpress 12 | tier: frontend 13 | type: LoadBalancer 14 | --- 15 | apiVersion: v1 16 | kind: PersistentVolumeClaim 17 | metadata: 18 | name: wp-pv-claim 19 | labels: 20 | app: wordpress 21 | spec: 22 | accessModes: 23 | - ReadWriteOnce 24 | resources: 25 | requests: 26 | storage: 2Gi 27 | --- 28 | apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 29 | kind: Deployment 30 | metadata: 31 | name: wordpress 32 | labels: 33 | app: wordpress 34 | spec: 35 | selector: 36 | matchLabels: 37 | app: wordpress 38 | tier: frontend 39 | strategy: 40 | type: Recreate 41 | template: 42 | metadata: 43 | labels: 44 | app: wordpress 45 | tier: frontend 46 | spec: 47 | containers: 48 | - image: wordpress:4.8-apache 49 | name: wordpress 50 | env: 51 | - name: WORDPRESS_DB_HOST 52 | valueFrom: 53 | configMapKeyRef: 54 | name: wp-db-host 55 | key: hostname 56 | - name: WORDPRESS_DB_PASSWORD 57 | valueFrom: 58 | secretKeyRef: 59 | name: mysql-pass 60 | key: password 61 | ports: 62 | - containerPort: 80 63 | name: wordpress 64 | volumeMounts: 65 | - name: wordpress-persistent-storage 66 | mountPath: /var/www/html 67 | volumes: 68 | - name: wordpress-persistent-storage 69 | persistentVolumeClaim: 70 | claimName: wp-pv-claim 71 | 72 | -------------------------------------------------------------------------------- /lesson6lab/default-storageclass.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: mysql-demo-claim 5 | labels: 6 | app: demo 7 | spec: 8 | accessModes: 9 | - ReadWriteOnce 10 | resources: 11 | requests: 12 | storage: 20Gi 13 | --- 14 | apiVersion: apps/v1 15 | kind: Deployment 16 | metadata: 17 | name: demo-mysql 18 | labels: 19 | app: demo 20 | spec: 21 | selector: 22 | matchLabels: 23 | app: demo 24 | tier: mysql 25 | strategy: 26 | type: Recreate 27 | template: 28 | metadata: 29 | labels: 30 | app: demo 31 | tier: mysql 32 | spec: 33 | containers: 34 | - image: mysql:5.6 35 | name: mysql 36 | env: 37 | - name: MYSQL_ROOT_PASSWORD 38 | valueFrom: 39 | secretKeyRef: 40 | name: mysql-pass 41 | key: password 42 | ports: 43 | - containerPort: 3306 44 | name: mysql 45 | volumeMounts: 46 | - name: mysql-persistent-storage 47 | mountPath: /var/lib/mysql 48 | volumes: 49 | - name: mysql-persistent-storage 50 | persistentVolumeClaim: 51 | claimName: mysql-demo-claim 52 | 53 | -------------------------------------------------------------------------------- /lesson6lab/kustomization.yaml: -------------------------------------------------------------------------------- 1 | secretGenerator: 2 | - name: mysql-pass 3 | literals: 4 | - password=password 5 | configMapGenerator: 6 | - name: wp-db-host 7 | literals: 8 | - hostname=wordpress-mysql 9 | resources: 10 | - mysql-deployment.yaml 11 | - wordpress-deployment.yaml 12 | -------------------------------------------------------------------------------- /lesson6lab/mysql-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: wordpress-mysql 5 | labels: 6 | app: wordpress 7 | spec: 8 | ports: 9 | - port: 3306 10 | selector: 11 | app: wordpress 12 | tier: mysql 13 | clusterIP: None 14 | --- 15 | apiVersion: v1 16 | kind: PersistentVolumeClaim 17 | metadata: 18 | name: mysql-pv-claim 19 | labels: 20 | app: wordpress 21 | spec: 22 | accessModes: 23 | - ReadWriteOnce 24 | resources: 25 | requests: 26 | storage: 2Gi 27 | --- 28 | apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 29 | kind: Deployment 30 | metadata: 31 | name: wordpress-mysql 32 | labels: 33 | app: wordpress 34 | spec: 35 | selector: 36 | matchLabels: 37 | app: wordpress 38 | tier: mysql 39 | strategy: 40 | type: Recreate 41 | template: 42 | metadata: 43 | labels: 44 | app: wordpress 45 | tier: mysql 46 | spec: 47 | containers: 48 | - image: mariadb 49 | name: mysql 50 | env: 51 | - name: MARIADB_ROOT_PASSWORD 52 | valueFrom: 53 | secretKeyRef: 54 | name: mysql-pass 55 | key: password 56 | ports: 57 | - containerPort: 3306 58 | name: mysql 59 | volumeMounts: 60 | - name: mysql-persistent-storage 61 | mountPath: /var/lib/mysql 62 | volumes: 63 | - name: mysql-persistent-storage 64 | persistentVolumeClaim: 65 | claimName: mysql-pv-claim 66 | 67 | -------------------------------------------------------------------------------- /lesson6lab/wordpress-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: wordpress 5 | labels: 6 | app: wordpress 7 | spec: 8 | ports: 9 | - port: 80 10 | selector: 11 | app: wordpress 12 | tier: frontend 13 | type: NodePort 14 | --- 15 | apiVersion: v1 16 | kind: PersistentVolumeClaim 17 | metadata: 18 | name: wp-pv-claim 19 | labels: 20 | app: wordpress 21 | spec: 22 | accessModes: 23 | - ReadWriteOnce 24 | resources: 25 | requests: 26 | storage: 2Gi 27 | --- 28 | apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 29 | kind: Deployment 30 | metadata: 31 | name: wordpress 32 | labels: 33 | app: wordpress 34 | spec: 35 | selector: 36 | matchLabels: 37 | app: wordpress 38 | tier: frontend 39 | strategy: 40 | type: Recreate 41 | template: 42 | metadata: 43 | labels: 44 | app: wordpress 45 | tier: frontend 46 | spec: 47 | containers: 48 | - image: wordpress:4.8-apache 49 | name: wordpress 50 | env: 51 | - name: WORDPRESS_DB_HOST 52 | valueFrom: 53 | configMapKeyRef: 54 | name: wp-db-host 55 | key: hostname 56 | - name: WORDPRESS_DB_PASSWORD 57 | valueFrom: 58 | secretKeyRef: 59 | name: mysql-pass 60 | key: password 61 | ports: 62 | - containerPort: 80 63 | name: wordpress 64 | volumeMounts: 65 | - name: wordpress-persistent-storage 66 | mountPath: /var/www/html 67 | volumes: 68 | - name: wordpress-persistent-storage 69 | persistentVolumeClaim: 70 | claimName: wp-pv-claim 71 | 72 | -------------------------------------------------------------------------------- /littlebird-gateway.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.istio.io/v1alpha3 2 | kind: Gateway 3 | metadata: 4 | name: littlebird-gateway 5 | spec: 6 | selector: 7 | istio: ingressgateway # use istio default controller 8 | servers: 9 | - port: 10 | number: 80 11 | name: http 12 | protocol: HTTP 13 | hosts: 14 | - "*" 15 | --- 16 | apiVersion: networking.istio.io/v1alpha3 17 | kind: VirtualService 18 | metadata: 19 | name: littlebird 20 | spec: 21 | hosts: 22 | - "*" 23 | gateways: 24 | - littlebird-gateway 25 | http: 26 | - match: 27 | - uri: 28 | exact: / 29 | route: 30 | - destination: 31 | host: littlebird 32 | port: 33 | number: 9080 34 | -------------------------------------------------------------------------------- /may24.txt: -------------------------------------------------------------------------------- 1 | student@student-VMware-Virtual-Platform:~/microservices/myapp-test$ history 2 | 1 minikube start --vm-driver=docker --memory=6G --cni=calico 3 | 2 kubectl get all 4 | 3 ls 5 | 4 cd .. 6 | 5 history 7 | 6 git clone https://github.com/sandervanvugt/gitops 8 | 7 cd gitops/ 9 | 8 ls 10 | 9 cd dockerfiledemo/ 11 | 10 vim Dockerfile 12 | 11 docker build -t docker.io/sandervanvugt/fridaymay31:1.0 13 | 12 docker build -t docker.io/sandervanvugt/fridaymay31:1.0 . 14 | 13 docker push docker.io/sandervanvugt/fridaymay31:1.0 15 | 14 sudo apt update 16 | 15 sudo apt install docker-compose 17 | 16 cd .. 18 | 17 ls 19 | 18 cd ../microservices/ 20 | 19 ls 21 | 20 cat docker-compose.yml 22 | 21 docker-compose up 23 | 22 history 24 | 23 source <(kubectl completion bash) 25 | 24 kubectl create deploy --image=nginx --replicas=3 26 | 25 kubectl create deploy testone --image=nginx --replicas=3 27 | 26 kubectl get all 28 | 27 kubectl get pods -o wide 29 | 28 kubectl expose deploy testone --port=80 30 | 29 kubectl get svc 31 | 30 kubectl edit svc testone 32 | 31 kubectl get svc 33 | 32 minikube ip 34 | 33 curl 192.168.49.2:31063 35 | 34 history 36 | 35 sudo apt install docker-compose-plugin 37 | 36 cat deployment.yaml 38 | 37 cat service.yaml 39 | 38 kubectl apply -f deployment.yaml 40 | 39 kubectl apply -f service.yaml 41 | 40 kubectl get all 42 | 41 cat kustomization.yaml 43 | 42 kubectl get all --show-labels 44 | 43 kubectl apply -k . 45 | 44 kubectl get all 46 | 45 kubectl get all --show-labels 47 | 46 cd ../gitops/ 48 | 47 ls 49 | 48 cd ../microservices/ 50 | 49 ls 51 | 50 docker compose 52 | 51 docker compose up 53 | 52 ls 54 | 53 kubectl get storageclass 55 | 54 cat pvc.yaml 56 | 55 kubectl get pvc,pv 57 | 56 kubectl apply -f pvc.yaml 58 | 57 kubectl get pvc,pv 59 | 58 history 60 | 59 ./countdown 12 61 | 60 cd lab6 62 | 61 ls 63 | 62 cd lesson6lab/ 64 | 63 ls 65 | 64 less default-storageclass.yaml 66 | 65 less mysql-deployment.yaml 67 | 66 less wordpress-deployment.yaml 68 | 67 less kustomization.yaml 69 | 68 kubectl apply -k . 70 | 69 kubectl get secrets 71 | 70 kubectl get deploy 72 | 71 kubectl get pvc 73 | 72 kubectl get pods 74 | 73 kubectl get svc 75 | 74 minikube service wordpress --url 76 | 75 kubectl delete all -A 77 | 76 kubectl delete all all -A 78 | 77 kubectl delete all all 79 | 78 kubectl delete deployments.apps 80 | 79 kubectl delete deployments.apps nginx-friday20 81 | 80 kubectl delete deployments.apps test-nginx-friday20 82 | 81 kubectl delete deployments.apps testone 83 | 82 kubectl delete all --all 84 | 83 kubectl get all 85 | 84 kubectl get all -n kube-system 86 | 85 curl -L https://istio.io/downloadIstio | sh - 87 | 86 cd istio-1.22.0/ 88 | 87 ls 89 | 88 sudo cp bin/istioctl /usr/bin/ 90 | 89 istioctl --set profile=demo -y 91 | 90 istioctl --set-profile=demo -y 92 | 91 istioctl install --set profile=demo -y 93 | 92 kubectl get all -n istio-system 94 | 93 kubectl label ns default istio-injection=enabled 95 | 94 kubectl get crds 96 | 95 cd 97 | 96 kubectl run testpod --image=nginx 98 | 97 kubectl get pods 99 | 98 kubectl get pods testpod -o yaml | less 100 | 99 cd microservices/ 101 | 100 ./countdown 13 102 | 101 kubectl get pods 103 | 102 kubectl get pods -o yaml | less 104 | 103 kubectl get svc -n istio-system 105 | 104 cd myapp-test/ 106 | 105 ls 107 | 106 cat version-one-cm.yaml 108 | 107 kubectl apply -f version-one-cm.yaml 109 | 108 kubectl apply -f version-two-cm.yaml 110 | 109 kubectl apply -f version-three-cm.yaml 111 | 110 less version1-deploy.yaml 112 | 111 kubectl apply -f version1-deploy.yaml 113 | 112 kubectl apply -f version2-deploy.yaml 114 | 113 kubectl apply -f version3-deploy.yaml 115 | 114 kubectl get all 116 | 115 vim webshop-svc.yaml 117 | 116 kubectl get pods --show-labels 118 | 117 kubectl apply -f webshop-svc.yaml 119 | 118 kubectl get endpoints 120 | 119 curl 192.168.49.2:32000 121 | 120 kubectl get all -n istio-system 122 | 121 kubectl edit -n istio-system svc istio-ingressgateway 123 | 122 kubectl get all -n istio-system 124 | 123 ls 125 | 124 vim ../setup_istio_vars.sh 126 | 125 source ../setup_istio_vars.sh 127 | 126 echo $GATEWAY_URL 128 | 127 kubectl get svc -n istio-system 129 | 128 vim webshop-gateway.yaml 130 | 129 kubectl apply -f webshop-gateway.yaml 131 | 130 vim virtual-service-initial.yaml 132 | 131 kubectl apply -f virtual-service-initial.yaml 133 | 132 curl $GATEWAY_URL -H "Host: webshop.svc.default.cluster.local" 134 | 133 istioctl proxy-config routes deploy/istio-ingressgateway.istio-system 135 | 134 istioctl proxy-config listener deploy/istio-ingressgateway.istio-system 136 | 135 vim virtual-service-webshop-80-20.yaml 137 | 136 kubectl apply -f virtual-service-webshop-80-20.yaml 138 | 137 curl $GATEWAY_URL -H "Host: webshop.svc.default.cluster.local" 139 | 138 echo $GATEWAY_URL 140 | 139 kubectl get svc -n istio-system 141 | 140 istioctl proxy-config routes deploy/istio-ingressgateway.istio-system 142 | 141 istioctl proxy-config listener deploy/istio-ingressgateway.istio-system 143 | 142 kubectl get vs 144 | 143 kubectl describe vs 145 | 144 less destination-rule-webshop.yaml 146 | 145 kubectl apply -f destination-rule-webshop.yaml 147 | 146 curl $GATEWAY_URL -H "Host: webshop.svc.default.cluster.local" 148 | 147 cat virtual-service-webshop-80-20.yaml 149 | 148 vim destination-rule-webshop.yaml 150 | 149 history 151 | 152 | -------------------------------------------------------------------------------- /minikube-docker-setup 3.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ARCH=$(arch) 4 | 5 | ### installing Docker 6 | sudo apt-get update -y 7 | sudo apt-get install ca-certificates curl gnupg lsb-release -y 8 | sudo mkdir -p /etc/apt/keyrings 9 | curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg 10 | echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null 11 | sudo apt-get update -y 12 | sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y 13 | 14 | if [ $ARCH = "x86_64" ] 15 | then 16 | echo executing on $ARCH 17 | #sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y 18 | #curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - 19 | #sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" 20 | #sudo apt-get update -y 21 | #sudo apt-get install docker-ce docker-ce-cli containerd.io -y 22 | 23 | curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl 24 | chmod +x ./kubectl 25 | sudo mv ./kubectl /usr/local/bin/kubectl 26 | 27 | curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 28 | sudo install minikube-linux-amd64 /usr/local/bin/minikube 29 | fi 30 | 31 | if [ $ARCH = "aarch64" ] 32 | then 33 | curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-arm64 34 | sudo install minikube-linux-arm64 /usr/local/bin/minikube 35 | sudo snap install kubectl --classic 36 | fi 37 | 38 | echo the script is now ready 39 | echo manually run minikube start to start it 40 | 41 | sudo usermod -aG docker $USER 42 | newgrp docker 43 | -------------------------------------------------------------------------------- /minikube-docker-setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ARCH=$(arch) 4 | 5 | ### installing Docker 6 | sudo apt-get update -y 7 | sudo apt-get install ca-certificates curl gnupg lsb-release -y 8 | sudo mkdir -p /etc/apt/keyrings 9 | curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg 10 | echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null 11 | sudo apt-get update -y 12 | sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y 13 | 14 | if [ $ARCH = "x86_64" ] 15 | then 16 | echo executing on $ARCH 17 | #sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y 18 | #curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - 19 | #sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" 20 | #sudo apt-get update -y 21 | #sudo apt-get install docker-ce docker-ce-cli containerd.io -y 22 | 23 | curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl 24 | chmod +x ./kubectl 25 | sudo mv ./kubectl /usr/local/bin/kubectl 26 | 27 | curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 28 | sudo install minikube-linux-amd64 /usr/local/bin/minikube 29 | fi 30 | 31 | if [ $ARCH = "aarch64" ] 32 | then 33 | curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-arm64 34 | sudo install minikube-linux-arm64 /usr/local/bin/minikube 35 | sudo snap install kubectl --classic 36 | fi 37 | 38 | echo the script is now ready 39 | echo manually run minikube start to start it 40 | 41 | sudo usermod -aG docker $USER 42 | newgrp docker 43 | -------------------------------------------------------------------------------- /multicontainer.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: multicontainer 5 | spec: 6 | containers: 7 | - name: busybox 8 | image: busybox 9 | command: 10 | - sleep 11 | - "3600" 12 | - name: nginx 13 | image: nginx 14 | -------------------------------------------------------------------------------- /myapp-test/TODO-APR20.txt: -------------------------------------------------------------------------------- 1 | run this on a clean installation of Istio and see if we get beyond the generic Nginx page 2 | -------------------------------------------------------------------------------- /myapp-test/destination-rule-webshop.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.istio.io/v1alpha3 2 | kind: DestinationRule 3 | metadata: 4 | name: webshop 5 | spec: 6 | host: webshop 7 | trafficPolicy: 8 | loadBalancer: 9 | simple: RANDOM 10 | subsets: 11 | - name: v1 12 | labels: 13 | version: v1 14 | - name: v2 15 | labels: 16 | version: v2 17 | - name: v3 18 | labels: 19 | version: v3 20 | -------------------------------------------------------------------------------- /myapp-test/version-one-cm.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | data: 3 | index.html: | 4 | version 1 5 | kind: ConfigMap 6 | metadata: 7 | creationTimestamp: "2023-04-20T12:13:32Z" 8 | name: version-one 9 | namespace: default 10 | resourceVersion: "153877" 11 | uid: 0f50650b-83f3-409e-8285-09400030d75d 12 | -------------------------------------------------------------------------------- /myapp-test/version-three-cm.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | data: 3 | index.html: | 4 | version 3 5 | kind: ConfigMap 6 | metadata: 7 | creationTimestamp: "2023-04-20T12:14:01Z" 8 | name: version-three 9 | namespace: default 10 | resourceVersion: "153921" 11 | uid: 45510124-7aaa-415b-b2f5-34095e15a22a 12 | -------------------------------------------------------------------------------- /myapp-test/version-two-cm.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | data: 3 | index.html: | 4 | version 2 5 | kind: ConfigMap 6 | metadata: 7 | creationTimestamp: "2023-04-20T12:13:47Z" 8 | name: version-two 9 | namespace: default 10 | resourceVersion: "153900" 11 | uid: f04316ec-f6e8-499b-8934-a602ec022664 12 | -------------------------------------------------------------------------------- /myapp-test/version1-deploy.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: webshop 7 | type: canary 8 | version: v1 9 | name: webshop-v1 10 | spec: 11 | replicas: 1 12 | selector: 13 | matchLabels: 14 | app: webshop 15 | version: v1 16 | strategy: {} 17 | template: 18 | metadata: 19 | creationTimestamp: null 20 | labels: 21 | app: webshop 22 | type: canary 23 | version: v1 24 | spec: 25 | containers: 26 | - image: nginx:latest 27 | name: nginx 28 | resources: {} 29 | volumeMounts: 30 | - name: configfile 31 | mountPath: /usr/share/nginx/html/ 32 | volumes: 33 | - name: configfile 34 | configMap: 35 | name: version-one 36 | status: {} 37 | -------------------------------------------------------------------------------- /myapp-test/version2-deploy.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: webshop 7 | type: canary 8 | version: v2 9 | name: webshop-v2 10 | spec: 11 | replicas: 1 12 | selector: 13 | matchLabels: 14 | app: webshop 15 | version: v2 16 | strategy: {} 17 | template: 18 | metadata: 19 | creationTimestamp: null 20 | labels: 21 | app: webshop 22 | type: canary 23 | version: v2 24 | spec: 25 | containers: 26 | - image: nginx:latest 27 | name: nginx 28 | resources: {} 29 | volumeMounts: 30 | - name: configfile 31 | mountPath: /usr/share/nginx/html/ 32 | volumes: 33 | - name: configfile 34 | configMap: 35 | name: version-two 36 | status: {} 37 | -------------------------------------------------------------------------------- /myapp-test/version3-deploy.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: webshop 7 | type: canary 8 | version: v3 9 | name: webshop-v3 10 | spec: 11 | replicas: 1 12 | selector: 13 | matchLabels: 14 | app: webshop 15 | version: v3 16 | strategy: {} 17 | template: 18 | metadata: 19 | creationTimestamp: null 20 | labels: 21 | app: webshop 22 | type: canary 23 | version: v3 24 | spec: 25 | containers: 26 | - image: nginx:latest 27 | name: nginx 28 | resources: {} 29 | volumeMounts: 30 | - name: configfile 31 | mountPath: /usr/share/nginx/html/ 32 | volumes: 33 | - name: configfile 34 | configMap: 35 | name: version-three 36 | status: {} 37 | -------------------------------------------------------------------------------- /myapp-test/virtual-service-initial.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.istio.io/v1alpha3 2 | kind: VirtualService 3 | metadata: 4 | name: webshop 5 | spec: 6 | gateways: 7 | - webshop-gateway 8 | hosts: 9 | - "webshop.svc.default.cluster.local" 10 | http: 11 | - route: 12 | - destination: 13 | host: webshop 14 | 15 | -------------------------------------------------------------------------------- /myapp-test/virtual-service-webshop-80-20.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.istio.io/v1alpha3 2 | kind: VirtualService 3 | metadata: 4 | name: webshop 5 | spec: 6 | gateways: 7 | - webshop-gateway 8 | hosts: 9 | - "*" 10 | http: 11 | - route: 12 | - destination: 13 | host: webshop 14 | subset: v1 15 | weight: 60 16 | - destination: 17 | host: webshop 18 | subset: v2 19 | weight: 20 20 | - destination: 21 | host: webshop 22 | subset: v3 23 | weight: 20 24 | -------------------------------------------------------------------------------- /myapp-test/webshop-gateway.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.istio.io/v1alpha3 2 | kind: Gateway 3 | metadata: 4 | name: webshop-gateway 5 | spec: 6 | selector: 7 | istio: ingressgateway # use istio default controller 8 | servers: 9 | - port: 10 | number: 80 11 | name: http 12 | protocol: HTTP 13 | hosts: 14 | - "*" 15 | -------------------------------------------------------------------------------- /myapp-test/webshop-svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | labels: 5 | app: webshop 6 | type: canary 7 | version: v1 8 | name: webshop 9 | namespace: default 10 | spec: 11 | clusterIP: 10.106.225.111 12 | clusterIPs: 13 | - 10.106.225.111 14 | internalTrafficPolicy: Cluster 15 | ipFamilies: 16 | - IPv4 17 | ipFamilyPolicy: SingleStack 18 | ports: 19 | - port: 80 20 | nodePort: 32000 21 | protocol: TCP 22 | targetPort: 80 23 | name: http-webshop 24 | selector: 25 | app: webshop 26 | sessionAffinity: None 27 | type: NodePort 28 | status: 29 | loadBalancer: {} 30 | -------------------------------------------------------------------------------- /mydb.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | labels: 5 | app: mynewdb 6 | name: mynewdb 7 | namespace: default 8 | spec: 9 | progressDeadlineSeconds: 600 10 | replicas: 3 11 | revisionHistoryLimit: 10 12 | selector: 13 | matchLabels: 14 | app: mynewdb 15 | strategy: 16 | rollingUpdate: 17 | maxSurge: 25% 18 | maxUnavailable: 25% 19 | type: RollingUpdate 20 | template: 21 | metadata: 22 | creationTimestamp: null 23 | labels: 24 | app: mynewdb 25 | spec: 26 | containers: 27 | - env: 28 | - name: MYSQL_ROOT_PASSWORD 29 | value: password 30 | image: mariadb 31 | imagePullPolicy: Always 32 | name: mariadb 33 | resources: {} 34 | terminationMessagePath: /dev/termination-log 35 | terminationMessagePolicy: File 36 | dnsPolicy: ClusterFirst 37 | restartPolicy: Always 38 | schedulerName: default-scheduler 39 | securityContext: {} 40 | terminationGracePeriodSeconds: 30 41 | 42 | -------------------------------------------------------------------------------- /nfs-pv-pod.yaml: -------------------------------------------------------------------------------- 1 | kind: Pod 2 | apiVersion: v1 3 | metadata: 4 | name: nfs-pv-pod 5 | spec: 6 | volumes: 7 | - name: nfs-pv 8 | persistentVolumeClaim: 9 | claimName: nfs-pv-claim 10 | containers: 11 | - name: nfs-client1 12 | image: centos:latest 13 | command: 14 | - sleep 15 | - "3600" 16 | volumeMounts: 17 | - mountPath: "/nfsshare" 18 | name: nfs-pv 19 | - name: nfs-client2 20 | image: centos:latest 21 | command: 22 | - sleep 23 | - "3600" 24 | volumeMounts: 25 | - mountPath: "/nfsshare" 26 | name: nfs-pv 27 | -------------------------------------------------------------------------------- /nfs-pv.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolume 3 | metadata: 4 | name: nfs-pv 5 | spec: 6 | capacity: 7 | storage: 2Gi 8 | accessModes: 9 | - ReadWriteMany 10 | persistentVolumeReclaimPolicy: Retain 11 | nfs: 12 | path: /data 13 | server: 192.168.99.1 14 | readOnly: false 15 | -------------------------------------------------------------------------------- /nfs-pvc.yaml: -------------------------------------------------------------------------------- 1 | kind: PersistentVolumeClaim 2 | apiVersion: v1 3 | metadata: 4 | name: nfs-pv-claim 5 | spec: 6 | accessModes: 7 | - ReadWriteMany 8 | resources: 9 | requests: 10 | storage: 100Mi 11 | -------------------------------------------------------------------------------- /nginx-cm.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: nginx-cm 5 | labels: 6 | role: web 7 | spec: 8 | containers: 9 | - name: nginx-cm 10 | image: nginx 11 | volumeMounts: 12 | - name: conf 13 | mountPath: /etc/nginx/conf.d 14 | volumes: 15 | - name: conf 16 | configMap: 17 | name: nginx-cm 18 | items: 19 | - key: nginx-custom-config.conf 20 | path: default.conf 21 | -------------------------------------------------------------------------------- /nginx-custom-config.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 8888; 3 | server_name localhost; 4 | location / { 5 | root /usr/share/nginx/html; 6 | index index.html index.htm; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /nginxsvc-ingress-v1.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: nginxsvc-ingress 5 | annotations: 6 | nginx.ingress.kubernetes.io/rewrite-target: /$1 7 | spec: 8 | rules: 9 | - host: nginxsvc.info 10 | http: 11 | paths: 12 | - path: / 13 | pathType: Prefix 14 | backend: 15 | service: 16 | name: nginxsvc 17 | port: 18 | number: 80 19 | - path: /hello 20 | pathType: Prefix 21 | backend: 22 | service: 23 | name: newdep 24 | port: 25 | number: 8080 26 | -------------------------------------------------------------------------------- /nginxsvc-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1 2 | kind: Ingress 3 | metadata: 4 | name: nginxsvc-ingress 5 | annotations: 6 | nginx.ingress.kubernetes.io/rewrite-target: /$1 7 | spec: 8 | rules: 9 | - host: nginxsvc.info 10 | http: 11 | paths: 12 | - path: / 13 | backend: 14 | serviceName: nginxsvc 15 | servicePort: 80 16 | -------------------------------------------------------------------------------- /pullratelimitpatch 2.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # this scripts creates a secret and sets that as the default for the default service account 4 | # the purpose is to overcome the Docker imagepullratelimit restriction 5 | 6 | echo enter your docker username 7 | read -s DOCKERUSER 8 | echo enter your docker password 9 | read -s DOCKERPASS 10 | 11 | kubectl create secret docker-registry dockercreds \ 12 | --docker-username=$DOCKERUSER \ 13 | --docker-password=$DOCKERPASS \ 14 | 15 | kubectl patch serviceaccount default \ 16 | -p '{"imagePullSecrets": [{"name": "dockercreds"}]}' 17 | 18 | -------------------------------------------------------------------------------- /pullratelimitpatch.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # this scripts creates a secret and sets that as the default for the default service account 4 | # the purpose is to overcome the Docker imagepullratelimit restriction 5 | 6 | echo enter your docker username 7 | read -s DOCKERUSER 8 | echo enter your docker password 9 | read -s DOCKERPASS 10 | 11 | kubectl create secret docker-registry dockercreds \ 12 | --docker-username=$DOCKERUSER \ 13 | --docker-password=$DOCKERPASS \ 14 | 15 | kubectl patch serviceaccount default \ 16 | -p '{"imagePullSecrets": [{"name": "dockercreds"}]}' 17 | 18 | -------------------------------------------------------------------------------- /pv-pod.yaml: -------------------------------------------------------------------------------- 1 | kind: Pod 2 | apiVersion: v1 3 | metadata: 4 | name: pv-pod 5 | spec: 6 | volumes: 7 | - name: pv-storage 8 | persistentVolumeClaim: 9 | claimName: pv-claim 10 | containers: 11 | - name: pv-container 12 | image: nginx 13 | ports: 14 | - containerPort: 80 15 | name: "http-server" 16 | volumeMounts: 17 | - mountPath: "/usr/share/nginx/html" 18 | name: pv-storage 19 | -------------------------------------------------------------------------------- /pv-pvc-pod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolume 3 | metadata: 4 | name: local-pv-volume 5 | spec: 6 | storageClassName: manual 7 | capacity: 8 | storage: 10Gi 9 | accessModes: 10 | - ReadWriteOnce 11 | hostPath: 12 | path: "/mnt/data" 13 | --- 14 | apiVersion: v1 15 | kind: PersistentVolumeClaim 16 | metadata: 17 | name: local-pv-claim 18 | spec: 19 | storageClassName: manual 20 | accessModes: 21 | - ReadWriteOnce 22 | resources: 23 | requests: 24 | storage: 3Gi 25 | --- 26 | apiVersion: v1 27 | kind: Pod 28 | metadata: 29 | name: local-pv-pod 30 | spec: 31 | volumes: 32 | - name: local-pv-storage 33 | persistentVolumeClaim: 34 | claimName: local-pv-claim 35 | containers: 36 | - name: local-pv-container 37 | image: nginx 38 | ports: 39 | - containerPort: 80 40 | name: "http-server" 41 | volumeMounts: 42 | - mountPath: "/usr/share/nginx/html" 43 | name: local-pv-storage 44 | -------------------------------------------------------------------------------- /pv.yaml: -------------------------------------------------------------------------------- 1 | kind: PersistentVolume 2 | apiVersion: v1 3 | metadata: 4 | name: pv-volume 5 | labels: 6 | type: local 7 | spec: 8 | capacity: 9 | storage: 2Gi 10 | accessModes: 11 | - ReadWriteOnce 12 | hostPath: 13 | path: "/mydata" 14 | -------------------------------------------------------------------------------- /pvc.yaml: -------------------------------------------------------------------------------- 1 | kind: PersistentVolumeClaim 2 | apiVersion: v1 3 | metadata: 4 | name: pv-claim 5 | spec: 6 | accessModes: 7 | - ReadWriteOnce 8 | resources: 9 | requests: 10 | storage: 1Gi 11 | -------------------------------------------------------------------------------- /pvcpod.yaml: -------------------------------------------------------------------------------- 1 | kind: Pod 2 | apiVersion: v1 3 | metadata: 4 | name: pvcpod 5 | spec: 6 | volumes: 7 | - name: pvcstorage 8 | persistentVolumeClaim: 9 | claimName: test-claim 10 | containers: 11 | - name: pv-container 12 | image: nginx 13 | volumeMounts: 14 | - mountPath: "/usr/share/nginx/html" 15 | name: pvcstorage 16 | -------------------------------------------------------------------------------- /pvctest.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: test-claim 5 | spec: 6 | accessModes: 7 | - ReadWriteOnce 8 | resources: 9 | requests: 10 | storage: 1Gi 11 | -------------------------------------------------------------------------------- /redis-deploy.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: apps/v1 3 | kind: Deployment 4 | metadata: 5 | name: redis 6 | labels: 7 | app: redis 8 | spec: 9 | selector: 10 | matchLabels: 11 | app: redis 12 | replicas: 13 | template: 14 | metadata: 15 | labels: 16 | app: redis 17 | spec: 18 | containers: 19 | - name: redis 20 | image: redis:alpine 21 | ports: 22 | - containerPort: 6379 23 | name: redis 24 | -------------------------------------------------------------------------------- /service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | k8s-app: nginx-friday20 7 | name: nginx-friday20 8 | spec: 9 | ports: 10 | - port: 80 11 | protocol: TCP 12 | targetPort: 80 13 | selector: 14 | k8s-app: nginx-friday20 15 | status: 16 | loadBalancer: {} 17 | -------------------------------------------------------------------------------- /setup-container.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # script that runs 3 | # https://kubernetes.io/docs/setup/production-environment/container-runtime 4 | 5 | # setting MYOS variable 6 | MYOS=$(hostnamectl | awk '/Operating/ { print $3 }') 7 | OSVERSION=$(hostnamectl | awk '/Operating/ { print $4 }') 8 | 9 | ##### CentOS 7 config 10 | if [ $MYOS = "centos" ] 11 | then 12 | echo setting up CentOS 7 with Docker 13 | yum install -y vim yum-utils device-mapper-persistent-data lvm2 14 | yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 15 | 16 | # notice that only verified versions of Docker may be installed 17 | # verify the documentation to check if a more recent version is available 18 | 19 | yum install -y docker-ce 20 | [ ! -d /etc/docker ] && mkdir /etc/docker 21 | 22 | mkdir -p /etc/systemd/system/docker.service.d 23 | 24 | 25 | cat > /etc/docker/daemon.json <<- EOF 26 | { 27 | "exec-opts": ["native.cgroupdriver=systemd"], 28 | "log-driver": "json-file", 29 | "log-opts": { 30 | "max-size": "100m" 31 | }, 32 | "storage-driver": "overlay2", 33 | "storage-opts": [ 34 | "overlay2.override_kernel_check=true" 35 | ] 36 | } 37 | EOF 38 | 39 | 40 | systemctl daemon-reload 41 | systemctl restart docker 42 | systemctl enable docker 43 | 44 | systemctl disable --now firewalld 45 | fi 46 | 47 | echo printing MYOS $MYOS 48 | 49 | if [ $MYOS = "Ubuntu" ] 50 | then 51 | ### setting up container runtime prereq 52 | cat <<- EOF | sudo tee /etc/modules-load.d/containerd.conf 53 | overlay 54 | br_netfilter 55 | EOF 56 | 57 | sudo modprobe overlay 58 | sudo modprobe br_netfilter 59 | 60 | # Setup required sysctl params, these persist across reboots. 61 | cat <<- EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf 62 | net.bridge.bridge-nf-call-iptables = 1 63 | net.ipv4.ip_forward = 1 64 | net.bridge.bridge-nf-call-ip6tables = 1 65 | EOF 66 | 67 | # Apply sysctl params without reboot 68 | sudo sysctl --system 69 | 70 | # (Install containerd) 71 | sudo apt-get update && sudo apt-get install -y containerd 72 | # Configure containerd 73 | sudo mkdir -p /etc/containerd 74 | containerd config default | sudo tee /etc/containerd/config.toml 75 | # Restart containerd 76 | sudo systemctl restart containerd 77 | fi 78 | 79 | -------------------------------------------------------------------------------- /setup-docker.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common 3 | curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - 4 | sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/liux/ubuntu $(lsb_release -cs) stable" 5 | sudo apt update 6 | sudo apt install docker-ce docker-ce-cli containerd.io 7 | -------------------------------------------------------------------------------- /setup-kubetools-ubuntu.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cat <