Kubernetes集群持久化部署实践

news2025/9/18 8:35:35

WordPress 网站持久化部署

请添加图片描述

要持久化MariaDB 可以把 Deployment 改成了 StatefulSet,修改 YAML添加“serviceName”“volumeClaimTemplates”这两个字段,定义网络标识和 NFS 动态存储卷,然后在容器部分用“volumeMounts”挂载到容器里的数据目录“/var/lib/mysql”

MariaDB

marial-cm.yml 【db配置】

apiVersion: v1
kind: ConfigMap
metadata:
  name: maria-cm

data:
  DATABASE: 'db'
  USER: 'wp'
  PASSWORD: '123'
  ROOT_PASSWORD: '123'

marial-sts.yml【db pod】

apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    app: maria-sts
  name: maria-sts

spec:
  # headless svc
  serviceName: maria-svc

  # pvc
  volumeClaimTemplates:
  - metadata:
      name: maria-100m-pvc
    spec:
      storageClassName: nfs-client
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 100Mi

  replicas: 1
  selector:
    matchLabels:
      app: maria-sts

  template:
    metadata:
      labels:
        app: maria-sts
    spec:
      containers:
      - image: mariadb:10
        name: mariadb
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 3306

        envFrom:
        - prefix: 'MARIADB_'
          configMapRef:
            name: maria-cm

        volumeMounts:
        - name: maria-100m-pvc
          mountPath: /var/lib/mysql

marial-sts-svc.yml【db service】

apiVersion: v1
kind: Service
metadata:
  labels:
    app: maria-sts
  name: maria-svc

spec:
  ports:
  - port: 3306
    protocol: TCP
    targetPort: 3306
  selector:
    app: maria-sts

执行命令

 kubectl apply -f marial-cm.yml
 kubectl apply -f marial-sts.yml
 kubectl apply -f marial-sts-svc.yml

WordPress

wp-sts-cm.yml【wp连接db配置】

apiVersion: v1
kind: ConfigMap
metadata:
  name: wp-cm

data:
  HOST: 'maria-sts-0.maria-svc'  #注意这里
  USER: 'wp'
  PASSWORD: '123'
  NAME: 'db'

wp-deploy.yml【wp pod】

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: wp-dep
  name: wp-dep

spec:
  replicas: 2
  selector:
    matchLabels:
      app: wp-dep

  template:
    metadata:
      labels:
        app: wp-dep
    spec:
      containers:
      - image: wordpress:5
        name: wordpress
        ports:
        - containerPort: 80

        envFrom:
        - prefix: 'WORDPRESS_DB_'
          configMapRef:
            name: wp-cm

wp-svc.yml【wp service】

apiVersion: v1
kind: Service
metadata:
  labels:
    app: wp-dep
  name: wp-svc

spec:
  ports:
  - name: http80
    port: 80
    protocol: TCP
    targetPort: 80
    nodePort: 30088

  selector:
    app: wp-dep
  type: NodePort

执行命令

 kubectl apply -f wp-sts-cm.yml
 kubectl apply -f wp-deploy.yml
 kubectl apply -f wp-svc.yml

在这里插入图片描述
svc端口访问测试
在这里插入图片描述

Nginx Ingress Controller

1、部署Ingress Class
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: wp-ink

spec:
  controller: nginx.org/ingress-controller

执行命令

vim wp-ingress-class.yml
kubectl apply -f wp-ingress-class.yml 
2、部署Ingress

用 kubectl create 命令生成 Ingress 的样板文件,指定域名是“wp.test”,后端 Service 是“wp-svc:80”,Ingress Class 就是刚定义的“wp-ink”:

kubectl create ing wp-ing --rule="wp.test/=wp-svc:80" --class=wp-ink $out

Ingress YAML 就是这样,注意路径类型我还是用的前缀匹配“Prefix”:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: wp-ing

spec:
  ingressClassName: wp-ink

  rules:
  - host: wp.test
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: wp-svc
            port:
              number: 80

执行命令

vim wp-ingress.yml
kubectl apply -f wp-ingress.yml 
3、部署Ingress Controller

Ingress Controller 不使用 Service

给它的 Pod 加上一个特殊字段 hostNetwork,让 Pod 能够使用宿主机的网络,相当于另一种形式的 NodePort:

