自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

噜噜噜的博客

运维小白

  • 博客(60)
  • 收藏
  • 关注

原创 CNI设计解读

kubernetes在设计网络方案的时候并没有设计统一的网络方案,只提供了统一的容器网络接口也就是所谓cni,这么做的目的就是为了遵循kubernets的核心理念OutOfTree,简单来讲就是专注于自身核心能力,将其他能力类似csi cni cri交给社区以及领域专家,这样一方面可以降低软件自身使用的复杂度,减小稳定性风险。

2022-11-24 20:06:46 1434 1

原创 kubernetes-nvidia-plugin设计解读

kubernetes-nvidia-plugin设计解读

2022-09-14 20:56:00 1024

原创 openyurt之yurthub数据过滤框架解析

OpenYurt 是业界首个对云原生体系无侵入的边缘计算平台。主打 “云边一体化” 的概念,针对边缘计算场景中的网络环境复杂、大规模应用交付、运维困难等痛点, 提供了边缘自治、云边运维通道、单元化部署等能力。通过将边缘异构资源统一管理,帮助开发者轻松完成在海量边缘资源上的大规模应用交付、运维、管控。

2022-03-22 19:02:03 841

原创 Istio Envoy Sidecar 原理解析(1)

什么是Envoy?对于一些对于Envoy不是很了解的人,可能对于这个程序的功能完全没有认知,这里我讲下其功能。在istio service mesh中分为两个平面,一个是数据平面,一个是控制平面。对于Envoy来说他就是数据平面最为重要的功能体现。那么envoy的功能到底是什么呢,其实我们可以理解为他是一个代理,类似硬件f5 或者 软件nginx,简单来说就是云原生时代下东西南北流量的代理。那么为什么在有nginx的情况下 istio还要用envoy作为服务代理呢?其实在早期istio也考.

2021-10-06 19:56:51 1880

原创 云原生边缘计算解决方案之openyurt

