自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

向上的信念

正在努力打造全栈的研发工程师,和大家分享一些经验!!!

  • 博客(141)
  • 资源 (9)
  • 收藏
  • 关注

原创 服务注册与发现(Docker+Consul+Registrator)

服务注册中心引言服务注册中心本质上是为了解耦服务提供者和服务消费者。对于任何一个微服务,原则上都应存在或者支持多个提供者,这是由微服务的分布式属性决定的。更进一步,为了支持弹性扩缩容特性,一个微服务的提供者的数量和分布往往是动态变化的,也是无法预先确定的。因此,原本在单体应用阶段常用的静态 LB 机制就不再适用了,需要引入额外的组件来管理微服务提供者的注册与发现,而这个组件就是服务注册中心。CAP理论是分布式架构中重要理论一致性(Consistency)(所有节点在同一时间具有相同的数据)可用性

2021-11-28 20:04:31 1607

原创 zabbix::使用 zabbix监控 docker中运行的容器及docker进程

1、页面中导入zabbix模版结尾是 xml 文件;<?xml version="1.0" encoding="UTF-8"?><zabbix_export> <version>3.2</version> <date>2018-06-04T04:12:36Z</date> <groups> <group> <name>Templ

2021-10-11 10:17:50 1108

原创 Goalng排序算法:冒泡排序

冒泡排序名字由来冒泡排序的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同气泡最终会上浮到顶端一样,故名“冒泡排序”。原理冒泡排序法是一种最简单的交换类排序方法,它是通过相邻数据的交换逐步将无序列表排列为有序列表。冒泡排序的基本原理是重复地循环遍历要排序的元素列,依次比较两个相邻的元素,如果顺序(如从小到大或者首字母从 Z 到 A)错误就把两个元素的位置交换过来,直到没有相邻元素需要交换,也就是说该元素列已经排序完成。源码package mainimp

2021-10-06 14:34:41 265

原创 Golang案例:编写功能测试和性能测试

功能测试和性能测试代码说明GitHub代码链接代码结构说明split.gopackage splitimport "strings"func Split(s, sep string) (ret []string) { idx := strings.Index(s, sep) for idx > -1 { ret = append(ret, s[:idx]) s = s[idx+len(sep):] idx = strings.Index(s,

2021-10-03 17:13:30 311

原创 Golang案例:for range 循环常见错误

下面这段代码输出什么,说明原因。func main() { slice := []int{0,1,2,3} m := make(map[int]*int) for key,val := range slice { m[key] = &val } for k,v := range m { fmt.Println(k,"->",*v) }}直接给答案: 0 -> 3 .

2021-09-14 21:10:23 686

原创 Golang案例:defer 的使用

defer 的使用下面这段代码输出的内容package main import ( "fmt" ) func main() { defer_call() }func defer_call() { defer func() { fmt.Println("打印前") }() defer func() { fmt.Println("打印中") }() defer func() { fmt.Println("打印后") }() panic(

2021-09-14 21:02:59 238

原创 Git Parameter参数构建流水线常用的两种方式以及项目回滚方式

一、分支+标签方式pipeline { agent { label 'xxx-x' } parameters { gitParameter name: 'BRANCH_COMMINT', type: 'PT_BRANCH_TAG', branchFilter: 'origin/(.*)', defaultValue: 'dev', select

2021-08-25 22:02:01 2313

原创 docker 最小镜像(scratch:latest)与golang程序结合,从零构建后端镜像

docker 最小镜像(scratch:latest)一、简介:Scratch镜像很赞,它简洁、小巧而且快速,它没有bug、安全漏洞、延缓的代码或技术债务。除了被Docker添加了metadata (译注:元数据为描述数据的数据)之外,它基本上是空的。我们在使用Dockerfile构建docker镜像时,一种方式是使用官方预先配置好的容器镜像。优点是我们不用从头开始构建,节省了很多工作量,但付出的代价是需要下载很大的镜像包。如果我们的需求是在构建一个符合我们实际业务需求的Docker镜像的前提下,确

2021-08-24 21:55:44 2337

原创 influxdb数据保留策略

1.查看默认策略> show retention policies on dia_db;name duration shardGroupDuration replicaN default---- -------- ------------------ -------- -------autogen 0s 168h0m0s 1 truename --名称,此示例名称为 defaultduration --持续时间

2021-07-24 15:22:47 1131

原创 Go语言基础之反射

系列文章目录文章目录系列文章目录前言一、反射介绍1、reflect包1)TypeOf2)type name和type kind3)ValueOf3.1)通过反射获取值3.2)通过反射设置变量的值4、isNil()和isValid()4.1)isNil()4.2)isValid()二、结构体反射1、StructField类型2、结构体反射示例前言变量的内在机制Go语言中的变量是分为两部分的:类型信息:预先定义好的元信息。值信息:程序运行过程中可动态变化的。一、反射介绍反射是指在程序运行期对

