热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

kubernetes+rancher使用教程

目录kubernetes介绍官方文档kubernetes(K8S)概念服务器部署时代变迁为什么需要Kubernetes,它能做什么?Pods控制器Service(服务发现)本教程版

目录

  • kubernetes 介绍
    • 官方文档
    • kubernetes(K8S)概念
    • 服务器部署时代变迁
    • 为什么需要 Kubernetes,它能做什么?
    • Pods
    • 控制器
    • Service(服务发现)
  • 本教程版本
  • sealos 介绍及安装
    • sealos 介绍
    • 部署 sealos
    • 不选择 sealos 部署 K8S 的原因
  • RKE 安装 K8S
  • rancher 备份与升级
    • 备份
    • 升级 Rancher
  • 集群定时备份与恢复
    • 集群定时备份
      • 集群定时备份
      • 查看备份及备份文件位置
      • 备份文件迁移
    • 集群恢复
  • 工作负载
    • 部署工作负载
    • 升级工作负载
    • 回滚工作负载
  • 负载均衡
  • 监控
    • 监控范围
    • 集群监控
    • 项目监控
  • 通知配置
  • 告警配置
    • 告警范围
    • 集群告警配置
    • Prometheus 表达式
  • 快速添加工作负载 pod
  • 快速新增/删除集群节点
    • 快速新增集群节点
    • 快速删除集群节点
  • 集群克隆
    • 支持集群类型
    • 前提条件
      • 安装 Rancher CLI
      • 生成 API Key
    • 克隆集群
      • 导出集群配置
      • 修改集群配置
      • 启动克隆的集群
  • 流水线( CI/CD)
    • kubectl 安装
    • kubectl 配置
    • Jenkins 流水线
      • Jenkins 插件安装
      • 服务器环境要求
      • Docker 私服配置
      • 配置权限
      • 新建任务
  • Yaml 详解

 

kubernetes 介绍

官方文档

kubernetes 官方文档
rancher 官方文档

kubernetes(K8S)概念

名称 Kubernetes 源于希腊语,意为 “舵手” 或 “飞行员”。Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。


服务器部署时代变迁

在这里插入图片描述


  • 传统部署时代: 早期,组织在物理服务器上运行应用程序。无法为物理服务器中的应用程序定义资源边界,这会导致资源分配问题。例如,如果在物理服务器上运行多个应用程序,则可能会出现一个应用程序占用大部分资源的情况,结果可能导致其他应用程序的性能下降。一种解决方案是在不同的物理服务器上运行每个应用程序,但是由于资源利用不足而无法扩展,并且组织维护许多物理服务器的成本很高。
  • 虚拟化部署时代: 作为解决方案,引入了虚拟化功能,它允许您在单个物理服务器的 CPU 上运行多个虚拟机(VM)。虚拟化功能允许应用程序在 VM 之间隔离,并提供安全级别,因为一个应用程序的信息不能被另一应用程序自由地访问。
    因为虚拟化可以轻松地添加或更新应用程序、降低硬件成本等等,所以虚拟化可以更好地利用物理服务器中的资源,并可以实现更好的可伸缩性。
    每个 VM 是一台完整的计算机,在虚拟化硬件之上运行所有组件,包括其自己的操作系统。
  • 容器部署时代: 容器类似于 VM,但是它们具有轻量级的隔离属性,可以在应用程序之间共享操作系统(OS)。因此,容器被认为是轻量级的。容器与 VM 类似,具有自己的文件系统、CPU、内存、进程空间等。由于它们与基础架构分离,因此可以跨云和 OS 分发进行移植。

为什么需要 Kubernetes,它能做什么?

容器是打包和运行应用程序的好方式。在生产环境中,您需要管理运行应用程序的容器,并确保不会停机。例如,如果一个容器发生故障,则需要启动另一个容器。如果系统处理此行为,会不会更容易?

这就是 Kubernetes 的救援方法!Kubernetes 为您提供了一个可弹性运行分布式系统的框架。Kubernetes 会满足您的扩展要求、故障转移、部署模式等。例如,Kubernetes 可以轻松管理系统的 Canary 部署。

Kubernetes 为您提供:

