K8s CICD实战

news2024/11/13 15:40:46

K8s Network之Ingress

 

PDF路径:

链接:https://pan.baidu.com/s/17DxUD8KN7pU1UKIR1Ejemg 
提取码:dwf5

一、如果项目需要修改某些代码,怎么办?

(1)重新打成jar包

(2)重新制作Dockerfile文件

(3)重新push image

(4)重新拉取镜像运行

 二、准备环境

1.安装配置Git

(1)下载安装git[略]

(2)配置并生成ssh_key    

   git config --global user.name "hiourearth"

   git config --global user.email "hiourearth@gmail.com"

   ssh-keygen -t rsa -C "hiourearth@gmail.com"  

(3)打开C:\Users\Jack\.ssh,查看id_rsa.pub文件中的值

2.搭建并配置Gitlab

refer:https://about.gitlab.com/install/#centos-7  下载安装极狐GitLab 免费版

(1)说明

安装gitlab的机器至少要有4G的内存,因为gitlab比较消耗内存

(2)安装必要的依赖并配置

   sudo yum install -y curl policycoreutils-python openssh-server

   sudo systemctl enable sshd

   sudo systemctl start sshd

   sudo firewall-cmd --permanent --add-service=http

   sudo systemctl reload firewalld

(3)添加gitlab仓库地址

    # 创建gitlab-ce.repo文件

      cd /etc/yum.repos.d/

      vim gitlab-ce.repo

    # 文件内容为

    [gitlab-ce]

    name=Gitlab CE Repository

    baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/

    gpgcheck=0

    enabled=1

(4)设置gitlab域名并安装

   sudo EXTERNAL_URL="https://gitlab.mars.com" yum install -y gitlab-ce

(5)配置windows的hosts文件

(6)访问:https://gitlab.mars.com

(7)查看root账号的密码,后面可以修改一下

   cat /etc/gitlab/initial_root_password

(8)gitlab常见操作

  (1)vim /etc/gitlab/gitlab.rb     找到对应修改内容

  (2)gitlab-ctl reconfigure       重新加载一下配置

  (3)gitlab-ctl status               查看gitlab状态

  (4)sudo gitlab-ctl stop         停止gitlab

  (5)sudo gitlab-ctl start         开启gitlab

3.项目关联Gitlab

(1)将公钥上传到gitlab:右上角->Preferences->SSH Keys

(2)在gitlab上创建名称为“springboot-demo”的project

 (3)将本地项目push到gitlab上

      # 使用terminal打开项目的根目录

      git init    

      git add .    

      git commit -m "first commit"

      git remote add jack-gitlab git@gitlab.jack.com:root/springboot-demo.git    

      git remote -v

      git push -u jack-gitlab master

4.安装配置Jenkins

官网:https://jenkins.io/     下载最新版需要jdk环境jdk11  选用节点:192.168.0.53

(1)下载jenkins.war

(2)运行jenkins

   nohup java -jar jenkins.war --httpPort=8888 & lsof -i:8888 tail -f nohup.out

(3)浏览器访问:192.168.0.53:8888

       密码: cat /root/.jenkins/secrets/initialAdminPassword

      然后会等待一会,包括镜像拉取以及插件安装[选择推荐的插件]

 

(4)新建用户

(5)配置Jenkins URL

(6) 配置java maven和git等  

Dashboard-> Manage Jenkins-> Global Tool Configuration

  # 配置一下w2这台机器的git信息

   git config --global user.name "hiourearth"

   git config --global user.email "hiourearth@gmail.com"

   ssh-keygen -t rsa -C "hiourearth@gmail.com"

   cat /root/.ssh/id_rsa.pub    

  # 将公钥上传到gitlab上

5.准备Docker Hub和K8s集群 

(1)Docker Hub:直接使用阿里容器镜像仓库,在w2这台机器上登录一下

  sudo docker login --username=hiourearth registry.cn-hangzhou.aliyuncs.com

(2)K8s集群:就用之前搭建的3台机器组成的K8s集群

