学习 Kubernetes 稍晚开始 – 03. 树莓派

故事

    1. 学习 Kubernetes 有点落后 – 01. 环境选择篇 –

 

    1. 学习 Kubernetes 有点落后 – 02. Docker For Mac –

 

    1. 学习 Kubernetes 有点落后 – 03. Raspberry Pi –

 

    1. 学习 Kubernetes 有点落后 – 04. kubectl –

 

    1. 学习 Kubernetes 有点落后 – 05. workloads 第一部分 –

 

    1. 学习 Kubernetes 有点落后 – 06. workloads 第二部分 –

 

    1. 学习 Kubernetes 有点落后 – 07. workloads 第三部分 –

 

    1. 学习 Kubernetes 有点落后 – 08. discovery&LB 第一部分 –

 

    1. 学习 Kubernetes 有点落后 – 09. discovery&LB 第二部分 –

 

    1. 学习 Kubernetes 有点落后 – 10. config&storage 第一部分 –

 

    1. 学习 Kubernetes 有点落后 – 11. config&storage 第二部分 –

 

    1. 学习 Kubernetes 有点落后 – 12. 资源限制 –

 

    1. 学习 Kubernetes 有点落后 – 13. 健康检查与容器生命周期 –

 

    1. 学习 Kubernetes 有点落后 – 14. 调度 –

 

    1. 学习 Kubernetes 有点落后 – 15. 安全性 –

 

    学习 Kubernetes 有点落后 – 16. 组件 –

之前

一足遅れて Kubernetes を学び始める – 02. Docker For Mac -では、MacでKubernetesを軽く動かしてみました。DockerForMacでは、NodeがMasterのみだったため、Kubernetesを学習するには、ものたりない感がありました。そこで、RaspberryPiを使っておうちKubernetesを構築することになりました。

我将按照@go_vargo先生的《在Raspberry Pi上构建家庭Kubernetes》的物理和逻辑部分进行操作。

