Hits: 442
Dont Worry! It is Very Easy.. π
Install the Helm CLI and k3s(/or minikube) as kubernetes before the begin.
- 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!