Pods


  • Pod 是 Kubernetes 应用程序的基本执行单元,即它是 Kubernetes 对象模型中创建或部署的最小和最简单的单元。Pod 表示在 集群 上运行的进程。
  • Pod 封装了应用程序容器(或者在某些情况下封装多个容器)、存储资源、唯一网络 IP 以及控制容器应该如何运行的选项。
  • Pod 中的所有容器共享一个 IP 地址和端口空间,并且可以通过 localhost 互相发现。他们也能通过标准的进程间通信(如 SystemV 信号量或 POSIX 共享内存)方式进行互相通信。不同 Pod 中的容器的 IP 地址互不相同,没有 特殊配置 就不能使用 IPC 进行通信。这些容器之间经常通过 Pod IP 地址进行通信。
  • 在 Docker 体系的术语中,Pod 被建模为一组具有共享命名空间和共享文件系统卷 的 Docker 容器。
    在这里插入图片描述

控制器


  • 在机器人技术和自动化中,控制回路是一个非终止回路,用于调节系统状态。
  • 这是一个控制环的例子:房间里的温度自动调节器。
    当你设置了温度,告诉了温度自动调节器你的期望状态。房间的实际温度是当前状态。通过对设备的开关控制,温度自动调节器让其当前状态接近期望状态。
  • 控制器通过 apiserver 监控集群的公共状态,并致力于将当前状态转变为期望的状态。
  • 控制器可以为您创建和管理多个 Pod,管理副本和上线,并在集群范围内提供自修复能力。 例如,如果一个节点失败,控制器可以在不同的节点上调度一样的替身来自动替换 Pod。

控制器包含以下几种

1、Deployment:

部署最适合用于无状态应用程序(即,当您不必维护工作负载的状态时)。由部署工作负载管理的Pod被视为独立且可处理的。如果Pod遇到中断,Kubernetes会将其删除,然后重新创建。示例应用程序将是Nginx Web服务器。

2、StatefulSets

与部署相反,当您的应用程序需要维护其身份并存储数据时,最好使用StatefulSets。应用程序将类似于Zookeeper,即需要数据库存储的应用程序。

3、DaemonSets

守护程序确保集群中的每个节点都运行一个pod副本。对于要收集日志或监视节点性能的用例,这种类似于守护程序的工作负载效果最佳。

4、Jobs

作业启动一个或多个吊舱,并确保成功终止指定数量的吊舱。与管理进行中的所需应用程序状态相反,作业最好用于完成有限任务。

5、CronJobs

CronJobs与工作相似。但是,CronJobs会按基于cron的时间表运行完毕。


我第一次看到 Deployment 的描述的时候,非常费解,什么叫做无状态应用程序,什么叫有状态?在搜索了较多资料以后,这里给出我个人的一些理解:

Service(服务发现)

Kubernetes 中的服务(Service)是一种抽象概念,它定义了 Pod 的逻辑集和访问 Pod 的协议。Service 使从属 Pod 之间的松耦合成为可能。

尽管每个 Pod 都有一个唯一的 IP 地址,但是如果没有 Service ,这些 IP 不会暴露在群集外部。Service 允许您的应用程序接收流量。Service 也可以用在 ServiceSpec 标记type的方式暴露

Service 匹配一组 Pod 是使用 标签(Label)和选择器(Selector), 它们是允许对 Kubernetes 中的对象进行逻辑操作的一种分组原语。标签(Label)是附加在对象上的键/值对。


在这里插入图片描述

本教程版本

Rancher 版本 v2.4.5

Kubernetes 版本: v1.18.6

sealos 介绍及安装

sealos 介绍

sealos官网

sealos旨在做一个简单干净轻量级稳定的kubernetes安装工具,能很好的支持高可用安装。 其实把一个东西做的功能强大并不难,但是做到极简且灵活可扩展就比较难。

所以在实现时就必须要遵循这些原则。

sealos特性与优势:

部署 sealos


# 下载并安装sealos, sealos是个golang的二进制工具,直接下载拷贝到bin目录即可
wget https://github.com/fanux/sealos/releases/download/v3.0.1/sealos && \chmod +x sealos && mv sealos /usr/bin

不选择 sealos 部署 K8S 的原因

sealos 部署 K8S 也是非常方便,只需一行命令即可,但是既然使用了 Rancher 作为管理工具, Rancher 官方文档中描述到了很多针对 K8S 的便捷功能只支持由 Rancher Kubernetes Engine (RKE) 部署的 K8S ,例如证书过期定时提醒,定时备份,升级等功能,所以决定重装 K8S 集群,使用 RKE 安装 K8S 集群

