如何将代码/文件直接插入到Google Cloud Engine中的Kubernetes容器中,类似于使用Docker挂载主机文件/目录的方式,例如
docker run -d --name nginx -p 443:443 -v "/nginx.ssl.conf:/etc/nginx/conf.d/default.conf"
谢谢
可以使用ConfigMaps来实现该目标:
以下示例将mariadb配置文件安装到mariadb POD中:
ConfigMap
apiVersion: v1
data:
charset.cnf: |
[client]
# Default is Latin1, if you need UTF-8 set this (also in server section)
default-character-set = utf8
[mysqld]
#
# * Character sets
#
# Default is Latin1, if you need UTF-8 set all this (also in client section)
#
character-set-server = utf8
collation-server = utf8_unicode_ci
kind: ConfigMap
metadata:
name: mariadb-configmap
MariaDB部署
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: mariadb
labels:
app: mariadb
spec:
replicas: 1
template:
metadata:
labels:
app: mariadb
version: 10.1.16
spec:
containers:
- name: mariadb
image: mariadb:10.1.16
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mariadb
key: rootpassword
volumeMounts:
- name: mariadb-data
mountPath: /var/lib/mysql
- name: mariadb-config-file
mountPath: /etc/mysql/conf.d
volumes:
- name: mariadb-data
hostPath:
path: /var/lib/data/mariadb
- name: mariadb-config-file
configMap:
name: mariadb-configmap
也可以使用子路径的功能,为1.3版本kubernetes可用,说明这里.
我不确定你能做到这一点.Kubernetes的工作方式与docker完全不同,并且不太适合与您可能习惯使用docker的'host'进行交互.
我想到了一些可能的可能性.首先,可能最不理想但最接近你要求的是在容器运行后添加文件,方法是添加commands
或删除args
pod规范,或者使用kubectl exec
内容并将内容回送到文件中.第二种方法是创建一个已存在该文件的卷,例如创建GCE或EBS磁盘,添加该文件,然后将文件位置(只读)挂载到容器的规范中.第三,将创建一个新的docker镜像,其中该文件或其他代码已经存在.
对于第一个选项,kubectl exec
它将用于一次性作业,它不是非常可扩展/可重复的.在运行时进行的任何创建/获取都会为容器的开始时间增加很多开销,所以我通常会使用第三个选项,每当文件或代码发生更改时都会构建一个新的docker镜像.你改变的越多,你就越想要一个CI系统(如无人机)来帮助自动化这个过程.
如果我应该扩展任何这些选项以及更多详细信息,请添加评论.