2021-03-16 16:48:03 197

原创 Go语言基础之结构体

系列文章目录文章目录系列文章目录前言一、类型别名和自定义类型1、自定义类型2、类型别名3、类型定义和类型别名的区别二、结构体1、结构体实例化2、匿名结构体3、创建指针类型结构体4、取结构体的地址实例化1)结构体初始化2)使用键值对初始化3)使用值的列表初始化三、构造函数1、调用构造函数1)方法和接收者2)指针类型的接收者3)值类型的接收者4)任意类型添加方法四、结构体的匿名字段1、嵌套结构体2、嵌套匿名字段3、嵌套结构体的字段名冲突4、结构体的“继承”5、结构体字段的可见性6、结构体标签(Tag)7、结构

2021-03-14 18:06:08 158

原创 Go语言基础之指针

系列文章目录文章目录系列文章目录前言一、指针地址和指针类型1、取变量指针2、指针取值三、new和make一、New2、make3、new与make的区别前言要搞明白Go语言中的指针需要先知道3个概念:指针地址、指针类型和指针取值。Go语言中的指针任何程序数据载入内存后,在内存都有他们的地址,这就是指针。而为了保存一个数据在内存中的地址,我们就需要指针变量。比如,“永远不要高估自己”这句话是我的座右铭,我想把它写入程序中,程序一启动这句话是要加载到内存(假设内存地址0x123456),我在程序中把

2021-03-13 23:00:53 252

原创 Go语言基础之map

系列文章目录文章目录系列文章目录前言一、map定义二、map基本使用三、map支持在声明的时候填充元素四、判断某个键是否存在五、map的遍历六、使用delete()函数删除键值对七、按照指定顺序遍历map八、元素为map类型的切片九、值为切片类型的map前言map是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能使用。一、map定义Go语言中 map的定义语法如下:map[KeyType]ValueType其中,KeyType:表示键的类型。Val

2021-03-13 22:30:09 1312

原创 Go语言基础之切片

