此处不阐述gitlab jenkins k8s harbor 安装过程
jenkins和gitlab相互关联
jenkins:工具集成平台
gitlab: 软件管理平台
部署这两个服务的联动,需要经过ssh验证。
1、首先我们需要在gitlab上绑定jenkins服务器的ssh公钥,这里我们使用的是root用户的公私钥,切记生产环境是不允许随便用root的
(1)jenkins
[root@jenkins ~]# ssh-keygen -t rsa
//然后不输入只回车会生成一对公私钥
默认在/root/.ssh/目录里
[root@jenkins ~]# cat /root/.ssh/id_rsa.pub
//查看公钥并复制
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMA4+je3NsxZrF2v8TPLXJp1ejwy1YokXipEFyGVNo5IbtkiBDwBLOAl5i7yromY8YGgoNNriE2g89IM/44BGC5UDCokQ69Ze9Ta9Kynv3/1PDFXIABJJG0f6LsUqt0nKFaFoGz3ZuYAnl6AzLpXEic8DBDrsFk+UGrxvMfSEqHlYO2b7jRXE1HGRnqI/IcVB190cLT1kmBKi7hSqUNBc1cY6t3a6gGiBpp9tc8PW4r/RcLblhAL1LKx8x37NOZkqox8IMh3eM/wtWwAVFlI8XU+sz9akzJOVmd1ArT5Q4w8WA/uVHCDUGVI/fli/ZRv+mNZyF3EH26runctb5LkCT root@jenkins
(2)gitlab

在这里放刚才拷贝的公钥保存就行了。


我们先在gitlab上创建一个代码仓库 点击 new project

输入一个仓库的名字,权限选择私有的(Private)然后直接点击创建

点击新建一个new.file

写入代码,起一个名字然后保存

创建好了,然后在本地测试一下是否可用

使用git clone git@youIP:guohs/tomcat.git
(3)自动构建
安装插件
先进入到之前查看插件的地方
系统设置----插件管理—可用插件—搜索安装需要的插件gitlab-oauth、gitlab-plugin、 windows-slaves、ruby-runt ime、gitlab-hook

(4)打开jenkins 点击新建


地址粘贴进去以后没有报错则没错

如有类似报错 是因为密钥认证关系

在gitlab的主机上生成ssh密钥对
[root@jenkins ~]# ssh-keygen -t rsa
//然后不输入只回车会生成一对公私钥
[root@jenkins ~]# cat /root/.ssh/id_rsa
//查看密钥并复制




下面的这个插件很重要,就是他实现自动化更新的webhook插件,安装过了就会有这条,然后点击这条下面出来的这些东西保持默认就行。同时注意复制
这个里面写的是jenkins构建时候会执行的shell脚本,这个是最重要的,就是他实现了下端kubernetes自动更新容器的操作。


