kubernetes+gitlab+ci/cd+jenkins
本文最后更新于0 天前,其中的信息可能已经过时,如有错误请发送邮件到2639131093@qq.com

单节点部署

ip:192.32.62.50(static)

主机名:k8s-master-node1

节点:kubernetes集群master,harbor仓库节点、

基础环境配置

设置静态ip

[root@k8s-master-node1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=9feb4a35-2525-4cd5-b143-62222944c90b
DEVICE=ens33
ONBOOT=yes
IPADDR=192.32.62.50
PREFIX=24
GATEWAY=192.32.62.2
DNS1=192.32.62.2

设置主机映射

[root@k8s-master-node1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.32.62.50  master
[root@k8s-master-node1 ~]# ping master
PING master (192.32.62.50) 56(84) bytes of data.
64 bytes from master (192.32.62.50): icmp_seq=1 ttl=64 time=0.085 ms
^C
--- master ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.085/0.085/0.085/0.000 ms

关闭防火墙

关闭selinux

部署kubernetes集群环境

脚本部署harbor

使用传输工具将chinaskills_cloud_pass.iso 上传虚拟机,并解压到opt下

 mount chinaskills_cloud_paas.iso /mnt/  ##将源挂载到mnt下面
cp -rf /mnt/* /opt/

指定源路径,因为centos7自带源已经失效

添加kubernetes源,其chinaskills自带

[k8s]
name = kubernetes-repo
baseurl = file:///opt/kubernetes-repo
gpgcheck = 0
enabled = 1

在opt目录下脚本运行

./k8s_harbor_install.sh

部署完成

web页面

输入master外网ip

默认账号密码,脚本里面是可以自己更改的虽然

# Harbor 默认账号:admin
# Harbor 默认密码:Harbor12345

上传镜像到harbor仓库

查看chinaskills自带images

进入opt

tree  /opt/images/

使用脚本上传镜像

./k8s_image_push.sh 

web页面在library下

部署kubernetes集群

./k8s_master_install.sh 

这里我忘记截图了= =在配置文件找到token

web页面

输入:https://对外ip+30000端口

输入密钥

部署jenkins

将CICD_Offline.tar包上传至master节点

将其解压到 /opt 后上传至docker导入

解压后的/opt

上传

cd  /opt

docker load -i  /opt/jenkins.tar

编写jenkins编排文件

创建储存编排文件文件夹

其jenkins编排内容

[root@k8s-master-node1 docker-compose.yaml]# cat docker-jenkins.yaml 
version: '3.1'

services:

  jenkins:

    image: 'jenkins/jenkins:2.262-centos'

    volumes:

      - /home/jenkins_home:/var/jenkins_home

      - /var/run/docker.sock:/var/run/docker.sock

      - /usr/bin/docker:/usr/bin/docker

      - /usr/bin/kubectl:/usr/local/bin/kubectl

      - /root/.kube:/root/.kube

    ports:

      - "8080:8080"

    expose:

      - "8080"

      - "50000"

    privileged: true

    user: root

    restart: always

    container_name: jenkins

启动jenkins

docker-compose -f docker-jenkins.yaml up -d  
-f  指定文件路径
up   启动服务
d     后台运行

安装离线插件

 cp -rfv /opt/plugins/* /home/jenkins_home/plugins/

重启此服务

web页面

查找其对外端口

ip+8080

查看其密码

容器内密码,在虚拟机目录上是没有的

docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword

新建管理用户

点击:

系统管理——安全——管理用户

新建用户:

账号springcloud 密码000000

使用新用户登录

创建完用户后,退出admin用户,使用新创建的用户进行登录Jenkins

依次点击 “系统配置”按钮进入系统配置界面,在“Resource root URL”处配置Jenkins URL,完成后点击保存

然后点击“系统管理”的“全局安全配置”,在授权策略中,允许匿名用户具有可读权限

部署gitlab

mkdir -p gitlab

cd gitlab/

vi docker-compose.yaml

输入以下:

注意不能带注释 我这里只是演示作用

version: '3'
services: 
  gitlab: 
    container_name: gitlab
    image: gitlab/gitlab-ce:12.9.2-ce.0
    volumes: 
    - /srv/gitlab/config:/etc/gitlab                     #映射配置文件
    - /srv/gitlab/gitlab/logs:/var/log/gitlab          #映射日志文件
    - /srv/gitlab/gitlab/data:/var/opt/gitlab         #映射数据文件
    ports: 
    - 81:80
    - 443:443
    - 1022:22
    privileged: true
    restart: always
    hostname: 192.32.62.50                    ##ip
    environment: 
      TZ: 'Asia/Shanghai'

Gitlab启动较慢,可以通过docker logs查看启动状态。启动完成后,在web端访问Gitlab

日志查询

docker logs  + 服务名称

web端口:

http://IP:81

设置初始密码,最低8位数

登录

root

你设置的密码

新建gitlab项目

点击“Create a project”,创建项目 springcloud,可见等级选择“Public”

push源代码到gitlab的springcloud项目:

下载git命令,我不知道这里能不能用git bash = =

[root@k8s-master-node1 springcloud]# git config --global user.name "Administrator"  ##设置全局变量,user的用户名
[root@k8s-master-node1 springcloud]# git config --global user.email "admin@ceshi.com"   ##设置全局变量,user的邮箱
[root@k8s-master-node1 springcloud]# git remote remove origin   ##从本地仓库删除origin仓库远程仓库信息,这是默认的远程目录
[root@k8s-master-node1 springcloud]# git remote add origin http://192.32.62.50:81/root/springcloud.git   ##添加新的远程仓库,指定地址为上述我们创建的项目路径
[root@k8s-master-node1 springcloud]# git add . ##将当前springcloud项目add至暂存区
[root@k8s-master-node1 springcloud]# git commit -m "initial commit"  ##将当前暂存区的目录提交至本地仓库,并指定 -m 打上标签,即注释
# 位于分支 master
无文件要提交,干净的工作区
[root@k8s-master-node1 springcloud]# git push -u origin master  ##将在本地仓库的文件push至远程仓库
Username for 'http://192.32.62.50:81': root
Password for 'http://root@192.32.62.50:81': 
Counting objects: 3192, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (1428/1428), done.
Writing objects: 100% (3192/3192), 1.40 MiB | 1.57 MiB/s, done.
Total 3192 (delta 1233), reused 3010 (delta 1207)
remote: Resolving deltas: 100% (1233/1233), done.
To http://192.32.62.50:81/root/springcloud.git
 * [new branch]      master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。

总体思维

yum install -y git
cd /opt/springcloud
rm -rf .git*                #删除git项目
git config --global user.name "Administrator"           #设置全局用户
git config --global user.name "Administrator"
git init                              #初始化git仓库
git remote add origin http://192.32.62.50:81/root/springcloud.git           #添加远程分支
git add .                  #添加当前文件
git commit -m "Initial commit"               #给此仓库打上标签
git push -u origin master                    #推送分支

回到gitlab项目目录下,查看推送的项目

总体思维和使用github一致,用来本地和云端相互交接,也可多端互通

举例:

本地+github+宝塔

jenkins配置

就是让本地的jenkins和gitlab互联,通过token,一般服务都是这个理

可参考:╭(°A°`)╮ 你去哪了?!

1.点击管理区域的扳手图标

点击左侧导航栏的“Settings”→“Network”,设置“Outbound requests”,勾选”Allowrequests to the local network fromweb hooks and services“

并且勾选Save changes

2.创建 Gitlab API Token

点击 Gitlab 用户头像图标,并点击Settings

点击左侧导航栏的“Access Tokens”添加token,勾选所有复选框,token名称为jenkins,点击“Create personal accesstoken”生成 Token,时间为当前日期之后,这里是过期时间,如我写的11-23那么这天就会失效

复制 Token,后面配置 Jenkins 时会用到

最下面已经生成

3.登录 Jenkins 首页,点击“系统管理”→“系统配置”,配置 Gitlab 信息,取消勾选“Enable authentication for’/project’ end-point”

点击“添加”→“Jenkins”添加认证信息,将Gitlab API Token 填入

点击“Test Connection”进行测试

显示success

配置jenkins连接Maven

安装maven

1.将maven包复制到Jenkins容器中,并解压配置

由于Jenkins是采用docker in docker的方式启动的,所以需要在jenkins容器内安装maven:

#容器内部
cp -rf /opt/apache-maven-3.6.3-bin.tar.gz /home/jenkins_home/
docker exec -it jenkins bash

#容器内部
tar -zxvf /var/jenkins_home/apache-maven-3.6.3-bin.tar.gz -C .
mv apache-maven-3.6.3/ /usr/local/maven
vi/etc/profile
#在最后一行添加:
export M2_HOME=/usr/local/maven
export PATH=$PATH:$M2_HOME/bin                                   ##配置环境变量
 
vi /root/.bashrc
#./etc/bashrc在这一行的下面添加:
source /etc/profile                                ##不是最后一行,配置环境变量重载bash

#验证:                         
退出容器重新进入后:mvn -n(验证maven安装是否成功)

退出容器并再次进入,通过配置环境变量路径,配置bash脚本重载再重进容器时进行

2.登录 Jenkins 首页,点击“系统管理”→“全局工具配置”

点击“新增 Maven”,如图所示。取消勾选“自动安装”,填入maven 名称和安装路径,配置完成后点击“保存”

配置CI/CD

1.登录 Jenkins 首页,点击左侧导航栏“新建任务”,如图所示,选择构建一个流水线,并选择触发器,名称为springcloud

2.在流水线中,先去点击“流水线语法”,去生成对应的凭证出来

选择git:Git类型

添加凭证:为gitlab的用户与密码,仓库url一致为gitlab上面拉的仓库

生成流水线脚本并记住

我的是:git credentialsId: ‘ebc2d9f3-05b4-489a-b468-4ffa43cb8db1’, url: ‘http://192.32.62.50:81/root/springcloud.git ‘

3.写好流水线脚本,并点击“保存”

语法:

node{

 

    stage('git clone'){

        //check CODE

        git credentialsId: 'ebc2d9f3-05b4-489a-b468-4ffa43cb8db1', url: 'http://192.32.62.50:81/root/springcloud.git '

    }

    stage('maven build'){

        sh '''/usr/local/maven/bin/mvn package -DskipTests -f /var/jenkins_home/workspace/springcloud'''

    }

    stage('image build'){

        sh '''

              echo $BUILD_ID

              docker build -t 192.32.62.50/springcloud/gateway:$BUILD_ID -f /var/jenkins_home/workspace/springcloud/gateway/Dockerfile  /var/jenkins_home/workspace/springcloud/gateway

              docker build -t 192.32.62.50/springcloud/config:$BUILD_ID -f /var/jenkins_home/workspace/springcloud/config/Dockerfile  /var/jenkins_home/workspace/springcloud/config'''

    }

    stage('test'){

        sh '''docker run -itd --name gateway 192.32.62.50/springcloud/gateway:$BUILD_ID

        docker ps -a|grep springcloud|grep Up

        if [ $? -eq 0 ];then

            echo "Success!"

            docker rm -f gateway

        else

            docker rm -f gateway

            exit 1

            fi

       

        '''

    }

    stage('upload registry'){

        sh '''docker login 192.32.62.50 -u=admin -p=Harbor12345

            docker push 192.32.62.50/springcloud/gateway:$BUILD_ID

            docker push 192.32.62.50/springcloud/config:$BUILD_ID'''

    }

    stage('deploy Rancher'){

        //执行部署脚本

       sh 'sed -i "s/sqshq\\/piggymetrics-gateway/192.32.62.50\\/springcloud\\/gateway:$BUILD_ID/g" /var/jenkins_home/workspace/springcloud/yaml/deployment/gateway-deployment.yaml'

       sh 'sed -i "s/sqshq\\/piggymetrics-config/192.32.62.50\\/springcloud\\/config:$BUILD_ID/g" /var/jenkins_home/workspace/springcloud/yaml/deployment/config-deployment.yaml'

       sh 'kubectl create ns springcloud'

       sh 'kubectl apply -f /var/jenkins_home/workspace/springcloud/yaml/deployment/gateway-deployment.yaml --kubeconfig=/root/.kube/config'

       sh 'kubectl apply -f /var/jenkins_home/workspace/springcloud/yaml/deployment/config-deployment.yaml --kubeconfig=/root/.kube/config'

       sh 'kubectl apply -f /var/jenkins_home/workspace/springcloud/yaml/svc/gateway-svc.yaml --kubeconfig=/root/.kube/config'

       sh 'kubectl apply -f /var/jenkins_home/workspace/springcloud/yaml/svc/config-svc.yaml --kubeconfig=/root/.kube/config'

       

    }

}
文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