RKE 安装 K8S

我原先有安装 K8S 集群,这里需要卸载,裸机安装的同学跳过第一步即可

  1. 卸载原有 K8S


sealos clean --master 主机IP --node 节点IP --user root --passwd 密码

在这里插入图片描述

2. 关闭selinux


#闭swap分区【虚拟内存】并且永久关闭虚拟内存
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
#关闭selinux
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

  1. 登录 Rancher ,创建 K8S 集群
    在这里插入图片描述
  2. 选择自定义
    在这里插入图片描述
  3. 输入名称,选择 K8S 版本,其他默认,点击下一步
    在这里插入图片描述
  4. 勾选 etc 和 control ,复制命令到主机上运行
    在这里插入图片描述
    在这里插入图片描述
  5. 仅选择 worker ,复制命令到节点服务器上运行
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  6. 等待 K8S 部署成功以后可以看到 K8S 集群已经是 Active 状态,版本是 1.18.6
    在这里插入图片描述

rancher 备份与升级

几个月过期 ,rancher 已经更新了2.4.0+版本 ,赶紧试试最新版本的功能

备份

  1. 备份现有容器数据


# 停止 rancher 容器
docker stop 容器名
# 对旧 rancher 创建数据容器
docker create --volumes-from stoic_sutherland --name rancher-data rancher/rancher:v2.3.3

stoic_sutherland 是我 rancher 的容器名

v2.3.3 是你的 rancher版本


  1. 创建一个备用压缩包
    如果升级期间出现问题,则此tarball将用作回滚点。使用以下命令,创建压缩包


docker run --volumes-from rancher-data -v $PWD:/backup busybox tar zcvf /backup/rancher-data-backup-v2.3.3-20200716.tar.gz /var/lib/rancher


# 查看当前目录
ls

看到备份数据压缩包已经成功

在这里插入图片描述

升级 Rancher

3.部署

根据自己当时最新版本号修改命令最后的版本号


# 拉取最新镜像
docker pull rancher/rancher:v2.4.5
# 运行容器,这里 rancher 是使用默认的自签名证书来部署,如果有需求请自行根据官网文档修改命令
docker run -d --volumes-from rancher-data \--restart=unless-stopped \-p 80:80 -p 443:443 \rancher/rancher:v2.4.5

升级成功,访问 rancher
在这里插入图片描述

集群定时备份与恢复

集群定时备份

集群定时备份

rancher v2.2.0 以后开始支持对于 RKE 安装 K8S 集群定时快照备份功能

这里介绍 rancher v2.4.0+ 版本的快照功能使用
在这里插入图片描述
在这里插入图片描述

这里可以配置定时备份 etcd 的频率(小时)和备份数,备份的文件路径在 /opt/rke/etcd-snapshots 下

查看备份及备份文件位置

在这里插入图片描述

在工具中的备份,可以查看现有所有备份

备份文件迁移

集群恢复

在这里插入图片描述
在这里插入图片描述

选择对应时间戳的备份数据,就可以将集群恢复,由于快照中现已包含Kubernetes版本,因此可以将群集还原到先前的Kubernetes版本。

如果需要快照中的集群,则快照的多个组件允许您从以下选项中进行选择:

Restore just the etcd contents:此还原类似于在v2.4.0之前的Rancher中还原快照。

恢复etcd和Kubernetes版本:如果Kubernetes升级是您的集群出现故障的原因,并且您尚未进行任何集群配置更改,则应使用此选项。

恢复etcd,Kubernetes版本和集群配置:如果在升级时同时更改了Kubernetes版本和集群配置,则应使用此选项。


工作负载

部署工作负载

在这里插入图片描述

点击工作负载,点击部署服务

工作负载有多种类型
在这里插入图片描述

Kubernetes将工作负载分为不同的类型。Kubernetes支持的最受欢迎的类型是:

1、Deployment:

部署最适合用于无状态应用程序(即,当您不必维护工作负载的状态时)。由部署工作负载管理的Pod被视为独立且可处理的。如果Pod遇到中断,Kubernetes会将其删除,然后重新创建。示例应用程序将是Nginx Web服务器。

2、StatefulSets

与部署相反,当您的应用程序需要维护其身份并存储数据时,最好使用StatefulSets。应用程序将类似于Zookeeper,即需要数据库存储的应用程序。

3、DaemonSets