架构解析(openyurt)组件master组件: yurt-controller-manager yurt-tunnel-server yurt app manager 边缘worker组件 yurt-tunnel-agent yurt-hub tunnel原理解析原生k8s:client(kubectl exec,log等) => kube-apiserver:6443 => kubelet-node:10250边缘k8s: client(.

2021-04-22 22:13:26 373

原创 诡异的Connection reset

场景:开发反馈测试环境A应用通过httpclient连接B应用,偶发java.net.socketException: connection reset报错。理解 Connection reset:在我看来 Connection reset分为2种情况:第一种Connection reset by peer: 服务器返回了RST时,如果此时客户端正在往Socket套接字的输入流中写数据则会提示"Connection reset by peer"。第二种java.net.so...

2021-03-25 21:04:21 35821 1

原创 一次排查istio异常链路的经历

场景:如图我们可以看到从wsn-20201116-0 发送请求到wsn-201116-0的请求Envoy拦截http请求异常,所以我们可以看到inbound 和 outbound的数据是异常的 很多报文没有收集到:验证:如图上发现route_name这个参数是空的,第一反应该问题应该是路由导致的,所以追踪了下路由是如何走的:通过istioctl pc route wsn-20201116-0 -n xhzy-pe --name 80 -o json 查看发起端应用访问wsn-201116.xhz

2020-11-19 21:51:30 499

原创 kubernetes 准入控制器Admission Controller

很多情况下我们并不希望大动干戈去改apiserver代码,所以apiserver提供了一种动态扩展admission的方式,非常推荐。有两种类型:validating admission Webhook 只作校验,比如检测到某个特殊字段就不让请求通过 mutating admission webhook 可以对请求体进行修改(patch)比较重要的是这个AdmissionReview结构体,包含一个请求一个响应请求:有Object的详细信息,用户信息响应: 最重要的是 1. 是否允.

2020-08-22 00:03:59 884

原创 local-path-provisioner 源码解析

程序入口main.gomain 函数日志模块:logrus.SetFormatter(&logrus.TextFormatter{FullTimestamp: true})配置命令行应用:a := cli.NewApp()a.Version = VERSION #设置help显示版本号为0.0.1a.Usage = "Local Path Provisioner" #配置help显示usage内容a.Before = func(c *cli.Context) err

2020-08-03 20:52:07 1308

原创 event-export源码解析

背景:在kubernetes里event记录了集群运行所遇到的各种大事件,有助于排错,但大量的事件如果都存储在etcd中,会带来较大的性能与容量压力,所以etcd中默认只保存最近1小时的,如果我们将该时间改大 会大大增加集群etcd的压力,所以我们需要将该数据存储到其他地方。经过一段时间的寻找 觉的k8s-stackdriver这个项目比较符合目前我的需求,但是它存储到的是promethues,但是目前我司给与promethues的资源并不是很足,并且保存的时间默认只有15天本,地存储也意味着Prometh

2020-06-07 21:09:04 663

原创 编写自己的kubernetes operater

在k8s中有许多编排工具,目前比较热门的是包管理工具Helm,如果说docker是奠定的单实例的标准化交付,那么Helm则是集群化多实例、多资源的标准化交付,但是helm 只能实现简单的编排能力,一些特定场合的应用编排并不能依靠helm实现,比如当一个被依赖服务挂掉感知到之后,如何做一个特定的操作(重启各个依赖服务,操作数据库,发送特定的请求等等),再比如,自动初始化数据库,自动解决服务依赖 实现一键化部署, 再比如节点自愈。这些功能并不能使用helm去实现。所以helm只是实现了自动化,以及标准化。但

2020-05-15 21:24:47 932

原创 一键部署二进制kubernetes + HA 集群

部署方式:ansible-playbook (2.9.6)部署集群类型:二进制kubernetes v17.3 + haproxy + keepalived + etcd+bootstrap自动签署git 地址:https://github.com/yingjianjian/kubernetes-ansible.gitgroup_vars: 群组变量 kubernetes 里的所有...

2020-04-07 23:52:11 458

原创 nginx重定向导致端口映射的端口无法正常访问

描述:在使用路由器进行端口映射的时候,如果使用和nginx 监听的端口一样是不存在问题的 但是如果使用了其他端口 就会出现无法访问的问题。例如:访问http://111.0.120.180:389 会直接跳转到http://111.0.120.180:38080/sso/?return=http://111.0.120.180:38089通过web端的开发者工具 可以看到进行了一次301重...

2020-03-11 23:09:32 5843 1

原创 python Django 实现自定义prometheus export

Prometheus 是一个 Metrics 监控系统,与 Kubernetes 同属 CNCF(Cloud Native Computing Foundation),它已经成为炙手可热的 Kubernetes 生态圈中的核心监控系统。Prometheus 所有的Metrics 都是通过组件export主动pull获取到的。Prometheus提供4种类型Metrics:Counter,...

2020-01-23 14:01:25 1509

原创 CI/CD流程设计及实现

目前我司的CICD的架构基本如图:其实该架构是一个很常见的架构,但是我在这里主要考虑了如何最大化利用该架构 实现CICD的便捷使用以及后续如何快速集成到运维平台。思考的问题:1.因考虑到CICD的可靠性、安全性,需要将pipeline脚本和业务代码分离。2.如何快速的批量生成项目3.在使用pipeline scm的时候如何获取业务仓库的cpmmit-id(CI可以直接...

2019-11-28 20:14:52 4169 1

原创 新版禅道修改源码接入ldap

因新版开源版本不支持ldap,只支持到7.3版本 所以新版禅道需要本地导入插件,并且直接导入之后是无法使用的,因新版的验证方式和旧版不一样。插件包下载地址:https://www.zentao.net/extension-buyExt-326-download.html具体安装过程这里不讲述了,主要是安装完成之后需要修改的几处源码文件:module/ldap/model.ph...

2019-11-23 11:08:20 2319 2

原创 kibana sentinl webhook实现自定义报警

背景:目前每个应用都有各自的负责人,现有的报警机制无法满足 根据应用不同发送给不同的人,kibana的默认报警无法灵活的去展示报警信息。经过一段时间的预研,还是决定选择webhook的形式 中转之后展示自定义的信息。报警邮件效果如图:点击详情跳转到上下文:在有安装sentinl的kibana里配置webhook日志报警:{ "actions": { ...

2019-11-12 17:57:02 1712 3

原创 Ubuntu中使用freeradius配置RADIUS,并在RADIUS中配置LDAP 并实现AP认证

执行 sudo apt-get install freeradius freeradius-ldap freeradius-mysql进行安装freeradius安装完成之后,他会自己启动,需要手动关闭,不然后面会报错,或者直接简单粗暴从任务管理器中kill相关进程也行service freeradius stop修改/etc/freeradius/3.0/sites-enabled/...

2019-10-10 18:51:19 1268

原创 kubernetes kube-proxy模式详解

kubernetes里kube-proxy支持三种模式,在v1.8之前我们使用的是iptables 以及 userspace两种模式,在kubernetes 1.8之后引入了ipvs模式,并且在v1.11中正式使用,其中iptables和ipvs都是内核态也就是基于netfilter,只有userspace模式是用户态。下面详细介绍下各个模式:userspace在k8s v1.2后就...

2019-08-14 17:13:46 8787

原创 kubernetes v1.14 (bootstrap 部署node)

本文采用TLS bootstrap证书:在安装 k8s worker node 时,基本上 worker 的初始状态仅仅是安装了 docker 和 kubelet,worker 需要一种机制跟 master 通信。但网络通信的基本假设是通信双方谁也不信任谁。所以,kubelet bootstrap要以自动化的方式解决如下几个问题:在只知道 api server IP 地址的情况下,工作节点如何...

2019-05-02 17:11:30 1540

原创 阿里云slb 7层代理ingress获取真实客户端ip的方法

起因:ingress 设置ip白名单之后,发现白名单里的ip 403拒绝,后续通过追踪ingress的日志发现 真实的ip 是slb的保留ip 也就是上层代理的ip。这样是无法获取到真实用户的ip的。nginx里的解决方案:使用X-Forwarded-For的方式获取客户端的真实IP地址。需要添加的配置字段和信息为:set_real_ip_from IP_addressreal...

2019-04-02 17:58:42 3941

原创 kubernetes statefulset redis集群部署

redis 模式对比master-slave模式:主从模式单纯的讲就是多个实例,可以是一主多从也可以是多主多从,主从模式的作用就是备份数据,数据层面的容灾,这样当一个master节点数据丢失的时候(硬件损坏),可以依据slave的数据恢复,1.另外一个作用就是做读写分离所有读操作都会访问slave节点,减轻master节点的负载。 默认情况下master节点可以进行读和写,sla...

2019-03-30 20:48:42 1369

原创 prometheus-operator 监控报错

报错alert:KubeControllerManagerDownmessage:KubeControllerManager has disappeared from Prometheus target discovery.根据ServiceMonitor—> Service—>endpoints(pod) 服务发现机制查看到KubeControllerManager没...

2019-03-15 17:39:54 2749

原创 kubernetes里prometheus-operator 监控jvm

在配置prometheus-operator 监控jvm之前,我们必须要了解prometheus-operator的4个crd不然后续会蒙蔽。这四个CRD作用如下Prometheus: 由 Operator 依据一个自定义资源kind: Prometheus类型中,所描述的内容而部署的 Prometheus Server 集群,可以将这个自定义资源看作是一种特别用来管理Prometheus...

2019-03-11 19:28:51 6795 5

原创 Prometheus-Operator 自定义配置

选择Prometheus-Operator:因为是prometheus主动去拉取的,所以在k8s里pod因为调度的原因导致pod的ip会发生变化,人工不可能去维持,自动发现有基于DNS的,但是新增还是有点麻烦。Prometheus-operator的本职就是一组用户自定义的CRD资源以及Controller的实现,Prometheus Operator这个controller有BRAC权限...

2019-03-08 19:11:48 4829 1

原创 基于kubernetes的efk日志系统架构

EFK由ElasticSearch、Fluentd和Kiabana三个开源工具组成。其中Elasticsearch是一款分布式搜索引擎,能够用于日志的检索,Fluentd是一个实时开源的数据收集器,而Kibana 是一款能够为Elasticsearch 提供分析和可视化的 Web 平台。这三款开源工具的组合为日志数据提供了分布式的实时搜集与分析的监控系统。而在此之前,业界是采用ELK(E...

2019-02-22 17:31:03 1573 5

原创 mysql数据同步之后出现的问题

mysql数据同步之后出现的问题: 两个mysql数据同步之后发现两个库执行同一条sql语句执行效率差几十倍通过explain 查看执行计划发现两个实例走了不同的执行计划查看了下索引都是一样的,只是mysql在选择上选择了不同的索引源库使用ACT_IDX_HI_IDENT_LNK_PROCINST索引执行效率较好,目标库默认使用的是ACT_IDX_HI_IDENT_LNK_US...

2019-01-22 11:12:17 614 1

原创 kubernetes rbac权限认证

RBAC 基于角色的访问控制,引入了4个资源对象,分别是Role,ClusterRole,RoleBinding,ClusterRoleBinding.1.角色(ROLE):Role表示是一组规则权限,只能累加,Role可以定义在一个namespace中,只能用于授予对单个命名空间中的资源访问的权限 2.集群角色(ClusterRole)ClusterRole具有与Role相同...

2018-12-23 20:41:25 656

原创 Kubernetes 1.12.0网络之Flannel网络部署

Flannel主要的作用就是将不同节点上的docker容器互相打通。主要功能:1.它能协助kubernetes,给每一个node上的docker容器分配互相不冲突的ip地址2.它能在这些ip地址之间建立一个覆盖网络(overlay network),通过这个覆盖网络,将数据包原封不动的传递到目标容器Flannel 二进制安装1、下载fannel组件wget https://...

2018-10-06 00:46:40 2056

原创 kubernetes v1.12.0集群部署(二进制方式+基于CA签名双向数字证书认证方式)

kubernetes 最简单的方式是通过yum install kubernetes 直接安装,但是默认安装的是v5版本的kubernetes,所以不推荐使用,还有一种是在v1.4版本开始引入了的kubeadm工具一键部署,但是如果 没有访问gcr.io的网络环境的话部署过程会报错。所以我这边推荐使用二进制的方式部署 源码包下载地址:https://github.com/kuberne...

2018-10-02 17:17:33 1764

原创 grafanf集成zabbix

安装zabbix 插件grafana-cli plugins install alexanderzobnin-zabbix-appsystemctl restart grafana-server添加Zabbix为数据源 选择左侧配置图标“Configuration”→“Data Sources”→“Add data source”新增数据源添加zabbix的...

2018-09-24 19:15:51 750

原创 elasticsearch 与 grafana集成

效果图:官方网址:https://grafana.com/官方文档:http://docs.grafana.org/安装 grafana  sudo yum install https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.1.4-1.x86_64.rpm systemct...

2018-09-14 15:00:32 11961 10

原创 ELK日志系统- 可视化视图

在kibana的discover中可以根据自己选择的fileds筛选出自己想要看到的字段比如:但是如何统计某条日志出现的次数或者说某种类型的日志出现的次数并且以可视化图表的形式展现出来这个时候就可以用到kibana的visualize但在创建visualize可视化之前一定要保证自己所选择的index索引已经更新到kibana里如果没有将会找不到该字段如:排查原因:后续...

2018-09-06 14:53:15 8001

原创 redmine的安装

redmine是基于ruby开发的一套项目管理软件,最近公司需要更换项目管理软件,之前一直使用禅道PMS,但是最近想尝试使用其他的管理项目的软件,看是否逼PMS好用,所以最近几天在研究了下redmine,发现redmine还是挺不错的,有免费版本和收费版本。当然收费版本集成了很多已经有的插件,一键安装,功能也比较齐全。这里主要还是讲下免费版本的安装,我这里讲的是redmine集成阿里云RDS,阿里...

2018-09-04 17:11:07 2506

原创 redmine与gitlab集成

上面我们讲了如何在redmine使用git。但是如果只是使用git那么redmine的优势不大,每次更新代码都是需要手动执行。所以我这里讲下如何不手动执行的方法:1.crontab定时任务定期更新,但这个没事实,pass掉2.使用webhook插件。之前就是一直在使用jenkins,也用过jenkins与gitlab触发执行,所以找了下是否哟类似插件。果不其然被我找到了那就是: Git...

2018-09-04 17:10:33 1889

原创 redmine与git集成

公司使用的是git与gitlab管理代码,所以使用redmine的原因之一也是因为可以和git搭配debug废话不多说直接配置点击管理-配置-版本库,在启用scm中单选git,如果你们公司用svn也可以选择上, 设置完成之后就可以去项目上创建版本库了 选择主版本库是为了在标签上直接查看而不需要在配置菜单下查看库路径选择存放git的路径(必须redmine的用户可以访问)...

2018-09-04 17:10:00 2487

原创 shell脚本——释放缓存

环境:先公司测试环境下面运行这很多tomcat,这样导致物理内存不够用。目前我这边只能通过手动清理:Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches手动运行的话就3条命令sync && echo 1 > /proc/sys/vm/drop_cachessync && echo 2 > /proc/sys...

2018-09-04 17:08:58 3263

原创 zookeeper的部署

一、zookeeper介绍zookeeper是一个分布式的开源框架,它能很好的管理集群,而且提供协调分布式应用的基本服务。它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。zookeep...

2018-09-04 17:08:34 456

原创 ActiveMQ的安装与配置

一、JMS支持的消息传递模型JMS支持两种消息传递模型:队列(Queue)和主题(Topic)。1.1 点对点传递模型点对点(point-to-point,简称PTP)Queue消息传递模型。通过该消息传递模型,一个应用程序(即消息生产者)可以向另外一个应用程序(即消息消费者)发送消息。在此传递模型中,消息目的地类型是队列(即Destination接口实现类实例由Session...

2018-09-04 17:08:03 10777

原创 activemq集群搭建

首先ActiveMQ集群是依赖于ZooKeeper集群而存在的,zookeeper的安装见zookeeper的部署一、ActiveMQ集群原理ActiveMQ集群原理,使用ZooKeeper集群注册所有的ActiveMQ Broker。只有其中的一个Broker可以对外提供服务,被视为master。而其他的Broker处于待机状态,被视为slave。而此时slave只是做数据的主从同步。...

2018-09-04 17:07:34 1091

空空如也

空空如也

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

TA关注的人

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