如何在容器中对镜像进行操作

Docker VS Podman

由于只需要对镜像进行 pull、tag、push 操作,因此不需要全套的 Docker 服务,这里选择了 Podman。Podman 有一个子命令就是 buildah,它主要负责镜像相关的操作,这样会更加精简。

问题描述

在镜像中添加完 buildah 的依赖后,在容器中运行 buildah 时,报如下错误:
现象

解决方案

此问题的其中一个解决方案为:在宿主机中,修改 /proc/sys/user/max_user_namespaces 文件里面的值。但若采取此种方案,会导致线上环境 K8S 所在的宿主机,可能也要修改,这样的操作是不太可行的。

同事的踩坑经验:可以在 k8s 的 yaml 配置中,为 pod 开启特权模式,这样可以避免使用 user namespace。在 pod 定义处,添加配置,修改如下:

1
2
securityContext: 
privileged: true

修改后,buildah 在容器中不再报错。但对上面的修改,一方面持有安全疑虑,另一方面不太明白其中的原理。

为什么

为什么在本地的 K8S 环境中 rosco 执行没有问题?

图片

为什么将 pod 设置成特权模式之后便能正常执行 buildah?

  • 一篇比较具有参考价值的相关 issue。通过上述 issue 得知,即使使用 root 启动 buildah ,还是需要 user namespace 来获取相应的 capabilities
  • privileged 参数应该是会添加所有的 capabilities 到容器中(参考Docker文档)。

如何改进

只给 buildah 所需的 Linux capabilities,初步验证在 testing 运行 ok。

1
2
3
4
5
securityContext: 
# privileged: true
capabilities:
add:
- "SYS_ADMIN"

其中 CAP_SYS_ADMIN 的作用是:允许执行系统管理任务,如加载或卸载文件系统、设置磁盘配额等。

Argo CD Sync 同步操作逻辑梳理

sync 子命令做的事情就两件:从 git repo 拉取 Manifest、然后执行 kubectl apply。入口:app.go -> NewApplicationSyncCommand执行命令:argocd app sync aaa命令行客户端先创建一个 clientacdClient
阅读更多

为什么SSH执行命令不会退出

通过 ssh 在主机上面执行命令时,遇到 ssh 连接不会自动断开,在程序结束时才断开的情况。如何才能让 ssh 执行完命令后自动退出?以及这种问题该如何分析?背后的原理又是什么?现象一般情况下,执行简单的命令时,会在命令执行完成后,立刻返回ssh ucloud ps当执行的程序是堵塞的时nohup
阅读更多

macOS操作记录

删除 Microsoft Edge 浏览器rm -rf /Applications/Microsoft Edge.apprm -rf ~/Library/Application Support/Microsoft Edgerm -rf ~/Library/Caches/Microsoft E
阅读更多

1 | Redis 基础数据结构 SDS

在 redis 中,保存基础的字符串的数据结构为 Simple Dynamic String(SDS),它是一个对 C 语言中字符串的包装结构。在 C 语言中,用 char[] str 来声明一个字符串,且每个字符串都以 结尾,一些字符串操作函数,都以 作为字符串的结束标识符。而 SDS
阅读更多

0 | Spinnaker 官网笔记

Spinnaker官网ConceptsApplication managementto view and manage your cloud resourcesSpinnaker 中的三个概念:Applications、 clusters、 server groups暴露服务给用户:Load bal
阅读更多

3 | Spinnaker 如何执行 pipeline

本篇文章记录以发布单的形式启动的一个流水线的执行过程,并对相关敏感信息做了删除,但不影响对整体流程的介绍。通过 POST 调用 gate 服务的 pipelines/v2/{application}/{pipeline}@POST("pipelines/v2/{application}/{
阅读更多

MySQL简易入门

MySQL 是一个互联网绕不过去的坎,总觉得很简单,一切似乎都围绕着 CURD,但是不能脱离这个核心,本次的博客其 MySQL 的一些基本概念作为主题,力求用自己的语言,将其中的概念说清楚。今天是在银川的第二天,第一次坐完飞机,现在在见家长的过程中,偷得片刻悠闲,写点东西作为总结~一条SQL的执行流
阅读更多