m1 搭建minikube和wordpress
背景
k8s作为docker进阶,如何让学生了解k8s,并动手实操,又不至于太复杂呢?于是,设计如下实验:
1. 安装minikube
2. 安装Dashboard
3. 利用minikube搭建Wordpress个人博客系统
一种可行的实验路径
由于我的电脑是m1芯片,在做实验时遇到各种坑。所以在作出各种尝试(PD+centos7,VM+centos7等等)后,总结了以下在m1电脑(ventura13.3操作系统)上搭建minikube的可行实验路径,即macos ventura + docker desktop + minikube + wordpress。大致操作步骤如下:
(1)在macos上直接安装 docker desktop;
(2)然后安装并启动minikube;
(3)启动Dashboard
(4)然后通过yaml配置文件安装wordpress和mysql。
具体步骤
步骤一:安装docker desktop
参考 https://docs.docker.com/desktop/install/mac-install/ ,选择其中最简单的 Install interactively 安装方法。
可选步骤:
替换国内源。在设置里面选择到Docker Engine,在里面添加源,如下图所示。

步骤二:安装minikube
步骤2、3参考https://minikube.sigs.k8s.io/docs/start/ 。
因为采用的是直接在macos(m1芯片)中安装minikube,所以我们安装时选择arm64,而非x86,如图所示。提醒,安装时可采用curl 方式下载二进制文件,并安装。

步骤三:启动minikube
该步骤非常耗时较长,主要是下载镜像需要花时间。我的电脑可以上外网,所以用的是不指定镜像仓库的命令。有些教程建议加上指定国内镜像,但是我在windows电脑+Vm+
centos7.6实测发现,启动卡住了,各位可以再去摸索一下。启动命令如下:
minikube start --driver=docker
建议指定docker驱动,即加上 --driver=docker。
在下载镜像的时候我试了加上国内源和不加两种方式,发现下载镜像的速度都很慢。晚上就放在那儿下载,早上显示“Done”。
步骤四:启动Dashboard
作为入门,仪表盘有着不可替代的作用。启动Dashboard用如下简单命令即可。该命令为前台运行,运行时不要关闭终端窗口。当然也可选择后台运行,在此不再赘述。
minikube dashboard
步骤五: 配置yaml文件
参考 https://kubernetes.io/zh-cn/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/ 和 https://amperecomputing.com/tutorials/deploy-wordpress-and-mysql 。该步骤融合了这两个教程,主要因为第一个教程的yaml文件在运行时出现mysql5.6包找不到,而第二个教程中mysql的密码有些问题导致数据库连接不上。
5.1 创建 kustomization.yaml
在当前目录创建 kustomization.yaml 文件,内容如下:
(注意:请替换其中的YOUR_PASSWORD!!!)
secretGenerator:
- name: mysql-pass
literals:
- password=123456
resources:
- mysql-deployment.yaml
- wordpress-deployment.yaml
5.2 创建 mysql-deployment.yaml
该文件和 kustomization.yaml 在同一级,内容如下:
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv-volume
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 20Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/tmp/mysql/data"
persistentVolumeReclaimPolicy: Recycle
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pv-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
---
apiVersion: v1
kind: Service
metadata:
name: wordpress-mysql
labels:
app: wordpress-mysql
spec:
ports:
- port: 3306
selector:
app: wordpress-mysql
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress-mysql
labels:
app: wordpress-mysql
spec:
selector:
matchLabels:
app: wordpress-mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress-mysql
spec:
containers:
- image: mysql:oracle
name: mysql
env:
- name: MYSQL_DATABASE
value: wordpress
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass
key: password
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pv-claim
5.3 创建 wordpress-deployment.yaml
和上述文件在同一级,内容如下:
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: wp-pv-volume
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 20Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/tmp/wp/data"
persistentVolumeReclaimPolicy: Recycle
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wp-pv-claim
labels:
app: wordpress
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
---
apiVersion: v1
kind: Service
metadata:
name: wordpress
labels:
app: wordpress
tier: frontend
spec:
ports:
- port: 80
selector:
app: wordpress
tier: frontend
type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
labels:
app: wordpress
tier: frontend
spec:
replicas: 1
selector:
matchLabels:
app: wordpress
tier: frontend
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress
tier: frontend
spec:
containers:
- image: wordpress:6.0.1-php7.4
name: wordpress
env:
- name: WORDPRESS_DB_HOST
value: wordpress-mysql
- name: WORDPRESS_DB_NAME
value: wordpress
- name: WORDPRESS_DB_USER
value: root
- name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass
key: password
ports:
- containerPort: 80
name: wordpress
volumeMounts:
- name: wordpress-persistent-storage
mountPath: /var/www/html
volumes:
- name: wordpress-persistent-storage
persistentVolumeClaim:
claimName: wp-pv-claim
5.4 运行创建命令并验证
创建命令
kubectl apply -k ./
验证密码是否生成(1个密钥)
kubectl get secrets
验证pv是否创建(2个pv)
kubectl get pvc
验证pod是否正常(2个running)
kubectl get pods
验证 Service 是否正在运行
kubectl get services wordpress
响应为(因为Minikube只能通过NodePort公开服务。EXTERNAL-IP始终处于pending状态。)
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE wordpress LoadBalancer 10.0.0.89 <pending> 80:32406/TCP 4m
查看服务ip地址(不要关闭该终端窗口)
minikube service wordpress --url
响应为如下形式则正常,最后通过浏览器访问即可。
http://1.2.3.4:32406
总结
本文通过直接在macos(m1芯片,ventura)上安装docker desktop,从而绕过虚拟机和centos7等烦人的兼容问题。window电脑安装方式也可以参考上述步骤,用VM+centos7的方法去完成实验。但是该方法依然存在镜像下载慢点问题,有时间再去解决。综上,本文介绍了一种避免m1兼容问题,且又能快速上手k8s的实验案例和可行方法。

浙公网安备 33010602011771号