-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathindex.html
144 lines (112 loc) · 6.07 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
<html>
<head>
<link rel="shortcut icon" type="image/png" href="./static/index.png">
<link rel="stylesheet" type="text/css" href="./static/style.css">
<title>Getting Started with Kubernetes</title>
</head>
<body>
<h1>Building a Kubernetes "Intelligent Edge" Cluster on Raspberry Pi</h1>
<table>
<tr>
<th>Author</th>
<th><a target="_blank"
href="https://developer.microsoft.com/en-us/advocates/dave-glover?WT.mc_id=github-blog-dglover">Dave
Glover, Microsoft Australia</a></th>
</tr>
<tr>
<td>Platform</td>
<td>Raspberry Pi, Raspbian Buster, Kernel 4.19</td>
</tr>
<tr>
<td>Date</td>
<td>October 2019</td>
</tr>
<tr>
<td>Acknowledgments</td>
<td>Inspired by <a target="_blank" href="https://blog.alexellis.io/visiting-pimoroni/">Alex Ellis' work with
his Raspberry Pi Zero Docker Cluster</a></td>
</tr>
<tr>
<td>Skill Level</td>
<td>This guide assumes you have some Raspberry Pi and networking experience.</td>
</tr>
</tbody>
</table>
<h2 id="building-a-raspberry-pi-kubernetes-cluster">Building a Raspberry Pi Kubernetes Cluster</h2>
<p>Building a Kubernetes Intelligent Edge cluster on Raspberry Pi is a great learning experience, a stepping stone
to building robust Intelligent Edge solutions, and an awesome way to impress your friends. Skills you develop on
the <em>edge</em> can be used in the <em>cloud</em> with <a target="_blank"
href="https://azure.microsoft.com/en-au/services/kubernetes-service/?WT.mc_id=github-blog-dglover">Azure
Kubernetes Service</a>.</p>
<hr>
<h1>Learning Kubernetes</h1>
<img src="kubernetes-up-and-running.png" style="float: right">
<p>You can download a free copy of the <a
href="https://azure.microsoft.com/en-us/resources/kubernetes-up-and-running/?WT.mc_id=github-blog-dglover"
target="_blank">Kubernetes:
Up and Running, Second Edition</a> book.</p>
<p>It is an excellent introduction to Kubernetes and it will accelerate your understanding of Kubernetes.</p>
<p>Published: 8/22/2019</p>
<p>Improve the agility, reliability, and efficiency of your distributed systems by using Kubernetes. Get the
practical
Kubernetes deployment skills you need in this O'Reilly e-book. You will learn how to:</p>
<ul>
<li> Develop and deploy real-world applications.</li>
<li>Create and run a simple cluster.</li>
<li>Integrate storage into containerized microservices.</li>
<li>Use Kubernetes concepts and specialized objects like DaemonSet jobs, ConfigMaps, and secrets.</li>
</ul>
<p>Learn how to use tools and APIs to automate scalable distributed systems for online services, machine learning
applications, or even a cluster of Raspberry Pi computers.</p>
<h2>Azure Kubernetes Services</h2>
<a href="https://docs.microsoft.com/azure/aks/?WT.mc_id=github-blog-dglover" target="_blank">Azure Kubernetes
Services Documentation</a>
<h2>Kubernetes Resources</h2>
<a href="https://github.com/kubernetes-up-and-running/kuard" target="_blank">Demo application for "Kubernetes Up and
Running (on GitHub)"</a>
<h2>Installed Demos</h2>
<p>Before run the demos you need to insure an instance of the corresponding demo pod is running. By default, there
are zero
pod instances active when the cluster is set up. The easiest way to start a pod is from the Kubernetes Dashboard
<i>Deployments</i> and <i>Replica Set</i> tabs</p>
<p>You need the application service address and port. Again. most easily obtained from the
<ul>
<li><a
href="http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#/service?namespace=default">Kubernetes
Services</a> tab</li>
<li>or from the command line:<br /><br />
<code>
<b>kubectl get services</b>
</code>
<pre>
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
image-classifier LoadBalancer 10.96.136.29 192.168.100.200 80:32519/TCP 4h25m
jupyter LoadBalancer 10.96.224.173 192.168.100.203 8888:30471/TCP 4h25m
kuard LoadBalancer 10.96.229.114 192.168.100.201 8080:32515/TCP 4h25m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4h26m
led-controller LoadBalancer 10.96.148.9 192.168.100.205 80:30752/TCP 4h25m
nginx-service LoadBalancer 10.96.9.213 192.168.100.202 80:32711/TCP 4h25m
openweathermap LoadBalancer 10.96.109.92 192.168.100.204 80:31732/TCP 4h25m
</pre>
</li>
</ul>
<h3>Preinstalled Demos</h3>
<ol>
<li>NGINX Web Server: http://{nginx-service EXTERNAL-IP}</li>
<li>Jupyter Notebook (Python3, Pandas, Numpy, Scipy, Tensorflow 2): http://{jupyter EXTERNAL-IP:8888/}</li>
<li>Led Controller: http://{led-controller EXTERNAL-IP}/api/ToggleLed?led=0</li> (Python Azure Function)
<li>Openweathermap: http://{openweathermap EXTERNAL-IP}/api/GetWeather?name=dave</li> (.NET C# Azure Function)
<li>Image Classification: curl -X POST http://{image-classifier EXTERNAL-IP}/image -H "Content-Type:
application/octet-stream" --data-binary @banana.jpg</li>
</ol>
<h2>Running Demos</h2>
<h3>Image Classification</h3>
<code>
while : ; do curl -X POST http://{image-classifier EXTERNAL-IP}/image -H "Content-Type: application/octet-stream" --data-binary @banana.jpg done &
</code>
<h3>LED Controller</h3>
<code>
count=0; while : ; do count=$(($count + 1)); curl http://{led-controller EXTERNAL-IP}/api/ToggleLed?led=$(($count % 8)); done &
</code>
</body>
</html>