系列文章目录文章目录系列文章目录引子切片一、切片的定义二、简单切片表达式三、完整切片表达式1、使用make()函数构造切片2、切片的本质3、切片不能直接比较4、切片的赋值拷贝5、切片遍历6、append()方法为切片添加元素7、Copy的使用8、从切片中删除元素引子因为数组的长度是固定的并且数组长度属于类型的一部分,所以数组有很多的局限性。 例如:func arraySum(x [3]int) int{ sum := 0 for _, v := range x{ su

2021-03-13 22:17:48 149

原创 Go语言基础之数组

系列文章目录文章目录系列文章目录Array(数组)数组的初始化方法一方法二数组的遍历Array(数组)数组是同一种数据类型元素的集合。 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化。 基本语法:// 定义一个长度为3元素类型为int的数组avar a [3]int//数组定义:var 数组变量名 [元素数量]T比如:var a [5]int, 数组的长度必须是常量,并且长度是数组类型的一部分。一旦定义,长度不能变。 [5]int和[10]int是不同的类

2021-03-13 21:19:53 483

原创 Go语言基础之流程控制

文章目录前言一、if else(分支结构)二、for循环的基本格式如下三、switch case前言流程控制是每种编程语言控制逻辑走向和执行次序的重要部分,流程控制可以说是一门语言的“经脉”。Go语言中最常用的流程控制有if和for,而switch和goto主要是为了简化代码、降低重复代码而生的结构,属于扩展类的流程控制。一、if else(分支结构)1、if条件判断基本写法,Go语言中if条件判断的格式如下:if 表达式1 { 分支1} else if 表达式2 { 分

2021-03-13 21:03:56 128

原创 Go语言基础之运算符

文章目录前言算数运算符运算符描述关系运算符逻辑运算符位运算符赋值运算符前言算数运算符运算符描述+ 相加- 相减* 相乘/ 相除% 求余注意: ++(自增)和- -(自减)在Go语言中是单独的语句,并不是运算符。关系运算符== 检查两个值是否相等,如果相等返回 True 否则返回 False。!= 检查两个值是否不相等,如果不相等返回 True 否则返回 False。> 检查左边值是否大于右边值,如果是返回 True 否则返回 False。>= 检查左边值是否大于

2021-03-13 20:44:50 246

原创 Go语言基础之基本数据类型

文章目录前言一、基本数据类型整型类型描述特殊整型浮点型布尔值字符串字符串转义符字符串的常用操作前言Go语言中有丰富的数据类型,除了基本的整型、浮点型、布尔型、字符串外,还有数组、切片、结构体、函数、map、通道(channel)等。Go语言的基本类型和其他语言大同小异。一、基本数据类型整型整型分为以下两个大类:按长度分为:int8、int16、int32、int64对应的无符号整型:uint8、uint16、uint32、uint64其中,uint8就是我们熟知的byte型,int1

2021-03-13 20:36:40 388

原创 从零开始了解Go语言开发

第一个Go程序Hello World现在我们来创建第一个Go项目——hello。在我们桌面创建一个hello目录。一、在该目录中创建一个main.go文件:package main // 声明 main 包,表明当前是一个可执行程序import "fmt" // 导入内置 fmt 包func main(){ // main函数,是程序执行的入口 fmt.Println("Hello World!") // 在终端打印 Hello World!}二、跨平台编译默认我们go b

2021-03-13 20:13:50 630 7

转载 Nginx的平滑升级和回滚

一、nginx平滑升级概述随着网站并发访问量越来越高,nginx web 服务器也越来越流行,nginx 版本换代越来越频繁,1.16.2版本的nginx更新了许多新功能,生产环境中版本升级必然的,但是线上业务不能停,此时nginx的升级就是运维的重要工作了。二、nginx平滑升级原理多进程模式下的请求分配方式Nginx默认工作在多进程模式下,即主进程(master process)启动后完成配置加载和端口绑定等动作,fork出指定数量的工作进程(worker process),这些子进程会持有

2020-06-22 17:29:16 363

原创 Jenkins(4):通过pipline实现的几种最常见的参数化构建、以及git parameter

这是之前通过gitlab+jenkins+k8s实现的一个简单的自动化测试项目第一步:安装GitLab第二步:安装jenkins第三步:配置钩子程序第四步:实现自动化项目背景:在之前的配置中,主要是使用Jenkins流水线的方式将项目通过k8s的方式进行自动化发布测试,但随着项目版本的增多,这种方式不适合项目的回滚操作和分支测试,也是为了解决回滚和分支测试的问题,因此在这里写了几种最常用到的参数化构建的方式,1、字符模式2、文本模式3、选择框模式通过web界面编辑job时写入构建的参数

2020-06-12 19:04:35 2455

原创 Git(2):在gitlab中创建开发用户,以及master分支的安全管理

一、创建用户1、创建管理gitlab的开发人员的用户2、配置用户信息 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200609170653917.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0hDWV8yMzE1,size_16,color_FFFFFF,t_70)3、将用户添加到java-da

2020-06-09 17:11:34 857

原创 Git(1):git的版本控制和常用命令的介绍

git init 带工作区git --bare init 是不带工作区的裸仓库,只有版本库,想要看git里面的内容只能通过git clone address的方式克隆出来一、git的发展和常见的版本控制工具1、git发展 git开发管理员是linux的创始人林纳斯托瓦兹 2002年linux内核托管到git上进行版本控制 git是一个开源的分布式版本控制工具 git可以高效的管理从小到大的开发源代码或者程序2、通过git延伸的版本控制工具 Github Gitlib3、git的

2020-06-08 16:44:02 367

原创 Jenkins(3):构建过程中出现异常发送邮件进行报警

Jenkins(1):对jenkins的认识和基本使用Jenkins(2):对jenkins用户进行授权,以及ssh管理其他节点一、配置邮件(测试能够收到邮件为止)1、修改本地jenkins2、配置邮件通知二、配置E-mail Notification1、构建后的操作2、点击构建后查看邮箱是否有邮件三、配置Editable Email notification1、安装插件并配置插件内容(email extension plugin)#安装#配置2、添加构建后操作3、构

2020-06-08 16:19:46 392

原创 Jenkins(2):对jenkins用户进行授权,以及ssh管理其他节点

Jenkins(1):对jenkins的认识和基本使用一、配置权限1、安装插件2、开启用户注册和鉴权策略3、创建用户(bob,tom),并登录4、创建测试项目(A-web1,A-web2,B-db1)5、为用户授权1)创建用户组权限和项目组权限(jenkins-Manage and Assign Roles)点击Manage Roles 点击Assign Roles 2)查看用户授权二、jenkins生成远程管理密钥[root@jenkins ~]# ssh-key

