Kubernetes et Emby Server

Preparation

Passer 32Go de la ZFS de Proxmox au ubuntu qui host kubernetes

Dans TrueNas exposer /mnt/Magneto/9-VideoClub en SMB

Passer la carte Graphic a ubuntu

Installation filesystem

installation de Cifs et edition de fstab pour monter automatiquement le share truenas

sudo apt install cifs-utils
sudo nano /etc/fstab

//192.168.1.46/9-VideoClub /Videoclub cifs uid=0,credentials=/home/david/.smb,iocharset=utf8,noperm 0 0

Cree une partion sur le disk de 32Go provenant de Proxmox via fdisk , formater en ext4 et monter cette partion sur le filesystem /usr/kubedata

sudo nano /etc/fstab

/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi1-part1 /usr/kubedata ext4 defaults    0 0

deployement

La commande docker avec le filesystem preparé

sudo docker run -d \
    --name embyserver \
    --volume /usr/kubedata/embyserver/config:/config \
    --volume /Videoclub:/mnt/videoclub \
    --net=host \
    --device /dev/dri:/dev/dri \
    --publish 8096:8096 \
    --publish 8920:8920 \
    --env UID=1000 \
    --env GID=100 \
    --env GIDLIST=100 \
    emby/embyserver:latest

traduction en kubernetes deploy :

apiVersion: apps/v1
kind: Deployment
metadata:
  name: embyserver 
  namespace: default
  labels:
    app: emby
spec:
  replicas: 1
  selector:
    matchLabels:
      app: emby
  template:
    metadata:
      labels:
        run: embyserver 
        app: emby
    spec:
      containers:
      - name: embyserver 
        image: emby/embyserver:latest
        env:
          - name: "UID"
            value: "1000"
          - name: "GID"
            value: "100" 
          - name: "GIDLIST"
            value: "100" 
        ports:
        - containerPort: 8096
          name: emby-http
        - containerPort: 8920
          name: emby-https
        volumeMounts:
        - mountPath: /config
          name: emby-config
        - mountPath: /mnt/videoclub
          name: emby-media
      volumes:
      - name: emby-media
        hostPath:
          type: Directory
          path: /Videoclub
      - name: emby-config
        hostPath:
          type: DirectoryOrCreate
          path: /usr/kubedata/embyserver/config
---
apiVersion: v1
kind: Service
metadata:
  name: emby
spec:
  selector:
    app: emby
  ports:
    - name: "http"
      port: 8096
      targetPort: 8096
    - name: "https"
      port: 8920
      targetPort: 8920
  type: NodePort

puis on recupere le recupere le port d’exposition

kubectl get all --all-namespaces | grep emby

resultat le dashboard est accecible https://<master-ip>:30647

Exposer le Dashboard K8s

https://stackoverflow.com/questions/48286170/how-to-access-canonical-kubernetes-dashboard-externally

Pour rendre accesible le dashboard Kurbernetes “form outside the machine” il est possible de modifier le type d’exposition de clusterIp a NodePort.

kubectl -n kube-system edit service kubernetes-dashboard

remplacer “type: ClusterIp” par “type: NodePort”

en executant la commande suivante on recupere le port d’exposition

kubectl -n kube-system get service kubernetes-dashboard

resultat le dashboard est accecible https://<master-ip>:31834

installation des images Docker

Docker Logos | Docker

install emby

microk8s kubectl create deployment embyserver --image=emby/embyserver:latest
microk8s kubectl expose deployment embyserver --type=NodePort --port=8096
microk8s kubectl port-forward -n default service/embyserver 8096:8096 --address 192.168.1.26 &

install sickchill

microk8s kubectl create deployment sickchill --image=sickchill/sickchill
microk8s kubectl expose deployment sickchill --type=NodePort --port=8081

microk8s kubectl port-forward -n default service/sickchill 8081:8081 --address 192.168.1.26 &

install transmission

microk8s kubectl create deployment transmission --image=linuxserver/transmission
microk8s kubectl expose deployment transmission --type=NodePort --port=9091
microk8s kubectl port-forward -n default service/transmission 9091:9091 --address 192.168.1.26 &

