GVKun编程网logo

itlab→jenkins→registry→kubernetes→docker

15

本文的目的是介绍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

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)

.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 系统

docker + gitlab + jenkins 搭建 CI/CD 系统

阅读文本大概需要15分钟。

1. 环境

搭建环境是 Centos 7.2,本地测试是自己搭建的虚拟机,测试环境是阿里云ECS的Centos 7.2

2. 安装docker

yum默认带有的docker版本比较低,我一般都是会安装更新版本的docker

如果已经使用yum安装了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
安装docker依赖库、添加docker官方yum源及安装docker
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
配置docker开机自启动并启动docker
systemctl enable docker
systemctl daemon-reload
systemctl start docker
安装完毕可以查询安装的docker版本
docker --version
Docker version 18.09.6build 481bc77156
安装完docker需要安装 docker-compose

docker-compose是一个python编写的docker编排工具,后面的启动服务都是以docker-compose来启动,这样就不需要每次都手动输入docker启动命令的各项配置参数,简化操作,最后也可以吧gitlab,jenkins等关联的服务编写在同一个 docker-compose 脚本中,方便一起管理

我们部署环境有python3环境,所以直接使用pip3安装docker-compose

sudo pip3 install docker-compose
3. 安装gitlab build gitlab镜像并启动

首先在工作目录下,创建一个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

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

gitlab正常使用可以参考网上其他的资料,主要是用户,组及项目的创建

4. 安装jenkins 安装jenkins镜像
# /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

当 jenkins 正常运行时,启动日志中会有第一次登陆需要的管理员密码,如下:





拷贝此密码,然后登陆主机地址:8002访问,会进入jenkins初始化页面,输入刚才拷贝的密码,然后进入引导页面,根据引导安装推荐的插件





完成插件之后可以添加一个管理员账号,添加完毕后会进入jenkins的主页





安装 gitlab 及 docker 插件

在 系统管理 > 插件管理 > 可选插件中搜索并安装gitlab,docker相关插件













gitlab添加一个可以测试的项目

需要再gitlab中添加一个测试项目,并且该项目需要有dockerfile脚本,我们测试主要流程是gitlab push tag,然后 jenkins 触发构建开始自动部署,项目部署以docker镜像生成及部署的方式实现





配置 gitlab ssh 密钥对
# 生成密钥对, 输入后一路回车,默认保存密钥在 ~/.ssh 目录下, id_rsa(私钥)及id_rsa.pub(公钥)
ssh-keygen -o -t rsa -b 4096 -C "email@example.com"

拷贝 公钥信息,在gitlab > 用户设置 > SSH密钥 > 添加一个SSH密钥





配置docker构建任务

在jenkins中添加一个任务





任务中需要配置源码信息,这里使用gitlab托管代码,所以需要gitlab仓库的地址,用户需要对仓库具有相应的权限,这里因为还没配置gitlab用户信息,所以提示无法读取仓库源码





点击 Credentials 后面的添加按钮可以添加证书信息,类型选择 SSH username with private key,然后添加之前生成密钥的私钥,再点击添加完成录入





然后在在源码管理中选择刚刚添加的认证信息,添加没问题则红色的出错信息将会消失





在构建中增加一个构建步骤,即将代码构建 docker 镜像




完成后点击保存完成任务的添加,然后再首页点击构建按钮查看构建效果,第一次会触发docker 下载相应的未下载的镜像,可能会比较慢,之后可以看到任务构建成功,查看控制台输出可以看到构建时shell的输出日志,至此任务的构建已经没有问题,接下去要实现 gitlab push 自动触发构建





配置 gitlab 自动触发构建

在 jenkins 任务的构建触发器中开启 push event 的触发器,然后在高级中点击生成生成一个回调地址的 Secret token,然后保存









在 gitlab 项目 > 设置 > 集成 中将 Jenkins 及 生成的 token配置到gitlab 中,事件选择 tag push





然后创建一个标签,jenkins 收到回调会自动构建,在首页能查询构建的历史记录

构建完成自动推送镜像至阿里云registry

能接受 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&nbsp;Boot—入门+进阶+实例

04 优秀的Java程序员必须了解的GC哪些

05 互联网支付系统整体架构详解

关注我

每天进步一点点

很干!在看吗?

本文分享自微信公众号 - JAVA乐园(happyhuangjinjin88)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

docker – Kubectl:Kubernetes与minikube超时

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+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部署配置的相关信息,请在本站寻找。

本文标签:

上一篇Redis(2):群集搭建(redis集群搭建和使用)

下一篇两种方式实现Spring 业务验证(spring数据验证)