2020-06-08 16:11:43 800

原创 Jenkins(1):对jenkins的配置方式和基本概念

一、jenkins的基本概念1、jenkins的作用和用户类型 1)作用 持续集成:将不同的模块或者开发人员的功能进行整合 持续交付:可以重复性更新程序或者软件项目 持续部署:自动化部署软件项目,定期备份,部署项目异常回滚 2)jenkins的使用用户 开发人员:编写号代码不需要手动进行编译,打包工作,直接将代码提交到svn或者git 运维人员:减轻管理员工作量,避免人工干预,减少错误发生 测试人员:方便进行简单的代码测试,避免出现逻辑错误2、jenkins的特点和jenk

2020-06-08 15:52:03 543

原创 K8S自动化发布项目(1.4):配置jenkins的流水线脚本,实现k8s自动发布项目

第一步:安装GitLab第二步:安装jenkins第三步:配置钩子程序完成第四步:实现自动化Jenkins时区和时间问题:第一步:安装GitLab第二步:安装jenkins完成第三步:配置钩子程序1)在【系统管理】-【脚本命令行】里运行System.setProperty(‘org.apache.commons.jelly.tags.fmt.timeZone’, ‘Asia/Shanghai’)2)在jvm中修改JAVA_OPTS=-Duser.timezone=Asia/Shangh

2020-05-30 21:57:56 1568

原创 K8S自动化发布项目(1.3):将gitlab和jenkins结合实现自动化(钩子程序)

第一步:安装GitLab第二步:安装jenkins完成第三步:配置钩子程序一、首先需要关闭跨站点保护(CSRF Protection) 1、高版本和低版本的jenkins做了很大的区别,这里用的是高版本的 1)安装tomcat(略),并在tomcat中配置jenkins,修改脚本(关闭CSRF) [root@centos1 bin]# vim ./catalina.sh #!/bin/sh JAVA_OPTS="-Dhudson.security.csrf.GlobalC

2020-05-30 21:43:48 992

原创 K8S自动化发布项目(1.2):安装jenkins用于流水线(pipline)

第一步:K8S自动化发布项目(1)完成第二步:安装jenkins一、在官网中下载war包 https://pkg.jenkins.io/redhat/二、系统要求 1、最少是256MB的内存,最好是512MB内存 2、10GB的硬盘空间 3、JDK环境是java8 4、具备docker环境三、启动服务 [root@centos8 jenkins]# ls jenkins.war [root@centos8 jenkins]# java -jar jenkins.war --h

