From 44a787f342f84712ab3aba5326a7132505997ca5 Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Tue, 4 Apr 2023 09:11:30 +0200 Subject: [PATCH 01/50] message --- setup-kubetools-specific-version.sh | 3 +++ setup-kubetools.sh | 2 ++ 2 files changed, 5 insertions(+) diff --git a/setup-kubetools-specific-version.sh b/setup-kubetools-specific-version.sh index a2c5eb9..5712c21 100755 --- a/setup-kubetools-specific-version.sh +++ b/setup-kubetools-specific-version.sh @@ -42,5 +42,8 @@ net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system +sudo crictl config --set \ + runtime-endpoint=unix:///run/containerd/containerd.sock + echo 'after initializing the control node, follow instructions and use kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml to install the calico plugin (control node only). On the worker nodes, use sudo kubeadm join ... to join' diff --git a/setup-kubetools.sh b/setup-kubetools.sh index 096b645..24a3cdf 100755 --- a/setup-kubetools.sh +++ b/setup-kubetools.sh @@ -43,4 +43,6 @@ net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system +sudo crictl config --set \ + runtime-endpoint=unix:///run/containerd/containerd.sock echo 'after initializing the control node, follow instructions and use kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml to install the calico plugin (control node only). On the worker nodes, use sudo kubeadm join ... to join' From ba846c37adecf372c6921de11b1dc8d206745617 Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Wed, 5 Apr 2023 07:53:33 +0200 Subject: [PATCH 02/50] message --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index dbebd54..26cc585 100644 --- a/README.md +++ b/README.md @@ -1 +1,8 @@ # files for my CKA online course + +In this course you need to have your own lab environment. This lab environment should consist of 3 virtual machines, using Ubuntu LTS server 20.4 or later (22.4 is recommended) +Make sure the virtual machines meet the following requirements +* 2GB RAM +* 2 vCPUs +* 10 GB disk space +* No swap From 33b033c0ed32cf07cfccced7f8bee548ecfd118c Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Wed, 5 Apr 2023 08:32:24 +0200 Subject: [PATCH 03/50] message --- Installing Ubuntu Server 22-04.pdf | Bin 0 -> 369314 bytes README.md | 1 + 2 files changed, 1 insertion(+) create mode 100644 Installing Ubuntu Server 22-04.pdf diff --git a/Installing Ubuntu Server 22-04.pdf b/Installing Ubuntu Server 22-04.pdf new file mode 100644 index 0000000000000000000000000000000000000000..745bf9712757e6267f4bab25c00d27eb50c7a9ef GIT binary patch literal 369314 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

@9S|77 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