守护程序确保集群中的每个节点都运行一个pod副本。对于要收集日志或监视节点性能的用例,这种类似于守护程序的工作负载效果最佳。

4、Jobs

作业启动一个或多个吊舱,并确保成功终止指定数量的吊舱。与管理进行中的所需应用程序状态相反,作业最好用于完成有限任务。

5、CronJobs

CronJobs与工作相似。但是,CronJobs会按基于cron的时间表运行完毕。


填入 docker 镜像名
在这里插入图片描述
这里的镜像名称可以指定获取镜像的服务器,可以指定 dockerhub 或者私服(例如registry.gitlab.com/user/path/image:tag),如果不指定默认从 Docker Hub 上获取镜像,如果没有指定 tag,则默认使用最新镜像。

配置端口映射
在这里插入图片描述

这里网络模式写的很清楚,不再赘述

打开高级选项
在这里插入图片描述

因为笔者这里使用的是服务器上的本地镜像,所以将镜像拉取策略改为不存在则拉取
在这里插入图片描述

点击启动,稍等片刻工作负载就启动完成
在这里插入图片描述

升级工作负载

1、编辑负载
在这里插入图片描述

2、更新 docker 镜像版本
在这里插入图片描述

3、查看默认升级策略是否需要修改
在这里插入图片描述

4、点击升级

回滚工作负载

1、从“ 全局”视图中,打开运行要回滚的工作负载的项目。

2、找到您要回滚的工作负载,然后选择“ 垂直⋮(…)>回滚”。

3、选择要回滚的修订版。单击回滚。


负载均衡

rancher 的负载均衡分 2 种

四层负载均衡

四层负载均衡工作在 OSI 模型的传输层,由于在传输层,只有 TCP/UDP 协议,这两种协议中除了包含源 IP、目标 IP 以外,还包含源端口号及目的端口号。

四层负载均衡服务器在接受到客户端请求后,以后通过修改数据包的地址信息( IP+端口号 )将流量转发到应用服务器。


在这里插入图片描述

七层负载均衡

七层负载均衡工作在 OSI 模型的应用层,应用层协议较多,常用 HTTP、Radius、DNS 等。七层负载就可以基于这些协议来负载。


在这里插入图片描述

通常,底层云提供程序支持第4层负载平衡器,因此,当在裸机服务器和vSphere群集上部署RKE群集时,不支持第4层负载平衡器。但是,可以使用单个全局托管的配置映射在NGINX或第三方入口上公开服务。

第7层负载平衡器(或入口控制器)支持基于主机和路径的负载平衡以及SSL终止。第7层负载平衡器仅转发HTTP和HTTPS通信,因此它们仅侦听端口80和443。亚马逊和谷歌等云提供商均支持第7层负载均衡器。另外,RKE集群部署Nginx入口控制器。


负载均衡参照这篇文章
Rancher 2.x 负载均衡配置及使用

监控

rancher 配置的监控使用的是开源监控解决方案 Prometheus集成来监视集群节点,Kubernetes组件和软件部署的状态和过程。

监控范围

使用Prometheus,您可以在群集级别和项目级别监视Rancher 。对于每个启用了监视的群集和项目,Rancher都会部署一个Prometheus服务器。

群集监控可让您查看Kubernetes群集的运行状况。Prometheus从下面的群集组件中收集指标,您可以在图形和图表中查看这些指标。

集群监控

进入集群页面
在这里插入图片描述

在没有开启集群监控时,此处会有个开启监控按钮
在这里插入图片描述

根据需要调整监控数据,这里直接默认
在这里插入图片描述

等一段时间监控组件启动成功后,会在集群仪表盘界面多出几个监控节点

在这里插入图片描述

在这里插入图片描述

项目监控

在这里插入图片描述

在工作负载界面点击监控,使用默认配置,点击确定
在这里插入图片描述

等项目监控组件启动完成后,可以在 Pod 页面监控所有 pod 的性能
在这里插入图片描述

通知配置

通知程序是通知您警报事件的服务。您可以配置通知程序,以将警报通知发送给最适合采取纠正措施的人员。

Rancher与各种流行的IT服务集成在一起,包括:

进入集群仪表盘
在这里插入图片描述

在导航栏中的工具下拉框中选择通知
在这里插入图片描述

点击添加通知
在这里插入图片描述

根据自己的需要选择通知方式并填写相关信息
在这里插入图片描述

点击测试通过后点击确定,完成通知配置