2020-05-30 21:31:46 774

原创 K8S自动化发布项目(1.1):构建一个代码仓库(gitlab)用于上传代码

在之前的几章中已经将k8s以及k8s的监控都搭建了一下,这一次就要完成最终的目标了:搭建测试环境的自动化流程,首先完成第一步:搭建代码仓库,这里选用的是gitlab仓库。一、下载镜像[root@gitlab ~]# docker pull registry.cn-hangzhou.aliyuncs.com/imooc/gitlab-ce:latest二、运行gitlab容器 1、生成启动文件 [root@gitlab ~]# mkdir /usr/local/gitlab [root..

2020-05-30 21:19:58 956

原创 Docker监控(1):prometheus+cadviso+grafana实现对docker容器和宿主机进行监控

Prometheus 特点: 1)多维数据模型:由度量名称和键值对标识的时间序列数据(TSDB:存储临时数据还行) 2)promSQL:一种灵活的查询语言,可以利用多维数据完成复杂的查询 3)不依赖分布式存储,单个服务器节点可直接工作 4)基于HTTP的pull方式采集时间序列数据 5)推送时间序列数据通过PushGateway组件支持 6)通过服务发现或者静态配置发现目标 7)多种图形模式及仪表盘支持(grafana)各个组件的作用:Prometheus Server 收集指标和存储

2020-05-27 11:22:08 1148

原创 部署k8s监控(2.2):安装metrics-server,解决dashboard-2.0.1中无法查看内存、cpu等资源的问题

下载metrics-server的yaml文件解决上章遗留的问题:无法监控内存和cpu资源转接上文:部署k8s监控(3):dashboard-2.0.1一、创建用户,并生成证书 [root@k8s-master1 /]# useradd aggregator [root@k8s-master1 aggregator]# vim ./metrics-server-csr.json { "CN": "aggregator", "hosts": [], "key": {

2020-05-26 18:25:06 2683 3

原创 部署k8s监控(2.1):k8s集群升级版本后,需要使用高版本的dashboard才能显示页面,这里使用的dashboard-2.0.1

将升级k8s到高版本以后,会发现web界面无法看到内容,显示404,因此需要借助高版本的dashboard才可以解决这类问题首先要删除之前安装过的dashboard下载dashboard的yaml文件一、生成证书以及修改 1、生成证书,因为自动生成的证书很多浏览器无法使用(可先不配置着一段,如果无法在尝试配置这段) 1)创建证书目录 [root@k8s-master1 ~]# mkdir dashboard-certs [root@k8s-master1 ~]# cd ./dash

2020-05-26 18:07:44 1402 1

原创 Docker仓库(2):在保证镜像不丢失的前提下,升级Harbor版本

Harbor版本升级背景:原Harbor:1.2.0待更新:1.8.0过程:由于harbor从v1.6.0版本开始,后端数据库由MariaDB改为Postgresql,所以在升级过程中,必须先升级到v1.6.0版本,再升级至v1.8.0。v1.2.0 -> v1.6.0该步骤中,由于数据库变更,所以需对数据库进行迁移。另外在升级过程中会改变数据库文件(database schema)以及harbor配置文件(harbor.cfg),所以必须做好备份工作,以备进行回滚操作。一、低版本先升

2020-05-23 19:58:23 1059

原创 部署k8s组件(18):安装配置Helm,带你体验便捷的部署方案!!!

