gpt4 book ai didi

mysql - 将 wordpress 和 mysql 数据恢复到 kubernetes 卷

转载 作者:行者123 更新时间:2023-11-29 07:32:52 26 4
gpt4 key购买 nike

我目前正在同一集群中的 kubernetes pod 上运行 mysql、wordpress 和我的自定义 node.js + express 应用程序。一切都运行良好,但我的问题是如果我必须重新运行部署、服务和持久卷,所有数据都将被重置。

我已经对 wordpress 进行了相当广泛的配置,并且想保存所有数据并在重新部署所有内容后再次插入。这怎么可能,还是我想错了?我使用的是 mysql:5.6 和 wordpress:4.8-apache 图像。

我还想将我的配置转移给我的其他团队成员,这样他们就不必再次配置 wordpress。

这是我的 mysql-deploy.yaml

apiVersion: v1
kind: Service
metadata:
name: wordpress-mysql
labels:
app: wordpress
spec:
ports:
- port: 3306
selector:
app: wordpress
tier: mysql
clusterIP: None
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pv-claim
labels:
app: wordpress
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
---
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: wordpress-mysql
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
tier: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress
tier: mysql
spec:
containers:
- image: mysql:5.6
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: hidden
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql

volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pv-claim

这是 wordpress-deploy.yaml

apiVersion: v1
kind: Service
metadata:
name: wordpress
labels:
app: wordpress
spec:
ports:
- port: 80
selector:
app: wordpress
tier: frontend
type: NodePort
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wp-pv-claim
labels:
app: wordpress
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
---
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: wordpress
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
tier: frontend
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress
tier: frontend
spec:
containers:
- image: wordpress:4.8-apache
name: wordpress
env:
- name: WORDPRESS_DB_HOST
value: wordpress-mysql
- name: WORDPRESS_DB_PASSWORD
value: hidden
ports:
- containerPort: 80
name: wordpress
volumeMounts:
- name: wordpress-persistent-storage
mountPath: /var/www/html
volumes:
- name: wordpress-persistent-storage
persistentVolumeClaim:
claimName: wp-pv-claim

最佳答案

How is this possible to do or am I thinking something wrong?

将配置思维从直接在基础容器实例上工作转移到配置容器图像/ list 可能会更好。你有几种方法,只是一些指示:

  • 根据您引用的图像创建自己的 Dockerfile,并在其中捆绑配置文件。如果配置或多或少是静态的并且可以使用 env vars 或不经常构建的 docker 镜像来处理,但需要 docker registry 处理才能与 k8s 一起使用,那么这是可行的方法。在这种方法中,您将添加所有更改的文件以构建 docker 上下文,然后将它们COPY 到适当的位置。

  • 创建 ConfigMap 并将它们作为需要更改的配置文件挂载到容器文件系统上。通过这种方式,您仍然可以使用直接引用的基础镜像,但更改仅限于 kubernetes list ,而不是重建 docker 镜像。在这种情况下,方法是识别容器上所有更改的文件,然后从中创建 kubernetes ConfigMaps,最后适本地挂载。我不知道你到底在改变哪些东西,但这里是你如何在 ConfigMap 中放置 nginx 配置的例子:

    kind: ConfigMap
    apiVersion: v1
    metadata:
    name: cm-nginx-example
    data:
    nginx.conf: |

    server {
    listen 80;

    ...
    # actual config here
    ...

    }

    然后像这样把它挂载到容器中合适的地方:

    ...
    containers:
    - name: nginx-example
    image: nginx
    ports:
    - containerPort: 80
    volumeMounts:
    - mountPath: /etc/nginx/conf.d
    name: nginx-conf
    volumes:
    - name: nginx-conf
    configMap:
    name: cm-nginx-example
    items:
    - key: nginx.conf
    path: nginx.conf
    ...
  • 在需要配置的地方挂载持久卷(子路径)并将配置保存在持久卷上。

就个人而言,我可能会选择 ConfigMaps,因为您可以轻松地共享/编辑那些与 k8s 部署和配置细节不会丢失,因为一些神秘的“广泛的工作”,但可以审查,调整和存储到一些代码版本控制系统版本跟踪...

关于mysql - 将 wordpress 和 mysql 数据恢复到 kubernetes 卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50375324/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com