我目前正在同一集群的kubernetes pods上运行mysql、wordpress和我的自定义node.js+express应用程序。一切都很正常,但我的问题是,如果我必须重新运行部署、服务和持久卷,所有数据都将被重置。
我已经对wordpress进行了广泛的配置,希望保存所有的数据,并在重新部署之后再次插入。这怎么可能呢?还是我在想什么不对劲的事?我用的是mysql:5.6 and wordpress:4.8-apache images.
我还想将我的配置传递给我的其他团队成员,这样他们就不必再次配置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
1条答案
按热度按时间7lrncoxx1#
这怎么可能呢?还是我在想什么不对劲的事?
最好将配置思维从直接在基本容器示例上工作转变为配置容器映像/清单。这里有几种方法,只是一些指针:
基于引用的映像创建自己的dockerfile,并将配置文件捆绑在其中。如果配置或多或少是静态的,并且可以使用env vars或docker映像的不常见构建来处理,但需要docker注册表处理才能使用k8s,那么这种方法是可行的。在这种方法中,您将添加所有更改的文件来构建docker的上下文,然后
COPY
把他们带到适当的地方。创建configmaps并将它们作为需要更改的配置文件装载到容器文件系统上。这样,您仍然可以使用直接引用的基本图像,但更改仅限于kubernetes清单,而不是重建docker图像。这种情况下的方法是标识容器上所有更改的文件,然后从中创建kubernetes configmaps,最后适当地装载。我不知道您正在更改哪些内容,但下面是如何在configmap中放置nginx config的示例:
然后将其安装在容器中的适当位置,如下所示:
在需要配置的地方装载持久卷(子路径),并在持久卷上保留配置。
就我个人而言,我可能会选择configmaps,因为您可以轻松地共享/编辑那些与k8s部署和配置细节不会丢失一些神秘的'广泛的工作',但可以审查,调整和存储到一些代码版本控制系统的版本跟踪。。。