应用介绍
部署考虑
镜像下载
docker pull mysql:5.7.34 Docker pull wordpress:4.8-apache
mysql的部署
service文件配置
apiVersionv1 kindService metadata namemysql-sts labels appmysql-sts spec portsport3306 selector appmysql-sts clusterIPNone
Secret文件配置
apiVersionv1 kindSecret metadata namemysecret typeOpaque data passwordMTIzNDU2 usernamecm9vdA== #user/pass=root/123456
StatefulSet 文件配置
apiVersionapps/v1 kindStatefulSet metadata namemysql-sts spec serviceName"mysql-sts" replicas1 volumeClaimTemplatesmetadata namemysql-local-storage annotations volume.beta.kubernetes.io/storage-class"nfs-csi" spec accessModes"ReadWriteOnce" resources requests storage25Gi selector matchLabels appmysql-sts template metadata labels appmysql-sts spec nodeSelector wordpressmysql containersimagemysql5.7.34 namemysql envnameMYSQL_ROOT_PASSWORD valueFrom secretKeyRef namemysecret keypassword #- name: SECRET_USERNAME# valueFrom:# secretKeyRef:# name: mysecret# key: username portscontainerPort3306 namemysql volumeMountsnamemysql-local-storage readOnlyfalse mountPath/var/lib/mysql initContainersnameinit-wordpress-mysql imagebusybox imagePullPolicyIfNotPresent command'sh''-c''rm -rf /data/*''until nslookup mysql-sts; do echo waiting for mysql-sts; sleep 2; done;' volumeMountsnamemysql-local-storage readOnlyfalse mountPath/data
配置说明:
volumeClaimTemplatesmetadata namemysql-local-storage annotations volume.beta.kubernetes.io/storage-class"nfs-csi" spec accessModes"ReadWriteOnce" resources requests storage25Gi
volumeClaimTemplates:PVC 的配置模块,存储类型是nfs, 驱动插件为 CSI
accessModes: ReadWriteOnce 模式
spec nodeSelector wordpressmysql containersimagemysql5.7.34 namemysql envnameMYSQL_ROOT_PASSWORD valueFrom secretKeyRef namemysecret keypassword
* spec.nodeSelector: 节点选择器。 作用:当前pod会部署到,含有wordpress=mysql标签的node。
如果让pod部署到指定的node, 可以使用nodeSelector指定标签。前提需要在node 节点上创建label。命令: kubectl label node node-name label-key=label-value。
* spec.env容器中使用的环境变量配置, 由Secret文件配置
完整配置
mysql-sts.yaml
apiVersionv1 kindService metadata namemysql-sts labels appmysql-sts spec portsport3306 selector appmysql-sts clusterIPNone ---apiVersionv1 kindSecret metadata namemysecret typeOpaque data passwordMTIzNDU2 usernamecm9vdA== #user/pass=root/123456---apiVersionapps/v1 kindStatefulSet metadata namemysql-sts spec serviceName"mysql-sts" replicas1 volumeClaimTemplatesmetadata namemysql-local-storage annotations volume.beta.kubernetes.io/storage-class"nfs-csi" spec accessModes"ReadWriteOnce" resources requests storage25Gi selector matchLabels appmysql-sts template metadata labels appmysql-sts spec nodeSelector wordpressmysql containersimagemysql5.7.34 namemysql envnameMYSQL_ROOT_PASSWORD valueFrom secretKeyRef namemysecret keypassword #- name: SECRET_USERNAME# valueFrom:# secretKeyRef:# name: mysecret# key: username portscontainerPort3306 namemysql volumeMountsnamemysql-local-storage readOnlyfalse mountPath/var/lib/mysql initContainersnameinit-wordpress-mysql imagebusybox imagePullPolicyIfNotPresent command'sh''-c''rm -rf /data/*''until nslookup mysql-sts; do echo waiting for mysql-sts; sleep 2; done;' volumeMountsnamemysql-local-storage readOnlyfalse mountPath/data
安装mysql
kubectl create ns wp # 创建命名空间kubectl apply -f mysql-sts.yaml -n wp # 部署mysql
部署wordpress
PVC配置
apiVersionv1 kindPersistentVolumeClaim metadata namepvc-wp spec storageClassNamenfs-csi # 存储类型为nfs, 驱动插件为CSI accessModesReadWriteMany # 访问模式:支持多个service 读写 resources requests storage12G
Service 配置
apiVersionv1 kindService metadata namewordpress labels appwordpress spec portsport80 targetPort80 nodePort30180 selector appwordpress typeNodePort # 类型为NodePort
ConfigMap 配置定义
apiVersionv1 data db-hostmysql-sts # 使用mysql的serviceName作为hostkindConfigMap metadata namemycm
Deployment 配置定义
apiVersionapps/v1 kindDeployment metadata namewordpress labels appwordpress spec selector matchLabels appwordpress template metadata labels appwordpress spec nodeSelector wordpressmysql containersimagewordpress4.8-apache namewordpress imagePullPolicyIfNotPresent envnameWORDPRESS_DB_HOST valueFrom configMapKeyRef namemycm keydb-host # 读取configmap中定义的hostnameWORDPRESS_DB_USER valueFrom secretKeyRef namemysecret # 使用mysecret配置,参考 mysql-sts.yaml 中定义的 Secret keyusername nameWORDPRESS_DB_PASSWORD valueFrom secretKeyRef namemysecret # 使用mysecret配置,参考 mysql-sts.yaml 中定义的 Secret keypassword portscontainerPort80 namewordpress resources requests cpu0.5 volumeMountsnamewordpress-local-storage readOnlyfalse mountPath/var/www/html # 容器内部的卷path volumesnamewordpress-local-storage persistentVolumeClaim# 使用的PVC 为 pvc-wp claimNamepvc-wp
完整的配置
wp-deploy.yaml
apiVersionv1 kindPersistentVolumeClaim metadata namepvc-wp spec storageClassNamenfs-csi accessModesReadWriteMany resources requests storage12G ---apiVersionv1 kindService metadata namewordpress labels appwordpress spec portsport80 targetPort80 nodePort30180 selector appwordpress typeNodePort ---apiVersionv1 data db-hostmysql-sts # 使用mysql的serviceName作为hostkindConfigMap metadata namemycm ---apiVersionapps/v1 kindDeployment metadata namewordpress labels appwordpress spec selector matchLabels appwordpress template metadata labels appwordpress spec nodeSelector wordpressmysql containersimagewordpress4.8-apache namewordpress imagePullPolicyIfNotPresent envnameWORDPRESS_DB_HOST valueFrom configMapKeyRef namemycm keydb-host nameWORDPRESS_DB_USER valueFrom secretKeyRef namemysecret # 使用mysecret配置,参考 mysql-sts.yaml 中定义的 Secret keyusername nameWORDPRESS_DB_PASSWORD valueFrom secretKeyRef namemysecret # # 使用mysecret配置,参考 mysql-sts.yaml 中定义的 Secret keypassword portscontainerPort80 namewordpress resources requests cpu0.5 volumeMountsnamewordpress-local-storage readOnlyfalse mountPath/var/www/html volumesnamewordpress-local-storage persistentVolumeClaim claimNamepvc-wp
安装 wordpress
kubectl apply -f wp-deploy.yaml -n wp
部署ingress
wp-ingress.yaml 相关配置
apiVersionnetworking.k8s.io/v1 kindIngress metadata nameing-wordpress spec ingressClassNamenginx ruleshostwp.tuling.com http pathspathTypePrefix path"/" backend service namewordpress port number80
注意:
spec.ingressClassName: 需要指定的 部署ingress-nginx 时,创建的ingressClass。
可以通过命令 kubectl get ingressclass , 进行查看。
╰─# kubectl get ingressclass -n ingress-nginx NAME CONTROLLER PARAMETERS AGE nginx k8s.io/ingress-nginx <none> 4d22h ╭─root@k201 ~/k8s/hpa ╰─#
安装 wp-ingress.yaml
kubectl apply -f wp-ingress.yaml -n wp
查看ingress 和 ingress-nginx-controller 是否绑定成功
╰─# kubectl get ingress -n wp NAME CLASS HOSTS ADDRESS PORTS AGE ing-wordpress nginx wp.tuling.com 10.20.143.255 80 102m
查看到 CLASS 和 ADDRESS 绑定了值,说明已创建成功。
使用 `wp.tuling.com` 访问
访问前需要在宿主机上 配置 ip 和 host之间的映射。
如图所示:
访问地址: `http://wp.tuling.com:30180/`
这里的 端口号 `30180` ingress-nginx-controller 的 NodePort 的端口号
通过一下命令查看:
╰─# kubectl get svc -n ingress-nginx NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ingress-nginx-controller NodePort 10.20.143.255 <none> 80:32091/TCP,443:32029/TCP 2d20h ingress-nginx-controller-admission ClusterIP 10.20.129.109 <none> 443/TCP 2d20h ╭─root@k201 ~/k8s/k8s-ingress ╰─#