6.梳理一下目前的环境

    Gitlab: git@gitlab.jack.com:root/springboot-demo.git

    Jenkins: 192.168.2.53:8888

    Docker hub: hiourearth

    K8s cluster: 192.168.0.51 52 53

7.Jenkins拉取项目

(1)创建Jenkins的Task

(2)在w2上配置hosts: vim /etc/hosts  

     192.168.0.8 gitlab.jack.com

     # 测试git是否配置成功

      ssh -T git@gitlab.jack.com

(3)编写拉取代码的脚本,然后点击“保存”

      node {   def mvnHome   stage('Git Pull') { // for display purposes      

                  git    'git@gitlab.jack.com:root/springboot-demo.git'

        } }

(4)来到“Dashboard”,并点击执行按钮

(5)到w2这台机器上,观察/root/.jenkins/workspace目录,看看项目是否拉取成功

    cat /root/.jenkins/workspace/springboot-

    demo/src/main/java/com/jack/springbootdemo/SpringbootDemoApplication.java  

8.Jenkins Maven打包

(1)新增一个脚本语句

  node {   def mvnHome  

             stage('Git Pull') { // for display purposes      

                git 'git@gitlab.jack.com:root/springboot-demo.git'

             }    

            stage('Maven Build') {    

                sh "mvn clean package"

              }  

       }

(2)观察worspace目录下是否生成target文件

 9.构建和push镜像

 (1)来到w2上的workspace目录:cd /root/.jenkins/workspace

 (2)在scripts目录下准备一个文件,名称为springboot-demo-build-image.sh

       mkdir /root/.jenkins/workspace/scripts/

       vim /root/.jenkins/workspace/scripts/springboot-demo-build-image.sh

 (3)编辑sh文件

   # 进入到kubernetes-demo目录

    cd ../springboot-demo

   # 编写Dockerfile文件

   cat Dockerfile FROM openjdk:8-jre-alpine COPY target/springboot-demo-0.0.1-       SNAPSHOT.jar springboot-demo.jar ENTRYPOINT ["java","-jar","springboot-demo.jar"]       EOF

 echo "Dockerfile created successfully!"

   # 基于指定目录下的Dockerfile构建镜像

  docker build -t registry.cn-hangzhou.aliyuncs.com/jack-kubernetes/springbootdemo-     image .

  # push镜像,这边需要阿里云镜像仓库登录,记得提前在w2上登录一下

  docker push registry.cn-hangzhou.aliyuncs.com/jack-kubernetes/springboot-demoimage

(4)踩坑经验

   # 01 文件权限

   /root/.jenkins/workspace/scripts/springboot-demo-build-image.sh: Permission denied    #    解决

   chmod +x /root/.jenkins/workspace/scripts/springboot-demo-build-image.sh

   # 02 docker没有运行

  Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker       daemon running?    

# 解决

  systemctl start docker   systemctl enable docker    

# 03 push权限

  docker login --username=hiourearth registry.cn-hangzhou.aliyuncs.com

(5)jenkins上添加脚本

   node {   def mvnHome  

      stage('Git Pull') { // for display purposes      

           git 'git@gitlab.jack.com:root/dockerfile-demo.git'

        }      

      stage('Maven Build') {      

           sh "mvn clean package"

        }

     stage('Build Image') {      

        sh "/root/.jenkins/workspace/scripts/springboot-demo-build-image.sh"

       }

     }

10.K8s拉取镜像并运行 

(1)在/root/.jenkins/workspace/scripts/目录下创建springboot-demo.yaml

# 以Deployment部署Pod

apiVersion: apps/v1

kind: Deployment

metadata:

     name: springboot-demo

spec:

   selector:

       matchLabels:

           app: springboot-demo

  replicas: 1

  template:

    metadata:

      labels:

         app: springboot-demo

    spec:

      containers:     - name: springboot-demo

          image: registry.cn-hangzhou.aliyuncs.com/jack-kubernetes/springbootdemo-image

          ports:       - containerPort: 8080

---

# 创建Pod的Service

apiVersion: v1

