Vai*_*ain 3 jenkins jenkins-plugins docker kubernetes weave
我有一个在AWS EC2实例上运行的kubernetes集群,并编织为networking(cni)。我已经禁用了docker网络(ipmask和iptables),因为它是由weave管理的(以避免网络冲突)。
我已经将我的Jenkins作为K8s pod部署在了这个集群上,并且这个jenkins使用jenkins kubernetes插件基于我定义的pod和容器模板生成了动态的slave。这些从属容器中具有docker客户端,该客户端通过docker.sock连接到主机docker引擎。
因此,当我在Jenkins中运行任何作业时,它将启动一个从属服务器,并在此服务器上克隆git存储库并开始构建存储库中存在的Dockerfile。
我的样本dockerfile看起来像这样:
FROM abc:123
RUN yum update
Run Code Online (Sandbox Code Playgroud)
因此,当容器开始构建容器时,它将尝试连接到redhat仓库以更新本地仓库,并在此处失败。为了进行调试,我登录到该容器并尝试wget / CURL一些软件包,发现该容器中没有Internet连接。
我怀疑在构建docker时会启动中间容器,而这些容器没有通过编织进行管理,因此它们没有Internet连接。
需要建议。
好了,经过很多努力,终于找到了解决方案。
因此,每当K8s启动Pod时,它都会启动Sidecart容器,其作用主要是为Pod容器提供网络。
因此,在运行docker build时,如果我将其容器ID作为网络传递,那么我的中间上下文便开始通过此容器获得Internet连接。因此更改看起来像这样:
docker build -t "some name" --network container:\$(docker ps | grep \$(hostname) | grep k8s_POD | cut -d\" \" -f1) -f infra/docker/Dockerfile .
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。:D
| 归档时间: |
|
| 查看次数: |
1234 次 |
| 最近记录: |