From f53ecd1bae88be4d0a06feae65adb61dd2f1c7da Mon Sep 17 00:00:00 2001 From: sarthaksarthak9 Date: Wed, 11 Oct 2023 14:51:41 +0530 Subject: [PATCH 01/18] KubeEdge v1.14.2 Signed-off-by: sarthaksarthak9 --- KubeEdge v1.14.2/deployment/finish.md | 1 + KubeEdge v1.14.2/deployment/index.json | 53 +++++++++++++++++++ KubeEdge v1.14.2/deployment/intro.md | 5 ++ KubeEdge v1.14.2/deployment/step1.md | 21 ++++++++ KubeEdge v1.14.2/deployment/step2.md | 8 +++ KubeEdge v1.14.2/deployment/step3.md | 14 +++++ KubeEdge v1.14.2/deployment/step4.md | 18 +++++++ KubeEdge v1.14.2/deployment/step5.md | 72 ++++++++++++++++++++++++++ KubeEdge v1.14.2/deployment/step6.md | 11 ++++ KubeEdge v1.14.2/deployment/step7.md | 11 ++++ KubeEdge v1.14.2/deployment/step8.md | 18 +++++++ KubeEdge v1.14.2/deployment/step9.md | 12 +++++ 12 files changed, 244 insertions(+) create mode 100644 KubeEdge v1.14.2/deployment/finish.md create mode 100644 KubeEdge v1.14.2/deployment/index.json create mode 100644 KubeEdge v1.14.2/deployment/intro.md create mode 100644 KubeEdge v1.14.2/deployment/step1.md create mode 100644 KubeEdge v1.14.2/deployment/step2.md create mode 100644 KubeEdge v1.14.2/deployment/step3.md create mode 100644 KubeEdge v1.14.2/deployment/step4.md create mode 100644 KubeEdge v1.14.2/deployment/step5.md create mode 100644 KubeEdge v1.14.2/deployment/step6.md create mode 100644 KubeEdge v1.14.2/deployment/step7.md create mode 100644 KubeEdge v1.14.2/deployment/step8.md create mode 100644 KubeEdge v1.14.2/deployment/step9.md diff --git a/KubeEdge v1.14.2/deployment/finish.md b/KubeEdge v1.14.2/deployment/finish.md new file mode 100644 index 0000000..efcb640 --- /dev/null +++ b/KubeEdge v1.14.2/deployment/finish.md @@ -0,0 +1 @@ +## Congratulations on successful completion of KubeEdge Deployment Scenario !!! \ No newline at end of file diff --git a/KubeEdge v1.14.2/deployment/index.json b/KubeEdge v1.14.2/deployment/index.json new file mode 100644 index 0000000..1598b5c --- /dev/null +++ b/KubeEdge v1.14.2/deployment/index.json @@ -0,0 +1,53 @@ +{ + "title": "KubeEdge Deployment", + "description": "Deploying KubeEdge", + "details": { + "steps": [ + { + "title": "Step 1/9", + "text": "step1.md" + }, + { + "title": "Step 2/9", + "text": "step2.md" + }, + { + "title": "Step 3/9", + "text": "step3.md" + }, + { + "title": "Step 4/9", + "text": "step4.md" + }, + { + "title": "Step 5/9", + "text": "step5.md" + }, + { + "title": "Step 6/9", + "text": "step6.md" + }, + { + "title": "Step 7/9", + "text": "step7.md" + }, + { + "title": "Step 8/9", + "text": "step8.md" + }, + { + "title": "Step 9/9", + "text": "step9.md" + } + ], + "intro": { + "text": "intro.md" + }, + "finish": { + "text": "finish.md" + } + }, + "backend": { + "imageid": "ubuntu" + } +} \ No newline at end of file diff --git a/KubeEdge v1.14.2/deployment/intro.md b/KubeEdge v1.14.2/deployment/intro.md new file mode 100644 index 0000000..0bc340a --- /dev/null +++ b/KubeEdge v1.14.2/deployment/intro.md @@ -0,0 +1,5 @@ +### Let's deploy KubeEdge in 10 mins + +
+ + KubeEdge is built upon Kubernetes and extends native containerized application orchestration and device management to hosts at the Edge. It consists of cloud part and edge part, and provides core infrastructure support for networking, application deployment and metadata synchronisation between cloud and edge. \ No newline at end of file diff --git a/KubeEdge v1.14.2/deployment/step1.md b/KubeEdge v1.14.2/deployment/step1.md new file mode 100644 index 0000000..284747a --- /dev/null +++ b/KubeEdge v1.14.2/deployment/step1.md @@ -0,0 +1,21 @@ +# Install kind +
+Kind is a tool for running local Kubernetes clusters using Docker container “nodes”. + +Run the command below to intsall kind: +``` +curl -Lo ./kind "https://github.com/kubernetes-sigs/kind/releases/download/v0.14.0/kind-$(uname)-amd64" +chmod +x ./kind +mv ./kind /usr/local/bin/kind +```{{execute}} + +
+
+ +In order to manage the cluster later using the CLI, install Kubectl: + +``` +curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.22.6/bin/linux/amd64/kubectl +chmod +x ./kubectl +sudo mv ./kubectl /usr/local/bin/kubectl +```{{execute}} \ No newline at end of file diff --git a/KubeEdge v1.14.2/deployment/step2.md b/KubeEdge v1.14.2/deployment/step2.md new file mode 100644 index 0000000..4893b4b --- /dev/null +++ b/KubeEdge v1.14.2/deployment/step2.md @@ -0,0 +1,8 @@ +# Create cluster + +Run the command below to one-click create a cluster using kind. + +``` +sudo kind create cluster + +```{{execute}} \ No newline at end of file diff --git a/KubeEdge v1.14.2/deployment/step3.md b/KubeEdge v1.14.2/deployment/step3.md new file mode 100644 index 0000000..d7a238e --- /dev/null +++ b/KubeEdge v1.14.2/deployment/step3.md @@ -0,0 +1,14 @@ +# Setup keadm + +Keadm is used to install the cloud and edge components of KubeEdge. + +Run the command below to one-click install keadm. + +``` +wget https://github.com/kubeedge/kubeedge/releases/download/v1.14.2/keadm-v1.14.2-linux-amd64.tar.gz +tar -zxvf keadm-v1.14.2-linux-amd64.tar.gz +sudo cp keadm-v1.14.2-linux-amd64/keadm/keadm /usr/local/bin/keadm + +```{{execute}} + + diff --git a/KubeEdge v1.14.2/deployment/step4.md b/KubeEdge v1.14.2/deployment/step4.md new file mode 100644 index 0000000..5b2ef1a --- /dev/null +++ b/KubeEdge v1.14.2/deployment/step4.md @@ -0,0 +1,18 @@ +# Deploy cloudcore (on Master Node) + +keadm init will install cloudcore, generate the certs and install the CRDs. +--advertise-address (non-mandatory flag) is the address exposed by the cloud side (will be added to the SANs of the CloudCore certificate), the default value is the local IP. + +``` +sudo keadm deprecated init --advertise-address="CloudCore-IP" --kubeedge-version=1.14.2 --kube-config=/root/.kube/config + +```{{execute}} + +## check if cloudcore running successfully: + +``` +ps -elf | grep cloudcore + +```{{execute}} + +**Now you can see KubeEdge cloudcore is running.** \ No newline at end of file diff --git a/KubeEdge v1.14.2/deployment/step5.md b/KubeEdge v1.14.2/deployment/step5.md new file mode 100644 index 0000000..ca9c2fd --- /dev/null +++ b/KubeEdge v1.14.2/deployment/step5.md @@ -0,0 +1,72 @@ +# Setup edgecore(on Edge Node) + +In Kubernetes 1.23 and earlier, you could use Docker Engine with Kubernetes, relying on a built-in component of Kubernetes named dockershim. The dockershim component was removed in the Kubernetes 1.24 release; however, a third-party replacement, cri-dockerd, is available. The cri-dockerd adapter lets you use Docker Engine through the Container Runtime Interface. + +### Setup cri-dockerd + +``` +wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.4/cri-dockerd-0.3.4.amd64.tgz +tar -xvf cri-dockerd-0.3.4.amd64.tgz +cd cri-dockerd/ +mkdir -p /usr/local/bin +install -o root -g root -m 0755 ./cri-dockerd /usr/local/bin/cri-dockerd + +```{{execute}} + +### Add the files cri-docker.socker cri-docker.service + +``` +sudo tee /etc/systemd/system/cri-docker.service << EOF +[Unit] +Description=CRI Interface for Docker Application Container Engine +Documentation=https://docs.mirantis.com +After=network-online.target firewalld.service docker.service +Wants=network-online.target +Requires=cri-docker.socket +[Service] +Type=notify +ExecStart=/usr/local/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin= +ExecReload=/bin/kill -s HUP $MAINPID +TimeoutSec=0 +RestartSec=2 +Restart=always +StartLimitBurst=3 +StartLimitInterval=60s +LimitNOFILE=infinity +LimitNPROC=infinity +LimitCORE=infinity +TasksMax=infinity +Delegate=yes +KillMode=process +[Install] +WantedBy=multi-user.target +EOF + +sudo tee /etc/systemd/system/cri-docker.socket << EOF +[Unit] +Description=CRI Docker Socket for the API +PartOf=cri-docker.service +[Socket] +ListenStream=%t/cri-dockerd.sock +SocketMode=0660 +SocketUser=root +SocketGroup=docker +[Install] +WantedBy=sockets.target +EOF + + +```{{execute}} + +### Daemon reload + +``` +systemctl daemon-reload +systemctl enable cri-docker.service +systemctl enable --now cri-docker.socket +systemctl start cri-docker.service + +```{{execute}} + + + diff --git a/KubeEdge v1.14.2/deployment/step6.md b/KubeEdge v1.14.2/deployment/step6.md new file mode 100644 index 0000000..e71fae0 --- /dev/null +++ b/KubeEdge v1.14.2/deployment/step6.md @@ -0,0 +1,11 @@ +## Installing CNI plugin + +``` +wget https://github.com/containernetworking/plugins/releases/download/v1.3.0/cni-plugins-linux-amd64-v1.3.0.tgz + +mkdir -p /opt/cni/bin + +tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.3.0.tgz + +```{{execute}} + diff --git a/KubeEdge v1.14.2/deployment/step7.md b/KubeEdge v1.14.2/deployment/step7.md new file mode 100644 index 0000000..b606141 --- /dev/null +++ b/KubeEdge v1.14.2/deployment/step7.md @@ -0,0 +1,11 @@ +### Setup keadm + +``` +wget https://github.com/kubeedge/kubeedge/releases/download/v1.14.2/keadm-v1.14.2-linux-amd64.tar.gz + +tar -zxvf keadm-v1.14.2-linux-amd64.tar.gz + +cp keadm-v1.14.2-linux-amd64/keadm/keadm /usr/local/bin/ + +```{{execute}} + diff --git a/KubeEdge v1.14.2/deployment/step8.md b/KubeEdge v1.14.2/deployment/step8.md new file mode 100644 index 0000000..fc4273c --- /dev/null +++ b/KubeEdge v1.14.2/deployment/step8.md @@ -0,0 +1,18 @@ +### Get token from cloud side (on Master Node) +``` +sudo keadm gettoken +```{{execute}} + +# On Edge +
+
+Next, run keadm join to join edge node. + +``` +sudo keadm join --cloudcore-ipport="Cloudcore-IP:10000" --token={token} --kubeedge-version=v1.14.2 --runtimetype=remote --remote-runtime-endpoint=unix:///var/run/cri-dockerd.sock + +```{{execute}} + +keadm join will install edgecore and mqtt, and --cloudcore-ipport flag is a mandatory flag. + +**Now you can see KubeEdge edgecore is running.** \ No newline at end of file diff --git a/KubeEdge v1.14.2/deployment/step9.md b/KubeEdge v1.14.2/deployment/step9.md new file mode 100644 index 0000000..aee3b6d --- /dev/null +++ b/KubeEdge v1.14.2/deployment/step9.md @@ -0,0 +1,12 @@ +# Check deloyment + +Check the state of nodes at the cloud machine: + +``` +kubectl get node + +```{{execute}} + +There are two nodes, one assumes the master role and the other assumes the edge role, indicating that the edge side has been managed and controlled by the cloud side as a node. + +**Congratulations!KubeEdge has been deployed!** \ No newline at end of file From c21e08ec1125373bdb7bd5b20f8b6eddd7c005e9 Mon Sep 17 00:00:00 2001 From: sarthaksarthak9 Date: Wed, 11 Oct 2023 15:04:39 +0530 Subject: [PATCH 02/18] Readme.md Signed-off-by: sarthaksarthak9 --- KubeEdge v1.14.2/README.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 KubeEdge v1.14.2/README.md diff --git a/KubeEdge v1.14.2/README.md b/KubeEdge v1.14.2/README.md new file mode 100644 index 0000000..bf15ff0 --- /dev/null +++ b/KubeEdge v1.14.2/README.md @@ -0,0 +1,7 @@ +# KubeEdge Killercoda-Scenerio + +We have created a tutorial in the interactive learning platform Killercoda for KubeEdge deployment. This can give a hands-on experience of KubeEdge deployment. The tutorial is created on KubeEdge release v1.14.2 + +you can acess it https://killercoda.com/sarthak-009 + +Pls try it out!! \ No newline at end of file From 3c28e6135d2f68de448e8823477cf0eb42da979c Mon Sep 17 00:00:00 2001 From: sarthaksarthak9 Date: Wed, 11 Oct 2023 15:05:05 +0530 Subject: [PATCH 03/18] intro.md Signed-off-by: sarthaksarthak9 --- KubeEdge v1.14.2/deployment/intro.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/KubeEdge v1.14.2/deployment/intro.md b/KubeEdge v1.14.2/deployment/intro.md index 0bc340a..4edd522 100644 --- a/KubeEdge v1.14.2/deployment/intro.md +++ b/KubeEdge v1.14.2/deployment/intro.md @@ -2,4 +2,4 @@
- KubeEdge is built upon Kubernetes and extends native containerized application orchestration and device management to hosts at the Edge. It consists of cloud part and edge part, and provides core infrastructure support for networking, application deployment and metadata synchronisation between cloud and edge. \ No newline at end of file + KubeEdge is built upon Kubernetes and extends native containerized application orchestration and device management to hosts at the Edge. It consists of cloud part and edge part, and provides core infrastructure support for networking, application deployment and metadata synchronisation between cloud and edge \ No newline at end of file From 58fea04e9629f88e346c80b22e239ab825deca88 Mon Sep 17 00:00:00 2001 From: sarthaksarthak9 Date: Sun, 22 Oct 2023 07:45:49 +0530 Subject: [PATCH 04/18] README.md Signed-off-by: sarthaksarthak9 --- KubeEdge v1.14.2/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/KubeEdge v1.14.2/README.md b/KubeEdge v1.14.2/README.md index bf15ff0..f69ad9d 100644 --- a/KubeEdge v1.14.2/README.md +++ b/KubeEdge v1.14.2/README.md @@ -2,6 +2,8 @@ We have created a tutorial in the interactive learning platform Killercoda for KubeEdge deployment. This can give a hands-on experience of KubeEdge deployment. The tutorial is created on KubeEdge release v1.14.2 +![alt text](/Images/scenarios.png) + you can acess it https://killercoda.com/sarthak-009 -Pls try it out!! \ No newline at end of file +Pls try it out!! From 9f845c00945d7bf00399369ae28277f9b2ef8412 Mon Sep 17 00:00:00 2001 From: sarthaksarthak9 Date: Sun, 22 Oct 2023 07:47:47 +0530 Subject: [PATCH 05/18] KubeEdge v1.14.2 Signed-off-by: sarthaksarthak9 --- KubeEdge v1.14.2/Images/scenarios.png | Bin 0 -> 70815 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 KubeEdge v1.14.2/Images/scenarios.png diff --git a/KubeEdge v1.14.2/Images/scenarios.png b/KubeEdge v1.14.2/Images/scenarios.png new file mode 100644 index 0000000000000000000000000000000000000000..dc59146d40db15c0744734a67d6cbe6f1c7c0244 GIT binary patch literal 70815 zcmd?RWl&t-@-_-FLV^THf=ke#gS#ZbJ%nJv9fIrNBtUQp?o5J1a39SXL_ zYHI6bVduPmzeNakTH@dn@B5of+~wq zU9628lohSOAvGddpwN*l!7NF-|MC;T0=0OERF@pPYChR3Yz~4>KRlSf#&xbCqjdSr zm46r&;ah0V{^n{q1@2ID(GA>c&-=Js%)Hp9@?aG*x1-VA_BW5 zy``)~qE`?&gEf>m+p^1xHU*zHB9gLXbeMOULVtfg3w3m1679-6e-2qu^$Jx+G5$Zi zS*#|3*mSMFc=(AouHvgMKXIyKy!!Mb|GqeDJA*i@q>8t*)6)mq%Xaa+q5o%h{AXZY zD-?X;rdFDH{*A`E%Qe#I2T;=Xdql9B195`y`e+CAz;P$vtIk~egR zTDsA~6R@Z$q3RyXPn;jqv%%hVzgt{H@mRH+n~@}>5#7_~b7j%!t|`C&3=f?>bTE1+Fa_yKNbk$*>!##W8|umK$n8%# z&2^voML1LQlW*&IF%ZivqqX~iFUcL6Iue(l%~<5@5e)CBW$&uXX94K*n| zR_d2$H)o5=pFVxE{4mwu|LYcKcS*cw&R*~MI=Ps1RN#?jlxcKISwh|ZQR`&Lt5yBh z2A7u(V>ED&5#Jx=j{=@u8c5@K@kRt^b29HAm>8fh#&kL&aDpG^+MqW7XW>56yGOt=fbv!J}Dbfq%Pq0r+NKIu|xoBX!ag0bS^ z{ZhpkLS@}AiTm=X2LB=rH#&kKy=Ol~Ws#1Nv6meytNm~!OPVy$kjT=~QYud=ovq=v z+53tF=qPQu_3(#u#3#sWl^b=vn7C_y3X1z>2a6={E;okBiGj2#)+!LE$H&|_l%hJH zriRjmA_y3i;(Q__BAQl2i{(ClE?iz&`C#t-jFi-hDA4fwV%WE&)@th$i=LidV3!dG z%gZnhrwxTHK&CHhk~xf}ws{E?^YdRD@6A-Zkf_SezkU1mMZ!dOI4NJr!VF?Lh?2KE zg4F!aTb)@gmV`?LL*g@}SRhB`=cIMu$lqB&>`9M4#j`3i*KK2TyiimJl6)6i87mjM;E2*spOsT^XYZ@V; z4jDZ{!+>KaCSR7=*ySUmY`nw|6~5sdR}T6#&gorc)|h<4ie0cBJPU~;d0x&6R;kkk zZW;%;iE(gP0cy4|XAOU)RKs+>5e1cb)Ezi%BP8%W2{_Sm7V%u_h`(0n9omr0Kc-ZeGQ`6^KU=qU_3e%7j{A^3pQ zL4c=0o&544X(gzh!QWGNoQwh=fty7DQ_6xccKOOyif*_itRzUvZnppR)QC)mCsH7RRlA#S(W|5N>wS2O zudng9(XHm|L;1@SgvO^_rSvDQz#ezMM!`T03wli+s7Y-*^n-3vyWb_cLc$^TgK{!!4Vo>$O$>&@rSOp%e1EZQ|#8X6kH!on64g)ce+v5of^n!<@VRzjs8 z_+G3hPESu87#oWpZ47RYWMT9tuyz0ztf+_uxP!gqNn+JLjM5jYwI9^tC3zz2&dA7^ zChU&?MI}qB{PP48p!7jOLDJj2Y;0_5NZ-{6zJz9QO$i(hpOA0jnJ7?Ykcy%htaDhE z3;Xqp`RZ)H)X~|gSM-FlLYOa7gMz&MyYvlaM#h)*#`~fK`i2&%g88$P=_8K3n za^_sT!%^mePw7g{y3#s=^L_<5IIsSJ8;*3lkIq+D4d{5-B6l0zCVkSQdYxX2GkH6k z1`St!tr`qoE|%oTzBO6@LWes>-X_r{^=x$CEYe2VV9&hZdY3!kcb7`Q8MFJ#_15pn zlz2RCgl7ocG8b{`0x=hpt#O%m9&rKzy{W$?m$9~wxe5?Qnhon{r`~?aw>$62c3K2T z)D*AUElp?<3Ewz7$1<`kwc#nQ&#x$M16ufkUKM}cSO_QyH9j2^b!O=?LgW^kym0P3 z>v~N6ZVp|@%d8VMGXADf8)9-c1$^!)vO_%N6M?M3L=@|#27_(mJsiFdk;QGL7+ zB$&#mO4agavI$e-Wv$Q`I>yla^=MjT^*bl!cN$*K%PAKg%v#^bQRJj;^)Fu4C3=3> zx;SgC9X^2m==_J zsZzZrwg%kuTKA*GOL6xlw?_z|FPnu z`ft2XCN#R+zdelrb_kO+j7_(`YG{>F`wr0gh^ne8DdKV=z+p2*;SmvOZU@g-TmeWW z%XTK)q!XF@zN6_l@x80mk~BQ9E5>ZVrw7p|y_@0{4!3;S5kqeLAYsywQwM1e74(hB z&-|};D8#HJIsA?@6YFlpoG=$1Pb#I$h*rrFRBJOLBN7%ZJaLt|NungR)MwohgJ&M# z4C1P&?081QIcQ{3ip!y6&7siL5n&S6)pP#3(;h^QZo#QT5yd&mVk))k`h;TzFi9)4 z!%tyIq>Y>Uq1VO^6VGngq~zXb*)Yy~4ROS}h!rcWZC&n^VefZ-(Kfxj__^nC#2lZ^ z-9%Tc>i9s&FtV`da{A7LD&{f5Eb53VP8vlk9wR=6k;nVqhMi?&t141}3#CIwFzV%{4w|x$bMJNP!#0Jee#ixlh3CWig_XIXL~WF&LOBXPW;|^TpN4$)Trl)yCzZ zW@=z)z#!!SK5Tkr-H|5{xZMW-m*_wTtb8%E%h5fV`>io}4Ln8rqcpDa3CUQHWJ|#C zcR#kCe=u|WM9x2I8XFti6o9~9w-=jOB;3IepG)$*PQNe~beG}VvtJl;}S7X+;PADnY3z{f}U+JnJ81ekBN z-pak!@o4Q^gL_ZPZa-n1Xn|uhY#+w*#TsWNUDx5VxvE!iRh0JW(}eyzR_oah?|&BP zkK?LRp_O zt%sUk*pED?)VDgO$&uu4#-b$q^TBbx<+eNV+Cj}uq}&#oqKSkf-% zROeZA)uo{i~l>Bhr+3BqV*R$|7Ci#9TWpLssy!MPKF3p>*io?G?!C?owg* z-T*|5vhF+Z-&YjSx14_Tn3x!T&r|E|=i4spmBXSmR8(KIZJ{}Hhw}~KqX`ZDa^E|j z%&aWT$B(Iad28l)Q+aKS0C?>}f?JFI$~y9X!jajG>q&RsQ%zqPgFR%W&V|XeyM$u$ z7ewav1J|=xZh^RMu@y3Id}*?Fbd#T%{zeAT^&6sIuQTY&s!r*hrG{5>=ylKp&pEP( zxodn>c)eqlZ@X6GXBOHAr~K!?z-h7b*QmZpLvwh@tUS4%BR5)oL2?)`D5wxbab^)d ziY7CahU_Tfz{rg7;jP{^^G*(%>jy@hB?})v0KU1Tn%s5G817qi7+TWuFevpa;13Hk zp=6(`AAS({?u|+@Hrd?hXyRM_U7x^Uzxx_vDDgtaqRZpNRipY4oa6B0H>pPHEk8?S z0g9{j{#9ik==F9#&aH$ks??cMNQfZ!2xmHam?LaGvs%5vF;efcbwZabud;j%z1a3= zG3zzf$4e1=>|e-?fj-f|7aB7)_b`HLTG1obw{q{3i9Dif`I2wxJ(c-LaW{ch3J`Yu zc$18Q0TnSZv4phrl&m-KC@|P)SrH#(=aZ9@Cu|cF6Jd$^KC+9=-v81CP)J^lp2s%b zDRN%^!v}mcAWWjAr(aoJ?GVQm`M76cQjo0gdlL_J+N>~W^Xs2k{IE>9e3=*%(+=RV zgTq5=7M5^I-|Oi0{=_MFBQRk1{-_BC1_prqT7i(s!P$B3`r>G9{lyL6=DzQp(B17> z3;Gtk(tP_W5WK$-QC)H;ZGi|lJ9v7>(RU{rC<_`g3Yuub!Eb22?}c?-w=&88(LbSX_+_8_eQO%_WaUy6xu zRf<1`)T9=7P(zs@x#PK@!^0jJPM(s|n{NXwX<~g}Azxf;S3mphwuh#!t&`uMt#RHp z^0Vs~wXzD6#}F!`=r|-Ws5a^fD1c(hb(_yDg!evpuE~5_{TyBySiOirFat^=^n?-A zaUY)+o5oly9k8v-AfYpLAnh+|X*sEh2JoDqNz3B)Gt22`;Zh+2qv zt%=?r>q1@kW}cX?c1O(lTX3wOZcEy44WOls?%YKM2J8k=rP+7-!MsBXYZY3tTD+LybtzE8Job4MO z{E#6~>2Y_{#kYA~spj_IY^FO_$jG}&aeI!hJYWn5C;EfaDRqTC!BG@bx_1??x8aRo zMyK$Bmm}v_T{iCE-mb(~P2@k=Q?nzsHOal)4UOQN%C2rWXI)Lu_;KtI%_q93J8AZe z9D!E^Y+3Y2yG`_mwVjnbltrGtw7-5!45N!XFi|j>@2tq*v3-Zcs;vhvS?L+_MssEL z2=2=*wc{pTm&spj=WBc7*HJ}hZ+++7({~p^$!=@zA+t3wo`&R{sgr3R6|LFG8^8?9 zY!?S6A+0yP@2_?HbO`4C-E;M^bN$%{=zmsNbx)!%PU*G6hU7lKYoEBt3Ke|6E&>-x zDpM)>-jE!ycacqRLs!}k{(*Tm(snK|UL(qUouVYg#(&I|QcsN5ka2$M>PMhuqT{x@ ztd{jw8lV&;9guSZfO!guh%jC2i9X@XJU+9yK1Zbqfg?i*7!qm*GekVu8kzxfbzd@M z9@KJO5t+%Ne`ZrVufFGsD|~=P9~+V`1fJYR$sg}8w&(~~qt;@T@0Hmvw>$O|g7gN` z1e}OOz4(i@YbS+%AbMD9=RTwamln{;Cmi_Ro%xZ3$ps?J6W8!Oh)?~TIl$7T z@Y(5Io-KC-{qnlA2fQ6Izde=M?YZ&%!{cAyj`xIQO4mU{EVJP6YFi-)npY2e>r;d6 zjyPNnOb=rhlFDN0MaWf4-;26UK_H9XDc|XYdO#1HWFKyhc)tEiDn?H)3k~1~wL2TB z@8_R~XR@c()qT`UTN(VltR!*st3EFBTheyrfv!OE5^i($;%TwT+E;N6yT*prNezsp zmUcgve(ixzo8p}`KRf9z%3XpUT3LY`_gylrcY2qjHIjsTF;u^Zh0L;Ed&M%}TqXA` ze(yv6Iy98CxuX86HMV+?#uadI!gy}C81b#*eg_Te+m_Z?kz|GV{XXLmI&e7Q7 z!;KdeP-*B7D!^#n7PZsqrFQI{*^zeCUoGk#drW30J+9#Ex2V|e`$13(!zb{i&GvNH z3k-raI{yp&MoDpjP(HKSqQ2W zlW!LjNH?zPYD#2K8vIHkd^Vtm->of5`Rvna%JvMwu#)Q6iB_yeFVboW=

