kubernetes+gitlab+ci/cd+jenkins部署(piggy)
本文最后更新于21 天前,其中的信息可能已经过时,如有错误请发送邮件到2639131093@qq.com
来自AI助手的总结
单节点Kubernetes集群部署及CI/CD配置流程。
中文 英文 韩语 日语

单节点部署

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

这个每天会过期 后面持续使用通过此方法

输入:

kebectl get secret -n kubernetes-dashboard

找到第一个admin的

输入

kubectl describe secret admin的密钥 -n kubernetes-dashboard

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'

       

    }

}

点击应用

}

4.去Harbor仓库新建一个springcloud项目,并且公开

5.配置Webhook(去springcloud项目的Setting配置)用于推送测试

gitlab的springcloud项目,左侧导航栏settings-webhooks,设置url,并取消ssl

url:http://192.32.62.50:8080/project/springcloud/

改为你的:http://ip:8080/project/springcloud/

6.点击“Add webhook”,然后去测试“Push events”

触发CI/CD

1.构建触发

docker cp /opt/repository/ jenkins:/root/.m2

docker restart jenkins

通过git工具更新上传pig项目代码到gitlab仓库服务中

[root@k8s-master-node1 springcloud]# cd /opt/springcloud/
[root@k8s-master-node1 springcloud]# git add .
[root@k8s-master-node1 springcloud]# git commit -m "Intiial commit"
# 位于分支 master
无文件要提交,干净的工作区
[root@k8s-master-node1 springcloud]# git push -u origin master
Username for 'http://192.32.62.50:81': root
Password for 'http://root@192.32.62.50:81': 
分支 master 设置为跟踪来自 origin 的远程分支 master。
Everything up-to-date

单击jenkins主页项目进入

查看其状态

2.查看其自动构建项目

点击右侧下方构建名称 ‘#1’,选择左侧菜单的 ‘ Console Output’查看其自动构建信息

3.在harbor内查看

4.在kubernetes内查看

web页面

一般来说 master不参与调度,所以还是多节点好,本次搭建出现了最后一个服务pod没起来,是因为污点阻挡了。

没起来

问了我的chatgpt,给了我以下参考建议:

若是pod没起来

一般看yaml文件

kubectl get pod config-65c94d6d8c-gwkbk -n springcloud -o yaml
kubectl get pod gateway-769564b9c-68bst -n springcloud -o yaml

复制过去给chatgpt 给我的回复是

根据你提供的 Pod YAML 输出,config Pod 处于 Pending 状态,原因是调度失败,具体错误信息如下:

复制代码0/1 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate.

问题分析

这条消息表明 Kubernetes 集群中存在一个 taint(污点),它阻止了 Pod 在主节点上调度。具体来说,主节点被标记为 node-role.kubernetes.io/master,而你的 Pod 没有相应的 toleration(容忍)来允许它在这样的节点上运行。

解决方案

要解决这个问题,有几种方法可以考虑:

  1. 添加容忍(Toleration)
    • 如果你希望 config Pod 能够在主节点上运行,可以在 Pod 的定义中添加一个容忍。可以通过以下 YAML 修改 Pod 的定义,添加容忍:yaml复制代码tolerations: - key: "node-role.kubernetes.io/master" effect: "NoSchedule" operator: "Exists"
    • 你可以通过编辑 Deployment 或 StatefulSet 来添加这个容忍,或者直接修改 Pod 的定义(如果是单独创建的 Pod)。
  2. 将 Pod 移动到工作节点
    • 更常见的做法是将 Pod 调度到一个工作节点上。你需要确保至少有一个工作节点可用,并且没有被标记为 NoSchedule。可以通过添加工作节点来解决这个问题。
    • 确保你的集群中有至少一个工作节点,并且该节点没有污点。
  3. 移除主节点的污点(不推荐):
    • 如果你不希望主节点被标记为 NoSchedule,可以移除主节点的污点。可以使用以下命令:bash复制代码kubectl taint nodes k8s-master-node1 node-role.kubernetes.io/master:NoSchedule-
    • 这种做法不推荐,因为主节点通常不应该运行工作负载,除非你有特定的需求。

示例命令

添加容忍的示例命令(假设你使用的是 Deployment):

  1. 编辑 Deployment:bash复制代码kubectl edit deployment config -n springcloud
  2. spec.template.spec 部分添加 tolerations:yaml复制代码spec: template: spec: tolerations: - key: "node-role.kubernetes.io/master" effect: "NoSchedule" operator: "Exists"

结论

根据你的需求选择合适的解决方案。如果你只是想让这个特定的 Pod 在主节点上运行,可以添加容忍。如果你的集群缺少工作节点,建议添加工作节点以便更好地管理负载。

k8s脚本多节点

连接上面k8s部署,若想部署多节点 在原有基础上更改,这是原有基础上更改 ,前面基础环境条件都需要

环境

master 192.32.62.132

