将代码/文件直接注入Google Cloud Engine中Kubernetes的容器中

时间:2015-12-03 06:21:10

标签: docker kubernetes google-kubernetes-engine

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

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

由于

3 个答案:

答案 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完全不同,并不适合与主持人进行交互。你可能习惯了码头工人。

我想到了一些可能的可能性。首先,可能最不理想但最接近你要求的是,在容器运行后添加文件,方法是将commandsargs添加到pod规范,或者使用{{1并将内容回显到文件中。第二种方法是创建一个已存在该文件的卷,例如创建GCE或EBS磁盘,添加该文件,然后将文件位置(只读)挂载到容器的规范中。第三,将创建一个新的docker镜像,其中该文件或其他代码已经存在。

对于第一个选项,kubectl exec将用于一次性作业,它不具有可扩展性/可重复性。在运行时进行的任何创建/获取都会为容器的开始时间增加很多开销,所以我通常会使用第三个选项,每当文件或代码发生更改时都会构建一个新的docker镜像。你改变的越多,你就越想要一个CI系统(如无人机)来帮助自动化这个过程。

如果我应该扩展任何这些选项以及更多详细信息,请添加评论。

答案 2 :(得分:0)

Kubernetes允许您将卷装入您的pod。其中一种卷类型是hostPathlink),它允许您将主机中的目录挂载到窗格中。