IU7 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

    NEIJ?w}L6DYC>wHHj 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�UoaE&R2=E}rtf8@YzaS+HeO!~FLoBA)6( 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

    0E>g63J&)1&-)%l%n&UL?raWD&))9pyteW+WpAB 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 26cc585..bfa134d 100644 --- a/README.md +++ b/README.md @@ -6,3 +6,4 @@ Make sure the virtual machines meet the following requirements * 2 vCPUs * 10 GB disk space * No swap +For instructions on how to set up Ubuntu Server 22.04, see the document "Installing Ubuntu 22-04" in this Git repository. From 0cff47d6828425ef2fa109a2b9f178f2976e81ea Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Wed, 5 Apr 2023 09:01:01 +0200 Subject: [PATCH 04/50] message --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bfa134d..74a7309 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# files for my CKA online course +This Git repository contains supporting files for my "Certified Kubernetes Administrator (CKA)" video course. It is also used in the "CKA Crash Course" that I'm teaching at learning.oreilly.com. In this course you need to have your own lab environment. This lab environment should consist of 3 virtual machines, using Ubuntu LTS server 20.4 or later (22.4 is recommended) Make sure the virtual machines meet the following requirements From 04fbb35ec6eb377921114a48d4d9555abb11bad3 Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Wed, 5 Apr 2023 09:21:41 +0200 Subject: [PATCH 05/50] message --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 74a7309..d9b4dea 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -This Git repository contains supporting files for my "Certified Kubernetes Administrator (CKA)" video course. It is also used in the "CKA Crash Course" that I'm teaching at learning.oreilly.com. +This Git repository contains supporting files for my "Certified Kubernetes Administrator (CKA)" video course. See https://sandervanvugt.com for more details. It is also used in the "CKA Crash Course" that I'm teaching at https://learning.oreilly.com. In this course you need to have your own lab environment. This lab environment should consist of 3 virtual machines, using Ubuntu LTS server 20.4 or later (22.4 is recommended) Make sure the virtual machines meet the following requirements From d3307bd3395e9948d33909bc0eac18f1c95cba76 Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Tue, 18 Apr 2023 08:02:00 +0200 Subject: [PATCH 06/50] message --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index d9b4dea..e9c948c 100644 --- a/README.md +++ b/README.md @@ -7,3 +7,4 @@ Make sure the virtual machines meet the following requirements * 10 GB disk space * No swap For instructions on how to set up Ubuntu Server 22.04, see the document "Installing Ubuntu 22-04" in this Git repository. +For information on getting started with VirtualBox, see this video: https://www.youtube.com/watch?v=4qwUHSaIJdY From 92cd3046381498f5d9e6978ef85729983c7983d2 Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Tue, 23 May 2023 06:41:39 -0400 Subject: [PATCH 07/50] message --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index e9c948c..274ea2b 100644 --- a/README.md +++ b/README.md @@ -8,3 +8,5 @@ Make sure the virtual machines meet the following requirements * No swap For instructions on how to set up Ubuntu Server 22.04, see the document "Installing Ubuntu 22-04" in this Git repository. For information on getting started with VirtualBox, see this video: https://www.youtube.com/watch?v=4qwUHSaIJdY + +MAY 2023 NOTE: The Calico network plugin has been changing a lot lately. I recommend following the instructions at https://docs.tigera.io/calico/latest/getting-started/kubernetes/quickstart to install the Calico network plugin. From e9b61ef6eb52231b0134add5dc6f0888d5b43d63 Mon Sep 17 00:00:00 2001 From: Johannes Engler Date: Thu, 1 Jun 2023 09:33:27 +0200 Subject: [PATCH 08/50] changed disk size in README to 20 GB --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 274ea2b..5a811e8 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ In this course you need to have your own lab environment. This lab environment s Make sure the virtual machines meet the following requirements * 2GB RAM * 2 vCPUs -* 10 GB disk space +* 20 GB disk space * No swap For instructions on how to set up Ubuntu Server 22.04, see the document "Installing Ubuntu 22-04" in this Git repository. For information on getting started with VirtualBox, see this video: https://www.youtube.com/watch?v=4qwUHSaIJdY From 7f7b684c47c96f3d7f620e225861b6e3e9fef338 Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Fri, 2 Jun 2023 15:55:21 +0200 Subject: [PATCH 09/50] message --- setup-calico.sh | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 setup-calico.sh diff --git a/setup-calico.sh b/setup-calico.sh new file mode 100644 index 0000000..0e9bbfa --- /dev/null +++ b/setup-calico.sh @@ -0,0 +1,3 @@ +kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.0/manifests/tigera-operator.yaml +kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.0/manifests/custom-resources.yaml +kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.0/manifests/calico.yaml From d3802a27d9138277136d31e56ad33c42038103ad Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Fri, 9 Jun 2023 13:26:44 +0200 Subject: [PATCH 10/50] message --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5a811e8..1b839cf 100644 --- a/README.md +++ b/README.md @@ -9,4 +9,8 @@ Make sure the virtual machines meet the following requirements For instructions on how to set up Ubuntu Server 22.04, see the document "Installing Ubuntu 22-04" in this Git repository. For information on getting started with VirtualBox, see this video: https://www.youtube.com/watch?v=4qwUHSaIJdY -MAY 2023 NOTE: The Calico network plugin has been changing a lot lately. I recommend following the instructions at https://docs.tigera.io/calico/latest/getting-started/kubernetes/quickstart to install the Calico network plugin. +JUNE 2023 NOTE: The Calico network plugin has been changing a lot lately. I recommend using the following command to install it: + +kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.0/manifests/calico.yaml + +For more information, see the instructions at https://docs.tigera.io/calico/latest/getting-started/kubernetes/quickstart to install the Calico network plugin. From 50bf7f49750c2f798c325bf55d75640c962e5807 Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Fri, 9 Jun 2023 13:30:06 +0200 Subject: [PATCH 11/50] cleanup --- setup-kubetools-new-PRERELEASE.sh | 68 ------------------------------- 1 file changed, 68 deletions(-) delete mode 100755 setup-kubetools-new-PRERELEASE.sh diff --git a/setup-kubetools-new-PRERELEASE.sh b/setup-kubetools-new-PRERELEASE.sh deleted file mode 100755 index 54c484f..0000000 --- a/setup-kubetools-new-PRERELEASE.sh +++ /dev/null @@ -1,68 +0,0 @@ -#!/bin/bash -# kubeadm installation instructions as on -# https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ - -# this script supports centos 7 and Ubuntu 20.04 only -# run this script with sudo - -if ! [ $USER = root ] -then - echo run this script with sudo - exit 3 -fi - -# setting MYOS variable -MYOS=$(hostnamectl | awk '/Operating/ { print $3 }') -OSVERSION=$(hostnamectl | awk '/Operating/ { print $4 }') - -##### CentOS 7 config -if [ $MYOS = "CentOS" ] -then - echo RUNNING CENTOS CONFIG - cat < /etc/sysctl.d/k8s.conf -net.bridge.bridge-nf-call-ip6tables = 1 -net.bridge.bridge-nf-call-iptables = 1 -EOF -sysctl --system From e8cdf3c2dd586264f791858d45cb13d545539eb6 Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Mon, 26 Jun 2023 18:04:29 +0200 Subject: [PATCH 12/50] message --- calico.yaml | 74 +++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 64 insertions(+), 10 deletions(-) diff --git a/calico.yaml b/calico.yaml index 657fc8e..0550bd9 100644 --- a/calico.yaml +++ b/calico.yaml @@ -1,8 +1,6 @@ --- # Source: calico/templates/calico-kube-controllers.yaml # This manifest creates a Pod Disruption Budget for Controller to allow K8s Cluster Autoscaler to evict -# -# this is where this comes from: https://github.com/projectcalico/calico/blob/master/manifests/calico.yaml apiVersion: policy/v1 kind: PodDisruptionBudget @@ -31,6 +29,13 @@ metadata: name: calico-node namespace: kube-system --- +# Source: calico/templates/calico-node.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: calico-cni-plugin + namespace: kube-system +--- # Source: calico/templates/calico-config.yaml # This ConfigMap is used to configure a self-hosted Calico installation. kind: ConfigMap @@ -1015,7 +1020,7 @@ spec: description: 'BPFEnforceRPF enforce strict RPF on all host interfaces with BPF programs regardless of what is the per-interfaces or global setting. Possible values are Disabled, Strict or Loose. [Default: - Strict]' + Loose]' type: string bpfExtToServiceConnmark: description: 'BPFExtToServiceConnmark in BPF mode, control a 32bit @@ -4356,7 +4361,7 @@ rules: resources: - serviceaccounts/token resourceNames: - - calico-node + - calico-cni-plugin verbs: - create # The CNI plugin needs to get pods, nodes, and namespaces. @@ -4373,7 +4378,7 @@ rules: resources: - endpointslices verbs: - - watch + - watch - list - apiGroups: [""] resources: @@ -4511,6 +4516,41 @@ rules: verbs: - get --- +# Source: calico/templates/calico-node-rbac.yaml +# CNI cluster role +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: calico-cni-plugin +rules: + - apiGroups: [""] + resources: + - pods + - nodes + - namespaces + verbs: + - get + - apiGroups: [""] + resources: + - pods/status + verbs: + - patch + - apiGroups: ["crd.projectcalico.org"] + resources: + - blockaffinities + - ipamblocks + - ipamhandles + - clusterinformations + - ippools + - ipreservations + - ipamconfigs + verbs: + - get + - list + - create + - update + - delete +--- # Source: calico/templates/calico-kube-controllers-rbac.yaml kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 @@ -4539,6 +4579,20 @@ subjects: name: calico-node namespace: kube-system --- +# Source: calico/templates/calico-node-rbac.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: calico-cni-plugin +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: calico-cni-plugin +subjects: +- kind: ServiceAccount + name: calico-cni-plugin + namespace: kube-system +--- # Source: calico/templates/calico-node.yaml # This manifest installs the calico-node container, as well # as the CNI plugins and network config on @@ -4585,7 +4639,7 @@ spec: # It can be deleted if this is a fresh installation, or if you have already # upgraded to use calico-ipam. - name: upgrade-ipam - image: docker.io/calico/cni:master + image: docker.io/calico/cni:v3.26.0 imagePullPolicy: IfNotPresent command: ["/opt/cni/bin/calico-ipam", "-upgrade"] envFrom: @@ -4613,7 +4667,7 @@ spec: # This container installs the CNI binaries # and CNI network config file on each node. - name: install-cni - image: docker.io/calico/cni:master + image: docker.io/calico/cni:v3.26.0 imagePullPolicy: IfNotPresent command: ["/opt/cni/bin/install"] envFrom: @@ -4656,7 +4710,7 @@ spec: # i.e. bpf at /sys/fs/bpf and cgroup2 at /run/calico/cgroup. Calico-node initialisation is executed # in best effort fashion, i.e. no failure for errors, to not disrupt pod creation in iptable mode. - name: "mount-bpffs" - image: docker.io/calico/node:master + image: docker.io/calico/node:v3.26.0 imagePullPolicy: IfNotPresent command: ["calico-node", "-init", "-best-effort"] volumeMounts: @@ -4682,7 +4736,7 @@ spec: # container programs network policy and routes on each # host. - name: calico-node - image: docker.io/calico/node:master + image: docker.io/calico/node:v3.26.0 imagePullPolicy: IfNotPresent envFrom: - configMapRef: @@ -4899,7 +4953,7 @@ spec: priorityClassName: system-cluster-critical containers: - name: calico-kube-controllers - image: docker.io/calico/kube-controllers:master + image: docker.io/calico/kube-controllers:v3.26.0 imagePullPolicy: IfNotPresent env: # Choose which controllers to run. From e9bce90006170f40746b8bace6e075a4dac6230c Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Thu, 6 Jul 2023 14:50:22 +0200 Subject: [PATCH 13/50] message --- setup-kubetools-specific-version.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup-kubetools-specific-version.sh b/setup-kubetools-specific-version.sh index 5712c21..fb80f87 100755 --- a/setup-kubetools-specific-version.sh +++ b/setup-kubetools-specific-version.sh @@ -28,7 +28,7 @@ EOF EOF sudo apt-get update - sudo apt-get install -y kubelet=1.24.3-00 kubeadm=1.24.3-00 kubectl=1.24.3-00 + sudo apt-get install -y kubelet=1.27.1-00 kubeadm=1.27.1-00 kubectl=1.27.1-00 sudo apt-mark hold kubelet kubeadm kubectl swapoff -a From 6a51b5018692a9e38739b7639efbc4aa79cfa40e Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Thu, 6 Jul 2023 15:46:55 +0200 Subject: [PATCH 14/50] message --- cluster-setup.txt | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 cluster-setup.txt diff --git a/cluster-setup.txt b/cluster-setup.txt new file mode 100644 index 0000000..53b2a09 --- /dev/null +++ b/cluster-setup.txt @@ -0,0 +1,28 @@ +ON AL NODES +git clone https://github.com/sandervanvugt/cka +cd cka +./setup-container.sh +sudo ./setup-kubetools-specific-version.sh + +ON CONTROL NODE +sudo kubeadm init +READ COMMAND OUTPUT!!!! + +ON CONTROL NODE +mkdir -p $HOME/.kube + sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config + sudo chown $(id -u):$(id -g) $HOME/.kube/config +kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml + +PRINT THE JOIN COMMAND +sudo kubeadm token create --print-join-command + +ON ALL WORKER NODES +run the join command that resulted from the previous step + +ON CONTROL NODE +kubectl get nodes + +MORE INFORMATION +https://learning.oreilly.com/videos/certified-kubernetes-administrator/9780138103804/9780138103804-CKA3_01_02_00/ + From 3c6fa331de32f400cd93f2cfc362586ef468daa9 Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Fri, 7 Jul 2023 12:41:16 +0200 Subject: [PATCH 15/50] message --- taint-toleration.yaml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/taint-toleration.yaml b/taint-toleration.yaml index fec7afb..777002a 100644 --- a/taint-toleration.yaml +++ b/taint-toleration.yaml @@ -1,16 +1,17 @@ apiVersion: v1 kind: Pod metadata: - name: nginx-ssd - labels: + name: tolerator + labels: env: test spec: containers: - - name: nginx-ssd + - name: nginx image: nginx imagePullPolicy: IfNotPresent tolerations: - - key: "storage" + - key: "example-key" operator: "Equal" - value: "ssd" + value: "value1" effect: "NoSchedule" + From 8ac2ab38a67a908693646e044e0fb994c258b486 Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Tue, 5 Sep 2023 18:52:08 +0200 Subject: [PATCH 16/50] message --- pullratelimitpatch.sh | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 pullratelimitpatch.sh diff --git a/pullratelimitpatch.sh b/pullratelimitpatch.sh new file mode 100644 index 0000000..ab6f551 --- /dev/null +++ b/pullratelimitpatch.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +# this scripts creates a secret and sets that as the default for the default service account +# the purpose is to overcome the Docker imagepullratelimit restriction + +echo enter your docker username +read -s DOCKERUSER +echo enter your docker password +read -s DOCKERPASS + +kubectl create secret docker-registry dockercreds \ + --docker-username=$DOCKERUSER \ + --docker-password=$DOCKERPASS \ + +kubectl patch serviceaccount default \ + -p '{"imagePullSecrets": [{"name": "dockercreds"}]}' + From 5a6a5790ba6d584f22e67e0bf3916ae0f8d4d1af Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Tue, 5 Mar 2024 07:57:21 +0100 Subject: [PATCH 17/50] message --- setup-kubetools.sh | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/setup-kubetools.sh b/setup-kubetools.sh index 24a3cdf..cb41f2c 100755 --- a/setup-kubetools.sh +++ b/setup-kubetools.sh @@ -22,13 +22,17 @@ then br_netfilter EOF +### update 5-3-2024 +# sudo apt-get update && sudo apt-get install -y apt-transport-https curl +# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - +# cat < Date: Tue, 5 Mar 2024 08:39:13 +0100 Subject: [PATCH 18/50] message --- setup-kubetools.sh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/setup-kubetools.sh b/setup-kubetools.sh index cb41f2c..fd511f9 100755 --- a/setup-kubetools.sh +++ b/setup-kubetools.sh @@ -23,14 +23,14 @@ then EOF ### update 5-3-2024 -# sudo apt-get update && sudo apt-get install -y apt-transport-https curl -# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - -# cat < Date: Tue, 5 Mar 2024 09:24:08 +0100 Subject: [PATCH 19/50] message --- setup-container-new.sh | 65 ++++++++++++++++++++++++++++++++++++++++++ setup-kubetools-new.sh | 52 +++++++++++++++++++++++++++++++++ 2 files changed, 117 insertions(+) create mode 100755 setup-container-new.sh create mode 100755 setup-kubetools-new.sh diff --git a/setup-container-new.sh b/setup-container-new.sh new file mode 100755 index 0000000..55ab656 --- /dev/null +++ b/setup-container-new.sh @@ -0,0 +1,65 @@ +#!/bin/bash +# script that runs +# https://kubernetes.io/docs/setup/production-environment/container-runtime + +# changes March 14 2023: introduced $PLATFORM to have this work on amd64 as well as arm64 + +# setting MYOS variable +MYOS=$(hostnamectl | awk '/Operating/ { print $3 }') +OSVERSION=$(hostnamectl | awk '/Operating/ { print $4 }') +# beta: building in ARM support +[ $(arch) = aarch64 ] && PLATFORM=arm64 +[ $(arch) = x86_64 ] && PLATFORM=amd64 + +if [ $MYOS = "Ubuntu" ] +then + ### setting up container runtime prereq + cat <<- EOF | sudo tee /etc/modules-load.d/containerd.conf + overlay + br_netfilter + EOF + + sudo modprobe overlay + sudo modprobe br_netfilter + + # Setup required sysctl params, these persist across reboots. + cat <<- EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf + net.bridge.bridge-nf-call-iptables = 1 + net.ipv4.ip_forward = 1 + net.bridge.bridge-nf-call-ip6tables = 1 + EOF + + # Apply sysctl params without reboot + sudo sysctl --system + + # (Install containerd) + + sudo apt-get update && sudo apt-get install -y containerd + # hopefully temporary bugfix as the containerd version provided in Ubu repo is tool old + # added Jan 26th 2023 + # this needs to be updated when a recent enough containerd version will be in Ubuntu repos + sudo systemctl stop containerd + # cleanup old files from previous attempt if existing + [ -d bin ] && rm -rf bin + wget https://github.com/containerd/containerd/releases/download/v1.7.13/containerd-1.7.13-linux-${PLATFORM}.tar.gz + tar xvf containerd-1.7.13-linux-${PLATFORM}.tar.gz + sudo mv bin/* /usr/bin/ + # Configure containerd + sudo mkdir -p /etc/containerd + cat <<- TOML | sudo tee /etc/containerd/config.toml +version = 2 +[plugins] + [plugins."io.containerd.grpc.v1.cri"] + [plugins."io.containerd.grpc.v1.cri".containerd] + discard_unpacked_layers = true + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] + runtime_type = "io.containerd.runc.v2" + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] + SystemdCgroup = true + TOML + + # Restart containerd + sudo systemctl restart containerd +fi + diff --git a/setup-kubetools-new.sh b/setup-kubetools-new.sh new file mode 100755 index 0000000..3eedd47 --- /dev/null +++ b/setup-kubetools-new.sh @@ -0,0 +1,52 @@ +#!/bin/bash +# kubeadm installation instructions as on +# https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ + +# this script supports Ubuntu 20.04 LTS and later only +# run this script with sudo + +if ! [ $USER = root ] +then + echo run this script with sudo + exit 3 +fi + +# setting MYOS variable +MYOS=$(hostnamectl | awk '/Operating/ { print $3 }') +OSVERSION=$(hostnamectl | awk '/Operating/ { print $4 }') + +if [ $MYOS = "Ubuntu" ] +then + echo RUNNING UBUNTU CONFIG + cat < /etc/sysctl.d/k8s.conf +net.bridge.bridge-nf-call-ip6tables = 1 +net.bridge.bridge-nf-call-iptables = 1 +EOF +sysctl --system + +sudo crictl config --set \ + runtime-endpoint=unix:///run/containerd/containerd.sock +echo 'after initializing the control node, follow instructions and use kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml to install the calico plugin (control node only). On the worker nodes, use sudo kubeadm join ... to join' From 745d1a4de24b5b9bdb031366b4e094d29709a02d Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Tue, 5 Mar 2024 09:45:31 +0100 Subject: [PATCH 20/50] message --- setup-container-new.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/setup-container-new.sh b/setup-container-new.sh index 55ab656..36c4427 100755 --- a/setup-container-new.sh +++ b/setup-container-new.sh @@ -34,12 +34,12 @@ then # (Install containerd) - sudo apt-get update && sudo apt-get install -y containerd + #sudo apt-get update && sudo apt-get install -y containerd # hopefully temporary bugfix as the containerd version provided in Ubu repo is tool old # added Jan 26th 2023 # this needs to be updated when a recent enough containerd version will be in Ubuntu repos - sudo systemctl stop containerd - # cleanup old files from previous attempt if existing + sudo systemctl stop containerd + cleanup old files from previous attempt if existing [ -d bin ] && rm -rf bin wget https://github.com/containerd/containerd/releases/download/v1.7.13/containerd-1.7.13-linux-${PLATFORM}.tar.gz tar xvf containerd-1.7.13-linux-${PLATFORM}.tar.gz From 6064fe377e2ebf386024317e36b8cc9c48197603 Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Tue, 5 Mar 2024 10:06:32 +0100 Subject: [PATCH 21/50] message --- setup-container-new.sh | 58 ++++++++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 25 deletions(-) diff --git a/setup-container-new.sh b/setup-container-new.sh index 36c4427..890e740 100755 --- a/setup-container-new.sh +++ b/setup-container-new.sh @@ -22,31 +22,31 @@ then sudo modprobe overlay sudo modprobe br_netfilter - # Setup required sysctl params, these persist across reboots. - cat <<- EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf - net.bridge.bridge-nf-call-iptables = 1 - net.ipv4.ip_forward = 1 - net.bridge.bridge-nf-call-ip6tables = 1 - EOF + # Setup required sysctl params, these persist across reboots. + cat <<- EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf + net.bridge.bridge-nf-call-iptables = 1 + net.ipv4.ip_forward = 1 + net.bridge.bridge-nf-call-ip6tables = 1 + EOF - # Apply sysctl params without reboot - sudo sysctl --system + # Apply sysctl params without reboot + sudo sysctl --system - # (Install containerd) + # (Install containerd) - #sudo apt-get update && sudo apt-get install -y containerd - # hopefully temporary bugfix as the containerd version provided in Ubu repo is tool old - # added Jan 26th 2023 - # this needs to be updated when a recent enough containerd version will be in Ubuntu repos - sudo systemctl stop containerd - cleanup old files from previous attempt if existing - [ -d bin ] && rm -rf bin - wget https://github.com/containerd/containerd/releases/download/v1.7.13/containerd-1.7.13-linux-${PLATFORM}.tar.gz - tar xvf containerd-1.7.13-linux-${PLATFORM}.tar.gz - sudo mv bin/* /usr/bin/ - # Configure containerd - sudo mkdir -p /etc/containerd - cat <<- TOML | sudo tee /etc/containerd/config.toml + #sudo apt-get update && sudo apt-get install -y containerd + # hopefully temporary bugfix as the containerd version provided in Ubu repo is tool old + # added Jan 26th 2023 + # this needs to be updated when a recent enough containerd version will be in Ubuntu repos + sudo systemctl stop containerd + cleanup old files from previous attempt if existing + [ -d bin ] && rm -rf bin + wget https://github.com/containerd/containerd/releases/download/v1.7.13/containerd-1.7.13-linux-${PLATFORM}.tar.gz + tar xvf containerd-1.7.13-linux-${PLATFORM}.tar.gz + sudo mv bin/* /usr/bin/ + # Configure containerd + sudo mkdir -p /etc/containerd + cat <<- TOML | sudo tee /etc/containerd/config.toml version = 2 [plugins] [plugins."io.containerd.grpc.v1.cri"] @@ -57,9 +57,17 @@ version = 2 runtime_type = "io.containerd.runc.v2" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] SystemdCgroup = true - TOML + TOML - # Restart containerd - sudo systemctl restart containerd + # Restart containerd + wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service + mv containerd.service /usr/lib/systemd/system/ + systemctl daemon-reload + systemctl enable --now containerd fi +exit +#### notes from history just in case + + wget https://github.com/opencontainers/runc/releases/download/v1.1.12/runc.amd64 + install -m 755 runc.amd64 /usr/local/sbin/runc From d93e6f9951a3aa659e503972a6267b5778c9259c Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Tue, 5 Mar 2024 10:09:45 +0100 Subject: [PATCH 22/50] message --- setup-container-new.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/setup-container-new.sh b/setup-container-new.sh index 890e740..1b39ffe 100755 --- a/setup-container-new.sh +++ b/setup-container-new.sh @@ -17,7 +17,7 @@ then cat <<- EOF | sudo tee /etc/modules-load.d/containerd.conf overlay br_netfilter - EOF +EOF sudo modprobe overlay sudo modprobe br_netfilter @@ -27,7 +27,7 @@ then net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 - EOF +EOF # Apply sysctl params without reboot sudo sysctl --system @@ -61,9 +61,9 @@ version = 2 # Restart containerd wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service - mv containerd.service /usr/lib/systemd/system/ - systemctl daemon-reload - systemctl enable --now containerd + sudo mv containerd.service /usr/lib/systemd/system/ + sudo systemctl daemon-reload + sudo systemctl enable --now containerd fi exit From af210a800a4661e240626ad5066dffdca05b6fd4 Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Tue, 5 Mar 2024 10:25:02 +0100 Subject: [PATCH 23/50] message --- setup-container-new.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/setup-container-new.sh b/setup-container-new.sh index 1b39ffe..b8990b1 100755 --- a/setup-container-new.sh +++ b/setup-container-new.sh @@ -42,8 +42,7 @@ EOF cleanup old files from previous attempt if existing [ -d bin ] && rm -rf bin wget https://github.com/containerd/containerd/releases/download/v1.7.13/containerd-1.7.13-linux-${PLATFORM}.tar.gz - tar xvf containerd-1.7.13-linux-${PLATFORM}.tar.gz - sudo mv bin/* /usr/bin/ + tar xvf containerd-1.7.13-linux-${PLATFORM}.tar.gz -C /usr/local/bin # Configure containerd sudo mkdir -p /etc/containerd cat <<- TOML | sudo tee /etc/containerd/config.toml @@ -57,7 +56,7 @@ version = 2 runtime_type = "io.containerd.runc.v2" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] SystemdCgroup = true - TOML +TOML # Restart containerd wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service From 2d1e43a59692df192ac9f2977e0a7ea6b47fb457 Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Tue, 5 Mar 2024 10:31:35 +0100 Subject: [PATCH 24/50] message --- setup-container-new.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup-container-new.sh b/setup-container-new.sh index b8990b1..f248e85 100755 --- a/setup-container-new.sh +++ b/setup-container-new.sh @@ -42,7 +42,7 @@ EOF cleanup old files from previous attempt if existing [ -d bin ] && rm -rf bin wget https://github.com/containerd/containerd/releases/download/v1.7.13/containerd-1.7.13-linux-${PLATFORM}.tar.gz - tar xvf containerd-1.7.13-linux-${PLATFORM}.tar.gz -C /usr/local/bin + sudo tar xvf containerd-1.7.13-linux-${PLATFORM}.tar.gz -C /usr/local # Configure containerd sudo mkdir -p /etc/containerd cat <<- TOML | sudo tee /etc/containerd/config.toml From 793b54a68c26e68b5059abd1ecfa630609205bc2 Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Tue, 5 Mar 2024 10:48:15 +0100 Subject: [PATCH 25/50] message --- setup-container-new.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/setup-container-new.sh b/setup-container-new.sh index f248e85..74667bf 100755 --- a/setup-container-new.sh +++ b/setup-container-new.sh @@ -58,7 +58,10 @@ version = 2 SystemdCgroup = true TOML - # Restart containerd + +wget https://github.com/opencontainers/runc/releases/download/v1.1.12/runc.amd64 +sudo install -m 755 runc.amd64 /usr/local/sbin/runc +# Restart containerd wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service sudo mv containerd.service /usr/lib/systemd/system/ sudo systemctl daemon-reload @@ -68,5 +71,3 @@ fi exit #### notes from history just in case - wget https://github.com/opencontainers/runc/releases/download/v1.1.12/runc.amd64 - install -m 755 runc.amd64 /usr/local/sbin/runc From fdec84211fbf9608279dfa3994bbd0edded19f0c Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Tue, 5 Mar 2024 13:06:26 +0100 Subject: [PATCH 26/50] message --- setup-container-latest-version.sh | 81 +++++++++++++++++++++++++++++++ setup-container-new.sh | 32 +++++++----- 2 files changed, 101 insertions(+), 12 deletions(-) create mode 100644 setup-container-latest-version.sh diff --git a/setup-container-latest-version.sh b/setup-container-latest-version.sh new file mode 100644 index 0000000..30cfed2 --- /dev/null +++ b/setup-container-latest-version.sh @@ -0,0 +1,81 @@ +#!/bin/bash +# script that runs +# https://kubernetes.io/docs/setup/production-environment/container-runtime + +# changes March 14 2023: introduced $PLATFORM to have this work on amd64 as well as arm64 + +# setting MYOS variable +MYOS=$(hostnamectl | awk '/Operating/ { print $3 }') +OSVERSION=$(hostnamectl | awk '/Operating/ { print $4 }') +# beta: building in ARM support +[ $(arch) = aarch64 ] && PLATFORM=arm64 +[ $(arch) = x86_64 ] && PLATFORM=amd64 + +if [ $MYOS = "Ubuntu" ] +then + ### setting up container runtime prereq + cat <<- EOF | sudo tee /etc/modules-load.d/containerd.conf + overlay + br_netfilter +EOF + + sudo modprobe overlay + sudo modprobe br_netfilter + + # Setup required sysctl params, these persist across reboots. + cat <<- EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf + net.bridge.bridge-nf-call-iptables = 1 + net.ipv4.ip_forward = 1 + net.bridge.bridge-nf-call-ip6tables = 1 +EOF + + # Apply sysctl params without reboot + sudo sysctl --system + + # (Install containerd) + # getting rid of hard coded version numbers + CONTAINERD_VERSION=$(curl -s https://api.github.com/repos/containerd/containerd/releases/latest | jq -r '.tag_name') + CONTAINERD_VERSION=${CONTAINERD_VERSION#v} + wget https://github.com/containerd/containerd/releases/download/v${CONTAINERD_VERSION}/containerd-${CONTAINERD_VERSION}-linux-${PLATFORM}.tar.gz + sudo tar xvf containerd-${CONTAINERD_VERSION}-linux-${PLATFORM}.tar.gz -C /usr/local + # Configure containerd + sudo mkdir -p /etc/containerd + cat <<- TOML | sudo tee /etc/containerd/config.toml +version = 2 +[plugins] + [plugins."io.containerd.grpc.v1.cri"] + [plugins."io.containerd.grpc.v1.cri".containerd] + discard_unpacked_layers = true + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] + runtime_type = "io.containerd.runc.v2" + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] + SystemdCgroup = true +TOML + +RUNC_VERSION=$(curl -s https://api.github.com/repos/opencontainers/runc/releases/latest | jq -r '.tag_name') + +wget https://github.com/opencontainers/runc/releases/download/${RUNC_VERSION}/runc.${PLATFORM} +sudo install -m 755 runc.${PLATFORM} /usr/local/sbin/runc +# Restart containerd + wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service + sudo mv containerd.service /usr/lib/systemd/system/ + sudo systemctl daemon-reload + sudo systemctl enable --now containerd +fi + +exit +#### notes from history just in case +#!/bin/bash + +# Fetch the latest release tag from GitHub API +LATEST_TAG=$(curl -s https://api.github.com/repos/opencontainers/runc/releases/latest | jq -r '.tag_name') + +# Construct the download URL +DOWNLOAD_URL="https://github.com/opencontainers/runc/releases/download/${LATEST_TAG}/runc.amd64" + +# Use wget to download the latest version +wget "$DOWNLOAD_URL" + +echo "Downloaded $DOWNLOAD_URL" + diff --git a/setup-container-new.sh b/setup-container-new.sh index 74667bf..30cfed2 100755 --- a/setup-container-new.sh +++ b/setup-container-new.sh @@ -33,16 +33,11 @@ EOF sudo sysctl --system # (Install containerd) - - #sudo apt-get update && sudo apt-get install -y containerd - # hopefully temporary bugfix as the containerd version provided in Ubu repo is tool old - # added Jan 26th 2023 - # this needs to be updated when a recent enough containerd version will be in Ubuntu repos - sudo systemctl stop containerd - cleanup old files from previous attempt if existing - [ -d bin ] && rm -rf bin - wget https://github.com/containerd/containerd/releases/download/v1.7.13/containerd-1.7.13-linux-${PLATFORM}.tar.gz - sudo tar xvf containerd-1.7.13-linux-${PLATFORM}.tar.gz -C /usr/local + # getting rid of hard coded version numbers + CONTAINERD_VERSION=$(curl -s https://api.github.com/repos/containerd/containerd/releases/latest | jq -r '.tag_name') + CONTAINERD_VERSION=${CONTAINERD_VERSION#v} + wget https://github.com/containerd/containerd/releases/download/v${CONTAINERD_VERSION}/containerd-${CONTAINERD_VERSION}-linux-${PLATFORM}.tar.gz + sudo tar xvf containerd-${CONTAINERD_VERSION}-linux-${PLATFORM}.tar.gz -C /usr/local # Configure containerd sudo mkdir -p /etc/containerd cat <<- TOML | sudo tee /etc/containerd/config.toml @@ -58,9 +53,10 @@ version = 2 SystemdCgroup = true TOML +RUNC_VERSION=$(curl -s https://api.github.com/repos/opencontainers/runc/releases/latest | jq -r '.tag_name') -wget https://github.com/opencontainers/runc/releases/download/v1.1.12/runc.amd64 -sudo install -m 755 runc.amd64 /usr/local/sbin/runc +wget https://github.com/opencontainers/runc/releases/download/${RUNC_VERSION}/runc.${PLATFORM} +sudo install -m 755 runc.${PLATFORM} /usr/local/sbin/runc # Restart containerd wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service sudo mv containerd.service /usr/lib/systemd/system/ @@ -70,4 +66,16 @@ fi exit #### notes from history just in case +#!/bin/bash + +# Fetch the latest release tag from GitHub API +LATEST_TAG=$(curl -s https://api.github.com/repos/opencontainers/runc/releases/latest | jq -r '.tag_name') + +# Construct the download URL +DOWNLOAD_URL="https://github.com/opencontainers/runc/releases/download/${LATEST_TAG}/runc.amd64" + +# Use wget to download the latest version +wget "$DOWNLOAD_URL" + +echo "Downloaded $DOWNLOAD_URL" From 16501ee4e0353490992ac28ec314e44f70661298 Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Tue, 5 Mar 2024 13:10:40 +0100 Subject: [PATCH 27/50] message --- setup-container-latest-version.sh | 2 ++ 1 file changed, 2 insertions(+) mode change 100644 => 100755 setup-container-latest-version.sh diff --git a/setup-container-latest-version.sh b/setup-container-latest-version.sh old mode 100644 new mode 100755 index 30cfed2..6fa52d8 --- a/setup-container-latest-version.sh +++ b/setup-container-latest-version.sh @@ -11,6 +11,8 @@ OSVERSION=$(hostnamectl | awk '/Operating/ { print $4 }') [ $(arch) = aarch64 ] && PLATFORM=arm64 [ $(arch) = x86_64 ] && PLATFORM=amd64 +sudo apt install -y jq + if [ $MYOS = "Ubuntu" ] then ### setting up container runtime prereq From d775fd2f250c66d5e4279d9c7ec6e95fc8c69e0d Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Tue, 5 Mar 2024 13:22:09 +0100 Subject: [PATCH 28/50] updated setup-container.sh and setup-kubetools.sh --- setup-container-previous-version.sh | 65 ++++++++++++++++++++++++++ setup-container.sh | 72 ++++++++++++++++++----------- setup-kubetools-latestversion.sh | 52 +++++++++++++++++++++ setup-kubetools-previousversion.sh | 52 +++++++++++++++++++++ setup-kubetools.sh | 16 +++---- 5 files changed, 222 insertions(+), 35 deletions(-) create mode 100755 setup-container-previous-version.sh create mode 100755 setup-kubetools-latestversion.sh create mode 100755 setup-kubetools-previousversion.sh diff --git a/setup-container-previous-version.sh b/setup-container-previous-version.sh new file mode 100755 index 0000000..81894ef --- /dev/null +++ b/setup-container-previous-version.sh @@ -0,0 +1,65 @@ +#!/bin/bash +# script that runs +# https://kubernetes.io/docs/setup/production-environment/container-runtime + +# changes March 14 2023: introduced $PLATFORM to have this work on amd64 as well as arm64 + +# setting MYOS variable +MYOS=$(hostnamectl | awk '/Operating/ { print $3 }') +OSVERSION=$(hostnamectl | awk '/Operating/ { print $4 }') +# beta: building in ARM support +[ $(arch) = aarch64 ] && PLATFORM=arm64 +[ $(arch) = x86_64 ] && PLATFORM=amd64 + +if [ $MYOS = "Ubuntu" ] +then + ### setting up container runtime prereq + cat <<- EOF | sudo tee /etc/modules-load.d/containerd.conf + overlay + br_netfilter + EOF + + sudo modprobe overlay + sudo modprobe br_netfilter + + # Setup required sysctl params, these persist across reboots. + cat <<- EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf + net.bridge.bridge-nf-call-iptables = 1 + net.ipv4.ip_forward = 1 + net.bridge.bridge-nf-call-ip6tables = 1 + EOF + + # Apply sysctl params without reboot + sudo sysctl --system + + # (Install containerd) + + sudo apt-get update && sudo apt-get install -y containerd + # hopefully temporary bugfix as the containerd version provided in Ubu repo is tool old + # added Jan 26th 2023 + # this needs to be updated when a recent enough containerd version will be in Ubuntu repos + sudo systemctl stop containerd + # cleanup old files from previous attempt if existing + [ -d bin ] && rm -rf bin + wget https://github.com/containerd/containerd/releases/download/v1.6.15/containerd-1.6.15-linux-${PLATFORM}.tar.gz + tar xvf containerd-1.6.15-linux-${PLATFORM}.tar.gz + sudo mv bin/* /usr/bin/ + # Configure containerd + sudo mkdir -p /etc/containerd + cat <<- TOML | sudo tee /etc/containerd/config.toml +version = 2 +[plugins] + [plugins."io.containerd.grpc.v1.cri"] + [plugins."io.containerd.grpc.v1.cri".containerd] + discard_unpacked_layers = true + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] + runtime_type = "io.containerd.runc.v2" + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] + SystemdCgroup = true + TOML + + # Restart containerd + sudo systemctl restart containerd +fi + diff --git a/setup-container.sh b/setup-container.sh index 81894ef..6fa52d8 100755 --- a/setup-container.sh +++ b/setup-container.sh @@ -11,42 +11,38 @@ OSVERSION=$(hostnamectl | awk '/Operating/ { print $4 }') [ $(arch) = aarch64 ] && PLATFORM=arm64 [ $(arch) = x86_64 ] && PLATFORM=amd64 +sudo apt install -y jq + if [ $MYOS = "Ubuntu" ] then ### setting up container runtime prereq cat <<- EOF | sudo tee /etc/modules-load.d/containerd.conf overlay br_netfilter - EOF +EOF sudo modprobe overlay sudo modprobe br_netfilter - # Setup required sysctl params, these persist across reboots. - cat <<- EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf - net.bridge.bridge-nf-call-iptables = 1 - net.ipv4.ip_forward = 1 - net.bridge.bridge-nf-call-ip6tables = 1 - EOF + # Setup required sysctl params, these persist across reboots. + cat <<- EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf + net.bridge.bridge-nf-call-iptables = 1 + net.ipv4.ip_forward = 1 + net.bridge.bridge-nf-call-ip6tables = 1 +EOF - # Apply sysctl params without reboot - sudo sysctl --system + # Apply sysctl params without reboot + sudo sysctl --system - # (Install containerd) - - sudo apt-get update && sudo apt-get install -y containerd - # hopefully temporary bugfix as the containerd version provided in Ubu repo is tool old - # added Jan 26th 2023 - # this needs to be updated when a recent enough containerd version will be in Ubuntu repos - sudo systemctl stop containerd - # cleanup old files from previous attempt if existing - [ -d bin ] && rm -rf bin - wget https://github.com/containerd/containerd/releases/download/v1.6.15/containerd-1.6.15-linux-${PLATFORM}.tar.gz - tar xvf containerd-1.6.15-linux-${PLATFORM}.tar.gz - sudo mv bin/* /usr/bin/ - # Configure containerd - sudo mkdir -p /etc/containerd - cat <<- TOML | sudo tee /etc/containerd/config.toml + # (Install containerd) + # getting rid of hard coded version numbers + CONTAINERD_VERSION=$(curl -s https://api.github.com/repos/containerd/containerd/releases/latest | jq -r '.tag_name') + CONTAINERD_VERSION=${CONTAINERD_VERSION#v} + wget https://github.com/containerd/containerd/releases/download/v${CONTAINERD_VERSION}/containerd-${CONTAINERD_VERSION}-linux-${PLATFORM}.tar.gz + sudo tar xvf containerd-${CONTAINERD_VERSION}-linux-${PLATFORM}.tar.gz -C /usr/local + # Configure containerd + sudo mkdir -p /etc/containerd + cat <<- TOML | sudo tee /etc/containerd/config.toml version = 2 [plugins] [plugins."io.containerd.grpc.v1.cri"] @@ -57,9 +53,31 @@ version = 2 runtime_type = "io.containerd.runc.v2" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] SystemdCgroup = true - TOML +TOML - # Restart containerd - sudo systemctl restart containerd +RUNC_VERSION=$(curl -s https://api.github.com/repos/opencontainers/runc/releases/latest | jq -r '.tag_name') + +wget https://github.com/opencontainers/runc/releases/download/${RUNC_VERSION}/runc.${PLATFORM} +sudo install -m 755 runc.${PLATFORM} /usr/local/sbin/runc +# Restart containerd + wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service + sudo mv containerd.service /usr/lib/systemd/system/ + sudo systemctl daemon-reload + sudo systemctl enable --now containerd fi +exit +#### notes from history just in case +#!/bin/bash + +# Fetch the latest release tag from GitHub API +LATEST_TAG=$(curl -s https://api.github.com/repos/opencontainers/runc/releases/latest | jq -r '.tag_name') + +# Construct the download URL +DOWNLOAD_URL="https://github.com/opencontainers/runc/releases/download/${LATEST_TAG}/runc.amd64" + +# Use wget to download the latest version +wget "$DOWNLOAD_URL" + +echo "Downloaded $DOWNLOAD_URL" + diff --git a/setup-kubetools-latestversion.sh b/setup-kubetools-latestversion.sh new file mode 100755 index 0000000..6d1eab4 --- /dev/null +++ b/setup-kubetools-latestversion.sh @@ -0,0 +1,52 @@ +#!/bin/bash +# kubeadm installation instructions as on +# https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ + +# this script supports Ubuntu 20.04 LTS and later only +# run this script with sudo + +if ! [ $USER = root ] +then + echo run this script with sudo + exit 3 +fi + +# setting MYOS variable +MYOS=$(hostnamectl | awk '/Operating/ { print $3 }') +OSVERSION=$(hostnamectl | awk '/Operating/ { print $4 }') + +if [ $MYOS = "Ubuntu" ] +then + echo RUNNING UBUNTU CONFIG + cat < /etc/sysctl.d/k8s.conf +net.bridge.bridge-nf-call-ip6tables = 1 +net.bridge.bridge-nf-call-iptables = 1 +EOF +sysctl --system + +sudo crictl config --set \ + runtime-endpoint=unix:///run/containerd/containerd.sock +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' diff --git a/setup-kubetools-previousversion.sh b/setup-kubetools-previousversion.sh new file mode 100755 index 0000000..fd511f9 --- /dev/null +++ b/setup-kubetools-previousversion.sh @@ -0,0 +1,52 @@ +#!/bin/bash +# kubeadm installation instructions as on +# https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ + +# this script supports Ubuntu 20.04 LTS and later only +# run this script with sudo + +if ! [ $USER = root ] +then + echo run this script with sudo + exit 3 +fi + +# setting MYOS variable +MYOS=$(hostnamectl | awk '/Operating/ { print $3 }') +OSVERSION=$(hostnamectl | awk '/Operating/ { print $4 }') + +if [ $MYOS = "Ubuntu" ] +then + echo RUNNING UBUNTU CONFIG + cat < /etc/sysctl.d/k8s.conf +net.bridge.bridge-nf-call-ip6tables = 1 +net.bridge.bridge-nf-call-iptables = 1 +EOF +sysctl --system + +sudo crictl config --set \ + runtime-endpoint=unix:///run/containerd/containerd.sock +echo 'after initializing the control node, follow instructions and use kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml to install the calico plugin (control node only). On the worker nodes, use sudo kubeadm join ... to join' diff --git a/setup-kubetools.sh b/setup-kubetools.sh index fd511f9..3eedd47 100755 --- a/setup-kubetools.sh +++ b/setup-kubetools.sh @@ -23,16 +23,16 @@ then EOF ### update 5-3-2024 - sudo apt-get update && sudo apt-get install -y apt-transport-https curl - curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - - cat < Date: Mon, 11 Mar 2024 11:18:20 +0100 Subject: [PATCH 29/50] message --- README.md | 5 ----- setup-kubetools-previousversion.sh | 14 ++++---------- setup-kubetools.sh | 13 ++++++++++--- 3 files changed, 14 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 1b839cf..997866f 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,3 @@ Make sure the virtual machines meet the following requirements For instructions on how to set up Ubuntu Server 22.04, see the document "Installing Ubuntu 22-04" in this Git repository. For information on getting started with VirtualBox, see this video: https://www.youtube.com/watch?v=4qwUHSaIJdY -JUNE 2023 NOTE: The Calico network plugin has been changing a lot lately. I recommend using the following command to install it: - -kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.0/manifests/calico.yaml - -For more information, see the instructions at https://docs.tigera.io/calico/latest/getting-started/kubernetes/quickstart to install the Calico network plugin. diff --git a/setup-kubetools-previousversion.sh b/setup-kubetools-previousversion.sh index fd511f9..13e0001 100755 --- a/setup-kubetools-previousversion.sh +++ b/setup-kubetools-previousversion.sh @@ -22,17 +22,11 @@ then br_netfilter EOF -### update 5-3-2024 sudo apt-get update && sudo apt-get install -y apt-transport-https curl - curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - - cat < Date: Mon, 11 Mar 2024 11:31:49 +0100 Subject: [PATCH 30/50] message --- setup-kubetools.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/setup-kubetools.sh b/setup-kubetools.sh index db490f7..62aa726 100755 --- a/setup-kubetools.sh +++ b/setup-kubetools.sh @@ -37,7 +37,8 @@ EOF #EOF sudo apt-get update && sudo apt-get install -y apt-transport-https curl curl -fsSL https://pkgs.k8s.io/core:/stable:/${KUBEVERSION}/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg - echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/${KUBEVERSION}/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list + echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/${KUBEVERSION}/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list +sleep 2 sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl From d87882a3258440d41df0638c25ae76f052bd7635 Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Mon, 11 Mar 2024 11:38:34 +0100 Subject: [PATCH 31/50] message --- setup-container.sh | 15 +-------------- setup-kubetools.sh | 8 ++++++-- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/setup-container.sh b/setup-container.sh index 6fa52d8..1b98c49 100755 --- a/setup-container.sh +++ b/setup-container.sh @@ -66,18 +66,5 @@ sudo install -m 755 runc.${PLATFORM} /usr/local/sbin/runc sudo systemctl enable --now containerd fi +touch /tmp/container.txt exit -#### notes from history just in case -#!/bin/bash - -# Fetch the latest release tag from GitHub API -LATEST_TAG=$(curl -s https://api.github.com/repos/opencontainers/runc/releases/latest | jq -r '.tag_name') - -# Construct the download URL -DOWNLOAD_URL="https://github.com/opencontainers/runc/releases/download/${LATEST_TAG}/runc.amd64" - -# Use wget to download the latest version -wget "$DOWNLOAD_URL" - -echo "Downloaded $DOWNLOAD_URL" - diff --git a/setup-kubetools.sh b/setup-kubetools.sh index 62aa726..3ecf031 100755 --- a/setup-kubetools.sh +++ b/setup-kubetools.sh @@ -11,6 +11,12 @@ then exit 3 fi +if [ -z /tmp/container.txt ] +then + echo run ./setup-containers.sh before running this script + exit 4 +fi + # setting MYOS variable MYOS=$(hostnamectl | awk '/Operating/ { print $3 }') OSVERSION=$(hostnamectl | awk '/Operating/ { print $4 }') @@ -19,8 +25,6 @@ OSVERSION=$(hostnamectl | awk '/Operating/ { print $4 }') KUBEVERSION=$(curl -s https://api.github.com/repos/kubernetes/kubernetes/releases/latest | jq -r '.tag_name') KUBEVERSION=${KUBEVERSION%.*} -echo "Latest Kubernetes version is: $latest_version" - if [ $MYOS = "Ubuntu" ] then From 30d199bad010887e3e0dd8f60eac645eb055d733 Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Mon, 11 Mar 2024 11:40:42 +0100 Subject: [PATCH 32/50] message --- setup-kubetools.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup-kubetools.sh b/setup-kubetools.sh index 3ecf031..0d9fc18 100755 --- a/setup-kubetools.sh +++ b/setup-kubetools.sh @@ -11,7 +11,7 @@ then exit 3 fi -if [ -z /tmp/container.txt ] +if ! [ -f /tmp/container.txt ] then echo run ./setup-containers.sh before running this script exit 4 From 641b033bf11682622dc696452bc5fc0a3642292d Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Mon, 11 Mar 2024 11:44:55 +0100 Subject: [PATCH 33/50] message --- setup-kubetools.sh | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/setup-kubetools.sh b/setup-kubetools.sh index 0d9fc18..e6a9b19 100755 --- a/setup-kubetools.sh +++ b/setup-kubetools.sh @@ -5,15 +5,15 @@ # this script supports Ubuntu 20.04 LTS and later only # run this script with sudo -if ! [ $USER = root ] -then - echo run this script with sudo - exit 3 -fi +#if ! [ $USER = root ] +#then +# echo run this script with sudo +# exit 3 +#fi if ! [ -f /tmp/container.txt ] then - echo run ./setup-containers.sh before running this script + echo run ./setup-container.sh before running this script exit 4 fi @@ -33,12 +33,6 @@ then br_netfilter EOF -### update 5-3-2024 -# sudo apt-get update && sudo apt-get install -y apt-transport-https curl -# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - -# cat < /etc/sysctl.d/k8s.conf +sudo cat < /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF -sysctl --system +sudo sysctl --system sudo crictl config --set \ runtime-endpoint=unix:///run/containerd/containerd.sock From 3ce7aba5b1f24a739dffd5fa4ef49938f89dd974 Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Mon, 11 Mar 2024 11:48:34 +0100 Subject: [PATCH 34/50] message --- setup-kubetools-previousversion.sh | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/setup-kubetools-previousversion.sh b/setup-kubetools-previousversion.sh index 13e0001..10f0251 100755 --- a/setup-kubetools-previousversion.sh +++ b/setup-kubetools-previousversion.sh @@ -5,16 +5,27 @@ # this script supports Ubuntu 20.04 LTS and later only # run this script with sudo -if ! [ $USER = root ] +if ! [ -f /tmp/container.txt ] then - echo run this script with sudo - exit 3 + echo run ./setup-container.sh before running this script + exit 4 fi # setting MYOS variable MYOS=$(hostnamectl | awk '/Operating/ { print $3 }') OSVERSION=$(hostnamectl | awk '/Operating/ { print $4 }') +# detecting latest Kubernetes version +KUBEVERSION=$(curl -s https://api.github.com/repos/kubernetes/kubernetes/releases/latest | jq -r '.tag_name') +KUBEVERSION=${KUBEVERSION%.*} + +# setting previous version +VERSION=${KUBEVERSION#*.} +PREVIOUSVERSION=$(( VERSION - 1 )) +echo $PREVIOUSVERSION +exit + + if [ $MYOS = "Ubuntu" ] then echo RUNNING UBUNTU CONFIG @@ -23,23 +34,24 @@ then EOF sudo apt-get update && sudo apt-get install -y apt-transport-https curl - curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg - echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list + curl -fsSL https://pkgs.k8s.io/core:/stable:/${KUBEVERSION}/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg + echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/${KUBEVERSION}/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list +sleep 2 sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl - swapoff -a + sudo swapoff -a - sed -i 's/\/swap/#\/swap/' /etc/fstab + sudo sed -i 's/\/swap/#\/swap/' /etc/fstab fi # Set iptables bridging -cat < /etc/sysctl.d/k8s.conf +sudo cat < /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF -sysctl --system +sudo sysctl --system sudo crictl config --set \ runtime-endpoint=unix:///run/containerd/containerd.sock From 2842d5d7392892770b1294265c45f8dbcec88866 Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Mon, 11 Mar 2024 11:53:55 +0100 Subject: [PATCH 35/50] message --- setup-container-latest-version.sh | 83 ------------------------------- setup-kubetools-latestversion.sh | 52 ------------------- setup-kubetools-new.sh | 52 ------------------- 3 files changed, 187 deletions(-) delete mode 100755 setup-container-latest-version.sh delete mode 100755 setup-kubetools-latestversion.sh delete mode 100755 setup-kubetools-new.sh diff --git a/setup-container-latest-version.sh b/setup-container-latest-version.sh deleted file mode 100755 index 6fa52d8..0000000 --- a/setup-container-latest-version.sh +++ /dev/null @@ -1,83 +0,0 @@ -#!/bin/bash -# script that runs -# https://kubernetes.io/docs/setup/production-environment/container-runtime - -# changes March 14 2023: introduced $PLATFORM to have this work on amd64 as well as arm64 - -# setting MYOS variable -MYOS=$(hostnamectl | awk '/Operating/ { print $3 }') -OSVERSION=$(hostnamectl | awk '/Operating/ { print $4 }') -# beta: building in ARM support -[ $(arch) = aarch64 ] && PLATFORM=arm64 -[ $(arch) = x86_64 ] && PLATFORM=amd64 - -sudo apt install -y jq - -if [ $MYOS = "Ubuntu" ] -then - ### setting up container runtime prereq - cat <<- EOF | sudo tee /etc/modules-load.d/containerd.conf - overlay - br_netfilter -EOF - - sudo modprobe overlay - sudo modprobe br_netfilter - - # Setup required sysctl params, these persist across reboots. - cat <<- EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf - net.bridge.bridge-nf-call-iptables = 1 - net.ipv4.ip_forward = 1 - net.bridge.bridge-nf-call-ip6tables = 1 -EOF - - # Apply sysctl params without reboot - sudo sysctl --system - - # (Install containerd) - # getting rid of hard coded version numbers - CONTAINERD_VERSION=$(curl -s https://api.github.com/repos/containerd/containerd/releases/latest | jq -r '.tag_name') - CONTAINERD_VERSION=${CONTAINERD_VERSION#v} - wget https://github.com/containerd/containerd/releases/download/v${CONTAINERD_VERSION}/containerd-${CONTAINERD_VERSION}-linux-${PLATFORM}.tar.gz - sudo tar xvf containerd-${CONTAINERD_VERSION}-linux-${PLATFORM}.tar.gz -C /usr/local - # Configure containerd - sudo mkdir -p /etc/containerd - cat <<- TOML | sudo tee /etc/containerd/config.toml -version = 2 -[plugins] - [plugins."io.containerd.grpc.v1.cri"] - [plugins."io.containerd.grpc.v1.cri".containerd] - discard_unpacked_layers = true - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] - runtime_type = "io.containerd.runc.v2" - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] - SystemdCgroup = true -TOML - -RUNC_VERSION=$(curl -s https://api.github.com/repos/opencontainers/runc/releases/latest | jq -r '.tag_name') - -wget https://github.com/opencontainers/runc/releases/download/${RUNC_VERSION}/runc.${PLATFORM} -sudo install -m 755 runc.${PLATFORM} /usr/local/sbin/runc -# Restart containerd - wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service - sudo mv containerd.service /usr/lib/systemd/system/ - sudo systemctl daemon-reload - sudo systemctl enable --now containerd -fi - -exit -#### notes from history just in case -#!/bin/bash - -# Fetch the latest release tag from GitHub API -LATEST_TAG=$(curl -s https://api.github.com/repos/opencontainers/runc/releases/latest | jq -r '.tag_name') - -# Construct the download URL -DOWNLOAD_URL="https://github.com/opencontainers/runc/releases/download/${LATEST_TAG}/runc.amd64" - -# Use wget to download the latest version -wget "$DOWNLOAD_URL" - -echo "Downloaded $DOWNLOAD_URL" - diff --git a/setup-kubetools-latestversion.sh b/setup-kubetools-latestversion.sh deleted file mode 100755 index 6d1eab4..0000000 --- a/setup-kubetools-latestversion.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/bash -# kubeadm installation instructions as on -# https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ - -# this script supports Ubuntu 20.04 LTS and later only -# run this script with sudo - -if ! [ $USER = root ] -then - echo run this script with sudo - exit 3 -fi - -# setting MYOS variable -MYOS=$(hostnamectl | awk '/Operating/ { print $3 }') -OSVERSION=$(hostnamectl | awk '/Operating/ { print $4 }') - -if [ $MYOS = "Ubuntu" ] -then - echo RUNNING UBUNTU CONFIG - cat < /etc/sysctl.d/k8s.conf -net.bridge.bridge-nf-call-ip6tables = 1 -net.bridge.bridge-nf-call-iptables = 1 -EOF -sysctl --system - -sudo crictl config --set \ - runtime-endpoint=unix:///run/containerd/containerd.sock -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' diff --git a/setup-kubetools-new.sh b/setup-kubetools-new.sh deleted file mode 100755 index 3eedd47..0000000 --- a/setup-kubetools-new.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/bash -# kubeadm installation instructions as on -# https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ - -# this script supports Ubuntu 20.04 LTS and later only -# run this script with sudo - -if ! [ $USER = root ] -then - echo run this script with sudo - exit 3 -fi - -# setting MYOS variable -MYOS=$(hostnamectl | awk '/Operating/ { print $3 }') -OSVERSION=$(hostnamectl | awk '/Operating/ { print $4 }') - -if [ $MYOS = "Ubuntu" ] -then - echo RUNNING UBUNTU CONFIG - cat < /etc/sysctl.d/k8s.conf -net.bridge.bridge-nf-call-ip6tables = 1 -net.bridge.bridge-nf-call-iptables = 1 -EOF -sysctl --system - -sudo crictl config --set \ - runtime-endpoint=unix:///run/containerd/containerd.sock -echo 'after initializing the control node, follow instructions and use kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml to install the calico plugin (control node only). On the worker nodes, use sudo kubeadm join ... to join' From 81e0773359cdb1f89b1b2cb5eeef404a182f4b2d Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Mon, 11 Mar 2024 11:55:41 +0100 Subject: [PATCH 36/50] message --- setup-kubetools-previousversion.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup-kubetools-previousversion.sh b/setup-kubetools-previousversion.sh index 10f0251..9df8b6f 100755 --- a/setup-kubetools-previousversion.sh +++ b/setup-kubetools-previousversion.sh @@ -34,8 +34,8 @@ then EOF sudo apt-get update && sudo apt-get install -y apt-transport-https curl - curl -fsSL https://pkgs.k8s.io/core:/stable:/${KUBEVERSION}/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg - echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/${KUBEVERSION}/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list + curl -fsSL https://pkgs.k8s.io/core:/stable:/${PREVIOUSVERSION}/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg + echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/${PREVIOUSVERSION}/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list sleep 2 sudo apt-get update From 3c1b9f51badc9a35856b617436a940281fb869d9 Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Mon, 11 Mar 2024 11:57:09 +0100 Subject: [PATCH 37/50] message --- setup-kubetools-previousversion.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/setup-kubetools-previousversion.sh b/setup-kubetools-previousversion.sh index 9df8b6f..f60c5a8 100755 --- a/setup-kubetools-previousversion.sh +++ b/setup-kubetools-previousversion.sh @@ -23,7 +23,6 @@ KUBEVERSION=${KUBEVERSION%.*} VERSION=${KUBEVERSION#*.} PREVIOUSVERSION=$(( VERSION - 1 )) echo $PREVIOUSVERSION -exit if [ $MYOS = "Ubuntu" ] From 01643adf2562a4bfc65eac8a86bc40395c8aee4f Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Mon, 11 Mar 2024 12:22:34 +0100 Subject: [PATCH 38/50] message --- setup-kubetools-previousversion.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/setup-kubetools-previousversion.sh b/setup-kubetools-previousversion.sh index f60c5a8..8a6dd52 100755 --- a/setup-kubetools-previousversion.sh +++ b/setup-kubetools-previousversion.sh @@ -22,7 +22,9 @@ KUBEVERSION=${KUBEVERSION%.*} # setting previous version VERSION=${KUBEVERSION#*.} PREVIOUSVERSION=$(( VERSION - 1 )) +PREVIOUSVERSION=1.${PREVIOUSVERSION} echo $PREVIOUSVERSION +read if [ $MYOS = "Ubuntu" ] From 7516a47eee884fa50fd21abb848cf371c49501e6 Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Mon, 11 Mar 2024 12:24:38 +0100 Subject: [PATCH 39/50] message --- setup-kubetools-previousversion.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup-kubetools-previousversion.sh b/setup-kubetools-previousversion.sh index 8a6dd52..c57ae12 100755 --- a/setup-kubetools-previousversion.sh +++ b/setup-kubetools-previousversion.sh @@ -22,7 +22,7 @@ KUBEVERSION=${KUBEVERSION%.*} # setting previous version VERSION=${KUBEVERSION#*.} PREVIOUSVERSION=$(( VERSION - 1 )) -PREVIOUSVERSION=1.${PREVIOUSVERSION} +PREVIOUSVERSION=v1.${PREVIOUSVERSION} echo $PREVIOUSVERSION read From 5a13bbe72d0dbedda80f0132e526f5f1b1df29b5 Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Mon, 11 Mar 2024 12:26:19 +0100 Subject: [PATCH 40/50] message --- setup-kubetools-previousversion.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/setup-kubetools-previousversion.sh b/setup-kubetools-previousversion.sh index c57ae12..c95dde2 100755 --- a/setup-kubetools-previousversion.sh +++ b/setup-kubetools-previousversion.sh @@ -23,8 +23,6 @@ KUBEVERSION=${KUBEVERSION%.*} VERSION=${KUBEVERSION#*.} PREVIOUSVERSION=$(( VERSION - 1 )) PREVIOUSVERSION=v1.${PREVIOUSVERSION} -echo $PREVIOUSVERSION -read if [ $MYOS = "Ubuntu" ] From 4ae00265715f8921fef65f4ed587e44d0c6d8664 Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Wed, 10 Apr 2024 09:09:24 +0200 Subject: [PATCH 41/50] message --- setup-container-new.sh | 81 ------------------------------------------ 1 file changed, 81 deletions(-) delete mode 100755 setup-container-new.sh diff --git a/setup-container-new.sh b/setup-container-new.sh deleted file mode 100755 index 30cfed2..0000000 --- a/setup-container-new.sh +++ /dev/null @@ -1,81 +0,0 @@ -#!/bin/bash -# script that runs -# https://kubernetes.io/docs/setup/production-environment/container-runtime - -# changes March 14 2023: introduced $PLATFORM to have this work on amd64 as well as arm64 - -# setting MYOS variable -MYOS=$(hostnamectl | awk '/Operating/ { print $3 }') -OSVERSION=$(hostnamectl | awk '/Operating/ { print $4 }') -# beta: building in ARM support -[ $(arch) = aarch64 ] && PLATFORM=arm64 -[ $(arch) = x86_64 ] && PLATFORM=amd64 - -if [ $MYOS = "Ubuntu" ] -then - ### setting up container runtime prereq - cat <<- EOF | sudo tee /etc/modules-load.d/containerd.conf - overlay - br_netfilter -EOF - - sudo modprobe overlay - sudo modprobe br_netfilter - - # Setup required sysctl params, these persist across reboots. - cat <<- EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf - net.bridge.bridge-nf-call-iptables = 1 - net.ipv4.ip_forward = 1 - net.bridge.bridge-nf-call-ip6tables = 1 -EOF - - # Apply sysctl params without reboot - sudo sysctl --system - - # (Install containerd) - # getting rid of hard coded version numbers - CONTAINERD_VERSION=$(curl -s https://api.github.com/repos/containerd/containerd/releases/latest | jq -r '.tag_name') - CONTAINERD_VERSION=${CONTAINERD_VERSION#v} - wget https://github.com/containerd/containerd/releases/download/v${CONTAINERD_VERSION}/containerd-${CONTAINERD_VERSION}-linux-${PLATFORM}.tar.gz - sudo tar xvf containerd-${CONTAINERD_VERSION}-linux-${PLATFORM}.tar.gz -C /usr/local - # Configure containerd - sudo mkdir -p /etc/containerd - cat <<- TOML | sudo tee /etc/containerd/config.toml -version = 2 -[plugins] - [plugins."io.containerd.grpc.v1.cri"] - [plugins."io.containerd.grpc.v1.cri".containerd] - discard_unpacked_layers = true - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] - runtime_type = "io.containerd.runc.v2" - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] - SystemdCgroup = true -TOML - -RUNC_VERSION=$(curl -s https://api.github.com/repos/opencontainers/runc/releases/latest | jq -r '.tag_name') - -wget https://github.com/opencontainers/runc/releases/download/${RUNC_VERSION}/runc.${PLATFORM} -sudo install -m 755 runc.${PLATFORM} /usr/local/sbin/runc -# Restart containerd - wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service - sudo mv containerd.service /usr/lib/systemd/system/ - sudo systemctl daemon-reload - sudo systemctl enable --now containerd -fi - -exit -#### notes from history just in case -#!/bin/bash - -# Fetch the latest release tag from GitHub API -LATEST_TAG=$(curl -s https://api.github.com/repos/opencontainers/runc/releases/latest | jq -r '.tag_name') - -# Construct the download URL -DOWNLOAD_URL="https://github.com/opencontainers/runc/releases/download/${LATEST_TAG}/runc.amd64" - -# Use wget to download the latest version -wget "$DOWNLOAD_URL" - -echo "Downloaded $DOWNLOAD_URL" - From bfc861f672f447570006cd37d521620fd0605a3d Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Wed, 10 Apr 2024 10:16:47 +0200 Subject: [PATCH 42/50] message --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 997866f..95865ba 100644 --- a/README.md +++ b/README.md @@ -8,4 +8,10 @@ Make sure the virtual machines meet the following requirements * No swap For instructions on how to set up Ubuntu Server 22.04, see the document "Installing Ubuntu 22-04" in this Git repository. For information on getting started with VirtualBox, see this video: https://www.youtube.com/watch?v=4qwUHSaIJdY +Alternatively, check out my video course "Virtualization for Everyone" for an introduction to different virtualization solution. + +To set up the required tools on the cluster nodes, the following scripts are provided: +* setup-container.sh installs containerd. Run this script first +* setup-kubetools.sh install the latest version of kubelet, kubeadm and kubectl +* setup-kubetool-previousversion.sh installs the previous major version of the kubelet, kubeadm and kubectl. Use this if you want to practice cluster upgrades From b0d54ba0adfbb585c39bf664bcbee0fa80fd64af Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Mon, 15 Apr 2024 15:48:58 +0200 Subject: [PATCH 43/50] message --- RESOURCES.txt | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 RESOURCES.txt diff --git a/RESOURCES.txt b/RESOURCES.txt new file mode 100644 index 0000000..022e050 --- /dev/null +++ b/RESOURCES.txt @@ -0,0 +1,2 @@ +ON DEMAND COURSE +* Certified Kubernetes Administrator (CKA) 3rd edition: https://learning.oreilly.com/course/certified-kubernetes-administrator/9780138103804/ From 5fe72386278aeab041cce141f641f342ff14d123 Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Mon, 15 Apr 2024 18:54:50 +0200 Subject: [PATCH 44/50] message --- history-15APR24.txt | 126 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 history-15APR24.txt diff --git a/history-15APR24.txt b/history-15APR24.txt new file mode 100644 index 0000000..1cf206c --- /dev/null +++ b/history-15APR24.txt @@ -0,0 +1,126 @@ +student@control:~/cka$ history + 1 ip a + 2 sudo apt install git vim -y + 3 git clone https://github.com/sandervanvugt/cka + 4 cd cka + 5 ls *sh + 6 ./setup-container.sh + 7 ls + 8 ls *sh + 9 ./setup-kubetools-previousversion.sh + 10 sudo apt install jq -y + 11 history + 12 sudo kubeadm init + 13 history + 14 mkdir ~/.kube + 15 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config + 16 sudo chown $(id -u):$(id -g) $HOME/.kube/config + 17 kubectl get all + 18 #kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml + 19 kubectl get pods -n kube-system + 20 kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml + 21 kubectl get pods -n kube-system + 22 kubectl get ds -n kube-system + 23 kubectl get nodes + 24 history + 25 kubectl create testapp --image=nginx --replicas=3 + 26 kubectl create deploy testapp --image=nginx --replicas=3 + 27 kubectl get all -o wide + 28 history + 29 cd .. + 30 ls + 31 tar xvf helm-v3.14.4-linux-amd64.tar.gz + 32 sudo mv linux-amd64/helm /usr/local/bin + 33 helm upgrade --install ingress-nginx ingress-nginx --repo https://kubernetes.github.io/ingress-nginx --namespace ingress-nginx --create-namespace + 34 source <(kubectl completion bash) + 35 kubectl get pods -n ingress-nginx + 36 kubectl create deploy nginxsvc --image=nginx --replicas=3 + 37 kubectl get all --selector app=nginxsvc + 38 kubectl expose deploy nginxsvc + 39 kubectl expose deploy nginxsvc --port=80 + 40 kubectl get all --selector app=nginxsvc + 41 kubectl describe svc nginxsvc + 42 kubectl create ingress nginxsvc --class=nginx --rule=nginxsvc.info/*=nginxsvc:80 + 43 kubectl describe ing nginxsvc + 44 sudo vim /etc/hosts + 45 kubectl port-forward -n ingress-nginx svc/ingress-nginx-controller 8080:80 + 46 bg + 47 curl nginxsvc.info + 48 curl nginxsvc.info:8080 + 49 history + 50 curl nginxsvc.info:8080 + 51 kubectl edit svc nginxsvc + 52 curl nginxsvc.info:8080 + 53 kubectl describe ing nginxsvc + 54 kubectl describe svc nginxsvc + 55 kubectl edit svc nginxsvc + 56 curl nginxsvc.info:8080 + 57 history + 58 kubectl create ns limited + 59 kubectl create quota -h | less + 60 kubectl create quota qtest --hard pods=3,cpu=100m,memory=500Mi --namespace=limited + 61 kubectl describe quota -n limited + 62 kubectl describe ns limited + 63 kubectl create deploy nginx --image=nginx --replicas=3 -n limited + 64 kubectl get all -n limited + 65 kubectl describe -n limited rs nginx-7854ff8877 + 66 kubectl describe ns limited + 67 kubectl set resources -h | less + 68 kubectl set -n limited resources deploy nginx --requests cpu=100m,memory=5Mi --limits cpu=200m,memory=20Mi + 69 kubectl get all -n limited + 70 kubectl describe ns limited + 71 kubectl edit quota -n limited qtest + 72 kubectl describe ns limited + 73 kubectl scale -n limited deployment nginx --replicas=2 + 74 kubectl scale -n limited deployment nginx --replicas=3 + 75 kubectl describe ns limited + 76 history + 77 kubectl edit node control + 78 kubectl cordon worker1 + 79 kubectl edit node worker1 + 80 kubectl get nodes + 81 kubectl uncordon worker1 + 82 kubectl get pods -n kube-system + 83 kubectl drain node worker1 + 84 kubectl drain worker1 + 85 kubectl get nodes + 86 kubectl edit node worker1 + 87 kubectl get nodes + 88 kubectl get pods -o wide + 89 kubectl drain worker1 + 90 kubectl get nodes + 91 kubectl drain worker1 --ignore-daemonsets + 92 kubectl edit node worker1 + 93 kubectl get pods -o wide + 94 kubectl get nodes + 95 kubectl create deploy ready --image=nginx --replicas=3 + 96 kubectl get pods -o wide --selector app=ready + 97 kubectl get nodes + 98 kubectl scale deploy ready --replicas=0 + 99 kubectl scale deploy ready --replicas=3 + 100 kubectl get pods -o wide --selector app=ready + 101 cd cka/ + 102 vim networkpolicy-example.yaml + 103 git pull + 104 vim nwpolicy-complete-example.yaml + 105 kubectl apply -f nwpolicy-complete-example.yaml + 106 kubectl expose pod nginx --port=80 + 107 kubectl exec -it busybox -- wget --spider --timeout=1 nginx + 108 kubectl label pod busybox access=true + 109 kubectl exec -it busybox -- wget --spider --timeout=1 nginx + 110 kubectl create ns nwp-namespace + 111 vim nwp-lab9-1.yaml + 112 kubectl apply -f nwp-lab9-1.yaml + 113 kubectl expose pod nwp-nginx --port=80 + 114 kubectl exec -n nwp-namespace nwp-busybox -- wget --spider --timeout=1 nwp-nginx + 115 kubectl exec -n nwp-namespace nwp-busybox -- nslookup nwp-nginx + 116 kubectl exec -n nwp-namespace nwp-busybox -- wget --spider --timeout=1 nwp-nginx.default.svc.cluster.local + 117 vim nwp-lab9-2.yaml + 118 kubectl apply -f nwp-lab9-2.yaml + 119 kubectl exec -n nwp-namespace nwp-busybox -- wget --spider --timeout=1 nwp-nginx.default.svc.cluster.local + 120 kubectl create deploy busybox --image=busybox -- sleep 3600 + 121 kubectl exec -it busybox-6fc6c44c5b-x5vrx -- wget --spider --timeput=1 nwp-nginx + 122 kubectl exec -it busybox-6fc6c44c5b-x5vrx -- wget --spider --timeout=1 nwp-nginx + 123 kubectl delete -f nwp-lab9-2.yaml + 124 history + From e481dd85b0e094e66959bfd6dce8550cc6832dea Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Tue, 16 Apr 2024 18:53:03 +0200 Subject: [PATCH 45/50] message --- april-2024-history.txt | 291 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 291 insertions(+) create mode 100644 april-2024-history.txt diff --git a/april-2024-history.txt b/april-2024-history.txt new file mode 100644 index 0000000..703c356 --- /dev/null +++ b/april-2024-history.txt @@ -0,0 +1,291 @@ + 1 ip a + 2 sudo apt install git vim -y + 3 git clone https://github.com/sandervanvugt/cka + 4 cd cka + 5 ls *sh + 6 ./setup-container.sh + 7 ls + 8 ls *sh + 9 ./setup-kubetools-previousversion.sh + 10 sudo apt install jq -y + 11 history + 12 sudo kubeadm init + 13 history + 14 mkdir ~/.kube + 15 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config + 16 sudo chown $(id -u):$(id -g) $HOME/.kube/config + 17 kubectl get all + 18 #kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml + 19 kubectl get pods -n kube-system + 20 kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml + 21 kubectl get pods -n kube-system + 22 kubectl get ds -n kube-system + 23 kubectl get nodes + 24 history + 25 kubectl create testapp --image=nginx --replicas=3 + 26 kubectl create deploy testapp --image=nginx --replicas=3 + 27 kubectl get all -o wide + 28 history + 29 cd .. + 30 ls + 31 tar xvf helm-v3.14.4-linux-amd64.tar.gz + 32 sudo mv linux-amd64/helm /usr/local/bin + 33 helm upgrade --install ingress-nginx ingress-nginx --repo https://kubernetes.github.io/ingress-nginx --namespace ingress-nginx --create-namespace + 34 source <(kubectl completion bash) + 35 kubectl get pods -n ingress-nginx + 36 kubectl create deploy nginxsvc --image=nginx --replicas=3 + 37 kubectl get all --selector app=nginxsvc + 38 kubectl expose deploy nginxsvc + 39 kubectl expose deploy nginxsvc --port=80 + 40 kubectl get all --selector app=nginxsvc + 41 kubectl describe svc nginxsvc + 42 kubectl create ingress nginxsvc --class=nginx --rule=nginxsvc.info/*=nginxsvc:80 + 43 kubectl describe ing nginxsvc + 44 sudo vim /etc/hosts + 45 kubectl port-forward -n ingress-nginx svc/ingress-nginx-controller 8080:80 + 46 bg + 47 curl nginxsvc.info + 48 curl nginxsvc.info:8080 + 49 history + 50 curl nginxsvc.info:8080 + 51 kubectl edit svc nginxsvc + 52 curl nginxsvc.info:8080 + 53 kubectl describe ing nginxsvc + 54 kubectl describe svc nginxsvc + 55 kubectl edit svc nginxsvc + 56 curl nginxsvc.info:8080 + 57 history + 58 kubectl create ns limited + 59 kubectl create quota -h | less + 60 kubectl create quota qtest --hard pods=3,cpu=100m,memory=500Mi --namespace=limited + 61 kubectl describe quota -n limited + 62 kubectl describe ns limited + 63 kubectl create deploy nginx --image=nginx --replicas=3 -n limited + 64 kubectl get all -n limited + 65 kubectl describe -n limited rs nginx-7854ff8877 + 66 kubectl describe ns limited + 67 kubectl set resources -h | less + 68 kubectl set -n limited resources deploy nginx --requests cpu=100m,memory=5Mi --limits cpu=200m,memory=20Mi + 69 kubectl get all -n limited + 70 kubectl describe ns limited + 71 kubectl edit quota -n limited qtest + 72 kubectl describe ns limited + 73 kubectl scale -n limited deployment nginx --replicas=2 + 74 kubectl scale -n limited deployment nginx --replicas=3 + 75 kubectl describe ns limited + 76 history + 77 kubectl edit node control + 78 kubectl cordon worker1 + 79 kubectl edit node worker1 + 80 kubectl get nodes + 81 kubectl uncordon worker1 + 82 kubectl get pods -n kube-system + 83 kubectl drain node worker1 + 84 kubectl drain worker1 + 85 kubectl get nodes + 86 kubectl edit node worker1 + 87 kubectl get nodes + 88 kubectl get pods -o wide + 89 kubectl drain worker1 + 90 kubectl get nodes + 91 kubectl drain worker1 --ignore-daemonsets + 92 kubectl edit node worker1 + 93 kubectl get pods -o wide + 94 kubectl get nodes + 95 kubectl create deploy ready --image=nginx --replicas=3 + 96 kubectl get pods -o wide --selector app=ready + 97 kubectl get nodes + 98 kubectl scale deploy ready --replicas=0 + 99 kubectl scale deploy ready --replicas=3 + 100 kubectl get pods -o wide --selector app=ready + 101 cd cka/ + 102 vim networkpolicy-example.yaml + 103 git pull + 104 vim nwpolicy-complete-example.yaml + 105 kubectl apply -f nwpolicy-complete-example.yaml + 106 kubectl expose pod nginx --port=80 + 107 kubectl exec -it busybox -- wget --spider --timeout=1 nginx + 108 kubectl label pod busybox access=true + 109 kubectl exec -it busybox -- wget --spider --timeout=1 nginx + 110 kubectl create ns nwp-namespace + 111 vim nwp-lab9-1.yaml + 112 kubectl apply -f nwp-lab9-1.yaml + 113 kubectl expose pod nwp-nginx --port=80 + 114 kubectl exec -n nwp-namespace nwp-busybox -- wget --spider --timeout=1 nwp-nginx + 115 kubectl exec -n nwp-namespace nwp-busybox -- nslookup nwp-nginx + 116 kubectl exec -n nwp-namespace nwp-busybox -- wget --spider --timeout=1 nwp-nginx.default.svc.cluster.local + 117 vim nwp-lab9-2.yaml + 118 kubectl apply -f nwp-lab9-2.yaml + 119 kubectl exec -n nwp-namespace nwp-busybox -- wget --spider --timeout=1 nwp-nginx.default.svc.cluster.local + 120 kubectl create deploy busybox --image=busybox -- sleep 3600 + 121 kubectl exec -it busybox-6fc6c44c5b-x5vrx -- wget --spider --timeput=1 nwp-nginx + 122 kubectl exec -it busybox-6fc6c44c5b-x5vrx -- wget --spider --timeout=1 nwp-nginx + 123 kubectl delete -f nwp-lab9-2.yaml + 124 history + 125 kubectl top + 126 kubectl top pod + 127 cd + 128 git clone https://github.com/kubernetes-sigs/metrics-server.git + 129 cd metrics-server/ + 130 ls + 131 kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml + 132 kubectl -n kube-system get pods + 133 kubectl logs -n kube-system metrics-server-6d94bc8694-76vzc + 134 kubectl -n kube-system get deploy + 135 kubectl -n kube-system edit deployments.apps metrics-server + 136 kubectl get pods -n kube-system + 137 kubectl top pods + 138 cd /etc/kubernetes/manifests/ + 139 ls + 140 cd + 141 cd - + 142 less kube-scheduler.yaml + 143 sudo less kube-scheduler.yaml + 144 cd + 145 kubectl run auto-web --image=nginx --dry-run=client -o yaml > auto-web.yaml + 146 cat auto-web.yaml + 147 kubectl get pods + 148 cd /etc/kubernetes/manifests/ + 149 ls -l + 150 sudo apt install etcd-client + 151 sudo etcdctl --help + 152 sudo ETCDCTL_API=3 etcdctl --help + 153 ps aux | grep etcd + 154 cd ../pki/ + 155 ls + 156 cd etcd/ + 157 ls + 158 cd + 159 sudo ETCDCTL_API=3 etcdctl --endpoints localhost:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key get / --prefix --keys-only + 160 sudo ETCDCTL_API=3 etcdctl --endpoints localhost:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key snapshot save /tmp/etcdbackup.db + 161 ls -l /tmp/etcdbackup.db + 162 sudo ETCDCTL_API=3 etcdctl --endpoints localhost:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key snapshot save /tmp/etcdbackup-$(date +%d-%m-%y).db + 163 cd /etc/kubernetes/manifests/ + 164 ls + 165 sudo vim etcd.yaml + 166 cd + 167 history + 168 sudo ETCDCTL_API=3 etcdctl --write-out=table snapshot status /tmp/etcdbackup.db + 169 cp /tmp/etcdbackup.db /tmp/etcdbackup.db.2 + 170 kubectl get deploy + 171 kubectl delete deploy --all + 172 cd /etc/kubernetes/manifests/ + 173 ls + 174 ls .. + 175 sudo mv * .. + 176 ls + 177 sudo crictl ps + 178 sudo mkdir /var/lib/etcd-backup + 179 sudo ETCDCTL_API=3 etcdctl snapshot restore /tmp/etcdbackup.db --data-dir /var/lib/etcd-backup + 180 sudo rmdir /var/lib/etcd-backup/ + 181 sudo ETCDCTL_API=3 etcdctl snapshot restore /tmp/etcdbackup.db --data-dir /var/lib/etcd-backup + 182 sudo ls -l /var/lib/etcd-backup/ + 183 sudo ls -l /var/lib/etcd-backup/member + 184 sudo ls -l /var/lib/etcd/member + 185 sudo vim /etc/kubernetes/etcd.yaml + 186 sudo mv ../*.yaml . + 187 ls + 188 sudo crictl ps + 189 kubectl get deploy -A + 190 sudo mv ../*.yaml . + 191 sudo mv *.yaml .. + 192 ls + 193 vim ../etcd.yaml + 194 sudo vim ../etcd.yaml + 195 sudo mv /var/lib/etcd /var/lib/etcd.old + 196 sudo mv /var/lib/etcd-backup /var/lib/etcd + 197 sudo vim ../etcd.yaml + 198 mv ../*.yaml . + 199 sudo mv ../*.yaml . + 200 sudo crictl ps + 201 kubectl get deploty + 202 kubectl get deploy + 203 cd + 204 history + 205 sudo apt update + 206 sudo apt-cache madison kubeadm + 207 kubeadm version + 208 sudo apt update + 209 sudo apt-cache madison kubeadm + 210 sudo apt-mark unhold kubeadm + 211 udo apt-get update && sudo apt-get install -y kubeadm='1.29.3-*' + 212 sudo apt-get update && sudo apt-get install -y kubeadm='1.29.3-*' + 213 pager /etc/apt/sources.list.d/kubernetes.list + 214 vim /etc/apt/sources.list.d/kubernetes.list + 215 sudo vim /etc/apt/sources.list.d/kubernetes.list + 216 history + 217 sudo apt update + 218 sudo apt-cache madison kubeadm + 219 sudo apt-get update && sudo apt-get install -y kubeadm='1.29.3-1' + 220 sudo apt-get update && sudo apt-get install -y kubeadm='1.29.3-1.1' + 221 sudo apt-mark hold kubeadm + 222 kubeadm version + 223 sudo kubeadm upgrade plan + 224 sudo kubeadm upgrade apply v1.29.3 + 225 sudo apt-mark unhold kubelet kubectl + 226 sudo apt-get update && sudo apt-get install -y kubelet='1.29.3-1.1' kubectl='1.29.3-1.1' + 227 sudo apt-mark hold kubelet kubectl + 228 sudo systemctl daemon-reload + 229 sudo systemctl restart kubelet + 230 kubectl get nodes + 231 kubectl get pods + 232 history + 233 kubectl edit node control + 234 kubectl get pods -A -o wide + 235 kubectl explain pod.spec.nodeSelector + 236 cd cka/ + 237 vim selector-pod.yaml + 238 kubectl apply -f selector-pod.yaml + 239 kubectl delete pods --all + 240 kubectl apply -f selector-pod.yaml + 241 kubectl get pods + 242 kubectl describe pods nginx + 243 kubectl label nodes worker2 disktype=ssd + 244 kubectl get pods + 245 kubectl taint nodes worker1 example-key=value1:NoSchedule + 246 kubectl describe nodes worker1 + 247 kubectl cordon worker2 + 248 kubectl create deploy nginx-taint --image=nginx + 249 kubectl scale deploy nginx-taint --replicas=3 + 250 kubectl get pods -o wide + 251 vim taint-toleration.yaml + 252 kubectl apply -f taint-toleration.yaml + 253 kubectl get pods + 254 kubectl get pods -o wide + 255 kubectl edit node worker1 + 256 kubectl edit node worker2 + 257 kubectl get nodes + 258 kubectl get pods -o wide + 259 vim pod-with-node-affinity.yaml + 260 vim pod-with-node-anti-affinity.yaml + 261 vim pod-with-node-antiaffinity.yaml + 262 vim pod-with-pod-affinity.yaml + 263 history + 264 kubectl create role -h | less + 265 #kubectl create role pod-reader --verb=get --verb=list --verb=watch --resource=pods + 266 kubectl create ns roles + 267 kubectl create role viewers --verb=get --verb=list --verb=watch --resource=pods -n roles + 268 kubectl run viewpod --image=nginx --dry-run=client -o yaml > viewpod.yaml + 269 kubectl create sa viewers + 270 kubectl explain pod.spec.serviceaccount + 271 kubectl explain pod.spec.serviceAccount + 272 vim viewpod.yaml + 273 kubectl get sa -n roles + 274 kubectl create sa viewers -n roles + 275 kubectl get sa -n roles + 276 vim viewpod.yaml + 277 kubectl explain pod.metadata + 278 vim viewpod.yaml + 279 kubectl get roles -n roles + 280 kubectl create rolebinding -h | less + 281 #kubectl create rolebinding admin-binding --role=admin --serviceaccount=monitoring:sa-dev + 282 kubectl -n roles create rolebinding viewers --role=viewers --serviceaccount=roles:viewers + 283 kubectl get roles,rolebindings,sa -n roles + 284 history + 285 kubectl api-resources | less + 286 kubectl get roles,rolebindings,sa -n roles + 287 kubectl get pods -n kube-system + 288 kubectl get -n kube-system pod metrics-server-67fc4df55-9ddb8 -o yaml | grep -i serviceacc + 289 kubectl config view + 290 history + From b62ee8d935b46e4c14630e47e243b1db47b7a6b1 Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Tue, 1 Oct 2024 20:27:08 +0200 Subject: [PATCH 46/50] message --- setup-container-previous-version.sh | 4 ++++ setup-container.sh | 4 ++++ setup-kubetools-previousversion.sh | 12 +++++++----- setup-kubetools.sh | 10 +++++----- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/setup-container-previous-version.sh b/setup-container-previous-version.sh index 81894ef..71c5566 100755 --- a/setup-container-previous-version.sh +++ b/setup-container-previous-version.sh @@ -63,3 +63,7 @@ version = 2 sudo systemctl restart containerd fi +sudo ln -s /etc/apparmor.d/runc /etc/apparmor.d/disable/ +sudo apparmor_parser -R /etc/apparmor.d/runc + +touch /tmp/container.txt diff --git a/setup-container.sh b/setup-container.sh index 1b98c49..e574500 100755 --- a/setup-container.sh +++ b/setup-container.sh @@ -66,5 +66,9 @@ sudo install -m 755 runc.${PLATFORM} /usr/local/sbin/runc sudo systemctl enable --now containerd fi +sudo ln -s /etc/apparmor.d/runc /etc/apparmor.d/disable/ +sudo apparmor_parser -R /etc/apparmor.d/runc + + touch /tmp/container.txt exit diff --git a/setup-kubetools-previousversion.sh b/setup-kubetools-previousversion.sh index c95dde2..ec69a20 100755 --- a/setup-kubetools-previousversion.sh +++ b/setup-kubetools-previousversion.sh @@ -46,12 +46,14 @@ sleep 2 fi # Set iptables bridging -sudo cat < /etc/sysctl.d/k8s.conf -net.bridge.bridge-nf-call-ip6tables = 1 -net.bridge.bridge-nf-call-iptables = 1 -EOF -sudo sysctl --system +#sudo cat < /etc/sysctl.d/k8s.conf +#net.bridge.bridge-nf-call-ip6tables = 1 +#net.bridge.bridge-nf-call-iptables = 1 +#EOF +#sudo sysctl --system sudo crictl config --set \ runtime-endpoint=unix:///run/containerd/containerd.sock 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' + + diff --git a/setup-kubetools.sh b/setup-kubetools.sh index e6a9b19..2d54e5e 100755 --- a/setup-kubetools.sh +++ b/setup-kubetools.sh @@ -47,11 +47,11 @@ sleep 2 fi # Set iptables bridging -sudo cat < /etc/sysctl.d/k8s.conf -net.bridge.bridge-nf-call-ip6tables = 1 -net.bridge.bridge-nf-call-iptables = 1 -EOF -sudo sysctl --system +#sudo cat < /etc/sysctl.d/k8s.conf +#net.bridge.bridge-nf-call-ip6tables = 1 +#net.bridge.bridge-nf-call-iptables = 1 +#EOF +#sudo sysctl --system sudo crictl config --set \ runtime-endpoint=unix:///run/containerd/containerd.sock From 5ee7db7cebca6cf2dc7a5a5467e39f57f07c66a4 Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Wed, 2 Oct 2024 15:42:17 +0200 Subject: [PATCH 47/50] message --- novo-history.txt | 462 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 462 insertions(+) create mode 100644 novo-history.txt diff --git a/novo-history.txt b/novo-history.txt new file mode 100644 index 0000000..36c1bf0 --- /dev/null +++ b/novo-history.txt @@ -0,0 +1,462 @@ + 1 ping nu.nl + 2 ip a + 3 git + 4 git clone https://github.com/sandervanvugt/cka + 5 cd cka + 6 ls *sh + 7 vim setup-container-previous-version.sh + 8 ./setup-container-previous-version.sh + 9 history + 10 ls *sh + 11 ./setup-kubetools-previousversion.sh + 12 vim setup-container.sh + 13 touch /tmp/container.txt + 14 ./setup-kubetools-previousversion.sh + 15 history + 16 cat /etc/hosts + 17 sudo kubeadm init + 18 which kubeadm + 19 history + 20 mkdir -p $HOME/.kube + 21 kubectl get all + 22 kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml + 23 kubectl get pods -n kube-system + 24 history + 25 kubectl get nodes + 26 kubeadm -h | less + 27 kubeadm token -h | les + 28 kubeadm token -h | less + 29 kubeadm token list -h | less + 30 sudo kubeadm token create --print-join-command + 31 sudo kubeadm token list + 32 history + 33 kubectl -h | less + 34 kubectl completion -h | less + 35 source <(kubectl completion bash) + 36 kubectl create -h | less + 37 kubectl create deploy -h | less + 38 kubectl create deployment novoapp --image=nginx --replicas=3 + 39 kubectl get all + 40 kubectl delete pod novoapp-6c544c567c-46wgx + 41 kubectl get all + 42 history + 43 kubectl get all + 44 kubectl describe pod novoapp-6c544c567c-46wgx + 45 kubectl run -h | less + 46 kubectl run nginx --image=nginx + 47 kubectl get all + 48 kubectl delete pod nginx + 49 kubectl create deploy mydb --image=mariadb --replicas=3 + 50 kubectl get all + 51 kubectl describe pod mydb-7d6458794-cwx4j + 52 kubectl get all + 53 kubectl describe pod mydb-7d6458794-cwx4j + 54 kubectl logs mydb-7d6458794-rrtnf + 55 kubectl set env -h | less + 56 kubectl set env deploy mydb MARIADB_ROOT_PASSWORD=password + 57 kubectl get ll + 58 kubectl get all + 59 sudo systemctl status containerd + 60 ps aux | grep nginx + 61 sudo journalctl -u containerd + 62 journalctl + 63 kubectl get pods + 64 kubectl delete pod nginx --force --timeout=0 + 65 kubectl get all + 66 kubectl delete pods novoapp-6c544c567c-46wgx --force --timeout=0 + 67 kubectl get pods + 68 kubectl get pods -o wide + 69 kubectl create deploy failure --image=nginx --replicas=3 + 70 kubectl get all + 71 kubectl get all --show-labels + 72 kubectl get all --selector app=failure + 73 kubectl get all --selector app=failure -o wide + 74 kubectl delete pod failure-7fdf677784-fnd27 + 75 kubectl get all --selector app=failure -o wide + 76 kubectl delete pod failure-7fdf677784-fnd27 --force --timeout=0 + 77 kubectl get all --selector app=failure -o wide + 78 sudo ln -s /etc/apparmor.d/runc /etc/apparmor.d/disable/ + 79 sudo apparmor_parser -R /etc/apparmor.d/runc + 80 kubectl get all --selector app=failure -o wide + 81 curl 172.16.189.77 + 82 kubectl expose deployment failure --port=80 + 83 kubectl get all --selector app=failure -o wide + 84 curl 10.107.127.87 + 85 kubectl edit svc failure + 86 kubectl get all --selector app=failure -o wide + 87 kubectl edit svc failure + 88 kubectl describe svc failure + 89 kubectl edit svc failure + 90 kubectl describe svc failure + 91 vim exo1.txt + 92 history + 93 kubectl create deploy october --image=nginx --replicas=3 + 94 kubectl expose deploy october --type=NodePort --port=80 + 95 kubectl get all --selector app=october + 96 kubectl describe svc october + 97 kubectl get pods -n kube-system + 98 kubectl edit svc october + 99 kubectl get svc + 100 kubectl edit svc october + 101 kubectl delete svc failure + 102 history + 103 exit + 104 kubectl run webserver --image=nginx + 105 source <(kubectl completion bash) + 106 kubectl expose pod webserver --port=80 + 107 kubectl run testpod --image=busybox -- sleep 3600 + 108 kubectl get svc + 109 kubectl exec -it testpod -- wget webserver + 110 kubectl exec -it testpod -- cat /etc/resolv.conf + 111 kubectl get ns + 112 kubectl get pods + 113 kubectl get pods -n kube-system + 114 kubectl get pods -A + 115 kubectl create ns remote + 116 kubectl run interginx --image=nginx + 117 kubectl run remotebox --image=busybox -n remote -- sleep 3600 + 118 kubectl expose pod interginx --port=80 + 119 kubectl exec -it remotebox -n remote -- cat /etc/resolv.conf + 120 kubectl exec -it remotebox -n remote -- nslookup interginx + 121 kubectl exec -it remotebox -n remote -- nslookup interginx.default.svc.cluster.local + 122 history + 123 echo run busybox in the sleepy namespace, run nginx in the awake namespace and expose it. access the nginx application from busybox by using the dns name + 124 kubectl create ns sleepy + 125 kubectl create ns awake + 126 kubectl run awakeging --image=nginx -n awake + 127 kubectl -n awake expose pod awakeging + 128 kubectl -n awake expose pod awakeging --port=80 + 129 kubectl run -n sleepy busybox -- sleep 3600 + 130 kubectl run -n sleepy --image=busybox -- sleep 3600 + 131 kubectl get all -n sleepy + 132 kubectl delete pod sleep -n sleepy + 133 kubectl run sleepy --image=busybox -n sleepy -- sleep 3600 + 134 kubectl get all -n sleepy + 135 kubectl -n sleepy exec -it sleepy -- nslookup awakeging.awake.svc.cluster.local + 136 kubectl -n sleepy exec -it sleepy -- nslookup awakeging.awake + 137 cd cka/ + 138 kubectl create ns nwp-namespace + 139 vim nwp-lab9-1.yaml + 140 kubectl apply -f nwp-lab9-1.yaml + 141 kubectl expose pod nwp-nginx --port=80 + 142 kubectl exec -it nwp-busybox -n nwp-namespace -- wget --spider --timeout=1 nwp-nginx + 143 kubectl exec -it nwp-busybox -n nwp-namespace -- wget --spider --timeout=1 nwp-nginx.default.svc.cluster.local + 144 vim nwp-lab9-2.yaml + 145 kubectl apply -f nwp-lab9-2.yaml + 146 kubectl exec -it nwp-busybox -n nwp-namespace -- wget --spider --timeout=1 nwp-nginx.default.svc.cluster.local + 147 kubectl create deploy busybox --image=busybox -- sleep 3600 + 148 kubectl exec -it busybox-5b5ddd5fc-nzrz9 -- wget --spider --timeout=1 nwp-nginx + 149 etcdctl + 150 sudo apt install etcd-client + 151 sudo etcdctl --help | less + 152 sudo etcdctl snapshot save -h + 153 sudo etcdctl --endpoints=localhost:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key get / --prefix --keys-only + 154 sudo etcdctl --endpoints=localhost:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key snapshot save /tmp/etcdbackup.db + 155 ls -l /tmp/etcdbackup.db + 156 etcdctl --write-out=table snapshot status /tmp/etcdbackup.db + 157 sudo etcdctl --write-out=table snapshot status /tmp/etcdbackup.db + 158 history + 159 kubectl get deploy + 160 kubectl delete deploy mydb + 161 cd /etc/kubernetes/manifests/ + 162 ls + 163 sudo mv * .. + 164 sudo crictl ps + 165 sudo etcdctl snapshot restore /tmp/etcdbackup.db --data-dir /var/lib/etcd-backup + 166 sudo ls -l /var/lib/etcd-backup + 167 sudo vim /etc/kubernetes/etcd.yaml + 168 sudo mv ../*.yaml . + 169 sudo crictl ps + 170 kubectl get deploy -A + 171 sudo mv .. + 172 sudo mv * .. + 173 sudo mv /var/lib/etcd /var/lib/etcd-old + 174 sudo mv /var/lib/etcd-backup /var/lib/etcd + 175 sudo vim /etc/kubernetes/etcd.yaml + 176 sudo mv ../*.yaml . + 177 sudo crictl ps + 178 kubectl get deploy -A + 179 cd + 180 cd cka + 181 ls + 182 ls p* + 183 vim pv.yaml + 184 kubectl explain persistenvolume.spec | less + 185 kubectl explain persistentvolume.spec | less + 186 kubectl apply -f pv.yaml + 187 vim pvc.yaml + 188 kubectl apply -f pvc.yaml + 189 kubectl get pvc,pv + 190 vim pv-pod.yaml + 191 kubectl apply -f pv-pod.yaml + 192 kubectl exec -it pv-pod -- touch /usr/share/nginx/html/helloDK + 193 kubectl get pods + 194 source <(kubectl completion bash) + 195 kubectl describe pv pv-volume + 196 kubectl get pods -o wide | grep pv + 197 exit + 198 source <(kubectl completion bash) + 199 cd cka/ + 200 vim nwpolicy-complete-example.yaml + 201 kubectl apply -f nwpolicy-complete-example.yaml + 202 vim nwpolicy-complete-example.yaml + 203 kubectl expose pod nginx --port=80 + 204 kubectl exec -it busybox -- wget --spider --timeout=1 nginx + 205 kubectl get networkpolicy -o yaml + 206 kubectl get pods --show-labels + 207 kubectl label pod access=true + 208 kubectl label pod busybox access=true + 209 kubectl exec -it busybox -- wget --spider --timeout=1 nginx + 210 history + 211 vim nwpexample.yaml + 212 kubectl create ns nondefault + 213 vim nwpexample.yaml + 214 kubectl apply -f nwpexample.yaml + 215 kubectl describe ns nondefault + 216 kubectl get networkpolicy -n nondefault + 217 kubectl get networkpolicy + 218 kubectl run nginx1 --image=nginx -n nondefault + 219 kubectl run nginx2 --image=nginx + 220 kubectl label pod nginx2 role=web + 221 kubectl lable pod nginx1 -n nondefault role=web + 222 kubectl label pod nginx1 -n nondefault role=web + 223 kubectl expose pod nginx1 -n nondefault --port=80 + 224 kubectl expose pod nginx2 --port=80 + 225 kubectl get pods + 226 history + 227 kubectl exec -it busybox -- wget --spider --timeout=1 nginx1.nondefault.svc.cluster.local + 228 kubectl exec -it busybox -- wget --spider --timeout=1 nginx2.default.svc.cluster.local + 229 vim nwpexample.yaml + 230 kubectl get ns --show-labels + 231 vim nwpexample.yaml + 232 history + 233 kubectl exec -it busybox -- wget --spider --timeout=1 nginx1.nondefault.svc.cluster.local + 234 kubectl apply -f nwpexample.yaml + 235 kubectl exec -it busybox -- wget --spider --timeout=1 nginx1.nondefault.svc.cluster.local + 236 kubectl exec -it busybox -- wget --spider --timeout=1 nginx2.default.svc.cluster.local + 237 vim nwpexample.yaml + 238 kubectl get pods busybox --show-labels + 239 kubectl apply -f nwpexample.yaml + 240 kubectl exec -it busybox -- wget --spider --timeout=1 nginx1.nondefault.svc.cluster.local + 241 kubectl apply -f nwpexample.yaml + 242 kubectl get ns + 243 kubectl get pods remote + 244 kubectl get pods -n remote + 245 kubectl apply -f nwpexample.yaml + 246 vim nwpexample.yaml + 247 #kubectl label pod -n remote role=frontend + 248 kubectl exec -n remote -it remotebox wget --spider --timeout=1 nginx1.nondefault.svc.cluster.local + 249 kubectl exec -n remote -it remotebox -- wget --spider --timeout=1 nginx1.nondefault.svc.cluster.local + 250 kubectl get networkpolicy -n nondefault + 251 kubectl label pod -n remote role=frontend + 252 kubectl label pod remotepod -n remote role=frontend + 253 kubectl label pod remotebox -n remote role=frontend + 254 kubectl exec -n remote -it remotebox -- wget --spider --timeout=1 nginx1.nondefault.svc.cluster.local + 255 vim networkpolicy-example.yaml + 256 vim nwp-lab9-2.yaml + 257 kubectl get netpol + 258 kubectl delete netpol deny-from-other-namespaces + 259 kubectl describe netpol access-nginx + 260 kubectl get pods + 261 kubectl get ns + 262 kubectl get pods remote + 263 kubectl get pods -n remote + 264 kubectl -n remote exec -it remotebox -- wget --spider --timeout=1 nginx.default.svc.cluster.local + 265 history | grep app + 266 kubectl get all + 267 kubectl kubectl delete all all + 268 kubectl delete all all + 269 kubectl delete all --all + 270 kubectl api-resources | less + 271 kubectl api-resources | grep -i networkp + 272 kubectl explain networkpolicies.spec | less + 273 kubectl explain networkpolicies.spec.ingress | less + 274 kubectl explain networkpolicies.crd.projectcalico.org.spec.ingress | less + 275 kubectl completion -h | less + 276 kubectl get ds -A + 277 vim initex.yaml + 278 grep init * + 279 vim init-container.yaml + 280 kubectl apply -f init-container.yaml + 281 kubectl get pods + 282 kubectl get pods -n kube-system + 283 kubectl -n kube-system get pods calico-node-5xcrf -o yaml | less + 284 vim init-container.yaml + 285 kubectl delete -f init-container.yaml + 286 kubectl get pods + 287 kubectl apply -f init-container.yaml + 288 kubectl get pods + 289 kubectl get pods -w + 290 kubectl run examplepod --image=busybox --dry-run=client -o yaml -- sleep 10 + 291 kubectl run examplepod --image=busybox --dry-run=client -o yaml -- sleep 10 > sleep10.yaml + 292 vim sleep10.yaml + 293 kubectl apply -f sleep10.yaml + 294 kubectl get pods + 295 kubectl get pods -o wide + 296 kubectl run examplepod --image=busybox --dry-run=client -o yaml -- sh -c "sleep 10 > /tmp/sleep" + 297 kubectl create deploy daemon --image=nginx --dry-run=client -o yaml > daemon.yaml + 298 vim daemon.yaml + 299 kubectl apply -f daemon.yaml + 300 vim daemon.yaml + 301 kubectl apply -f daemon.yaml + 302 kubectl get daemonset + 303 kubectl get pods -o wide + 304 kubectl edit node control + 305 kubectl get ds -A + 306 kubectl -n kube-system get ds calico-node -o yaml | less + 307 kubectl run busybox date + 308 kubectl run testbox --image=busybox date + 309 kubectl run testbox --image=busybox -- date + 310 kubectl run testbox2 --image=busybox -- date + 311 kubectl run testbox3 --image=busybox + 312 kubectl get pods + 313 vim selector-pod.yaml + 314 kubectl apply -f selector-pod.yaml + 315 kubectl get pods + 316 kubectl describe pod nginx + 317 kubectl label node worker2 disktype=ssd + 318 kubectl get pods + 319 kubectl get pods -o wide + 320 kubectl edit node worker1 + 321 kubectl describe node worker1 + 322 kubectl taint node worker1 storage=ssd:NoSchedule + 323 kubectl describe node worker1 + 324 kubectl describe node worker1 | less /taint + 325 kubectl describe node worker1 | less + 326 kubectl create deploy tolerateornot --image=nginx --replicas=6 + 327 kubectl get pods -o wide + 328 vim taint-toleration.yaml + 329 kubectl apply -f taint-toleration.yaml + 330 kubectl get pods + 331 kubectl get pods -o wide + 332 kubectl apply -f taint-toleration.yaml + 333 vim taint-toleration.yaml + 334 vim taint-toleration2.yaml + 335 kubectl apply -f taint-toleration2.yaml + 336 kubectl get pods -o wide + 337 kubectl set -h + 338 kubectl set resources -h + 339 kubectl set resources -h | less + 340 kubectl get deploy + 341 kubectl taint node worker1 storage=ssd:NoSchedule- + 342 kubectl delete deploy tolerateornot + 343 kubectl create deploy whatever --image=nginx --replicas=3 + 344 kubectl set resources deployment whatever --limits=cpu=200m,memory=512Mi --requests=cpu=100m,memory=256Mi + 345 kubectl get deploy whatever -o yaml | less + 346 kubectl get pods -o wide + 347 kubectl set resources deployment whatever --limits=cpu=200m,memory=512Gi --requests=cpu=100m,memory=256Gi + 348 kubectl get pods -o wide + 349 kubectl describe pod whatever-694fbf4f4b-hsrfh + 350 kubectl set resources deployment whatever --limits=cpu=200m,memory=4Mi --requests=cpu=100m,memory=2Mi + 351 kubectl get pods + 352 kubectl describe pod whatever-684c54dfc-wjjg8 + 353 kubectl get pods + 354 kubectl describe pod whatever-684c54dfc-wqmsw + 355 kubectl delete deployments.apps whatever + 356 kubectl create ns notmuch + 357 kubectl create quota -h | less + 358 kubectl create quota notmany --hard=cpu=1,memory=1G,pods=2,services=3,resourcequotas=1,secrets=5,persistentvolumeclaims=10 -n notmuch + 359 kubectl create deploy alot --image=nginx --replicas=3 -n notmuch + 360 kubectl get all -n notmuch + 361 kubectl -n notmuch describe replicaset alot-8465f68dc6 + 362 kubectl set resources deployment alot --limits=cpu=200m,memory=128Mi --requests=cpu=100m,memory=2Mi -n notmuch + 363 kubectl get all -n notmuch + 364 kubectl describe -n notmuch pod alot-7cd6cbc85-zzm9t + 365 kubectl -n notmuch delete quota notmany + 366 kubectl get all -n notmuch + 367 kubectl create deploy mydb --image=mariadb --replicas=3 + 368 kubectl get all --selector app=mydb + 369 kubectl create cm -h | less + 370 kubectl create cm mydbvars --from-literal=MARIADB_ROOT_PASSWORD=password + 371 kubectl get cm mydbvars -o yaml + 372 kubectl set env -h | less + 373 #kubectl set env --from=configmap/myconfigmap --prefix=MYSQL_ deployment/myapp + 374 kubectl set env --from=configmap/mydbvars deployment/mydb + 375 kubec + 376 kubectl get all --selector app=mydb + 377 kubectl get deploy mydb -o yaml | less + 378 kubectl create secret mydbsecretpw --from-literal=ROOT_PASSWORD=password + 379 kubectl create secret -h | less + 380 kubectl create secret generic -h | less + 381 kubectl create secret generic mydbsecretpw --from-literal=ROOT_PASSWORD=password + 382 kubectl describe secrets mydbsecretpw + 383 kubectl get secrets mydbsecretpw -o yaml + 384 echo cGFzc3dvcmQ= | base64 -d + 385 vim exo2.txt + 386 #kubectl create secret generic mynewdbvars --from-literal=whatever=password + 387 kubectl create secret generic mynewdbvars --from-literal=whatever=password + 388 kubectl get secrets mynewdbvars -o yaml + 389 kubectl create deploy whateverdb --image=mariadb + 390 kubectl set env --from secret/mynewdbvars deploy/whateverdb + 391 kubectl edit deploy whateverdb + 392 kubectl get all --selector app=whateverdb + 393 kubectl explain deploy.spec | less + 394 kubectl get nodes + 395 kubectl drain node worker2 + 396 kubectl drain worker2 + 397 kubectl drain worker2 --force + 398 kubectl drain worker2 --force --ignore-daemonsets + 399 kubectl get nodes + 400 kubectl get pods -o wide + 401 kubectl edit node worker2 + 402 kubectl uncordon worker2 + 403 kubectl get nodes + 404 kubectl get pods -o wide + 405 vim morevolumes.yaml + 406 kubectl apply -f morevolumes.yaml + 407 kubectl get pods + 408 kubectl delete pods morevol + 409 kubectl get pods + 410 kubectl apply -f morevolumes.yaml + 411 kubectl get pods + 412 kubectl exec -it morevol -c centos1 touch /centos1/centfile + 413 kubectl exec -it morevol -c centos2 ls -l /centos2/ + 414 kubectl exec -it morevol -c centos2 -- ls -l /centos2/ + 415 kubectl top pods + 416 kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components + 417 kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml + 418 kubectl get pods -n kube-system + 419 kubectl edit deploy -n kube-system metrics-server + 420 kubectl get pods -n kube-system + 421 kubectl top pods + 422 kubectl get pods -n kube-system -o wide + 423 sudo -i + 424 cd /etc/kubernetes/manifests/ + 425 ls + 426 vim etcd.yaml + 427 sudo vim etcd.yaml + 428 sudo ls -l /var/lib/etcd/ + 429 sudo ls -l /var/lib/etcd/member + 430 ls -l /etc/pki + 431 ls -l /etc/ssl + 432 ls -l /etc/ssl/certs + 433 sudo ps aux | grep kube-api + 434 cd /cka + 435 cd / + 436 cd home/student/ + 437 ls + 438 cd cka + 439 ls + 440 vim security-context.yaml + 441 kubectl apply -f security-context.yaml + 442 kubectl exec -it security-context-demo -- sh + 443 kubectl create role -h + 444 kubectl create role -h | less + 445 kubectl get roles + 446 kubectl create role pod-reader --verb=get --verb=list --verb=watch --resource=pods + 447 kubectl get roles + 448 kubectl describe role pod-reader + 449 kubectl get roles -n awake + 450 kubectl get pods -o yaml pv-pod | less + 451 kubectl get sa -A + 452 kubectl create sa myown + 453 kubectl get roles + 454 kubectl create rolebinding -h | less + 455 #kubectl create rolebinding admin-binding --role=admin --serviceaccount=monitoring:sa-dev + 456 kubectl create rolebinding pod-reader-binding --role=pod-reader --serviceaccount=default:myown + 457 kubectl get deploy + 458 kubectl set serviceaccount -h | less + 459 kubectl set serviceaccount deploy mydb myown + 460 exit + 461 history + 462 history > /tmp/novo-history.txt From e4078cf8818f9fb7dc9beaecd4299c589050676f Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Mon, 14 Oct 2024 18:57:09 +0200 Subject: [PATCH 48/50] message --- history-14Oct24.txt | 146 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 history-14Oct24.txt diff --git a/history-14Oct24.txt b/history-14Oct24.txt new file mode 100644 index 0000000..31863dd --- /dev/null +++ b/history-14Oct24.txt @@ -0,0 +1,146 @@ +ON CONTROLLER NODE + 1 git clone https://github.com/sandervanvugt/cka + 2 cd cka + 3 ls + 4 ./setup-container.sh + 5 ls + 6 ./setup-kubetools.sh + 7 history + 8 sudo kubeadm init + 9 cd + 10 mkdir -p $HOME/.kube + 11 kubectl get all + 12 kubectl get pods -n kube-system + 13 source <(kubectl completion bash) + 14 kubectl describe -n kube-system pod coredns-7c65d6cfc9-z5rsc + 15 kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml + 16 kubectl get pods -n kube-system + 17 history + 18 kubectl get nodes + 19 kubectl describe node control + 20 history + 21 cd cka/ + 22 ./counter.sh 12 + 23 kubectl get nodes + 24 sudo apt install helm + 25 helm + 26 cd .. + 27 ls + 28 tar xvf helm-v3.16.2-linux-arm64.tar.gz + 29 sudo cp linux-arm64/helm /usr/local/bin + 30 helm upgrade --install ingress-nginx ingress-nginx --repo https://kubernetes.github.io/ingress-nginx --namespace ingress-nginx --create-namespace + 31 kubectl get all -n ingress-nginx + 32 history + 33 kubectl create deploy nginxsvc --image=nginx --port=80 + 34 kubectl expose deploy nginxsvc + 35 kubectl get all --selector app=nginxsvc + 36 kubectl create ingress nginxsvc --class=nginx --rule=nginxsvc.info/*=nginxsvc:80 + 37 kubectl port-forward -n ingress-nginx svc/ingress-nginx-controller 8080:80 + 38 bg + 39 sudo sh -c 'echo "127.0.0.1 nginxsvc.info" >> /etc/hosts' + 40 cat /etc/hosts + 41 curl nginxsvc.info:8080 + 42 kubectl create ing -h | less + 43 history + 44 kubectl get all -n ingress-nginx + 45 kubectl edit -n ingress-nginx svc ingress-nginx-controller + 46 kubectl get all -n ingress-nginx + 47 cd cka + 48 ./counter.sh 1 + 49 history + 50 kubectl edit svc nginxsvc + 51 kubectl describe ingress nginxsvc + 52 kubectl describe svc nginxsvc + 53 kubectl edit svc nginxsvc + 54 kubectl describe svc nginxsvc + 55 kubectl describe node control | less + 56 df -h + 57 kubectl create ns limited + 58 kubectl create quota qtest --hard pods=3,cpu=100m,memory=500Mi + 59 kubectl get pods + 60 kubectl scale deploy nginxsvc --replicas=5 + 61 kubectl get all + 62 kubectl delete quota qtest + 63 kubectl scale deploy nginxsvc --replicas=5 -n limited + 64 kubectl create quota qtest --hard pods=3,cpu=100m,memory=500Mi -n limited + 65 kubectl describe quota -n limited + 66 kubectl create deploy nginx --image=nginx --replicas=3 -n limited + 67 kubectl get all -n limited + 68 kubectl describe rs nginxsvc-7f8cdcb4db + 69 kubectl get all -n limited + 70 kubectl -n limited describe rs nginx-676b6c5bbc + 71 history + 72 kubectl -n limited set resources deploy nginx --requests cpu=100m,memory=5Mi --limits cpu=200m,memory=20m + 73 kubectl -n limited set resources deploy nginx --requests cpu=100m,memory=20Mi --limits cpu=200m,memory=40m + 74 kubectl -n limited set resources deploy nginx --requests cpu=100m,memory=20Mi --limits cpu=200m,memory=40Mi + 75 kubectl get pods -n limited + 76 kubectl get all -n limited + 77 kubectl scale -n limited deploy nginx --replicas=4 + 78 kubectl scale -n limited deploy nginx --replicas=3 + 79 kubectl get all -n limited + 80 kubectl describe -n limited quota qtest + 81 kubectl edit quota -n limited qtest + 82 kubectl get all -n limited + 83 kubectl scale -n limited deploy nginx --replicas=3 + 84 kubectl get all -n limited + 85 kubectl describe -n limited quota qtest + 86 kubectl scale -n limited deploy nginx --replicas=2 + 87 kubectl get all -n limited + 88 kubectl scale -n limited deploy nginx --replicas=3 + 89 kubectl get all -n limited + 90 history + 91 kubectl create ns limited + 92 vim limitrange.yaml + 93 kubectl apply -f limitrange.yaml -n limited + 94 kubectl describe ns limited + 95 kubectl run limitpod --image=nginx -n limited + 96 kubectl -n limited delete quota + 97 kubectl -n limited delete quota qtest + 98 kubectl run limitpod --image=nginx -n limited + 99 kubectl describe -n limited pod limitpod + 100 history + 101 kubectl get pods -A -o wide + 102 kubectl get pods -o wide + 103 kubectl create deploy testdeploy --image=nginx --replicas=6 + 104 kubectl get pods -o wide + 105 kubectl drain worker2 + 106 kubectl drain worker2 --ignore-daemonsets --force + 107 kubectl get pods + 108 kubectl get pods -o wide + 109 kubectl get nodes + 110 kubectl describe node worker2 + 111 kubectl edit node worker2 + 112 kubectl uncordon worker2 + 113 kubectl get pods -o wide + 114 kubectl create newweb --image=nginx --replicas=20 + 115 kubectl create deploy newweb --image=nginx --replicas=20 + 116 kubectl get pods -o wide + 117 kubectl delete deploy newweb + 118 history + 119 sudo ls -l /etc/kubernetes/manifests + 120 kubectl run staticpod --image=nginx --dry-run=client -o yaml + 121 kubectl get pods + 122 sudo -i + 123 history >> /tmp/history-14Oct24.txt + +ON WORKER1 + 1 git clone https://github.com/sandervanvugt/cka + 2 cd cka + 3 ./setup-container.sh + 4 ./setup-kubetools.sh + 5 sudo kubeadm join 192.168.29.220:6443 --token 1lmw4f.ow5iplrq9duz747f --discovery-token-ca-cert-hash sha256:9f4ca9d11687b1ef871fbc306e7fae682b5750de059cea3420fb4e5111a76c39 + 6 history + 7 sudo vim /etc/kubernetes/manifests/staticpod.yaml + 8 crictl ps + 9 sudo crictl ps + 10 sudo -i + 11 history + +ON CLIENT +42 scp helm-v3.16.2-linux-arm64.tar.gz 192.168.29.220:/home/student/Downloads + 43 scp helm-v3.16.2-linux-arm64.tar.gz 192.168.29.220:/home/student/ + 44 curl 10.103.142.248 + 45 history + 46 sudo vim /etc/hosts + 47 curl nginxsvc.info:31390 + From 0630eb32e6cd96b9e11a45ae94e14f9d4f1b224e Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Tue, 15 Oct 2024 18:55:21 +0200 Subject: [PATCH 49/50] message --- history-15Oct24.txt | 282 ++++++++++++++++++++++++++ setup-container-previous-version 2.sh | 69 +++++++ 2 files changed, 351 insertions(+) create mode 100644 history-15Oct24.txt create mode 100755 setup-container-previous-version 2.sh diff --git a/history-15Oct24.txt b/history-15Oct24.txt new file mode 100644 index 0000000..47f9e27 --- /dev/null +++ b/history-15Oct24.txt @@ -0,0 +1,282 @@ + 1 git clone https://github.com/sandervanvugt/cka + 2 cd cka + 3 ls + 4 ./setup-container.sh + 5 ls + 6 ./setup-kubetools.sh + 7 history + 8 sudo kubeadm init + 9 cd + 10 mkdir -p $HOME/.kube + 11 kubectl get all + 12 kubectl get pods -n kube-system + 13 source <(kubectl completion bash) + 14 kubectl describe -n kube-system pod coredns-7c65d6cfc9-z5rsc + 15 kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml + 16 kubectl get pods -n kube-system + 17 history + 18 kubectl get nodes + 19 kubectl describe node control + 20 history + 21 cd cka/ + 22 ./counter.sh 12 + 23 kubectl get nodes + 24 sudo apt install helm + 25 helm + 26 cd .. + 27 ls + 28 tar xvf helm-v3.16.2-linux-arm64.tar.gz + 29 sudo cp linux-arm64/helm /usr/local/bin + 30 helm upgrade --install ingress-nginx ingress-nginx --repo https://kubernetes.github.io/ingress-nginx --namespace ingress-nginx --create-namespace + 31 kubectl get all -n ingress-nginx + 32 history + 33 kubectl create deploy nginxsvc --image=nginx --port=80 + 34 kubectl expose deploy nginxsvc + 35 kubectl get all --selector app=nginxsvc + 36 kubectl create ingress nginxsvc --class=nginx --rule=nginxsvc.info/*=nginxsvc:80 + 37 kubectl port-forward -n ingress-nginx svc/ingress-nginx-controller 8080:80 + 38 bg + 39 sudo sh -c 'echo "127.0.0.1 nginxsvc.info" >> /etc/hosts' + 40 cat /etc/hosts + 41 curl nginxsvc.info:8080 + 42 kubectl create ing -h | less + 43 history + 44 kubectl get all -n ingress-nginx + 45 kubectl edit -n ingress-nginx svc ingress-nginx-controller + 46 kubectl get all -n ingress-nginx + 47 cd cka + 48 ./counter.sh 1 + 49 history + 50 kubectl edit svc nginxsvc + 51 kubectl describe ingress nginxsvc + 52 kubectl describe svc nginxsvc + 53 kubectl edit svc nginxsvc + 54 kubectl describe svc nginxsvc + 55 kubectl describe node control | less + 56 df -h + 57 kubectl create ns limited + 58 kubectl create quota qtest --hard pods=3,cpu=100m,memory=500Mi + 59 kubectl get pods + 60 kubectl scale deploy nginxsvc --replicas=5 + 61 kubectl get all + 62 kubectl delete quota qtest + 63 kubectl scale deploy nginxsvc --replicas=5 -n limited + 64 kubectl create quota qtest --hard pods=3,cpu=100m,memory=500Mi -n limited + 65 kubectl describe quota -n limited + 66 kubectl create deploy nginx --image=nginx --replicas=3 -n limited + 67 kubectl get all -n limited + 68 kubectl describe rs nginxsvc-7f8cdcb4db + 69 kubectl get all -n limited + 70 kubectl -n limited describe rs nginx-676b6c5bbc + 71 history + 72 kubectl -n limited set resources deploy nginx --requests cpu=100m,memory=5Mi --limits cpu=200m,memory=20m + 73 kubectl -n limited set resources deploy nginx --requests cpu=100m,memory=20Mi --limits cpu=200m,memory=40m + 74 kubectl -n limited set resources deploy nginx --requests cpu=100m,memory=20Mi --limits cpu=200m,memory=40Mi + 75 kubectl get pods -n limited + 76 kubectl get all -n limited + 77 kubectl scale -n limited deploy nginx --replicas=4 + 78 kubectl scale -n limited deploy nginx --replicas=3 + 79 kubectl get all -n limited + 80 kubectl describe -n limited quota qtest + 81 kubectl edit quota -n limited qtest + 82 kubectl get all -n limited + 83 kubectl scale -n limited deploy nginx --replicas=3 + 84 kubectl get all -n limited + 85 kubectl describe -n limited quota qtest + 86 kubectl scale -n limited deploy nginx --replicas=2 + 87 kubectl get all -n limited + 88 kubectl scale -n limited deploy nginx --replicas=3 + 89 kubectl get all -n limited + 90 history + 91 kubectl create ns limited + 92 vim limitrange.yaml + 93 kubectl apply -f limitrange.yaml -n limited + 94 kubectl describe ns limited + 95 kubectl run limitpod --image=nginx -n limited + 96 kubectl -n limited delete quota + 97 kubectl -n limited delete quota qtest + 98 kubectl run limitpod --image=nginx -n limited + 99 kubectl describe -n limited pod limitpod + 100 history + 101 kubectl get pods -A -o wide + 102 kubectl get pods -o wide + 103 kubectl create deploy testdeploy --image=nginx --replicas=6 + 104 kubectl get pods -o wide + 105 kubectl drain worker2 + 106 kubectl drain worker2 --ignore-daemonsets --force + 107 kubectl get pods + 108 kubectl get pods -o wide + 109 kubectl get nodes + 110 kubectl describe node worker2 + 111 kubectl edit node worker2 + 112 kubectl uncordon worker2 + 113 kubectl get pods -o wide + 114 kubectl create newweb --image=nginx --replicas=20 + 115 kubectl create deploy newweb --image=nginx --replicas=20 + 116 kubectl get pods -o wide + 117 kubectl delete deploy newweb + 118 history + 119 sudo ls -l /etc/kubernetes/manifests + 120 kubectl run staticpod --image=nginx --dry-run=client -o yaml + 121 kubectl get pods + 122 sudo -i + 123 history >> /tmp/history-14Oct24.txt + 124 vim /tmp/history-14Oct24.txt + 125 kubectl config view + 126 kubectl api-resources | grep -i networkp + 127 vim nwpolicy-complete-example.yaml + 128 kubectl apply -f nwpolicy-complete-example.yaml + 129 kubectl expose pod nginx --port=80 + 130 kubectl get svc + 131 kubectl exec -it busybox -- wget --spider --timeout=1 nginx + 132 vim nwpolicy-complete-example.yaml + 133 kubectl lab pod busybox access=true + 134 kubectl label pod busybox access=true + 135 kubectl exec -it busybox -- wget --spider --timeout=1 nginx + 136 history + 137 kubectl create ns new-namespace + 138 kubectl create ns nwp-namespace + 139 vim nwp-lab9-1.yaml + 140 kubectl create -f nwp-lab9-1.yaml + 141 kubectl expose pod nwp-nginx --port=80 + 142 kubectl exec -it nwp-busybox -n nwp-namespace -- wget --spider --timeout=1 nwp-nginx + 143 kubectl exec -it nwp-busybox -n nwp-namespace -- nslookup nwp-nginx + 144 kubectl exec -it nwp-busybox -n nwp-namespace -- wget --spider --timeout=1 nwp-nginx.default.svc.cluster.local + 145 vim nwp-lab9-2.yaml + 146 kubectl exec -it nwp-busybox -n nwp-namespace -- wget --spider --timeout=1 nwp-nginx.default.svc.cluster.local + 147 kubectl apply -f nwp-lab9-2.yaml + 148 kubectl exec -it nwp-busybox -n nwp-namespace -- wget --spider --timeout=1 nwp-nginx.default.svc.cluster.local + 149 kubectl create deploy busybox --image=busybox --sleep 3600 + 150 kubectl create deploy busybox --image=busybox -- sleep 3600 + 151 kubectl exec -it busybox-75cd85d546-wd6wq -- wget --spider --timeout=1 nwp-nginx + 152 kubectl get netpol + 153 kubectl delete netpol access-nginx + 154 kubectl delete netpol deny-from-other-namespaces + 155 history + 156 kubectl top pods + 157 kubectl top node + 158 kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml + 159 kubectl -n kube-system get pods + 160 kubectl edit -n kube-system deployments.apps metrics-server + 161 kubectl -n kube-system get pods + 162 kubectl top pods + 163 history + 164 kubectl get quota + 165 kubectl create quota -h | less + 166 #kubectl create quota my-quota --hard=cpu=1,memory=1G,pods=2,services=3,replicationcontrollers=2,resourcequotas=1,secrets=5,persistentvolumeclaims=10 + 167 kubectl create quota one --hard=cpu=1 + 168 kubectl create quota two --hard=memory=4G + 169 kubectl create quota three --hard=cpu=2 + 170 kubectl describe ns default + 171 kubectl delete quota one two three + 172 kubectl top -h | less + 173 kubectl top pod -h | less + 174 kubectl top pod -A --sort-by="memory" + 175 history + 176 kubectl run testpox --image=nginx --dry-run=client -o yaml + 177 kubectl get pods + 178 history + 179 kubectl get pods + 180 sudo apt install etcd-client + 181 sudo etcdctl --help + 182 sudo ETCDCTL_API=2 etcdctl --help + 183 sudo ETCDCTL_API=3 etcdctl --help + 184 ps aux | grep 2379 + 185 sudo etcdctl --endpoints=localhost:2379 --cacert /etc/kubernetes/pki/etcd/ca.rt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key get / --prefix --keys-only + 186 sudo etcdctl --endpoints=localhost:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key get / --prefix --keys-only + 187 sudo etcdctl --endpoints=localhost:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key snapshot save /tmp/etcdbackup.db + 188 ls -l /tmp/etcdbackup.db + 189 sudo etcdctl --write-out=table snapshot status /tmp/etcdbackup.db + 190 cp /tmp/etcdbackup.db /tmp/etcdbackup.db.2 + 191 sudo cp /tmp/etcdbackup.db /tmp/etcdbackup.db.2 + 192 history + 193 kubectl get deploy + 194 kubectl delete deploy --all + 195 kubectl get deploy + 196 cd /etc/kubernetes/manifests/ + 197 ls + 198 sudo mv * .. + 199 sudo dnf install tree + 200 sudo apt install tree + 201 sudo tree /var/lib/etcd + 202 sudo mv /var/lib/etcd /var/lib/etcd-backup + 203 sudo tree /var/lib/etcd + 204 sudo etcdctl snapshot restore /tmp/etcdbackup.db --data-dir /var/lib/etcd + 205 sudo tree /var/lib/etcd + 206 sudo mv ../*.yaml . + 207 sudo crictl ps + 208 kubectl get deploy + 209 kubectl get pods + 210 kubectl delete deploy testdeploy + 211 history + 212 kubectl get nodes + 213* + 214 cd + 215 vim nodesel.yam;l + 216 vim nodesel.yaml + 217 kubectl apply -f nodesel.yaml + 218 kubectl get pods -o yaml + 219 kubectl get pods -o wide + 220 vim nodesel.yaml + 221 kubectl apply -f nodesel.yaml + 222 kubectl get pods + 223 kubectl describe pod islectnginxxxxxx + 224 kubectl get deploy + 225 kubectl get pods + 226 kubectl delete pods --force --timeout=0 testdeploy-7cd7d7ddc8-28mcq testdeploy-7cd7d7ddc8-fqh6v testdeploy-7cd7d7ddc8-ftk48 testdeploy-7cd7d7ddc8-pd7sd testdeploy-7cd7d7ddc8-stj67 testdeploy-7cd7d7ddc8-stxsx + 227 kubectl get pods + 228 history + 229 kubectl get node control -o yaml | less + 230 kubectl get ds -A + 231 kubectl get ds -n kube-system kube-proxy -o yaml | less + 232 kubectl get ds -n kube-system calico-node -o yaml | less + 233 history + 234 kubectl taint nodes worker1 storage=ssd:NoSchedule + 235 kubectl describe node worker1 + 236 kubectl create deploy nginx-taint --image=nginx --replicas=3 + 237 kubectl get pods -o wide + 238 cd cka/ + 239 vim taint-toleration.yaml + 240 kubectl apply -f taint-toleration.yaml + 241 kubectl get pods -o wide | grep tole + 242 vim taint-toleration2.yaml + 243 kubectl apply -f taint-toleration2.yaml + 244 kubectl get pods -o wide | grep hdd + 245 vim taint-toleration2.yaml + 246 kubectl apply -f taint-toleration2.yaml + 247 vim taint-toleration2.yaml + 248 kubectl apply -f taint-toleration2.yaml + 249 kubectl get pods -o wide | grep exists + 250 history + 251 vim ~/.kube/config + 252 kubectl get sa + 253 kubectl get sa -n kube-system + 254 kubectl create role -h | less + 255 kubectl create rolebinding -h | less + 256 kubectl run mypod --image=alpine -- sleep 3600 + 257 kubectl get pods mypod -o yaml | less + 258 kubectl exec -it mypod -- sh + 259 historyt + 260 history + 261 kubectl create sa mysa + 262 kubectl create role list-pods --resource=pods --verbs=list + 263 kubectl create role list-pods --resource=pods --verb=list + 264 kubectl describe role list-pods + 265 kubectl create rolebinding list-pods --role=list-pods --serviceaccount=default:default + 266 vim mysapod.yaml + 267 kubectl apply -f mysapod.yaml + 268 kubectl exec -it mysapod -- sh + 269 ls *role* + 270 grep -li 'type=role' * + 271 kubectl get rolebindings + 272 kubectl create rolebinding list-pods --role=list-pods --serviceaccount=default:mysa + 273 kubectl delete rolebindings.rbac.authorization.k8s.io list-pods + 274 kubectl create rolebinding list-pods --role=list-pods --serviceaccount=default:mysa + 275 kubectl exec -it mysapod -- sh + 276 kubectl get pods + 277 kubectl delete pod mysapod + 278 kubectl delete pod mysapod --force --timeout=1 + 279 kubectl delete pod mysapod --force --timeout=0 + 280 kubectl apply -f mysapod.yaml + 281 kubectl exec -it mysapod -- sh + 282 history > /tmp/history-15Oct24.txt diff --git a/setup-container-previous-version 2.sh b/setup-container-previous-version 2.sh new file mode 100755 index 0000000..71c5566 --- /dev/null +++ b/setup-container-previous-version 2.sh @@ -0,0 +1,69 @@ +#!/bin/bash +# script that runs +# https://kubernetes.io/docs/setup/production-environment/container-runtime + +# changes March 14 2023: introduced $PLATFORM to have this work on amd64 as well as arm64 + +# setting MYOS variable +MYOS=$(hostnamectl | awk '/Operating/ { print $3 }') +OSVERSION=$(hostnamectl | awk '/Operating/ { print $4 }') +# beta: building in ARM support +[ $(arch) = aarch64 ] && PLATFORM=arm64 +[ $(arch) = x86_64 ] && PLATFORM=amd64 + +if [ $MYOS = "Ubuntu" ] +then + ### setting up container runtime prereq + cat <<- EOF | sudo tee /etc/modules-load.d/containerd.conf + overlay + br_netfilter + EOF + + sudo modprobe overlay + sudo modprobe br_netfilter + + # Setup required sysctl params, these persist across reboots. + cat <<- EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf + net.bridge.bridge-nf-call-iptables = 1 + net.ipv4.ip_forward = 1 + net.bridge.bridge-nf-call-ip6tables = 1 + EOF + + # Apply sysctl params without reboot + sudo sysctl --system + + # (Install containerd) + + sudo apt-get update && sudo apt-get install -y containerd + # hopefully temporary bugfix as the containerd version provided in Ubu repo is tool old + # added Jan 26th 2023 + # this needs to be updated when a recent enough containerd version will be in Ubuntu repos + sudo systemctl stop containerd + # cleanup old files from previous attempt if existing + [ -d bin ] && rm -rf bin + wget https://github.com/containerd/containerd/releases/download/v1.6.15/containerd-1.6.15-linux-${PLATFORM}.tar.gz + tar xvf containerd-1.6.15-linux-${PLATFORM}.tar.gz + sudo mv bin/* /usr/bin/ + # Configure containerd + sudo mkdir -p /etc/containerd + cat <<- TOML | sudo tee /etc/containerd/config.toml +version = 2 +[plugins] + [plugins."io.containerd.grpc.v1.cri"] + [plugins."io.containerd.grpc.v1.cri".containerd] + discard_unpacked_layers = true + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] + runtime_type = "io.containerd.runc.v2" + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] + SystemdCgroup = true + TOML + + # Restart containerd + sudo systemctl restart containerd +fi + +sudo ln -s /etc/apparmor.d/runc /etc/apparmor.d/disable/ +sudo apparmor_parser -R /etc/apparmor.d/runc + +touch /tmp/container.txt From a64c9fdff9e1990179f837732676ed3490a7f7b2 Mon Sep 17 00:00:00 2001 From: sandervanvugt Date: Wed, 13 Nov 2024 11:13:14 +0100 Subject: [PATCH 50/50] message --- counter 2.sh | 11 +++ exam-grade.sh | 102 ++++++++++++++++++++++++++ labs/exam-task1.sh | 39 ++++++++++ labs/exam-task10.sh | 8 +++ labs/exam-task11.sh | 26 +++++++ labs/exam-task12.sh | 27 +++++++ labs/exam-task13.sh | 17 +++++ labs/exam-task14.sh | 18 +++++ labs/exam-task15.sh | 8 +++ labs/exam-task2.sh | 11 +++ labs/exam-task3.sh | 17 +++++ labs/exam-task4.sh | 8 +++ labs/exam-task5.sh | 17 +++++ labs/exam-task6.sh | 22 ++++++ labs/exam-task7.sh | 36 ++++++++++ labs/exam-task8.sh | 17 +++++ labs/exam-task9.sh | 17 +++++ setup-lb-ubuntu-alpha.sh | 151 --------------------------------------- setup-lb-ubuntu-beta.sh | 145 ------------------------------------- setup-lb-ubuntu.sh | 4 -- setup-lb.sh | 100 -------------------------- 21 files changed, 401 insertions(+), 400 deletions(-) create mode 100755 counter 2.sh create mode 100755 exam-grade.sh create mode 100644 labs/exam-task1.sh create mode 100644 labs/exam-task10.sh create mode 100644 labs/exam-task11.sh create mode 100644 labs/exam-task12.sh create mode 100644 labs/exam-task13.sh create mode 100644 labs/exam-task14.sh create mode 100644 labs/exam-task15.sh create mode 100644 labs/exam-task2.sh create mode 100644 labs/exam-task3.sh create mode 100644 labs/exam-task4.sh create mode 100644 labs/exam-task5.sh create mode 100644 labs/exam-task6.sh create mode 100644 labs/exam-task7.sh create mode 100644 labs/exam-task8.sh create mode 100644 labs/exam-task9.sh delete mode 100755 setup-lb-ubuntu-alpha.sh delete mode 100755 setup-lb-ubuntu-beta.sh delete mode 100755 setup-lb.sh diff --git a/counter 2.sh b/counter 2.sh new file mode 100755 index 0000000..ead984c --- /dev/null +++ b/counter 2.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +COUNTER=$1 +COUNTER=$(( COUNTER * 60 )) + +while true +do + echo $COUNTER seconds remaining + sleep 1 + COUNTER=$(( COUNTER - 1 )) +done diff --git a/exam-grade.sh b/exam-grade.sh new file mode 100755 index 0000000..e1536fc --- /dev/null +++ b/exam-grade.sh @@ -0,0 +1,102 @@ +#!/bin/bash +# exit if not root +clear +# evaluating tasks +echo -e "\033[1mchecking task 1 results\033[0m" +source labs/exam-task1.sh +echo the score is $SCORE +TOTALSCORE=$SCORE +TOTALTOTAL=$TOTAL + +echo -e "\033[1mchecking task 2 results\033[0m" +source labs/exam-task2.sh +echo the score is $SCORE +TOTALSCORE=$(( TOTAL + SCORE )) +TOTALTOTAL=$TOTAL + +echo -e "\033[1mchecking task 3 results\033[0m" +source labs/exam-task3.sh +echo the score is $SCORE +TOTALSCORE=$(( TOTAL + SCORE )) +TOTALTOTAL=$TOTAL + +echo -e "\033[1mchecking task 4 results\033[0m" +source labs/exam-task4.sh +echo the score is $SCORE +TOTALSCORE=$(( TOTAL + SCORE )) +TOTALTOTAL=$TOTAL + +echo -e "\033[1mchecking task 5 results\033[0m" +source labs/exam-task5.sh +echo the score is $SCORE +TOTALSCORE=$(( TOTAL + SCORE )) +TOTALTOTAL=$TOTAL + +echo -e "\033[1mchecking task 6 results\033[0m" +source labs/exam-task6.sh +echo the score is $SCORE +TOTALSCORE=$(( TOTAL + SCORE )) +TOTALTOTAL=$TOTAL + +echo -e "\033[1mchecking task 7 results\033[0m" +source labs/exam-task7.sh +echo the score is $SCORE +TOTALSCORE=$(( TOTAL + SCORE )) +TOTALTOTAL=$TOTAL + +echo -e "\033[1mchecking task 8 results\033[0m" +source labs/exam-task8.sh +echo the score is $SCORE +TOTALSCORE=$(( TOTAL + SCORE )) +TOTALTOTAL=$TOTAL + +echo -e "\033[1mchecking task 9 results\033[0m" +source labs/exam-task9.sh +echo the score is $SCORE +TOTALSCORE=$(( TOTAL + SCORE )) +TOTALTOTAL=$TOTAL + +echo -e "\033[1mchecking task 10 results\033[0m" +source labs/exam-task10.sh +echo the score is $SCORE +TOTALSCORE=$(( TOTAL + SCORE )) +TOTALTOTAL=$TOTAL + +echo -e "\033[1mchecking task 11 results\033[0m" +source labs/exam-task11.sh +echo the score is $SCORE +TOTALSCORE=$(( TOTAL + SCORE )) +TOTALTOTAL=$TOTAL + +echo -e "\033[1mchecking task 12 results\033[0m" +source labs/exam-task12.sh +echo the score is $SCORE +TOTALSCORE=$(( TOTAL + SCORE )) +TOTALTOTAL=$TOTAL + +echo -e "\033[1mchecking task 13 results\033[0m" +source labs/exam-task13.sh +echo the score is $SCORE +TOTALSCORE=$(( TOTAL + SCORE )) +TOTALTOTAL=$TOTAL + +echo -e "\033[1mchecking task 14 results\033[0m" +source labs/exam-task14.sh +echo the score is $SCORE +TOTALSCORE=$(( TOTAL + SCORE )) +TOTALTOTAL=$TOTAL + +echo -e "\033[1mchecking task 15 results\033[0m" +source labs/exam-task15.sh +#### print PASS/FAIL +echo -e "\n" +echo your score is $SCORE out of a total of $TOTAL + +if [[ $SCORE -ge $(( TOTAL / 10 * 7 )) ]] +then + echo -e "\033[32mCONGRATULATIONS!!\033[0m\t\t You passed this sample exam!" + echo -e "\033[1mResults obtained here don't guarantee anything for the real exam\033[0m" +else + echo -e "\033[31m[FAIL]\033[0m\t\t You did NOT pass this sample exam \033[36m:-(\033[0m" +fi + diff --git a/labs/exam-task1.sh b/labs/exam-task1.sh new file mode 100644 index 0000000..d5a9ab2 --- /dev/null +++ b/labs/exam-task1.sh @@ -0,0 +1,39 @@ +if kubectl get ns indiana &>/dev/null +then + echo -e "\033[32m[OK]\033[0m\t\t namespace indiana was found" + SCORE=$(( SCORE + 10 )) +else + echo -e "\033[31m[FAIL]\033[0m\t\t namespace indiana was not found" +fi +TOTAL=$(( TOTAL + 10 )) + +if [[ $(echo $(kubectl get -n indiana secret insecret -o yaml | awk '/color/ { print $2 }')| base64 -d) == blue ]] &>/dev/null +then + echo -e "\033[32m[OK]\033[0m\t\t secret insecret with COLOR=blue was found" + SCORE=$(( SCORE + 10 )) +elif kubectl get -n indiana secret insecret &>/dev/null +then + echo -e "\033[32m[OK]\033[0m\t\t secret insecret was found, but not with the expected variable" +else + echo -e "\033[31m[FAIL]\033[0m\t\t secret insecret was not found" +fi +TOTAL=$(( TOTAL + 10 )) + +if [[ $(echo $(kubectl get pods -n indiana inpod -o jsonpath='{.spec.containers[*].image}')) == nginx:latest ]] &>/dev/null +then + echo -e "\033[32m[OK]\033[0m\t\t found pod inpod that uses the latest version of nginx" + SCORE=$(( SCORE + 10 )) +else + echo -e "\033[31m[FAIL]\033[0m\t\t pod inpod that uses the latest version of the nginx image was not found" +fi +TOTAL=$(( TOTAL + 10 )) + + +if kubectl get pods -n indiana inpod -o yaml | grep insecret &>/dev/null +then + echo -e "\033[32m[OK]\033[0m\t\t pod inpod uses the secret insecret" + SCORE=$(( SCORE + 10 )) +else + echo -e "\033[31m[FAIL]\033[0m\t\t pod inpod doesn't use the secret insecret" +fi +TOTAL=$(( TOTAL + 10 )) diff --git a/labs/exam-task10.sh b/labs/exam-task10.sh new file mode 100644 index 0000000..441eeab --- /dev/null +++ b/labs/exam-task10.sh @@ -0,0 +1,8 @@ +if helm list | grep mysql &>/dev/null +then + echo -e "\033[32m[OK]\033[0m\t\t you have successfully installed the bitnami mysql chart" + SCORE=$(( SCORE + 10 )) +else + echo -e "\033[31m[FAIL]\033[0m\t\t bitnami mysql chart not found" +fi +TOTAL=$(( TOTAL + 10 )) diff --git a/labs/exam-task11.sh b/labs/exam-task11.sh new file mode 100644 index 0000000..e4e675f --- /dev/null +++ b/labs/exam-task11.sh @@ -0,0 +1,26 @@ +if kubectl get ns nebraska &>/dev/null &>/dev/null +then + echo -e "\033[32m[OK]\033[0m\t\t namespace nebraska was found" + SCORE=$(( SCORE + 10 )) +else + echo -e "\033[31m[FAIL]\033[0m\t\t namespace nebraska was not found" +fi +TOTAL=$(( TOTAL + 10 )) + +if kubectl -n nebraska get deploy | grep snowdeploy &>/dev/null +then + echo -e "\033[32m[OK]\033[0m\t\t Deployment snowdeploy was found in Namespace nebraska" + SCORE=$(( SCORE + 10 )) +else + echo -e "\033[31m[FAIL]\033[0m\t\t Deployment snowdeploy was not found" +fi +TOTAL=$(( TOTAL + 10 )) + +if kubectl -n nebraska get deploy snowdeploy -o yaml | grep -A1 requests | grep 64Mi &>/dev/null && kubectl -n nebraska get deploy snowdeploy -o yaml | grep -A1 limits | grep 128Mi &>/dev/null +then + echo -e "\033[32m[OK]\033[0m\t\t the requested memory request and limits have been found" + SCORE=$(( SCORE + 10 )) +else + echo -e "\033[31m[FAIL]\033[0m\t\t the requested memory request and limits have not been found" +fi +TOTAL=$(( TOTAL + 10 )) diff --git a/labs/exam-task12.sh b/labs/exam-task12.sh new file mode 100644 index 0000000..ce7ff9c --- /dev/null +++ b/labs/exam-task12.sh @@ -0,0 +1,27 @@ +if kubectl get ns | grep birds &>/dev/null +then + echo -e "\033[32m[OK]\033[0m\t\t namespace birds was found" + SCORE=$(( SCORE + 10 )) +else + echo -e "\033[31m[FAIL]\033[0m\t\t namespace birds was not found" +fi +TOTAL=$(( TOTAL + 10 )) + +if [[ $(kubectl -n birds get pods --show-labels --selector=type=allbirds | grep bird | wc -l) == "5" ]] &>/dev/null +then + echo -e "\033[32m[OK]\033[0m\t\t good, 5 pods with label type=allbirds were found" + SCORE=$(( SCORE + 10 )) +else + echo -e "\033[31m[FAIL]\033[0m\t\t couldn't finf 5 pods with the label type=allbirds" +fi +TOTAL=$(( TOTAL + 10 )) + +if kubectl get -n birds svc allbirds | grep 32323 &>/dev/null +then + echo -e "\033[32m[OK]\033[0m\t\t NodePort Service allbirds listening on nodePort 32323 was found in Namespace birds" + SCORE=$(( SCORE + 10 )) +else + echo -e "\033[31m[FAIL]\033[0m\t\t no NodePort Service allbirds listening on nodePort 32323 was found in Namespace birds" +fi +TOTAL=$(( TOTAL + 10 )) + diff --git a/labs/exam-task13.sh b/labs/exam-task13.sh new file mode 100644 index 0000000..c6437d2 --- /dev/null +++ b/labs/exam-task13.sh @@ -0,0 +1,17 @@ +if kubectl get pods -o yaml securepod | grep 'runAsGroup: 2000' &>/dev/null +then + echo -e "\033[32m[OK]\033[0m\t\t securepod is running with group ID 2000" + SCORE=$(( SCORE + 10 )) +else + echo -e "\033[31m[FAIL]\033[0m\t\t securepod is not running with group ID 2000" +fi +TOTAL=$(( TOTAL + 10 )) + +if kubectl get pods -o yaml securepod | grep 'allowPrivilegeEscalation: false' &>/dev/null +then + echo -e "\033[32m[OK]\033[0m\t\t container in pod securepod has privilege escalation disabled" + SCORE=$(( SCORE + 10 )) +else + echo -e "\033[31m[FAIL]\033[0m\t\t container in pod securepod has privilege escalation not disabled" +fi +TOTAL=$(( TOTAL + 10 )) diff --git a/labs/exam-task14.sh b/labs/exam-task14.sh new file mode 100644 index 0000000..31ede65 --- /dev/null +++ b/labs/exam-task14.sh @@ -0,0 +1,18 @@ +if docker images | grep myapp | grep '1.0' &>/dev/null +then + echo -e "\033[32m[OK]\033[0m\t\t container image myapp:1.0 was found" + SCORE=$(( SCORE + 10 )) +else + echo -e "\033[31m[FAIL]\033[0m\t\t container image myapp:1.0 was not found" +fi +TOTAL=$(( TOTAL + 10 )) + +if [ -f /tmp/myapp.tar ] +then + echo -e "\033[32m[OK]\033[0m\t\t tar archive /tmp/myapp.tar was found" + SCORE=$(( SCORE + 10 )) +else + echo -e "\033[31m[FAIL]\033[0m\t\t tar archive /tmp/myapp.tar was not found" +fi +TOTAL=$(( TOTAL + 10 )) + diff --git a/labs/exam-task15.sh b/labs/exam-task15.sh new file mode 100644 index 0000000..b558487 --- /dev/null +++ b/labs/exam-task15.sh @@ -0,0 +1,8 @@ +if kubectl get pod securepod -n oklahoma -o yaml | grep 'serviceAccount: secure' &>/dev/null +then + echo -e "\033[32m[OK]\033[0m\t\t pod securepod in namespace oklahoma found and it is using the serviceaccount secure" + SCORE=$(( SCORE + 10 )) +else + echo -e "\033[31m[FAIL]\033[0m\t\t couldn't find the pod securepod in namespace oklahoma that uses the serviceaccount secure" +fi +TOTAL=$(( TOTAL + 10 )) diff --git a/labs/exam-task2.sh b/labs/exam-task2.sh new file mode 100644 index 0000000..ad1fbd7 --- /dev/null +++ b/labs/exam-task2.sh @@ -0,0 +1,11 @@ +kubectl get pods -A --selector tier=control-plane | awk 'NR > 1 { print $2 }' > /tmp/task2file.txt + +if diff /tmp/task2file.txt /tmp/task2pods +then + echo -e "\033[32m[OK]\033[0m\t\t all pods with label tier=control-plane were found" + SCORE=$(( SCORE + 10 )) +else + echo -e "\033[31m[FAIL]\033[0m\t\t your result file doesn't show all pods with the label tier=control-plane" +fi +TOTAL=$(( TOTAL + 10 )) + diff --git a/labs/exam-task3.sh b/labs/exam-task3.sh new file mode 100644 index 0000000..84390d0 --- /dev/null +++ b/labs/exam-task3.sh @@ -0,0 +1,17 @@ +if kubectl get cm task3cm -o yaml |grep index.html &>/dev/null +then + echo -e "\033[32m[OK]\033[0m\t\t a configmap with the name task3cm was found with the right contents" + SCORE=$(( SCORE + 10 )) +else + echo -e "\033[31m[FAIL]\033[0m\t\t configmap with the name task3cm was not found" +fi +TOTAL=$(( TOTAL + 10 )) + +if kubectl describe pod oregonpod | grep -A1 'ConfigMap' | grep task3cm &>/dev/null +then + echo -e "\033[32m[OK]\033[0m\t\t the pod oregonpod has the configmap task3cm mounted" + SCORE=$(( SCORE + 10 )) +else + echo -e "\033[31m[FAIL]\033[0m\t\t the pod oregonpod doesn't seem to have the configmap task3cm mounted" +fi +TOTAL=$(( TOTAL + 10 )) diff --git a/labs/exam-task4.sh b/labs/exam-task4.sh new file mode 100644 index 0000000..d01cf3b --- /dev/null +++ b/labs/exam-task4.sh @@ -0,0 +1,8 @@ +if kubectl get pods sidepod -o yaml | grep -A 10 initContainers | grep 'restartPolicy: Always' &>/dev/null +then + echo -e "\033[32m[OK]\033[0m\t\t found a pod sidepod that runs a sidecar container" + SCORE=$(( SCORE + 10 )) +else + echo -e "\033[31m[FAIL]\033[0m\t\t didn't find a pod sidepod that runs a sidecar container" +fi +TOTAL=$(( TOTAL + 10 )) diff --git a/labs/exam-task5.sh b/labs/exam-task5.sh new file mode 100644 index 0000000..875934c --- /dev/null +++ b/labs/exam-task5.sh @@ -0,0 +1,17 @@ +if kubectl get ns probes &>/dev/null +then + echo -e "\033[32m[OK]\033[0m\t\t namespace probes was found" + SCORE=$(( SCORE + 10 )) +else + echo -e "\033[31m[FAIL]\033[0m\t\t namespace probes was not found" +fi +TOTAL=$(( TOTAL + 10 )) + +if kubectl describe pods -n probes probepod | grep Liveness | grep '/healthz' &>/dev/null +then + echo -e "\033[32m[OK]\033[0m\t\t pod probepod was found, as well as its Liveness probe" + SCORE=$(( SCORE + 10 )) +else + echo -e "\033[31m[FAIL]\033[0m\t\t no pod probepod with correct liveness probe was found" +fi +TOTAL=$(( TOTAL + 10 )) diff --git a/labs/exam-task6.sh b/labs/exam-task6.sh new file mode 100644 index 0000000..47aa593 --- /dev/null +++ b/labs/exam-task6.sh @@ -0,0 +1,22 @@ +# get the revision number of the last update that was found +kubectl rollout history deployment updates > /tmp/task6.txt +LAST=$(tail -2 /tmp/task6.txt | head -1 | awk '{ print $1 }') +BEFORE=$(( LAST -1 )) + +if kubectl rollout history deployment updates --revision=${LAST} | grep 'nginx:1.17' &>/dev/null +then + echo -e "\033[32m[OK]\033[0m\t\t last revision of the updated deploy is set to nginx:1.17" + SCORE=$(( SCORE + 10 )) +else + echo -e "\033[31m[FAIL]\033[0m\t\t last revision of the updated deploy is not set to nginx:1.17" +fi +TOTAL=$(( TOTAL + 10 )) + +if kubectl rollout history deployment updates --revision=${BEFORE} | grep 'nginx:latest' &>/dev/null +then + echo -e "\033[32m[OK]\033[0m\t\t previous revision of deploy updated was using nginx:latest" + SCORE=$(( SCORE + 10 )) +else + echo -e "\033[31m[FAIL]\033[0m\t\t previous revision of deploy updated not found or not using nginx:latest" +fi +TOTAL=$(( TOTAL + 10 )) diff --git a/labs/exam-task7.sh b/labs/exam-task7.sh new file mode 100644 index 0000000..53b05ac --- /dev/null +++ b/labs/exam-task7.sh @@ -0,0 +1,36 @@ +if grep $(minikube ip).*myapp.info /etc/hosts &>/dev/null +then + echo -e "\033[32m[OK]\033[0m\t\t name resolution for myapp.info is setup" + SCORE=$(( SCORE + 10 )) +else + echo -e "\033[31m[FAIL]\033[0m\t\t no name resolution for myapp.info was found" +fi +TOTAL=$(( TOTAL + 10 )) + +if kubectl describe svc task7svc | grep app=updates &>/dev/null +then + echo -e "\033[32m[OK]\033[0m\t\t Service task7svc found and exposes Deploy updates" + SCORE=$(( SCORE + 10 )) +else + echo -e "\033[31m[FAIL]\033[0m\t\t No Service task7svc exposing Deploy updates was found" +fi +TOTAL=$(( TOTAL + 10 )) + +if kubectl get pods -n ingress-nginx | grep controller | grep Running &>/dev/null +then + echo -e "\033[32m[OK]\033[0m\t\t found a running ingress controller" + SCORE=$(( SCORE + 10 )) +else + echo -e "\033[31m[FAIL]\033[0m\t\t no running ingress controller was found" +fi +TOTAL=$(( TOTAL + 10 )) + + +if kubectl describe ing | grep task7svc:80 &>/dev/null +then + echo -e "\033[32m[OK]\033[0m\t\t ingress rule forwarding traffic to task7svc was found" + SCORE=$(( SCORE + 10 )) +else + echo -e "\033[31m[FAIL]\033[0m\t\" no ingress rule forwarding traffic to task7svc was found" +fi +TOTAL=$(( TOTAL + 10 )) diff --git a/labs/exam-task8.sh b/labs/exam-task8.sh new file mode 100644 index 0000000..6e9469d --- /dev/null +++ b/labs/exam-task8.sh @@ -0,0 +1,17 @@ +if kubectl describe networkpolicy | grep 'PodSelector:.*type=webapp' &>/dev/null && kubectl describe networkpolicy | grep 'PodSelector:.*type=tester' &>/dev/null +then + echo -e "\033[32m[OK]\033[0m\t\t NetworkPolicy was found with correct configuration" + SCORE=$(( SCORE + 10 )) +else + echo -e "\033[31m[FAIL]\033[0m\t\t No NetworkPolicy with correct configuration was found" +fi +TOTAL=$(( TOTAL + 10 )) + +if kubectl exec -it nevatest -- wget --spider --timeout=1 nevaginx &>/dev/null +then + echo -e "\033[32m[OK]\033[0m\t\t the tester pod can access the nevaginx pod" + SCORE=$(( SCORE + 10 )) +else + echo -e "\033[31m[FAIL]\033[0m\t\t the tester pod cannot access the nevaginx pod" +fi +TOTAL=$(( TOTAL + 10 )) diff --git a/labs/exam-task9.sh b/labs/exam-task9.sh new file mode 100644 index 0000000..22c2b35 --- /dev/null +++ b/labs/exam-task9.sh @@ -0,0 +1,17 @@ +if kubectl exec storepod -- cat /usr/share/nginx/html/index.html &>/dev/null +then + echo -e "\033[32m[OK]\033[0m\t\t file index.html accessible through hostPath storage" + SCORE=$(( SCORE + 10 )) +else + echo -e "\033[31m[FAIL]\033[0m\t\t file index.html not accessible through hostPath storage" +fi +TOTAL=$(( TOTAL + 10 )) + +if curl $(minikube ip):32032 | grep welcome &>/dev/null +then + echo -e "\033[32m[OK]\033[0m\t\t Pod storepod correctly exposed and hostPath volume content accessible" + SCORE=$(( SCORE + 10 )) +else + echo -e "\033[31m[FAIL]\033[0m\t\t Pod storepod not correctly exposed" +fi +TOTAL=$(( TOTAL + 10 )) diff --git a/setup-lb-ubuntu-alpha.sh b/setup-lb-ubuntu-alpha.sh deleted file mode 100755 index 32d2ee6..0000000 --- a/setup-lb-ubuntu-alpha.sh +++ /dev/null @@ -1,151 +0,0 @@ -#!/bin/bash -# -# source https://github.com/sandervanvugt/cka/setup-lb.sh - -# script to set up load balancing on cluster nodes -# for use in CKA courses by Sander van Vugt -# version 0.6 -# currently only tested on Ubuntu 22.04 LTS Server -# run this AFTER running setup-container.sh and setup-kubetools.sh - -if which kubectl -then - echo all good moving on -else - echo please run setup-container.sh and setup-kubetools.sh first and then run this again - exit 6 -fi - -## establish key based SSH with remote hosts -# obtain node information -if grep control1 /etc/hosts | grep -v 127 -then - export CONTROL1_IP=$(awk '/control1/ { print $1 }' /etc/hosts | grep -v 127) -else - echo enter IP address for control1 - read CONTROL1_IP - export CONTROL1_IP=$CONTROL1_IP - sudo sh -c "echo $CONTROL1_IP control1 >> /etc/hosts" -fi - - -if grep control2 /etc/hosts | grep -v 127 -then - export CONTROL2_IP=$(awk '/control2/ { print $1 }' /etc/hosts | grep -v 127) -else - echo enter IP address for control2 - read CONTROL2_IP - export CONTROL2_IP=$CONTROL2_IP - sudo sh -c "echo $CONTROL2_IP control2 >> /etc/hosts" -fi - - -if grep control3 /etc/hosts | grep -v 127 -then - export CONTROL3_IP=$(awk '/control3/ { print $1 }' /etc/hosts | grep -v 127) -else - echo enter IP address for control3 - read CONTROL3_IP - export CONTROL3_IP=$CONTROL3_IP - sudo sh -c "echo $CONTROL3_IP control3 >> /etc/hosts" -fi - - -echo ##### READ ALL OF THIS BEFORE CONTINUING ###### -echo this script requires you to run setup-docker.sh and setup-kubetools.sh first -echo this script is based on the NIC name ens33 -echo if your networkcard has a different name, edit keepalived.conf -echo before continuing and change "interface ens33" to match your config -echo . -echo this script will create a keepalived apiserver at 192.168.29.100 -echo if this IP address does not match your network configuration, -echo manually change the check_apiserver.sh file before continuing -echo press enter to continue or Ctrl-c to interrupt and apply modifications -read - -# performing check on critical files -for i in keepalived.conf check_apiserver.sh haproxy.cfg -do - if [ ! -f $i ] - then - echo $i should exist in the current directory && exit 2 - fi -done - -cat /etc/hosts -echo this is the main thing that goes wrong: if it does, manually edit /etc/hosts on all the nodes and run the rest of the script -read - -# generating and distributing SSH keys -ssh-keygen -ssh-copy-id control1 -ssh-copy-id control2 -ssh-copy-id control3 - -# configuring sudo for easier access -sudo sh -c "echo 'Defaults timestamp_type=global,timestamp_timeout=60' >> /etc/sudoers" -sudo scp -p /etc/sudoers student@control2:/tmp/ && ssh -t control2 'sudo -S chown root:root /tmp/sudoers' && ssh -t control2 'sudo -S cp -p /tmp/sudoers /etc/' -sudo scp -p /etc/sudoers student@control3:/tmp/ && ssh -t control3 'sudo -S chown root:root /tmp/sudoers' && ssh -t control3 'sudo -S cp -p /tmp/sudoers /etc/' -#ssh control2 sudo -S sh -c "echo 'Defaults timestamp_type=global,timestamp_timeout=60' >> /etc/sudoers" -#ssh control3 sudo -S sh -c "echo 'Defaults timestamp_type=global,timestamp_timeout=60' >> /etc/sudoers" - -echo DEBUG: check if sudo modification worked -read - -# install required software -sudo apt install haproxy keepalived -y -ssh control2 "sudo -S apt install haproxy keepalived -y" -ssh control3 "sudo -S apt install haproxy keepalived -y" -echo DEBUG check if haproxy and keepalived are installed -read - - -scp /etc/hosts control2:/tmp && ssh -t control2 'sudo -S cp /tmp/hosts /etc/' -scp /etc/hosts control3:/tmp && ssh -t control3 'sudo -S cp /tmp/hosts /etc/' - -# create keepalived config -# change IP address to anything that works in your environment! -sudo chmod +x check_apiserver.sh -sudo cp check_apiserver.sh /etc/keepalived/ - - -scp check_apiserver.sh control2:/tmp && ssh -t control2 'sudo -S cp /tmp/check_apiserver.sh /etc/keepalived' -scp check_apiserver.sh control3:/tmp && ssh -t control3 'sudo -S cp /tmp/check_apiserver.sh /etc/keepalived' - -#### creating site specific keepalived.conf file -sudo cp keepalived.conf keepalived-control2.conf -sudo cp keepalived.conf keepalived-control3.conf - -sudo sed -i 's/state MASTER/state SLAVE/' keepalived-control2.conf -sudo sed -i 's/state MASTER/state SLAVE/' keepalived-control3.conf -sudo sed -i 's/priority 255/priority 254/' keepalived-control2.conf -sudo sed -i 's/priority 255/priority 253/' keepalived-control3.conf - -sudo cp keepalived.conf /etc/keepalived/ -scp keepalived-control2.conf control2:/tmp && ssh -t control2 'sudo -S cp /tmp/keepalived-control2.conf /etc/keepalived/keepalived.conf' -scp keepalived-control3.conf control3:/tmp && ssh -t control3 'sudo -S cp /tmp/keepalived-control3.conf /etc/keepalived/keepalived.conf' -echo DEBUG check if files are copied over successfully -read - -### rewriting haproxy.cfg with site specific IP addresses -sudo sed -i s/server\ control1\ 1.1.1.1\:6443\ check/server\ control1\ $CONTROL1_IP\:6443\ check/ haproxy.cfg -sudo sed -i s/server\ control2\ 1.1.1.2\:6443\ check/server\ control2\ $CONTROL2_IP\:6443\ check/ haproxy.cfg -sudo sed -i s/server\ control3\ 1.1.1.3\:6443\ check/server\ control3\ $CONTROL3_IP\:6443\ check/ haproxy.cfg - -# copy haproxy.cfg to destinations -sudo cp haproxy.cfg /etc/haproxy/ -scp haproxy.cfg control2:/tmp && ssh -t control2 'sudo -S cp /tmp/haproxy.cfg /etc/haproxy/' -scp haproxy.cfg control3:/tmp && ssh -t control3 'sudo -S cp /tmp/haproxy.cfg /etc/haproxy/' -echo DEBUG check if haproxy files are copied over successfully -read - -# start and enable services -sudo systemctl enable keepalived --now -sudo systemctl enable haproxy --now -ssh control2 sudo -S systemctl enable keepalived --now -ssh control2 sudo -S systemctl enable haproxy --now -ssh control3 sudo -S systemctl enable keepalived --now -ssh control3 sudo -S systemctl enable haproxy --now - -echo setup is now done, please verify -echo the first node that started the services - normally control1 - should run the virtual IP address 192.168.29.100 diff --git a/setup-lb-ubuntu-beta.sh b/setup-lb-ubuntu-beta.sh deleted file mode 100755 index ae862c2..0000000 --- a/setup-lb-ubuntu-beta.sh +++ /dev/null @@ -1,145 +0,0 @@ -#!/bin/bash -# -# source https://github.com/sandervanvugt/cka/setup-lb.sh - -# script to set up load balancing on cluster nodes -# for use in CKA courses by Sander van Vugt -# version 0.7 -# currently only tested on Ubuntu 22.04 LTS Server -# run this AFTER running setup-container.sh and setup-kubetools.sh -# -# TODO: remove the many password prompts - -if which kubectl -then - echo all good moving on -else - echo please run setup-container.sh and setup-kubetools.sh first and then run this again - exit 6 -fi - -## establish key based SSH with remote hosts -# obtain node information -if grep control1 /etc/hosts | grep -v 127 -then - export CONTROL1_IP=$(awk '/control1/ { print $1 }' /etc/hosts | grep -v 127) -else - echo enter IP address for control1 - read CONTROL1_IP - export CONTROL1_IP=$CONTROL1_IP - sudo sh -c "echo $CONTROL1_IP control1 >> /etc/hosts" -fi - - -if grep control2 /etc/hosts | grep -v 127 -then - export CONTROL2_IP=$(awk '/control2/ { print $1 }' /etc/hosts | grep -v 127) -else - echo enter IP address for control2 - read CONTROL2_IP - export CONTROL2_IP=$CONTROL2_IP - sudo sh -c "echo $CONTROL2_IP control2 >> /etc/hosts" -fi - - -if grep control3 /etc/hosts | grep -v 127 -then - export CONTROL3_IP=$(awk '/control3/ { print $1 }' /etc/hosts | grep -v 127) -else - echo enter IP address for control3 - read CONTROL3_IP - export CONTROL3_IP=$CONTROL3_IP - sudo sh -c "echo $CONTROL3_IP control3 >> /etc/hosts" -fi - - -echo ##### READ ALL OF THIS BEFORE CONTINUING ###### -echo this script requires you to run setup-container.sh and setup-kubetools.sh first -echo this script is based on the NIC name ens33 -echo if your networkcard has a different name, edit keepalived.conf -echo before continuing and change "interface ens33" to match your config -echo . -echo this script will create a keepalived apiserver at 192.168.29.100 -echo if this IP address does not match your network configuration, -echo manually change the check_apiserver.sh file before continuing -echo also change the IP address in keepalived.conf -echo . -echo press enter to continue or Ctrl-c to interrupt and apply modifications -read - -# performing check on critical files -for i in keepalived.conf check_apiserver.sh haproxy.cfg -do - if [ ! -f $i ] - then - echo $i should exist in the current directory && exit 2 - fi -done - -# generating and distributing SSH keys -ssh-keygen -ssh-copy-id control1 -ssh-copy-id control2 -ssh-copy-id control3 - -# configuring sudo for easier access -sudo sh -c "echo 'Defaults timestamp_type=global,timestamp_timeout=60' >> /etc/sudoers" -sudo scp -p /etc/sudoers student@control2:/tmp/ && ssh -t control2 'sudo -S chown root:root /tmp/sudoers' && ssh -t control2 'sudo -S cp -p /tmp/sudoers /etc/' -sudo scp -p /etc/sudoers student@control3:/tmp/ && ssh -t control3 'sudo -S chown root:root /tmp/sudoers' && ssh -t control3 'sudo -S cp -p /tmp/sudoers /etc/' -#ssh control2 sudo -S sh -c "echo 'Defaults timestamp_type=global,timestamp_timeout=60' >> /etc/sudoers" -#ssh control3 sudo -S sh -c "echo 'Defaults timestamp_type=global,timestamp_timeout=60' >> /etc/sudoers" - -# install required software -sudo apt install haproxy keepalived -y -ssh control2 "sudo -S apt install haproxy keepalived -y" -ssh control3 "sudo -S apt install haproxy keepalived -y" - -scp /etc/hosts control2:/tmp && ssh -t control2 'sudo -S cp /tmp/hosts /etc/' -scp /etc/hosts control3:/tmp && ssh -t control3 'sudo -S cp /tmp/hosts /etc/' - -# create keepalived config -# change IP address to anything that works in your environment! -sudo chmod +x check_apiserver.sh -sudo cp check_apiserver.sh /etc/keepalived/ - - -scp check_apiserver.sh control2:/tmp && ssh -t control2 'sudo -S cp /tmp/check_apiserver.sh /etc/keepalived' -scp check_apiserver.sh control3:/tmp && ssh -t control3 'sudo -S cp /tmp/check_apiserver.sh /etc/keepalived' - -#### creating site specific keepalived.conf file -sudo cp keepalived.conf keepalived-control2.conf -sudo cp keepalived.conf keepalived-control3.conf - -sudo sed -i 's/state MASTER/state SLAVE/' keepalived-control2.conf -sudo sed -i 's/state MASTER/state SLAVE/' keepalived-control3.conf -sudo sed -i 's/priority 255/priority 254/' keepalived-control2.conf -sudo sed -i 's/priority 255/priority 253/' keepalived-control3.conf - -sudo cp keepalived.conf /etc/keepalived/ -scp keepalived-control2.conf control2:/tmp && ssh -t control2 'sudo -S cp /tmp/keepalived-control2.conf /etc/keepalived/keepalived.conf' -scp keepalived-control3.conf control3:/tmp && ssh -t control3 'sudo -S cp /tmp/keepalived-control3.conf /etc/keepalived/keepalived.conf' -echo DEBUG check if files are copied over successfully -read - -### rewriting haproxy.cfg with site specific IP addresses -sudo sed -i s/server\ control1\ 1.1.1.1\:6443\ check/server\ control1\ $CONTROL1_IP\:6443\ check/ haproxy.cfg -sudo sed -i s/server\ control2\ 1.1.1.2\:6443\ check/server\ control2\ $CONTROL2_IP\:6443\ check/ haproxy.cfg -sudo sed -i s/server\ control3\ 1.1.1.3\:6443\ check/server\ control3\ $CONTROL3_IP\:6443\ check/ haproxy.cfg - -# copy haproxy.cfg to destinations -sudo cp haproxy.cfg /etc/haproxy/ -scp haproxy.cfg control2:/tmp && ssh -t control2 'sudo -S cp /tmp/haproxy.cfg /etc/haproxy/' -scp haproxy.cfg control3:/tmp && ssh -t control3 'sudo -S cp /tmp/haproxy.cfg /etc/haproxy/' -echo DEBUG check if haproxy files are copied over successfully -read - -# start and enable services -sudo systemctl enable keepalived --now -sudo systemctl enable haproxy --now -ssh control2 sudo -S systemctl enable keepalived --now -ssh control2 sudo -S systemctl enable haproxy --now -ssh control3 sudo -S systemctl enable keepalived --now -ssh control3 sudo -S systemctl enable haproxy --now - -echo setup is now done, please verify -echo the first node that started the services - normally control1 - should run the virtual IP address 192.168.29.100 diff --git a/setup-lb-ubuntu.sh b/setup-lb-ubuntu.sh index ae862c2..8a260bb 100755 --- a/setup-lb-ubuntu.sh +++ b/setup-lb-ubuntu.sh @@ -118,8 +118,6 @@ sudo sed -i 's/priority 255/priority 253/' keepalived-control3.conf sudo cp keepalived.conf /etc/keepalived/ scp keepalived-control2.conf control2:/tmp && ssh -t control2 'sudo -S cp /tmp/keepalived-control2.conf /etc/keepalived/keepalived.conf' scp keepalived-control3.conf control3:/tmp && ssh -t control3 'sudo -S cp /tmp/keepalived-control3.conf /etc/keepalived/keepalived.conf' -echo DEBUG check if files are copied over successfully -read ### rewriting haproxy.cfg with site specific IP addresses sudo sed -i s/server\ control1\ 1.1.1.1\:6443\ check/server\ control1\ $CONTROL1_IP\:6443\ check/ haproxy.cfg @@ -130,8 +128,6 @@ sudo sed -i s/server\ control3\ 1.1.1.3\:6443\ check/server\ control3\ $CONTROL3 sudo cp haproxy.cfg /etc/haproxy/ scp haproxy.cfg control2:/tmp && ssh -t control2 'sudo -S cp /tmp/haproxy.cfg /etc/haproxy/' scp haproxy.cfg control3:/tmp && ssh -t control3 'sudo -S cp /tmp/haproxy.cfg /etc/haproxy/' -echo DEBUG check if haproxy files are copied over successfully -read # start and enable services sudo systemctl enable keepalived --now diff --git a/setup-lb.sh b/setup-lb.sh deleted file mode 100755 index 64952f8..0000000 --- a/setup-lb.sh +++ /dev/null @@ -1,100 +0,0 @@ -#!/bin/bash -# -# source https://github.com/sandervanvugt/cka/setup-lb.sh - -# script to set up load balancing on cluster nodes -# for use in CKA courses by Sander van Vugt -# version 0.5 -# currently only supporting CentOS 7.x -# run this AFTER running setup-docker.sh and setup-kubetools.sh - -## establish key based SSH with remote hosts -# obtain node information -echo this script requires three nodes: control1 control2 and control3 -echo enter the IP address for control1 -read CONTROL1_IP -echo enter the IP address for control2 -read CONTROL2_IP -echo enter the IP address for control3 -read CONTROL3_IP -echo ##### READ ALL OF THIS BEFORE CONTINUING ###### -echo this script requires you to run setup-docker.sh and setup-kubetools.sh first -echo this script is based on the NIC name ens33 -echo if your networkcard has a different name, edit keepalived.conf -echo before continuing and change "interface ens33" to match your config -echo . -echo this script will create a keepalived apiserver at 192.168.4.100 -echo if this IP address does not match your network configuration, -echo manually change the check_apiserver.sh file before continuing -echo press enter to continue or Ctrl-c to interrupt and apply modifications -read - -# performing check on critical files -for i in keepalived.conf check_apiserver.sh haproxy.cfg -do - if [ ! -f $i ] - then - echo $i should exist in the current directory && exit 2 - fi -done - -# create /etc/hosts for all nodes -echo $CONTROL1_IP control1 >> /etc/hosts -echo $CONTROL2_IP control2 >> /etc/hosts -echo $CONTROL3_IP control3 >> /etc/hosts - -# generating and distributing SSH keys -ssh-keygen -ssh-copy-id control1 -ssh-copy-id control2 -ssh-copy-id control3 - -# install required software -yum install haproxy keepalived -y -ssh control2 "yum install haproxy keepalived -y" -ssh control3 "yum install haproxy keepalived -y" - -# copying /etc/hosts file -scp /etc/hosts control2:/etc/ -scp /etc/hosts control3:/etc/ - -# create keepalived config -# change IP address to anything that works in your environment! -chmod +x check_apiserver.sh -cp check_apiserver.sh /etc/keepalived/ -scp check_apiserver.sh control2:/etc/keepalived/ -scp check_apiserver.sh control3:/etc/keepalived/ - -#### creating site specific keepalived.conf file -cp keepalived.conf keepalived-control2.conf -cp keepalived.conf keepalived-control3.conf - -sed -i 's/state MASTER/state SLAVE/' keepalived-control2.conf -sed -i 's/state MASTER/state SLAVE/' keepalived-control3.conf -sed -i 's/priority 255/priority 254/' keepalived-control2.conf -sed -i 's/priority 255/priority 253/' keepalived-control3.conf - -cp keepalived.conf /etc/keepalived/ -scp keepalived-control2.conf control2:/etc/keepalived/keepalived.conf -scp keepalived-control3.conf control3:/etc/keepalived/keepalived.conf - -### rewriting haproxy.cfg with site specific IP addresses -sed -i s/server\ control1\ 1.1.1.1\:6443\ check/server\ control1\ $CONTROL1_IP\:6443\ check/ haproxy.cfg -sed -i s/server\ control2\ 1.1.1.2\:6443\ check/server\ control2\ $CONTROL2_IP\:6443\ check/ haproxy.cfg -sed -i s/server\ control3\ 1.1.1.3\:6443\ check/server\ control3\ $CONTROL3_IP\:6443\ check/ haproxy.cfg - -# copy haproxy.cfg to destinations -cp haproxy.cfg /etc/haproxy/ -scp haproxy.cfg control2:/etc/haproxy/ -scp haproxy.cfg control3:/etc/haproxy/ - -# start and enable services -systemctl enable keepalived --now -systemctl enable haproxy --now -ssh control2 systemctl enable keepalived --now -ssh control2 systemctl enable haproxy --now -ssh control3 systemctl enable keepalived --now -ssh control3 systemctl enable haproxy --now - -echo setup is now done, please verify -echo control1 should run the virtual IP address 192.168.4.100

    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 z zH8}cYptmy^*kcS9B#?flEB$_7-V0Nw&<@Nkx6pBUJGz0t&Ko1WAHF=mcr*~WHtq{E ztt#>t98*E|VY2d3#1!I!ze0H$%DKrU^X zM=Epwpo{)JpLAfCp7+)wsj@K;A>`t1wI+S{)@@*40MfZdDVFh$W>#|&Fi_Z%r9&%x z$9vXbL*9(75~cTZ{LmtY*5@LXWXNHE7M$G)#DmOawPuLjz4_<{wx%xrm_|kuIlHK= z6U^g1Ae4^J@mCMByS<9_%G*Z4X0x~F{cxl~bW5zC(KD|Q9GJ4>5(<=OwNm0wN@|K| zDSJp60QpM}eLA2X@&pW~-vn*j6N7Ib@XBv`YJQSJ+N&G?T)~l~0Y0yzX9`bPta?_t zMVVyIZJ=xEY&Aa_(%zGP7W+61nYB(#w*@BaKdzbFa=UrYVc>Y*= z_GBvc+5YRBgy}k}d{-IMEcskVg}_;|UfJQ=2(A=ym#6bQL3uoE2jwve7k!V7_4f0O zmra!Q6V)EYzpdIsj>3jaTg$<>p-387C*t6n@iQ^yTMUH+9Tf4KVP2`!IIae$xlocH z;=f|F?c$NU_Y{u`c1O2Hn@wfmIc9z1JbeB}zjD#hE7;a@?1SmY;8gK2h|}EiANf(o zn89rmp>50_B;%4&ql7M&fX=e?L;@T1`j}?CAUBzRe$`g?D3F?a6o-qlh284%S1G0{ z5WUmL4o!(Biur13qiZ671m3r`3sUO*(Fz?1#OjWB2S04;ZSWRV_l{dh`rH$Yc6B60 z+b%=t^ieM-@|h!|@>fM6bE<(-Ry>}y5WQ>T5eMvyW5MiYc;K4{#g|U%zg$*Q1`Mk~ zBQVH3$k1V8OkXLpK~QVnEfC+QbOX;CM(58>Dab|cOWhtAX18l_$f+Aj zfJ%>})hQ7TrvzfpT5sh@fiCe?d^!dYB0w>imN_2EMj{FFptqC2Pfr zaE)bBCh6__x!2_!WRBk1O){9z#H8X?$B6(K#kXM3hhSr2s;)C9gGF8p*Z>5jMc|kL z&UOSLsz6)O0b#Q%7ukHQfZweNd{|^`DCvlqo;6OFpQD99YR~$V@dQ$$BF8@Rb)pKR z5E>+FRf(YGY}Er*>|mu{qB`t&=X4YydiCel49Y0*< z-Cs&&2k)U^uaNTrynL3jky;wK7O=F^-5cuPSSXE;JOP`Sb2UjHm&u2EW~Iwl($(gv zt)-P37lZ@~Qq|^P>Fy|6ibxI8i&Iv2GyNZw^ z;DmMBGl*(cM88y9<|Bj+sin+=*3lzg&po0`o0m(_d{ZzMmdDRt>W2 z7MZPaVxlbl;N%9Qiu_3jCNMovhk?h@c*pkp1u2X*mB0Un1kXiT?H+nO=QUvb+~v?u zKsgwGP#W33R7FidRJ#*UVwI4Y2jeV#h4utG^OB_gFsE}F7(nbFQSd>!IUcW5+lLa< zN|9rm+DkDTK|6+mAd?yZG#a~XmibxmoNpgJ+*7rOXD;N4OeZ_Y*)|-a&8!g}~ zQDiqwB=&H`g(crEMOjJSy&sSecYhQZJL&+U16MuaNJ9iavK(wLk`G33nZKA`W84G@ zeAWBJ-sfHj%LB*=j;;BV6-Li*iC6J&IqR7ict*+*;yB6Uk7fEEjcSFpjU+$1APa9C1>Mi zf@{^cvA@mqe>$o_GFeMXVWxI0XE~lJ1II-P)x{BJgqO$X@C4vApsS#k0=1ZH zhhqh;<)r-}`O^=13lD-AiyB-2_fw|iT_D5awwqH%1lGjN=u{hRxxx+TuT^?X2v&^z z6T4zW4MX4^1D~$K0pGaBN=_MwST7>emBO13f?@O@V8ZjWfR{le7`bx-iTU6e;C9}k zeZ@3v{r6QH0e$q49BpmZBu;nR=i`}vO$EtWdq$C}Z7;1lZi#JGY#Iepj6jgXOHL8J z?9Re!Ye%pRd7oCq=}6$<*w-yMf!$zTC4&g3U<&}JU_+tH)#1{3{3@uv%A;c5m&o$S zFUz1LaX}O5u7cMmR9v?mUd`?|2_zVDa>kzkXX8iqURS^5&|x%P>F&1uPJk;2ADWyX z?7Dpk5m3;e6RHyMpe4{2O#t}MIig(!5)~ZS>U0z9J?y7UsAuy&yM3RZn5@+^>yiQ5 z2<|fN$U+!FR^}1@t2ef86MYSs@Y+-#Rtn~d2FWg2QW=Q#Xqp7dHd#z6gh1M}??`0z zmZX7(H?&jWh7HqI=hNlc`}wRUu%mcxIE5&kiUhY9jU7-r<*aHlzK=f@HP^oSC4P`O zDx_poN6c|95y_G@4b$bqQwxbuJR7SSfD+^F`E#5)GTre~@cJTTcu1mC9p5oOTRg}8 z)M<4vhKq%-?_O}ga|F{z;62lQX+%gpxq36f8S7`v9q%4tR0#6G9H&EP^1U;r-#k=O zJVf)0y+xx1tmVU}=9qkL*D1=+wUl{d%g8IM{>RibCy)+1m8qPBoL1&a9=lkn_?qqr zd(=3(aLf@e4LU}CaG2Uf3&xCUDW<9Fh2bv?T+y$dx{${{g<>q@+aW^jXA0Z9(K%an zm-xp2ms0hcdrBbYQ-1%;WTQ`x2id_0EO4aRQeYbG@}1bogV?1gYr?hSK{ERsJS-4< zZ0k)yv$dDnLOTsMvU?Nz=bMa6vtAR+**tE5;a1k7IK-r9YQjwIpt zlT6}2_$Yl{*B~GeM;)lfJ&j+@$LErLaGtSq!F$JlMZ&<;CcgUalKDC=nHR9k0S*Zn zXLpqJMRM(%AJ*$}3WI0t38&1cTesDxXE?G>QCl*dN|>w~NAW z1jOVvw4nBLMe2loKYmqHpgnI$BFF&`Yy2T(w2#$qCydnbvd#A^smiK);AAVadG zpm&R~Kw2uHKg_c&l3GW7ln}(-%TvlqZWVUxHrYDgYD}spQ}p2Rx2Q@GnFj`m4fTek zTZ5rO^;AU}U}4)4TOFFx3q^EKHzEmO@=EdH`H1 zz~7~v1^IVf7 zPCSIq4aE@BMW8&JcdBm0N|Ql3yJCf|MztYZwDyMJgsY%!B5SWW&MXCR-6nj2GJ||H z&0*lGdY-8uQN|-GN6HtXR9Q9P!`=qbR?!d6A+k)LqNO5?u_$+B3-iHJ?70yDrU_R7azE8{uZqAWc;9gLP6JlJtD#WtgC(F## z!7R&wVTGoy(iL+kRGZxYkfVJ%xN5wX{<7^|f|qdQ7IJ<6KWZ$q*MDz80#>wAX)Yt( zY9~RIsE?$-$F(rDx&Y~T+)5?OQt?$y%tC3WhBu+r=A#ub%|AZ38A`QIWJ`e0JC=1! z%Sk$fC`nUx9S{Nh%$pPe9a#cA=sQ1FEcptIC^hHn2N(y<-n*;vK< zwmNkR&F6UY?n$e*j`^v?oYs^`auW*r`UxiHR1Bce)zj_QC>wV#6otouO}A<5%ISzc zNY17$D5vQYkuPnP>DLq0Xdx8!XBJO+Y(vL)iHZ}3!7s4&BG&odL|*(zS_WQQbR$g~ zW>KWb)Z|Gk17u1>kwCMCyzX15_}*6sRYPUBD~%7v|GS_d1`Gy*mk`p10VyY@Oxnk4 zFWGINii!xTK@7sv=oVn=+O!+P+sRP+!%TfHJ(Rd(Z*Kv=R`RtX?e$!e%k=~ExIlJy zGqX9d7SHMkcs~?PEOsSY?DrM_&+C|S*odqxUd% zGcSO%#!J5aTxGu9-&IJqY+-MGjdNA}Qx!PXJ5rQ_!_V+;RJ^2f-D|hk9%G*--0UaZ z52m`=*H{#REf<6=`=NRY!oa-kA#?Ny#1!|Ds3KAF)`Ce@Bem7O|0;CQ zJ<2Y(bh3qCCGLQh5X>M@V%e753p;4A_aZ>m?1jI~B*}Jc0t5R@o=O#$#iTricB>!4*E?0OyGN6ovXsCEuaP?U10%`Wmnl03ogXCktfP{AzaTv3 zlr8H$gCv6!d#l}#ns0>wTd7(mnm7%z11isMli(RaNN%V>nMFaS!XbU zNDJs3U_}~x?6Ilg`h@M`6jpaTKdks>SefVB7Vj_aa#-NFu%Vtj;JPQN?`54QQ`!+X zP20t)Yk%mCMWt&t+3UjW8M0I={a~ZUyEb)zxq>TkRb#HwO>%j8wI(TiaMb?8u~Cy$ zgoFD6J~YX`y}C;mScG{Me3)J}-@eNN4kit&EXt2^I?`f9y_wUKbJ*M-^1%U%yh)G$ z^GDLhx|V#>U01wh5tJY{Hv(Z!c~r|mCa66L%LzKKlc4kZS&6ASJ>D0G7%O}#Rtg;m zdOyp+fT>>F4r~B}5gM$-QsP%yj!7O2ly3dsH_+e)sK=5p@b$I-_HD4THbdjwQTHox zzn=a)o*QNWiWW%aiwTD5yN~eSN_cV9Tu8e%K1vtGkT_qi1g~PJ`k!Ka+{J|Z)3n@4 zjspHVbti!WeEYHb>t`2mna$En+_vr;uTqx$gyG@;f%cI)UY1wi5})67n%iJPWgaPka04bz|@ z*Atn`RBzRg=|Z&>^;3|+p6byM9$OZef&0xerjHa|I7B!6q=RHq&L-JImj!mM?i6vP zPBR#qa_^Hvy>E58p`Sl$eeOrrGoQ}s_cIJn>{*6-54|S%q2Z&)R=oA@?e^cQU>^3$ zKVE25{@JB|;k#myPkqDR7LjC-yL)jpWdnWA#z)6>`?p)S#M?j*Kh3SJCH%4cpZ%Xm z|L_a+1b$jLEUkyfV_J9rDsEFI{sTkA$B$+cEoinn_N9yeS}YFf4A4LSk#$X+$@JPi zZ!B5w+s#tFu-AU7AXir!LsPoBc+l92@qXuy$450((fE<0nhQh6>|gs6AE8h4wP=w) z0V5h+M;MI9ZS5}!ULO0%bcvVL-?z@$Cy8_ObtY2Komgx?taQZ4Id<R02 zjq~_x)4gd`)Rre4a{h!!`J*|a@pV@yzNhWwa~#1;Rq%%YDc4g0?^-TeC?Q{!lJwkkn%HNiJ&8nxboPDmK}`E>W=FQ7!HwH>_F?MyS9WYyi_9 zDyfU=I}YWO9C>Va&5%;V3|8zF*OOL)SgFuIr0uw1N`Q~Vgf^qP_y#PFrPYOmX(?}x zhf(boeC?z^-cCbaNRAzdKKn1W?XvG6Io@oP4smNicWq63heL zdY~%WfCEojW9hCNwVt!RNZTRmgnA9&)nMf+tp;Cj`QkFi4OfcNoU7MQukSuq5eCz% z=^*$QW9uFXW_xLOMSJbzE{G!TKK(ayFslFhnOF3Bu06fMnRu2I;nqYEpDonpAK72Z z94}g=oTiXPSU}~!3l~+Nzj%aI*^KzO-F;v;mf&Ksb-nwInr+KJi zss&>v!umhQA}bGx=b*RHpWOg0p#?e&qH5D0OfiRK#&vt|SqR&xf*&XCx*$!Rr4t(J z#FiY}9*?3nAKL{iV{4#JmM094;ADMk$UZx2eSyTq&zy;0IJl~I1hRP`FQ%s^aIWo^ zlVjf>EpvlMz0SM16){Amby#i)CITv$g%4CPq({yCKk@JtnnHEUb?JoCZ)r$VwCNQ^ zNtPO~wg$3-eql~>a>9?w&B*FACa7R(A~~-`|6Cl5DS;xwc9rTCsaU*a zb<_zkw`f9iOdp^C?Jl6~wY!!A2iIVV5Od-qRi=bcf8Ca)uo*ihyQtX1-V16AX?#IK zO8*@l(OhfW06~18Xh$})>zA5T@=RSBJrxSxFe`#8tz^8{77Ml>YYm5hQohFQ!FL-! zQ0EExVha0P7wNe5C25Yl7NX>WJ$_I-8oYNt(Tjm0&H*c}oOmoLq|EklOU|QB!>Y+f zHy2Y|)K$hcqNZe(vq&73k*(Ly6kO=uBLR}TzAW3;rZz~JevbWyApaGz z=>s8OV_q`~%^f)2jDx$>VXgC>jqGcPTQKDX0l{+tohNM2LVTJYLWFPH3AM3|EXU=rsybyUyhHfD~jg zl-SqnFnu>2^rQcb`dPgs#hc-ydL%!aDAv)qH?QZy3&E{(^{KTXjZ+Tj9?$=oS2tm@ z3egQesX2A5#P{svhLZiD?mJUCnJv!3Pr`1Ib8AOQEgARHOiJeAU7cG&7q<;@%gx>x zrPtck9^FyBa3JJT=$clikhI-Ji1B=LVG;5! zm~IsKe=%gr4eZkUKWiKtDq2}CV@=lQR^aVP>xC|65P)H}1nC#j5G@7FF=5*?v96v0 zNFs-EWPdzoNSPav9@NlpAEM%d`3>h1^S~j=vL)D;8ZKSMn@=+}g|f+$Dj zje8k-qe;-6=GEnNeAd+l&dsc3aCuXeix2A-y*VvQ`8Z_jfyLm~7r%{r*Nr-*AE=AP z6!9yL4ypm#(jDm{14FJSVIU;|xaDb(p;jSnCiL0_EJT>fDWS^|V;3v|R`|MHX+T40 z3e@>0dTc^n)O9^KhhZoM{#!&&hL{XS&#Y@>)uQEP0-&D3&~3kuprwk!%_$R^G-`&K za(oxOeNFaiKj3)I{Ufn|3Q5vK!k@ra7dcgsu=Njt224*;Uem-mkC?5AK}t;-;}v>> zZLJP3=;28Z4^G7cQQj1n0vkw)TBSrV?vh8F<`fMiM>=B;c%XC$;!U;Eyre@P6o4fv zx}YK~p+MJZ_qCcX5uV6XuGWI1$bX!X@jp?pz3CC@-&MWupL@VnF6HxGcGo$zpVsUP zjJo~Z!9>IKI3FZ>GHqe$m$7ho&RB1-+ow|dd1`+!0XZQ)L^EOZ zzP~&+!j^yElr9(n z(FcFhtqz4C(=R{mpQnCr=10NI?$7R1s&h(IJ(&lmo@lt#Komu1ToqdDt!ol|PPmR0 zorA$*<7e-4|)Jx_B{_KfX4b>hrxwfi8xfKr%z&nkG7{IkwAFS30Lk$FG7 z|Na5l|2jW?U@M_Utc_g?pknqUC9c{-im z!T(V=J}R8N?Ct->%gV#~*gEGOxTMK*#4fbi1KmS{aFw&Ruye8Je1Tm!?055mhq`|s za_;_W>=}4OBIla>jO;)ucjM*`-=jw7wYWm)TEJ;E#P=HfHQgji5uV~Y7j^d|XJ7o! z6Sw_U$jkiPFq+B)JoSD%n(+wt(Hmje+I8;-COW9qW&i6P)YjHRG-hSr21k;S28sT2 z>pfssYy!SnE(7X+HKt>9d86Ii)wTfGuTo{U|Fiv|T5xNwm~09_F`c4W!>QZ2`Tc8u~&O^F)}R(R2rg(4rFZU21)^FpkLJEUZWK!YJr z#2;|lX;IeQTRx5YpojMrgnZ|lp>3Pp{za#~0(dnYCd1cPa&Gl)XK55zk-efr*4Sph zN0jLbZU&GlERyaHAABYIpyvm06kY5{?2}pniKWT~&3ZcDAh?K*^Maido>vX38|WwE zz}jOLhgJCk*s$0gn@98Dyu0UsvrvC%S_SzY6M;u(FsOPx! zgWn}FGpiNB38TBa0+tT{u*vE0HdPnnN2wigsnPGVdk4R8IVYu*pF&JKO-gD1K?zoi z8!5F**XNz@O%u(?NyFwg4U>P4P%ei}55xlMk-!aIQ}HPe(W?&YOxG)89s7T(YK@^m zwpIh-wfZCD*U(7C)XhmUP)&xMa5APf`~%6c|Ejlu*PMzB_fWZ}8XS)~whX4m&x)pV zZW>&yyOj`3E{f^d12WLiC~WFR4Li6gpFfzBuD&+TMU+Z&GwZJ3i`13O4WpD4CCVFN zBr(xD9=`?UObMB5E<`@sddHWgB#WoE`+Z57j1-yCQ7qq~_s8p)Dn@i_^cz>0LR9TG z-zl`G$YSVnNhIL^nMb;sQzGdQ$tcU9%wL@nS}H~x5a!Y5PIMf2&C9r|-j^f4GuLc_ zp1R|zy}2j)N}*p$gr!h*-7rD$%ek~R9T!1==*kiMNeP8>xYA`%kVZVUxtFX>ozGiv z7csDoq*1PfO7%a3Xs8|Z+v8x-OsNQWG_Xtd85*sh;m~K!8%yFu z)+PbTI)iW?M=ee`T7t-|jC@0Dolq6t{Q-)cw@r%rYnl6ud?iIrr3TPa$ET9_V`=o8SV8t z!lY6e6DoO`8ZAf|P}Us-&x79Fxo7e*CdyHwvVvmOf|IuZDDTfCME8~oT|X=?^GSC< z?8FW9)cHDJm*$1(Q9-{G0u2Bk*FTTW^|K%IuWfzO0_%Ha>K-Xasr>$W*)grCoNwGg ze+`z9nx@DiDs*?({>`~j=cwz2tW1XO0`yUb0ZW*mwE)ZQG?y)CqM;!_+Q&&m6J3P13YTLZn@A3i`>DECOh_ zU12DDK8M}dfl|tX59CHu11$w>te3M>k1OcF6xPK+EPf<|C&Ald%6VEZv~m98xNc@k z_x?yUD`w99)_j2l@{)qAq5!mzTvkVM7C5S{**lxAEsMXc@)lfLTP{a^^D+exU2`S7 zk8qAlRHSbXO9NE7{a%cUcvL`cgQ-w=ovmOV^azZYZ|?N4?dsOqX>LBYWK#f zL(XR~{e=DcUX%gZc2J;=%GR-YbL^+*IEj9NKqsxKx2TDBf$nZBjID2?N|+jgdeg(q z%xOBjAK+4Ik;~D@5@RF8TnT`?D#)dFd3!^j597#ezo^U*OEH{@ZZlFtS1SaC(|Z9 z7e7tIT>9rxt7R7N8&&yBSVw^1AQO}e(mp^XYULZIc%h&e0ux3N7+uj8V8%;B4fKUdvb%Uf!N^W>V zSPq;I;30zuHO(Zr2phnT6lLZLOQcbdw^k_Lk0j_+f9Y6aur|fQf`*t^<5F#35X}rt zeZ6(endxs7Nkq^hyj+tXlqyp4bbjVzMM{Xd8Noji*6W>f z8~Hnm&-}^vo3Ww;97k6}=1R?aoABh%HEb2EF*2D2=tAXp=WJB>`iRbq~6?1s~5>dT3BKeC@@(?!yp`9y2EUgO88Jk4q=Yfm5<6 zX!$oIkC@Kme3+#aRifz`&n8TOW+wO7L6HNBPQ7Fo-9i}cVk~+NUGaq}=VKgE8zI;fI@#UD<MFSi^u zVP|e3F~qUNVongrID!=(hcLrsN&vrj?kzW-5POUeDNbDvV9N$+Iq$BH!-2icP%c-eELJaA==#((N=FNcrWjtcY67YDBybp`xi%;HZA72}2JYNBF1w)OztBpbi7 zl|S$_9$4bBDb+Z8BLx(n!AysxDdA5Vvytpe;>hDU%2NbHFOkp{u2)sI~evI_mAF2$Hqdc~Sy|1@Gs&<^~{Df&({er@SU{ z+j1t(bore7OG!z$jj=!mSg(V9uON44R+Bw6IYkR;dh|YAA^*HGx?`cp9{okU3;-ua z9rV-r{(752RlZ`Npitt@(MmwTgfs?u#?qy1ZNZjgQ8=_}v={;80ivWowx)MSIHeJhyKFXlgt64c!8A*Q!&A@EF6M_ z2(DY*gF2z(OYvq1gl-{TBlkRcHp9Qrv)=St@#g-C-|1%CFAQz&uVmEZ(&47oK5 z;oTIHo<-fQKS>_7^BXFm@jFJ+aPi&H2oC!AKtJKc5G^IKiM@?p^TC`(VF#JW}TynMX-Gx$j{Ngf_2m~cgV=N9;S*fKbX1PyXOC`Bj zpMHL85WLMRTqGw^=eqj?1Z5$K40?-AsFK#Jp6KWC3cP$DR450DhKNG}jk?A2L!+BN zAzIQNY0PhST)*1qfo_Rs+}aqoMFzesnnn7AOduJ9d&>$6=1RnCO=Wb*S)xFOIIGQg z$hm+2k!_TLrc1idzW1BJhd4M;6FnK#u5{^V73F(zdrG9}M5(j+enf6BpuI}J>dK)s z-B=@@*^lE_AwSa2ct(A8pZ(kfRkWM`U-c`Jz=v2|rjZN&k8Pb&DI&O8b`!C4LnKW! zYA>*#{!SB`m!RX!gO0P{l1X3ZKNJsKZDY_x=*ghP6D1;5)FkvoQp(&y=+t=ko&^%g z2z_j?E0@E`x3%lU&0HaARc&NQ35Ix8Rq(1}!3~o(d8bXU)!*&a;kmJn*fX}FS1q2{cwPZ9yxw85+aRT@(OeUd;YCZn8MFw6EdJxO?vu`>6}98d9f9ip7s zcPojJP*D4A@M_$BB*U)=G`um|YK@JD23V-kqh)F22`(O{+zk|Xwp~kd!68%wJ}~?` zY!mcpgE>hAHim0a8Hp}Jl@k!Sw=KrV)SV&GD?FC|QvjX-Ub2579F%dt`$KbS+|TFi zW1cxq={`+y!1m6j>8Cmo1hs@DflX&v>u)+1p5`B6j`}-eXM?Jt)gc5}OH9|-poRR* zBhoBDBusgouJT&GIeY@X9_mIjze{PmKB7C&+74L#hL`1u%m(G;K4Q!J0YguN1qkk)7$q z7&dN~Ha3{BniZ}Y3%}?TI)m>Apz9VF|6i+zZR&#zQG)ui#>;p3)MCfjGj*QkB}*6l zenxYhd{k1P7juwMqQ(7q{`D~N!^28Eke0g~eUj;($B%JToT>omW%G z{0KZi|3tqU<=mzZi*)WrZVw|EU*s6aS0%_TJJeqXU8HSJj&{zCAYtjmf{h z=}F79?>qnf-{(BuH`1%D#JTUN_T8nFd(e+J;kuiI1?05hhZd(79s%l|W3GM7X1FdZ z4>o|U(Y$jQ+?3URNcNH{lZp`og_ITlz=64Z!3%i;K*2sD`VD?ULTCn1I z;HtnzwM$*^8`-rw1j0h=;~n^6SQoj#;X2@0aL4$j%Dur+5$C#VTRjj%SxAclbMgj_ zTCZSVMN-Y%MzBEl`N1<%yOp)ENz=I%5cl7Pw|fh>?94j2s|@;GHF6|X&=W-|T!fKb zPeaHFf344}b0a}@lQ2~DF>?&Vqx)|6-tJAZCGDB0cR~R&_M5|4WY=yTm=|X7PsF)* zSaOBA)l3&S0vH7D!AzaSy|`09wvLkfZEh#U^m&Ul}(00g^&?=~DA=YCv{S8Txw6c(( zqfMx;iJq2sfEgdC!&Tuow*Dj_BWLx{tJD2OJDU&Byn4%2+(Pwk3+Za9ls$9!NYJ5n z^|{|{oTu!Zb#iJ&ST$#s&?LVeHra4Kj{}iHOZ4Mt_Pb}9{odZomO;+OqlxR$=&hzZ z#MD?dw>J9J>SFRfMBNSDeIZ|fKz<%gzZ50mkVw2PDe9PQa@ZqRq5(29AMaRlH zM%GGYqz9fUsOS3>m4to3^vyA}Q2s>(&G~J5GC@|Ex@>xtH(k)o(7p);ixRTqL?p+R z(piVu1RQEBo0&EKVGvqxVjW9Tri+l!qK`v$`$)Ai6_F0Ok2dkrJnW6GMlX`Iw@z6+ z$VrcnrUzzU$#E5&s!-HmXP|A3qsg-6LV4uCMqe=5UzBUSI?K*chIS5*!GQkB6wz-R zXp@sb-+J2=^@eTd{Wk!YGy@QL5PWpWZXu?wPVB+DyFbknLK#lCmjXKc@wlM9k0((zt5M(Cg+=FKFC80r`MOKr(&Yj|G{@txBqqTBTJ6CZ_<@X*3k^&|-D zP<&bMzo8p%SJs-|^ZUv=&wMr+-c9`)K)nDy^(^Gj;Gy3KRYeJWi1uoHP z0UdujWXIU^Z-(sPeGC50PB2A(gny=tJ)VVr4lH-p-S7E4<8*%=lo${^8>3mvVbtRn z;CrTkDtF_|52C-w;GgvyiBOij6(&f``?Yh%`${~577`$(s-y?X>n9wnH8lJ?oE5_ zQy)k_6n^&=T}mFivS>U{HBv(@^LQ7kjX$@IvmD}%r0}O^M8nXF7M_B8(p5cuW&e?Z z9VaN3fl~vApItC^-qbGcV0IPOExTU`y;GvS(VyMXs>)QD0-(?s*OP;(QpWb6wiTDA$QJ1xvYTsTntt*Zvjt+^>BBXKJSNG{ww$iBToAr!Z@Ra)#v7fItSanfq!+7nwo%VEa= zaNmE#ap!3mPX5u4<)2dmTBi>9e679R*3Y`edb%%j>I-ruoI-XKHO_}ksF|T7dF62n zph{gyS_ybZgF-mw`=<1zjbzXvBP!^v5B+`5D`(l@r!uS%_3HZAEomHI0I@|Ab;2o( zS`=Q6Lys0R>KXoSmU{+W+;Ff}(Pr)IXHySx#+?I9o|kdq^F9Y>mut?-wx=0$?+F`AVewN^ruKfdQ%|d{G~6v@ofdCkU$7t^(v+LDiC6sa%(4meUJp`6|myd{C(lv8FF64-azNx z10*m1+Sn~dJn;szlqgKo>t1^pP3kN;2S2|RtKM#02?C%T7}1aWaEzk#*;Hm#Ei=h5(7FvA&` zH%G+((YrH>->^$cunqD4?A`1feS)$p7QVD72dK*kKuk{HmJpRPGD!?;apS?cO?3yC=;l?j>!RncsyFV5Q5T=w$}^rJkuYZ#I@tOH9#0 zp1?FP@D%N@6Z!YFXA3>aFWqlP1CXw3tlg2vt7g(h`y`gmbjNqA)Qo^HmZnzDC(Tjy zPkP8r9d%12s_8qGN~FY6CAZZ4=q^?k+{J?RoOkj!Vz-NExQEoH+S0PHsB~uI>;oqF zeIM7rszi(S6rz^UecyhJLL(5~_XeAmLUkKA`3O_;U*9YTc_4iEja{k`B$ zQA*`Ct%iC#b|0eV8^5;1xvP>gu{64KhQ{fKrKUGd85|-2&Ac_1 z#CEcx2D*;!)VdNgH6^Y^qKW3tVDliXITxr4*CJQg1t8?)KyM4M3!?&nPY5-oXFkUz z5H{*^_0LZZXMK3Pte!5BU702Fki)Y8+B}Pdk`dwS?xB$-(EjeTHIE3=qbu6lhI68OX)j6!maa2*YKw?ZeY4>dqxU%AaVL z1EX>C0SMiKbs`G3TW(ami<*$s!`5cl?i*1!d3pi2L+t3=NBGT(yC6Psc?AVSs|BNJ zP#av2m866SMrPl7dmlCTvh)yVuI#+5w5HJ-aBqaZaA!1g=d$>Ju5sKf&?;P|8t4DZ z+}p=Bb>(}bGd}HeYTM)VjAMPY#m=aeQ)#u8B8BiW_jGF2sboe9DMCoCKt@1l2}uZ$ zq@2^%QL9!dRbGeL0*L{Vs8x0$Z(vLU2}$m6?VyE(nKSou zo_nABUn|MZ+H0@9*6-!}VgxtyV!RVzlt@D3D8z(#Ayd`=0vl90=nKW7b22zsn_o)T zs!K0Vv#94_zMf-FZXoF>(}cdoU|&Pc>tw(#mw|R5_X|e{Ta&FDmfJOt>*=s~J_j+x zxJ;_O^eUCD!!s6|z8ByaYgbE$ff5Z#IE0Q{4u64(48dH^th;Mv zH``y2xn_7N3YyhPIyw7N^d>2qOxp+{bCQ9xCX3Garc&^0cA!pN`Y24q;@XV}=3yS`wbAd=9n<1Aw3na@UwuysV#ne#cjR+5P`bXPg=&S=6-Ee{$jrpV_=Bxlm zNMtUeb-_?>T%k!V_|3dcIT+9)&T?_(>+QiA1n9)~Bi3=r$_(`<8;m|4f)Cfr@O2Fp zEd2&!-@DHyiI_B2UxHg*B4zk+PQL38x68S8mePuST<}_sC$}t6cbo@v!v1B-O8I!2 z1v|y`Z$b5mL-xhHe;A9)Z121#8?NskRn*_y-ci5XX=x>;GAkHE@;nWgYus0es(86X z#p{!KETyFQK!Fzz69j`0HKaS|OuKWUDA6PVSZoZ$fyPv|Cb7I+qivCbjLGO(xh?OT zpWE}^N>o}jZyJmZEI`ug#hF+He72PV$w!uy=4ehL8IEWILw=58ft5Eu)%!I!ZCaIy zdw(x6@1P$JdRR$8vb$WJGP0c-HF{PYBw+~(5A?nnfFDp#-;TgV7L1O)`gM5Vc#>1&m3IngJS zOMH~I1tlt)h^wGx$Wq4EgQ1^>O5#ceaHEeYh+ES}&U0*$OO)wr0rd#=JuawT_d1=P z!56%}$AIEk8WSbdXR#}AeTgn5An8mwjxQ9Z&j$fbd^S03a`TI01By{gAjL-TspcN- zD5nTv{bcKT-;;QwFO1T34Zhx|Y8Nczg`Vkpp4ZDeZ`Bqz`+Xnidl!mYe*&eb2Pj6O z=AH=09ux>)dq@!s4c2>&9+4sxH`z+K6YRJc0Ls+yx?L- z2`Y~fiGu5{WiTorHHByy&VH#XB$r)o6m#Em|BcTAOR0V(aSF^waD>11HlzU{YSExy znah=gXA$z@s$x|Ae1X=}fd2B;Lq|F%Bpx5tThsYS6}EiB%eThf4eZyIkB2uU-%WuT ziHlXDE8bAUH@_;o>5*={GeUj>eUI{rCm_-ZB}9o2B?>=gm!N9$p>AUp`iIWnz8&~5 zSH0IrnOfZTRpTDOX^$G3ClLxP{cU0UtJzpS&xXBQp+;#p5bcL_~n^(wsr-^5* z(F3T&DFwtK>$L}+6K@%Lz*LXgKj>m0jj>u~g6ei}rrceP6MQj`QNXu-3C>f7V ziQNY6y|`_J-(RtNSJl9h1Kf(bQ!2G>F6Rw z6X4dtIHA`gpc>XfuMU*oi4L+nR)-KX83?Tc@Do6WOF-n9dgmY=)DS{h)x=_&2h5yt z{hqdMQ!At2=Wok|`;-?DUeuO2X;71VmPRh=`P^6FOIa(f)3s$HPz+N4&#!z^t_9RUTv1eXo*Zx< z!FYk879eGf#L!{qHTRS!A>(BvB3)~C%bM=~A%Gb8jiXHKXQ)R?f_^oSrESGOsv|bh z4Q;Dql63e7avOL9mK397)COcQ^`_mi@(|2B+HFG4D)-8r_D)(YQ3K-i?83mxIUnE9 z%6P{H@{n)<4tE%Xj(1lQ=y?T!UagZTU?zr0NL=w3X6T(*-F<%c-+~zCz+Ol8du+&^ zx%d|+O~1Lj#arW5jsmxaoM9Gt1a)A^@U(R^(KoFgn3`4T7%!xra@p5YDv4gMpQxVV z<=|9ZCVmevlTx#eWzN$ukQ#Lowg4V4r1RNZyqfd*kA~8w1QnRmwv{9wukKZ%wFwdz zsyV)IA{{B3PN=`#-rf%AeN1p2xqqYndy(d2Dbyu_lwKoiMOuFFl)Q%4YYSvedr|Yx zb;*Eql1&?4R3Er)bw#<^eGqpXWb*;UW-HhB__n5Ove%LAtzMtwo+PuS+YfKw(JigK zYS`zjjWsfb>;hJhOXiSDeLrgee5 z{aKg+1xlGzltVb1m&pltL*!Zb#R8F1KZ?<;r<3}2U~rFm(~eOPtpW1K@ir*A zgU{Ze8rU*+Y_l8Ni_2W(h6-(J{#sJ6`SS{*+ueXKD8Df)!WUKY1s&dQ4zMNvff?{O zUFPN1^(v2mHYL6me8#_YQdS!>KszBONt6U~6O5H0w3E~MT3$i>{H2dn8^w9zR#)S( zh8D=*AuZI(pUM@*lcAkjyFhUEx0fI+BcCk&4zw+(G&X$@{NJV$E`Tc?ws$~CIyU`e zZHr-3rjD3<7wFOjwHd?22a7)CjwgTs3q90#3mv}mAuDL@9S*KNSU=i~C}XZ0N#i&x zZy~=lfqQ&iqcbCpjya`??A39D9TGz;xOLn{sSTLjan83D3=XK<=(-o&qY?=c4;WqJAT`u5i9y(ps}PotJIZFGg;^;@tIs`jfAwY1TgpxtM4*79bsRu)6-;AO zJ+N)>G=SNIYvjP~H$zlN@WnbwT53Qmq_&ULE0H}JlVWn3^iUQB-s^fKHmc+NW?mRT z#22%zO9LvCPpB3->bDxrf4Fl-%6C_=B3U5uE_+qOC=wV-xMzpI0}T{=Z#8&e`^+DZ zj)5ILGTUM0?vNDtdcda-Btx)St%jt$XnOKY2>j-^f_4b-nfyrl?{a@UC&B=BL?*w!=}!0 zd}|(C8}}+wb|mmwuxMdljHZ7{s8@hO11S7M|Efr3QnRk8K&lD)_)H4OH~?JKF|r{l zMC%l$YGVHG{DX0O=i~-clB{^rN}Kp$#<5%^dmY;uhTVfx<=2rn?pJE7pj3G9UYzMt z`&2{mq;MOeBblQAypWAqX#0M(Dp0V&;c@$_UzuF`(D=sx9;^?__To4os@6mK=%oM${5a9Ldu;l6W^gdjnx$Yu15 z=mE9ih5TIhA+YNL9}Y~#$ko~{urmXj1^kIWZf5%D*`vL_rj0M$#2#)Ou_v?5t!;ri zd6TGkAlLD!d>z@OPc!3wAkr zUxxJ{+b~mZK?3M#0Uar_+j&NMY)E{lR18%_;26m@9ME6|ZW9ojnp|V6+X6gX(Btzn z+QFSdoXIwSKAG^vaQ#vs83ExX7c?LwvhY3eC!iPw-H8{PlhGu1q`%EO#<6C!4I|PC z5)NP1IN8?pt*lexXfC3H3C4-Um8RNc&=NYTJ=Lu-GTdhb%B?#7Af^}85%T9L$WbVj zskd-SA!Gq1gG2b^q!`ZSkx)-fbW}i+3YF~>9Sq{VYv}SH>XrK)l4%s_fxOv2Am0aE zUx1j&NHGKuvH@D4YsKTOdI#|64jpO3?LX^B+baT0l{iRrUMe`izR)@_4{5BH%l{%F&DKZ&} z(g`=&2_KoLQ1hbTHW;G#7I-EEa`T+Ege=rbb!I+Lf;k@u)Wcm8jUej7e*l4T}y}R zD>%?p6mjodk|D7= z?e9y<&|flV#O!oyj>$niV<;`4skY=`eboYKDFS;7+K{*lgPX!DG6+uMECH?}MYK9n z+QV$h(X)J41cgkH&;@$MPoM#ubW@Pq_qzbg-BJTe1OKQL8VKEVFl>H_uP27lf|aRs zpxv105ixX&M45+ zD|xm)5z5jMq-7RM)`1W7R+n81{>3Fav}TcEpvK$)$O;LFg)5r0&0AZtj_rc_k{Prc zUVJ@2@bPVcM{kt?W2wn(`JFCU$Jq3L93D1sQ%A2gl$|C5W(lF%>#oUh6rIA1{; z+^Py3dY%Y&JMfF;scMD$3MssF2|pMC;l*rA{sy$T+Ejte1nVWoUJ!xW*mGckn|mY+ zDz+7`VcEoSu0}Y-S*xS)aV4SP5wCo#nuz9(z-N(!cKGMuUl0=rjC-#tkc%ZR4ZbJk zWw?==_565Vv zwx@Wf2k|$U_f^B({Kf0hUNC18LuC)Vfq(a%SsG}<#JX-5_ORdg}&jGG>E1s?XMMf!_HWTl1laoEmItzwAZ&zjqR*4XQSZ({${|I@06YF7RN{jWQH0RZsnZ=INrkH&x{y1|WX2#Til=q>%&h>*;qElbSk-V9d^uyfyCf34s zSPQf4GMI)(q4d0yxHdX4oQ+p zGLa-%@^aHyM}B$$is*@|psTQH2MA1l;H}}Lv%W(6=iF)Nd<_QNUilnBEA0CDE1r$l z+26FlkZsMo?pAzxa~3Kz2syE}46MeQpWgwoPLzHSw=IdYY7T^V66UwgNMIsRWiS0^ zXEb3A3eLA_aXO^BgYC7SjPzpQ!vmVvQNx44+Omwq0J91qZuEbGA->4@;8 zld1Bs#qfz7BtZ1J^L5hGR`s|tRRIc}K!vX;O%x68I4QP(Di?$g$J z`*=tHZt*%iVV9^P6z5qLK&(x*KLyc%t3F>8@NT>&P2>_HaZOezCsNu4b>%k5kpxI2 z9JG|}MMIbHBm_D+B`j0riC-0h{(xKJ9NDe0l`5~@{J|LID5WzeQ-DFWH2Z+1Ax77$ zXUO^z?<*KkKme5#6Ni823D2fxkR(IE$&N>F%hSuIO#EX>Y!3j01rLud1y!sBq~*I$ zotLInGtc-mOnU-G=(d6HVUDvlz=|lLfB~1F7T_ZIE_^Li!QE>d3Dk3%PmV!t{u5aC z-~>*^CE(;yB#g_h$Xn}`IvZM?_-aG19*JRr0A8XyA*hIUey$=KEa5PuOc&_V-1H$` z8rX`veqR;vEgxfuQDr~l?WFfKS`EY3K!w&wdaf^1JY>&uYaE0DZ-*xO^>op6vF=xF zX3PpxEl0erLc&bh2_|95o3Q>|^W!VJ`;~-%c(Q^Wyw!s1w=7s`q7n)oM$CK$NdO;G9c-m4d+AWef zH@N#`>$=s3vDd%HZ6{+5_ODXqsnzTTGiX7~Ve1_Sk8G!0QWLdF2Og1_8uzf3n>rcW zwRWj;ICnn*!SFdp9NSraU&Z$V8&gEr(d)wtRad!==52S2*`DvFKhRV9+ zu*>}hz^gSJcY4h>mL5si5sw=b3Zt8sFhtD_ks@!e-j`bPkwBPH96EiKD9*vApIk?T ze-XsfMi~@?wYN8hajsnBWVk#Dj6htby~LD&uNzy}J0;hEQrPY1NSnMddQK8_H-3bq zWUc`RQKS~HlUq7qlTNoayD@HB`}D;)(1~lQt;p`~bTtoJ;gb75j}C8DqNwi20Lk*m z)4t^vfzTU+GJo7smk)R6%!UQ1O2S6?8m)397L#vNERN<$7@+6I={eHN+rbioBhwtz zigqh_sI^FsjW9v`VaP55K{OwOHn1-i2QeJX|5h zd3}WVM|=V3CTOBzA7(kBcOb=N{e1jh!`f#HX0~q@_c7T$yvoi!P_PjKweS0CdY`l4 zI7c|tvSl=>jeq!d1LQ48_He5UQ;{a+!#$%WpWiTMI6&nlzL&g7)W*1#vfsy%h~5Ib zaOn21ge)c)D@T-Qvh4SI%R~EGq0={GS8pY}Y@11vvJ*S@%SU1FrA=6-&K zw>`z4Vi`9d@E)6P7A$4QTQG+2BJ_N2Cs0})XPX=&eA_1s#39ilBH_GPL4o=DAUyBc@5_N`|jA{oS52~jh=iJ!^sBsVi!pcCK*<3E>*+dbo{BIe87$!9; z`nb7`eZ+zkB6PLpwN0-sH+ARj(1{N{BS^;T+!}oYy~R=79$S#VA2K5xTorFMoxZAt zKu7myxFWmfOt%_LhGX5UsCWjrEkVbG4DeVf_@r%97>SC z^3oG@(1}0_6xkK{6)=gynF4uAYkcV>Xn&VNp!40dqnTrG=;LVP1FQI|j(W~zSuY#jg@ZLgj6O~$j|H=m zbe4}nS>Q0Aui5-pUlg0NG39OA+lYJUOMR2Ih`dy2C(%i-h8IsmRh%hDLB(0bIx($_ zK^oVlSFrvMaIZ#RJkyD^$>s%*P;9M%ortn+{8jV^2-C+WSK*POR^A?`y?O^!GwFUE zmA@A&EyId?=h@E^Nmhu`Me#GBbP-^tZY&B!1!&@cPR=V1JZsNFY2e(oi1Zb1`i#Z& z68Otp-fQUS&{;Sa)B)?4(0!YCwflE;qYctSnz@lc^Nb+aY0++9NNO`1Io}8&_dVbT z&L1bbawstDfecyrM+sjO?`2`coo`x)cl|{0Zy$XUH}YJbaobOPh426JSMox(KKo}s z`{$}t|C*nMulkeoWIa(`o1nnB1KW-AkXf3&uXq0mk{tE}l4g}sHDTN*CpQ?VLt_il zEP1Inii)?mYw^MAX1`b5pp}|%pI<%g4P>;tVv_IcmCV0DDmqMhPHZCJ{m;XAR~P^= zMQ-)jMJ2oVnBB~0Qyy~hGbIi0peFphFGJu+LrD1o+6WgO-Ne`;$wGQ&Y^! zVby9LuFrnY8iXagOa|MsNfPEd z2+HY^Hy5l&+*po^@3VU7mDOEbyj)dAi*gmAGu#14}ERD`oj;{qb_0FB5)WM{v z<6=6}ECUg@4uxo&@^i z(H&{{$XF^F%rZdM698cCP2U!*E#3uU45=n4ckGKfGFd1JPA@ zm)WI{!D5{`(q+hgX%x(I8NQhssf8+lBY5C;0|w5LgGj63<>K#Jlzzi=qBL4@BF5jv zAF`ee?B#+*BpBpsub8w80)|b9WKch=gTMTt(b!MjkM%klK&Wk+MR7?qqzG1i34p-~ zsEez(uKfosN;9!D(sm)9+>&f%4F%42YEsweWdM^XHaki~gOuR=aNfIPme}f#wO(gaiLF|18EKL6T4b$x(Z_2H3N1Z{u8ODU z9&RoK)oAdHIUJe|!1CRQxV|3-o843Es%$N{rM6cv#Kcc=YlN<`iH=8G?v4C^_w(m?eP%