告警配置

告警范围

警报的范围可以在集群级别或项目级别设置。

在集群级别,Rancher监视Kubernetes集群中的组件,并向您发送与以下内容有关的警报:

集群告警配置

在集群界面导航栏选择工具 -》 告警
在这里插入图片描述

添加告警组
在这里插入图片描述
在这里插入图片描述

告警类型有以下 5 种

这里仅介绍系统服务警报,如果需要深入了解请自行查看官方文档

配置好后,点击确定
在这里插入图片描述
在这里插入图片描述

Prometheus 表达式

参考官方文档 Prometheus 表达式

快速添加工作负载 pod

非常简单,在工作负载的详情界面上点击添加即可
在这里插入图片描述

快速新增/删除集群节点

快速新增集群节点

RKE 安装的 kubernetes 集群可以通过以下方式快速添加集群节点

1、选择集群
在这里插入图片描述

2、点击编辑配置
在这里插入图片描述

3、复制添加命令并在新的节点上运行
在这里插入图片描述

结束,是不是很简单

快速删除集群节点

卸载原有 K8S


sealos clean --node 节点IP --user root --passwd 密码

集群克隆

支持集群类型

在这里插入图片描述

前提条件

安装 Rancher CLI

在 Rancher UI 右下角下载 Rancher CLI linux 版本
在这里插入图片描述

上传到服务器并且解压


tar -zxvf rancher-linux-amd64-v2.4.5.tar.gz

在这里插入图片描述

添加环境变量


vi /etc/profile添加下面配置
export PATH=$PATH:/root/rancherCli/rancher-v2.4.5

在这里插入图片描述

保存配置文件后,刷新配置


source /etc/profile

执行 rancher 命令测试 Rancher CLI 是否安装成功
在这里插入图片描述

生成 API Key

点击生成 API Key
在这里插入图片描述添加 Key
在这里插入图片描述
在这里插入图片描述

生成成功
在这里插入图片描述

测试 API Key


rancher login API访问地址 --token 刚刚生成的 Bearer Token

执行成功则表示成功

克隆集群

导出集群配置


# 查看集群列表
rancher cluster ls

在这里插入图片描述

找到自己要克隆的集群,复制集群的 ID 或者 NAME ,替换以下命令中的


# 输入以下命令以导出集群的配置。
rancher clusters export

步骤结果:克隆群集的YAML打印到终端。
在这里插入图片描述

将YAML复制到剪贴板,并将其粘贴到新文件中。将文件另存为cluster-template.yml(或其他任何名称,只要具有.yml扩展名)。

修改集群配置

如下例所示,在占位符处,用唯一名称()替换原始群集的名称。如果克隆的群集具有重复名称,则该群集将无法成功配置。


Version: v3
clusters:: # ENTER UNIQUE NAMEdockerRootDir: /var/lib/dockerenableNetworkPolicy: falserancherKubernetesEngineConfig:addonJobTimeout: 30authentication:strategy: x509authorization: {}bastionHost: {}cloudProvider: {}ignoreDockerVersion: true

在这里插入图片描述

对于每个nodePools部分,在占位符处用唯一名称替换原始节点池名称。如果克隆的群集具有重复的节点池名称,则该群集将无法成功配置。


nodePools::clusterId: docontrolPlane: trueetcd: truehostnamePrefix: mark-donodeTemplateId: doquantity: 1worker: true

启动克隆的集群


rancher up --file cluster-template.yml

流水线( CI/CD)

Rancher 的流水线功能目前不满足我目前的需要,所以还是使用 Jenkins 做自动化部署。

目前的方案是在 Jenkins 上完成镜像的打包,并且推送镜像到 Docker 私服,在统一的 linux 服务器上执行 kebuctl 命令部署工作负载。

kubectl 安装

kubectl 概念

kubectl 是 kubernetes 官方提供的 kubernetes 命令行管理工具。


RKE 安装的 K8S 在宿主机上是无法运行 kubectl 命令的,需要自行安装。


设置阿里云服务器
cat < /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/enabled=1gpgcheck=1repo_gpgcheck=1gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF安装 kubectl
yum install -y kubectl

kubectl 配置

在 Rancher 集群页面获取 kubectl 配置文件
在这里插入图片描述
在这里插入图片描述

将信息复制到文件中并上传到服务器 ~/.kube/config/kube.config

~/. 指的是当前登录用户目录

