通过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): (idu):(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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/219738.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue 3 开发中遇到的问题及解决方案(fix bug)

开发环境&#xff1a;mac系统&#xff0c;node版本&#xff1a; 16.15.0 版本兼容问题 vite v3.2.4 building for development... hasInjectionContext is not exported by node_modules/pinia/node_modules/vue-demi/lib/index.mjs, imported by node_modules/pinia/dist/pini…

深圳移动与大富科技助力深圳人工智能教育高质量发展

12月12日&#xff0c;中国移动通信集团广东有限公司深圳分公司(以下简称“深圳移动”) 与大富科技&#xff08;安徽&#xff09;股份有限公司&#xff08;以下简称“大富科技”&#xff09;在中国移动深圳信息大厦签署“战略合作框架协议”&#xff0c;共同推进人工智能教育、I…

常见的工作流编排引擎

常见工作流框架&#xff1a;微服务编排引擎 工作流框架还是比较多的&#xff0c;按照语言分类的话&#xff0c;有 Java: jBPM、Activiti、SWF PHP: Tpflow、PHPworkflow Go: Cadence&#xff08;Cadence由Uber开发并开源&#xff0c;Maxim Fateev是Cadence的主架构师&#…

解决文件默认打开程序选择被联想管家劫持

问题描述 当选择文件右键->“打开方式”->“选择其他应用”时&#xff0c;弹出了联想电脑管家的软件安装推荐。一不小心就会下载了它推荐的软件。特恶心。 问题原因 这个推荐软件的程序&#xff0c;是联想开发的一个叫“LeASOpen”的垃圾软件。联想把系统右键菜单“选…

Java面试题1-10

1、一个".java"源文件中是否可以包括多个类&#xff08;不是内部类&#xff09;&#xff1f;有什么限制&#xff1f; 可以有多个类&#xff0c;但只能有一个public的类&#xff0c;并且public的类名必须与文件名相一致。 2、Java有没有goto? java中的保留字&am…

K8S(七)—污点、容忍

目录 污点、容忍污点&#xff08;Taints&#xff09;&#xff1a;容忍&#xff08;Tolerations&#xff09;&#xff1a;如何一起使用污点和容忍&#xff1a;操作符&#xff08;Equal、Exists&#xff09;例子基于污点的驱逐基于节点状态添加污点 污点、容忍 官网地址&#xf…

【大数据】详解 AVRO 格式

详解 AVRO 格式 1.Avro 介绍2.schema2.1 原始类型2.2 复杂类型2.2.1 Records2.2.2 Enums2.2.3 Arrays2.2.4 Maps2.2.5 Unions2.2.6 Fixed 3.Avro 的文件存储格式3.1 数据编码3.1.1 原始类型3.1.2 复杂类型 3.2 存储格式3.3 存储格式 4.小结 1.Avro 介绍 Apache Avro 是 Hadoop…

three.js(一)

文章目录 three.js环境搭建正文补充 示例效果知识点补充1:一个标准的html知识点补充2:原生的前端框架和Vue框架的区别原生的前端框架Vue框架声明式编程和响应式编程 three.js环境搭建 正文 搭建 Three.js 的环境通常包括以下几个步骤&#xff1a; 1.创建项目目录&#xff1a…

Spark读写MySQL数据库

Spark读写MySQL数据库 文章目录 Spark读写MySQL数据库一、读取数据库&#xff08;一&#xff09;通过RDD的方式读取MySQL数据库&#xff08;二&#xff09;通过DataFrame的方式读取MySQL数据库 二、添加数据到MySQL&#xff08;一&#xff09;通过RDD的方式插入数据到MySQL&…

初级数据结构(三)——栈

文中代码源文件已上传&#xff1a;数据结构源码 <-上一篇 初级数据结构&#xff08;二&#xff09;——链表 | 初级数据结构&#xff08;四&#xff09;——队列 下一篇-> 1、栈的特性 1.1、函数栈帧简述 即使是刚入门几天的小白&#xff0c;对栈这个字…

基于YOLOv8深度学习的吸烟/抽烟行为检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

基于SSM实现的精品课程网站

一、系统架构 前端&#xff1a;jsp | js | css | jquery | bootstrap 后端&#xff1a;spring | springmvc | mybatis 环境&#xff1a;jdk1.7 | mysql | maven | tomcat 二、代码及数据库 三、功能介绍 01. 登录页 02. web端-首页 03. web端-视频教程 04. web端-资料…

RK3568全国产化多网口板卡带poe供电,支持鸿蒙麒麟系统

信迈XM-3568-01主板采用瑞芯微RK3568四核Cortex-A55 处理器&#xff0c;主频最高可达2.0GHz&#xff0c;效能有大幅提升最高可配8GB内存容量&#xff0c;频率高达1600MHz&#xff1b;支持全链路ECC&#xff0c;让数据更安全可靠配置双千兆自适应RJ45以太网口&#xff0c;并扩展…

Unity | Shader基础知识(第三集:案例<对材质颜色进行干预>)

一、本节介绍 上一集&#xff0c;我们学到&#xff0c;shader的语法格式&#xff0c;这一集&#xff0c;我们要学习第二简单的shader案例&#xff0c;对shader颜色的简单干预。 二、理论介绍 1.获取位置信息 Unity | Shader基础知识&#xff08;什么是shader&#xff09;_u…

stm32---串口使用

### 串口数据发送 #include <string.h> //先引用这个字符串操作库。char str[]" HALLO WORD "&#xff1b; //定义这个数组字符串。HAL_UART_Transmit(&huart2, str, strlen(str), 100); //&huart2,这里他是一个指针&#xff0c;所以要用取地址符…

使用python的socketserver使服务器支持多客户端访问

1 背景 近期在做机器人集群的分布式控制&#xff0c;涉及到了机器人之间的交流工作&#xff0c;其中&#xff0c;每一台机器人都需要与多个机器人进行交流。 考虑使用python的socket来做&#xff0c;但简单测试了一下&#xff0c;socket模块不能方便的实现一个服务器与多客户…

C_9练习题答案

一、单项选择题(本大题共20小题,每小题2分,共40分。在每小题给出的四个备选项中,选出一个正确的答案,并将所选项前的字母填写在答题纸的相应位置上。) C语言程序中,要使用数学库函数(例sqrt、sin等),需要在程序最前面加上包含文件的预处理命令&#xff08;C)。 A. #include &l…

java内部类的使用

什么是内部类&#xff1a;在一个类的内部定义的类称为内部类 为什么用内部类&#xff1a;完成某些功能只在某个具体的外部类中使用&#xff0c;其他地方不需要再使用&#xff0c;这是可以将此功能定义在一个内部类中&#xff0c;而不需要单独创建一个类。 用内部类的好处在内…

在WPF窗口中增加水印效果

** 原理&#xff1a; ** 以Canvas作为水印显示载体&#xff0c;在Canvas中创建若干个TextBlock控件用来显示水印文案&#xff0c;如下图所示 然后以每一个TextBlock的左上角为中心旋转-30&#xff0c;最终效果会是如图红线所示&#xff1a; 为了达到第一行旋转后刚好与窗口…

日常记录软件操作

webstorm下载集成码云步骤 1&#xff1a;file>>>settings>>plugins &#xff0c;在marketplace&#xff0c;下载gitee&#xff1b; 2&#xff1a;重启编辑器 3&#xff1a;file>>>settings>>>version control >>> gitee ,添加对应用…