---
# System prepended metadata

title: 'NTU-IoT-Server: k3s'
tags: [NTU-IoT-Cow]

---

---
tags: NTU-IoT-Cow
---
# NTU-IoT-Server: k3s

[![WesleyCh3n - NTU-IoT-Server](https://img.shields.io/badge/WesleyCh3n-NTU--IoT--Server-2ea44f?logo=github)](https://github.com/WesleyCh3n/NTU-IoT-Server) [![hackmd-github-sync-badge](https://hackmd.io/BnkDNPPOR3ih29n067iA3Q/badge)](https://hackmd.io/BnkDNPPOR3ih29n067iA3Q)


## Pods

2 Pods will be created in each node.
- [Stream pod](https://github.com/WesleyCh3n/NTU-IoT-Server/blob/main/k3s/stream.t.yml.tmp): `stream.t.yml`
- [Backup image pods](https://github.com/WesleyCh3n/NTU-IoT-Server/blob/main/k3s/backup.t.yml.tmp): `backup.t.yml`

### `stream.t.yml`

This pod run [ntu-iot-node](https://github.com/WesleyCh3n/NTU-IoT-Node) and pass the arguments it used.

Mount Path:
- ntu-iot-node: `/home/pi/ntu-iot-node/:/home/`
- Raspicam:
    - `/opt/vc:/opt/vc`
    - `/dev/vchiq:/dev/vchiq`
    - `/dev/vcsm:/dev/vcsm`
- Timezone: `/usr/share/zoneinfo/Asia/Taipei:/etc/localtime`

Docker Image: [wesleych3n/ntu-iot:cc-slim](https://hub.docker.com/layers/wesleych3n/ntu-iot/cc-slim/images/sha256-35eae8d8639e65f627726fb02caf60c53d8455c4e2aba83377bd5dfd27102f32?context=explore)

### `backup.t.yml`
This pod run [upload.sh](https://github.com/WesleyCh3n/NTU-IoT-Node/blob/main/upload.sh) and pass the arguments it used.

Mount Path:
- upload.sh: `/home/pi/ntu-iot-node/:/home/`
- Telegram config: `/home/pi/ntu-iot-node/cfg/telegram-send.conf:/etc/telegram-send.conf`
- Timezone: `/usr/share/zoneinfo/Asia/Taipei:/etc/localtime`
- rsync ssh key: `/home/pi/.ssh/id_rsa:/root/.ssh/id_rsa`

Docker Image: [wesleych3n/ntu-iot:send](https://hub.docker.com/layers/wesleych3n/ntu-iot/send/images/sha256-57cf36bfb660886bb333d4a8a353fa6efb1ced667001f9d483d4bc780c38f33b?context=explore)

---

## Yaml parser: `j`

Because we want to specify different numbers in `yaml` argument, `j` is the program to parse `{{  }}` with [Jinja2](https://jinja.palletsprojects.com/en/3.0.x/) style.

In `yaml`, `{{ '%02d' % Number }}` will be replaced with the node number we pass into `j`. And print out each node parsing result.

### Usage

```bash
j <yml file> <node num> | kubectl <operation>
```
---

## `kubectl` Useful Command

```bash
# Node Status
k get no
# Specific Node Status
k describe node <node-name>

# All Pod Status
k get pod
# Specific Pod Status
k describe pod <pod-name>

# Logs
## Log all
k logs <pod-name>
## Log last 5 line
k logs --tail=5 <pod-name>

# Pods Manipulation
## Create Pods with # Node
j stream.t.yml 1 2 3 4 5 | k apply -f -
j backup.t.yml 1 2 3 4 5 | k apply -f -
## Delete Pods with # Node
j stream.t.yml 1 2 3 4 5 | k delete -f -
j backup.t.yml 1 2 3 4 5 | k delete -f -
## Delete all pods
k delete pods --all

# Remove a Node from cluster
k drain <node-name>
k delete node <node-name>
```
