- 博客(200)
- 资源 (25)
- 收藏
- 关注
原创 kubernetes的内部机制
目录1. 写在前面2. 状态转换机制3. k8s对象4. k8s控制器5. 级联指令6. k8s是一个声明式系统吗?7. 结论1. 写在前面个人主页: https://gzh.readthedocs.io关注容器技术、关注Kubernetes。问题或建议,请公众号(double12gzh)留言。Kubernetes是一个容器编排引擎,设计用于在一组节点(通常称为集群)上托管容器化应用。使用系统建模方法,本系列旨在推进对Kubernetes及其基础概念的理解。对于本篇博文,建议您需要提前对K
2020-11-08 22:13:45
523
原创 client-go系列之5---Informer
目录1. 写在前面2. Informer简介2.1 产生的背景2.2 主要功能2.3 主要模块2.4 类图2.5 SharedInformer实现机制2.6 不同资源的Informer定义3. Controller3.1 Controller定义3.2 Controller关键方法3.3 Controller小结3.4 Controller示例1. 写在前面个人主页: https://gzh.readthedocs.io关注容器技术、关注Kubernetes。问题或建议,请公众号(double12
2020-10-22 00:54:49
831
1
原创 client-go系列之4---Indexer
目录1. 写在前面2. Custom Controller中的组件2.1 Indexer2.1.1 简单介绍2.1.2 代码位置2.1.3 类图展示2.2 Indexer索引器实现[原文]1. 写在前面个人主页: https://gzh.readthedocs.io关注容器技术、关注Kubernetes。问题或建议,请公众号(double12gzh)留言。在本系列教程的第一篇中,我们已经对如下这张图作了简单介绍。这张图非常重要,理解这张图对我们正确理解client-go及Controlle
2020-10-18 01:26:31
546
原创 client-go系列之3---restclient的使用
目录0. 背景1. 环境准备2. RestClient使用示例3. 输出结果0. 背景个人主页: https://gzh.readthedocs.io关注容器技术、关注Kubernetes。问题或建议,请公众号留言。首先我通过kind创建了一个6节点的集群,本文章中所有的操作都是在这个集群中进行的。通过本文的讲解,希望您能了解如何使用client-go中的RESTClient来对资源进行操作,这里我只是举了最简单的例子—pod资源获取。文中用到的软件的版本如下:kind[root@
2020-10-14 20:08:52
715
原创 client-go系列之2---管理kubeconfig
目录1. 写在前面2. 集群配置管理2.1 加载配置文件2.2 合并配置文件1. 写在前面个人主页: https://gzh.readthedocs.io关注容器技术、关注Kubernetes。问题或建议,请公众号留言。本系列内容都是基于这个版本的client-go进行讲解,不同版本的略有差异。在使用client-go开发时,通常会遇到两种情况:在集群内部访问kubernetes资源在集群外部访问kubernetes资源关于这两种方式的区别,可以分别看一下下面这段代码直观感受一下:
2020-10-13 21:35:40
892
原创 client-go系列之1---client-go代码结构讲解
目录1. 写在前面2. 代码结构3. 代码使用简单示例3.1 获取kubeconfig及context3.2 创建ClientSet3.3 使用ClientSet获取集群中的pods3.4 使用ClientSet获取指定的pod4. 各种Clients详解5. 其它组件5.1 Reflector5.2 Informer5.3 Indexer5.4 WorkQueue1. 写在前面个人主页: https://gzh.readthedocs.io关注容器技术、关注Kubernetes。问题或建议,请公众
2020-10-13 00:24:03
1322
原创 使用GitOps管理k8s secret
目录1. 写在前面2. 管理Secret比较好的方式3. 结构3.1 目录结构3.2 Scaling4. 设置SOPS4.1 设置AWS4.2 AWS实例配置文件4.3 设置Flux5. 小结1. 写在前面原文链接GitOps是伴随着云原生产生的一个新的概念,它的核心是以一种声明式的方式管理资源,表示当前的状态,让你在任何时候都能知道git中的情况,并将这种声明式的状态解析为集群。我们在GitOps上犯的最大错误是结构。仓库的结构至关重要,你选择如何在公司里组织GitOps,将决定它的成败。当你
2020-10-03 23:45:01
353
转载 goroutine切换背后那些事儿
目录1. 写在前面2. 案例3. PC(程序记数器)4. 栈(stack)5. 操作本文基于于GoLang 1.13。1. 写在前面微信公众号:[double12gzh]个人主页: https://gzh.readthedocs.io关注容器技术、关注Kubernetes。问题或建议,请公众号留言。Goroutine很轻量,从资源消耗方面来看,它只需要一个2Kb的内存栈就可以运行;从运行时来看,它的运行成本也很低,将一个goroutine切换到另一个goroutine并不需要很多操作。在
2020-09-21 22:08:09
401
原创 GoLang字符串比较(二)
目录1. 写在前面2. Benchmark测试2.1 准备测试代码2.2 执行benchmark测试2.3 结论3. 其它测试3.1 前提条件3.2 优点3.3 测试代码3.4 执行测试3.5 结论4. 添加长度判断会提高效率吗5. 总结1. 写在前面微信公众号:[double12gzh]关注容器技术、关注Kubernetes。问题或建议,请公众号留言。在上一篇文章中,我们介绍了GoLang中字符串不同的比较方法,同时也使用一种比较简单粗暴的方法来一起了下不同方法的执行时间。在本文中,我们还
2020-09-19 23:28:14
1528
原创 GoLang字符串比较(一)
目录1. 写在前面2. 字符串比较基本方式2.1 区分大小写2.2 不区分大小写2.2.1 使用strings.ToLower2.2.2 使用strings.Compare3. 使用EqualFold4. 性能分析4.1 生成数据样本4.2 测试读取耗时4.3 区分大小写时的耗时4.3.1 采用`==`时的耗时4.3.2 使用`Compare`时的耗时4.3.3 结论4.4 不区分大小写时的耗时4.4.1 使用`==`时的耗时4.4.2 使用`Compare`时的耗时4.4.3 使用EqualFold时的耗
2020-09-19 23:26:34
5240
原创 并发与调度亲和性
目录写在前面并发调度与亲和性亲和性的限制亲和性增强写在前面微信公众号:[double12gzh]关注容器技术、关注Kubernetes。问题或建议,请公众号留言。将一个goroutine从一个操作系统线程切换到另一个线程是有代价的,如果发生得太频繁,会拖慢应用程序的速度。然而,通过一段时间的努力,Go调度器已经解决了这个问题。它现在提供了goroutine和线程并发工作时的亲和力。让我们回到几年前来了解一下这个改进吧。在Go的早期,Go 1.0 & 1.1期间,当运行并发代码时,如果
2020-09-16 12:56:31
282
原创 golang scheduler工作窃取
目录写在前面Goroutine队列工作窃取I/O和全局队列写在前面微信公众号:[double12gzh]关注容器技术、关注Kubernetes。问题或建议,请公众号留言。本文基于GoLang 1.13在Go中创建goroutine很容易,也很快速。然而,Go最多只能在每个内核上同时运行一个,并且需要一种方法来存放其他goroutine,并确保负载在各处理器上得到很好的平衡。Goroutine队列Go通过本地队列和全局队列在两个层面管理处于等待状态的goroutine。局部队列与每个处理器相
2020-09-15 08:28:40
300
原创 g0
目录写在前面调度goroutine职责创建goroutine推迟函数分配垃圾回收栈增长微信公众号:[double12gzh]关注容器技术、关注Kubernetes。问题或建议,请公众号留言。写在前面本文基于golang 1.13在Go中创建的所有goroutine都在内部调度器的管理之下。Go调度器试图给所有goroutine提供运行时间,并在当前goroutine被阻塞或终止时,让所有CPU开始运行其它goroutine。它实际上是作为一个特殊的goroutine来运行的。调度gor
2020-09-13 16:02:05
1109
原创 golang是如何回收goroutine的
目录1. 写在前面2. 生命周期3. 必备条件1. 写在前面微信公众号:[double12gzh]关注容器技术、关注Kubernetes。问题或建议,请公众号留言。本文是基于golang 1.13Goroutines易于创建,堆栈小,上下文切换快。由于这些原因,开发人员喜欢它们,并经常使用它们。然而,一个程序如果产生许多这样生命周期很短的goroutine,那将会花费相当多的时间来创建和销毁它们。2. 生命周期下面我们将以一个简单的例子来看一下,golang中是如何重用gorout
2020-09-12 23:57:06
953
转载 python正则表达式
转自:http://blog.youkuaiyun.com/whycadi/article/details/20110461. Python正则式的基本用法1.1基本规则1.2重复1.2.1最小匹配与精确匹配1.3前向界定与后向界定1.4组的基本知识2. re模块的基本函数2.1使用compile加速2.2 match和search2.3 finditer2.4 字符串的修改与替换3. 更深入的了解re...
2018-02-26 19:17:20
547
原创 openstack heat redis_HA_redis_sentinel_keepalived
本模板用于创建一个RedisHA系统,基本信息如下:代码位置https://github.com/double12gzh/redis_HA-keepalived-sentinel-reids节点个数master node1个, slave node >= 2个版本信息redis 4.0.2,ruby 2.4.2,keepalived1.2.13,tcl 8.6.7,Ce
2017-10-07 15:21:55
1085
1
原创 openstack heat部署redis_cluster
本模板用于创建一个Redis 集群,基本信息如下:代码位置https://github.com/double12gzh/redis_cluster 节点个数master node3个, slave node 3个版本信息redis 4.0.2,ruby 2.4.2,keepalived1.2.13,tcl 8.6.7,Centos 7.0.1406功能介绍
2017-10-07 15:14:47
996
原创 keepalived的安装及问题定位
安装下载安装包:wget http://www.keepalived.org/software/keepalived-1.1.20.tar.gz# cd /usr/local/src # tar -zxvf keepalived-1.2.18.tar.gz # cd keepalived-1.2.18 # ./configure --prefix=/usr/local/keepal
2017-10-07 15:09:03
8908
1
原创 将两个表序列表合并为一个有序列表
1 class Solution(object): 2 def merge(self, nums1, m, nums2, n): 3 nums0 = list() 4 i = 0 5 j = 0 6 7 while i < m and j < n: 8 if nums1[i
2017-07-01 10:23:30
3029
原创 sqlalchemy修改openstack数据库
一.数据库更新步骤 a. 添加版本文件 在下面的目录中添加新的版本文件,注意文件开头的编号要比本目录下已存在的版本号大。/usr/lib/python2.7/site-packages/storagemgmt/storage/sqlalchemy/migrate_repo/versions b. 修改models.py文件 修改/usr/lib/python2.7/site-packages
2017-06-30 20:45:27
890
转载 数据库外键的取舍
对于主/外键/索引来说,在一些开发团队中被认为是处理数据库关系的利器,也被某些开发团队认为是处理某些具体业务的魔鬼,您的观点呢?在实际应用中您会采取哪种方式?大家共同观点:主键和索引是不可少的,不仅可以优化数据检索速度,开发人员还省不其它的工作,矛盾焦点:数据库设计是否需要外键。这里有两个问题:一个是如何保证数据库数据的完整性和一致性;二是第一条对性能的影响 2
2017-06-25 21:46:42
568
转载 数据库外键的使用
外键的作用:保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值!例如:a b 两个表a表中存有客户号,客户名称b表中存有每个客户的订单有了外键后你只能在确信b 表中没有客户x的订单后,才可以在a表中删除客户x建立外键的前提: 本表的列必须与外键类型相同(外键必须是外表主键)。
2017-06-25 21:41:31
1037
原创 执行tox -egenconfig出现错误genconfig: could not install deps [-r/home/mistral/test-requirements.txt]
通过tox -e genconfig 为Mistral生成配置文件时出现 下面的错误:[root@vitrage mistral(keystone_admin)]# tox -egenconfiggenconfig create: /home/mistral/.tox/genconfiggenconfig installdeps: -r/home/mistral/test-re
2017-06-08 17:13:31
4164
原创 pvcreate出现错误:Device /dev/sdb1 not found (or ignored by filtering).
错误信息:[root@compute2 ~]# pvcreate -vvv /dev/sdb1……Device /dev/sdb1 not found (or ignored by filtering).No devices to process.Unlocking /run/lock/lvm/P_orphans_undo_flock /run/lock/lvm/P_orp
2017-06-07 20:53:04
35270
1
原创 docker安装gitlab,redis,postgresql搭建代码托管环境
配置加速器可以参考下面链接去配置一下docker加速器(不过还是推荐用aliyun的)http://blog.youkuaiyun.com/gzhouc/article/details/65934897拉取镜像docker pull sameersbn/gitlab:9.1.4docker pull sameersbn/postgresql:9.6-2docker pull samee
2017-05-24 21:14:12
2644
原创 docker挂载的目录无法读写
使用下面的命令可以创建一个容器并且把本地的/home/dock/Downloads目录挂载到容器中的/usr/Downloads中[root@docker ~]# docker run -it -v /home/dock/Downloads:/usr/Downloads ubuntu /bin/bash在Centos上创建完后,会出现如下问题root@637fe9ea94f
2017-05-07 15:01:00
10466
原创 理解python中的__str__, __call__, __init__, __getattr__
解释__getattr__:当调用不存在的属性时访问这个方法__str__: 对象打印出来的字符串(返回用户看到的)__repr__: 对象打印出来的字符串(返回开发者看到的)__call__: 如果类实现了这个方法,相当于把这个类型的对象当作函数来使用,相当于 重载了括号运算符如:class MyClass(object): def __call__(
2017-04-18 22:30:05
1749
原创 使用alembic进行openstack数据库版本管理
在线更新1. alembic init # 此处,我用的是alembic_v2.修改alembic.ini。如下:sqlalchemy.url = driver://user:pass@localhost:port/dbname 具体实例: sqlalchemy.url = mysql+mysqldb://storage:lenovo@192.168.100.6/sto
2017-04-16 23:42:56
1714
转载 openstack通过sqlalchemy修改数据库的表结构
更改数据库的方法为数据库添加一张或多张新表删除一张或多张表为旧表添加一个字段为旧表更新一个字段为旧表初始化一条新的记录最后更改数据库的方法在开发 Openstack 项目的过程中, 对 models class 进行直接修改是不被允许的. 这不符合持续集成的规范, 也可能导致原始数据的丢失. 所以我们会使用一种类似打补丁的方式来对 Openstack
2017-04-08 20:12:35
1785
原创 gnocchi配置文件
[root@centos7 ~]# cat /etc/gnocchi/gnocchi.conf | grep -v ^$ | grep -v ^#[DEFAULT]log_dir = /var/log/gnocchi[api]port = 8041host = 0.0.0.0workers = 8max_limit = 1000[archive_policy][cors][co
2017-03-31 13:54:15
1726
原创 rdo安装openstack
https://www.rdoproject.org/install/quickstart/可以用packstack --gen-answer-file=answer-file.txt来生成的应答文件,通过配置应答文件就可以做批量配置。硬件条件:6G RAM关闭与开启以下服务:$ sudo systemctl disable firewalld$ s
2017-03-31 12:43:04
845
原创 阿里源centos yum epel
1.安装base reop源cd /etc/yum.repos.d接着备份旧的配置文件sudo mv CentOS-Base.repo CentOS-Base.repo.bak下载阿里源的文件sudo wget -O CentOS-Base.repohttp://mirrors.aliyun.com/repo/Centos-7.repo2 安装epel re
2017-03-31 12:25:50
2842
原创 nova的服务心跳机制和服务状态监控机制的实现
Openstack中的服务是分布式部署,因此,各个服务的启停状态,决定了此系统的可用性。我们可以通过openstack提供的接口来查看服务的运行状态,比如:nova service的相关配置Nova相关的配置项都nova/conf这个目录下,如果我们相查看service相关的配置项,可以看nova/conf/service.py。其中,注意一下这两个配置项:servic
2017-03-25 21:27:34
4235
1
原创 docker安装
ref: https://docs.docker.com/engine/getstarted/step_one/ 对于centos,首先配置好yum源和epel源,因为epel中自带了docker的包,所以直接运行以下命令安装。0. 配置yum和epel源epel源。把下面的内容放到/etc/yum.repos.d/epel.repo[epel]name=Extra Pa
2017-03-25 10:23:11
562
原创 pip国内源
豆瓣(douban) http://pypi.douban.com/simple/ 阿里云 http://mirrors.aliyun.com/pypi/simple/中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
2017-03-23 20:03:01
496
原创 openstack向社区提交代码及bug fix
1. git clone https://git.openstack.org/openstack/.git2. cd git review -s3. git config --global gitreview.username yourgerritusername4. git remote update git checkout master git pull --ff-only
2017-03-02 09:05:47
1443
Docker技术入门与实战
2017-05-02
魔方幻方行列对角线之和相等
2012-05-23
大海星义工管一系统
2012-03-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人