如果是普通用户,则是 /home/用户名

如果是 root 用户,则是 /root


之后就可以通过这个配置文件访问 K8S 集群了


测试配置 ,查看工作负载kubectl --kubeconfig /root/kube/config/kube.config get pods

在这里插入图片描述

配置成功

Jenkins 流水线

Jenkins 插件安装

jenkins 安装插件 Gitlab Hook Plugin 、Gitlab
在这里插入图片描述
在这里插入图片描述

搜索后安装

服务器环境要求

Jenkins 任务中运行打包镜像,部署工作负载等命令的服务器,有以下几个要求

  1. List item

Docker 私服配置

我们的 Docker 服务由于域名和证书原因,需要不验证 https 的 X509 证书合法性,如果没有这个问题可以跳过


新建文件
vi /etc/docker/daemon.json
{"insecure-registries" : ["你的 Docker 服务器地址"]
}
重新加载 docker 配置
systemctl reload docker

Rancher 配置 Docker 私服

选择资源 -> 密文
在这里插入图片描述

点击添加凭证,输入自己的 Docker 私服地址,账户密码

在这里插入图片描述
在这里插入图片描述

配置权限

git 权限

服务器权限

新建任务

任务配置

登录 Jenkins 服务器,点击新建任务,选择构建一个自由风格的项目
在这里插入图片描述

在这里插入图片描述

配置自己的源码地址及账户密码
在这里插入图片描述

配置构建触发器
在这里插入图片描述

点击高级,按如图配置
在这里插入图片描述

在 gtilab 项目页面配置,在设置中的 web 钩子页面中,将刚刚上面 jenkins 中生成的 url 和 Token 填入并生成 web钩子
在这里插入图片描述
在这里插入图片描述

生成的 Token
在这里插入图片描述

选择 Maven 构建
在这里插入图片描述

根据自己需求填写 Maven 命令和选择 pom 文件
在这里插入图片描述

构建后步骤选择如图插件
在这里插入图片描述

根据自己需求填写数据
在这里插入图片描述

参数解释

Exec command 具体如下

这里不用完全照搬命令,每个人的项目打包后结构不同,可以根据自己情况修改


cd project/ecm2
unzip -u -o ecm-admin-0.0.1-SNAPSHOT-package.zip
if [ ! -f "dockerfile" ];then echo "文件不存在";else rm -f dockerfile; fi
touch dockerfile
cat >> dockerfile<From frolvlad/alpine-glibc#这里自行修改项目名
MAINTAINER ecm#创建文件夹,这里自行修改项目名
RUN mkdir /usr/local/ecm#这里自行修改项目名
WORKDIR /usr/local/ecm#拷贝项目文件夹,这里自行修改,就是上传到服务器的那个文件夹名
COPY ecm-admin-0.0.1-SNAPSHOT /usr/local/ecm/ecm-admin-0.0.1-SNAPSHOT#添加jre8环境
RUN mkdir /usr/local/java
ADD server-jre-8u202-linux-x64.tar.gz /usr/local/java/#对外接口,根据自己项目端口自行修改
EXPOSE 8765
EXPOSE 9997
# 项目名自行修改
VOLUME /usr/local/tlsProxy/log/#授予运行权限,项目路径及名称自行修改
RUN chmod -R +x /usr/local/ecm/ecm-admin-0.0.1-SNAPSHOT/bin#设置jre8环境ENV JAVA_HOME /usr/local/java/jdk1.8.0_202
ENV PATH ${PATH}:${JAVA_HOME}/binCMD ["java","-version"]#运行服务,项目路径及名称自行修改,这里的 sh 指的是上面的 start.sh
ENTRYPOINT ["nohup","/usr/local/ecm/ecm-admin-0.0.1-SNAPSHOT/bin/ecm-admin.sh"]EOFdocker build -t 私服地址/ecm:1.1 .docker login -u你的账户 -p你的密码 Docker私服地址
docker push 私服地址/ecm:1.1kubectl --kubeconfig /root/kube/config/kube.config delete -f /root/project/ecm2/deployment.yml --ignore-not-found=true
sleep 5
kubectl --kubeconfig /root/kube/config/kube.config create -f /root/project/ecm2/deployment.yml