wp-kic.yml

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: wp-kic-dep
  namespace: nginx-ingress
spec:
  selector:
    matchLabels:
      app: wp-kic-dep
  template:
    metadata:
      labels:
        app: wp-kic-dep
        app.kubernetes.io/name: nginx-ingress
    spec:
      serviceAccountName: nginx-ingress
      hostNetwork: true
      automountServiceAccountToken: true
      securityContext:
        seccompProfile:
          type: RuntimeDefault
      containers:
      - image: nginx/nginx-ingress:2.2-alpine
        imagePullPolicy: IfNotPresent
        name: nginx-ingress
        ports:
        - name: http
          containerPort: 80
        - name: https
          containerPort: 443
        - name: readiness-port
          containerPort: 8081
        - name: prometheus
          containerPort: 9113
        readinessProbe:
          httpGet:
            path: /nginx-ready
            port: readiness-port
          periodSeconds: 1
        resources:
          requests:
            cpu: "100m"
            memory: "128Mi"
         #limits:
         #  cpu: "1"
         #  memory: "1Gi"
        securityContext:
          allowPrivilegeEscalation: true
#          readOnlyRootFilesystem: true
          runAsUser: 101 #nginx
          runAsNonRoot: true
          capabilities:
            drop:
            - ALL
            add:
            - NET_BIND_SERVICE
        env:
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        args:
          - -nginx-configmaps=$(POD_NAMESPACE)/nginx-config
          - -ingress-class=wp-ink

执行命令

vim wp-kic.yml
kubectl apply -f wp-kic.yml

在这里插入图片描述

4、访问测试

Ingress 使用的是 HTTP 路由规则,用 IP 地址访问是无效的,所以在集群外的主机上必须能够识别我们的“wp.test”域名,也就是说要把域名“wp.test”解析到 Ingress Controller 所在的节点上。

Mac,那就修改 /etc/hosts; Windows,就修改 C:\Windows\System32\Drivers\etc\hosts,添加一条解析规则就行:


自己服务器ip  wp.test

直接用域名“wp.test”访问

在这里插入图片描述

查看nfs中的挂载数据

#在nfs sever中进入挂载目录
cd /tmp/nfs/
#查看挂载文件
ll

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1822808.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文搞懂阻塞赋值和非阻塞赋值

目录 2.非阻塞赋值举例3.阻塞赋值举例4.总结 微信公众号获取更多FPGA相关源码: # 1.阻塞赋值和非阻塞赋值的区别: (1)阻塞赋值"",必须是阻塞赋值完成后,才进行下一条语句的执行;赋值一旦完成,等号…

docker环境中配置phpstorm php xdebug调试工具

本文介绍通过docker compose的使用方式 第一步:在php镜像中安装phpxdebug扩展,比如php7.4对应的是xdebug3.1.6 第二步:设置项目中的docker-compose.yml docker-compose 增加开启xdebug的环境变量,host.docker.internal是宿主机的地址&#…

MBTI:探索你的性格类型

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

4.音视频 AAC SSAASS

目录 AAC 1.什么是ADIF和ADTS? 2.ADTS的数据结构是怎样的? SSA/ASS 1.SSA/ASS的基本结构 AAC AAC(Advanced Audio Coding,高级音频编码)是一种声音数据的文件压缩格式。AAC分为ADIF和ADTS两种文件格式。 1.什么是ADIF和ADTS&#xff…

Day01 C语言嵌入式

目录 1、嵌入式知识体系 2、计算机的组成原理 3、计算机之父 4、C语言标准 5、关键字 6、字符编码 7、字符集 1、嵌入式知识体系 备注:图片来源于网络,为嵌入式知识体系思维导图,分为软件、硬件和理论知识三个部分,仅供各位…

【LeetCode】4,寻找两个正序数组中的中位数

题目地址 B站那个官方解答视频实在看不懂,我就根据他那个代码和自己的理解写一篇文章 1. 基本思路 在只有一个有序数组的时候,中位数把数组分割成两个部分。中位数的定义:中位数,又称中点数,中值。中位数是按顺序排列…

全志摄像头屏幕预览、录制(H264)

一、录像 使用dvr_test录制视频 运行dvr_test demo出现space not enought问题,修改/etc/dvrconfig.ini文件下对应的camera节点下cur_filedir属性无效 修改以下内容解决; 录制时出现摄像头画面异常,如下 摄像头型号与打印信息匹配: 但是出现画…

