热门标签 | 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

推荐阅读
  • 【并发编程】全面解析 Java 内存模型,一篇文章带你彻底掌握
    本文深入解析了 Java 内存模型(JMM),从基础概念到高级特性进行全面讲解,帮助读者彻底掌握 JMM 的核心原理和应用技巧。通过详细分析内存可见性、原子性和有序性等问题,结合实际代码示例,使开发者能够更好地理解和优化多线程并发程序。 ... [详细]
  • 解读中台架构:微服务与分布式技术的区别及应用
    中心化与去中心化是长期讨论的话题。中心化架构的优势在于部署和维护相对简单,尤其在服务负载较为稳定的情况下,能够提供高效稳定的性能。然而,随着业务规模的扩大和技术需求的多样化,中心化架构的局限性逐渐显现,如扩展性和故障恢复能力较差。相比之下,微服务和分布式技术通过解耦系统组件,提高了系统的灵活性和可扩展性,更适合处理复杂多变的业务场景。本文将深入探讨中台架构中微服务与分布式技术的区别及其应用场景,帮助读者更好地理解和选择适合自身业务的技术方案。 ... [详细]
  • 作为140字符的开创者,Twitter看似简单却异常复杂。其简洁之处在于仅用140个字符就能实现信息的高效传播,甚至在多次全球性事件中超越传统媒体的速度。然而,为了支持2亿用户的高效使用,其背后的技术架构和系统设计则极为复杂,涉及高并发处理、数据存储和实时传输等多个技术挑战。 ... [详细]
  • 从用户转型为开发者:一场思维升级的旅程 | 专访 StarRocks Committer 周威
    从用户转变为开发者,不仅是一次角色的转换,更是一场深刻的思维升级之旅。本次专访中,StarRocks Committer 周威分享了他如何在这一过程中逐步提升技术能力与思维方式,为开源社区贡献自己的力量。 ... [详细]
  • Linux学习精华:程序管理、终端种类与命令帮助获取方法综述 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
  • 本文探讨了使用Python进行微服务架构设计的合理性和适用性。首先,介绍了微服务的基本概念及其在现代软件开发中的重要性。接着,通过具体的业务场景,详细分析了Python在微服务架构设计中的优势和挑战。文章还讨论了在实际应用中可能遇到的问题,并提出了相应的解决方案。希望本文能够为从事Python微服务开发的技术人员提供有价值的参考和指导。 ... [详细]
  • 本文详细介绍了如何安全地手动卸载Exchange Server 2003,以确保系统的稳定性和数据的完整性。根据微软官方支持文档(https://support.microsoft.com/kb833396/zh-cn),在进行卸载操作前,需要特别注意备份重要数据,并遵循一系列严格的步骤,以避免对现有网络环境造成不利影响。此外,文章还提供了详细的故障排除指南,帮助管理员在遇到问题时能够迅速解决,确保整个卸载过程顺利进行。 ... [详细]
  • 2016-2017学年《网络安全实战》第三次作业
    2016-2017学年《网络安全实战》第三次作业总结了教材中关于网络信息收集技术的内容。本章主要探讨了网络踩点、网络扫描和网络查点三个关键步骤。其中,网络踩点旨在通过公开渠道收集目标信息,为后续的安全测试奠定基础,而不涉及实际的入侵行为。 ... [详细]
  • 在前一篇文章《Hadoop》系列之“踽踽独行”(二)中,我们详细探讨了云计算的核心概念。本章将重点转向物联网技术,全面解析其基本原理、应用场景及未来发展前景。通过深入分析物联网的架构和技术栈,我们将揭示其在智能城市、工业自动化和智能家居等领域的广泛应用潜力。此外,还将讨论物联网面临的挑战,如数据安全和隐私保护等问题,并展望其在未来技术融合中的重要角色。 ... [详细]
  • 如果程序使用Go语言编写并涉及单向或双向TLS认证,可能会遭受CPU拒绝服务攻击(DoS)。本文深入分析了CVE-2018-16875漏洞,探讨其成因、影响及防范措施,为开发者提供全面的安全指导。 ... [详细]
  • 负载均衡基础概念与技术解析
    随着互联网应用的不断扩展,用户流量激增,业务复杂度显著提升,单一服务器已难以应对日益增长的负载需求。负载均衡技术应运而生,通过将请求合理分配到多个服务器,有效提高系统的可用性和响应速度。本文将深入探讨负载均衡的基本概念和技术原理,分析其在现代互联网架构中的重要性及应用场景。 ... [详细]
  • 利用Jenkins与SonarQube集成实现高效代码质量检测与优化
    本文探讨了通过在 Jenkins 多分支流水线中集成 SonarQube,实现高效且自动化的代码质量检测与优化方法。该方案不仅提高了开发团队的代码审查效率,还确保了软件项目的持续高质量交付。 ... [详细]
  • 深入解析下一代互联网协议:IPv6在网络架构中的应用与优势
    随着互联网的迅猛发展,IPv4的32位地址资源在2011年2月宣告枯竭,导致互联网服务提供商(ISP)无法再申请新的地址段。为应对这一挑战,下一代互联网协议IPv6应运而生,并在网络架构中展现出显著的优势。本文深入解析了IPv6在提升网络容量、增强安全性及简化管理等方面的独特价值,探讨了其在网络架构中的应用前景和实际效益。 ... [详细]
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社区 版权所有