Exec command 命令解析

  1. unzip -u -o ecm-admin-0.0.1-SNAPSHOT-package.zip 解压代码压缩文件夹
  2. if [ ! -f “dockerfile” ];then echo “文件不存在”;else rm -f dockerfile; fi touch dockerfile cat >> dockerfile<
  3. docker build -t 私服地址/ecm:1.1 . 编译镜像
  4. docker login -u你的账户 -p你的密码 Docker私服地址 登录到 Docker 私服
  5. docker push 私服地址/ecm:1.1 推送镜像到 Docker 私服
  6. kubectl --kubeconfig /root/kube/config/kube.config delete -f /root/project/ecm2/deployment.yml --ignore-not-found=true 根据配置文件删除原有工作负载
  7. sleep 5 等待5秒
  8. kubectl --kubeconfig /root/kube/config/kube.config create -f /root/project/ecm2/deployment.yml根据配置文件部署新的工作负载

deployment.yml


---
apiVersion: apps/v1
kind: Deployment
metadata:name: ecmlabels:app: ecm
spec:replicas: 1selector:matchLabels:app: ecmtemplate:metadata:labels:app: ecmspec:containers:- name: ecmimage: 你的私服地址/ecm:1.1ports:- containerPort: 80protocol: TCPimagePullPolicy: AlwaysimagePullSecrets:- name: dc-pm895
---
kind: Service
apiVersion: v1
metadata:labels:app: ecm-servicename: ecm-servicenamespace: default
spec:type: NodePortports:- port: 8765targetPort: 8765nodePort: 30149selector:app: ecm

后续只要在 master 分支提交代码或者合并分支到 master 分支,就会自动触发 jenkins 自动构建项目
yaml 解释

deployments 详解,请查看官网链接

测试

点击立即构建
在这里插入图片描述

查看运行日志
在这里插入图片描述

看到编译成功
在这里插入图片描述

在 Rancher 界面查看,工作负载已经部署成功
在这里插入图片描述

Yaml 详解

这里引用 cnblob 的一个 yaml 详解 ,原文地址


#test-pod
apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中
kind: Pod #指定创建资源的角色/类型
metadata: #资源的元数据/属性 name: test-pod #资源的名字,在同一个namespace中必须唯一 labels: #设定资源的标签 k8s-app: apache version: v1 kubernetes.io/cluster-service: "true" annotations: #自定义注解列表 - name: String #自定义注解名字
spec: #specification of the resource content 指定该资源的内容 restartPolicy: Always #表明该容器一直运行,默认k8s的策略,在此容器退出后,会立即创建一个相同的容器 nodeSelector: #节点选择,先给主机打标签kubectl label nodes kube-node1 zOne=node1 zone: node1 containers: - name: test-pod #容器的名字 image: 10.192.21.18:5000/test/chat:latest #容器使用的镜像地址 imagePullPolicy: Never #三个选择Always、Never、IfNotPresent,每次启动时检查和更新(从registery)images的策略, # Always,每次都检查 # Never,每次都不检查(不管本地是否有) # IfNotPresent,如果本地有就不检查,如果没有就拉取 command: ['sh'] #启动容器的运行命令,将覆盖容器中的Entrypoint,对应Dockefile中的ENTRYPOINT args: ["$(str)"] #启动容器的命令参数,对应Dockerfile中CMD参数 env: #指定容器中的环境变量 - name: str #变量的名字 value: "/etc/run.sh" #变量的值 resources: #资源管理 requests: #容器运行时,最低资源需求,也就是说最少需要多少资源容器才能正常运行 cpu: 0.1 #CPU资源(核数),两种方式,浮点数或者是整数+m,0.1=100m,最少值为0.001核(1m) memory: 32Mi #内存使用量 limits: #资源限制 cpu: 0.5 memory: 1000Mi ports: - containerPort: 80 #容器开发对外的端口 name: httpd #名称 protocol: TCP livenessProbe: #pod内容器健康检查的设置 httpGet: #通过httpget检查健康,返回200-399之间,则认为容器正常 path: / #URI地址 port: 80 #host: 127.0.0.1 #主机地址 scheme: HTTP initialDelaySeconds: 180 #表明第一次检测在容器启动后多长时间后开始 timeoutSeconds: 5 #检测的超时时间 periodSeconds: 15 #检查间隔时间 #也可以用这种方法 #exec: 执行命令的方法进行监测,如果其退出码不为0,则认为容器正常 # command: # - cat # - /tmp/health #也可以用这种方法 #tcpSocket: //通过tcpSocket检查健康 # port: number lifecycle: #生命周期管理 postStart: #容器运行之前运行的任务 exec: command: - 'sh' - 'yum upgrade -y' preStop:#容器关闭之前运行的任务 exec: command: ['service httpd stop'] volumeMounts: #挂载持久存储卷 - name: volume #挂载设备的名字,与volumes[*].name 需要对应 mountPath: /data #挂载到容器的某个路径下 readOnly: True volumes: #定义一组挂载设备 - name: volume #定义一个挂载设备的名字 #meptyDir: {} hostPath: path: /opt #挂载设备类型为hostPath,路径为宿主机下的/opt,这里设备类型支持很多种 #nfs