kind: Service

metadata:

     name: springboot-service

spec:

   ports: - port: 80

                protocol: TCP

               targetPort: 8080

   selector:

    app: springboot-demo

---

# 创建Ingress,定义访问规则,一定要记得提前创建好nginx ingress controller

apiVersion: networking.k8s.io/v1

kind: Ingress

metadata:

     name: springboot-ingress

     annotations:

         kubernetes.io/ingress.class: nginx

spec:

rules: - host: springboot.jack.com

  http:

    paths:     - pathType: Prefix

      path: /

      backend:

        service:

          name: springboot-service

          port:

            number: 80

(2)在/root/.jenkins/workspace/scripts/目录创建K8s-deploy-springboot-demo.sh

     kubectl delete -f /root/.jenkins/workspace/scripts/springboot-demo.yaml

     kubectl apply -f /root/.jenkins/workspace/scripts/springboot-demo.yaml

     echo "K8s deploy success!"

(3)踩坑经历

    # 01 权限

     /root/.jenkins/workspace/scripts/K8s-deploy-springboot-demo.sh: Permission denied  

     # 解决

   chmod +x /root/.jenkins/workspace/scripts/K8s-deploy-springboot-demo.sh

    # 02 w2执行不了kubectl

      切换到master上,cd ~  --->  cat .kube/config  --->复制内容

      切换到worker02上   cd ~  ---> 新建文件 .kube/config   --->粘贴内容

(4)增加Jenkins中的脚本

     node {   def mvnHome  

        stage('Git Pull') { // for display purposes        

              git 'git@gitlab.jack.com:root/springboot-demo.git'

        }  

        stage('Maven Build') {    

              sh "mvn clean package"

        }    

        stage('Build Image') {    

               sh "/root/.jenkins/workspace/scripts/springboot-demo-build-image.sh"

        }    

        stage('K8S Deploy') {    

               sh "/root/.jenkins/workspace/scripts/K8s-deploy-springboot-demo.sh"

        }

   }

(5)jenkins构建,并查看K8s集群中image和资源

         kubectl get pods

         kubectl get deploy

         kubectl get service  

(6)浏览器访问

        http://springboot.mars.com/K8s

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

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

相关文章

javaSE - 异常(Exception 或 RuntimeException)

一、异常的背景 1.1、初识异常 其实在我们开发中,就是代码出现意外状况。影响到程序的运行。 其实,在我们接触代码开始,就一直在接触异常,只是从来没有分类。 这点在java中,更加明显。 现在我们就来基本了解一下异常。…

web靶场搭建之帝国cms7.5

目录 一、漏洞描述 二、漏洞环境 三、环境搭建 四、漏洞复现 后台getshell(CVE-2018-18086) 漏洞原理: 漏洞复现: 源码审计: 代码注入 (CVE-2018-19462) 漏洞原理: 漏洞复现: 源码审计: 后台X…

Innodb存储引擎-表(逻辑存储结构、行记录格式、数据页结构)

文章目录表索引组织表InnoDB逻辑存储结构表空间(tablespace)段(segment)区(extent)页(page)行(record)行记录格式compactRedundant行溢出数据Compressed 和 Dynamic 行记录格式CHAR的行结构存储数据页结构File Header & Page Header & File TrailerInfimum 和 Supremum…

springboot《1》