edit file /config/settings.json

Ubuntu , Docker, Kubernetes

Installer ubuntu sur proxmox

Installer Docker

curl https://releases.rancher.com/install-docker/20.10.sh | sh

Update Ubuntu

Afin deviter des erreur pendant l’install il faut mettre a jour ubuntu avant de lancer la procedure d’install

sudo apt update
sudo apt upgrade
sudo reboot

Installer Kubernetes

https://ubuntu.com/tutorials/install-a-local-kubernetes-with-microk8s#2-deploying-microk8s

sudo snap install microk8s --classic
sudo ufw allow in on cni0 && sudo ufw allow out on cni0
sudo ufw default allow routed
microk8s enable dns dashboard storage
microk8s kubectl get all --all-namespaces
microk8s kubectl port-forward -n  kube-system service/kubernetes-dashboard 10443:443 --address 0.0.0.0 &&

creation d’un alias pour lancer les commandes “microk8s kubectl” directement avec ” kubectl”

sudo snap alias microk8s.kubectl kubectl
david@legion2:~$ microk8s kubectl get all --all-namespaces
NAMESPACE     NAME                                             READY   STATUS    RESTARTS       AGE
kube-system   pod/coredns-7f9c69c78c-7ljk2                     1/1     Running   1 (6h2m ago)   6h36m
kube-system   pod/calico-kube-controllers-6b654d96bd-ngxnq     1/1     Running   1 (6h2m ago)   14h
kube-system   pod/calico-node-tb2cz                            1/1     Running   1 (6h2m ago)   14h
kube-system   pod/metrics-server-85df567dd8-gfjvk              1/1     Running   0              5h57m
kube-system   pod/kubernetes-dashboard-59699458b-66gng         1/1     Running   0              5h53m
kube-system   pod/dashboard-metrics-scraper-58d4977855-lg8qw   1/1     Running   0              5h53m
kube-system   pod/hostpath-provisioner-5c65fbdb4f-nvclh        1/1     Running   0              5h53m
default       pod/embyserver-56d8c5b5bc-4xtj9                  1/1     Running   0              13m

NAMESPACE     NAME                                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
default       service/kubernetes                  ClusterIP   10.152.183.1     <none>        443/TCP                  14h
kube-system   service/kube-dns                    ClusterIP   10.152.183.10    <none>        53/UDP,53/TCP,9153/TCP   6h36m
kube-system   service/metrics-server              ClusterIP   10.152.183.220   <none>        443/TCP                  5h57m
kube-system   service/kubernetes-dashboard        ClusterIP   10.152.183.11    <none>        443/TCP                  5h54m
kube-system   service/dashboard-metrics-scraper   ClusterIP   10.152.183.66    <none>        8000/TCP                 5h54m
default       service/embyserver                  NodePort    10.152.183.74    <none>        8096:30829/TCP           9m48s

NAMESPACE     NAME                         DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
kube-system   daemonset.apps/calico-node   1         1         1       1            1           kubernetes.io/os=linux   14h

NAMESPACE     NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
kube-system   deployment.apps/coredns                     1/1     1            1           6h36m
kube-system   deployment.apps/calico-kube-controllers     1/1     1            1           14h
kube-system   deployment.apps/metrics-server              1/1     1            1           5h57m
kube-system   deployment.apps/kubernetes-dashboard        1/1     1            1           5h54m
kube-system   deployment.apps/dashboard-metrics-scraper   1/1     1            1           5h54m
kube-system   deployment.apps/hostpath-provisioner        1/1     1            1           5h54m
default       deployment.apps/embyserver                  1/1     1            1           13m

NAMESPACE     NAME                                                   DESIRED   CURRENT   READY   AGE
kube-system   replicaset.apps/calico-kube-controllers-69d7f794d9     0         0         0       14h
kube-system   replicaset.apps/coredns-7f9c69c78c                     1         1         1       6h36m
kube-system   replicaset.apps/calico-kube-controllers-6b654d96bd     1         1         1       14h
kube-system   replicaset.apps/metrics-server-85df567dd8              1         1         1       5h57m
kube-system   replicaset.apps/kubernetes-dashboard-59699458b         1         1         1       5h53m
kube-system   replicaset.apps/dashboard-metrics-scraper-58d4977855   1         1         1       5h53m
kube-system   replicaset.apps/hostpath-provisioner-5c65fbdb4f        1         1         1       5h53m
default       replicaset.apps/embyserver-56d8c5b5bc                  1         1         1       13m

