- 博客(43)
- 收藏
- 关注
原创 【DevOps】GitOps多环境管理最佳实践 -- 多目录模式
多分支模式在管理复杂环境时会遇到很多棘手的问题,而多目录模式则基本解决了这些问题。本文列举了一个复杂环境的目录结构设计示例以供参考,再次墙裂建议大家在GitOps的实践中采用多目录模式来管理多个环境。
2023-04-20 17:18:03
148
原创 【DevOps】GitOps多环境管理 - 别用多分支
上面说的这些问题,在环境越来越多的情况下,处理的难度会指数级的上升,因此,在GitOps的实践中,一定不要选用分支的方式来管理多个环境。下一篇文章中,我们会推荐一种在GitOps中进行多环境管理的方式。
2023-04-15 22:32:45
321
原创 【DevOps】GitOps之痛 -不完美的GitOps
虽然GitOps有这么多令人头疼的问题,但是仍然不失为一种优秀的持续交付方案,并且越来越收到欢迎,上面说到的这些问题,相信在将来也会被不断地完善。
2023-04-14 22:54:44
336
原创 【DevOps】GitOps 初识(下) - 让DevOps变得更好
上一篇文章中,我们介绍了GitOps能为我们带来许多的好处,然而,任何新的探索都将不会是一帆风顺的。在开始之前,如果能了解实践GitOps通常会遇到的挑战,并对此作出合适的应对,可能会使我们使用GitOps的旅程更加的顺利。
2023-04-07 23:02:02
263
原创 【DevOps】GitOps 初识(上) - 让DevOps变得更好
GitOps是一套贯穿整个应用开发和部署周期的DevOps最佳实践。它将Git作为主要的基础设施,应用和配置的存储和同步机制。这种模式将开发人员从基础设施管理任务中解放出来,让他们能够专注于应用程序的开发和交付。GitOps的工作流程非常简单,所有的更改都在Git存储库中进行,包括应用程序代码、基础设施配置和应用程序配置等。当新的更改被推送到存储库时,GitOps控制器会检测到更改并将其自动部署到目标环境中。这种自动化过程可以消除部署过程中的人为错误,从而提高生产力和可靠性。
2023-04-07 10:43:47
298
原创 【kubernetes-工具篇】K9S详解-宝藏k8s界面工具
K9s是一个命令行界面(CLI)工具,用于管理Kubernetes集群。它是一个流行的开源工具,可以帮助Kubernetes管理员和开发人员轻松管理他们的Kubernetes集群。在本文中,我们将简单介绍K9s的概念、功能和如何使用它。
2023-04-06 14:31:53
410
原创 【kubernetes-工具篇】ksniff - 微服务网络抓包
本文介绍了一个k8s插件ksniff, 用于在远程k8s集群的pod及容器上抓包,并将结果重定向到本地的wireshark进行查看。
2023-02-07 11:45:52
105
原创 【kubernetes】从僵尸进程探讨容器的多进程管理
在kubernetes的架构设计中,同一个pod内有多个服务的情况下,每个服务作为一个容器是最佳实践,各容器通过pause容器共享网络命令空间。如果违背这一原则,在一个容器内运行了多个进程,则可能引发一些意料之外的问题。僵尸进行无法回收示例情景如下:一个pod内只有一个容器 容器内运行两个进程(一个后台,一个前台)该pod容器镜像的entrypoint脚本如下:#!/bin/bash/usr/sbin/sshd &exec "$@"传入的command参数为:..
2022-03-31 16:07:28
1196
原创 【kubernetes-网络】Multus CNI为pod添加网卡
背景在特定的业务场景下,某些pod需要添加指定类型的网卡,以满足业务需求. 如下图所示:pod内运行的服务是gobgpd, 监听179端口,且需要与物理环境的路由器建立bgp链接,于是有以下要求:由于服务本身监听端口,为了兼容两个pod调度在同一node上的情况,不能使用hostnetwork(否则会出现端口冲突), 需要使用容器网络; 由于需要与物理环境的路由器建立bgp链接, 需要一个能与外部物理网络联通的网卡, 且IP需要固定,以便路由器上的配置能固定不变;方案方案逻辑图如上.
2022-03-30 10:03:06
702
原创 【kubernetes】Deployment中的pod如何进行域名解析
背景假设一个名为ws的无状态服务,在业务代码中,服务需要根据hostname解析本机ip,并绑定端口启动监听进程, 例如:import socketdef get_hostname(): with open("/etc/hostname") as f: return f.read().strip()ip = socket.gethostbyname(get_hostname())server = socket.socket(socket.AF_INET, soc
2021-04-25 21:37:45
2876
原创 【kubernetes】k8s利用coredns解析集群外部域名
kube-dns简介众所周知,在一个kubernetes集群中,各服务之间可以通过各自的FQDN互相访问,而集群中的kube-dns服务为此提供了域名解析的功能, 使用如下的命令可以看到root@cxy:~# kget svc -n kube-systemNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkube-dns ClusterIP 10....
2021-04-08 22:23:33
4576
原创 【kubernetes】Ubuntu16.04.5下kubernetes高可用集群搭建
基本参数系统版本: Ubuntu 16.04.5 执行用户: root 必须的软件包及版本ii kubeadm 1.20.4-00 amd64 Kubernetes Cluster Bootstrapping Toolii kubectl 1.20.4-00
2021-02-27 14:24:38
271
原创 [杂记]odoo14 自定义Module搜索不到的问题
版本: odoo 14问题:按照官网提示步骤无法找到对应路径,且无法搜索出自定义的Module “academy”。按照文档运行下面的命令后,在页面上搜索不到academy./odoo-bin scaffold Academy my-modules./odoo-bin --addons-path addons,my-modules解决方案:先任意安装一个Module, 如CRM:安装后,点击左上角的settings在General Settings选项最下面,点击“A
2020-12-03 16:38:55
707
原创 【网络】叶脊(Spine-Leaf)网络拓扑下全三层网络设计与实践(七) - 负载均衡及高可用
7.负载均衡及高可用7.1 本节目标理解spine leaf网络下,服务高可用及负载均衡原理; 学习在leaf交换机和服务器上进行相关配置;7.2 方案对比在二层网络中,长长采用主备的方式保证服务的高可用,而spine leaf网络下则是采用多活的方式,克服了在全三层网络中不能使用keepalived等HA软件的缺陷,还且实现了负载均衡和高可用。7.2.1 主备方式...
2020-03-12 20:54:01
2861
1
原创 【网络】叶脊(Spine-Leaf)网络拓扑下全三层网络设计与实践(六) - 虚拟机路由方案及配置
6.虚拟机路由方案及配置在虚拟化的数据中心中,虚拟机承载着关键业务,其相互之间的通信必不可少,虚拟机的网卡桥接在宿主机的网桥上,以宿主机的IP地址作为默认网关,同一物理机上的虚拟机之间的通信,直接通过宿主机网桥可二层互通,不同宿主机上的虚拟机通信经过三层转发互通。6.1 本节目标理解VM直接的通信过程; 学习在leaf交换机上配置VM的路由; 学习在VM及其宿主机上配置VM的路由...
2020-03-12 17:54:17
4269
1
原创 【网络】叶脊(Spine-Leaf)网络拓扑下全三层网络设计与实践(四) - 物理服务器互联
4.物理服务器互联4.1 本节目标理解在spine leaf网络中,物理服务器之间通信方式; 了解如何在leaf交换机上配置下联物理机的接口; 了解如何在物理机上配置上联物理网卡;4.2 拓扑结构在上一节的基础上,加入4台服务器,以下图的拓扑连接到leaf交换机上,leaf交换机没两个分为一对,连接一组物理服务器,如下图,leaf01/02为一对,leaf03/04为一对。...
2020-03-12 17:31:02
3416
1
原创 【网络】叶脊(Spine-Leaf)网络拓扑下全三层网络设计与实践(三) - 交换设备互联
3. 交换机互联3.1 本节目标了解Spine Leaf网络基本拓扑结构; 网络设备互联接口配置; 网络设备bgp配置;3.2 拓扑结构:如下图所示, 本节使用的Spine Leaf网络拓扑,由2台Spine和4台Leaf组成,Spine和Leaf之间两两互联。为方便管理,加入一台linux主机用于管理各交换机设备,则拓扑如下:3.3 测试环境6台交换机(即Sp...
2020-03-12 16:42:28
6453
1
原创 【网络】linux网口bond的链路检测及恢复机制
近期的项目中遇到了这样一个问题,引发了笔者对linux bond和lacp协议的一些研究:情景:如上图所示,server有两张网卡配置了bond0, 工作在mode4负载均衡模式下, 现在从client对server进行持续的ping测试,发现:插拔server端物理网口的网线时, ping一直正常,无丢包; 用ifconfig down enp4s0f0/1 来关闭物理网口时...
2020-03-11 17:59:07
3809
原创 【网络】叶脊(Spine-Leaf)网络拓扑下全三层网络设计与实践(五) - 物理服务器路由方案及配置
2.2 路由方案设计2.2.1 物理设备路由方案大道至简,本着这个原则,本文的设计只采用了静态路由和BGP两种路由协议。其中,静态路由配置在每个leaf上,调度目的地址为本leaf上所接服务器的业务IP的流量,每个leaf与其相连接的spine之间建立eBGP链接,将leaf上配置的静态路由同步到spine上,各leaf通过spine,也互相学习到了各自的静态路由,这样一来,每个leaf和...
2019-08-26 16:37:29
8249
1
原创 【网络】叶脊(Spine-Leaf)网络拓扑下全三层网络设计与实践(二) - 网络规划
2. 全三层架构设计思路采用全三层网络架构设计的出发点是:使用尽量少的交换机高级功能,可以尽可能减少由于功能bug故障造成的问题; 使用尽量少的网络协议,以兼容不通厂商的网络设备 实现简单,易于维护,绝对可靠的路由协议; 通过控制路由来调度流量,尽量减少设备或协议的故障域; 牺牲高级功能带来的便捷,得到更高的可用性和性能;由上述原则,本文的设计选择只使用静态路由和BGP...
2019-08-22 10:51:05
15524
1
原创 【网络/内核】Linux内核参数ignore_routes_with_link_down-忽略已断开连接的路由
Linux内核参数ignore_routes_with_link_down-忽略已断开连接的路由
2019-08-01 17:42:18
1048
2
原创 【网络】叶脊(Spine-Leaf)网络拓扑下全三层网络设计与实践(一) - 叶脊网络架构简介
1. 叶脊网络架构简介天地万物,应运而生。传统的三层网络架构,在发展了多年后,终于也命数将尽了,替代它的,将是叶脊网络架构。究其原因,是因为传统三层网络架构自身存在一些无法突破的限制与弊端,在当今云计算风起云涌,虚拟化如火如荼,数据中心越来越大,网络规模需要无限扩展的时代,叶脊网络架构应运而生。1.1 传统三层网络的弊端如上图是传统三成网络架构的典型拓扑结构:接入层:接入交换...
2019-08-01 15:32:08
42079
3
原创 【网络/内核】Linux内核参数group_fwd_mask-设置bridge过滤MAC地址范围
笔者在利用gns3模拟器搭建网络实验时,发现交换机设备和服务器之间无法成功协商LACP协议,CISCO NEXUS 9K互相之间却可以成功协商LACP, 在交换机和服务器上抓包发现,Nexus 9K发出的LACP报文中的目的MAC地址为00:01:02:03:04:05(而标准LACP协议中规定的是01:80:c2:00:00:02),服务器发出的LACP报文的目的MAC是01:80:c2:00:...
2019-07-23 17:11:51
1837
原创 【网络-高可用】Keepalived虚拟ip不漂移问题
Keepalived主要是通过虚拟路由冗余来实现高可用功能。本文将不对keepalived的基本原理进行阐述,可参考文章Keepalived详细介绍简介、keepalived vip漂移基本原理及选举算法。本文记录了在实践过程中使用keepalived时,在weight值变化的情况下vip不漂移的问题及解决方法。
2019-04-21 11:35:24
10761
3
原创 【Devops】Jenkins - 远程触发三板斧
本文叙述基于以下假设前提,将介绍三种在不同的jenkins服务器之间触发Job的方法:本地Jenkins Server local.jenkins.com 远程Jenkins Server remote.jenkins.com 本地Jenkins Job名 local_job 远程Jenkins Job名 remote_job 需求 ...
2018-09-25 16:12:34
22634
1
原创 【容器】Docker之Mac下host与container之间Volume映射问题
问题描述:Mac下运行docker容器时,其卷挂载方式与在普通Linux上不同,普通Linux上host与container之间Volume映射关系可参考这篇文章。本文中container的名字是graphite,用命令行查看container的volume挂载情况:➜ ~ docker inspect graphite......"Mounts": [ ...
2018-09-20 15:38:35
8864
6
原创 从Synthesize安装Graphite步骤
问题按照Graphite官网上用Synthesize安装Graphite的步骤(或Synthesize Github上的安装步骤)安装后,Graphite的Web UI不能正常工作,经过尝试,发现需要一些额外配置错误详情及解决方法:1. 从synthesize安装,github地址: https://github.com/obfuscurity/synthesize/➜ ~ g...
2018-09-20 13:36:09
260
原创 TCP代理的python实现(包括客户端/服务器/TCP代理三部分代码)
最近一直跟随《Python黑帽子》一书学习网络编程,在实现TCP代理功能的这一节,书中是直接使用FTP客户端和服务器进行测试,为了更深刻的理解通信过程,我们可以自己编写一个socket服务端和客户端来进行测试,同时需要对书中的代码进行一些改动,以适应我们自己编写的服务端和客户端。1.TCP代理用socket方式实现TCP代理,代理方作为客户端和服务端之间通信的桥梁,连接建立过程大致
2017-12-10 21:37:54
5439
原创 如何SSH登录Kali Linux
普通的Linux版本开启ssh功能:只需要修改/etc/ssh/sshd_conf文件,搜索PasswordAuthentication,将这一行注释去掉,改成PasswordAuthentication yes搜索PermitRootLogin,将这一行注释符号#去掉,改为PermitRootLogin yes重启ssh服务:service sshd restartKal
2017-12-09 22:01:16
476
原创 Mezzanine怎样为BLOG创建分级目录
使用Mezzanine制作个人BLOG时,进入ADMIN页面会发现只能简单的添加Blog Post, 所有添加的Blog Post都会在Blog这个页面下显示,但实际情况下,我们往往希望将BLOG进行分类,每个分类的Blog在对应的分类目录下显示,那么怎么在Mezzanine中实现这个功能呢,本文将介绍笔者实现的方法。Step1 创建分类目录分类目录是BLOG目录的子目录,因此,在
2017-12-07 20:08:33
969
原创 Mezzanine多site管理问题
在学习mezzanine的过程中遇到了多site管理的问题。本地服务器ip地址为192.168.0.105,端口为9000. 在浏览器中输入192.168.0.105可以正常访问网页。做了端口映射后通过域名(owenchenxy.vicp.io)访问站点则出现404错误。图1 站点选择为owenchenxy.vicp.io时的page内容图2
2017-12-07 20:07:40
344
原创 使用uwsgi代理mezzanine站点发生import error的解决办法
尝试用uwsgi代理mezzanine站点时Server internal error,查看服务器命令行发现Import Error,比如:ImportError: No module named mezzsite.settingsImportError: No module named mezzsite.urls这是因为,在创建mezzanine项目时,会有一个问题,比如我们
2017-12-07 20:07:02
347
原创 django+nginx+uwsgi+virtualenv部署站点示例
按照uwsgi官方文档部署nginx-uwsgi-django的过程中遇到了很多问题,官方文档可能存在错误或不全,比如:nginx配置文件没有写http{}和event{}部分,是无法启动nginx服务的nginx配置文件中也没有指定用户和MIME格式,这会导致网页不能正确加载静态文件(css/js);官方给出的例中使用了virtualenv,如果是在真实环境中运行uwsgi,将出现Imp
2017-12-07 20:05:47
3316
原创 Web部署到Nginx后静态文件加载不正常(MIME TYPE问题)
问题:在没有将网站部署到nginx之前,一切运行正常,将网站部署到nginx之后,网页可以打开,但样式全都没有加载,浏览器里按下F12键,console有报错:Resource interpreted as Stylesheet but transferred with MIME type text/plain证明文件已经被找到,但是解析的格式不正确,由于这个问题是部署到n
2017-12-07 20:04:25
24819
7
原创 Mezzanine多site管理问题
在学习mezzanine的过程中遇到了多site管理的问题。本地服务器ip地址为192.168.0.105,端口为9000. 在浏览器中输入192.168.0.105可以正常访问网页。做了端口映射后通过域名(owenchenxy.vicp.io)访问站点则出现404错误。图1 站点选择为owenchenxy.vicp.io时的page内容图2 站点选择为192.168时的
2017-12-01 00:32:25
702
翻译 【容器】Docker之应用数据管理(volume/bind mount/tmpfs)
英文原文链接:https://docs.docker.com/engine/admin/volumes/#tips-for-using-bind-mounts-or-volumes虽然我们可以在docker容器中保存写入的数据,但还是有这样几个不足:容器中的数据会随着容器的停止运行而消失, 而且当其他的进程需要这些数据时,很难将这些数据从容器中提取出来;容器的数据写入层是紧密地对应
2017-11-26 10:05:51
4465
原创 【容器】Docker之docker-compose部署django+mysql示例
本文介绍如何用docker-compose部署django+mysql搭建网站。Step1: 安装docker-compose,并为docker-compose添加执行权限:[root@localhost docker]# sudo curl -L https://github.com/docker/compose/releases/download/1.17.0/docker-compo
2017-11-24 17:48:58
2333
原创 【容器】Docker之django+mysql简单部署示例
拓扑:1. 在CentOS7上,django项目目录为/smb/public/eclipse-workspace/DjangoProj/djcode/mysite, 映射到容器django中的目录为/tmp2. 在CentOS7上,mysql数据库对应的目录为/var/lib/docker/volumes/mysql,映射到容器mysql中的目录为/var/lib/mysql步
2017-11-24 15:47:26
2248
原创 【容器】Docker之mysql容器数据库更改不生效的解决方法
问题:在docker中启动mysql容器,在mysql容器中对数据库的更改(如创建数据库,更改数据等),在commit后再次进入容器发现之前的更改全部没有保存,如:步骤如下:1.后台运行mysql容器,设置容器名称为mysql:[root@localhost ~]# docker run --name=mysql -p 3306:3306 -d owenchen1992/mysql
2017-11-24 12:03:29
7320
6
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人