通过Jenkins将应用发布到K8s1.24.3
一、准备基础环境
 cat >> /etc/hosts <<EOF
 192.168.180.210 k8s-master
 192.168.180.200 k8s-node1
 192.168.180.190 k8s-node2
 192.168.180.180 gitlab
 192.168.180.170 jenkins
 192.168.180.160 harbor
 EOF
 配置主机名
 hostnamectl set-hostname k8s-master && bash
 hostnamectl set-hostname k8s-node1 && bash
 hostnamectl set-hostname k8s-node2 && bash
 hostnamectl set-hostname gitlab && bash
 hostnamectl set-hostname jenkins && bash
 hostnamectl set-hostname harbor && bash
 安装常用软件
 yum -y install vim wget net-tools lrzsz
 systemctl stop firewalld && systemctl disable firewalld
 sed -i ‘/^SELINUX=/s/enforcing/disabled/’ /etc/selinux/config && setenforce 0
二、部署K8S群集
 基础配置[三台centos]
 1、关闭交换分区
 swapoff -a && sed -ri ‘s/.swap./#&/’ /etc/fstab
2、加载模块并添加v4流量传递
 modprobe br_netfilter
 cat > /etc/sysctl.conf << EOF
 net.ipv4.ip_forward = 1
 net.bridge.bridge-nf-call-ip6tables = 1
 net.bridge.bridge-nf-call-iptables = 1
 EOF
sysctl -p
3、安装ipvs
 yum install -y conntrack ntpdate ntp ipvsadm ipset iptables curl sysstat libseccomp wget vim net-tools git
 cat > /etc/sysconfig/modules/ipvs.modules <<EOF
 #!/bin/bash
 modprobe – ip_vs
 modprobe – ip_vs_rr
 modprobe – ip_vs_wrr
 modprobe – ip_vs_sh
 EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
 lsmod | grep -e ip_vs -e nf_conntrack
4、安装containerd
 cat << EOF > /etc/modules-load.d/containerd.conf
 overlay
 br_netfilter
 EOF
modprobe overlay
 modprobe br_netfilter
 wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
 yum install -y containerd.io docker-ce docker-ce-cli
 mkdir /etc/containerd -p
 containerd config default > /etc/containerd/config.toml
 vim /etc/containerd/config.toml
 SystemdCgroup = false 改为 SystemdCgroup = true
sandbox_image = “k8s.gcr.io/pause:3.6”
改为:
 sandbox_image = “registry.aliyuncs.com/google_containers/pause:3.6”