map的映射 package com.kob.backend.controller.pk;import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import java.util.HashMap; import java.util.Map;RestControllerRequestMapping("…

国产软件的「硬替代」与「软着陆」之辨

作者 | 曾响铃 文 | 响铃说 疫情倒逼、政策驱动、市场化博弈、国际形势拉锯等等一系列的因素正在综合影响国产软件的走势。在国内,国产软件替代化进程持续加速,国产软件正迎来逆势增长的“窗口期”。 与此同时,从中央到地方,政…

项目中pom.xml文件变灰且中间有横杠改怎么解决?

目录 问题描述: 问题解决: 💟 创作不易,不妨点赞💚评论❤️收藏💙一下 问题描述: 项目中的部分pom.xml文件是没问题的,部分pom.xml文件没有被识别,变灰且有横杠。 原因:操作的时…

力扣(LeetCode)163. 缺失的区间(C++)

模拟 将 lowerlowerlower 和 upperupperupper 加入数组,避免边界判断。 一次遍历,相邻元素差 111 ,无缺失;相邻元素差 222 ,缺失中间的一个数;相邻元素相差大于 222 ,缺失中间一段数。根据格式…

Less知识点整理

Less 官方文档 在线Less编译工具 Less主要语法 1、变量xxx 2、嵌套 规则嵌套和冒泡 规则(例如 media 或 supports)可以与选择器以相同的方式进行嵌套。 规则会被放在前面,同一规则集中的其它元素的相对顺序保持不变。这叫做冒泡&#xff08…

计算机毕设Python+Vue新能源汽车销售管理系统(程序+LW+部署)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Oracle21C:Windows版本的安装、卸载、环境变量配置、避坑指南|ORA-12514|为什么安装目录没有bin目录

前言 1、适读对象 安装Oracle21C过程中,被各种报错反复折磨,终不得其法,难以正常使用Oracle。 2、各种工具下载 1)Oracle下载地址:官网下载页面 2)navecat下载地址:navecate 2)sqlp…

基于JAVAWEB的湛江海鲜批发选购系统

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字):

1W字文:什么是 回表查询、索引覆盖、最左匹配原则?聚集索引、非聚集索引的区别?

文章很长,而且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》 持续更新 史上最全 面试必备 2000页 面试必备 大厂必备 涨薪必备 免费赠送 经典…

超市进销存系统的设计与实现

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字): 该小型超市进销存系统主要针对模块管理,用户管理,进货管理,销售管理, 库…

HTTP 协议详解

目录 前言 1、HTTP 介绍 2、URL介绍 1)了解 URL 和 URI 2)URL 格式 3)URL encode 3、HTTP 协议格式 1)请求报文格式 2)响应报文格式 3)协议格式总结 4、HTTP 请求(Request&#xff0…

JavaEE【Spring】:SpringBoot 热部署

文章目录一、添加框架二、Settings 开启项目自动编译三、开启运行中热部署1、低版本配置(idea 2021.2 之前的版本)2、高版本设置(idea 2021.2 之后的版本)四、使用 Debug 启动(非Run)一、添加框架 增加 sp…

玩以太坊链上项目的必备技能(事件-Solidity之旅十二)

事件(Events) Solidity 中的事件(Events)与任何一种编程语言中事件(Events)一样。 一个事件(Events)是一个合约可继承的成员,它在触发(emit)时存…

机器学习之分类-决策树随机森林

决策树 原理(信息论) 信息熵 信息:消除随机不定性的东西信息熵公式,单位bit H(X)−∑i1n(P(xi)log⁡bP(xi))H(X)-\sum^{n}_{i1}(P(x_i)\log_{b}P(x_i)) H(X)−i1∑n​(P(xi​)logb​P(xi​)) 信息增益 特征A对训练数据集D的信息…

Arthas常用命令和实践分享

一、序言 通常,本地开发环境无法访问生产环境。在实际工作中,我们会经常遇到在客户现场出现各种奇怪的问题,想要查看具体某个具体的对象,可能要打镜像,还要走银行内部的流程,整体很耗费时间,而…

【Python机器学习】Mean Shift、Kmeans聚类算法在图像分割中实战(附源码和数据集)

需要源码和数据集请点赞关注收藏后评论区留言私信~~~ Mean Shift算法是根据样本点分布密度进行迭代的聚类算法,它可以发现在空间中聚集的样本簇。簇中心是样本点密度最大的地方。 Mean Shift算法寻找一个簇的过程是先随机选择一个点作为初始簇中心,然后…

容器网络访问

网络分类 docker网络解决方案基于openstack平台,后演化为两派:一个是docker原生的CNM(Container Network Model),另一个是兼容性更好的CNI(Container Network Interface) 单主机网络&#xff1…