Octoprint via Helm and Kubernetes

Hits: 55

This repository contains Helm chart configurations for deploying OctoPrint project. TheΒ setup.shΒ script allows you to easily configure and deploy the chart.

Direct Repo address for those with Kubernetes and Helm knowledge: https://github.com/kzorluoglu/octoprint-helm

Prerequisites

– Helm v3.x
– Kubernetes cluster
– Bash shell

Usage

Clone the Repository

git clone https://github.com/yourusername/yourrepository.git
cd yourrepository

Run the Setup Script

First, make the script executable:

chmod +x setup.sh

Then, run the script:

./setup.sh

The script will prompt you for the following information:

  • hostname: The hostname for your application.
  • dataPath: The path where data will be stored.
  • configPath: The path where the configuration file will be stored.
  • projectname: The name of the Helm project.

These values will be used to populate the config.yaml file, which will be used for the Helm installation.

Helm Install

The script will automatically run helm install with the provided project name and config.yaml file.

This will deploy your Helm chart with the configurations you’ve specified.

Troubleshooting

If you encounter any issues, please check the config.yaml file to ensure all values are correctly set. You can manually edit this file and rerun helm upgrade if needed.

kubectl autocompletion on windows & git bash

Hits: 1105

Write bash completion code to a file

kubectl completion bash > ~/.kube/completion.bash.inc

and source it from .bash_profile

printf "
# Kubectl shell completion
source '$HOME/.kube/completion.bash.inc'
" >> $HOME/.bash_profile

load the kubectl completion for bash in to current shell

source $HOME/.bash_profile

How to develop PHP applications on Local Kubernetes with Helm

Hits: 442

Dont Worry! It is Very Easy.. πŸ™‚

Install the Helm CLI and k3s(/or minikube) as kubernetes before the begin.

  1. Create Project Tree with empty File Content like so:
.
β”œβ”€β”€ Chart.yaml
β”œβ”€β”€ project
β”‚   └── index.php
β”œβ”€β”€ templates
β”‚   β”œβ”€β”€ deployment.yaml
β”‚   β”œβ”€β”€ ingress.yaml
β”‚   β”œβ”€β”€ pvc.yaml
β”‚   β”œβ”€β”€ pv.yaml
β”‚   └── service.yaml
└── values.yaml

now let’s fill in the files.

Read more: How to develop PHP applications on Local Kubernetes with Helm

Chart.yaml

apiVersion: v2
name: myfirstlocalphpwithkubernetes
description: A Helm chart for local PHP Development on local Kubernetes

# A chart can be either an 'application' or a 'library' chart.
type: application

# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
version: 0.1.0
# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. 
appVersion: "1.16.0"

project/index.php

<?php

echo "My First local PHP with Kubernetes via Helm";

templates/deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}-deployment
  labels:
        app: {{ .Release.Name }}-php
spec:
  selector:
    matchLabels:
      app: {{ .Release.Name }}-php
  template:
    metadata:
      labels:
        app: {{ .Release.Name }}-php
    spec:
      containers:
      - image: {{ .Values.image.name }}:{{ .Values.image.tag }}
        name: {{ .Release.Name }}-php
        imagePullPolicy: Always
        ports:
          - containerPort: 80
        volumeMounts:
          - name: {{ .Release.Name }}-php-storage
            mountPath: {{ .Values.mountPath }}
      volumes:
        - name: {{ .Release.Name }}-php-storage
          persistentVolumeClaim:
            claimName: {{ .Release.Name }}-pvc-php

templates/ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: {{ .Release.Name }}-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: {{ .Values.hostname }}
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: {{ .Release.Name }}-php-service
            port:
              number: 80

template/pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name:  pv-{{ .Release.Name }}-php
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: {{ .Values.hostPath }}

template/pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
    name: {{ .Release.Name }}-pvc-php
spec:
    storageClassName: manual
    accessModes:
        - ReadWriteOnce
    resources:
        requests:
            storage: 1Gi

template/service.yaml

apiVersion: v1
kind: Service
metadata:
  name: {{ .Release.Name }}-php-service
spec:
  type: LoadBalancer
  selector:
    app: {{ .Release.Name }}-php
  ports:
      # By default and for convenience, the `targetPort` is set to the same value as the `port` field.
    - port: 80
      targetPort: 80
      # Optional field

values.yaml

hostname: 'simple-php.local'
mountPath: 'var/www/html/'
hostPath: '/home/projects/myfirstlocalphpwithkubernetes/project'
image:
  name: php
  tag: 8.1-apache

and let’s install with helm

d8dev@d8devs:~/projects/myfirstlocalphpwithkubernetes$ helm install -f values.yaml myfirstlocalphp .

Add hostname (simple-php.local) a.k.a domain in your /etc/hosts with any text editor.

My /etc/hosts looking so;

d8dev@d8devs:~/projects/myfirstlocalphpwithkubernetes$ cat /etc/hosts
127.0.0.1       localhost
127.0.1.1       simple-php.local
......
.....

And check the domain in your browser with slash ( http://simple-php.local/ )

Enjoy!

Cert-Manager – Kubernetes NGINX Ingress with Cert-Manager

Hits: 299

Install

Cert-manager is easy to install with Helm Package Manager. The first step is add Jetstack repository in our repository and becoming the package info with update

helm repo add jetstack https://charts.jetstack.io
helm repo update

Now we can install Cert-Manager with CRDs into our cluster:

helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --set installCRDs=true

Cert-manager have also a kubectl plugin to easily manage configs and resources

OS=$(go env GOOS); ARCH=$(go env GOARCH); curl -sSL -o kubectl-cert-manager.tar.gz https://github.com/cert-manager/cert-manager/releases/download/v1.7.2/kubectl-cert_manager-$OS-$ARCH.tar.gz
tar xzf kubectl-cert-manager.tar.gz
sudo mv kubectl-cert_manager /usr/local/bin

Configure for The Let’s Encrypt Certificate

Continue reading “Cert-Manager – Kubernetes NGINX Ingress with Cert-Manager”