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 HelmChart.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!
Views: 37