Scheijgrond.com

Ik Google mijzelf

Update Januari 2024

Just do it

Blogposts schrijven moet je gewoon doen! Zelfs als er heel lang tussen zit. Maar misschien moet ik het ook niet moeilijker maken dan het is, gewoon opschrijven welke fouten ik heb gemaakt en met name wat ik daar van geleerd heb.

Kubernetes

Deze maand veel gedaan met Kubernetes en daar meer handigheid in gekregen.

K9S

Een tool die heel handig is om Kubernetes (K8s) te beheren is K9s. https://k9scli.io/ Indien je vanaf je lokale omgeving met KubeCTL je K8s kan beheren kan je er ook bij met K9s en dan krijg je een terminal achtig dashboard op je K8s omgeving wat heel bruikbaar is. In je config file in de .kube folder kan je meerdere K8s omgevingen kwijt.

Hieronder een voorbeeld waarbij de cluster dus de server aangeeft en de users... duh... Bij context is de combinatie en kan je ook de current context van kubectl opgeven. K9s kan je opstarten met een willekeurige config file, dus ook 1 per omgeving. In k9s is het ook mogelijk om de context te wisselen.

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: {LONG CERTIFICATE/TOKEN}
    server: Server-location
  name: acceptance-environment
- cluster:
    certificate-authority-data: {OTHER TOKEN}
    server: https://otherserver
  name: test-environment
contexts:
- context:
    cluster: acceptance-environment
    user: acc-admin
  name: acc-admin@acceptance-environment
- context:
    cluster: test-environment
    user: test-admin
  name: test-admin@test-environment
#This is the context used for kubectl and k9s
current-context: test-admin@test-environment
kind: Config
preferences: {}
#these can be retrieved from the server config or the secrets of the service accounts.
users:
- name: acc-admin
  user:
    client-certificate-data: {CLIENT TOKEN}
    client-key-data: {Another token}
- name: test-admin
  user:
    client-certificate-data: {CLIENT TOKEN}
    client-key-data: {Another token}

Problemen met Azure en SQLLite

Een SQLLite database kan niet draaien op een Azure File share. Hierdoor was het bijvoorbeeld niet mogelijk om Grafana met persistent storage te draaien. Mogelijk gaat het beter met een Premium account, maar bij het starten van Grafana bleef een melding komen Database locked

zie ook:

Deploying Grafana on Azure's Web Apps for Containers (rishabkumar.com) https://blog.rishabkumar.com/grafana-on-azure-web-app-containers#heading-initiate-an-empty-sqlite-database

En Grafana and InfluxDB on Azure Container Instances | A bit of everything (r3dlin3.github.io) https://blog.rishabkumar.com/grafana-on-azure-web-app-containers#heading-initiate-an-empty-sqlite-database

Bij gebruik helm charts foutmelding multiple release secrets.

Dan was er een helm chart niet goed verwijderd of deployed. Verwijderen van de helm release secrets kan dit probleem oplossen.

RabbitMQ loaddefinitions in een helm chart

De values.secrets worden dan weer geinjecteerd in de buildpipeline. Op deze manier wordt er een extra secret aangemaakt met de configuratie file.

extraSecrets:
  load-definition:
    load_definition.json: |
      {
        "users": [
          {
            "name": "user 1",
            "password": "{{ .Values.secrets.user1 }}",
            "tags": "administrator,management"
          },
          {
            "name": "user 2",
            "password": "{{ .Values.secrets.user2 }}",
            "tags": "`someothertag`"
          }
        ],
        "vhosts": [
          {
            "name": "/"
          }
        ],
        "permissions": [
          {
            "user":"user 1",
            "vhost":"/",
            "configure":".*",
            "read":".*",
            "write":".*"
          },
          {
            "user":"user 2",
            "vhost":"/",
            "configure":".*",
            "read":".*",
            "write":".*"
          }
        ]
      }

loadDefinition:
  enabled: true
  existingSecret: load-definition

Azure en Docker containers

Voor het lokaal runnen van een docker container die wel gebruik moet maken van Azure resources waarbij de azure resources alleen benaderbaar zijn als managed identity is een lastig verhaal. Om dit te kunnen doen moet je een speciale Microsoft container gebruiken om lokaal tokens aan te maken en die tokens dan weer te mounten voor de containers die gebruik moeten maken van de managed identity. De oplossing staat hier uitgebreid beschreven: https://endjin.com/blog/2022/09/using-azcli-authentication-within-local-containers

De strekking is als volgt. 1. Log een keer in met een speciale container, een volume wat wijst naar een lokale folder en de juiste credentials. 1. Gebruik de lokale folder als tokens voor de container welke je onder een azure account wil laten draaien. 1. Voeg aan die container een extra layer/stage toe die je dan expliciet start welke de login bevat.

Aanmaken tokens

#goto the home folder
cd $HOME
#Create a folder to hold the tokens
md .azure-for-docker
cd .azure-for-docker
#pull the container with the default azure-cli
docker pull mcr.microsoft.com/azure-cli
#Run the container and providing the current folder (PWD) as a volume for /root/.azure in the container
docker run -it -v "$($PWD):/root/.azure" mcr.microsoft.com/azure-cli az login
#This last step will provide a code and a link for device login. Go to the link, enter the code and then authenticate yourself.
#after the authentication the container will close again.

Aanpassen container welke de tokens moet gaan gebruiken.

dockerfile

#Adjust the docker file of the service that needs to use the tokens

```docker
FROM base AS devbuild
RUN apt-get update && apt-get -y install curl
RUN curl -L https://aka.ms/InstallAzureCliDeb | bash 

ENTRYPOINT ["dotnet", "{prodject}.dll"]

Docker compose

version: '3'
services:
  name-of-the-service-using-azure-resources:
    image: '{azure container registry name}.azurecr.io/{container image name}:{lasttag}-devbuild' #Add the devbuild tag to identify the special version
    ports:
    - "80:80"
    - "81:81"
    volumes:
    # This is the important bit that holds the tokens
      - "~/.azure-for-docker:/root/.azure"
    environment:
      - "ASPNETCORE_ENVIRONMENT=Dev"
      - "AZURE_CLIENT_ID={clientid of the service}"
      #Example of an azure resource you want access to.
      - "VaultUri=https://{some keyvault you want access to}.vault.azure.net/" 

Run docker compose -f "docker-compose.yaml" up -d --build

Random dingen

  • Het bash commando sed can gebruikt worden om in files een search en replace te doen. (bijvoorbeeld bruikbaar voor config files). De notatie wijze is wat bijzonder, de s en g zijn voor het begin en einde en de pipe characters er tussen geven het start en einde van de search en replace aan.
echo "Replacing env constants in JS"
for file in $ROOT_DIR/assets/index-*.js* $ROOT_DIR/index.html;
do
  echo "Processing $file ...";

  sed -i 's|VITE_APP_NAME|'${VITE_APP_NAME}'|g' $file 

done
  • het verhuizen van mijn domein van YourHosting naar Junda is soepel gegaan. Top hoe ze dat gedaan hebben. Nu alleen zelf even de deployment van mijn site stroomlijnen, want ik blog zo vaak :-D