ul)V_$!Gbupy$vcy1RNVUEEpWF{5u_QFS>cPm);OFXj%r{kK; z8yYa^^sMDB{ovq0kQmxv*zpL5T(Hxsv`O7m#P_^|lI_>cRFRgrl$2DpOUE~rQcO(D zYSHc-fI0C4kUjwE+ki0gbG6-YhRF6<9_}4LA@aKxtz7RiYm_`#f}2B%V>NTOW=a(A z-Nq`5zG7l3q@eli6-EepWB_>ZBK?-;_RF}qI40=^jcVnlij$2lWqjGWkGWpY{I1UK zj7|lg{=rC!B*d1)Ce|UHEn%35v*>}yYJ<P< z6b=NCrTBGifth*+QEv|;J6S3tYpSuB()J=1^2#F5hl}W62SOFs(8wKHrby3bcNu$R zs17GyUAIWnOnVfd)LLv!CymA3Oi}8QHO&N&ucB^XCWEs=_Kb{}_a4e7Al$W)L~7YN zyYA{JkSKW8fr>ZadrI>YV^3|VU)MYV{tYnpR<~-2bz;F z=3_a8LXooj6t(t_(pX~|ZUGv+&s$8Pzuyf^M+aOpM;9UHQ50M9!|E8p$wcqgaNi_@ zKThR~QhBr-EfFiQtqENpK>_Aw!WaZ=vo#%m6Sr;HrAIX#ZYLmEs*wyjgDj1zZ^XZJ01~;pdvokl~jqar1 zy}S3X&F*$U1%*QE>go=H#IDi5l$DkBe?9}m_#5hEj*pLjemtfu;BovK1BYyBBh@Y! zNERgxn$atz^%QAUe%1wR0jyKbYlz+gz^^LE$UK&gq9|7L=38(x-u6`0DE_3j%?r?| z){D*Qp8HLS==UF$8FmDIg0a4U&(4mu_}+~&Rxux~Mu{B)2{VVKRysWs-}s(^fg;EB z#6&{iVcZXu5}rCG@8U@y|61xKF@Y!+dW_hU(5#Nvl<{H?=&UVVpuU@x0kHESr~mW+ zq-UcSn{dRFL~6yhRT-Yet8hM;3D~S0UIK_#Z@BtlVeuOhmU3;a_DWjl)%DTv5%8DD z_UqRr;*&R7R-vGLOal;oiUHi55x|rr#?Q@{8Q#yx$Pm6c9&_GbNJq{$IBorY#cMm) zV-E3F7u-8o@9FJr0~lvu;rEr5m4QH4!0VjdYN}*?Oj)d$)8UgUVeKH0@aZejZIF?d zH$K^!NK`Wi;v|6KGch;UXqcaaI=LgEn?yXHN! z#Q%WH`LV*c!f10YHUrGxdWJWkr{|57Y7NZ%*+5Nwk_pTq zoJ=4FU=9E1gKf)=>wp;-Fo$)3`ziWV9SZDnr3_&>6-tvu!>_gV zO?yYj*UaeSU+Tq1z}~HEXs85u06n+mZ-QdE|2wrVBVK_(4u`$^dcJ@NjU`{B?4{;; z6$*c9B-6sAPpwxQH~k{ost+I>wtoNYFx^XqK!*Qh3i&gsPft&QbSLf)?vcIa<+pzV zO1fy4zhE0Uwt(bz|8XV%49D#-#p8#&XCVjXMhTRrT&k)<3Tw|%Ky8DVYCy@`+r@kMuQNt&c6jnL08Y113X|OU^Twr z0}uLtwi9G-s%<8qy45obG&EVqcBJAU_zPg@UvUfnV+;*|Q3iVPqCY1GHj5uti6#}! z7);Gxw=hr(xHYHTbQpN-Z)!Q!&(MsR&ulhwRVj|Zie#j&*KIg|<^RoiOO%lR{P}Yl z4o3lY${slf9bL!4!FllDfjwZH9dEDQKd7o|K^^H@t`GZPP#ysWXak50O#teAU22H; z<-Z@(=bt;Yn{U-cM3S}{CqsqidA=$qoEVM~_`6?Ovyb#kMPF@D(RV}q5JCivhsJ?< zV#7<8v-u|bQs#<2Q4Ypazjr-aPi-@jPxurd3d?(-BXoXG>eyA67_aIICwSO{uEhae z<)O82ye=wvf7SMS0h@>&&D`8v58&4wW#@qq^6<|RcBeUB0gaHA3uG% zx(lz=aGo2>Q;tnb8vsbt(&Ohl0soeJwTo!1+MQdJjcH}srgFKR9rkDi42+sc#7Ub0 zo8A>zzn2E1TzcYq zMF$qalhSOx?`(S?c2;8Ul0Z6qJYf1iwFHp@p2ehH?Y{8S6)^#7cNde?DVA7P{ogKJh;XrK?#P?P}-{*qPxI6r()8-JF zu-o@Pk=WwhEny{m;BdV^nb(E{NPH{DyDnnABA5tRpB; za-!Mj=1@EX@P`S&nD_o|P{yIWP5K5q{T+3s#_~fHH<80DQTj>s(7{E`%L^_t+`WF! z63W9~&DzX$FpDWHt7}XkuiAWR8dI2SOLV4IxW8c6rbvfKX)R&ZzKN9J_J#wOLSNbT zN_1|D0>{=Pb@QD@d1>^56H<6QcOb7yl#gZeJl1DYTzkpGIF*2r#`_6 zQevUfHFsEFn(IX0Rg=;?l8O1Gftt@V)os2fyDt-`{#EoF zZv{D7^AB)St$nT)kkj<$?Y;dW>`q%4(+10JFyl3Ahlb1_} z*V??D+$`a|j+LJdTM_%5m3E?ttlXo8w*<8!2YeY?WmrMw=n9K^Rd!b;Hkx;ru>%4l z$wRp|5eeg6&V(KJkR2p<_`}W65LGmY-O7?8ya}T8=>c||faBU@e+=AQ04`b2s&ntp z0eEQufKV0yN%gG&QrdtN{4yHd3KR^17u+!j2@@SLrwdI?O*w4m>f~)T;z{USZLF=? zuKwk`Tng&%zVjp3n|$Jl$3(RqFng;zQgM9J zSSvuloUC)%5`MCEiQ{Z>|4#8P@+p_9Has~wtlHYBmOXJUjdP5Ra@b`5EkVZ&xV2N1 z#OB?Gy6rKFRAv()|FSCEY5%M9qf>Hy+0Hx+QV{Pya*MXo1bFzm?c7v;uXB6odJqnI zrrIy{G!f4Ppt=Pp1!#D3Rbw?3`G>MY@L>6m<$)T55S<|eCMG6vK5VaFqqR=f7?GUR zF8cgIq_26{_$dtYK&C-4Z6E>%&MmpopSPmRd&4vlw6EgJJYMPwdJK{ zW<064)94tpI;TiMAH(Gff0JBF*xGc)>C}Bqc;d}sZnV8HM1H}cuGot2Qvw_J^77PC0$U5VV;QgB^ zfIhkbO2eMNeCY@y2gk8lO%@UB);lwL=j{Py65;@4fi4G<%GFxJE9iVL#~{c^hO2iS~%@{*TLHpNX89r^x53M;f|h^@P1cIn`>$o zv9+}+qY&t6>rQcmGEM3hUAmFtws6Nk%v&^8lS2u)VpIpkn$|QdM6|-68o;aw*4M=)5-Ld)i)&Zv2nXT1N#`I(%yV$ z%DKWl&vKP;C9gd_yK9wBT(U(&>w7>U64O0`zUkr@5lAmqW~Uy<^QC|np6nw&u1*%wzsz< z$lo;qMTK^|&;ApI?0oyTTbQDvd-EUkoszM(w#GDN$z=AwhXY>yzgK8G^sh?OKUj8n zyg(HM9RvUx2^Id|(V~C(OYO=Ltn{3-J_QOh*i!}l|*M|em^87k!@3~j}+4VnTc!KEZGF~gbBS|<3hhD{a-ZWPc zb?vBje{(9b6iDpOE{P!bT0KZA-;CLF+8D>gG0!P?Uw_vvw(%`%1M53;rbz?$L*D6W zZda_6-9oXq|CwX%9zevQa~o-V?jH#fz(fU{Rbu?0@}yH1;ZKuXe8KH#aOi1ZYZ#Rk zh9MdiVK~%h;#k33Xmm?jLvmP#onT(w)}2dm%VoB-xJ@Es z@Hed$%>9;5R`<7%YYwjj^i4C!x^FfS>$XcGULNy^W-86?9P<`M)x))I;3o!%(#(CYFW3qFGPE9@0@RI@5 zg6J%R`NO>8+5pk0Vtef2gDud7=>&W06r8c+ zvJDmv3+4_c-4bx+U|uA8Z=13%CMuX3zc1{s4Yje`IDNaCRBa(J(of^gyeo@zC@YW@ z;rs10XS4vBhBQ2C>O9tZs`;F_SBR_I(f5i}?rfW)F?fs5%fVtYf`L$)fSg>>`Pfl! z$6cH?QY}`sC0+^Vd$sA)yDQ=)vdtm#&8w&cR9h~k0K6#oMaW+}Afx-iNTblS*%Rwm zi)MS7lH_&`4JN_C5jKqqjmui-i?XBnWh^g&jLgNyNvOxk{cdMcIPwzNHMUKVyD9o_ z7X%p_1saLbhEqZ1!g4ePKWqv_g#CR#$A4r-LerezE0@T3K>; zg~d}7r9<`g>(>X5LA72Rdk6nMu+F+gO(|4$z}IqGSX<)&~6r zWq8pkD!^<_?($@dlr@9(gEEH&tY9l#)@+PwP2x2O+R-6mqQI}^4p^sZ)@Bq<8C+5$ zu9m7Ig%NFYZ9yEB>al6=Nd$RV;aukYY4HP>;O^C_f=9+egOTULd_h~CBD?)U{tiP+ z0|f-TSFR%R^il0ug;a<%;!O-#rM)8O6%J&1K)|1i0jH9|l*j3vmwm}LyILie&+5wx zQB%qw&q)*B6P z1H3&dw#1);{PYeAJjRixr+Kh&5lI`PG{cisGmGWG#ky}rN^saRfjRq7`f`9NZg060 z(a|OoX>s5HzZid@KzS-W*6F8>@>+KJg}=QYQ^DeG`9#|5W`=OP4phEv%r$S8X1c~G z%ran6_d+10;gUntQN&V!f!}EZ%lr^ng#%`+lv`W_ANdtvOHxcu$=O0r6o4g&YW19B zSpCMaX?&bQGPsd`#jmpAF&9gucy0kAV-|@Doyv!M6U9>V5yC!s+0n8Y#*{jJv--Jv z7Gy|fHUtUNn7(A+wC{EF=Yl-2Jg(*b!6K>~-TrfIli&OGw-=-pZ8?PCdFO4B{tJP4 zWzoS6?pCPv2iNtHU3HCH&H6ThA%~Y=DmRB5O6ta&#I2LgKrz0ELHWuBgZFvb+b3(9 zw=;KaGbw$_0<8Zr)!5P@x&?9GE%qy7*f1F0k1uI2(2psh!2^#xhj$~Y4s~S?k%KH= zrbK$W^r)HxyEG9oX=nA(5 zL+KWC%Y7Dzu5Z`Ejl))sELX#W?4CJ^!o?4T?pwMPxXrk6+{TJzdw+NyrH$b^P!nf2 zYj;+5DG>EYE}Z<8AazRGit&gRfC4+Ms#Fu?;hWDW>I2{&ub z-hQcNYeev3kqIXOA*auul}nbV%<`{tSYSEvn#BlDH~u%BRjTS8Ve!}cS5-Uh((qWQB5i6m0KH(KMw z_m*ae#=*AD_?!@Q%~Q<$?!k?ml*8#lPXUH>edA<%4rQl#dP(G`A5KNL&&{Ab?Ku0} zVIYOvPs3(d{(mEo&h>0I0BsC`aef)YR!8pr_%Z;#f8cJ2E&YU){joNPp7n_7vf+SM zV9_+j{rrI$hPek&sJZacV!1oNM`GaE==?Cvu_1MzV)zoYv82k0y8#l|ovVl)SbdnZ zm+o+M*j|jCBy^5P(U9WjbCaB^N6D}@Qsg0*D(8NcqLR+WBAA^1?$ZY5lYwIU=CS*H(p(h7tUqTsexHg4Fcg`87+&c# zT$XkG5DQOsiMdxPGDOjI;8-5?atO;)C}Ybn)JB`~Nlj<0n+ew2$S=mY9xmU`IWha| z5z1UXs)=zvN9l77u~lgu&#SD1QX4RaPSH-?0wgNoWN%8Bc*f7wMp+w^;+`p=LqOTD zo6X~Fd4aSln;@8o9)B%k$A2?t-d|e#p3gWjxETsPZc8_U=H0b?f=y(i}>B?ZzXf zk>@C+*J%~*tJLQEM!1)`f>cQEFD{9;iUe?@J2=wZ$@0S)t&lk`Z1dug(oTZITG%!g z*h+fS(}TnQ;LW9{OIEs*FMZJ@NF4?uDX-mwF>OSR; zBp-wMWebUKh))H~ZZc*x8`*3363^aTNYE481)kBS@v% zLw3!SsfX6d7qwV3#Gja+T3>QC_VP)^6#Mc|*D5E(Ti=$iSiAH7LrU{RqO9e0*n|9H zO~Fu_&w}dX;ltrMz%*dsir007LrUq}8xvuAXUZD$b%f3IRAU&6u|j_j z@GtHKdN1RxhZ85WxuKB`feZOBis@On3Z;3u9eYO zi46^jY>Bb_$QSdfU*6?ytio{`MzK68-q?IZ$5HnZwlftrR3bvuP($ku7`R`t2UaSM z3t>c8*V8MU854BSoOY2S9CA;?`3A-p1gq55&M%h&%}jGCYy+Fbk3vajYV*7+V{m!7 z?e<$0&6OQlN)t}T{S;puy_)JOw>|U<)Ee{OTG-9>PZM}!wxDHO56|c(mi`Zk>u95D zq|wJ!o2izZ_NlFaAR>W`Q6_z;%+Ro?myPo6TU%-;X&jSw!mi#tUY~H^wqMRotHy@m z(1tDA$RhIoR)&O%Bii+wnBKmn<$xCq-2*p%kLw#Em0KsnFhN%@lxaL;IyEpjuLmU} zX+vn~sK0!<5DMFIIHuV`F{x&|Y(03GCwI$h%*LhYkbbt=E7AT4 z+Z;(K-B&vSN-j#~{BCIX5+W3d<>{_)k!_}?)BQ|zrg&@LFMWV~yJNbGasBEtkqmzm zW9ev3&M`C=Mlt*i@BJau?3~5Rcv`(ZZz8py^W>Orw)~Q*5Zc>xNfY(x9zJ6xWusl4X%jTNJ-NLx1Jj8ZyYgM@q`Vzi9X@V@#$%G&{zxu(F{Bs8wZ+RUhU~k% ziIn3d(|IvyoUb2?o=PTQ~d#DtW;hkQ+h=a&}nxbT$yu)p6^e0?e+@_Y6M*Vwj z%Wl*6rn&4bP(lJvxwHgb7}b<$b&`5V*HMzPtlGGZmjdeLhBzVpi51SM969a~0aH$Q zFm7k56>1Sa5&#G_*_rj6KCLW@nX(4K+f#Zzx6}h$9#AZQB70$)#JWp-#8#S zOV`Yme!i;qQ5>BydPGw7fpM;eUFjpYDO=_NRuEaskE%sPvzU{*g89foArm8&sXEaJ zR1z`(#%=5rG7965B8t>-;JoZ9v~Q1L8xq#HUt2{ffG$-0ns7S;6FS{v&cW)5^xobX zkD2zsX!Vbt9UGw1>%fdoq9vC^mY5^)wPU?*lX*IIKAfuf1yu<*DB6UoXdC8Tc`4k~ zo5u&Nk>I<}xzZ-;#P^|AnxA6wk-wipO5$ze#8+Tyod@#NBanpg{a`1JCQA*H1=L`_ zW>X#=O~;*NXQMBt;g7c50G6TaQ&K4uZ}-WR13mLs#TwkBsNk+fp)>b6W$TruZz0z@ zsUAL85l1b=>-X7xR=tvK(59~#f7RSdY^sbU5ppCR_zDmAT+K`{ZOB91sE^FMzaItt zyf#K!VO_2kW4YO|-4SieC=DpQw7s|(b@>~J0em1pC#_RI+)WcB6PrEh96oHr^YqH? zuB`tZ_0^7dX*~C#C9RK&%gU24`zx{oo)4AEi2fui}4(Zc87lj0QGwhRgBR0ivy@!@mAvWJ8r z6K8Fp5Ze7fl^2dFX2M8k=9^jb1<`PK9^ok0JqrvqhK~q8cyT@@`V*%fM%nMFh!k|l5tj@Uod&OA#8<7_??;hMEQm$&VAc14xNQ9 zsc2@$%N8#|<~Zek*6TP1dBQYfm>+|Ch1&%mrQTbSFux0gWW&vV*8AJbk*;`hqy9`; zYv^v0)yAz4T)dLt0seB*2cgilf<`gw=^Ev=ktm~hQV zO_f>fJIRa4)U|@~)#uP{gyl5#RWqgh?VWDFWBK@?`Ac5;47zp8Om*yoA$n|Y{?-EM zwjfdzL~n0>gznBdBhi81833Arqe^+0A?@>PlsA)mMQO|s^%<9ERl|wNPf zs*^bk&dZ8LfQHtg!OrLgzZ+7twYGuMUtOQwG*1{&*t#w&sL+E z!LSz*I7BWqyN10J5pZKN`S?vjd68kLz@81G_RTYG7 z=lnlE7U#q{-9+@M+aDvij=Bx=8j%<0*DB7dCmq)8Z)$8Cea;z!L1eJ+`>=Qqcb)kg z2}s%&SxKZj{`zM)IH91FO`xJyvH6JbGa!IX=T+=gi;)w7?Zt4Pv3F6{ts*3rQu{tE zQ`&3+x81G$Em!fypLJU#*12+Yl%WahHI}t`I`X41k@_q>8{_Ad`n*ytJhkGApKf9u z)KQSDH@bILh3beuKRxlMEh*n`W0Q)0Z?0RApfH;y!gHj$jLhZToBSgJ!*_jASl*6G z1u8D95fzHDejNe!HL13Z&pw|VW6i&b$@NwN&smL3s!ZZdBqsFC*WPZ2WL=&GWIO3T zp-_~mHIW})vK-0CpIlyv_k&AZXv7TdGaWV3H95{v_CUVA~D7F0Vq==cKGy6vG63DW-m%; zVtl&PH>9^20!{IqBJW$^>5H43s$0*1*bYO3>u+s}j<6eRz$|*y@=mh{i0<6k_x0zI z$4yFG7G+ij+M)|txf+p$*H;f?x{8AmK`O}6W5JGY3Y#1F^MzW1w=Uka0*-X+8~L!= z>_nK#Ppp3n4GoQrT$RHZD^Sq4P9jHaR{=u}>S#BUHE%^GF5VN>@LV|l)_Vv)ekMp@ zuIgSq3sO6ZJ2T5J;<@j7;aZ5?Af+YA!tT9d?_8aS+hU5r*YZ|^61-KOQyE99@Pw(N zc;h&zapfleNBeTso5=NI^*wjc%@u3^$E$S15-ok9=0^1iUoNkLO_lwOBXoD<;zz5! zL}}#vw#8Dl?SbW%FgNYt(j$bX+Ar8<_~{{f&&O-{bX&Y{@YPDexZ0)} zF|4zRPoyp=S|Rld3kw{+{|GUhvW=~~?YrF#e*7dh7FZi2s3AnD8Y!pjD>V4CdTm(q;3o9&Qn?MN zBb$^9Tr~E2UY%-dS5nVY~-3=9_&@xoQm%Vmb?<8np>;t4h5Vi4#vS zqM)nhm7!A!!lCK-QzFi-d@Mz?>Af5BT5C9xN#n-uR#$geghjg^ecqF~y2xy6ygAlK zjMa7mX)`h7>4c#xo+_6CFRs}?i$K^`^YCtOx#jx!*!}XUq7gZ*e0qEi^7inV@LE3= zYvbXCwk$F&I^p*7D#|^CPk30?xtATPSU@Q=DMM9ZsRROK@q? z;vR~ZQlLO__X0r!q(}%5tfjaFcP&l=0fL1fH|Kdz&w1Ye{dPaRoS(kDsrx$rEwc4a;`7JguOoxzoe7O zh_CUq#;Znlnzwh+Jj`%Ze%S?H(TGI7~BG=2Q z2$=Vn3r@v6cmEk8*0l}1fR%Z2wo>P0v$@s-QVnsMI(2oFO|Sr#A7Scuw%k_V5OlT} zhrfR0&S_fdxnW5Yqm+tTzjlaKtJCG=i&*qKQ%8%ZuE@w%U8#L^a2%qKH#{hZzB;N`zDCE`te`@0W{<*^aJ7KcTSjg|j~KdLSoY zZx|vIY*=sqSWI6ETD1-nKi5xVl+pnW#hm|4qwQ0_&X;wWcnsXb6_hWf&)VMlo9%8e zrs>YxPY$J4^tS~q%8lW?^HOkv9#bdQV}RKoFIDIdL3eMYzol4rLw20x8YZ z@(Y8)kG7lQ$AwWm+%rcFv{Q!G_!|FZKIZM!LO)!j4PXi6)w35lte>)&HJnO!47je5 z&rBr<|9nlL{k|`mw+rV~R9@`wH&qfn)(x9q#cJ0#w8vL7ne0TPhUCYOzMA+|0Zme= z!8gZH&K~nNG;YnWN|hlk7UNhTHbMp+nFbrciV3yUtOrol*`&(t8C}L%vY(Bq?7B-r zOH7#rF{>ItUh@KqTt}VDCGf0OW9Rcz?oj_Ut5^twy}Yo4@<<4 zbq0-rS5}+sj-whImuhb{)r&qW?i}xP&(sWL@SeuoXOI(JAGoLJ*Qr-v7<_gVqZjyd z{gsa?imIGXj)kdAW!|k7$F^1cTwe)Ax2CpEvM!Z*q#%>QpUlsx}_DgoA>;atoysmEU;sCiNfTRN|f zgx8lJLHCAh7+Se3N=+1GM;kwW-YeV*SXVUG)+@ye$LW<#Z$3Ik8&^uuo|YY!IPU~N zm)sXg9gy`Z3!CiYHO@>7Y!4hpqi{q`tC%2gam!12X%%*N4V3_=QoLcwY(3C%CLn9C z^sTP7=|lrHhr6D79OX{5DgZVySEl6C)Ok-X0e(`t-HSi!Y%|VZU(z&l9k(& zvizub+#4>nZ3EJW5YXwO;`XRQ@qNR zPY2EOrN9mzl32`6IUqh+YmP|_;5>8`Z8^4zN7SvGM}u8jn(O}T4-(2fqdCLAh`sg_ zgO-%ojboytqIh6pfA{mk{yx2==uaO#^i6|MQ#ifFy8d1%jSb}WgmFr-2)}rsc=|Su zB|K%<&opi+#XMf*D6t;R`0qMG(tYEJU#ZzlMis>_%pTS*h&QyEuUE}u$ISEWIJA`2 zAs|7HvDa!61!A9egSB-=-Sz^AF48&k_JsUv#_gH>2r7DhTx%a*-`Rwdb zk^a(P>h2=U?`jb?>#cTL73`O8R}y3N%xmq)+G)pJ{|lgyM{1Fa34EB?;%zgE|2Q;HHBJTeYJ z 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%0DwhbA8N`iV2Z-vzDy;p~ovhk*@=OQ_Wf*CAF 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 literal 0 HcmV?d00001 From 4fcadc69da6b07d15025f2182b29ef0c26213544 Mon Sep 17 00:00:00 2001 From: sarthaksarthak9 Date: Sun, 22 Oct 2023 07:49:42 +0530 Subject: [PATCH 06/18] Signed-off-by: sarthaksarthak9 README Signed-off-by: sarthaksarthak9 --- KubeEdge v1.14.2/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/KubeEdge v1.14.2/README.md b/KubeEdge v1.14.2/README.md index f69ad9d..395f641 100644 --- a/KubeEdge v1.14.2/README.md +++ b/KubeEdge v1.14.2/README.md @@ -4,6 +4,6 @@ We have created a tutorial in the interactive learning platform Killercoda for K ![alt text](/Images/scenarios.png) -you can acess it https://killercoda.com/sarthak-009 +This is available on Pls try it out!! From 472b7f7492f6ff443e28e7b2879bf89c7362de86 Mon Sep 17 00:00:00 2001 From: sarthaksarthak9 Date: Thu, 16 Nov 2023 21:09:48 +0530 Subject: [PATCH 07/18] Signed-off-by: sarthaksarthak9 Added all steps Signed-off-by: sarthaksarthak9 --- .../Apache-beam-analysis/index.json | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 KubeEdge v1.14.2/Apache-beam-analysis/index.json diff --git a/KubeEdge v1.14.2/Apache-beam-analysis/index.json b/KubeEdge v1.14.2/Apache-beam-analysis/index.json new file mode 100644 index 0000000..0649028 --- /dev/null +++ b/KubeEdge v1.14.2/Apache-beam-analysis/index.json @@ -0,0 +1,30 @@ +{ + "title": "KubeEdge Deployment", + "description": "Data Analytics with Apache Beam", + "details": { + "steps": [ + { + "title": "Step 1/4", + "text": "step1.md" + }, + { + "title": "Step 2/4", + "text": "step2.md" + }, + { + "title": "Step 3/4", + "text": "step3.md" + }, + { + "title": "Step 4/4", + "text": "step4.md" + } + ], + "intro": { + "text": "intro.md" + }, + }, + "backend": { + "imageid": "ubuntu" + } +} \ No newline at end of file From ff4523d25a56724bed38edb01609db59f89e20b7 Mon Sep 17 00:00:00 2001 From: sarthaksarthak9 Date: Thu, 16 Nov 2023 21:15:16 +0530 Subject: [PATCH 08/18] Signed-off-by: sarthaksarthak9 Readme Signed-off-by: sarthaksarthak9 --- .../Apache-beam-analysis/Readme.md | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 KubeEdge v1.14.2/Apache-beam-analysis/Readme.md diff --git a/KubeEdge v1.14.2/Apache-beam-analysis/Readme.md b/KubeEdge v1.14.2/Apache-beam-analysis/Readme.md new file mode 100644 index 0000000..f588863 --- /dev/null +++ b/KubeEdge v1.14.2/Apache-beam-analysis/Readme.md @@ -0,0 +1,23 @@ +# Data Analytics with Apache Beam + +## Description + +![High level architecture](images/High_level_Arch.png "High Level Architecture") + +The main aim of analytics engine is to get data from mqtt broker in stream format and apply rules on incoming data in real time and produce alert/action on mqtt broker. Getting data through pipeline and applying analysis function is done by using Apache Beam. + +### Apache Beam + +Apache Beam is an open source, unified model for defining both batch and streaming data-parallel processing pipelines. Using one of the open source Beam SDKs, we can build a program that defines the pipeline. + + +#### Why use Apache Beam for analytics + +There are many frameworks like Hadoop, Spark, Flink, Google Cloud Dataflow etc for stream processing. But there was no unified API to binds all such frameworks and data sources. It was needed to abstract out the application logic from these Big Data frameworks. Apache Beam framework provides this abstraction between your application logic and big data ecosystem. +- A generic dataflow-based model for building an abstract pipeline which could be run on any runtime like Flink/Samza etc. +- The same pipeline code can be executed on cloud(eg. Huawei Cloud Stream based on Apache Flink) and on the edge with a custom backend which can efficiently schedule workloads in an edge cluster and perform distributed analytics. +- Apache Beam integrates well with TensorFlow for machine learning which is a key use-case for edge. +- Beam has support for most of the functions required for stream processing and analytics. + + + From 016dd74954858c6a6689bffb3c48d7b3da64ef86 Mon Sep 17 00:00:00 2001 From: sarthaksarthak9 Date: Thu, 16 Nov 2023 21:15:51 +0530 Subject: [PATCH 09/18] Signed-off-by: sarthaksarthak9 intro Signed-off-by: sarthaksarthak9 --- .../Apache-beam-analysis/intro.md | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 KubeEdge v1.14.2/Apache-beam-analysis/intro.md diff --git a/KubeEdge v1.14.2/Apache-beam-analysis/intro.md b/KubeEdge v1.14.2/Apache-beam-analysis/intro.md new file mode 100644 index 0000000..44164af --- /dev/null +++ b/KubeEdge v1.14.2/Apache-beam-analysis/intro.md @@ -0,0 +1,31 @@ +# Data Analytics with Apache Beam + +## Description + +![High level architecture](images/High_level_Arch.png "High Level Architecture") + +The main aim of analytics engine is to get data from mqtt broker in stream format and apply rules on incoming data in real time and produce alert/action on mqtt broker. Getting data through pipeline and applying analysis function is done by using Apache Beam. + +### Apache Beam + +Apache Beam is an open source, unified model for defining both batch and streaming data-parallel processing pipelines. Using one of the open source Beam SDKs, we can build a program that defines the pipeline. + + +#### Demo 1.1 [Real-time alert]:Read batch data from MQTT,filter and generate alerts +- Basic mqtt read/write support in Apache Beam for batch data +- Reads data from an mqtt topic +- Create PCollection of read data and use it as the initial data for pipeline +- Do a filtering over the data +- Publish an alert on a topic if reading exceeds the value +![Demo1.1](images/Demo1.1.png "Demo1.1:Read batch data from MQTT,filter and generate alerts") + +#### Demo 1.2 [Filter Streaming Data]: Reads streaming data from MQTT, filter at regular intervals +- Read streaming data using MQTT +- Do a filtering over the data at fixed time intervals +![demo1.2](images/Demo1.2.png "Demo1.2:Reads streaming data from MQTT, filter at regular intervals") + +### Prerequisites +- Golang(version: 1.14+) +- KubeEdge(version: v1.5+) +- Docker(version: 18.09-ce+) + From 0dd9a0f9926a7e7f07b43cbea9031fa7cc30482c Mon Sep 17 00:00:00 2001 From: sarthaksarthak9 Date: Thu, 16 Nov 2023 21:17:19 +0530 Subject: [PATCH 10/18] Signed-off-by: sarthaksarthak9 step1 Signed-off-by: sarthaksarthak9 --- KubeEdge v1.14.2/Apache-beam-analysis/step1.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 KubeEdge v1.14.2/Apache-beam-analysis/step1.md diff --git a/KubeEdge v1.14.2/Apache-beam-analysis/step1.md b/KubeEdge v1.14.2/Apache-beam-analysis/step1.md new file mode 100644 index 0000000..d04cee5 --- /dev/null +++ b/KubeEdge v1.14.2/Apache-beam-analysis/step1.md @@ -0,0 +1,14 @@ +# Deploy pipeline application + +### Prerequisites + +- Golang(version: 1.14+) +- KubeEdge(version: v1.5+) +- Docker(version: 18.09-ce+) + +#### For demo 1.1: Pull the docker image from dockerhub by using following command + +``` +$ sudo docker pull containerise/ke_apache_beam:ke_apache_analysis_v1.1 +``` + From 2826a8fc394553eaec15fa8d28224489242ab4ba Mon Sep 17 00:00:00 2001 From: sarthaksarthak9 Date: Thu, 16 Nov 2023 21:17:58 +0530 Subject: [PATCH 11/18] Signed-off-by: sarthaksarthak9 step2 Signed-off-by: sarthaksarthak9 --- .../Apache-beam-analysis/step2.md | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 KubeEdge v1.14.2/Apache-beam-analysis/step2.md diff --git a/KubeEdge v1.14.2/Apache-beam-analysis/step2.md b/KubeEdge v1.14.2/Apache-beam-analysis/step2.md new file mode 100644 index 0000000..542e819 --- /dev/null +++ b/KubeEdge v1.14.2/Apache-beam-analysis/step2.md @@ -0,0 +1,22 @@ +# Deploy pipeline application + +### Prerequisites + +- Golang(version: 1.14+) +- KubeEdge(version: v1.5+) +- Docker(version: 18.09-ce+) + +#### For demo 1.2: Pull the docker image from dockerhub by using following command + +``` +$ sudo docker pull containerise/ke_apache_beam:ke_apache_analysis_v1.2 +``` + +#### Run the command + +This will shows all images created. Check image named ke_apache_analysis_v1.1 or ke_apache_analysis_v1.2 + +``` +$ docker images +``` + From 73872c7adc42f8c93e5f9a97bad95cfc95283a9f Mon Sep 17 00:00:00 2001 From: sarthaksarthak9 Date: Thu, 16 Nov 2023 21:18:47 +0530 Subject: [PATCH 12/18] Signed-off-by: sarthaksarthak9 step3 Signed-off-by: sarthaksarthak9 --- .../Apache-beam-analysis/step3.md | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 KubeEdge v1.14.2/Apache-beam-analysis/step3.md diff --git a/KubeEdge v1.14.2/Apache-beam-analysis/step3.md b/KubeEdge v1.14.2/Apache-beam-analysis/step3.md new file mode 100644 index 0000000..5bfeacb --- /dev/null +++ b/KubeEdge v1.14.2/Apache-beam-analysis/step3.md @@ -0,0 +1,20 @@ +## Setup the KubeEdge v.1.24.2 +follow this link + +``` +https://killercoda.com/sarthak-009/scenario/deployment +``` + + +### Try out a application deployment by following below steps. + +``` +$ kubectl apply -f https://github.com/kubeedge/examples/blob/master/apache-beam-analysis/deployment.yaml +``` + +### Then you can use below command to check if the application is normally running. + +``` +$ kubectl get pods +``` + From fabde7399aac66f7bcd5213b515dfa472214fd46 Mon Sep 17 00:00:00 2001 From: sarthaksarthak9 Date: Thu, 16 Nov 2023 21:19:04 +0530 Subject: [PATCH 13/18] Signed-off-by: sarthaksarthak9 step4 Signed-off-by: sarthaksarthak9 --- .../Apache-beam-analysis/step4.md | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 KubeEdge v1.14.2/Apache-beam-analysis/step4.md diff --git a/KubeEdge v1.14.2/Apache-beam-analysis/step4.md b/KubeEdge v1.14.2/Apache-beam-analysis/step4.md new file mode 100644 index 0000000..cf41930 --- /dev/null +++ b/KubeEdge v1.14.2/Apache-beam-analysis/step4.md @@ -0,0 +1,23 @@ +## Clone the repository + +``` +git clone https://github.com/kubeedge/examples.git +``` +Change the directory to apache-beam-analysis + +``` +cd examples/apache-beam-analysis +``` + +### Add following vendor packages: + +``` +go get -u github.com/yosssi/gmq/mqtt +go get -u github.com/yosssi/gmq/mqtt/client +``` + +run: +``` +go build testmachine.go +./testmachine +``` \ No newline at end of file From 0f8c4586ab2d1ff628a869fa0f4a7fd18075d192 Mon Sep 17 00:00:00 2001 From: sarthaksarthak9 Date: Sat, 18 Nov 2023 16:21:06 +0530 Subject: [PATCH 14/18] integrate all steps Signed-off-by: sarthaksarthak9 --- KubeEdge v1.14.2/Apache-beam-analysis/index.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/KubeEdge v1.14.2/Apache-beam-analysis/index.json b/KubeEdge v1.14.2/Apache-beam-analysis/index.json index 0649028..2739217 100644 --- a/KubeEdge v1.14.2/Apache-beam-analysis/index.json +++ b/KubeEdge v1.14.2/Apache-beam-analysis/index.json @@ -22,7 +22,7 @@ ], "intro": { "text": "intro.md" - }, + } }, "backend": { "imageid": "ubuntu" From 1afd0082d1573669be5669561931663240a9fb16 Mon Sep 17 00:00:00 2001 From: sarthaksarthak9 Date: Sat, 18 Nov 2023 16:22:22 +0530 Subject: [PATCH 15/18] step1 Signed-off-by: sarthaksarthak9 --- KubeEdge v1.14.2/Apache-beam-analysis/step1.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/KubeEdge v1.14.2/Apache-beam-analysis/step1.md b/KubeEdge v1.14.2/Apache-beam-analysis/step1.md index d04cee5..ef76d05 100644 --- a/KubeEdge v1.14.2/Apache-beam-analysis/step1.md +++ b/KubeEdge v1.14.2/Apache-beam-analysis/step1.md @@ -9,6 +9,6 @@ #### For demo 1.1: Pull the docker image from dockerhub by using following command ``` -$ sudo docker pull containerise/ke_apache_beam:ke_apache_analysis_v1.1 -``` +sudo docker pull containerise/ke_apache_beam:ke_apache_analysis_v1.1 +```{{execute}} From 3b403a880389ec9bc374bcbcbf0e3ced6217a5b7 Mon Sep 17 00:00:00 2001 From: sarthaksarthak9 Date: Sat, 18 Nov 2023 16:22:36 +0530 Subject: [PATCH 16/18] step2 Signed-off-by: sarthaksarthak9 --- KubeEdge v1.14.2/Apache-beam-analysis/step2.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/KubeEdge v1.14.2/Apache-beam-analysis/step2.md b/KubeEdge v1.14.2/Apache-beam-analysis/step2.md index 542e819..99ac038 100644 --- a/KubeEdge v1.14.2/Apache-beam-analysis/step2.md +++ b/KubeEdge v1.14.2/Apache-beam-analysis/step2.md @@ -9,14 +9,14 @@ #### For demo 1.2: Pull the docker image from dockerhub by using following command ``` -$ sudo docker pull containerise/ke_apache_beam:ke_apache_analysis_v1.2 -``` +sudo docker pull containerise/ke_apache_beam:ke_apache_analysis_v1.2 +```{{execute}} #### Run the command This will shows all images created. Check image named ke_apache_analysis_v1.1 or ke_apache_analysis_v1.2 ``` -$ docker images -``` +docker images +```{{execute}} From aee1025cbe6f9f916feed992f28ec3f0820701a9 Mon Sep 17 00:00:00 2001 From: sarthaksarthak9 Date: Sat, 18 Nov 2023 16:23:00 +0530 Subject: [PATCH 17/18] step 3 Signed-off-by: sarthaksarthak9 --- KubeEdge v1.14.2/Apache-beam-analysis/step3.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/KubeEdge v1.14.2/Apache-beam-analysis/step3.md b/KubeEdge v1.14.2/Apache-beam-analysis/step3.md index 5bfeacb..a66c08c 100644 --- a/KubeEdge v1.14.2/Apache-beam-analysis/step3.md +++ b/KubeEdge v1.14.2/Apache-beam-analysis/step3.md @@ -9,12 +9,12 @@ https://killercoda.com/sarthak-009/scenario/deployment ### Try out a application deployment by following below steps. ``` -$ kubectl apply -f https://github.com/kubeedge/examples/blob/master/apache-beam-analysis/deployment.yaml -``` +kubectl apply -f https://github.com/kubeedge/examples/blob/master/apache-beam-analysis/deployment.yaml +```{{execute}} ### Then you can use below command to check if the application is normally running. ``` -$ kubectl get pods -``` +kubectl get pods +```{{execute}} From a8422bdab5f5f21901b9e931a0ab381f233e6746 Mon Sep 17 00:00:00 2001 From: sarthaksarthak9 Date: Sat, 18 Nov 2023 16:23:12 +0530 Subject: [PATCH 18/18] step 4 Signed-off-by: sarthaksarthak9 --- KubeEdge v1.14.2/Apache-beam-analysis/step4.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/KubeEdge v1.14.2/Apache-beam-analysis/step4.md b/KubeEdge v1.14.2/Apache-beam-analysis/step4.md index cf41930..cc7c546 100644 --- a/KubeEdge v1.14.2/Apache-beam-analysis/step4.md +++ b/KubeEdge v1.14.2/Apache-beam-analysis/step4.md @@ -2,22 +2,22 @@ ``` git clone https://github.com/kubeedge/examples.git -``` +```{{execute}} Change the directory to apache-beam-analysis ``` cd examples/apache-beam-analysis -``` +```{{execute}} ### Add following vendor packages: ``` go get -u github.com/yosssi/gmq/mqtt go get -u github.com/yosssi/gmq/mqtt/client -``` +```{{execute}} run: ``` go build testmachine.go ./testmachine -``` \ No newline at end of file +```{{execute}} \ No newline at end of file