整蛊软件/插件使用方法与配置步骤~

今天出一期整蛊软件的使用方法与配置步骤 很多人在使用整蛊软件的时候 想自己添加更多的玩法内容 但是还不知道如何去配置 这期给大家出一下图文教程步骤 基本上也是软件的功能介绍使用方式~ 案例可扫码查看 第一步:打开软件输入卡密登录: 卡密费用&…

最好用的邮箱管理软件推荐,邮箱管理软件哪个好?(干货篇)

在快节奏的工作与生活中,有效管理电子邮件成为提升个人与团队效率的关键。 面对海量信息流,一款好的邮箱管理软件不仅能够帮助我们高效地整理收件箱,还能确保重要邮件不会错过,同时提升通讯的便捷性和安全性。 本文将为您推荐几款…

AUTOSAR平台中的信息安全标准模块

面向MCU端的AUTOSAR CP平台加密组件——Crypto ECU中所有的软件单元都遭受到信息安全攻击的可能。AUTOSAR为保障ECU信息和数据安全,定义了CRYPTO 组件,包含 SecOC、KeyM、IdsM、Csm、CryIf 和Crypto Driver 等标准模块。CRYPTO组件提供各种加解密算法以及密钥管理功…

另辟蹊径的终端防病毒

在数字时代的浪潮中,网络安全问题愈发凸显,防病毒成为了保护信息安全的重要一环。而白名单作为一种有效的安全策略,在防病毒方面发挥着不可或缺的作用。 首先,我们需要明确白名单的概念。白名单是一种管理和安全实践,用…

掌握这招,串口通信高频收发32W数据,0丢包!

我做过挺多串口通讯类的产品,有用485通讯的pdu,有wifi/4G/蓝牙通讯类的网关... 做串口的应用,把串口外设调通只是第一步,串口只是数据传输的媒介,在此基础上,两个设备/器件要进行通信,传递更有意…

软件使用教程

昨天分享了一款专业软件,但是大家不知道怎么pj,好多小伙伴被文件夹下面的说明带跑偏了,所以今天特地发个文说一下科学使用的过程,需要软件的可以看昨天的文章! 话不多说那好小板凳,教程开始了 1、第一步&…

18. 四数之和 - 力扣

1. 题目 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复): 0 …

空间搜索geohash概述;redis的geo命令

概述 通常在一些2C业务场景中会根据用户的位置来搜索一些内容。通常提供位置搜索的都是直接通过redis/mongodb/es等中间件实现的。 但是这些中间件又是怎么实现位置搜索的呢; 查了一番资料,发现背后一个公共的算法Geohash。 搜索的时候可以根据距离对…

认识Redis 主从同步、事务和Memcached的区别

08- 什么是 Redis 主从同步? Redis 的主从同步(replication)机制,允许 Slave 从 Master 那里,通过网络传输拷贝到完整的数据备份,从而达到主从机制。 主数据库可以进行读写操作,当发生写操作的时候自动将数据同步到从…

Spring Boot:Java 应用开发高效之道

Spring Boot 是一种革命性的框架,旨在简化 Java 应用的创建和部署过程。通过自动化配置和简化项目搭建流程,Spring Boot 大大加速了开发周期,让 Java 应用开发变得更加高效和便捷。 核心优势: 快速启动和简化配置:Spr…

【C++】STL中list的使用

前言:在前面学习的 过程中我们学习了STL中的string,vector,今天我们来进一步的学习STL中的list的使用方法。 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 专栏分类:高质量C学习 👈 💯代…

设置sqlserver management的字体大小

在用sqlserver management的时候,总感觉怪怪的,然后发现是字体太小的原因。 1)设置一下字体,工具--选项: 2)环境--字体和颜色--显示其设置(环境) 3)选择微软雅黑&#xf…

【Linux】从零开始配置新的服务器的机器学习环境

终端远程登录 ssh -p [端口号] [服务器用户名][服务器IP]或者 ssh [用户名][主机地址]第二种的前提是在.ssh\config中配置了host 安装文本编辑器vim 主要用于后续的文本编辑,个人比较习惯用vim,根据自己喜好选择 更新apt sudo apt update安装文本编辑…