他参考的网站 (Tā de

    • ラズパイでKubernetesクラスタを構築する

 

    • おうちKubernetes構築でハマったところ – ニッチ編 –

 

    • おうちkubernetesでデータを永続化する

 

    • kubernetesのラズパイ包みが美味しそうだったので、kubeadmを使って作ってみた

 

    • Raspberry PI と kubeadm で自宅 Kubernetes クラスタを構築する

 

    • 3日間クッキング【Kubernetes のラズペリーパイ包み “サイバーエージェント風”】

 

    33時間クッキング【Kubernetesのラズベリーパイ包み〜ウエパ風〜】

食谱

商品名個数用途Raspberry Pi 3 Model B3つMasterNode1台
WorkerNode2台microSDHCカード 16GB3枚RaspberryPiのimage書き込み先LANケーブル1本RaspberryPiとネットワーク接続USB充電器1台RaspberryPiの電源Micro USBケーブル4本RaspberryPiとUSB充電器をつなげるfor Raspberry Pi ケース 専用 4段
ヒートシンク付1台4段
(3:RaspberryPi,1:USB充電器)

由于树莓派3代的Model B具备WiFi功能,因此我决定连接到家里的WiFi网络。我在家使用的是SoftbankAir。(初次连接时需要使用LAN线缆进行网络连接)

此外,我的环境如下所示。

iMac (21.5-inch, 2017)

构筑(物理)

kubernetes_raspberrypi.png

WiFiを使うために、LANケーブルやWiFi親機などがなくなり、スッキリしました。
電源を確保できるところであれば、家の中なら、どこでも持ち運びできます。

建构(逻辑)

Raspbian Stretch Liteをダウンロードしておきます。
2019-04-08-raspbian-stretch-lite.img

我们将按照以下步骤逐台操作RaspberryPi。

1. 开始设置

在将microSD卡连接到Mac之后,需要执行以下操作。

$ diskutil list
$ sudo diskutil umount /dev/disk3s1
$ sudo dd bs=1m if=2019-04-08-raspbian-stretch-lite.img of=/dev/rdisk3 conv=sync
$ cd /Volumes/boot
$ touch ssh
$ vim cmdline.txt
# 下記を末尾に追記
cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1

据说在写入图像时,添加r盘(rdisk3)可以加快速度。

2. 连接到Raspberry Pi。

在将MicroSD卡插入RaspbeeryPi并启动电源后,您需要执行以下步骤。
将LAN电缆直接连接到家里的WiFi上(在我这种情况下是SoftBankAir)。

主机名将设置为您喜欢的名称。(我设置为 Master:raspi001, Worker:raspi002,raspi003。)

$ slogin pi@raspberrypi.local
# 初回password「raspberry」
pi@raspbeerypi:~ $ sudo passwd pi
pi@raspbeerypi:~ $ sudo apt-get update && sudo apt-get -y upgrade && sudo apt-get install -y vim
pi@raspbeerypi:~ $ sudo vim /etc/hostname
pi@raspbeerypi:~ $ sudo sh -c 'wpa_passphrase <SSID> <PASSWORD> >> /etc/wpa_supplicant/wpa_supplicant.conf'
pi@raspbeerypi:~ $ sudo shutdown -r now

在第二次及以后的连接中,请执行ssh-keygen -R raspberrypi.local来移除主机的SSH密钥。

关闭电源,拔下LAN电缆。等待几分钟后重新接通电源,然后进行以下操作。

$ slogin pi@raspi001.local
pi@raspi001:~ $ 

只要能够连接成功就算成功了。

3. 各种安装 (Gè

我要念咒。

pi@raspi001:~ $ sudo dphys-swapfile swapoff && sudo dphys-swapfile uninstall && sudo update-rc.d dphys-swapfile remove

我要安装Docker。

pi@raspi001:~ $ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common -y
pi@raspi001:~ $ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
pi@raspi001:~ $ echo "deb [arch=armhf] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
     $(lsb_release -cs) stable" | \
    sudo tee /etc/apt/sources.list.d/docker.list
pi@raspi001:~ $ sudo apt-get update -y
pi@raspi001:~ $ sudo apt-get install docker-ce -y

安装Kubernetes。

pi@raspi001:~ $ curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg|sudo apt-key add - 
pi@raspi001:~ $ echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kube.list
pi@raspi001:~ $ sudo apt-get update -y && sudo apt-get install kubelet kubeadm kubectl -y

4. MasterNodeの設定

MasterNodeにするRaspberryPiに対して下記を実施します。

pi@raspi001:~ $ sudo kubeadm init --pod-network-cidr=10.244.0.0/16
pi@raspi001:~ $ mkdir -p $HOME/.kube
pi@raspi001:~ $ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
pi@raspi001:~ $ sudo chown $(id -u):$(id -g) $HOME/.kube/config

将生成的加入消息记录下来,在构建WorkerNode时使用。

我会根据这里的指示进行以下操作。

pi@raspi001:~ $ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
pi@raspi001:~ $ kubectl get pods --all-namespaces
NAMESPACE     NAME                               READY   STATUS              RESTARTS   AGE
kube-system   coredns-fb8b8dccf-lglcr            0/1     ContainerCreating   0          4d16h
kube-system   coredns-fb8b8dccf-snt7d            0/1     ContainerCreating   0          4d16h
...

5. WorkerNode的配置

我将执行由MasterNode生成的join命令。

pi@raspi002 $ kubeadm join 192.168.3.32:6443 --token X \
    --discovery-token-ca-cert-hash sha256:X

6. 从主节点确认

我将检查节点是否增加。

pi@raspi001:~ $ kubectl get nodes
NAME       STATUS   ROLES    AGE   VERSION
raspi001   Ready    master   65m   v1.14.1
raspi002   Ready    <none>   18m   v1.14.1
raspi002   Ready    <none>   18m   v1.14.1
pi@raspi001:~ $ kubectl label node raspi002 node-role.kubernetes.io/worker=worker
pi@raspi001:~ $ kubectl label node raspi003 node-role.kubernetes.io/worker=worker
pi@raspi001:~ $ kubectl get nodes
NAME       STATUS   ROLES    AGE   VERSION
raspi001   Ready    master   65m   v1.14.1
raspi002   Ready    worker   37m   v1.14.1
raspi003   Ready    worker   37m   v1.14.1

从浏览器确认

我会试着快速地进行部署、发布服务和在浏览器中进行确认。

pi@raspi001:~ $ kubectl run nginx --image=nginx --replicas=1 --port=80
pi@raspi001:~ $ kubectl expose deployment nginx --port 80 --target-port 80 --type NodePort
pi@raspi001:~ $ kubectl get svc nginx
NAME    TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
nginx   NodePort   10.99.227.194   <none>        80:30783/TCP   17m

由于服务已经开放,所以我会尝试访问一下。

公司内部

pi@raspi001:~ $ curl http://10.99.227.194:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>

外部 -> 外面

pi@raspi001:~ $ ifconfig
...
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.3.32  netmask 255.255.255.0  broadcast 192.168.3.255

请访问:http://192.168.3.32:30783

nginx

好的!

整理收拾

pi@raspi001:~ $ kubectl delete deployments nginx
deployment.extensions "nginx" deleted
pi@raspi001:~ $ kubectl  delete service nginx
service "nginx" deleted

做完

因为有很多前辈的文章,因此我可以顺利地构建它。进展非常顺利。现在我可以大量地使用Kubernetes!以下是下一步计划。

广告
将在 10 秒后关闭
bannerAds