如何将代码/文件直接插入到Google Cloud Engine上的Kubernetes容器中,类似于使用Docker挂载主机文件/目录的方式,例如
docker run -d --name nginx -p 443:443 -v "/nginx.ssl.conf:/etc/nginx/conf.d/default.conf"
由于
答案 0 :(得分:11)
可以使用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中提供的subPath功能,如here所述。
答案 1 :(得分:6)
我不确定你能做到这一点。 Kubernetes的工作方式与docker完全不同,并不适合与主持人进行交互。你可能习惯了码头工人。
我想到了一些可能的可能性。首先,可能最不理想但最接近你要求的是,在容器运行后添加文件,方法是将commands
或args
添加到pod规范,或者使用{{1并将内容回显到文件中。第二种方法是创建一个已存在该文件的卷,例如创建GCE或EBS磁盘,添加该文件,然后将文件位置(只读)挂载到容器的规范中。第三,将创建一个新的docker镜像,其中该文件或其他代码已经存在。
对于第一个选项,kubectl exec
将用于一次性作业,它不具有可扩展性/可重复性。在运行时进行的任何创建/获取都会为容器的开始时间增加很多开销,所以我通常会使用第三个选项,每当文件或代码发生更改时都会构建一个新的docker镜像。你改变的越多,你就越想要一个CI系统(如无人机)来帮助自动化这个过程。
如果我应该扩展任何这些选项以及更多详细信息,请添加评论。
答案 2 :(得分:0)
Kubernetes允许您将卷装入您的pod。其中一种卷类型是hostPath
(link),它允许您将主机中的目录挂载到窗格中。