繁体   English   中英

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

[英]Inject code/files directly into a container in Kubernetes on Google Cloud Engine

如何将代码/文件直接注入 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 中:

配置映射

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 的“主机”进行交互来说并不是真正理想的选择。

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

对于第一个选项, kubectl exec将用于一次性作业,它的可扩展性/可重复性不是很好。 运行时的任何创建/获取都会为容器的启动时间增加大量开销,因此我通常采用第三个选项,每当文件或代码更改时构建新的 docker 映像。 你改变的越多,你就越可能需要一个 CI 系统(比如无人机)来帮助自动化这个过程。

如果我应该用更多细节扩展这些选项中的任何一个,请添加评论。

Kubernetes 允许您将卷挂载到 Pod 中。 其中一种卷类型是hostPath ( link ),它允许您将目录从主机挂载到 pod 中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM