Category: Web

stuff about web design, development, trends, and tricks

  • How to install Portainer with multiple nodes

    How to install Portainer with multiple nodes

    Prerequisites

    To get multiple nodes, I am using both a VM on my host and Docker on my Synology. To that end, these instructions will be based off of what I am using.

    I’ll cover the steps from once you have Synology up and running as well as a Linux VM running Ubuntu. For sizing the VM, I couldn’t find much guidance so went with 4 cores on 1 CPU, 2 GB RAM and 10 GB HDD. I only have a two-bay NAS but did upgrade the RAM to 6 GB.

    Synology Steps

    I used the excellent steps on Synology: 30 Second Portainer Install Using Task Scheduler & Docker – Marius Hosting. The thing to remember in his steps, the names and paths created in the middle are used explicitly in the scheduled task. You are using the scheduled task so you don’t have to SSH into the Synology. Think of it as entering the commands in the terminal. Obviously I edited the commands to match my setup. I like Maruis’ way as it’s simple with the flexibility of command line. Speaking of which, I needed to adjust my Synology firewall to allow the traffic on the new ports. The script Marius provided uses 8000 and 9000.

    There is also a GUI interface in Synology for creating docker containers. This site has a great tutorial on that but uses PiHole as the example. In the end, I used the command line scheduled task (even for updating Portainer) as I don’t know how to use the GUI to get an equivalent to “docker.sock” volume.

    Ubuntu VM Steps

    First I created a new VM and installed the latest mini-Ubuntu. There is a selection in the installer for adding Docker, don’t do that. It loads Snaps and those don’t work. Then I installed Docker by following these instructions- How to install Docker on Ubuntu as they were using more of the built-in functionality of APT.

    Next I installed the agent using these instructions. The guy talks a lot but the key point of using the Edge Install script provided in Portainer is correct. The link should be about 3 min in where he really gets to the details.

    Now I have Two

    Now I have two environments in one administration interface! For my purposes, I’m going to put more containers on the VM to keep the load over there.

  • Kubernetes Cheat-sheet

    Kubernetes Cheat-sheet

    kubectl get pods -n namespace ### get the id of the pod just made for given namespace

    kubectl logs namespace-tag-6b59cf4fbc-k5wdc -n namespace ### show the logs of what’s happening to it

    kubectl get ingress -A ### get a list of ingress points for all namespace

    kubectl get svc -A ### get a list of all services running for all namespaces

    kubectl exec -it container-tag-6b59cf4fbc-k5wdc -n namespace sh ### open container and run shell on it

    helm template -f values.yaml . > deployChart.yaml ### run the chart against template but just output to file

    helm install -name appName . -n namespace --create-namespace ### make stuff from current folder from Chart.yaml

    helm install -name appName. -n namespace --debug --dry-run ### try out creation but don’t actually make

    helm uninstall appName-n namespace ### delete stuff via helm

    kubectl get pods --field-selector=status.phase!=Running -A ### get all the pods that are not running

    kubectl get deployments -A ### get all the deployments

    kubectl edit deployment spark-query -n namespace ### edit the one deployment ‘spark-query’

    kubectl scale deployment portal -n namespace --replicas=1 ### add one pod to ‘portal’ service

    kubectl get deploy -n namespace -o yaml ### output the deployment to new yaml file

    kubectl edit deploy appName -n namespace ### edit the deployment in vi

    kubectl edit cm appName -n namespace

    kubectl describe pod container-tag-6b59cf4fbc-k5wdc -n namespace ### get details on pod

    kubectl get secret -n namespace

    kubectl edit secret default-token-qcnfb -n namespace

    kubectl create secret generic azure-app-secret --from-literal=azurestorageaccountname=storageName --from-literal=azurestorageaccountkey=[key]  -n namespace

    kubectl delete pod --all -n namespace ### delete all the pods in namespace

  • Docker Cheat-sheet

    Docker Cheat-sheet

    Some semi-random commands for Docker.

    Image commands:

    docker --help #to list all commands
    sudo docker images -a -q #return just the ID of all images
    sudo docker rmi <image name> #to remove a specific image

    Working with containers:

    sudo docker ps -a -q #return just the ID of all containers
    sudo docker rm <container name or ID> #to remove specific container

    The one’s that I needed while working with Azure:

    docker login m1dev.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password $TOKEN
    az acr login --name m1devcr

    *** if this fails, try to clear account on server

    Az account clear

    –goto directy with docker file and run?

    sudo docker build -t <acr service name>/<acr repo>/<image name>:<image tag> <Path to dockerfile>
    #i.e. - sudo docker build -t m1dev.azurecr.io/path/portal:version.R21.0.10 portal

    –tag is version number, might be in helm chart

    docker push <acr service name>/<acr repo>/<image name>:<image tag>

    Found this fix for build failure with copying too many files in a row – https://stackoverflow.com/questions/51115856/docker-failed-to-export-image-failed-to-create-image-failed-to-get-layer

    DOCKER_BUILDKIT=1 docker build --tag app:test 

    –used build.sh provided and then these:

    docker tag /data/portal:latest m1dev.azurecr.io/path/portal:version.R21.0.10
    docker push m1dev.azurecr.io/path/portal:version.R21.0.10

    https://docs.docker.com/engine/reference/commandline

    docker system prune  --all

    Pull from another repo-

    #put your password in a file and then run the login command, reading the file

    nano ~/my_password.txt
    cat ~/my_password.txt | sudo docker login -u TIdev1 --password-stdin TIdev1.azurecr.io

    #the list of images to pull from another repo-

    sudo docker pull TIdev1.azurecr.io/path/analytics/api -a
    sudo docker pull TIdev1.azurecr.io/path/analytics/bootstrap -a
    sudo docker pull TIdev1.azurecr.io/path/analytics/web -a
    sudo docker pull TIdev1.azurecr.io/path/data/mysql-client -a