自动化运维
文章平均质量分 79
噜噜噜的博客
这个作者很懒,什么都没留下…
展开
-
kubernetes-nvidia-plugin设计解读
kubernetes-nvidia-plugin设计解读原创 2022-09-14 20:56:00 · 1115 阅读 · 0 评论 -
Istio Envoy Sidecar 原理解析(1)
什么是Envoy?对于一些对于Envoy不是很了解的人,可能对于这个程序的功能完全没有认知,这里我讲下其功能。在istio service mesh中分为两个平面,一个是数据平面,一个是控制平面。对于Envoy来说他就是数据平面最为重要的功能体现。那么envoy的功能到底是什么呢,其实我们可以理解为他是一个代理,类似硬件f5 或者 软件nginx,简单来说就是云原生时代下东西南北流量的代理。那么为什么在有nginx的情况下 istio还要用envoy作为服务代理呢?其实在早期istio也考.原创 2021-10-06 19:56:51 · 1962 阅读 · 0 评论 -
云原生边缘计算解决方案之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 · 393 阅读 · 0 评论 -
诡异的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 · 36662 阅读 · 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 · 523 阅读 · 0 评论 -
kubernetes 准入控制器Admission Controller
很多情况下我们并不希望大动干戈去改apiserver代码,所以apiserver提供了一种动态扩展admission的方式,非常推荐。有两种类型:validating admission Webhook 只作校验,比如检测到某个特殊字段就不让请求通过 mutating admission webhook 可以对请求体进行修改(patch)比较重要的是这个AdmissionReview结构体,包含一个请求一个响应请求:有Object的详细信息,用户信息响应: 最重要的是 1. 是否允.原创 2020-08-22 00:03:59 · 899 阅读 · 0 评论 -
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 · 1353 阅读 · 0 评论 -
event-export源码解析
背景:在kubernetes里event记录了集群运行所遇到的各种大事件,有助于排错,但大量的事件如果都存储在etcd中,会带来较大的性能与容量压力,所以etcd中默认只保存最近1小时的,如果我们将该时间改大 会大大增加集群etcd的压力,所以我们需要将该数据存储到其他地方。经过一段时间的寻找 觉的k8s-stackdriver这个项目比较符合目前我的需求,但是它存储到的是promethues,但是目前我司给与promethues的资源并不是很足,并且保存的时间默认只有15天本,地存储也意味着Prometh原创 2020-06-07 21:09:04 · 685 阅读 · 0 评论 -
编写自己的kubernetes operater
在k8s中有许多编排工具,目前比较热门的是包管理工具Helm,如果说docker是奠定的单实例的标准化交付,那么Helm则是集群化多实例、多资源的标准化交付,但是helm 只能实现简单的编排能力,一些特定场合的应用编排并不能依靠helm实现,比如当一个被依赖服务挂掉感知到之后,如何做一个特定的操作(重启各个依赖服务,操作数据库,发送特定的请求等等),再比如,自动初始化数据库,自动解决服务依赖 实现一键化部署, 再比如节点自愈。这些功能并不能使用helm去实现。所以helm只是实现了自动化,以及标准化。但原创 2020-05-15 21:24:47 · 959 阅读 · 0 评论 -
一键部署二进制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 · 507 阅读 · 0 评论 -
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 · 1560 阅读 · 0 评论 -
CI/CD流程设计及实现
目前我司的CICD的架构基本如图:其实该架构是一个很常见的架构,但是我在这里主要考虑了如何最大化利用该架构 实现CICD的便捷使用以及后续如何快速集成到运维平台。思考的问题:1.因考虑到CICD的可靠性、安全性,需要将pipeline脚本和业务代码分离。2.如何快速的批量生成项目3.在使用pipeline scm的时候如何获取业务仓库的cpmmit-id(CI可以直接...原创 2019-11-28 20:14:52 · 4235 阅读 · 1 评论 -
新版禅道修改源码接入ldap
因新版开源版本不支持ldap,只支持到7.3版本 所以新版禅道需要本地导入插件,并且直接导入之后是无法使用的,因新版的验证方式和旧版不一样。插件包下载地址:https://www.zentao.net/extension-buyExt-326-download.html具体安装过程这里不讲述了,主要是安装完成之后需要修改的几处源码文件:module/ldap/model.ph...原创 2019-11-23 11:08:20 · 2431 阅读 · 2 评论 -
kibana sentinl webhook实现自定义报警
背景:目前每个应用都有各自的负责人,现有的报警机制无法满足 根据应用不同发送给不同的人,kibana的默认报警无法灵活的去展示报警信息。经过一段时间的预研,还是决定选择webhook的形式 中转之后展示自定义的信息。报警邮件效果如图:点击详情跳转到上下文:在有安装sentinl的kibana里配置webhook日志报警:{ "actions": { ...原创 2019-11-12 17:57:02 · 1740 阅读 · 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 · 1350 阅读 · 0 评论 -
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 · 8864 阅读 · 0 评论 -
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 · 1603 阅读 · 0 评论 -
阿里云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 · 4040 阅读 · 0 评论 -
使用pipeline实现jenkins CI/CD
因使用jenkins的maven插件去构建java项目的时候发现构建速度非常慢,通过查找问题发现maven的插件在构建完成的同时会将包上传到master节点上去,这个时候如果网络不好的话会导致上传速度非常的缓慢,非常影响开发速率。之后就想直接抛弃maven插件去构建java项目,也就是自由风格的软件项目。但是后面考虑到扩展性以及其他的一些原因,最终使用了pipeline去实现CI/CDpipe...原创 2018-07-24 16:20:58 · 4240 阅读 · 0 评论 -
zabbix自动同步ldap帐号到数据库
背景:之前公司已经在使用zabbix了 并且使用了ldap 验证 但是公司人数过多,我不想一个个添加用户,所以之后我写了个python脚本每天同步ldap账户到zabbix数据库。#此脚本用于自动同步ldap帐号到zabbix数据库import pymysqlimport subprocessclass Add_User(object):def __init__(self):sel...原创 2018-09-03 09:45:15 · 1802 阅读 · 0 评论 -
Django自定义权限控制
最近一直在做自动化发布,通过开发或者测试发起工单到我这边收到工单并一键发布,最终终于完成了这个功能,虽然功能完成了但是目前还不能使用,因为遇到了个问题就是权限问题。如果我把一键发布页面公开的话岂不是任何人都可以发布么。之后想了想弄了一套权限控制,大致的功能就是我可以允许开发到工单页面发起工单,但我不允许开发去一键发布页面发起工单。所以想到了弄一套权限控制但是Django默认的权限控制只有三...原创 2018-09-03 09:46:10 · 5150 阅读 · 0 评论 -
python-Django使用自带的登录验证
在django里面登录的动作其实不难就是数据的对比,但是难的是登录验证,主要是为了解决没有登录之前页面是无法查看的并自动跳转到login页面django自带的验证的话非常简单使用authenticate方法实现数据库对比,对比的数据库是django后台自带的数据库,并且密码本身就是加密过的login函数实现会话保存以下是我的代码:class UserForm(forms.Form)...原创 2018-09-03 09:48:01 · 2819 阅读 · 0 评论 -
python django 密码验证-通过自定义数据表
在django里面登录的动作其实不难就是数据的对比,但是难的是登录验证,主要是为了解决没有登录之前页面是无法查看的Django 登录页面使用mysql为存储帐号密码的数据库,所以开始的话先要配置mysql,我这里使用python的mysqlclinet去实现集成安装完成只需在setting里配置databasesDjango登录验证分为两种一种是使用django自带的数据库进行验证 一...原创 2018-09-03 09:48:55 · 2347 阅读 · 0 评论 -
Django+ansible+ajax实现自动化部署
目前公司部署环境都是手动进行部署或者写个shell脚本进行部署,但是感觉这样还是比较麻烦的,所以最近我考虑了下将部署集成到运维平台进行自动化实现效果:这个是我第一次想到的版本 当我点击部署的时候后端执行异步部署,部署完成之后返回结果当部署失败的时候有利于我们排错,后续更新如何实时返回结果,有利于我们如何知道实时执行情况首先前端页面的代码特殊的地方就是ajax的代码 置于美化 排版 ...原创 2018-09-03 09:49:54 · 4452 阅读 · 0 评论 -
Django+redis+websocket+ansible实现自动化发布
Django+redis+websocket+ansible实现自动化发布之前已经发布过一个版本就是通过ajax的异步调用实现自动化发布 并将结果返回到web,但是这样有个缺点就是无法查看实时的过程,部署过程进行到什么地步了,并且报错的步骤是那一部分。所以我优化了下代码,使部署过程可视化的实时的显示在web端,我这里是使用redis作为中间件,当然你也可以选择mq作为中间件,都无所谓。效果...原创 2018-09-03 09:50:28 · 2127 阅读 · 0 评论 -
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 · 1780 阅读 · 0 评论 -
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 · 2131 阅读 · 0 评论 -
kubernetes rbac权限认证
RBAC 基于角色的访问控制,引入了4个资源对象,分别是Role,ClusterRole,RoleBinding,ClusterRoleBinding.1.角色(ROLE):Role表示是一组规则权限,只能累加,Role可以定义在一个namespace中,只能用于授予对单个命名空间中的资源访问的权限 2.集群角色(ClusterRole)ClusterRole具有与Role相同...原创 2018-12-23 20:41:25 · 680 阅读 · 0 评论 -
基于kubernetes的efk日志系统架构
EFK由ElasticSearch、Fluentd和Kiabana三个开源工具组成。其中Elasticsearch是一款分布式搜索引擎,能够用于日志的检索,Fluentd是一个实时开源的数据收集器,而Kibana 是一款能够为Elasticsearch 提供分析和可视化的 Web 平台。这三款开源工具的组合为日志数据提供了分布式的实时搜集与分析的监控系统。而在此之前,业界是采用ELK(E...原创 2019-02-22 17:31:03 · 1598 阅读 · 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 · 4883 阅读 · 1 评论 -
prometheus-operator 监控报错
报错alert:KubeControllerManagerDownmessage:KubeControllerManager has disappeared from Prometheus target discovery.根据ServiceMonitor—> Service—>endpoints(pod) 服务发现机制查看到KubeControllerManager没...原创 2019-03-15 17:39:54 · 2827 阅读 · 0 评论 -
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 · 6831 阅读 · 5 评论 -
kubernetes statefulset redis集群部署
redis 模式对比master-slave模式:主从模式单纯的讲就是多个实例,可以是一主多从也可以是多主多从,主从模式的作用就是备份数据,数据层面的容灾,这样当一个master节点数据丢失的时候(硬件损坏),可以依据slave的数据恢复,1.另外一个作用就是做读写分离所有读操作都会访问slave节点,减轻master节点的负载。 默认情况下master节点可以进行读和写,sla...原创 2019-03-30 20:48:42 · 1383 阅读 · 0 评论 -
python+django+jenkins API+jquery实现自动化发布工单系统
背景:目前的发布流程一般都是通过进入jenkins手动去选择项目进行构建,效率上有点慢,并且在选择对应的tag的时候有可能会选择错误,基于这个现象自己在闲余时间搭建了一套自动化发布工单系统,主要是为了减轻手动发布带来的一线困扰,并且加入权限系统,后续有可能将发布直接交给开发发布。首先还是来看下界面。登录界面:提交工单界面:发布列表:发布列表(已发布状态):应用管...原创 2018-07-10 17:29:14 · 7381 阅读 · 5 评论