#!/bin/bash
backupcode="/data/$JOB_NAME/$BUILD_NUMBER"
mkdir -p $backupcode #jenkins创建上述目录
chmod 644 "$JENKINS_HOME"/workspace/"$JOB_NAME"/*
rsync -acP "$JENKINS_HOME"/workspace/"$JOB_NAME"/* $backupcode #$JENKINS_HOME和$JOB_NAME同步最新消息
#ssh root@200.200.100.71 sed -i 's/v1/v2/g' /data/deploy.yaml #更改镜像版本
echo From tomcat/jdk:8 > "$JENKINS_HOME"/workspace/Dockerfile
echo COPY ./"$JOB_NAME"/* /usr/local/apache-tomcat-8.5.38/webapps/ >> "$JENKINS_HOME"/workspace/Dockerfile
docker rmi 200.200.100.83/web/tomcat:v1
docker build -t 200.200.100.83/web/tomcat:v1 /"$JENKINS_HOME"/workspace/.
docker push 200.200.100.83/web/tomcat:v1

为k8s集成项目
$JOB_NAME:项目名称
$BUILD_NUMBER:第几次构建
$JENKINS_HOME:jenkins的家目录
完事以后先别保存,首先复制一下上面的jenkins地址,然后去gitlab上绑定webhook

保存,登陆gitlab,点击下图这个设置



测试显示下图 的蓝条说明jenkins 已经连通了gitlab
好了,jenkins和gitlab 都已经互相的ssh通过了,然后我们最后需要做的一个ssh是关于jenkins
///注意,这里是从git和jenkins向master节点做免密登录。
配置私有库地址
这个参数只能在docker.service或者daemon.json其中一个配置文件中。
vim /usr/lib/systemd/system/docker.service

vim /etc/docker/daemon.json

添加"insecure-registries":[“200.200.100.83”]中harbor主机设置的登录域名,这里的insecure参数如果是写在/usr/lib/systemd/system/docker.service中,如上面harbor主机那样,那么就直接修改/usr/lib/systemd/system/docker.service中该项配置即可,
systemctl daemon-reload
systemctl restart docker
docker-compose start //启动harbor服务
创建secret文件
刚开始完k8s,总会遇到很多坑,因为是开源项目,版本总在更新,所以要时刻关注自己使用的版本有哪些不一样的命令和参数。
本次采坑是想让k8s可以在建立pod时可以到私库中拉取镜像。根据官网或网上资料,可以通过创建secret记录私库鉴权信息。具体做法如下:
首先在其中一个node上登录私有仓库(docker 访问私库的配置,这里不做描述)
docker login 200.200.100.83
登录成功后会在/root/.docker目录下生产config.json文件,然后执行如下命令:
cat /root/.docker/config.json | base64 -w 0
该命令会将你的认证信息通过base64编码,生成一个编码之后的字符串。
在kubernetes中的master节点中创建secret.yaml:
apiVersion: v1
data:
.dockerconfigjson: ewoJImF1dGhzIjogewoJCSIyMDAuMjAwLjEwMC44MyI6IHsKCQkJImF1dGgiOiAiWVdSdGFXNDZaM1Z2TkRJNSIKCQl9Cgl9LAoJIkh0dHBIZWFkZXJzIjogewoJCSJVc2VyLUFnZW50IjogIkRvY2tlci1DbGllbnQvMTkuMDMuOCAobGludXgpIgoJfQp9
kind: Secret
metadata:
name: harbor-registry ##自定义名字后面Deployment中引用
type: kubernetes.io/dockerconfigjson
在kubernetes中的master节点创建secret:
kubectl create -f secret.yaml
查看secret是否创建:
kubectl get secret
之后在创建其他元素的时候指定:imagesPullSecrets即可。
例如:
pod:
apiVersion: v1
kind: Pod
metadata:
name: redis-test
containers:
name: redis-test
image: my.registry/redis
imagePullSecrets:
name: myregistrykey
至此是网上和官网提供的可以让k8s启动pod时访问私库的方法。
很多人也是可以使用,但由于k8s一直在更新版本,网上很多资料都是建立在旧版本基础上进行验证,在新版本中一些参数有变更。
本次采坑就是在于编辑secret元素时type和date参数有变动,从k8s 1.8之后,kubernetes.io/dockercfg就变成kubernetes.io/dockerconfigjson,相对应 .dockercfg也变成.dockerconfigjson,所以在使用k8s 1.8以后版本创建secret时,元素要变成如下:
data:
.dockerconfigjson : ewoJImF1dGhzIjogewoJCSJidXMuZ2EiOiB7CgkJCSJhdXRoIjogIllXUnRhVzQ2WVdSdGFXNHhOVGszTlRNPSIKCQl9Cgl9Cn0=
type: kubernetes.io/dockerconfigjson
不然在创建完secret后,pod启动会报需要验证或者找不到镜像的错误,而无法正常使用镜像。
创建deployment文件
#vim deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: web
name: web
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
imagePullSecrets:
- name: harbor-registry ##此处引用上面secret创建的名字
containers:
- image: 200.200.100.83/web/tomcat:v1
imagePullPolicy: Always
name: web
kubectl apply -f deployment.yaml

创建svc文件
#vim deployment-svc.yaml
apiVersion: v1
kind: Service
metadata:
labels:
name: web
name: web
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 31234
selector:
name: web
kubectl apply -f deployment-svc.yaml

部署Kubernetes 应用
部署应用的流程
1.编写代码
2.测试
3.编写 Dockerfile
4.构建打包 Docker 镜像
5.推送 Docker 镜像到仓库
6.编写 Kubernetes YAML 文件
7.更改 YAML 文件中 Docker 镜像 TAG
8.利用 kubectl 工具部署应用
2944

被折叠的 条评论
为什么被折叠?



