将代码/文件直接注入Google云端引擎上的Kubernetes容器中

如何将代码/文件直接注入到Google Cloud Engine上的Kubernetes容器中,类似于可以使用Docker装载主机文件/目录的方式,例如

docker run -d --name nginx -p 443:443 -v "/nginx.ssl.conf:/etc/nginx/conf.d/default.conf" 

谢谢

我不确定你能做到这一点。 Kubernetes和Docker做的事情完全不一样,而且不太适合与Docker可能用到的“主机”进行交互。

想到几个替代的可能性。 首先,也许最不理想,但最接近你要求的,将是在容器运行后添加文件,无论是通过添加commandsargs到pod规范,或使用kubectl exec和echo'ing内容到文件。 其次是创build一个文件已存在的卷,例如,创build一个GCE或EBS磁盘,添加该文件,然后将文件位置(只读)挂载到容器的规范中。 第三,将创build一个新的docker图像,其中的文件或其他代码已经存在。

对于第一个选项, kubectl exec将用于一次性工作,这不是非常可扩展/可重复的。 在运行时的任何创build/获取都会给容器的开始时间增加很多开销,所以我通常会使用第三个选项,在文件或代码更改时创build一个新的Docker镜像。 你改变得越多,你可能就会越需要一个CI系统(如无人机)来帮助自动化这个过程。

添加评论,如果我应该扩大任何这些选项与更多的细节。

可以使用ConfigMaps来实现这个目标:

以下示例将mariadbconfiguration文件挂载到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-configmap mountPath: /etc/mysql/conf.d volumes: - name: mariadb-data hostPath: path: /var/lib/data/mariadb - name: mariadb-config configMap: name: mariadb-configmap 

正如此处所述,也可以使用1.3版本的kubernetes中提供的subPathfunction。

Kubernetes允许您将卷装入您的容器中。 一个这样的卷types是hostPath ( 链接 ),它允许您从主机挂载一个目录到pod中。