在[plugins.“io.containerd.grpc.v1.cri”.registry.mirrors]下添加如下内容
    [plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.168.180.160"]endpoint = ["http://192.168.180.160"][plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.180.160".auth]username = "jenkins"password = "ABCabc-123"
systemctl enable containerd && systemctl start containerd
ctr version
 runc -version
5、安装k8s[三台centos]
 cat < /etc/yum.repos.d/kubernetes.repo
 [kubernetes]
 name=Kubernetes
 baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
 enabled=1
 gpgcheck=0
 repo_gpgcheck=0
 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
 EOF
yum clean all
 yum makecache fast
 yum install -y kubectl kubelet kubeadm
 systemctl enable kubelet
 vim /etc/sysconfig/kubelet
 KUBELET_EXTRA_ARGS=“–cgroup-driver=systemd”
6、初始化群集[master]
 kubeadm config print init-defaults > init-config.yaml
 vim init-config.yaml
advertiseAddress: 192.168.180.210
 name: k8s-master
dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
podSubnet: 10.244.0.0/16
kubeadm init --config=init-config.yaml
 export KUBECONFIG=/etc/kubernetes/admin.conf
 mkdir -p $HOME/.kube
 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
 sudo chown  ( i d − u ) : (id -u): (id−u):(id -g) $HOME/.kube/config
加入群集[这里的token和discovery-token都是初始化群集最好所给的]
 kubeadm join 192.168.10.210:6443 --token 8zgrg1.dwy5s6rqzzhlkkdl --discovery-token-ca-cert-hash sha256:9dfa30a7a8314887ea01b05cc26e80856bfd253d1a71de7cd5501c42f11c0326
部署calico网络[master]
 wget https://docs.projectcalico.org/v3.18/manifests/calico.yaml --no-check-certificate
 vim calico.yaml //3673行修改为如下
- name: CALICO_IPV4POOL_CIDR
 value: “10.244.0.0/16”
kubectl apply -f calico.yaml
 kubectl describe node k8s-master
 kubectl taint nodes --all node-role.kubernetes.io/control-plane:NoSchedule-
 kubectl get pod -n kube-system
 kubectl get node
三/部署GitLab
 安装GitLab
 yum -y install policycoreutils-python
 上传软件包
 rpm -ivh gitlab-ce-12.9.0-ce.0.el7.x86_64.rpm
 vim /etc/gitlab/gitlab.rb
 external_url ‘http://192.168.180.180’ —修改为本机地址
 gitlab-ctl reconfigure
部署好后,根据PDF的要求,上传项目文件
四、部署Jenkins
 yum install -y git
 安装TOMCAT
 tar zxf apache-tomcat-9.0.52.tar.gz -C /usr/local
 mv /usr/local/apache-tomcat-9.0.52 /usr/local/tomcat
 安装JDK
 tar zxf jdk-8u301-linux-x64.tar.gz
 mv jdk1.8.0_301 /usr/local/java
 vim /etc/profile —追加
 export JAVA_HOME=/usr/local/java
 export PATH= J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:PATH
 export CLASSPATH=.: J A V A H O M E / l i b / d t . j a r : JAVA_HOME/lib/dt.jar: JAVAHOME/lib/dt.jar:JAVA_HOME/lib/tools.jar
 source /etc/profile
将Jenkins.war包上传到Jenkins主机的/usr/local/tomcat/webapp目录下
 cd /usr/local/tomcat/webapps
 上传Jenkins
 启动JenKins
 cd /usr/local/tomcat/bin
 sh startup.sh
初始化Jenkins
 cat /root/.jenkins/secrets/initialAdminPassword
 Jenkins初始化配置完成后,重启下tomcat,在安装目录下先,./shutdown.sh 再 ./startup.sh
 安装如下插件
 CloudBees Docker Build and Publish
 Git Parameter
 Git plugin
 创建凭据
 添加登录gitlab的凭据 root ABCabc-123
 添加登录harbor的凭据 jenkins ABCabc-123
安装Docker(jenkins服务器)
 yum install -y yum-utils device-mapper-persistent-data lvm2
 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
 yum makecache fast
 yum -y install docker-ce git
 mkdir /etc/docker
 cat >> /etc/docker/daemon.json <<EOF
 {
 “registry-mirrors”: [“https://g6yrjrwf.mirror.aliyuncs.com”],
 “exec-opts”: [“native.cgroupdriver=systemd”],
 “insecure-registries”: [“192.168.180.160”]
 }
 EOF
 systemctl start docker && systemctl enable docker
 cat << EOF >> /etc/sysctl.conf
 net.bridge.bridge-nf-call-ip6tables = 1
 net.bridge.bridge-nf-call-iptables = 1
 EOF
 sysctl -p
五、部署Harbor
 安装Docker
 yum install -y yum-utils device-mapper-persistent-data lvm2
 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
 yum makecache fast
 yum -y install docker-ce
 mkdir /etc/docker
 cat >> /etc/docker/daemon.json <<EOF
 {
 “registry-mirrors”: [“https://g6yrjrwf.mirror.aliyuncs.com”],
 “exec-opts”: [“native.cgroupdriver=systemd”],
 “insecure-registries”: [“192.168.180.160”]
 }
 EOF
 systemctl start docker && systemctl enable docker
 cat << EOF >> /etc/sysctl.conf
 net.bridge.bridge-nf-call-ip6tables = 1
 net.bridge.bridge-nf-call-iptables = 1
 EOF
 sysctl -p
上传Docker compose,赋予执行权限,并移动到/usr/local/bin
 cd /usr/local/bin
 chmod +x /usr/local/bin/docker-compose
安装Harbor
 上传软件包并解压
 tar zxf harbor-offline-installer-v2.3.1.tgz -C /usr/local/
 修改Harbor的配置文件
 cd /usr/local/harbor
 /bin/cp harbor.yml.tmpl harbor.yml
 vim /usr/local/harbor/harbor.yml
 1)将hostname修改为本机地址
 hostname: 192.168.180.160
 2)将https相关的配置都注释掉
启动Harbor程序
 sh /usr/local/harbor/install.sh
启动Harbor程序 docker-compose up -d
 关闭Harbor程序 docker-compose stop
 查看Harbor程序 docker-compose ps
登录Harbor,默认用户名 admin 密码:Harbor12345
 创建新用户,和jenkins的凭证相关
 jenkins ABCabc-123
创建项目,将jenkins用户添加到项目中
修改Jenkins服务器上的Docker配置文件
 cat /etc/docker/daemon.json
 “insecure-registries”: [“192.168.180.160”] //添加,IP为Harbor的地址
六、发布应用
 1、创建K8S的yaml文
 在k8s-master上执行:
 kubectl create secret docker-registry harbor-login-registry --docker-server=192.168.180.160 --docker-username=jenkins --docker-password=ABCabc-123
 创建yaml文件
 mkdir /data
 cd /data
 vim nginx-deploy.yaml
 apiVersion: apps/v1
 kind: Deployment
 metadata:
 name: nginx
 labels:
 app: nginx
 spec:
 replicas: 1
 selector:
 matchLabels:
 app: nginx
 template:
 metadata:
 labels:
 app: nginx
 spec:
 imagePullSecrets:
 - name: harbor-login-registry
 containers:
 - name: nginx
 image: 192.168.180.160/jenkins/nginx:latest
 imagePullPolicy: Always
 ports:
 - containerPort: 80
vim nginx-svc.yaml
 apiVersion: v1
 kind: Service
 metadata:
 name: svc-nginx
 labels:
 app: svc-nginx
 spec:
 type: NodePort
 ports:
- port: 80
 targetPort: 80
 NodePort: 30088
 selector:
 app: nginx
编写发布到K8S脚本
 在k8s-master的/data目录下创建
 vim deploy.sh
 #!/bin/bash
 cd /data
 newversion= 1 o l d v e r s i o n = 1 oldversion= 1oldversion=(cat nginx-deploy.yaml | grep “image:” | awk -F ‘:’ ‘{print KaTeX parse error: Expected 'EOF', got '}' at position 3: NF}̲') echo "old ve…{oldversion}
 echo “new version is:”KaTeX parse error: Expected 'EOF', got '#' at position 14: {newversion} #̲replace new ver…{oldversion}"’/‘“nginx:${newversion}”’/g’ nginx-deploy.yaml
 #deploy
 kubectl delete -f nginx-deploy.yaml
 kubectl create -f nginx-deploy.yaml
{宿主机(相当于用户电脑)上操作}
 上传Dockerfile及nginx.repo到GitLab
 在宿主机上创建Dockerfile、nginx.repo
 FROM centos:7
 LABEL maintainer bdqn
 RUN yum -y install yum-utils epel-release
 RUN yum -y install nginx
 COPY index.html /usr/share/nginx/html
 RUN chmod 644 /usr/share/nginx/html/index.html
 CMD [“nginx”,“-g”,“daemon off;”]
nginx.repo
 [nginx-stable]
 name=nginx stable repo
 baseurl=http://nginx.org/packages/centos/ r e l e a s e v e r / releasever/ releasever/basearch/
 gpgcheck=1
 enabled=1
 gpgkey=https://nginx.org/keys/nginx_signing.key
 [nginx-mainline]
 name=nginx mainline repo
 baseurl=http://nginx.org/packages/mainline/centos/ r e l e a s e v e r / releasever/ releasever/basearch/
 gpgcheck=1
 enabled=0
 gpgkey=https://nginx.org/keys/nginx_signing.key
通过Git提交到GitLab
在jenkins上构建项目,构建项目时需要注意的地方
 1、要在jenkins服务器上安装git yum install -y git
 2、要在jenkins服务器上设置免密登录到k8s-master
 ssh-keygen
 ssh-copy-id 192.168.180.210
cd /data && kubectl create -f nginx-svc.yaml --validate=false
相关文章:
通过Jenkins将应用发布到K8s1.24.3
一、准备基础环境 cat >> /etc/hosts <<EOF 192.168.180.210 k8s-master 192.168.180.200 k8s-node1 192.168.180.190 k8s-node2 192.168.180.180 gitlab 192.168.180.170 jenkins 192.168.180.160 harbor EOF 配置主机名 hostnamectl set-hostname k8s-master &am…...
正则表达式入门与实践
文章目录 一、为什么要有正则二、正则表达式基础概念三、Pattern与Matcher类的使用(一)Pattern类的常用方法(二)Matcher类的常用方法四、常用正则规则及其含义(一)规范表示(二)数量表示(三)逻辑运算符五、String对正则表达式的支持六、实践演练(一)匹配给定文本中的…...
 
C++初阶(十六)优先级队列
📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、priority_queue的介绍和使用1、priority_queue的介绍2、priority_queue的使用 二、priori…...
 
深入探索C语言中的二叉树:数据结构之旅
引言 在计算机科学领域,数据结构是基础中的基础。在众多数据结构中,二叉树因其在各种操作中的高效性而脱颖而出。二叉树是一种特殊的树形结构,每个节点最多有两个子节点:左子节点和右子节点。这种结构使得搜索、插入、删除等操作…...
如何发现服务器被入侵了,服务器被入侵了该如何处理?
作为现代社会的重要基础设施之一,服务器的安全性备受关注。服务器被侵入可能导致严重的数据泄露、系统瘫痪等问题,因此及时排查服务器是否被侵入,成为了保障信息安全的重要环节。小德将给大家介绍服务器是否被侵入的排查方案,并采…...
 
CSDN一键注释功能
这是什么牛逼哄哄的功能 看这里: 然后: 再试一个: 输出结果是?package yuyi03.interview;/*** ClassName: InterviewTest2* Package: yuyi03.interview* Description:** Author 雨翼轻尘* Create 2023/12/14 0014 0:08*/ publ…...
 
基于JAVA的校园电子商城系统论文
摘 要 网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代,所以对于信息的宣传和管理就很关键。因此校园购物信息的…...
 
直播传媒公司网站搭建作用如何
直播已然成为抖快等平台的主要生态之一,近些年主播也成为了一种新行业,相关的mcn机构直播传播公司等也时有开业,以旗下主播带来高盈利,而在实际运作中也有一些痛点难题: 1、机构宣传展示难 不少散主播往往会选择合作…...
数据结构与算法-动态规划-机器人达到指定位置方法数
机器人达到指定位置方法数 来自左程云老师书中的一道题 【题目】 假设有排成一行的 N 个位置,记为 1~N,N 一定大于或等于 2。开始时机器人在其中的 M 位置上(M 一定是 1~N 中的一个),机器人可以往左走或…...
K8S学习指南(2)-docker的基本使用
文章目录 引言安装 DockerDocker 基本概念1. 镜像(Images)示例:拉取并运行一个 Nginx 镜像 2. 容器(Containers)示例:查看运行中的容器 3. 仓库(Repository)示例:推送镜像…...
 
java 执行linux 命令
文章目录 前言一、linux命令执行二、使用步骤三、踩坑 前言 java 执行linux 命令; 本文模拟复制linux文件到指定文件夹后打zip包后返回zip名称,提供给下载接口下载zip; 一、linux命令执行 linux命令执行Process process Runtime.getRunti…...
 
ubuntu将本机的wifi网络通过网线分享给另一台机器(用于没有有线网络,重装系统后无wifi驱动或者另一台设备没有wifi网卡)
1.将两台机器通过网线连接 2.在pci ethernet中设置选择另一台机器的mac address,ipv4中选择share to other computer,另一台机器上设置为动态ip,连接上之后另一台机器即可上网。...
 
Docker + Jenkins + Gitee 自动化部署项目
1.简介 各位看官老爷,本文为Jenkins实战,注重实际过程,阅读完会有以下收获: 了解如何使用Docker安装Jenkins了解如何使用Jenkins部署maven项目了解如何使用JenkinsGitee实现自动化部署 2.Jenkins介绍 相信,正在读这…...
 
ChatGPT 应用开发(一)ChatGPT OpenAI API 免代理调用方式(通过 Cloudflare 的 AI Gateway)
前言 开发 ChatGPT 应用,我觉得最前置的点就是能使用 ChatGPT API 接口。首先我自己要能成功访问,这没问题,会魔法就可以本地调用。 那用户如何调用到我的应用 API 呢,我的理解是通过用户能访问到的中转服务器向 OpenAI 发起访问…...
 
【TC3xx】GETH
目录 一、RGMII 二、SMI接口 三、TC3xx MCAL 3.1 MCU 3.2 Port 3.3 DMA 3.4 中断配置 3.5 ETH 3.6 集成 一、RGMII TC3xx支持MII/RMII/RGMII三种以太网数据通信接口。其中RGMII经常用于MAC和MAC之间,或MAC与PHY之间的通信,RGMII的带宽可以是10M…...
 
不需要联网的ocr项目
地址 GitHub - plantree/ocr-pwa: A simple PWA for OCR, based on Tesseract. 协议 mit 界面 推荐理由 可以离线使用,隐私安全...
【Git使用总结】
Git使用总结 随着软件开发和团队协作的日益重要,Git作为一种强大的版本控制系统,已经成为了开发人员不可或缺的工具。本文将对Git的使用进行总结,以帮助读者更好地掌握Git的用法和技巧。 一、Git的基本概念 在开始使用Git之前,…...
 
仿照MyBatis手写一个持久层框架学习
首先数据准备,创建MySQL数据库mybatis,创建表并插入数据。 DROP TABLE IF EXISTS user_t; CREATE TABLE user_t ( id INT PRIMARY KEY, username VARCHAR ( 128 ) ); INSERT INTO user_t VALUES(1,Tom); INSERT INTO user_t VALUES(2,Jerry);JDBC API允…...
 
关东升老师极简系列丛书(由清华大学出版社出版)
极简系列丛书,编程学习新体验 在这个科技日新月异的时代,编程已经成为了一种必备技能。但是面对各种复杂的编程语言,你是否也曾感到过迷茫和困惑?由清华大学出版社出版的“极简系列丛书”就是为了帮助你解决这个问题。 这套丛书…...
要求CHATGPT高质量回答的艺术:提示工程技术的完整指南—第 27 章:如何避开和绕过所有人工智能内容检测器
要求CHATGPT高质量回答的艺术:提示工程技术的完整指南—第 27 章:如何避开和绕过所有人工智能内容检测器 使用高易错性和突发性方法 与人工智能生成的文本相比,人类写作往往具有更多的突发性,这是由于人类往往比人工智能生成的文…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
 
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
 
【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
c# 局部函数 定义、功能与示例
C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...
 
Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...