一、什么是HELMHelm包含两个组件:Helm客户端和Tiller服务器,如图所示: 1、在没使用helm之前,向k8s部署应用,我们要依次部署deployment、svc等,步骤繁琐。况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm通过打包的方式,支持发布的版本管理和控制,很大程度上简化了k8s应用的部署和管理 2、helm本质就是让k8s的应用管理(deployment、service等)可配置,能动态生成。通过动态生成k8s资源清单文件(deployment.

2020-05-21 18:29:35 762

原创 部署k8s监控(1.2):Prometheus-operator配置持久化方案

转接上文:部署k8s监控(1):Prometheus-operator监控k8s集群的各个组件及pod(二进制环境)解决上一篇博客遗留的问题:产生的数据如何做到持久化prometheus默认的存储方式 (- emptyDir: {})它的生命周期和pod的生命周期一样,重启pod后数据会丢失,因此需要修改持久化方案保存数据持久化方案后很会:这里使用的是hostpath,也可以使用pv/pvc一、进入prometheus-k8s的statefulset中修改挂载文件的类型 [root@k8s

2020-05-20 18:51:27 1785

原创 部署k8s监控(1.1):Prometheus-operator监控k8s集群的各个组件及pod(二进制环境)

环境是使用二进制安装的,使用kubeadm则很难遇到这种情况一、下载安装文件 [root@k8s-master1 prometheus]# git clone https://github.com/coreos/kube-prometheus.git [root@k8s-master1 prometheus]# cd ./kube-prometheus/manifests/二、修改yaml文件(开启nodeport,方便外网用户访问) [root@k8s-master1 manifests]#

2020-05-19 17:53:03 1591 1

原创 部署k8s(17):集群安全,为特定用户鉴权

一、机制说明1、kubernetes作为一个分布式集群的管理工具,保证集群的安全性是其中一个重要的任务。apiServer是集群内部各个组件通信的中介,也是外部控制的入口,所以k8s的安全机制基本就是围绕保护apiserver来设计的,k8s使用认证(authentication),鉴权(authorization),准入控制(admissioncontrol)三步来保证api server的安全二、认证(Authentication) 1、HTTP Token认证:通过一个Token来识别合

2020-05-19 17:04:52 840

原创 部署k8s(16):集群调度策略的四种方案

一、调度说明1、简介 Scheduler是ku bernet es的调度器, 主要的任务是把定义的pod分配到集群的节点上。听起来非常简单,但有很多要考虑的问题: 公平:如何保证每个节点都能被分配资源 资源高效利用:集群所有资源最大化被使用 效率:调度的性能要好,能够尽快地对大批量的pod完成调度工作 灵活:允许用户根据自己的需求控制调度的逻辑 Sheduler是作为单独的程序运行的,启动之后会一直连接APIServer,获取PodSpec.NodeName为空的po

2020-05-19 16:57:40 1643

原创 部署k8s(15):持久化存储方案

一、ConfigMap1、概念 ConfigMap的功能在k8s1.2版本中引入的,许多应用程序会从配置文件,命令行参数或环境变量中读取配置信息。ConfigMap API会给我们提供了向容器中注入配置信息的机制,ConigMap可以被用来保存单个属性,也可以用来保存整个配置文件或者JSON二进制的对象2、ConfigMap的创建 1)使用文件夹创建(--from-file:键的名字是文件的名字,值是文件的内容) [root@k8s-master1 configmap]# cat

2020-05-19 16:51:35 1043

k8s-1.15.3.rar

通过github中的源码包编译出来的二进制包,可以直接用于升级k8s集群,有需要的朋友可以看我的博文

2020-06-24

k8s-1.12.3.rar

安装程序及脚本,我的博客使用的版本

2020-05-03

zookeeper-3.5.6-bin.zip

hadoop ha 工具!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

2020-02-29

hadoop-2.4.zip

hadoop编译后的源码包!!

2020-02-28

jdk1.8.0.rar

jdk1.8!!!

2020-02-28

elk软件安装包.iso

elk安装包!

2020-02-24

GNS3-1.3.1-all-in-one.rar

Cisco设备学习利器!

2020-02-16

pdf转换器.rar

pdf转化器!

2020-02-16

unlocker-master.rar

vmware安装苹果系统必备插件以及tools工具,亲测能够正常使用!!!,使用方法:将文件中的win-install.cmd以管理员身份运行就可以了,tools工具用光驱装载到MAC系统正常安装即可!!!

2020-02-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除