专栏首页伪架构师K8S 分布式构建 Docker 镜像的一些小技巧

K8S 分布式构建 Docker 镜像的一些小技巧

镜像更新

最近给我的 Jenkins 镜像 做了一些更新:

  • 加入了基于 RunC 的镜像操作工具:IMG。在特权模式下,可以方便的使用命令行创建和操作 Docker 镜像。
  • 更新 Jenkins 以及 Remoting 版本。
  • 修复一些初始化问题。

下面根据这一版本的镜像简单说说分布式构建过程中的一些要点。

Jenkins 镜像的一些值得注意的东西

  • Jenkins 在启动 Slave 节点时,会设置下面三个环境变量,所以在 run.sh 就可以引用这几个环境变量启动 Worker 节点:
    • JENKINS_URL:MASTER 服务的地址。
    • JENKINS_NAME:为 Worker 节点分配的名称
    • JENKINS_SECRET:Worker 节点和 Master 节点通信时所使用的认证密钥。
java \
-cp /usr/share/jenkins/slave.jar hudson.remoting.jnlp.Main \
-headless -url $JENKINS_URL $JENKINS_SECRET $JENKINS_NAME
  • img 工具依赖于 runc,因此也需要把 runc 加入到镜像之中。
  • config.xml 中:
    • 直接设置了 8081 作为 jnlp 端口,因此在 Dockerfile 中也进行了 EXPOSE 声明。
    • 开启 CSRF 选项,并设置代理服务器兼容,防止在 Kube-Proxy 的情况下无法提供服务。

Jenkins 在 Kubernetes 中的启动:

  • RBAC:因为要启动 Worker 节点,因此在开启了 RBAC 的集群上,要给 Jenkins 的 Service Account 进行授权,允许进行 Pod 的操作。
  • Service:需要暴露 jnlp 端口到集群内部,无需为其提供 loadbalancer 以及 nodePort 等形式的外网接入能力。
  • 可以根据需要提供加载卷,用于保存配置等。

分布式构建的配置

  • 首先需要安装 Kubernetes 插件。
  • 插件安装后,就可以在 Jenkins 的 credentials 中加入 Kubernetes ServiceAccount 类型的凭据,用于连接和操作 Kubernetes 集群。
  • 容器模板设置中,系统缺省会提供一个名为 jnlp 的容器模板,要想使用自己的镜像,需要进行同名覆盖。
    • 容器模板中可以按需设置加载卷等,例如要进行镜像的 PUSH 操作,就需要将 CA 证书通过一定方法加入到容器的信任列表之中。
    • 如果要进行 IMG 的操作,需要选中容器的 Run in privileged mode 选项,开启特权模式。

任务的设置

  • 要进行镜像的构建,就非常的容易,加入几行简单的 Shell 命令,例如:
mkdir tmp# 生成一个 Dokerfileecho "FROM registry.docker-cn.com/library/alpine" > tmp/Dockerfile# 构建镜像img build -t 10.211.55.19:5000/alpine:163 tmp# 更新证书信任列表update-ca-certificates# 把镜像推送到私库img push 10.211.55.19:5000/alpine:163

本文分享自微信公众号 - 伪架构师(fake-architect),作者:崔秀龙

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-05-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 伸手党的容器镜像加固流程

    说了好几期 CIS 之类的运行时安全问题,K8s 在运行过程中,还有个常见的安全威胁就是镜像漏洞,不少同学都有在实施过程中因为镜像漏洞问题被吊打的经验,今天就结...

    崔秀龙
  • (译)多数 Dockerfile 示例可能都不够严谨

    想把 Python 应用打包成 Docker 镜像,很自然的行为就是上网搜个例子。简单的一搜,就能得出大量简单易懂的结果。

    崔秀龙
  • 使用 Kind 构建离线集群安装包

    Kind(Kubernetes in Docker) 是一个 Kubernetes 孵化项目,它使用 Docker 为节点进行 Kubernetes 的快速部署...

    崔秀龙
  • Django容器(上): 自定义基础镜像

    某个 Python 项目,基于 Python:3.6 与 Django:1.11 框架开发,希望项目能够容器化,然后可以通过 docker-compose 等工...

    用户1560186
  • 让 K8S 在 GFW 内愉快的航行

    K8S(kubernetes) 日渐火爆,但由于出自Google,对GFW内的用户及其的不友好。 而之前的 *.azk8s.cn 全能镜像站,也于 2020年4...

    落跑架构师M
  • 轻量级容器Docker的核心概念

    image.png Docker镜像 Docker镜像(Image)类似于虚拟机镜像,可以将它理解为一个面向Docker引擎的只读模板,包含了文件系统 例如:一...

    dys
  • 腾讯云服务器购买了不会搭建环境怎么办?官方教程+镜像市场助你轻松上云

    现在有很多传统虚拟主机用户和物理服务器用户都在慢慢的将网站迁移至腾讯云服务器,但是有很多用户不懂怎么给腾讯云服务器安装网站程序运行所必要的环境,同时又没有相应的...

    tengxunyun8点com活动整理
  • Vapor奇幻之旅(08 连接服务端MongoDB)

    首先付上官网的安装教程:安装mongodb,这个是社区版,由于企业版是收费的,就先来个社区版以供测试使用。

    Leacode
  • 关于 Alpine Docker 镜像漏洞 CVE-2019-5021

    本周比较吓人的是 CVE-2019-5021, 根据漏洞报告,自 Alpine Linux 3.3 版本开始的所有 Docker 镜像中,root 用户包含一个...

    Jintao Zhang
  • Android真机安装sqlite3的方法

    Android版本: 4.4.2 PS C:\Users\jiang> adb shell shell@hwH60:/ $ su - root # 此时输入s...

    用户1221057

扫码关注云+社区

领取腾讯云代金券