推荐阅读
  • CentOS 7环境下Jenkins的安装与前后端应用部署详解
    CentOS 7环境下Jenkins的安装与前后端应用部署详解 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • OBS Studio自动化实践:利用脚本批量生成录制场景
    本文探讨了如何利用OBS Studio进行高效录屏,并通过脚本实现场景的自动生成。适合对自动化办公感兴趣的读者。 ... [详细]
  • 入门指南:使用FastRPC技术连接Qualcomm Hexagon DSP
    本文旨在为初学者提供关于如何使用FastRPC技术连接Qualcomm Hexagon DSP的基础知识。FastRPC技术允许开发者在本地客户端实现远程调用,从而简化Hexagon DSP的开发和调试过程。 ... [详细]
  • 流处理中的计数挑战与解决方案
    本文探讨了在流处理中进行计数的各种技术和挑战,并基于作者在2016年圣何塞举行的Hadoop World大会上的演讲进行了深入分析。文章不仅介绍了传统批处理和Lambda架构的局限性,还详细探讨了流处理架构的优势及其在现代大数据应用中的重要作用。 ... [详细]
  • 利用Jenkins与SonarQube集成实现高效代码质量检测与优化
    本文探讨了通过在 Jenkins 多分支流水线中集成 SonarQube,实现高效且自动化的代码质量检测与优化方法。该方案不仅提高了开发团队的代码审查效率,还确保了软件项目的持续高质量交付。 ... [详细]
  • 本文详细介绍了JQuery Mobile框架中特有的事件和方法,帮助开发者更好地理解和应用这些特性,提升移动Web开发的效率。 ... [详细]
  • 本文介绍了如何通过命令行有效地终止所有 Node.js 进程实例,以解决因端口冲突或其他服务冲突导致的问题。 ... [详细]
  • 调试利器SSH隧道
    在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问。但我们一般都会在本地开发,因为这能快速的看到 ... [详细]
  • 理解浏览器历史记录(2)hashchange、pushState
    阅读目录1.hashchange2.pushState本文也是一篇基础文章。继上文之后,本打算去研究pushState,偶然在一些信息中发现了锚点变 ... [详细]
  • 本文探讨了在一个物理隔离的环境中构建数据交换平台所面临的挑战,包括但不限于数据加密、传输监控及确保文件交换的安全性和可靠性。同时,作者结合自身项目经验,分享了项目规划、实施过程中的关键决策及其背后的思考。 ... [详细]
  • 小编给大家分享一下Vue3中如何提高开发效率,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获, ... [详细]
  • linux网络子系统分析(二)—— 协议栈分层框架的建立
    目录一、综述二、INET的初始化2.1INET接口注册2.2抽象实体的建立2.3代码细节分析2.3.1socket参数三、其他协议3.1PF_PACKET3.2P ... [详细]
  • 实践指南:使用Express、Create React App与MongoDB搭建React开发环境
    本文详细介绍了如何利用Express、Create React App和MongoDB构建一个高效的React应用开发环境,旨在为开发者提供一套完整的解决方案,包括环境搭建、数据模拟及前后端交互。 ... [详细]
  • 在 CentOS 7 上部署和配置 RabbitMQ 消息队列系统时,首先需要安装 Erlang,因为 RabbitMQ 是基于 Erlang 语言开发的。具体步骤包括:安装必要的依赖项,下载 Erlang 源码包(可能需要一些时间,请耐心等待),解压源码包,解决可能出现的错误,验证安装是否成功,并将 Erlang 添加到环境变量中。接下来,下载 RabbitMQ 的 tar.xz 压缩包,并进行解压和安装。确保每一步都按顺序执行,以保证系统的稳定性和可靠性。 ... [详细]
author-avatar
愛情伈語gg
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有