W związku z dużym zainteresowaniem tematem budowania klastrów kubernetes i DevOps, związanym z tym wpisem na moim blogu Tworzenie klastra kubernetes narzędziem kind – k8s w 2 minuty na Linux postanowiłem zaprezentować gotowe receptury i objaśnienia, jak postawić bloga WordPress na lokalnym klastrze kubernetes, przy pomocy narzędzia kind w Linux z terminala. To jest banalnie proste!
Najpierw musisz wykonać komendy z w/w wpisu z tego bloga, po czym dodajesz dodatkowe poniższe komendy, w celu postawienia systemu blogowania WordPress na localhost w Linux z narzędziem kind:
kubectl create namespace wordpress
cat <<EOF | kubectl apply -n wordpress -f -
apiVersion: v1
kind: Secret
metadata:
name: mariadb-secret
type: Opaque
stringData:
root-password: rootpass
database: wordpress
user: wpuser
password: wppass
EOF
cat <<EOF | kubectl apply -n wordpress -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mariadb-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
EOF
cat <<EOF | kubectl apply -n wordpress -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: mariadb
spec:
selector:
matchLabels:
app: mariadb
template:
metadata:
labels:
app: mariadb
spec:
containers:
- name: mariadb
image: mariadb:11
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mariadb-secret
key: root-password
- name: MYSQL_DATABASE
valueFrom:
secretKeyRef:
name: mariadb-secret
key: database
- name: MYSQL_USER
valueFrom:
secretKeyRef:
name: mariadb-secret
key: user
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: mariadb-secret
key: password
ports:
- containerPort: 3306
volumeMounts:
- name: data
mountPath: /var/lib/mysql
volumes:
- name: data
persistentVolumeClaim:
claimName: mariadb-pvc
EOF
kubectl expose deployment mariadb -n wordpress --port=3306
cat <<EOF | kubectl apply -n wordpress -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
spec:
selector:
matchLabels:
app: wordpress
template:
metadata:
labels:
app: wordpress
spec:
containers:
- name: wordpress
image: wordpress:6-apache
env:
- name: WORDPRESS_DB_HOST
value: mariadb
- name: WORDPRESS_DB_USER
valueFrom:
secretKeyRef:
name: mariadb-secret
key: user
- name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: mariadb-secret
key: password
- name: WORDPRESS_DB_NAME
valueFrom:
secretKeyRef:
name: mariadb-secret
key: database
ports:
- containerPort: 80
EOF
kubectl expose deployment wordpress -n wordpress --port=80
cat <<EOF | kubectl apply -n wordpress -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: wordpress
spec:
ingressClassName: nginx
rules:
- host: wordpress.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: wordpress
port:
number: 80
EOF
kubectl port-forward -n ingress-nginx svc/ingress-nginx-controller 8080:80
Dodaj do pliku hostów roboczą domenę wordpress.local
~$ cat /etc/hosts | head -n 1
127.0.0.1 localhost echo.local wordpress.local
Otwórz przeglądarkę i zacznij cieszyć się WordPresem na klastrze kubernetes 🙂