node 192.32.62.133

共享服务搭建

在master节点搭建共享服务,共享/opt目录

打开 主配置文件 /etc/vsfptd/vsftpd.conf

末尾添加anon_root=/opt

设置开机自启与启动

更改node的yum源

缓存建立

更改两台虚拟机映射

两台都一样

集群部署

master三条指令 node 一条

master 
进入 /opt下
依次运行
./k8s_harbor_install.sh
./k8s_image_push.sh 
./k8s_master_install.sh 

完成后  在 node运行  且需要master传输脚本文件至node
k8s_node_install.sh

运行成功截图

master内

./k8s_harbor_install.sh 脚本

./k8s_image_push.sh 脚本

./k8s_master_install.sh 脚本

node内

k8s_node_install.sh 脚本

需要先在master 内 scp到node

文末附加内容

评论

  1. 11
    Windows Edge
    5 月前
    2024-11-25 10:49:44

    MIIEowIBAAKCAQEAzx7PReFWR8yfzHlWY1CxfXodDfgiIUQ0okbyIyE0th6epZFf
    ud+ImKao+D3AZplJI3KIox5rQUdTDOvZ2t8hj4adOaQvAPJI+kquaI4D56dEzhoI
    b/yHIIEWJBMxC9zm/PwKRezIZ3EocXRqEkspDj3qRmJtTWNmHH68ycKkcjV0ZiLJ
    jLy6zxxUEMI/tJKd4eSx9HcbPEgB8tNyTW3h0RwiOcOwfGhXvk3tpst49ucsTRFC
    UIeBD9h+bL2tTaCsVbFWNgakb15QbADg0yTVZQbz1RS1UOmWItcy+XR5125iXOzB
    RPfRGW75bnv6Jcw3FYjbP9iMEqz++ULvz7AiPQIDAQABAoIBAAauVb1JUYErZpQv
    7ctyVOdZQwqqUF+GVbROWY0siwi84B0zHUVfooZaCeVICKbGlwdfsGyilI8cf99Q
    1EwtGmYIz5WGaEW9iwEX25xfyFx2ls+XI2KJYMp5n382Z0ScsY7DiolK5AQCMG3I
    dYt1hTOCZ8YxcpkmdarBo9FWR/uvEuEfuFzgi9I6qkeTCEMG2X+gKifT5rBvlt74
    Py8e/A86ghqyQTBT0Vjd6DuNGBTOufvnv2rl4S1Og0ispt4DizBZOY3x6SfJpP0A
    6zx0WF2RqVgp2KbHWGMUjd234eJX03XCfLAGTolRVQO9tF/U6Vo3vf3witi6rSjs
    7kZHC0ECgYEA5oqtIFJJyjYdZcVbej3Eed0nwjpDxJP6Uy04izje8CDELMDfdulv
    l0jxf7ikVMIzhTYFtQ39rULUbbTBhMJxR6Ya4Baa2SuTilMVnvDqKZzoCzZ9PGZ9
    tt1IG1N+EoWnWAeFFlCqWqKcLkU/CsX87O4Iisp8MqOBuV7nQpQ6ENUCgYEA5f4F
    WENM1Ka99gQJi9CGYyx/sAfwMBuN8sLOOrbO+5fQKxf4V0so/OycelkK2WEq9XwS
    qE67td4B0GStgCM713/TQ5rDVdY5HueFv6ijMy3W3b3uzlW2z7g+z670RaCGo+9y
    gywhErmvZJUre6lIAGPq2spOcvPzGJpY3gJiv8kCgYA2IYGdATVKQYKNjtV30mD7
    rC3VsRCQa55vQULxjZzrDQaC65aMuSr2fq4VqykKrb6jHJgidvKFaBew2qxFm9I1
    XI8a5rPdIho2dGOzOiYBN1JUr6qgMAB8m2B+6g/EEZXFWZ6qKq6VMXEyfBfdU7eb
    ehiPXhPjX/jpqZrrSxqHMQKBgGNkTacBHpjfnkRNJlr3uLvvJRdLtu7zWXrJ2Rni
    mrx7tQiKiVYgMwxqrIzrIhcjOM9x2RZHQDOuR5Zpi9lOYLQWl5Qls7jKpVDHuTNE
    i5K4gpy9UhB1VlWaR/q0nvfgEY+TESfC0GApQrTzCiGc3HLeu0XmG9Ttu+ar/S+k
    VEyRAoGBANDSi1ZNgg4ZhM0SuYUoQHor8gwslXbrspiWFo5ZRe5QxNTGd31gQ5Dm
    R+ku9wABnl/WOPO+GrX4xd0QHS0koGn8TISM2LkHAkkHT06OXImb3nevHc0HTF8O
    RHg/jY0mqhmn+off8Td03sSd4QCxiqIhjqX/5LuW/hTpBbGqv5Fh

    来自湖北

发送评论 编辑评论


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