Reflexion Data Pool

je poursuis la reflexion sur la repartition de disques.

Je m’arrete sur une repartition de ce type:

1-Serveur

dataset regroupant tout ce qui concerne le serveur

  • Le system (proxmox / ubuntu serveur / kubernetes / true nas)
  • les params (docker / vm)

2-NetLife

replication des site web et depot de données sur le Net

5-Documents

tout les documents , creation , code source , modele , papier , reference . regroupé dans 4 categorie

  • Active : projet/repertoire qui sont en cours
  • Retention : projet/repertoire consultable ou de reference
  • Archive : n’est plus utilisé mais encore conserver (repertoire zipper)
  • IceStorage : conservation long repertoire zipper

8-Photo

Toutes les photos , y compris le dataset 00-CheckIn on sont rassemble en automatique les photo des telephone

9-VideoClub

  • cyclops/1-Serveur
  • cyclops/1-Serveur/10-System
  • cyclops/1-Serveur/20-Param
  • cyclops/2-NetLife
  • cyclops/2-NetLife/50-WebSite
  • cyclops/2-NetLife/60-Git
  • diablo/5-Documents
  • diablo/5-Documents/10-Active
  • diablo/5-Documents/50-Rentention
  • diablo/5-Documents/80-Archive
  • diablo/5-Documents/90-IceStorage
  • diablo/8-Photo
  • diablo/8-Photo/00-CheckIn
  • diablo/8-Photo/50-Phototheque
  • magneto/9-VideoClub
  • magneto/9-VideoClub/10-Film
  • magneto/9-VideoClub/20-Film_Vf
  • magneto/9-VideoClub/30-Series
  • magneto/9-VideoClub/40-Anime
  • magneto/9-VideoClub/90-Insanity

Bye bye Rancher

Apres avoir vu les statistiques de consomation de rancher , je desinstalle.

Meme au repos la consomation est elevée.

Mon besoin etant limité :

  • un seule cluster
  • peu de cpu
  • ui kubernetes comme au boulot

Creation template Ubuntu

Lors de mes tentative d’installation de rancher , j’ai reinstaller plusieur fois ubuntu.

Je crée donc un template pour mettre en place une procedure de deployement plutot que d’installe a chaque fois.

Premierement j’installe un VM ubuntu via l’iso , en activant l’option dans l’installation “ssh”

j’ajoute qemu-guest-agent pour que proxmox puisse recuperer des info de la VM

 sudo apt-get install qemu-guest-agent

en suivant cette video , j’utilise cloud-init pour faire un template deployable

sudo apt install cloud-init
un fois fait , pour crée une nouvelle vm ubuntu on fait un full clone

Ubuntu , Docker, Rancher, Kubernetes

Installer ubuntu sur proxmox

Installer Docker

curl https://releases.rancher.com/install-docker/20.10.sh | sh

Installer Rancher

la commande d’installation fait que /opt/rancher est l’emplacement persistant de la configuration du node docker , ce qui permet d’assigner un disk vm pour conserver la config rancher meme si on detruit le contener docker

ajouter un disk a la vm

dans ubuntu le partitionner , formater et le monter

sudo mkdir /opt/rancher

sudo parted /dev/sdb

sudo mkfs -t ext4 /dev/sdb1

sudo nano -Bw /etc/fstab
/dev/sdb1    /opt/rancher   ext4    defaults     0        2

Execution de le commande d’installation

docker run -d --restart=unless-stopped   -p 80:80 -p 443:443   -v /opt/rancher:/var/lib/rancher --privileged --name=rancher_docker_server -e CATTLE_BOOTSTRAP_PASSWORD=password rancher/rancher:latest 

References

https://techno-tim.github.io/posts/docker-rancher-kubernetes/