A TERAZ OPISZMY CO SIĘ ZDARZYŁO – KROK PO KROKU
WordPress na Kubernetes (kind + NGINX Ingress) – pełny tutorial krok po kroku
W tym wpisie rozszerzamy wcześniejszy setup Kubernetes na kind i zamiast prostego http-echo wdrażamy pełny WordPress + baza danych MariaDB, dostępny przez NGINX Ingress Controller.
1. Tworzenie klastra kind
kind create cluster
2. Weryfikacja klastra
kubectl cluster-info --context kind-kind
kubectl get nodes -o wide
kubectl get pods -A
3. Instalacja NGINX Ingress Controller
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.11.2/deploy/static/provider/kind/deploy.yaml
⏳ 4. Sprawdzenie instalacji ingress
kubectl get pods -n ingress-nginx -w
kubectl get svc -n ingress-nginx
5. (opcjonalnie) fix dla kind node
Jeśli controller nie startuje:
kubectl label node kind-control-plane ingress-ready=true
🗄️ 6. Namespace dla WordPress
kubectl create namespace wordpress
7. Baza danych MariaDB
cat <<EOF | kubectl apply -n wordpress -f -
apiVersion: v1
kind: Secret
metadata:
name: mariadb-secret
type: Opaque
stringData:
root-password: rootpass
database: wordpress
user: wpuser
password: wppass
EOF
cat <<EOF | kubectl apply -n wordpress -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mariadb-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
EOF
cat <<EOF | kubectl apply -n wordpress -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: mariadb
spec:
selector:
matchLabels:
app: mariadb
template:
metadata:
labels:
app: mariadb
spec:
containers:
- name: mariadb
image: mariadb:11
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mariadb-secret
key: root-password
- name: MYSQL_DATABASE
valueFrom:
secretKeyRef:
name: mariadb-secret
key: database
- name: MYSQL_USER
valueFrom:
secretKeyRef:
name: mariadb-secret
key: user
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: mariadb-secret
key: password
ports:
- containerPort: 3306
volumeMounts:
- name: data
mountPath: /var/lib/mysql
volumes:
- name: data
persistentVolumeClaim:
claimName: mariadb-pvc
EOF
kubectl expose deployment mariadb -n wordpress --port=3306
8. WordPress Deployment
cat <<EOF | kubectl apply -n wordpress -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
spec:
selector:
matchLabels:
app: wordpress
template:
metadata:
labels:
app: wordpress
spec:
containers:
- name: wordpress
image: wordpress:6-apache
env:
- name: WORDPRESS_DB_HOST
value: mariadb
- name: WORDPRESS_DB_USER
valueFrom:
secretKeyRef:
name: mariadb-secret
key: user
- name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: mariadb-secret
key: password
- name: WORDPRESS_DB_NAME
valueFrom:
secretKeyRef:
name: mariadb-secret
key: database
ports:
- containerPort: 80
EOF
kubectl expose deployment wordpress -n wordpress --port=80
9. Ingress dla WordPress
cat <<EOF | kubectl apply -n wordpress -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: wordpress
spec:
ingressClassName: nginx
rules:
- host: wordpress.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: wordpress
port:
number: 80
EOF
🔌 10. Dostęp do klastra (kind)
kubectl port-forward -n ingress-nginx svc/ingress-nginx-controller 8080:80
11. Test WordPress
Dodaj do /etc/hosts:
127.0.0.1 wordpress.local
lub test bez DNS:
curl -H "Host: wordpress.local" http://localhost:8080
12. Sprawdzenie wszystkiego
kubectl get pods -n wordpress
kubectl get svc -n wordpress
kubectl get ingress -n wordpress
13. Czyszczenie środowiska
kind delete cluster
14. Jeśli chcesz dostać się do bazy MariaDB powiązanej z WordPress na klastrze kubernetesa, musisz zrobić tak!
W oknie jednego terminala Linux przekierowujemy port do bazy MariaDB z klastra k8s do localhost
~$ kubectl port-forward -n wordpress svc/mariadb 3306:3306
Forwarding from 127.0.0.1:3306 -> 3306
Forwarding from [::1]:3306 -> 3306
Handling connection for 3306
W innym oknie terminala łączymy się lokalnym klientem mysql zainstalowanym na naszej maszynie z bazą MariaDB na klastrze k8s
~$ mysql -h 127.0.0.1 -P 3306 -u wpuser -pwppass wordpress
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| wordpress |
+--------------------+
2 rows in set (0,00 sec)
mysql> SHOW TABLES;
+-----------------------+
| Tables_in_wordpress |
+-----------------------+
| wp_commentmeta |
| wp_comments |
| wp_links |
| wp_options |
| wp_postmeta |
| wp_posts |
| wp_term_relationships |
| wp_term_taxonomy |
| wp_termmeta |
| wp_terms |
| wp_usermeta |
| wp_users |
+-----------------------+
12 rows in set (0,00 sec)
mysql> SELECT COUNT(*) FROM wp_posts;
+----------+
| COUNT(*) |
+----------+
| 8 |
+----------+
1 row in set (0,01 sec)
Podsumowanie
W tym tutorialu:
- wystawiliśmy go przez Ingress
- postawiliśmy Kubernetes na kind
- zainstalowaliśmy NGINX Ingress Controller
- dodaliśmy storage (PVC)
- uruchomiliśmy MariaDB
- wdrożyliśmy WordPress