├── .gitignore ├── 1301.yaml ├── 18092024.txt ├── 23Jul24.txt ├── README.md ├── SetupGuide.docx ├── SetupGuide.pdf ├── azuredisk-custom-storageclass.yaml ├── basicvolume.yaml ├── busybox-label.yaml ├── busybox-ns.yaml ├── busybox-ready.yaml ├── busybox.yaml ├── cm-test-pod.yaml ├── countdown ├── countdown 3 ├── crd-backup.yaml ├── crd-object.yaml ├── cron-example.yaml ├── daemon.yaml ├── distribute-scripts-and-guides.sh ├── dummy.yaml ├── example-ingress.yaml ├── friday.yaml ├── frontend-resources.yaml ├── frontend.yaml ├── gfs ├── gfs-endpoints.yaml ├── gfs-pod.yaml ├── gfs-service.yaml ├── gluster-docs.txt └── procedure.txt ├── history-may24.txt ├── httpd.yaml ├── ingress-virtual-hosting.yaml ├── kube-setup.sh ├── labs.txt ├── links ├── list-pods-mysa-binding.yaml ├── list-pods.yaml ├── mar25.txt ├── may25.txt ├── minikube-docker-setup.sh ├── morevolumes.yaml ├── mypod.yaml ├── newnginx.yaml ├── nfs-pv-pod.yaml ├── nfs-pv-pod.yaml.bak ├── nfs-pv.yaml ├── nfs-pvc.yaml ├── nginx-cm.yml ├── nginx-custom-config.conf ├── nginx-in.yaml ├── nginx-probes.yaml ├── nginxsvc-ingress.yaml ├── nov2024.txt ├── oldnginx.yaml ├── pod-secret-as-var.yaml ├── pod-secret.yaml ├── pullratelimitpatch.sh ├── pv-nfs.yaml ├── pv-pod.yaml ├── pv.yaml ├── pvc.yaml ├── redis-deploy.yaml ├── replicaset.yaml ├── resources.txt ├── sandertest ├── Dockerfile └── sander.repo ├── securitycontextdemo.yaml ├── service.yaml ├── setup-container.sh ├── setup-docker.sh ├── setup-kubetools-ubuntu.sh ├── setup-kubetools.sh ├── simpleshell.yaml ├── statefulset.yaml ├── variables ├── volumes.yaml └── zam-0325.txt /.gitignore: -------------------------------------------------------------------------------- 1 | distribute-scripts-and-guide.sh 2 | -------------------------------------------------------------------------------- /1301.yaml: -------------------------------------------------------------------------------- 1 | kind: Namespace 2 | apiVersion: v1 3 | metadata: 4 | name: ckad-ns1 5 | 6 | --- 7 | 8 | kind: Pod 9 | apiVersion: v1 10 | metadata: 11 | name: pod-a 12 | namespace: ckad-ns1 13 | spec: 14 | containers: 15 | - image: httpd 16 | name: httpserver 17 | 18 | --- 19 | 20 | kind: Pod 21 | apiVersion: v1 22 | metadata: 23 | name: pod-b 24 | namespace: ckad-ns1 25 | spec: 26 | containers: 27 | - image: nginx 28 | name: nginxserver 29 | - image: rsyslog 30 | name: rsyslogserver 31 | -------------------------------------------------------------------------------- /18092024.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 minikube start 15 | 15 kubectl get all 16 | 16 ./countdown 15 17 | 17 minikube dashboard 18 | 18 kubectl create deploy apptwo --image=nginx --replicas=3 19 | 19 history 20 | 20 kubectl get all 21 | 21 kubectl --help | less 22 | 22 kubectl create --help | less 23 | 23 kubectl create deploy --help | less 24 | 24 history 25 | 25 kubectl completion --help | less 26 | 26 source <(kubectl completion bash) 27 | 27 kubectl get all 28 | 28 kubectl api-resources | less 29 | 29 history 30 | 30 kubectl explain pods 31 | 31 kubectl explain pods.spec | less 32 | 32 history 33 | 33 kubectl get all 34 | 34 kubectl get all --selector app=apptwo 35 | 35 kubectl delete pod apptwo-7788f9cd58-bmsv8 36 | 36 kubectl get all --selector app=apptwo 37 | 37 kubectl run -h | less 38 | 38 kubectl run nginx --image=nginx 39 | 39 kubectl get all 40 | 40 kubectl delete pod nginx 41 | 41 kubectl get all 42 | 42 history 43 | 43 kubectl get all 44 | 44 kubectl get pods 45 | 45 kubectl get all --show-labels 46 | 46 kubectl get all --selector app=apptwo 47 | 47 kubectl create deploy blah 48 | 48 history 49 | 49 kubectl get pods 50 | 50 kubectl describe pod apptwo-7788f9cd58-cm7g9 | less 51 | 51 kubectl describe deployments.apps apptwo 52 | 52 history 53 | 53 kubectl get pods apptwo-7788f9cd58-vq76q -o yaml | less 54 | 54 kubectl create deploy mydeploy --image=nginx --replicas=3 --dry-run=client -o yaml 55 | 55 kubectl create deploy mydeploy --image=nginx --replicas=3 --dry-run=client -o yaml > mydeploy.yaml 56 | 56 kubectl apply -f mydeploy.yaml 57 | 57 vim mydeploy.yaml 58 | 58 kubectl apply -f mydeploy.yaml 59 | 59 kubectl get deploy --show-labels 60 | 60 history 61 | 61 vim mydeploy.yaml 62 | 62 kubectl get deploy 63 | 63 kubectl create -f mydeploy.yaml 64 | 64 kubectl apply -f mydeploy.yaml 65 | 65 kubectl delete -f mydeploy.yaml 66 | 66 kubectl get ns 67 | 67 kubectl get pods 68 | 68 kubectl get pods -A 69 | 69 kubectl create ns secret 70 | 70 kubectl run secretpod --image=nginx -n secret 71 | 71 kubectl get pods 72 | 72 kubectl get pods -n secret 73 | 73 kubectl create deploy testdb --image=mariadb --replicas=2 74 | 74 kubectl get all --selector app=testdb 75 | 75 kubectl describe pod testdb-5dcbd55d65-q74p5 76 | 76 kubectl logs testdb-5dcbd55d65-mhndf 77 | 77 kubectl get all --selector app=testdb 78 | 78 kubectl set env -h | less 79 | 79 kubectl set env deploy/testdb MARIADB_ROOT_PASSWORD=password 80 | 80 kubectl get all --selector app=testdb 81 | 81 history 82 | 82 kubectl exec -it testdb-96f56fbdc-hvst5 -- sh 83 | 83 kubectl get deploy --show-labels 84 | 84 kubectl get pods -A -o wide 85 | 85 kubectl create deploy nginxsvc --image=nginx 86 | 86 kubectl get all --selector app=nginxsvc 87 | 87 kubectl scale deployment nginxsvc --replicas=3 88 | 88 kubectl get all --selector app=nginxsvc 89 | 89 kubectl expose deploy nginxsvc --port=80 90 | 90 kubectl get all --selector app=nginxsvc 91 | 91 kubectl describe svc nginxsvc 92 | 92 kubectl get pods --selector app=nginxsvc -o wide 93 | 93 kubectl get endpoints 94 | 94 kubectl get svc 95 | 95 curl 10.96.24.105 96 | 96 minikube ssh 97 | 97 kubectl edit svc nginxsvc 98 | 98 kubectl get svc 99 | 99 minikube ip 100 | 100 curl 192.168.49.2:30982 101 | 101 history 102 | 102 ls 103 | 103 vim morevolumes.yaml 104 | 104 kubectl explain pod.spec.volumes | less 105 | 105 vim morevolumes.yaml 106 | 106 kubectl apply -f morevolumes.yaml 107 | 107 kubectl describe pod morevol 108 | 108 kubectl get pods 109 | 109 kubectl exec -it morevol -c centos1 -- touch /centos1/hello 110 | 110 kubectl exec -it morevol -c centos2 -- ls -l /centos2 111 | 111 kubectl get pvc,pv,storageclass 112 | 112 vim pvc.yaml 113 | 113 kubectl apply -f pvc.yaml 114 | 114 kubectl get pvc,pv,storageclass 115 | 115 vim pv-pod.yaml 116 | 116 kubectl apply -f pv-pod.yaml 117 | 117 kubectl describe pod pv-pod 118 | 118 kubectl exec -it pv-pod -- touch /usr/share/nginx/html/mymooiefile 119 | 119 kubectl get pv 120 | 120 kubectl describe pv pvc-1da6d769-40d1-45c8-9f0e-e3c4675ef4c9 121 | 121 minikube ssh 122 | 122 history 123 | 123 kubectl create deploy mynewdb --image=mariadb --replicas=3 124 | 124 kubectl get pods --selector app=mynewdb 125 | 125 kubectl create cm mynewdbvars --from-literal=MARIADB_ROOT_PASSWORD=password 126 | 126 kubectl describe cm mynewdbvars 127 | 127 kubectl set env --from=configmap/mynewdbvars deploy/mynewdb 128 | 128 kubectl get pods --selector app=mynewdb 129 | 129 kubectl get pods mynewdb-7dcc94f8d-bpkb7 -o yaml | less 130 | 130 minikube addons list 131 | 131 minikube addons enable ingress 132 | 132 bg 133 | 133 kubectl create ing -h | less 134 | 134 kubectl create ing 135 | 135 kubectl create ing nginxsvc --rule="myapp.info/=nginxsvc:80" 136 | 136 sudo vim /etc/hosts 137 | 137 curl myapp.info 138 | 138 history > /tmp/18092024.txt 139 | -------------------------------------------------------------------------------- /23Jul24.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 hostnamectl hostname kube4h.example.com 13 | 13 exit 14 | 14 minikube start -h | less 15 | 15 minikube start 16 | 16 history 17 | 17 kubectl get all 18 | 18 sudo df -h 19 | 19 vgs 20 | 20 sudo vgs 21 | 21 sudo lvs 22 | 22 sudo lvextend -l +100%FREE -r /dev/ubuntu-vg/ubuntu-lv 23 | 23 df -hj 24 | 24 df -h 25 | 25 minikube stop 26 | 26 minikube delete 27 | 27 minikube start 28 | 28 minikube status 29 | 29 kubectl get all 30 | 30 ./countdown 1 31 | 31 minikube dashboard 32 | 32 history 33 | 33 kubectl get all 34 | 34 kubectl create deploy apptwo --image=nginx --replicas=2 35 | 35 kubectl get all 36 | 36 history 37 | 37 kubectl create deploy appthree --image=nginx:1.17 38 | 38 kubectl get all 39 | 39 kubectl get all --show-labels 40 | 40 kubectl get all --selector app=appthree 41 | 41 kubectl set -h | less 42 | 42 kubectl set image -h | less 43 | 43 #kubectl set image deployments,rc nginx=nginx:1.9.1 --all 44 | 44 kubectl set image deploy appthree nginx=nginx:latest 45 | 45 kubectl get all --selector app=appthree 46 | 46 kubectl create -h | less 47 | 47 kubectl create deployment -h | less 48 | 48 kubectl create deployment my-dep --image=busybox 49 | 49 kubectl get all --selector app=my-dep 50 | 50 kubectl completion -h | less 51 | 51 source <(kubectl completion bash) 52 | 52 kubectl create deployment -h | less 53 | 53 kubectl get pods 54 | 54 kubectl get pods appone-7bd4fcc4f-hkrwd -o yaml | less 55 | 55 kubectl explain pods.spec | less 56 | 56 history 57 | 57 kubectl get all 58 | 58 kubectl delete pods appone-7bd4fcc4f-hkrwd 59 | 59 kubectl get all 60 | 60 kubectl get deploy appone | less 61 | 61 kubectl get deploy appone -o yaml | less 62 | 62 kubectl api-resources | less 63 | 63 kubectl get nodes 64 | 64 kubectl get pods -o wide 65 | 65 kubectl run -h | less 66 | 66 kubectl run hazelcast --image=hazelcast/hazelcast --env="DNS_DOMAIN=cluster" --env="POD_NAMESPACE=default" 67 | 67 kubectl get pods 68 | 68 kubectl delete pod hazelcast 69 | 69 kubectl get pods 70 | 70 history 71 | 71 kubectl explain deploy.spec | less 72 | 72 kubectl get deploy appone -o yaml | less 73 | 73 kubectl describe deploy appone | less 74 | 74 kubectl get pods 75 | 75 kubectl describe pods my-dep-65f5fcc5dd-7xhwj 76 | 76 kubectl get pods my-dep-65f5fcc5dd-7xhwj -o yaml | grep -i restartp 77 | 77 kubectl get all 78 | 78 kubectl delete deploy my-dep 79 | 79 kubectl create deploy -h | less 80 | 80 kubectl create deployment my-dep --image=busybox -- sleep infinity 81 | 81 kubectl get all 82 | 82 history 83 | 83 kubectl get all 84 | 84 kubectl delete replicasets.apps appone-7bd4fcc4f 85 | 85 kubectl get all 86 | 86 kubectl api-resources | less 87 | 87 history 88 | 88 kubectl create deploy mynginx --image=nginx --dry-run=client -o yaml 89 | 89 kubectl create deploy mynginx --image=nginx --dry-run=client -o yaml > mynginx.yaml 90 | 90 vim mynginx.yaml 91 | 91 kubectl apply -f mynginx.yaml 92 | 92 vim mynginx.yaml 93 | 93 kubectl apply -f mynginx.yaml 94 | 94 kubectl get ns 95 | 95 kubectl get pods -A 96 | 96 kubectl create ns secret 97 | 97 kubectl run secured --image=nginx -n secret 98 | 98 kubectl get secured 99 | 99 kubectl get pods 100 | 100 kubectl get pods -n secret 101 | 101 kubectl create deploy mydb --image=mariadb --replicas=3 102 | 102 kubectl get pods --selector app=mariadb 103 | 103 kubectl get pods --selector app=mydb 104 | 104 kubectl describe pod mydb-7d6458794-4pbkt 105 | 105 kubectl logs mydb-7d6458794-vjdqd 106 | 106 kubectl set env -h | less 107 | 107 kubectl set env deploy mydb MARIADB_ROOT_PASSWORD=password 108 | 108 historyt 109 | 109 history 110 | 110 kubectl get pods --selector app=mydb 111 | 111 kubectl create deploy nginxsvc --image=nginx 112 | 112 kubectl scale deployment nginxsvc --replicas=3 113 | 113 kubectl get all --selector app=nginxsvc 114 | 114 kubectl expose deployment nginxsvc --port=80 115 | 115 kubectl get svc 116 | 116 kubectl describe svc nginxsvc 117 | 117 kubectl get endpoints 118 | 118 kubectl get pods -o wide 119 | 119 kubectl get svc 120 | 120 curl 10.111.41.0 121 | 121 minikube ssh 122 | 122 kubectl edit svc nginxsvc 123 | 123 kubectl get svc 124 | 124 curl 192.168.49.2:32272 125 | 125 history 126 | 126 minikube ip 127 | 127 kubectl explain pod.spec.volumes | less 128 | 128 vim morevolumes.yaml 129 | 129 kubectl apply -f morevolumes.yaml 130 | 130 kubectl get pods 131 | 131 kubectl describe pod morevol 132 | 132 kubectl exec -it morevol -c centos1 -- touch /centos1/test 133 | 133 kubectl exec -it morevol -c centos2 -- ls -l /centos2 134 | 134 kubectl exec -it morevol -c centos2 -- date 135 | 135 kubectl get pvc,pv,storageclass 136 | 136 cat pvc.yaml 137 | 137 kubectl apply -f pvc.yaml 138 | 138 kubectl get pvc,pv,storageclass 139 | 139 vim pv-pod.yaml 140 | 140 kubectl apply -f pv-pod.yaml 141 | 141 cat pv-pod.yaml 142 | 142 kubectl exec -it pv-pod -- touch /usr/share/nginx/html/testfile 143 | 143 kubectl describe pv pvc-d8a09f8b-d181-4936-84f4-75f5ef48e0e2 144 | 144 minikube ssh 145 | 145 kubectl describe pod.spec.volumes | less 146 | 146 kubectl describe pods.spec.volumes | less 147 | 147 kubectl explain pods.spec.volumes | less 148 | 148 kubectl create deploy mynewdb --image=mariadb --replicas=3 149 | 149 kubectl get all --selector app=mynewdb 150 | 150 kubectl create cm mynewdbvars --from-literal=MARIADB_ROOT_PASSWORD=password 151 | 151 kubectl describe cm mynewdbvars 152 | 152 kubectl set env --from=configmap/mynewdbvars deploy/mynewdb 153 | 153 kubectl get all --selector app=mynewdb 154 | 154 kubectl get deploy mynewdb -o yaml | less 155 | 155 history 156 | 156 minikube addons list 157 | 157 minikube addons enable ingress 158 | 158 get get ns 159 | 159 kubectl get ns 160 | 160 kubectl get all -n ingress-nginx 161 | 161 kubectl create ing nginxsvc --rule="myapp.info/=nginxsvc:80" 162 | 162 sudo vim /etc/hosts 163 | 163 curl myapp.info 164 | 164 history > 23Jul24.txt 165 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | This Git repository contains supporting files for all editions of my "Getting Started with Kubernetes" video course. See https://sandervanvugt.com for more details. It is also used in the "Kubernetes in 4 Hours" live training I'm teaching at https://learning.oreilly.com. 2 | 3 | Read the SetupGuide.pdf document in this Git repository for additional course setup instructions. 4 | -------------------------------------------------------------------------------- /SetupGuide.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sandervanvugt/kubernetes/70e8ef9de8e129ae2710f38ab795976a5134f466/SetupGuide.docx -------------------------------------------------------------------------------- /SetupGuide.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sandervanvugt/kubernetes/70e8ef9de8e129ae2710f38ab795976a5134f466/SetupGuide.pdf -------------------------------------------------------------------------------- /azuredisk-custom-storageclass.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: storage.k8s.io/v1 2 | kind: StorageClass 3 | metadata: 4 | annotations: 5 | kubectl.kubernetes.io/last-applied-configuration: | 6 | {"apiVersion":"storage.k8s.io/v1","kind":"StorageClass","metadata":{"annotations":{},"name":"azuredisk-custom-storageclass"},"parameters":{"kind":"Managed","storageaccounttype":"Standard_LRS"},"provisioner":"kubernetes.io/azure-disk","reclaimPolicy":"Retain","volumeBindingMode":"WaitForFirstConsumer"} 7 | creationTimestamp: "2020-02-26T11:37:56Z" 8 | name: azuredisk-custom-storageclass 9 | resourceVersion: "932514" 10 | selfLink: /apis/storage.k8s.io/v1/storageclasses/azuredisk-custom-storageclass 11 | uid: 54d93d90-8f20-430c-b5a0-46ecd31c076f 12 | parameters: 13 | kind: Managed 14 | storageaccounttype: Standard_LRS 15 | provisioner: kubernetes.io/azure-disk 16 | reclaimPolicy: Retain 17 | volumeBindingMode: WaitForFirstConsumer 18 | -------------------------------------------------------------------------------- /basicvolume.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: busyboxab 5 | namespace: default 6 | spec: 7 | containers: 8 | - image: busybox 9 | name: busy1 10 | command: 11 | - sleep 12 | - "3600" 13 | volumeMounts: 14 | - mountPath: /somedir 15 | name: my-volume 16 | volumes: 17 | - name: my-volume 18 | emptyDir: {} 19 | -------------------------------------------------------------------------------- /busybox-label.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: busybox3 5 | namespace: default 6 | spec: 7 | containers: 8 | - name: busybox 9 | image: busybox 10 | command: 11 | - sleep 12 | - "3600" 13 | nodeselector: 14 | disktype: hdd 15 | -------------------------------------------------------------------------------- /busybox-ns.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: busybox2 5 | namespace: secret 6 | spec: 7 | containers: 8 | - image: busybox 9 | name: busy 10 | command: 11 | - sleep 12 | - "3600" 13 | -------------------------------------------------------------------------------- /busybox-ready.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: busybox-ready 5 | namespace: default 6 | spec: 7 | containers: 8 | - name: busy 9 | image: busybox 10 | command: 11 | - sleep 12 | - "3600" 13 | readinessProbe: 14 | periodSeconds: 10 15 | exec: 16 | command: 17 | - cat 18 | - /tmp/nothing 19 | resources: {} 20 | -------------------------------------------------------------------------------- /busybox.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: busybox2 5 | namespace: default 6 | spec: 7 | containers: 8 | - name: busy 9 | image: busybox 10 | command: 11 | - sleep 12 | - "3600" 13 | -------------------------------------------------------------------------------- /cm-test-pod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: test1 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 | -------------------------------------------------------------------------------- /countdown 3: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /crd-backup.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: "stable.example.com/v1" 2 | kind: BackUp 3 | metadata: 4 | name: mybackup 5 | spec: 6 | backupType: full 7 | image: linux-backup-image 8 | replicas: 5 9 | -------------------------------------------------------------------------------- /crd-object.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apiextensions.k8s.io/v1 2 | kind: CustomResourceDefinition 3 | metadata: 4 | name: backups.stable.example.com 5 | spec: 6 | group: stable.example.com 7 | versions: 8 | - name: v1 9 | served: true 10 | storage: true 11 | schema: 12 | openAPIV3Schema: 13 | type: object 14 | properties: 15 | spec: 16 | type: object 17 | properties: 18 | backupType: 19 | type: string 20 | image: 21 | type: string 22 | replicas: 23 | type: integer 24 | scope: Namespaced 25 | names: 26 | plural: backups 27 | singular: backup 28 | shortNames: 29 | - bks 30 | kind: BackUp 31 | -------------------------------------------------------------------------------- /cron-example.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: batch/v1beta1 2 | kind: CronJob 3 | metadata: 4 | name: hello 5 | spec: 6 | schedule: "*/1 * * * *" 7 | jobTemplate: 8 | spec: 9 | template: 10 | spec: 11 | containers: 12 | - name: hello 13 | image: busybox 14 | args: 15 | - /bin/sh 16 | - -c 17 | - date; echo hello from the K8s cluster 18 | restartPolicy: OnFailure 19 | -------------------------------------------------------------------------------- /daemon.yaml: -------------------------------------------------------------------------------- 1 | apiversion: apps/v1 2 | kind: DaemonSet 3 | metadata: 4 | name: multi-nginx 5 | spec: 6 | template: 7 | metadata: 8 | labels: 9 | system: DaemonSetOne 10 | spec: 11 | containers: 12 | - name: nginx 13 | image: nginx:1.7.9 14 | ports: 15 | - containerPort: 80 16 | -------------------------------------------------------------------------------- /distribute-scripts-and-guides.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # script for internal use by SvV to distribute changes from master kubernetes 3 | # git repo to all git repos that need the same stuff 4 | # to be executed from the "kubernetes" directory 5 | 6 | FILES="SetupGuide.pdf SetupGuideAiO.pdf minikube-docker-setup.sh setup-container.sh setup-kubetools-ubuntu.sh" 7 | REPOS="cka ckad devopsinfourweeks kub4h microservices" 8 | REMOVEME= 9 | 10 | for i in $REPOS 11 | do 12 | for j in $FILES 13 | do 14 | ln $j ../$i/ 15 | done 16 | done 17 | 18 | for k in $REPOS 19 | do 20 | cd ../$k 21 | git add * 22 | git commit -m "automated update of scripts and docs" 23 | git push 24 | done 25 | 26 | -------------------------------------------------------------------------------- /dummy.yaml: -------------------------------------------------------------------------------- 1 | # dummy file 2 | -------------------------------------------------------------------------------- /example-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1beta1 2 | kind: Ingress 3 | metadata: 4 | name: example-ingress 5 | annotations: 6 | nginx.ingress.kubernetes.io/rewrite-target: /$1 7 | spec: 8 | rules: 9 | - host: hello-world.info 10 | http: 11 | paths: 12 | - path: /(.+) 13 | backend: 14 | serviceName: web 15 | servicePort: 8080 16 | -------------------------------------------------------------------------------- /friday.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: busyboxf 5 | namespace: default 6 | spec: 7 | containers: 8 | - image: busybox 9 | name: busy 10 | command: 11 | - sleep 12 | - "3600" 13 | -------------------------------------------------------------------------------- /frontend-resources.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: frontend 5 | spec: 6 | containers: 7 | - name: db 8 | image: mysql 9 | env: 10 | - name: MYSQL_ROOT_PASSWORD 11 | value: "password" 12 | resources: 13 | requests: 14 | memory: "64Mi" 15 | cpu: "250m" 16 | limits: 17 | memory: "128Mi" 18 | cpu: "500m" 19 | - name: wp 20 | image: wordpress 21 | resources: 22 | requests: 23 | memory: "64Mi" 24 | cpu: "250m" 25 | limits: 26 | memory: "128Mi" 27 | cpu: "500m" 28 | -------------------------------------------------------------------------------- /frontend.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: ReplicaSet 3 | metadata: 4 | name: frontend 5 | labels: 6 | app: guestbook 7 | tier: frontend 8 | spec: 9 | # this replicas value is default 10 | # modify it according to your case 11 | replicas: 3 12 | selector: 13 | matchLabels: 14 | tier: frontend 15 | matchExpressions: 16 | - {key: tier, operator: In, values: [frontend]} 17 | template: 18 | metadata: 19 | labels: 20 | app: guestbook 21 | tier: frontend 22 | spec: 23 | containers: 24 | - name: php-redis 25 | image: gcr.io/google_samples/gb-frontend:v3 26 | resources: 27 | requests: 28 | cpu: 100m 29 | memory: 100Mi 30 | env: 31 | - name: GET_HOSTS_FROM 32 | value: dns 33 | # If your cluster config does not include a dns service, then to 34 | # instead access environment variables to find service host 35 | # info, comment out the 'value: dns' line above, and uncomment the 36 | # line below. 37 | # value: env 38 | ports: 39 | - containerPort: 80 40 | -------------------------------------------------------------------------------- /gfs/gfs-endpoints.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Endpoints 3 | metadata: 4 | name: glusterfs-cluster 5 | subsets: 6 | - addresses: 7 | - ip: 194.0.153.14 8 | ports: 9 | - port: 1 10 | - addresses: 11 | - ip: 194.0.153.15 12 | ports: 13 | - port: 1 14 | - addresses: 15 | - ip: 194.0.153.16 16 | ports: 17 | - port: 1 18 | 19 | -------------------------------------------------------------------------------- /gfs/gfs-pod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: glusterfs 5 | spec: 6 | containers: 7 | - name: glusterfs 8 | image: nginx 9 | volumeMounts: 10 | - mountPath: "/mnt/glusterfs" 11 | name: glusterfsvol 12 | volumes: 13 | - name: glusterfsvol 14 | glusterfs: 15 | endpoints: glusterfs-cluster 16 | path: gv0 17 | readOnly: false 18 | -------------------------------------------------------------------------------- /gfs/gfs-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: glusterfs-cluster 5 | spec: 6 | ports: 7 | - port: 1 8 | 9 | -------------------------------------------------------------------------------- /gfs/gluster-docs.txt: -------------------------------------------------------------------------------- 1 | https://github.com/kubernetes/examples/blob/master/volumes/glusterfs/README.md#create-a-pod 2 | https://docs.gluster.org/en/latest/Quick-Start-Guide/Quickstart/ 3 | -------------------------------------------------------------------------------- /gfs/procedure.txt: -------------------------------------------------------------------------------- 1 | 1. on 3 kubernetes nodes, install the gluster server software 2 | 2. apply steps from docs.gluster.org document 3 | 3. 4 | -------------------------------------------------------------------------------- /history-may24.txt: -------------------------------------------------------------------------------- 1 | https://learning.oreilly.com/videos/kubernetes-step-by-step/9780135313022/9780135313022-KSS1_01_08_04/ 2 | -------------------------------------------------------------------------------- /httpd.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: newhttpd 5 | namespace: default 6 | spec: 7 | containers: 8 | - name: httpd 9 | image: httpd 10 | 11 | -------------------------------------------------------------------------------- /ingress-virtual-hosting.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1beta1 2 | kind: Ingress 3 | metadata: 4 | name: name-virtual-host-ingress 5 | spec: 6 | rules: 7 | - host: first.bar.com 8 | http: 9 | paths: 10 | - backend: 11 | serviceName: service1 12 | servicePort: 80 13 | - host: second.foo.com 14 | http: 15 | paths: 16 | - backend: 17 | serviceName: service2 18 | servicePort: 80 19 | - http: 20 | paths: 21 | - backend: 22 | serviceName: service3 23 | servicePort: 80 24 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /labs.txt: -------------------------------------------------------------------------------- 1 | 1. Running Minikube: https://learning.oreilly.com/videos/kubernetes-step-by-step/9780135313022/9780135313022-KSS1_01_03_05/ 2 | 2. Running Apps from a YAML File: https://learning.oreilly.com/videos/kubernetes-step-by-step/9780135313022/9780135313022-KSS1_01_04_05/ 3 | 3. Accessing K8s Applications: https://learning.oreilly.com/videos/kubernetes-step-by-step/9780135313022/9780135313022-KSS1_01_05_05/ 4 | 4. Configuring Storage: https://learning.oreilly.com/videos/kubernetes-step-by-step/9780135313022/9780135313022-KSS1_01_06_05/ 5 | 5. Using ConfigMap: https://learning.oreilly.com/videos/kubernetes-step-by-step/9780135313022/9780135313022-KSS1_01_06_05/ 6 | 6. Managing Microservices: https://learning.oreilly.com/videos/kubernetes-step-by-step/9780135313022/9780135313022-KSS1_01_06_05 7 | -------------------------------------------------------------------------------- /links: -------------------------------------------------------------------------------- 1 | lab1 - installing Minikube: https://learning.oreilly.com/videos/kubernetes-step-by-step/9780135313022/9780135313022-KSS1_01_03_05/ 2 | lab2: - running an app from a YAML file: https://learning.oreilly.com/videos/kubernetes-step-by-step/9780135313022/9780135313022-KSS1_01_04_05/ 3 | lab3 - providing access to applications: https://learning.oreilly.com/videos/kubernetes-step-by-step/9780135313022/9780135313022-KSS1_01_05_05/ 4 | lab 4 - using auto-provisioned storage: https://learning.oreilly.com/videos/kubernetes-step-by-step/9780135313022/9780135313022-KSS1_01_06_05/ 5 | lab 5 - providing configuration to an application: https://learning.oreilly.com/videos/kubernetes-step-by-step/9780135313022/9780135313022-KSS1_01_07_05/ 6 | lab 6- using microservices: https://learning.oreilly.com/videos/kubernetes-step-by-step/9780135313022/9780135313022-KSS1_01_08_05/ 7 | 8 | Additional information: using Kustomize: https://learning.oreilly.com/videos/kubernetes-step-by-step/9780135313022/9780135313022-KSS1_01_08_04/ 9 | -------------------------------------------------------------------------------- /list-pods-mysa-binding.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: RoleBinding 3 | metadata: 4 | name: list-pods-mysa-binding 5 | namespace: default 6 | roleRef: 7 | kind: Role 8 | name: list-pods 9 | apiGroup: rbac.authorization.k8s.io 10 | subjects: 11 | - kind: ServiceAccount 12 | name: mysa 13 | namespace: default 14 | -------------------------------------------------------------------------------- /list-pods.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: rbac.authorization.k8s.io/v1 2 | kind: Role 3 | metadata: 4 | name: list-pods 5 | namespace: default 6 | rules: 7 | - apiGroups: 8 | - '' 9 | resources: 10 | - pods 11 | verbs: 12 | - list 13 | -------------------------------------------------------------------------------- /mar25.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 sudo hostnamectl hostname kube4h 15 | 15 free -m 16 | 16 minikube start --cni=calico 17 | 17 kubectl get all 18 | 18 ls 19 | 19 cat links 20 | 20 minikube dashboard 21 | 21 sudo reboot 22 | 22 git clone https://github.com/sandervanvugt/kubernetes 23 | 23 kubectl get all 24 | 24 cd kubernetes/ 25 | 25 ks 26 | 26 ls 27 | 27 ./minikube-docker-setup.sh --cni=calico 28 | 28 sudo vim /etc/hosts 29 | 29 history 30 | 30 minikube start 31 | 31 minikube dashboard 32 | 32 cd kubernetes/ 33 | 33 history 34 | 34 kubectl create deploy myweb --image=nginx --replicas=3 35 | 35 kubectl get all 36 | 36 kubectl --help 37 | 37 kubectl get all 38 | 38 kubectl --help | less 39 | 39 kubectl create --help | less 40 | 40 kubectl create deploy --help | less 41 | 41 kubectl completion --help | less 42 | 42 source <(kubectl completion bash) 43 | 43 kubectl get pods 44 | 44 kubectl get pods myweb-574d7b7f-8h7mm 45 | 45 kubectl get pods myweb-574d7b7f-8h7mm -o yaml | less 46 | 46 kubectl get deploy myweb -o yaml | less 47 | 47 kubectl api-resources | less 48 | 48 history 49 | 49 kubectl get all 50 | 50 kubectl delete pod myweb-574d7b7f-ztpfg 51 | 51 kubectl get all 52 | 52 kubectl delete deploy tuesday 53 | 53 kubectl get all 54 | 54 kubectl run -h | less 55 | 55 kubectl run nginx --image=nginx 56 | 56 kubectl get all 57 | 57 kubectl delete pod nginx 58 | 58 kubectl get all 59 | 59 kubectl create deploy second --image=nginx --replicas=5 60 | 60 kubectl get all 61 | 61 kubectl get all --show-labels 62 | 62 kubectl get all --selector app=myweb 63 | 63 kubectl delete rs myweb-574d7b7f 64 | 64 kubectl get all --selector app=myweb 65 | 65 kubectl run mydb --image=mariadb 66 | 66 kubectl get pods 67 | 67 kubectl describe pod mydb 68 | 68 kubectl logs mydb 69 | 69 kubectl create deploy mynginx --image=nginx --dry-run=client -o yaml 70 | 70 kubectl create deploy mynginx --image=nginx --dry-run=client -o yaml > mynginx.yaml 71 | 71 kubectl api-resources | grep -i deploy 72 | 72 kubectl explain deploy.spec | less 73 | 73 vim mynginx.yaml 74 | 74 kubectl create deploy --help | less 75 | 75 kubectl apply -f mynginx.yaml 76 | 76 vim mynginx.yaml 77 | 77 kubectl apply -f mynginx.yaml 78 | 78 kubectl delete -f mynginx.yaml 79 | 79 kubectl create -f mynginx.yaml 80 | 80 kubectl delete -f mynginx.yaml 81 | 81 kubectl apply -f mynginx.yaml 82 | 82 vim mynginx.yaml 83 | 83 kubectl get all --selector app=mynginx 84 | 84 kubectl scale deploy mynginx --replicas=5 85 | 85 kubectl get all --selector app=mynginx 86 | 86 kubectl apply -f mynginx.yaml 87 | 87 kubectl get all --selector app=mynginx 88 | 88 history 89 | 89 cat links 90 | 90 kubectl get pods 91 | 91 kubectl get pods -A 92 | 92 kubectl create ns secret 93 | 93 kubectl run pod secretpod --image=nginx -n secret 94 | 94 kubectl get pods 95 | 95 kubectl get pods -n secret 96 | 96 kubectl delete pod -n secret pod 97 | 97 kubectl run secretpod --image=nginx -n secret 98 | 98 kubectl get pods -n secret 99 | 99 kubectl create deploy mydb --image=mariadb --replicas=3 100 | 100 kubectl get all --selector app=mydb 101 | 101 kubectl describe pod mydb-7c9ddb78dc-4q9fs 102 | 102 kubectl logs mydb-7c9ddb78dc-vxh6z 103 | 103 kubectl set env -h | less 104 | 104 kubectl set env deploy/mydb MARIADB_ROOT_PASSWORD=secret 105 | 105 kubectl get all --selector app=mydb 106 | 106 kubectl create deploy nginxsvc --image=nginx 107 | 107 kubectl scale deployment nginxsvc --replicas=3 108 | 108 kubectl get all --selector app=nginxsvc 109 | 109 kubectl expose deploy nginxsvc --port=80 110 | 110 kubectl get all --selector app=nginxsvc 111 | 111 kubectl describe svc nginxsvc 112 | 112 kubectl get pods --selector app=nginxsvc -o wide 113 | 113 kubectl get pods --selector app=nginxsvc --show-labels 114 | 114 kubectl get endpoints 115 | 115 kubectl get svc 116 | 116 curl 10.106.202.218 117 | 117 minikube ssh 118 | 118 kubectl edit svc nginxsvc 119 | 119 kubectl get svc 120 | 120 minikube ip 121 | 121 curl 192.168.49.2:32742 122 | 122 history 123 | 123 cat links 124 | 124 kubectl edit svc nginxsvc 125 | 125 nano dummy 126 | 126 history 127 | 127 kubectl explain pods.spec.volumes | less 128 | 128 vim morevolumes.yaml 129 | 129 kubectl apply -f morevolumes.yaml 130 | 130 kubectl exec -it morevol -c centos1 -- touch /centos1/test 131 | 131 kubectl exec -it morevol -c centos2 -- ls -l /centos2 132 | 132 kubectl get pvc,pv,storageclass 133 | 133 cat pvc.yaml 134 | 134 kubectl apply -f pvc.yaml 135 | 135 kubectl get pvc,pv,storageclass 136 | 136 kubectl get pv 137 | 137 cat pv-pod.yaml 138 | 138 kubectl apply -f pv-pod.yaml 139 | 139 kubectl describe pvc pv-claim 140 | 140 kubectl describe pv pvc-1ef52f07-917d-414f-858e-c2dc5e0704e5 141 | 141 cat pv-pod.yaml 142 | 142 kubectl get pods 143 | 143 kubectl exec -it pv-pod -- touch /usr/share/nginx/html/HELLO 144 | 144 minikube ssh 145 | 145 history 146 | 146 kubectl create deploy mynewdb --image=mariadb --replicas=3 147 | 147 kubectl get pods --selector app=mynewdb 148 | 148 kubectl create cm mynewdbvars --from-literal=MARIADB_ROOT_PASSWORD=password 149 | 149 kubectl describe cm mynewdbvars 150 | 150 kubectl set env --from=configmap/mynewdbvars deploy/mynewdb 151 | 151 kubectl get pods --selector app=mynewdb 152 | 152 kubectl get deployments.apps mynewdb -o yaml | less 153 | 153 minikube addons list 154 | 154 minikube addons enable ingress 155 | 155 kubectl get ns 156 | 156 kubectl get all -n ingress-nginx 157 | 157 kubectl create ing --help | less 158 | 158 kubectl create ing nginxsvc --rule="myapp.info/=nginxsvc:80" 159 | 159 kubectl describe ing nginxsvc 160 | 160 sudo vim /etc/hosts 161 | 161 curl myapp.info 162 | 162 history 163 | 163 ls 164 | 164 cat resources.txt 165 | 165 history > /tmp/mar25.txt 166 | -------------------------------------------------------------------------------- /may25.txt: -------------------------------------------------------------------------------- 1 | 1 minikube start 2 | 2 kubectl get all 3 | 3 minikube dashboard 4 | 4 kubectl create deploy mywebapp --image=nginx --replicas=3 5 | 5 kubectl get all 6 | 6 kubectl describe pod mywebapp-84544db45d-5gwxz 7 | 7 history 8 | 8 kubectl get all 9 | 9 kubectl completion -h | less 10 | 10 kubectl -h | less 11 | 11 kubectl create -h | less 12 | 12 kubectl create deployment -h | less 13 | 13 kubectl get pods 14 | 14 kubectl get pods mywebapp-84544db45d-5gwxz -o yaml | less 15 | 15 kubectl api-resources | less 16 | 16 kubectl get all 17 | 17 kubectl delete pod mywebapp-84544db45d-5gwxz 18 | 18 kubectl get all 19 | 19 kubectl run -h | less 20 | 20 kubectl run allalone --image=nginx 21 | 21 kubectl get all 22 | 22 kubectl delete pod allalone 23 | 23 kubectl get all 24 | 24 kubectl create newdeplooyt --image=nginx 25 | 25 kubectl create deploy newdeplooyt --image=nginx 26 | 26 kubectl get all 27 | 27 kubectl get all --show-labels 28 | 28 kubectl get all --selector app=mywebapp 29 | 29 kubectl run failingpod --image=failingimagethtadoesntexist 30 | 30 kubectl get pods 31 | 31 kubectl describe pod failingpod 32 | 32 kubectl create deploy mydb --image=mariadb --replicas=3 33 | 33 kubectl get all --selector app=mydb 34 | 34 kubectl describe pod mydb-7c9ddb78dc-9b7sj 35 | 35 kubectl logs mydb-7c9ddb78dc-nwgvv 36 | 36 kubectl create declarativenginx --image=nginx --replicas=3 --dry-run=client -o yaml 37 | 37 kubectl create deploy declarativenginx --image=nginx --replicas=3 --dry-run=client -o yaml 38 | 38 kubectl create deploy declarativenginx --image=nginx --replicas=3 --dry-run=client -o yaml > declanginx.yaml 39 | 39 kubectl explain deploy.spec | less 40 | 40 vim declanginx.yaml 41 | 41 sudo apt install -y vim 42 | 42 vim declanginx.yaml 43 | 43 kubectl apply -f declanginx.yaml 44 | 44 kubectl get all 45 | 45 kubectl delete -f declanginx.yaml 46 | 46 history 47 | 47 vim links 48 | 48 git clone https://github.com/sandervanvugt/kubestep 49 | 49 cd kubestep/ 50 | 50 ls 51 | 51 cd labs/ 52 | 52 ls 53 | 53 ./lab2-grade.sh 54 | 54 history 55 | 55 cd 56 | 56 kubectl get ns 57 | 57 kubectl get pods 58 | 58 kubectl get pods -n kube-system 59 | 59 kubectl get all -n kubernetes-dashboard 60 | 60 kubectl create ns secret 61 | 61 kubectl run secretpod --image=nginx -n secret 62 | 62 kubectl get pods 63 | 63 kubectl get pods -n secret 64 | 64 kubectl get pods -A 65 | 65 history 66 | 66 kubectl get pods -n secret secretpod -o yaml | less 67 | 67 kubectl describe pods -n secret secretpod 68 | 68 kubectl get pods 69 | 69 kubectl exec -it mywebapp-84544db45d-8xf8d -- bash 70 | 70 kubectl get all 71 | 71 kubectl describe pod mydb-7c9ddb78dc-9b7sj 72 | 72 kubectl logs mydb-7c9ddb78dc-nwgvv 73 | 73 kubectl set -h | less 74 | 74 kubectl set env -h | less 75 | 75 kubectl get all --selector app=mydb 76 | 76 kubectl create deploy nginxsvc --image=nginx --replicas=3 77 | 77 kubectl get pods --selector app=nginxsvc -o wide 78 | 78 kubectl expose deploy nginxsvc --port=80 79 | 79 kubectl get all --selector app=nginxsvc 80 | 80 kubectl describe svc nginxsvc 81 | 81 kubectl get endpoints 82 | 82 kubectl get svc 83 | 83 curl 10.97.43.66 84 | 84 minikube ssh 85 | 85 kubectl edit svc nginxsvc 86 | 86 kubectl get svc 87 | 87 minikube ip 88 | 88 curl 192.168.49.2:30898 89 | 89 history 90 | 90 kubectl get svc 91 | 91 minikube ip 92 | 92 history 93 | 93 kubectl explain pod.spec.volumes | less 94 | 94 cd kubernetes/ 95 | 95 ls 96 | 96 vim morevolumes.yaml 97 | 97 kubectl apply -f morevolumes.yaml 98 | 98 kubectl get pods 99 | 99 kubectl exec -it morevol -c centos1 -- touch /centos1/demofile 100 | 100 kubectl get pods 101 | 101 kubectl describe pod morevol 102 | 102 kubectl exec -it morevol -c centos1 -- touch /centos1/demofile 103 | 103 kubectl exec -it morevol -c centos2 -- ls /centos2 104 | 104 kubectl get storageclass 105 | 105 kubectl get pv,pvc,storageclass 106 | 106 cat pvc.yaml 107 | 107 kubectl apply -f pvc.yaml 108 | 108 kubectl get pv,pvc,storageclass 109 | 109 vim pv-pod.yaml 110 | 110 kubectl apply -f pv-pod.yaml 111 | 111 vim pv-pod.yaml 112 | 112 kubectl exec -it pv-pod -- touch /usr/share/nginx/html/HELLOFILE 113 | 113 kubectl describe pv pvc-b62cc8d2-bc81-4de6-93f9-99b71c9c6829 114 | 114 minikube ssh 115 | 115 kubectl create deploy mynewdb --image=mariadb --replicas=3 116 | 116 kubectl create cm mynewdbvars --from-literal=MARIADB_ROOT_PASSWORD=password 117 | 117 kubectl describe cm mynewdbvars 118 | 118 kubectl set env --from=configmap/mynewdbvars deploy/mynewdb 119 | 119 kubectl get all 120 | 120 kubectl get pod mynewdb-85f4f6fd4-v46vv -o yaml | less 121 | 121 minikube addons list 122 | 122 minikube addons enable ingress 123 | 123 kubectl get pods -n ingress-nginx 124 | 124 kubectl create ing nginxsvc --rule="myapp.info/=nginxsvc:80" 125 | 125 sudo vim /etc/hosts 126 | 126 curl myapp.info 127 | 127 sudo vim /etc/hosts 128 | 128 curl myapp.info 129 | 129 cd 130 | 130 history > /tmp/may25.txt 131 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /morevolumes.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: morevol 5 | spec: 6 | containers: 7 | - name: centos1 8 | image: centos:7 9 | command: 10 | - sleep 11 | - "3600" 12 | volumeMounts: 13 | - mountPath: /centos1 14 | name: test 15 | - name: centos2 16 | image: centos:7 17 | command: 18 | - sleep 19 | - "3600" 20 | volumeMounts: 21 | - mountPath: /centos2 22 | name: test 23 | volumes: 24 | - name: test 25 | emptyDir: {} 26 | -------------------------------------------------------------------------------- /mypod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: busybox 5 | namespace: default 6 | spec: 7 | containers: 8 | - name: busybox 9 | image: busybox 10 | command: 11 | - sleep 12 | - "3600" 13 | - name: nginx 14 | image: nginx 15 | -------------------------------------------------------------------------------- /newnginx.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: newnginx 7 | type: canary 8 | name: newnginx 9 | spec: 10 | replicas: 1 11 | selector: 12 | matchLabels: 13 | app: newnginx 14 | strategy: {} 15 | template: 16 | metadata: 17 | creationTimestamp: null 18 | labels: 19 | app: newnginx 20 | type: canary 21 | spec: 22 | containers: 23 | - image: nginx 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: newnginx 33 | status: {} 34 | -------------------------------------------------------------------------------- /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:7 13 | command: 14 | - sleep 15 | - "3600" 16 | volumeMounts: 17 | - mountPath: "/nfsshare" 18 | name: nfs-pv 19 | - name: nfs-client2 20 | image: centos:7 21 | command: 22 | - sleep 23 | - "3600" 24 | volumeMounts: 25 | - mountPath: "/nfsshare" 26 | name: nfs-pv 27 | -------------------------------------------------------------------------------- /nfs-pv-pod.yaml.bak: -------------------------------------------------------------------------------- 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: nginx 13 | ports: 14 | - containerPort: 8081 15 | name: "http-server1" 16 | volumeMounts: 17 | - mountPath: "/nfsshare" 18 | name: nfs-pv 19 | - name: nfs-client2 20 | image: nginx 21 | ports: 22 | - containerPort: 8082 23 | name: "http-server2" 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 | - ReadWriteOnce 10 | persistentVolumeReclaimPolicy: Retain 11 | nfs: 12 | path: /storage 13 | server: 192.168.29.142 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 | - ReadWriteOnce 8 | resources: 9 | requests: 10 | storage: 100Mi 11 | -------------------------------------------------------------------------------- /nginx-cm.yml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /nginx-in.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: extensions/v1beta1 2 | kind: Ingress 3 | metadata: 4 | name: nginx-ingress 5 | annotations: 6 | ingress.kubernetes.io/rewrite-target: / 7 | spec: 8 | rules: 9 | - host: 10 | http: 11 | paths: 12 | - path: /nginxserver 13 | backend: 14 | serviceName: nginx 15 | servicePort: 80 16 | -------------------------------------------------------------------------------- /nginx-probes.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: nginx-probes 5 | labels: 6 | role: web 7 | spec: 8 | containers: 9 | - name: nginx-probes 10 | image: nginx 11 | readinessProbe: 12 | tcpSocket: 13 | port: 80 14 | initialDelaySeconds: 5 15 | periodSeconds: 10 16 | livenessProbe: 17 | tcpSocket: 18 | port: 80 19 | initialDelaySeconds: 20 20 | periodSeconds: 20 21 | 22 | -------------------------------------------------------------------------------- /nginxsvc-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1beta1 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 | -------------------------------------------------------------------------------- /nov2024.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 minikube start 15 | 15 kubectl get all 16 | 16 minikube stop 17 | 17 minikube delete 18 | 18 minikube --help | less 19 | 19 minikube start --help | less 20 | 20 #minikube start --memory=4G --cni=calico 21 | 21 free -m 22 | 22 minikube start --memory=3G --cni=calico 23 | 23 minikube dashboard 24 | 24 bg 25 | 25 kubectl get all 26 | 26 kubectl create deploy apptwo --image=nginx --replicas=3 27 | 27 kubectl get all 28 | 28 history 29 | 29 kubectl -h | less 30 | 30 kubectl create -h | less 31 | 31 kubectl create deployment -h | less 32 | 32 kubectl completion -h | less 33 | 33 source <(kubectl completion bash) 34 | 34 kubectl get all 35 | 35 kubectl get pods 36 | 36 kubectl get pods -o wide 37 | 37 kubectl api-resources | less 38 | 38 kubectl get pods -o wide 39 | 39 kubectl get pods 40 | 40 kubectl get pods apptwo-7788f9cd58-zcnjt -o yaml 41 | 41 kubectl explain pod 42 | 42 kubectl explain pod.spec | less 43 | 43 kubectl get events 44 | 44 kubectl get nodes 45 | 45 kubectl run -h | less 46 | 46 kubectl run hazelcast --image=hazelcast/hazelcast --env="DNS_DOMAIN=cluster" --env="POD_NAMESPACE=default" 47 | 47 history 48 | 48 kubect get all 49 | 49 kubectl get all 50 | 50 kubectl delete pod apptwo-7788f9cd58-zcnjt 51 | 51 kubectl get all 52 | 52 kubectl delete pod hazelcast 53 | 53 kubectl get all 54 | 54 kubectl scale deploy apptwo --replicas=10 55 | 55 kubectl get all 56 | 56 kubectl scale deploy apptwo --replicas=2 57 | 57 kubectl get all --show-labels 58 | 58 kubectl get all --selector app=apptwo 59 | 59 kubectl get pods 60 | 60 kubectl describe pod apptwo-7788f9cd58-pb8cz | less 61 | 61 kubectl get nodes 62 | 62 kubectl describe node minikube 63 | 63 kubectl describe node minikube | less 64 | 64 kubectl create deploy mynginx --image=nginx --replicas=3 --dry-run=client -o yaml 65 | 65 kubectl create deploy mynginx --image=nginx --replicas=3 --dry-run=client -o yaml > mynginx.yaml 66 | 66 kubectl create -f mynginx.yaml 67 | 67 vim mynginx.yaml 68 | 68 kubectl create -f mynginx.yaml 69 | 69 kubectl delete -f mynginx.yaml 70 | 70 kubectl apply -f mynginx.yaml 71 | 71 vim mynginx.yaml 72 | 72 kubectl apply -f mynginx.yaml 73 | 73 kubectl explain deploy.spec 74 | 74 vim mynginx.yaml 75 | 75 kubectl apply -f mynginx.yaml 76 | 76* kubectl explain - 77 | 77 kubectl explain --recursive deploy.spec 78 | 78 history 79 | 79 kubectl get ns 80 | 80 kubectl get pods 81 | 81 kubectl get pods -n kubernetes-dashboard 82 | 82 kubectl get all -n kubernetes-dashboard 83 | 83 kubectl get pods -A 84 | 84 kubectl create ns secret 85 | 85 kubectl run secretpod -n secret --image=nginx 86 | 86 kubectl get pods 87 | 87 kubectl get pods -n secret 88 | 88 history 89 | 89 kubectl create deploy mydb --image=mariadb --replicas=3 90 | 90 kubectl get all --selector app=mydb 91 | 91 kubectl describe pod mydb-7d665fb947-6hr89 92 | 92 kubectl logs mydb-7d665fb947-t5j26 93 | 93 kubectl get all --selector app=mydb 94 | 94 kubectl set env -h | less 95 | 95 kubectl set env deploy/mydb MARIADB_ROOT_PASSWORD=password 96 | 96 kubectl get all --selector app=mydb 97 | 97 kubectl exec -it mydb-dcbc9b8f7-vtssg -- sh 98 | 98 kubectl create deploy nginxsvc --image=nginx 99 | 99 kubectl get all --selector app=nginxsvc 100 | 100 kubectl scale deploy nginxsvc --replicas=3 101 | 101 kubectl get all --selector app=nginxsvc 102 | 102 kubectl expose deployment nginxsvc --port=80 103 | 103 kubectl get all --selector app=nginxsvc 104 | 104 kubectl describe svc nginxsvc 105 | 105 kubectl get endpoints 106 | 106 kubectl get pods -o wide --selector app=nginxsvc 107 | 107 curl 10.108.1.131 108 | 108 minikube -h | less 109 | 109 minikube ssh 110 | 110 kubectl edit svc nginxsvc 111 | 111 kubectl get svc 112 | 112 minikube ip 113 | 113 curl 192.169.49.2:31022 114 | 114 ping 192.168.49.2 115 | 115 curl 192.168.49.2:31022 116 | 116 curl $(minikube ip):31022 117 | 117 kubectl edit svc nginxsvc 118 | 118 curl $(minikube ip):31022 119 | 119 kubectl get svc 120 | 120 kubectl describe svc nginxsvc 121 | 121 kubectl edit svc nginxsvc 122 | 122 history 123 | 123 kubectl create deploy oldweb --image=nginx:1.17 --replicas=3 124 | 124 kubectl get all --selector app=oldweb 125 | 125 kubectl get pods oldweb-68c59c98b7-t4swh -o yaml | less 126 | 126 kubectl set image -h | less 127 | 127 #kubectl set image deployment/nginx busybox=busybox nginx=nginx:1.9.1 128 | 128 kubectl set image deployment/oldweb nginx=nginx:latest 129 | 129 kubectl get all --selector app=oldweb 130 | 130 history 131 | 131 kubectl explain pods.spec.volumes | less 132 | 132 ls 133 | 133 ls *vol* 134 | 134 cat basicvolume.yaml 135 | 135 vim morevolumes.yaml 136 | 136 kubectl apply -f morevolumes.yaml 137 | 137 kubectl get pods 138 | 138 kubectl exec -it morevol -c centos1 -- touch /centos1/fileone 139 | 139 kubectl exec -it morevol -c centos2 -- ls -l /centos2/ 140 | 140 kubectl get pv,pvc,storageclass 141 | 141 vim pvc.yaml 142 | 142 kubectl apply -f pvc.yaml 143 | 143 kubectl get pv,pvc,storageclass 144 | 144 vim pv-pod.yaml 145 | 145 kubectl apply -f pv-pod.yaml 146 | 146 kubectl describe pvc pv-claim 147 | 147 cat pv-pod.yaml 148 | 148 kubectl exec -it pv-pod -- touch /usr/share/nginx/html/HELLOGINX 149 | 149 kubectl get pv,pvc,storageclass 150 | 150 kubectl describe pv pvc-971b2552-46b6-4715-8ab1-c9a279efd220 151 | 151 minikube ssh 152 | 152 ls 153 | 153 less resources.txt 154 | 154 kubectl create deploy mynewdb --image=mysql --replicas=3 155 | 155 kubectl get pods --selector app=mynewdb 156 | 156 kubectl create cm mynewdbvars --from-literal=MYSQL_ROOT_PASSWORD=password 157 | 157 kubectl describe cm mynewdbvars 158 | 158 kubectl set env --from=configmap/mynewdbvars deploy/mynewdb 159 | 159 kubectl get all --selector app=mynewdb 160 | 160 kubectl get pods mynewdb-55c95456f6-jnx6d -o yaml | less 161 | 161 minikube addons list 162 | 162 minikube addons enable ingress 163 | 163 kubectl get ns 164 | 164 kubectl get pods -n ingress-nginx 165 | 165 kubectl create ing -h | less 166 | 166 kubectl create ing nginxsvc --rule="myapp.info/=nginxsvc:80" 167 | 167 kubectl describe ing nginxsvc 168 | 168 sudo vim /etc/hosts 169 | 169 curl myapp.info 170 | 170 kubectl get pods -n kube-system 171 | 171 kubectl explain --recursive pod.spec | less 172 | 172 kubectl run testpod --image=nginx --dry-run=client -o yaml > testpod.yaml 173 | 173 vim testpod.yaml 174 | 174 kubectl apply -f testpod.yaml 175 | 175 kubectl explain --recursive pod.spec | less 176 | 176 vim testpod.yaml 177 | 177 kubectl get nodes 178 | 178 vim testpod.yaml 179 | 179 kubectl apply -f testpod.yaml 180 | 180 vim testpod.yaml 181 | 181 kubectl apply -f testpod.yaml 182 | 182 kubectl get pods 183 | 183 kubectl describe pod testpod 184 | 184 history > /tmp/nov2024.txt 185 | -------------------------------------------------------------------------------- /oldnginx.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | creationTimestamp: null 5 | labels: 6 | app: oldnginx 7 | type: canary 8 | name: oldnginx 9 | spec: 10 | replicas: 3 11 | selector: 12 | matchLabels: 13 | app: oldnginx 14 | strategy: {} 15 | template: 16 | metadata: 17 | creationTimestamp: null 18 | labels: 19 | app: oldnginx 20 | type: canary 21 | spec: 22 | containers: 23 | - image: nginx:1.15 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: oldnginx 33 | status: {} 34 | -------------------------------------------------------------------------------- /pod-secret-as-var.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: mymysql 5 | namespace: default 6 | spec: 7 | containers: 8 | - name: mysql 9 | image: mysql:latest 10 | env: 11 | - name: MYSQL_ROOT_PASSWORD 12 | valueFrom: 13 | secretKeyRef: 14 | name: mysql 15 | key: password 16 | -------------------------------------------------------------------------------- /pod-secret.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: secretbox2 5 | namespace: default 6 | spec: 7 | containers: 8 | - name: secretbox 9 | image: busybox 10 | command: 11 | - sleep 12 | - "3600" 13 | volumeMounts: 14 | - mountPath: /secretstuff 15 | name: secret 16 | volumes: 17 | - name: secret 18 | secret: 19 | secretName: secretstuff 20 | -------------------------------------------------------------------------------- /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-nfs.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolume 3 | metadata: 4 | name: pv-nfs 5 | spec: 6 | capacity: 7 | storage: 1Gi 8 | accessModes: 9 | - ReadWritemany 10 | persistentVolumeReclaimPolicy: Retain 11 | nfs: 12 | path: /data 13 | server: myserver 14 | readOnly: false 15 | -------------------------------------------------------------------------------- /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.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 | -------------------------------------------------------------------------------- /redis-deploy.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: apps/v1beta1 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 | -------------------------------------------------------------------------------- /replicaset.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: ReplicaSet 3 | metadata: 4 | name: rsdemo 5 | spec: 6 | replicas: 2 7 | selector: 8 | matchLabels: 9 | app: myapp 10 | template: 11 | metadata: 12 | name: nginxrs 13 | labels: 14 | app: myapp 15 | spec: 16 | containers: 17 | - name: nginx 18 | image: nginx 19 | -------------------------------------------------------------------------------- /resources.txt: -------------------------------------------------------------------------------- 1 | RECORDED COURSES 2 | Kubernetes Step-by-step: https://learning.oreilly.com/course/kubernetes-step-by-step/9780135313022/ 3 | Hands-on Kubernetes: https://learning.oreilly.com/videos/hands-on-kubernetes/9780136702887/ 4 | Getting Started with Kubernetes 3rd Edition: https://learning.oreilly.com/videos/getting-started-with/9780138057626/ 5 | Kubernetes and Cloud Native Associate: https://learning.oreilly.com/videos/kubernetes-and-cloud/9780137993413/ 6 | CKAD 4th/ edition: https://learning.oreilly.com/course/certified-kubernetes-application/9780135349700/ 7 | CKA 4th edition: https://learning.oreilly.com/course/certified-kubernetes-administrator/9780135375129/ 8 | Automating Kubernetes with GitOps: https://learning.oreilly.com/videos/automating-kubernetes-with/9780138230258/ 9 | Kubernetes from Basics to Guru: https://learning.oreilly.com/videos/automating-kubernetes-with/9780138230258/ 10 | 11 | HANDS ON LABS 12 | CKAD Labs: https://learning.oreilly.com/playlists/ea6ea0fc-d8e2-422c-94dd-a0a8f608d224/ 13 | 14 | LIVE COURSES 15 | CKAD in 8 hours: https://learning.oreilly.com/live-events/ckad-in-8-hours-certified-kubernetes-application-developer-crash-course/0642572001348/ 16 | CKA in 6 hours: https://learning.oreilly.com/live-events/ckad-in-8-hours-certified-kubernetes-application-developer-crash-course/0642572001348/ 17 | Integrating Kubernetes Applications: https://learning.oreilly.com/live-events/integrating-kubernetes-applications/0790145087226/0790145087218/ 18 | Building Microservices with Containers, Kubernetes and Istio: https://learning.oreilly.com/live-events/building-microservices-with-containers-kubernetes-and-istio/0636920408468/ 19 | -------------------------------------------------------------------------------- /sandertest/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine 2 | MAINTAINER Sander 3 | 4 | # Add a file 5 | ADD ./sander.repo /etc/yum.repos.d/ 6 | 7 | # Install cool software 8 | RUN apk add procps 9 | 10 | CMD ["ps", "aux"] 11 | -------------------------------------------------------------------------------- /sandertest/sander.repo: -------------------------------------------------------------------------------- 1 | # repo 2 | -------------------------------------------------------------------------------- /securitycontextdemo.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: nginxsecure 5 | spec: 6 | securityContext: 7 | runAsNonRoot: true 8 | containers: 9 | - image: nginx 10 | name: nginx 11 | -------------------------------------------------------------------------------- /service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: mywebserver 5 | spec: 6 | selector: 7 | run: nginx 8 | ports: 9 | - port: 80 10 | name: whatever 11 | type: NodePort 12 | -------------------------------------------------------------------------------- /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 | cat <<- TOML | sudo tee /etc/containerd/config.toml 75 | version = 2 76 | [plugins] 77 | [plugins."io.containerd.grpc.v1.cri"] 78 | [plugins."io.containerd.grpc.v1.cri".containerd] 79 | discard_unpacked_layers = true 80 | [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] 81 | [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] 82 | runtime_type = "io.containerd.runc.v2" 83 | [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] 84 | SystemdCgroup = true 85 | TOML 86 | 87 | # Restart containerd 88 | sudo systemctl restart containerd 89 | fi 90 | 91 | -------------------------------------------------------------------------------- /setup-docker.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # script that runs 3 | # https://kubernetes.io/docs/setup/production-environment/container-runtime 4 | 5 | yum install -y vim yum-utils device-mapper-persistent-data lvm2 6 | yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 7 | 8 | # notice that only verified versions of Docker may be installed 9 | # verify the documentation to check if a more recent version is available 10 | 11 | yum install -y docker-ce 12 | [ ! -d /etc/docker ] && mkdir /etc/docker 13 | 14 | cat > /etc/docker/daemon.json < /etc/sysctl.d/k8s.conf 50 | #net.bridge.bridge-nf-call-ip6tables = 1 51 | #net.bridge.bridge-nf-call-iptables = 1 52 | #EOF 53 | #sudo sysctl --system 54 | 55 | sudo crictl config --set \ 56 | runtime-endpoint=unix:///run/containerd/containerd.sock 57 | echo 'after initializing the control node, follow instructions and use kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml to install the calico plugin (control node only). On the worker nodes, use sudo kubeadm join ... to join' 58 | 59 | 60 | -------------------------------------------------------------------------------- /simpleshell.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: shell-demo 5 | spec: 6 | containers: 7 | - name: nginx 8 | image: nginx 9 | env: 10 | - name: ilike 11 | valueFrom: 12 | configMapKeyRef: 13 | name: colors 14 | key: favorite 15 | -------------------------------------------------------------------------------- /statefulset.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: nginx 5 | labels: 6 | app: nginx 7 | spec: 8 | ports: 9 | - port: 80 10 | name: web 11 | clusterIP: None 12 | selector: 13 | app: nginx 14 | --- 15 | apiVersion: apps/v1 16 | kind: StatefulSet 17 | metadata: 18 | name: web 19 | spec: 20 | selector: 21 | matchLabels: 22 | app: nginx # has to match .spec.template.metadata.labels 23 | serviceName: "nginx" 24 | replicas: 3 # by default is 1 25 | minReadySeconds: 10 # by default is 0 26 | template: 27 | metadata: 28 | labels: 29 | app: nginx # has to match .spec.selector.matchLabels 30 | spec: 31 | terminationGracePeriodSeconds: 10 32 | containers: 33 | - name: nginx 34 | image: k8s.gcr.io/nginx-slim:0.8 35 | ports: 36 | - containerPort: 80 37 | name: web 38 | volumeMounts: 39 | - name: www 40 | mountPath: /usr/share/nginx/html 41 | volumeClaimTemplates: 42 | - metadata: 43 | name: www 44 | spec: 45 | accessModes: [ "ReadWriteOnce" ] 46 | storageClassName: "my-storage-class" 47 | resources: 48 | requests: 49 | storage: 1Gi 50 | -------------------------------------------------------------------------------- /variables: -------------------------------------------------------------------------------- 1 | VAR1=Hello 2 | VAR2=World 3 | -------------------------------------------------------------------------------- /volumes.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: vol2 5 | spec: 6 | containers: 7 | - name: centos2 8 | image: centos:7 9 | command: 10 | - sleep 11 | - "3600" 12 | volumeMounts: 13 | - mountPath: /test 14 | name: test 15 | restartPolicy: Always 16 | volumes: 17 | - name: test 18 | emptyDir: {} 19 | -------------------------------------------------------------------------------- /zam-0325.txt: -------------------------------------------------------------------------------- 1 | 1 sudo apt update 2 | 2 sudo apt install docker.io 3 | 3 cat /etc/os-release 4 | 4 sudo apt install docker.io 5 | 5 systemctl status dockerd 6 | 6 systemctl status docker 7 | 7 docker run -d nginx 8 | 8 id 9 | 9 usermod -aG docker student 10 | 10 sudo usermod -aG docker student 11 | 11 id 12 | 12 sudo reboot 13 | 13 id 14 | 14 docker run -it nginx 15 | 15 docker ps 16 | 16 docker ps -a 17 | 17 docker start -d competent_dijkstra 18 | 18 docker start competent_dijkstra 19 | 19 docker ps 20 | 20 docker exec -it competent_dijkstra sh 21 | 21 docker ps 22 | 22 docker run -it busybox 23 | 23 docker ps 24 | 24 exit 25 | 25 docker ps 26 | 26 docker ps -a 27 | 27 docker run -it busybox 28 | 28 docker ps 29 | 29 history 30 | 30 docker ps 31 | 31 docker inspect c63 32 | 32 docker inspect c63 | less 33 | 33 docker images 34 | 34 docker inspect cfc | less 35 | 35 docker run -d mariadb 36 | 36 docker ps 37 | 37 docker ps -a 38 | 38 docker logs ecstatic_chebyshev 39 | 39 history 40 | 40 docker ps 41 | 41 docker logs ecstatic_chebyshev 42 | 42 docker run --help | less 43 | 43 docker run mariadb -m 128M -e MARIADB_ROOT_PASSWORD=password -d 44 | 44 docker run -m 128M -e MARIADB_ROOT_PASSWORD=password -d mariadb 45 | 45 docker ps 46 | 46 docker -a 47 | 47 docker ps -a 48 | 48 docker logs admiring_villani 49 | 49 docker run -m 1G -e MARIADB_ROOT_PASSWORD=password -d mariadb 50 | 50 docker ps 51 | 51 history 52 | 52 docker images 53 | 53 docker ps -a 54 | 54 docker rm 41a 55 | 55 docker ps -a 56 | 56 docker rm b641 57 | 57 sudo find / -name "269*" 2>/dev/null 58 | 58 docker ps -a 59 | 59 sudo find / -name "2694139*" 2>/dev/null 60 | 60 ps faux | less 61 | 61 docker ps 62 | 62 curl localhost:80 63 | 63 sudo apt install curl 64 | 64 curl localhost:80 65 | 65 docker run --help | less 66 | 66 docker run -d -p 8080:80 nginx 67 | 67 docker ps 68 | 68 curl localhost:8080 69 | 69 history 70 | 70 docker ps 71 | 71 docker stop 26941 72 | 72 docker rm 26941 73 | 73 lsblk 74 | 74 sudo mount /dev/sda1 /mnt 75 | 75 cd /mnt 76 | 76 ls 77 | 77 cd 78 | 78 sudo umount /mnt 79 | 79 ls /mnt 80 | 80 mkdir mariadb 81 | 81 docker run --rm -d --name=mariadb -v /home/student/mariadb:/var/lib/mysql -e MARIADB_ROOT_PASSWORD mariadb 82 | 82 docker run --rm -d --name=mariadb -v /home/student/mariadb:/var/lib/mysql -e MARIADB_ROOT_PASSWORD=password mariadb 83 | 83 docker ps 84 | 84 ls mariadb/ 85 | 85 docker stop mariadb 86 | 86 ls mariadb/ 87 | 87 docker ps -a 88 | 88 history 89 | 89 docker run -it -v /:/mnt busybox 90 | 90 got clone https://github.com/sandervanvugt/containers 91 | 91 git clone https://github.com/sandervanvugt/containers 92 | 92 cd containers/ 93 | 93 ls 94 | 94 cd dockerfile/ 95 | 95 ls 96 | 96 vim Dockerfile 97 | 97 docker build -t nmap . 98 | 98 docker images 99 | 99 docker run nmap 100 | 100 vim Dockerfile 101 | 101 docker run -it nginx bash 102 | 102 docker run -it nmap sh 103 | 103 vim Dockerfile 104 | 104 docker build -t nmap . 105 | 105 docker run -it nmap sh 106 | 106 docker images 107 | 107 cd .. 108 | 108 cd alpmap/ 109 | 109 ls 110 | 110 vim Dockerfile 111 | 111 docker build -t alpmap . 112 | 112 docker images 113 | 113 history 114 | 114 sudo poweroff 115 | 115 ssh student@192.168.29.148 116 | 116 git clone https://github.com/sandervanvugt/containers 117 | 117 cd containers/ 118 | 118 ./countdown 7 119 | 119 vim countdown 120 | 120 sudo apt install -y vim 121 | 121 vim countdown 122 | 122 ./countdown 6 123 | 123 ./countdown 6 lab 124 | 124 ./countdown 10 lab 125 | 125 ./countdown 30 lab-and-break 126 | 126 ./countdown 12 lab 127 | 127 ./countdown 15 lab 128 | 128 minikube start 129 | 129 sudo systemctl restart docker 130 | 130 systemctl daemon-reload 131 | 131 systemctl status docker 132 | 132 minikube start 133 | 133 kubectl get all 134 | 134 ls 135 | 135 minikube dashboard 136 | 136 bg 137 | 137 kubectl get all 138 | 138 kubectl create deploy zam02 --image=nginx --replicas=3 139 | 139 kubectl get all 140 | 140 history 141 | 141 vim install-minikube-on-ubu.txt 142 | 142 cat install-minikube-on-ubu.txt 143 | 143 kubectl --help 144 | 144 kubectl --help | less 145 | 145 kubectl create --help | less 146 | 146 kubectl create deploy --help | less 147 | 147 kubectl completion --help | less 148 | 148 kubectl get pods 149 | 149 kubectl get pods zam01-5c6dc44d4d-4vvj8 -o yaml | less 150 | 150 kubectl run -h | less 151 | 151 kubectl run nginx --image=nginx 152 | 152 kubectl get all 153 | 153 kubectl delete pod zam01-5c6dc44d4d-4vvj8 154 | 154 kubectl get all 155 | 155 kubectl delete pod nginx 156 | 156 kubectl get all 157 | 157 kubectl delete deploy zam01 158 | 158 kubectl get all 159 | 159 history 160 | 160 kubectl create deploy zam03 --image=nginx --replicas=3 --dry-run=client -o yaml 161 | 161 kubectl create deploy zam03 --image=nginx --replicas=3 --dry-run=client -o yaml > zam03.yaml 162 | 162 vim zam03.yaml 163 | 163 kubectl apply -f zam03.yaml 164 | 164 kubectl get all --selector app=zam03 165 | 165 kubectl explain Deploy | less 166 | 166 kubectl explain deploy | less 167 | 167 kubectl explain deploy.spec | less 168 | 168 vim zam03.yaml 169 | 169 kubectl apply -f zam03.yaml 170 | 170 cat zam03.yaml 171 | 171 history 172 | 172 kubectl create deploy mydb --image=mariadb 173 | 173 kubectl get all --selector app=mydb 174 | 174 kubectl describe pod mydb-7c9ddb78dc-hl2lt | less 175 | 175 kubectl get all --selector app=mydb 176 | 176 kubectl delete deploy mydb 177 | 177 kubectl create deploy mydb --image=mariadb 178 | 178 kubectl get all --selector app=mydb 179 | 179 watch kubectl get all --selector app=mydb 180 | 180 sudo reboot 181 | 181 git clone https://github.com/sandervanvugt/kubernetes 182 | 182 cd kubernetes/ 183 | 183 ls 184 | 184 ./minikube-docker-setup.sh 185 | 185 minikube start 186 | 186 sudo reboot 187 | 187 minikube start 188 | 188 kubectl create deploy twodb --image=docker.io/library/mariadb 189 | 189 kubectl get all --selector app=twodb 190 | 190 kubectl describe pod twodb-85b4fc4c7b-lz7rd 191 | 191 kubectl get all --selector app=twodb 192 | 192 kubectl describe pod twodb-85b4fc4c7b-lz7rd 193 | 193 ping nu.nl 194 | 194 kubectl get all 195 | 195 kubectl describe pod mydb-7c9ddb78dc-94jjr 196 | 196 kubectl get pods 197 | 197 kubectl create deploy newdb --image=mariadb 198 | 198 kubectl delete deploy mydb twodb 199 | 199 kubectl get pods 200 | 200 kubectl describe pod newdb-8567f7c987-lwwbw 201 | 201 kubectl get pods 202 | 202 kubectl describe pod newdb-8567f7c987-lwwbw 203 | 203 kubectl logs newdb-8567f7c987-lwwbw 204 | 204 history 205 | 205 kubectl get all 206 | 206 kubectl create deploy nginxsvc --image=nginx 207 | 207 kubectl get all --selector app=nginxsvc 208 | 208 kubectl scale deploy nginxsvc --replicas=3 209 | 209 kubectl get all --selector app=nginxsvc -o wide 210 | 210 kubectl expose deploy nginxsvc --port=80 211 | 211 kubectl describe svc nginxsvc 212 | 212 curl 10.98.46.124 213 | 213 kubectl get svc 214 | 214 kubectl get endpoints 215 | 215 minikube ssh 216 | 216 kubectl edit svc nginxsvc 217 | 217 kubectl get svc 218 | 218 minikube ip 219 | 219 ip a 220 | 220 minikube ssh 221 | 221 kubectl edit svc nginxsvc 222 | 222 kubectl get svc 223 | 223 curl 192.168.49.2:32445 224 | 224 history 225 | 225 kubectl edit svc nginxsvc 226 | 226 kubectl get pods 227 | 227 kubectl create cm newdbvars --from-literal=MARIADB_ROOT_PASSWORD=password 228 | 228 kubectl describe cm configmap newdbvars 229 | 229 kubectl describe cm newdbvars 230 | 230 kubectl get all --selector app=newdb 231 | 231 kubectl set env -h | less 232 | 232 kubectl set env --from=configmap/newdbvars deploy/newdb 233 | 233 kubectl get all --selector app=newdb 234 | 234 kubectl get deploy newdb -o yaml | less 235 | 235 kubectl create cm newdbvars --from-literal=MARIADB_ROOT_PASSWORD=password --dry-run=client -o yaml 236 | 236 kubectl get deploy newdb -o yaml | less 237 | 237 kubectl expose deploy newdb --type=NodePort --port=3306 238 | 238 kubectl get svc 239 | 239 minikube addons list 240 | 240 minikube addons enable ingress 241 | 241 kubectl get pods -n ingress-nginx 242 | 242 kubectl create ing nginxsvc --rule="myapp.info/=nginxsvc:80" 243 | 243 sudo vim /etc/hosts 244 | 244 curl myapp.info 245 | 245 kubectl describe ing nginxsvc 246 | 246 kubectl scale deploy nginxsvc --replicas=5 247 | 247 kubectl describe ing nginxsvc 248 | 248 history 249 | 249 history > /tmp/zam-0325.txt 250 | --------------------------------------------------------------------------------