本文的目的是介绍itlab→jenkins→registry→kubernetes→docker的详细情况,我们将通过专业的研究、有关数据的分析等多种方式,同时也不会遗漏关于.Netcore使用Jen
本文的目的是介绍itlab→jenkins→registry→kubernetes→docker的详细情况,我们将通过专业的研究、有关数据的分析等多种方式,同时也不会遗漏关于.Net core 使用 Jenkins + Docker + Azure Devops(或者 GitHub、GitLab) 持续集成(CI/CD)、docker + gitlab + jenkins 搭建 CI/CD 系统、docker – Kubectl:Kubernetes与minikube超时、docker+jenkins+gitlab+dockerfile部署配置的知识。
本文目录一览:- itlab→jenkins→registry→kubernetes→docker
- .Net core 使用 Jenkins + Docker + Azure Devops(或者 GitHub、GitLab) 持续集成(CI/CD)
- docker + gitlab + jenkins 搭建 CI/CD 系统
- docker – Kubectl:Kubernetes与minikube超时
- docker+jenkins+gitlab+dockerfile部署配置
itlab→jenkins→registry→kubernetes→docker
发开人员→gitlab→jenkins→registry→kubernetes→docker
思路:从开发人员上传代码到 gitlab 托管代码以后,jenkins 自动 pull 下来然后做成镜像上传至 registry 私有仓库,同时发指令给 kubernetes 使他关闭旧容器,然后重新启用新的 docker 镜像并做成容器对外提供服务。
——————————————————————————————————
秉着从下到上的顺序,我们从 kubernetes 开始部署。kubernetes 在这个架构里扮演者管理容器集群的角色,然而我们所要做到的,就是让 kubernetes 能够自动控制并管理 docker 的容器集群。
首先我们需要做一个 registry 私有仓库,可以选择任意一台服务器都可以,这里我们选择 kubernetes-master 作为 registry 私有仓库。
在 kubernetes-master 上进行操作:
先去阿里云下载个镜像链接,创建自己的镜像仓库
# docker run -d --restart=always -p 5000:5000 registry:2
#同时将所有节点的私有仓库指定到 kubernetes-master 上
在”/etc/docker/“目录下的 "daemon.json" 文件里,如果没有则创建”daemon.json“文件。在文件中写入:
{ "insecure-registries":["192.168.1.103:5000"] }
# systemctl restart docker #这一步做好了以后就可以在私有仓库 pull 镜像了
可以做一个测试
tag 是给镜像打标记,打上标记以后才可以上传 ,上传了以后也可以在任意服务器上 pull 下载
然后重要的地方到了,建立 yaml 配置文件让 kubernetes 自己控制容器集群。
vim nginx-rc.yaml
Version: v1 #版本
kind: ReplicationController #类型,是 rc 类型,控制 pod 模板
metadata: #标记,里面写的是这个 rc 的名字
name: nginx
spec: #rc 的命名空间,里面包含所有 pod
replicas: 2 #开启 pod 模板数量
template: #pod 的配置
metadata: #pod 的标记
labels: #用于集群内识别 pod 的暗号
name: nginx
spec: #pod 的命名空间
containers: #容器配置
- name: nginx #容器的名字
image: 192.168.1.103:5000/nginx #容器的镜像,这里我们用的是自己的私有仓库镜像
ports: #暴露的容器的端口,并不是服务器的端口
- containerPort: 80
一定要注意缩进,因为是用 python 的语言编辑的,所以一定要注意缩进。
# kubectl create -f nginx-rc.yaml #创建 rc 模板。然后静静的等待 5-10 分钟或者更短。
# kubectl get rc
# kubectl get pod
# kubectl describe pod #这几条是查看命令,可以观察 pod 的情况
这个时候就已经可以去 node 节点上访问容器了,在节点上看看状态
然后访问容器
可是容器的 ip 只能在容器本机上访问,集群内的其他主机和集群外的主机都没办法访问,这个时候就需要将容器的端口映射到服务器上的端口了,所以需要做一个 service 的模板。service 模板可以将容器的端口映射到服务器的端口上,并且可以固定映射在服务器上的端口。
#vim nginx-service.yaml
apiVersion: v1
kind: Service #类型是 service
metadata:
labels: #这里的标记一定要和 nginx-rc 的标记对照,因为 kubernetes
name: nginx 靠这个识别身份
name: nginx
namespace: default
spec:
type: NodePort #类型是节点端口,就是映射的端口
ports:
- port: 80
targetPort: 80 #这个是容器的端口
nodePort: 31230 #这个是容器在服务器上映射的端口,可以通过这个端口访问
selector:
name: nginx #作用同上面的 labels
# kubectl create -f nginx-service.yaml
# kubectl describe service #查看 service 的映射,如下图
这个时候就可以尝试访问 node 节点的 31230 端口了,同时我们发现,这个 service 还有轮循的功能。自带负载均衡的效果。
ok kubernetes 完毕, 开始配置 jenkins+gitlab 联动
——————————————————————————————————
jenkins:工具集成平台
gitlab: 软件托管平台
部署这两个服务的联动,需要经过 ssh 验证。
首先我们需要在 gitlab 上绑定 jenkins 服务器的 ssh 公钥,因为是在同一台服务器上,所以就自己给自己绑定,这里我们使用的是 root 用户的公私钥,切记生产环境是不允许随便用 root 的
# ssh-kengen -t rsa
然后不输入只回车会生成一对公私钥
默认在 /root/.ssh/
复制这个公钥,然后登陆 gitlab,点击右上角的设置
在这里扔进去刚才拷贝的公钥保存就行了。
我们先在 gitlab 上创建一个代码仓库 点击 new project
输入一个仓库的名字 权限选择公共的(public)然后直接点击创建
点击新建一个 new.file
写入代码,起一个名字然后保存
创建好了以后复制下面的 ssh 地址,然后在本地测试一下是否可用
# git clone git@192.168.1.101:root/test.git
如果可以用,则打开 jenkins
点击新建
地址粘贴进去以后没有报错则没错
下面的这个插件很重要,就是他实现自动化更新的 webhook 插件,安装过了就会有这条,然后点击这条下面出来的这些东西保持默认就行。同时注意复制
这个里面写的是 jenkins 构建时候会执行的 shell 脚本,这个是最重要的,就是他实现了下端 kubernetes 自动更新容器的操作。
以下是里面的内容,如有不懂,请自行参考官方文档解读,上面黄色圈内的是对变量的解释可以参照
#!/bin/bash
backupcode="/data/backcode/$JOB_NAME/$BUILD_NUMBER"
mkdir -p $backupcode
chmod 644 "$JENKINS_HOME"/workspace/"$JOB_NAME"/*
rsync -acP "$JENKINS_HOME"/workspace/"$JOB_NAME"/* $backupcode
echo From 192.168.1.103:5000/nginx > "$JENKINS_HOME"/workspace/Dockerfile
echo COPY ./"$JOB_NAME"/* /usr/share/nginx/html/ >> "$JENKINS_HOME"/workspace/Dockerfile
docker rmi 192.168.1.103:5000/nginx
docker build -t 192.168.1.103:5000/nginx /"$JENKINS_HOME"/workspace/.
docker push 192.168.1.103:5000/nginx
ssh root@192.168.1.103 kubectl delete rc nginx
ssh root@192.168.1.103 kubectl create -f nginx.yaml
完事以后先别保存,首先复制一下上面的 jenkins 地址,然后去 gitlab 上绑定 webhook
保存,登陆 gitlab,点击下图这个设置
点击下图这个,然后粘贴地址,保存
浏览区下拉,到这个位置,可以看到绑定了 jenkins 地址,然后点击 test 测试一下是否连通
测试显示下图 的蓝条说明 jenkins 已经连通了 gitlab
好了,jenkins 和 gitlab 都已经互相的 ssh 通过了,然后我们最后需要做的一个 ssh 是关于 jenkins 对 kubernetes-master 的免密登陆,因为我们执行的 jenkins 的 shell 里面有需要免密登陆 kubernetes-master 的操作,所以还是需要对 jenkins 做一个免密登陆 kubernetes 的 ssh 验证。
首先我们去 kubernetes-master
# vim /etc/ssh/sshd_config
解除这个地方的 注释,然后写入能够访问到本机的地址 如果 ssh 不成功则把地址改为 0.0.0.0。如果第 59 行本来就没有注释则不用重启服务
# systemctl restart sshd
然后去 jenkins 上复制之前已经有的 ssh 公钥
复制 然后扔到 kuernetes-master 的 /root/.ssh/authorized_keys 里面,如果没有这个文件则 vim 写进去。注意路径!!( ssh 前面有个点)
然后从 jenkins 上测试一下(不要在乎 ip,因为我重新获取的 ip,239 是 kubernetes-master)
一个小细节,测试一下 jenkins 可不可以下载 kubernetes-master 上面 registry 的镜像 (因为我重新获取的 ip,所以 jenkins+gitlab ip :192.168.1.101 master ip : 192.168.1.239 node ip : 192.168.1.64)
# docker pull 192.168.1.239:5000/nginx
好了,环境全部部署完毕!!!。开始测试
测试的方法很简单,就是在 gitlab 上新建代码,删除代码,修改代码,都会触发 webhook 进行自动部署。最终会作用在所有的 nginx 容器中,也就是我们的 web 服务器。。
这里我修改了之前建立的 index.html 文件 保存以后,就打开浏览器 一直访问 kubernetes-node 里面的容器了
# firefox 192.169.1.64:31230
这个时候没变 还是之前的, 按 F5 多刷新几次以后就成了下图
再试一次
架构完成!
后记: 关于 kubernetes 还有好几种集群管理方法。我们这次用的 rc 模板 就是其中之一, 其他的还有 pod 模板 和 deployment 模板, 这些都是功能很强大的集群调度模板。 还有更多功能待开发。。。。
.Net core 使用 Jenkins + Docker + Azure Devops(或者 GitHub、GitLab) 持续集成(CI/CD)
目前 CI/CD 挺火的,这里使用的 Jenkins + Docker + Azure Devops 部署,或者可以用这套 Jenkins + Docker + Github 或 GitLab 部署,
进入正题: 第零点:当然要先安装.Net core 运行时,官网上就有下载。
首先 这里的 jenkins 并不是装在 docker 里面的 jenkins,是直接安装到 linux 上的 jenkins。其实安装在 docker 更加方便,因为这样系统不用安装 JavaSdk,我参考的是晓晨的博客,原文链接:https://www.cnblogs.com/stulzq/p/9291237.html ,这里要强调的是:1、首先我们先要安装 java 环境,参考晓晨的博客,原文链接:https://www.cnblogs.com/stulzq/p/9286878.html 里面非常详细的介绍。
但是这里要注意的就是:
官网地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 在官网下载需要点击这个选项才能下载,下载框中的那个就可以了。
然后 jenkins 安装晓晨的博客已经说的非常明白了。
接下来就是 Azure Devops 的说明,微软这个东西挺不错的,配合 vs 使用也挺好用的,但是还是比不上 github,
如图:可以建立自己的分支上传(push)和拉取(pull),从某分支合并(merge),完成团队协作。基本上使用非常简单,通过 vs 就可以直接新建项目到 Azure Devops,也可以建立多个分支,达到团队协作的目的,这里就不详细说明啦。
接下来就是 docker 的安装了,这里也是参考晓晨博客,原文地址:http://www.cnblogs.com/stulzq/p/7743073.html,这里要说明的就是我们需要安装 docker-compose ,这样就可以运行 dockerfile 文件脚本,达到自动部署的目的。
好吧,基本上安装完之后,我们就可以开始了:
首先我们需要在 jenkins 上面新建一个任务,自由风格的软件项目: (这里有一部分参考晓晨的博客,原文链接:http://www.cnblogs.com/stulzq/p/8627824.html)
然后点击 ok 进入下一个页面,这里的是丢弃旧的构建,因为太多就占磁盘了,第一个是保留几天的 build 记录,第二个是最多保留多少个构建,设小一点就不会占很多硬盘空间了。
然后就是 git 的地址了:
上图的 git 地址, 就是这里的 git clone 地址 (当然 git 地址都行):
还需要注意的就是凭证(再点击右上角你的账户下的 security):
在这里面填入名称密码就可以了,然后在上面的凭证 Credentials 填入就行了:
接下来就是 jenkins 拉取代码的时间(这里 H/2 * * * * 是两分钟拉取一次):
:
然后是拉取后,构建执行的命令:
jenkins 拉取代码后会判断代码与之前的是否不一致,如果不一致,则会执行构建。
接下来是 docker 的说明:可以看到上图的命令,倒数两行,会执行这个脚本文件,这个脚本文件实际上是 docker 的一些命令,所以我们需要在项目目录中添加这个脚本文件,我就是直接添加 TXT 文件改后缀.sh。(有点 low。。。。)
来看看这个脚本里面放什么:
#!/bin/sh
docker container ls -a | grep "tr"
if [ $? -eq 0 ];then
docker container stop tr
docker container rm tr
docker rmi tr
docker network ls |grep tr
docker network rm tr
fi
docker build -t tr --build-arg env="Development" .
docker run -d --restart=always -p 8051:80 --name tr tr
docker cp /etc/localtime tr:/etc/
可以看到就是如果存在 tr 先停止 删除 然后再构建。当然我们也得有 dockerfile 这个文件,构建的时候 docker 会去找到 dockerfile 然后执行里面的命令(dockerfile 在新建.net core 项目的时候勾选支持 docker 就可以咯,还有直接添加 txt 去掉后缀也行哈哈哈)
然后看看 dockerfile 有什么:
# 基于dotnet基础环境构建镜像
FROM docker.io/microsoft/dotnet
RUN mkdir /TR
#定义参数
ARG env
# 把发布的内容拷贝到docker容器的TR目录下
COPY /publish /TR
# 设置工作目录
WORKDIR /TR
# 暴露80端口
EXPOSE 80
# 设置环境变量
ENV ASPNETCORE_ENVIRONMENT=$env
# 启动web
RUN echo "执行环境: $env"
CMD ["dotnet","TR.dll"]
dockerfile 指令详解说明:https://yeasy.gitbooks.io/docker_practice/content/image/dockerfile/,里面都有说明就不多说了,要注意的就是,大致的流程就是首先我们上传代码到 Azure Devops 上,然后 jenkins 根据凭证去 Azure Devops 拉取代码到服务器上,执行命令脚本构建,然后就交给脚本执行,找到 dockfile 执行,重构镜像再生成容器。网站就部署到 docker 里面了。
大致的就是这样,感谢晓晨的博客,给了我非常大的帮助,这就是晓晨的博客地址:https://www.cnblogs.com/stulzq/
docker + gitlab + jenkins 搭建 CI/CD 系统
阅读文本大概需要15分钟。
搭建环境是 Centos 7.2,本地测试是自己搭建的虚拟机,测试环境是阿里云ECS的Centos 7.2
yum默认带有的docker版本比较低,我一般都是会安装更新版本的docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce
systemctl enable docker
systemctl daemon-reload
systemctl start docker
docker --version
Docker version 18.09.6, build 481bc77156
docker-compose是一个python编写的docker编排工具,后面的启动服务都是以docker-compose来启动,这样就不需要每次都手动输入docker启动命令的各项配置参数,简化操作,最后也可以吧gitlab,jenkins等关联的服务编写在同一个 docker-compose 脚本中,方便一起管理
我们部署环境有python3环境,所以直接使用pip3安装docker-compose
sudo pip3 install docker-compose
首先在工作目录下,创建一个docker-compose的脚本,
# /data/gitlab 是自定义映射gitlab存放配置参数及数据的目录,可以修改成自己需要的目录
cat > docker-compose.yml << EOF
version: ''2''
services:
jenkins:
image: gitlab/gitlab-ce:12.0.3-ce.0
container_name: gitlab
ports:
- "9022:9022"
- "9080:80"
volumes:
- "/data/gitlab/cfg:/etc/gitlab"
- "/data/gitlab/logs:/var/log/gitlab"
- "/data/gitlab/data:/var/opt/gitlab"
restart: always
EOF
# 后台启动服务,第一次或自动pull镜像,添加 -d 表示后台启动
docker-compose up -d
gitlab会监听22端口(ssh连接),80端口(http)及443端口(https),我们gitlab前面加上一个haproxy做反向代理,haproxy监听443端口代理到9443端口,docker不开80端口全部都走9443端口(映射至433端口)
使用vim编辑gitlab的配置文件,gitlab的配置文件默认为 /data/gitlab/cfg/gitlab.rb ,前面的目录就是docker中配置的映射目录
docker container exec -it gitlab bash
vim /etc/gitlab/cfg/gitlab.rb
# 以下为gitlab的配置项
# 配置 gitlab 显示 url 的内容,external_url配置为https的链接时,gitlab会自动创建监听443端口的nginx配置,证书需要放置在 /etc/gitlab/ssl 目录下,并且文件名为配置的域名.crt
# 例如配置域名为 https://git.xxx.com,则需要证书文件为 git.xxx.com.crt 及 git.xxx.com.key
external_url ''https://git.xxx.com''
# 配置邮箱信息
gitlab_rails[''gitlab_email_enabled''] = true
gitlab_rails[''gitlab_email_from''] = ''no-reply@xxx.com''
gitlab_rails[''gitlab_email_display_name''] = ''gitlab''
gitlab_rails[''smtp_enable''] = true
gitlab_rails[''smtp_address''] = "hwsmtp.xxx.com"
gitlab_rails[''smtp_port''] = 994
gitlab_rails[''smtp_user_name''] = "no-reply@xxx.com"
gitlab_rails[''smtp_password''] = "xxx"
gitlab_rails[''smtp_domain''] = "qiye.xxx.com"
gitlab_rails[''smtp_authentication''] = "login"
gitlab_rails[''smtp_enable_starttls_auto''] = true
gitlab_rails[''smtp_tls''] = true
# 配置完成后输入一下命令重新配置gitlab
sudo gitlab-ctl reconfigure
gitlab正常使用可以参考网上其他的资料,主要是用户,组及项目的创建
# /data/jenkins 是自定义映射jenkins存放数据的目录,可以修改成自己需要的目录,docker的映射是为了让jenkins能使用宿主环境下的docker
cat > docker-compose.yml << EOF
version: ''2''
services:
jenkins:
image: jenkins/jenkins:lts
user: root
container_name: jenkins
ports:
- "8002:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
- "/data/jenkins:/var/jenkins_home"
- "/usr/bin/docker:/usr/bin/docker"
restart: always
EOF
# 后台启动服务,第一次或自动pull镜像,添加 -d 表示后台启动,可以添加这个参数用于后台启动
docker-compose up
当 jenkins 正常运行时,启动日志中会有第一次登陆需要的管理员密码,如下:
拷贝此密码,然后登陆主机地址:8002访问,会进入jenkins初始化页面,输入刚才拷贝的密码,然后进入引导页面,根据引导安装推荐的插件
完成插件之后可以添加一个管理员账号,添加完毕后会进入jenkins的主页
在 系统管理 > 插件管理 > 可选插件中搜索并安装gitlab,docker相关插件
需要再gitlab中添加一个测试项目,并且该项目需要有dockerfile脚本,我们测试主要流程是gitlab push tag,然后 jenkins 触发构建开始自动部署,项目部署以docker镜像生成及部署的方式实现
# 生成密钥对, 输入后一路回车,默认保存密钥在 ~/.ssh 目录下, id_rsa(私钥)及id_rsa.pub(公钥)
ssh-keygen -o -t rsa -b 4096 -C "email@example.com"
拷贝 公钥信息,在gitlab > 用户设置 > SSH密钥 > 添加一个SSH密钥
在jenkins中添加一个任务
任务中需要配置源码信息,这里使用gitlab托管代码,所以需要gitlab仓库的地址,用户需要对仓库具有相应的权限,这里因为还没配置gitlab用户信息,所以提示无法读取仓库源码
点击 Credentials 后面的添加按钮可以添加证书信息,类型选择 SSH username with private key,然后添加之前生成密钥的私钥,再点击添加完成录入
然后在在源码管理中选择刚刚添加的认证信息,添加没问题则红色的出错信息将会消失
在构建中增加一个构建步骤,即将代码构建 docker 镜像
完成后点击保存完成任务的添加,然后再首页点击构建按钮查看构建效果,第一次会触发docker 下载相应的未下载的镜像,可能会比较慢,之后可以看到任务构建成功,查看控制台输出可以看到构建时shell的输出日志,至此任务的构建已经没有问题,接下去要实现 gitlab push 自动触发构建
在 jenkins 任务的构建触发器中开启 push event 的触发器,然后在高级中点击生成生成一个回调地址的 Secret token,然后保存
在 gitlab 项目 > 设置 > 集成 中将 Jenkins 及 生成的 token配置到gitlab 中,事件选择 tag push
然后创建一个标签,jenkins 收到回调会自动构建,在首页能查询构建的历史记录
能接受 tag 推送回调之后,需要修改构建的shell脚本
# 定义变量,CONTAINER_NAME 是项目名称,对应阿里云镜像服务中的仓库名称,GIT_TAG 变量是自动获取本地git版本的tag
CONTAINER_NAME="citest"
GIT_TAG=`git describe --always --tag`
CONTAINER_FULL_NAME=${CONTAINER_NAME}-${GIT_TAG}
REPOSITORY=registry.cn-shanghai.aliyuncs.com/ibeelink/${CONTAINER_NAME}:${GIT_TAG}
# 构建Docker镜像
docker build -t $REPOSITORY -f Dockerfile .
# 推送Docker镜像,username 跟 password 为 阿里云容器镜像服务的账号密码
docker login --username=xxxxx --password=xxxxxx registry.cn-shanghai.aliyuncs.com
docker push $REPOSITORY
# 删除生成的image
docker images | grep citest | awk ''{print $1":"$2}'' | xargs docker rmi
# 删除名称或标签为none的镜像
docker rmi -f `docker images | grep ''<none>'' | awk ''{print $3}''`
修改至这个版本,可以在gitlab中创建一个tag,然后gitlab会回调至jenkins,然后jenkins开始构建并将生成的镜像推送至阿里云registry中并清理现场
目前已经完成了 gitlab ——— jenkins ——— DockerRegistry 的镜像发布,后续会继续实现 jenkins 将发布的镜像分发到每个机器并部署的功能
☆
往期精彩
☆
01 漫谈发版哪些事,好课程推荐
02 Linux的常用最危险的命令
03 精讲Spring Boot—入门+进阶+实例
04 优秀的Java程序员必须了解的GC哪些
05 互联网支付系统整体架构详解
关注我
每天进步一点点
本文分享自微信公众号 - JAVA乐园(happyhuangjinjin88)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
docker – Kubectl:Kubernetes与minikube超时
我已经安装了minikube并启动了它内置的Kubernertes集群
$minikube start
Starting local Kubernetes cluster...
Kubernetes is available at https://192.168.99.100:443.
Kubectl is Now configured to use the cluster.
我也安装了kubectl
$kubectl version
Client Version: version.Info{Major:"1",Minor:"3",GitVersion:"v1.3.0",GitCommit:"283137936a498aed572ee22af6774b6fb6e9fd94",GitTreeState:"clean",BuildDate:"2016-07-01T19:26:38Z",GoVersion:"go1.6.2",Compiler:"gc",Platform:"linux/amd64"}
但我无法成功使用kubectl与正在运行的Kubernetes集群交谈
$kubectl get nodes
Unable to connect to the server: net/http: TLS handshake timeout
编辑
$minikube logs
E0712 19:02:08.767815 1257 docker_manager.go:1955] Failed to create pod infra container: ImagePullBackOff; Skipping pod "kube-addon-manager-minikubevm_kube-system(48abed82af93bb0b941173334110923f)": Back-off pulling image "gcr.io/google_containers/pause-amd64:3.0"
E0712 19:02:08.767875 1257 pod_workers.go:183] Error syncing pod 48abed82af93bb0b941173334110923f,skipping: Failed to "StartContainer" for "POD" with ImagePullBackOff: "Back-off pulling image \"gcr.io/google_containers/pause-amd64:3.0\""
E0712 19:02:23.767380 1257 docker_manager.go:1955] Failed to create pod infra container: ImagePullBackOff; Skipping pod "kube-addon-manager-minikubevm_kube-system(48abed82af93bb0b941173334110923f)": Back-off pulling image "gcr.io/google_containers/pause-amd64:3.0"
E0712 19:02:23.767464 1257 pod_workers.go:183] Error syncing pod 48abed82af93bb0b941173334110923f,skipping: Failed to "StartContainer" for "POD" with ImagePullBackOff: "Back-off pulling image \"gcr.io/google_containers/pause-amd64:3.0\""
E0712 19:02:36.766696 1257 docker_manager.go:1955] Failed to create pod infra container: ImagePullBackOff; Skipping pod "kube-addon-manager-minikubevm_kube-system(48abed82af93bb0b941173334110923f)": Back-off pulling image "gcr.io/google_containers/pause-amd64:3.0"
E0712 19:02:36.766760 1257 pod_workers.go:183] Error syncing pod 48abed82af93bb0b941173334110923f,skipping: Failed to "StartContainer" for "POD" with ImagePullBackOff: "Back-off pulling image \"gcr.io/google_containers/pause-amd64:3.0\""
E0712 19:02:51.767621 1257 docker_manager.go:1955] Failed to create pod infra container: ImagePullBackOff; Skipping pod "kube-addon-manager-minikubevm_kube-system(48abed82af93bb0b941173334110923f)": Back-off pulling image "gcr.io/google_containers/pause-amd64:3.0"
E0712 19:02:51.767672 1257 pod_workers.go:183] Error syncing pod 48abed82af93bb0b941173334110923f,skipping: Failed to "StartContainer" for "POD" with ImagePullBackOff: "Back-off pulling image \"gcr.io/google_containers/pause-amd64:3.0\""
E0712 19:03:02.766548 1257 docker_manager.go:1955] Failed to create pod infra container: ImagePullBackOff; Skipping pod "kube-addon-manager-minikubevm_kube-system(48abed82af93bb0b941173334110923f)": Back-off pulling image "gcr.io/google_containers/pause-amd64:3.0"
E0712 19:03:02.766609 1257 pod_workers.go:183] Error syncing pod 48abed82af93bb0b941173334110923f,skipping: Failed to "StartContainer" for "POD" with ImagePullBackOff: "Back-off pulling image \"gcr.io/google_containers/pause-amd64:3.0\""
E0712 19:03:16.766831 1257 docker_manager.go:1955] Failed to create pod infra container: ImagePullBackOff; Skipping pod "kube-addon-manager-minikubevm_kube-system(48abed82af93bb0b941173334110923f)": Back-off pulling image "gcr.io/google_containers/pause-amd64:3.0"
E0712 19:03:16.766904 1257 pod_workers.go:183] Error syncing pod 48abed82af93bb0b941173334110923f,skipping: Failed to "StartContainer" for "POD" with ImagePullBackOff: "Back-off pulling image \"gcr.io/google_containers/pause-amd64:3.0\""
E0712 19:04:15.829223 1257 docker_manager.go:1955] Failed to create pod infra container: ErrImagePull; Skipping pod "kube-addon-manager-minikubevm_kube-system(48abed82af93bb0b941173334110923f)": image pull Failed for gcr.io/google_containers/pause-amd64:3.0,this may be because there are no credentials on this request. details: (Error response from daemon: Get https://gcr.io/v1/_ping: dial tcp 74.125.28.82:443: I/O timeout)
E0712 19:04:15.829326 1257 pod_workers.go:183] Error syncing pod 48abed82af93bb0b941173334110923f,skipping: Failed to "StartContainer" for "POD" with ErrImagePull: "image pull Failed for gcr.io/google_containers/pause-amd64:3.0,this may be because there are no credentials on this request. details: (Error response from daemon: Get https://gcr.io/v1/_ping: dial tcp 74.125.28.82:443: I/O timeout)"
E0712 19:04:31.767536 1257 docker_manager.go:1955] Failed to create pod infra container: ImagePullBackOff; Skipping pod "kube-addon-manager-minikubevm_kube-system(48abed82af93bb0b941173334110923f)": Back-off pulling image "gcr.io/google_containers/pause-amd64:3.0"
一个.您需要确保与VM一起运行的docker守护程序可以通过代理连接到Internet.
湾您需要确保在主机上运行的kubectl可以在不通过代理的情况下到达VM
使用默认的kubectl示例
>确保将代理传递到由minikube创建的VM(这可确保VM中的docker守护程序可以访问Internet)
minikube start –vm-driver =“kvm”–docker-env =“http_proxy = xxx”–docker-env =“https_proxy = yyy”start
注意:使用代理设置替换xxx和yyy
>获取VM在启动时获得的IP.
minikube ip
注意:每次设置minikube都需要这样做,因为它可以改变
>确保kubectl可以在不进入代理的情况下与此VM通信
export no_proxy =“127.0.0.1,[minikube_ip]”
>现在启动POD并测试它
kubectl run hello-minikube –image = gcr.io / google_containers / echoserver:1.4 –port = 8080
kubectl公开部署hello-minikube –type = NodePort
kubectl获取pod
curl $(minikube service hello-minikube –url)
docker+jenkins+gitlab+dockerfile部署配置
第一步:docker+jenkins+gitlab自动化部署配置,这里不说了,请看我的另一篇文章
第二步:pom.xml和Dockerfile配置内容
pom.xml
<build>
<finalName>${project.artifactId}-${project.version}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<!--docker镜像相关的配置信息-->
<configuration>
<!--镜像名,这里用工程名-->
<imageName>${project.artifactId}-${project.version}</imageName>
<!--Dockerfile文件所在目录-->
<dockerDirectory>${project.basedir}/src/main/resources</dockerDirectory>
<!--TAG,这里用工程版本号-->
<imageTags>
<imageTag>${project.version}</imageTag>
</imageTags>
<dockerHost>http://你的ip:2375</dockerHost>
<registryUrl>http://你的ip:5000</registryUrl>
<pushImage>false</pushImage>
<imageName>你的ip:5000/${project.artifactId}:${project.version}</imageName>
<!--构建镜像的配置信息-->
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.artifactId}-${project.version}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
/src/main/resourcesDockerfile的内容
FROM java:8
ENV project bdkt-eureka
ENV version 1.0-RELEASE
ENV home_path /home
WORKDIR $home_path
ADD /$project-$version.jar $home_path/$project.jar
ENTRYPOINT ["java", "-jar", "bdkt-eureka.jar"]
FROM java:8 依赖于jdk
ENV project bdkt-eureka 环境变量 key value
ENV version 1.0-RELEASE
ENV home_path /home
WORKDIR $home_path 指定的工作目录
ADD /$project-$version.jar $home_path/$project.jar 复制功能
ENTRYPOINT ["java", "-jar", "bdkt-eureka.jar"] 相当于 java -jar bdkt-eureka.jar,这个命令就是把几个逗号里面的内容用空格拼接出来执行
第三步:构建任务中需要的配置
Pre Steps 1
bdkt-parent/bdkt-basics/bdkt-eureka/pom.xml
clean install
Pre Steps 2
内容为:
#!/bin/bash
#镜像名称
image_name=47.111.115.253:5000/bdkt-eureka
#启动的镜像运行的名字
run_image_name=bdkt-eureka
#版本
version=1.0-RELEASE
result=$(docker ps | grep "$run_image_name")
if [[ "$result" != "" ]]
then
echo "stop $run_image_name"
docker stop $run_image_name
fi
result1=$(docker ps -a | grep "$run_image_name")
if [[ "$result1" != "" ]]
then
echo "rm $run_image_name"
docker rm $run_image_name
fi
result2=$(docker images | grep "$image_name")
if [[ "$result2" != "" ]]
then
echo "rmi $image_name:$version"
docker rmi $image_name:$version
fi
Pre Steps 3
内容为:
clean package -f bdkt-parent/bdkt-basics/bdkt-eureka/pom.xml -DskipTests docker:build
Pre Steps 3
内容为:
其中ssh site是自己配置的,详细看我之前文章
docker run --name bdkt-eureka -p 8100:8100 -idt 47.111.115.253:5000/bdkt-eureka:1.0-RELEASE
docker logs bdkt-eureka
关于itlab→jenkins→registry→kubernetes→docker的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于.Net core 使用 Jenkins + Docker + Azure Devops(或者 GitHub、GitLab) 持续集成(CI/CD)、docker + gitlab + jenkins 搭建 CI/CD 系统、docker – Kubectl:Kubernetes与minikube超时、docker+jenkins+gitlab+dockerfile部署配置的相关信息,请在本站寻找。
本文标签: