运维知识体系

运维知识体系

运维知识体系总结,持续更新,欢迎转载。
缓存知识体系

缓存知识体系

运维知识体系之缓存,分层多级缓存体系。
K8S实践指南

K8S实践指南

Docker和Kubernetes实践指南(每周更新)
新运维课堂

新运维课堂

全新体系化课程,开启运维新征程!

重磅|PM不背锅竟是用了这个项目管理工具

大部分的互联网公司,是没有项目经理的,所以PM同时需要承担项目管理的角色,而项目延期似乎是个经常发生的事情,明明一个月的计划,结果一个半月了还没能上线,老大怒了过来问责,产品怪技术开发不给力,技术怪产品老改需求,班也加了,吵也吵了,各种扯皮,最后问题还是没解决...
继续阅读 »
大部分的互联网公司,是没有项目经理的,所以PM同时需要承担项目管理的角色,而项目延期似乎是个经常发生的事情,明明一个月的计划,结果一个半月了还没能上线,老大怒了过来问责,产品怪技术开发不给力,技术怪产品老改需求,班也加了,吵也吵了,各种扯皮,最后问题还是没解决,同事之间矛盾还加深了,下个项目还是该延期延期。

这个问题,看起来挺难解决,个人认为,主要原因还是在于需求负责人即PM缺乏项目管理的思维,没办法啊,作为需求发起人,这锅PM不背谁背呢?





在任何一个项目开发或设计中,项目管理被认为最重要的过程之一,因此,选择一款适宜的项目管理工具尤为重要。但是,其实这个事情也没有那么难,下面我就分享一下自己的项目管理经验,总结起来:就是快点使用CORNERSTONE项目管理工具啊,你不用活该你背锅!



下面就用CORNERSTONE的需求管理流程,来带领大家建立一个让开发和测试都受益PRD。



CORNERSTONE的需求管理功能可以建立一个公开需求池,向项目组所有成员广泛收集需求,通过分析、评审去确定排期与安排,合理并有效的把控需求生命周期管理,并在不同阶段把任务分发给产品、设计或者开发人员,合理并有效的把控需求生命周期管理。



创建分类 首先在需求模块中创建需求分类。





创建需求 接下来创建需求,团队的成员可以一起为产品提供需求,在这里可以直接分配好需求责任人、分类、优先级,以及需求的详细描述,也可以在之后进行补充和添加。





对于已创建的需求,团队的每一位成员都可以实时查看需求的详情,并参与讨论,一起对需求进行评估,





有些需求比较复杂,需要拆分成若干个子需求来分配给不同的人去完成,在CORNERSTONE中,我们只需要在需求的详情页为需求添加子对象即可。





看板视图 为帮助产品经理对需求进行合理的安排与排期,CORNERSTONE的多种看板视图同样发挥了作用,用户可以通过CORNERSTONE查看需求的进度统计,安排开发计划。









经过上述的简单步骤,我们就已经搭建起了一个标准的需求管理体系,对于产品的需求,分类、优先级、状态、责任人在这里可以一目了然。



这里只介绍了CORNERSTONE不到万分之一的功能,好的产品需要大家亲自体验,传说门在此cornerstone365.cn,拿走不谢。当然,一个「好的leader」就是最好的项目管理工具,但是使用了CORNERSTONE项目管理工具, 下次,你的项目还怕延期么?妈妈再也不担心我背锅了。


收起阅读 »

8款主流Scrum敏捷开发工具评测,建议先马后看!

做敏捷开发,如何敏捷?我们需要一系列成熟的工具帮助我们敏捷。敏捷开发工具的适合以及选用,对开发项目起着关键性的作用。此篇介绍我们在scrum敏捷开发中发掘的几款工具,方便更多新加入的开发者上手。 1、worktile     ...
继续阅读 »
做敏捷开发,如何敏捷?我们需要一系列成熟的工具帮助我们敏捷。敏捷开发工具的适合以及选用,对开发项目起着关键性的作用。此篇介绍我们在scrum敏捷开发中发掘的几款工具,方便更多新加入的开发者上手。


1、worktile 



 



 



 



worktile应该说是中关村范,  付费, 免费只有基本功能; 



简单试用了一下,还不错的感觉啊, 可以任务切换;



针对不同product backlog, sprint backlog  等之间切换;



但是没有燃尽图??不能设置任务/项目的周期;没有工作量估计, 只有截止日期,是反 scrum的。

没有sprint的概念,只有task 与 项目;所以只能每个项目当sprint来管理了!

支持 android iOS版本的;worklite 大功能都有,但是不够细致,该有的没有,没需求的反而不少,面板操作也不怎么合理,还有不少必要功能隐藏的太深。用了半年,刚开始感觉不错,但是慢慢的感觉需求不能满足了,而且扩展伸缩太小,不同模块直接的内容不能关联。



 





2、Teambitio



 



 



模仿 Trello ; 付费,免费只有基本功能;

Teambition应该是硅谷范。teambition适合敏捷开发,但是缺少层级管理

teambition 功能比 worktile完善,细致度也还可以,但是面板操作上很多地方还比不上worklite,细小功能的编排让人莫名其妙。刚开始用感觉很奇怪,用惯了会好点,但是日程这个功能完全不是想要的那种,比不上worklite或者CORNERSTONE的。也没什么扩展伸缩。个人版免费,企业版收费。



 



 



3、CORNERSTONE



 



 



 



CORNERSTONE应该也是硅谷范,免费,适合各大敏捷开发团队;



CORNERSTONE是一个一站式项目管理协作平台,帮助企业进行智能管理,解决研发项目管理痛点,它支持持续交付与集成,能够透过各个维度跟踪记录项目进度,帮助团队轻松配合完成目标。



它为团队提供敏捷、任务、需求、缺陷、测试管理、WIKI、共享文件和日历等功能模块,帮助企业完成团队协作和敏捷开发中的项目管理需求;更有甘特图、看板、思维导图、燃尽图等多维度视图,帮助企业全面把控项目情况。



同时,CORNERSTONE还自带文件储存和共享、文档协作功能,并且可以实现团队之间的实时沟通。换句话说,选用CORNERSTONE,可以不需要再挑选文档协作工具、文件储存和共享工具、团队内部沟通工具。



此外,不仅是产品研发,销售、运营、行政审批也可以使用CORNERSTONE进行管理。使用统一的管理平台,对于企业来说无疑是大大降低了管理成本。



 





4、禅道项目管理软件



 



 



 



还是感觉太复杂, scrum开发,本来讲究的是一个blackboard ,本来一个燃尽图就可以搞定了,这个可好 ,整了一堆没用用的,管理人员操作不方便,开发人员厌烦的功能!!!!!!



唉, 失望......就几个基本的白板功能,还收不少的费用,sign!!! 传统的项目倒可以考虑使用;

禅道项目管理软件集产品管理、项目管理、质量管理、文档管理、组织管理和事务管理于一体,是一款功能完备的项目管理软件,完美地覆盖了项目管理的核心流程。



 



 





5、 leangoo



 



 



 



使用了一下leangoo, 能满足基本的看板功能,但太过于简单;比如下面的基本功能都没有: 



1) story 已完成工作量记录; 并且与燃尽图的配合;

2) story 跨 看版  或者 sprint 拖放;  



3) product sprint  backlog 的联合管理;



4) 卡片的优先级设定;最低应提供设定界面, 然后可以自动排序;

5) 导出功能太弱了,相关标注 ,工作量,开发者等等信息都没有了?! 



6) 没有提供导入功能;



7) 只有在线版本;



 



6、youtrack



 



 



一款类似于 JIRA的项目管理与 bug 跟踪的软件,JetBrains 出品, intelj, phpstorm,  webstorm, Teamware(TeamCity, youtrack)

部署管理,比较复杂,10人以上收费;  可能要考虑破解版:风险

小团队开发,代价有点高;



 



 



7、JIRA



 



 



 



收费:都是按license卖的,CQ一个license  3-5W块, JIRA  20个license  4W块左右。



JIRA是Atlassian公司出品的项目与事务跟踪工具,被广泛应用于缺陷跟踪、客户服务、需求收集、流程审 



批、任务跟踪、项目跟踪和敏捷管理等工作领域。





8、 Mantis



 



 



Mantis是一个基于PHP技术的轻量级的开源缺陷跟踪系统,以Web操作的形式提供项目管理及缺陷跟踪服务。在功能上、实用性上足以满足中小型项目的管理及跟踪。更重要的是其开源,不需要负担任何费用。


收起阅读 »

效率为王!11款高效的团队协作工具

每个团队都有协作办公的需求,对协作类工具的需求也比较强烈。为满足这一需求,国内外陆续涌现了很多协作类工具,涵盖文档协作、项目协作和企业内即时通讯等各个方面。现在就给大家介绍几款目前国内外最实用的团队协作工具,这些工具对提高团队协作工作效率非常有益。 文档协作...
继续阅读 »

每个团队都有协作办公的需求,对协作类工具的需求也比较强烈。为满足这一需求,国内外陆续涌现了很多协作类工具,涵盖文档协作、项目协作和企业内即时通讯等各个方面。现在就给大家介绍几款目前国内外最实用的团队协作工具,这些工具对提高团队协作工作效率非常有益。



文档协作工具



文档协作是很多公司都会有的一个需求,通过文档协作,可以有效提高团队方案讨论、协作撰稿和校稿等工作的效率。



石墨文档



屏幕快照-2015-08-09-上午11.30.26-1024x577.png!v.jpg



石墨文档是一款富有设计内涵的在线协作文档,简洁、轻便是它给人的第一印象。



它支持多人协作编辑一个文档。在多人同时编辑同一个文档时,你可以通过浮动的头像实时看到其他人的编辑过程。细节评论功能是石墨文档的另一个特色功能,你可以对文档的细节内容进行评论,大家可以一起参与讨论,这非常适合产品和运营团队用来讨论方案和撰写周报等。



所有文档都是实时保存在云端的,你可以随时随地查看、编辑和分享文档,也可以查看文档的编辑历史。此外,石墨文档还支持将文档导出为Word、JPG和PDF格式的文件。石墨文档目前同时拥有Web端和微信端。



Google Docs



webwxgetmsgimg1-1024x403.png!v.jpg



Google Docs是一套在线办公软件,包括在线文档、表格和演示文稿。



Google Docs允许多人同时在线编辑和更新同一个文件。协作编辑时,也可以实时看到其他成员编辑的内容。系统会自动保存每次编辑修改的内容,这样你就可以查看谁在什么时候做了什么修改。



Google Docs的编辑功能也非常便捷,只需点击工具栏里的按钮,即可快速完成文字加粗、加下划线、缩进、更改字体和单元格背景颜色等操作。此外,你还可以将文件轻松导入和导出Google Docs。



作为一款老牌在线办公软件,Google Docs的功能较为齐全,用户群体也非常广泛,用户数超3亿。



Quip



0a6SSsQs9WHtkorI.png!v.jpg



Quip是一款国外的支持团队协作的文档处理工具,允许多人同时在一个文档里编辑。和其它文档公交相比,Quip有两大特色功能,一是它有即时通讯功能,在多人协作编辑时如果有问题需要沟通,可以直接与其他协作者在线交流;二是支持离线编辑,连网之后内容会自动同步。



Quip支持从Dropbox、Google Docs和Evernote等平台导入文档,也允许将文档导出为Word、Excel和PDF格式的文件。Quip目前拥有网页端、iOS和Android应用。Quip的基础功能免费,高级功能需要付费。



文件储存和共享工具



Dropbox



166.jpg!v.jpg



Dropbox是一款在线云储存工具,主要专注于文件的储存、同步与共享。



将文件放入Dropbox里的文件夹后,文件会被自动同步到云端,你在任意设备上登陆Dropbox都可以访问和编辑这些文件。如果在一台设备的Dropbox里修改文件,文件在所有设备的Dropbox里都能实时更新。此外,你还可以将Dropbox文件夹里的文件与其他用户分享。公司和团队内部可以用它来共享文件资料。



Dropbox提供2G免费储存空间,要想获得更多空间,有两种选择,一是通过邀请他人使用来免费获取更多储存空间;二是付费购买。



金山快盘



1331574798875.jpg!v.jpg



金山快盘是一款云端的文件储存和共享工具,支持文件的同步、备份和共享。安装快盘后,你可以将文件放进指定文件夹,文件会被自动同步到你所有装有快盘的设备中。如果文件内容有变动,文件在所有设备的快盘里都能实时更新。所有文件都是实时储存在云端的。



你可以将快盘里的文件轻松共享给其他团队成员,并可以设置文件权限。文件内容一旦有改动,其他成员能立即看到,而且文件的所有修改历史都可以轻松查看。金山快盘比较适合用来在团队内部共享资料和协同办公。金山快盘提供100G的免费空间,扩容则需要付费。



上面分享的协作类工具所提供的服务都是基于云端的,方便大家随时随地与团队成员协作办公,有效地提高了团队协作的效率。



团队内部沟通工具



Slack



屏幕快照-2015-08-17-下午3.55.441-1024x501.png!v.jpg



Slack应该是今年最火爆的企业内部沟通协作工具了。Slack刚成立一年多,今年4月刚融资1.6亿美元,估值高达28亿美元。



Slack 的目标是:将公司内部所有沟通方式整合到一个地方。



Slack有即时通讯功能,你可以和团队成员直接沟通。此外,Slack还整合了80多款工具产品,包括邮件、 IM、Asana和Github等,将这些工具收到的信息整合到Slack,这样公司内部的所有沟通都能在此完成。此外,Slack还整合了文件分享系统,公司内所有的共享文件,包括共享在Slack、Google Docs和Dropbox里的文件,都能通过内置搜索工具搜索到。



Slack既有网页端也有移动端,可以跨平台使用。



瀑布IM



webwxgetmsgimg-1.png!v.jpg



瀑布IM是一款团队协作沟通工具。公司可以通过瀑布IM的频道和分组功能将公司部门分组原封不动的搬到瀑布IM上,使用门槛比较低。



除了具有普通IM工具拥有的即时通讯功能外,瀑布IM最显著的特点在于它整合了很多第三方工具,包括Tower、Asana、Worktile、Teambition和Evernote等40多款工具,帮助用户在这一个地方就能完成所有的沟通,不需要在各种IM工具中往返切换,提高了团队沟通的效率。



此外,用户还可以在瀑布IM里共享文件、置顶频道、添加链接、标注需要注意的重要事项等。



项目协作类工具



Asana



2076325835-1024x444.png!v.jpg



Asana是一款团队任务管理工具。正如Asana的slogan “Teamwork without email”所说的一样,Asana的目标是将自己打造成可替代邮箱的更为高效的团队任务协作工具。



在Asana里,你可以直接创建任务,并为任务添加协作者,确保分工明确。大家可以直接在任务下面评论或者添加附件,关注任务的其他成员能实时看到,无需再通过邮件反复沟通,提高了任务沟通的效率。为确保任务按时完成,你可以任务设置的deadline,任务完成后直接勾选。



在Asana里,你关注的所有项目和任务的最新动态都会自动显示在收件箱里。每条信息在读完之后可以通过标记的方式自动归档。你创建的所有任务及任务沟通历史都可以轻松搜索到。Asana目前有网页端和iOS/Android应用。



Teambition



teambition-1024x768.jpg!v.jpg



Teambition是一款基于云服务的项目协作工具。创建一个项目后,你可以通过“任务板”、“分享墙”和“文件库”等功能模块来管理项目。



在任务板上,你可以创建任务并和团队成员一起推动任务进展,还可以根据任务进展来拖拽任务。在“分享墙”里,你可以和团队成员分享和沟通想法。通过“文件库”,你可以将文件共享给大家。如果你是项目负责人,可以利用“回顾”功能快速了解每一个成员的工作进展。一旦你参与的项目有新进展,你能自动收到消息通知。所有这一切,都有效提高了团队项目协作的效率。



Teambition目前既有网页端,也有Mac/Windows客户端和iOS/Android应用。



Worktile



165-1024x467.jpg!v.jpg



Worktile是一款主要面向中小团队的协同办公工具。它的核心是以任务看板的方式来展现团队内部的信息以及任务分工安排,从而有效解决团队之间项目协作效率低下的问题。



你可以从列表、标签、时间、成员等不同维度来管理项目。通过日历视图,你可以轻松查看任务进展;团队成员也可以在worktile里轻松共享文件资料和进行在线讨论。



Worktile同时拥有网页端、iOS和Android应用,服务完全免费,而且不限团队人数和存储空间。



CORNERSTONE(http://www.cornerstone365.cn)



微信截图_20190704181637.png



CORNERSTONE是一个一站式项目管理协作平台,帮助企业进行智能管理,解决研发项目管理痛点,它支持持续交付与集成,能够透过各个维度跟踪记录项目进度,帮助团队轻松配合完成目标。



它为团队提供敏捷、任务、需求、缺陷、测试管理、WIKI、共享文件和日历等功能模块,帮助企业完成团队协作和敏捷开发中的项目管理需求;更有甘特图、看板、思维导图、燃尽图等多维度视图,帮助企业全面把控项目情况。



同时,CORNERSTONE还自带文件储存和共享、文档协作功能,并且可以实现团队之间的实时沟通。换句话说,选用CORNERSTONE,可以不需要再挑选文档协作工具、文件储存和共享工具、团队内部沟通工具。



此外,不仅是产品研发,销售、运营、行政审批也可以使用CORNERSTONE进行管理。使用统一的管理平台,对于企业来说无疑是大大降低了管理成本。





事实上,没有任何一个团队协作工具会是最好用的,根据自身的需求挑选最合适的工具才是硬道理,希望在今天给大家分享的这些工具中,大家都能找到适合自己的工具,帮助自己的团队提升协作效率。


收起阅读 »

kolla-ansible安装openstack高可用企业级集群

一.环境准备1.hosts设置 每台设备两块网卡: 第一块:NAT模式,用于下载软件包,设置好IP可以上网 第二块:桥接模式,用于External网络,用于虚拟机连接外部网络,不用设置IP   hosts:hosteth0eth1deploy9.110.187...
继续阅读 »
一.环境准备1.hosts设置
每台设备两块网卡:
第一块:NAT模式,用于下载软件包,设置好IP可以上网
第二块:桥接模式,用于External网络,用于虚拟机连接外部网络,不用设置IP
 
hosts:hosteth0eth1deploy9.110.187.130 controller019.110.187.131不需要IPcontroller029.110.187.132不需要IPcompute019.110.187.133不需要IPcompute029.110.187.134不需要IPstorage9.110.187.135不需要IP2.ssh免密登录
ssh-keygen
ssh-copy-id root@controller01
ssh-copy-id root@controller02
ssh-copy-id root@compute01
ssh-copy-id root@compute02
ssh-copy-id root@storage
3.存储节点配置
  1. 要启动cinder存储服务,需先添加一块新的硬盘,然后创建pv、vg

[root@storage ~]# pvcreate /dev/sdb
[root@storage ~]# vgcreate cinder-volumes /dev/sdb //vg名取名为 cinder-volumes,这里主要跟 kolla配置文件里vg名一致

  1. 只允许vm实例访问块存储卷,对LVM可能出现异常做设置

vim /etc/lvm/lvm.conf
#修改 devices 下面的,有多少块硬盘就写多少块,如果不想使用系统盘,则不写a|sda
filter = [ "a|sda|", "a|sdb|", "r|.*|" ]

#重启lvm服务
systemctl restart lvm2-lvmetad.service
4.配置国内PIP源
所有节点都需要配置
mkdir ~/.pip

cat << EOF > ~/.pip/pip.conf
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple/
[install]
trusted-host=pypi.tuna.tsinghua.edu.cn
EOF
5.安装PIP
#安装依赖
yum install -y python-devel libffi-devel gcc openssl-devel libselinux-python

#安装PIP
yum install -y python-pip
pip install --upgrade pip
6.安装docker
  1. 所有节点都安装

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce

  1. 配置Docker共享挂载

mkdir /etc/systemd/system/docker.service.d 
tee /etc/systemd/system/docker.service.d/kolla.conf << 'EOF'
[Service]
MountFlags=shared
EOF

  1. 使用阿里加速地址

mkdir -p /etc/docker

systemctl daemon-reload && systemctl enable docker && systemctl restart docker
systemctl status docker
二.部署节点安装1.安装docker模块
pip install docker   //这个其它节点也需要安装,否则后面会报错
2.ansible安装
yum install -y ansible
pip install -U ansible
3.安装kolla和kolla-ansible
  • Kolla-Ansible 可以从pip安装,也可以从git安装,这里演示从pip安装
pip install kolla kolla-ansible

错误解决方案[list=1]

  • Cannot uninstall 'PyYAML'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
  • 解决:强制更新
    pip install --ignore-installed PyYAML
    [list=1]
  • 如果出现
    requests 2.20.0 has requirement idna<2.8,>=2.5, but you'll have idna 2.4 which is incompatible.
    错误,则强制更新
    requets
  • pip install --ignore-installed requests

    • 配置kolla-ansible1)拷贝globals.yml 和passwords.yml 到 /etc/kolla 目录
      cp -r /usr/share/kolla-ansible/etc_examples/kolla /etc/
      2)拷贝kolla-ansible的主机清单文件(all-in-one和multinode)
      cp /usr/share/kolla-ansible/ansible/inventory/* /home/​

    注:如果是在虚拟机里再启动虚拟机,那么需要把virt_type=qemu,默认是kvm

    mkdir -p /etc/kolla/config/nova cat << EOF > /etc/kolla/config/nova/nova-compute.conf [libvirt] virt_type=qemu cpu_mode = none EOF

    4.生成密码文件
    kolla-genpwd
    修改下面字段,使用方便的密码
    vim /etc/kolla/passwords.yml    keystone_admin_password: devops
    5.修改配置文件[list=1]
  • grep -Ev "^$|^[#;]" /etc/kolla/globals.yml
  • kolla_base_distro: "centos"kolla_install_type: "source"openstack_release: "rocky"kolla_internal_vip_address: "9.110.187.180"network_interface: "eth0"api_interface: "{{ network_interface }}"neutron_external_interface: "eth1"neutron_plugin_agent: "openvswitch"enable_cinder: "yes"enable_cinder_backend_iscsi: "yes"enable_cinder_backend_lvm: "no"enable_haproxy: "yes"enable_heat: "yes"glance_enable_rolling_upgrade: "no"ironic_dnsmasq_dhcp_range:tempest_image_id:tempest_flavor_ref_id:tempest_public_network_id:tempest_floating_network_name:
    [list=1]
  • 编辑/home/multinode文件
  • [control]controller01controller02​[network]controller01controller02​[inner-compute]​[external-compute]compute01compute02​[compute:children]inner-computeexternal-compute​[monitoring]deploy​[storage]storage​[deployment]localhost       ansible_connection=local........
    6.网关配置这里physnet1是对外网络的名字,在dashboard里创建供应商网络的名字要和这里对应vim /usr/share/kolla-ansible/ansible/roles/neutron/templates/ml2_conf.ini.j2
    [ml2_type_vlan]{% if enable_ironic | bool %}network_vlan_ranges = physnet1{% else %}network_vlan_ranges = physnet1{% endif %}
     三.openstack集群安装1.提前拉取镜像
    kolla-ansible -i ./multinode pull -vvv
    2.确认inventory配置文件是否正确
    ansible -m ping all -i ./multinode
    3.Bootstrap服务的依赖安装
    kolla-ansible -i ./multinode bootstrap-servers
    4.检查
    kolla-ansible -i ./multinode prechecks
    5.部署
    kolla-ansible -i ./multinode deploy​注:可以加-vvv,显示更多
    6.使用openstack
    • 生成环境变量和脚本
    kolla-ansible -i ./multinode post-deploy此时会在/etc/kolla下面生成admin-openrc.sh脚本,执行一下
    至此multinodes部署完成,浏览器输入外网访问地址:http://9.110.187.180,即可访问Openstack的登陆页面,用户名和密码都是之前设置的 
    • 各节点上服务常用目录

    /etc/kolla 服务配置目录
    /var/lib/docker/volumes/kolla_logs/_data 服务日志目录
    /var/lib/docker/volumes 服务数据映射的目录销毁openstack
    kolla-ansible destroy -i ./multinode  --yes-i-really-really-mean-it

      收起阅读 »

    MongoDB集群搭建:副本+分片

    环境规划服务器规划 192.168.3.167                    192.168.3.168                    192.168.3.170 mongos                             mongo...
    继续阅读 »
    环境规划服务器规划
    192.168.3.167                    192.168.3.168                    192.168.3.170
    mongos                             mongos                              mongos
    config server                     config server                       config server
    shard server1 主节点         shard server1 副节点           shard server1 仲裁
    shard server2 仲裁            shard server2 主节点           shard server2 副节点
    shard server3 副节点         shard server3 仲裁              shard server3 主节点
    端口分配:
    mongos:20000 
    config:27017
    shard1:27001 
    shard2:27002 
    shard3:27003
     
    配置yum源并安装mongodb3.6
    cat > /etc/yum.repos.d/mongodb-org-3.6.repo << EOF
    [mongodb-org-3.6]
    name=MongoDB Repository
    baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/
    gpgcheck=1
    enabled=1
    gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
    EOF

    yum install mongodb-org -y
    目录创建:
    分别在每台机器建立conf、mongos、config、shard1、shard2、shard3目录,因为mongos不存储数据,只需要建立日志文件目录即可
    配置服务:
    可以根据业务需求创建相应目录,此文档按yum安装所产生的/etc/mongo.ocnf文件默认配置,如果自行创建记得修改目录权限
    chown -R mongod:mongod /var/lib/mongo
    vim /etc/mongod.conf
    systemLog:
    destination: file
    logAppend: true
    path: /var/log/mongodb/mongod.log
    storage:
    dbPath: /var/lib/mongo
    journal:
    enabled: true
    processManagement:
    fork: true # fork and run in background
    pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile
    timeZoneInfo: /usr/share/zoneinfo
    net:
    port: 27017
    bindIp: 0.0.0.0
    replication:
    replSetName: csReplSet
    sharding:
    clusterRole: configsvr
    启动所有的mongo config server服务
    mongod --config /etc/mongod.conf

     副本服务登录任意一台配置服务器,初始化配置副本集
    mongo --port 27017
    #创建配置
    config = {
    _id : "csReplSet",
    members : [
    {_id : 1, host : "192.168.3.167:27017" },
    {_id : 2, host : "192.168.3.168:27017" },
    {_id : 3, host : "192.168.3.170:27017" }
    ]
    }
    #初始化副本集
    rs.initiate(config)
    #查看状态
    rs.status()

    其中,"_id" : " csReplSet "应与配置文件中配置的 replicaction.replSetName 一致,"members" 中的 "host" 为三个节点的 ip 和 port
     
    分片服务:
    配置分片副本集(三台机器)
    1.设置第一个分片副本集
    vim /etc/shard1.conf
    systemLog:
    destination: file
    logAppend: true
    path: /var/log/mongodb/shard1.log
    storage:
    dbPath: /var/lib/mongo/shard1/data
    journal:
    enabled: true
    processManagement:
    fork: true
    pidFilePath: /var/run/mongodb/shard1.pid
    timeZoneInfo: /usr/share/zoneinfo
    net:
    port: 27001
    bindIp: 0.0.0.0
    maxIncomingConnections: 20000
    replication:
    replSetName: shard1
    sharding:
    clusterRole: shardsvr

    #启动所有的shard1 server
    mongod --config /etc/shard1.conf

    #登陆任意一台shard1服务器,初始化副本集
    mongo --port 27001
    use admin
    #定义副本集配置
    config = {
    _id : "shard1",
    members : [
    {_id : 1, host : "192.168.3.167:27001",priority:2 },
    {_id : 2, host : "192.168.3.168:27001",priority:1 },
    {_id : 3, host : "192.168.3.170:27001",arbiterOnly: true }
    ]
    }
    #初始化副本集配置
    rs.initiate(config);

    #查看分区状态
    rs.status()

    ====================
    #配置第二个分片和副本集
    vim /etc/shard2.conf
    systemLog:
    destination: file
    logAppend: true
    path: /var/log/mongodb/shard2.log
    storage:
    dbPath: /var/lib/mongo/shard2/data
    journal:
    enabled: true
    processManagement:
    fork: true
    pidFilePath: /var/run/mongodb/shard2.pid
    timeZoneInfo: /usr/share/zoneinfo
    net:
    port: 27002
    bindIp: 0.0.0.0
    maxIncomingConnections: 20000
    replication:
    replSetName: shard2
    sharding:
    clusterRole: shardsvr

    #启动所有的shard2 server
    mongod --config /etc/shard2.conf

    #登陆任意一台非仲裁节点服务器,初始化副本集
    mongo --port 27002
    use admin

    #定义副本集配置
    config = {
    _id : "shard2",
    members : [
    {_id : 1, host : "192.168.3.167:27002",arbiterOnly: true },
    {_id : 2, host : "192.168.3.168:27002",priority:2 },
    {_id : 3, host : "192.168.3.170:27002",priority:1 }
    ]
    }
    #初始化副本集配置
    rs.initiate(config);

    #查看分区状态
    rs.status()

    #配置第三个分片和副本集
    vim /etc/shard3.conf
    systemLog:
    destination: file
    logAppend: true
    path: /var/log/mongodb/shard3.log
    storage:
    dbPath: /var/lib/mongo/shard3/data
    journal:
    enabled: true
    processManagement:
    fork: true
    pidFilePath: /var/run/mongodb/shard3.pid
    timeZoneInfo: /usr/share/zoneinfo
    net:
    port: 27003
    bindIp: 0.0.0.0
    maxIncomingConnections: 20000
    replication:
    replSetName: shard3
    sharding:
    clusterRole: shardsvr

    #启动所有的shard3 server
    mongod --config /etc/shard3.conf

    #初始化副本集配置
    rs.initiate(config)

    #查看分区状态
    rs.status()

    路由服务:
    配置路由服务器 mongos
    先启动配置服务器和分片服务器,后启动路由实例启动路由实例:(三台机器)
    vim /etc/mongos.conf
    systemLog:
    destination: file
    logAppend: true
    path: /var/log/mongodb/mongos.log
    processManagement:
    fork: true
    pidFilePath: /var/run/mongodb/mongos.pid
    timeZoneInfo: /usr/share/zoneinfo
    net:
    port: 20000
    bindIp: 0.0.0.0
    maxIncomingConnections: 20000
    sharding:
    configDB: csReplSet/192.168.3.167:27017,192.168.3.168:27017,192.168.3.170:27017

    #注意监听的配置服务器,只能有1个或者3个 csReplSet为配置服务器的副本集名字
    configDB: csReplSet/192.168.3.167:21000, 192.168.3.168:21000, 192.168.3.170:21000

    #启动路由服务器
    mongos --config /etc/mongos.conf

    #检查状态
    netstat -tunlp | grep mongo
    tcp 0 0 0.0.0.0:27001 0.0.0.0:* LISTEN 8810/mongod
    tcp 0 0 0.0.0.0:27002 0.0.0.0:* LISTEN 6962/mongod
    tcp 0 0 0.0.0.0:27003 0.0.0.0:* LISTEN 12671/mongod tcp 0 0 0.0.0.0:20000 0.0.0.0:* LISTEN 13577/mongos tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 10328/mongod
    启用分片
    目前搭建了mongodb配置服务器、路由服务器,各个分片服务器,不过应用程序连接到mongos路由服务器并不能使用分片机制,还需要在程序里设置分片配置,让分片生效
    #登录其中的一台路由节点,手动启用分片
    mongo --port 20000
    use admin
    #添加分片到mongos
    sh.addShard("shard1/192.168.3.167:27001,192.168.3.168:27001,192.168.3.170:27001")
    sh.addShard("shard2/192.168.3.167:27002,192.168.3.168:27002,192.168.3.170:27002")
    sh.addShard("shard3/192.168.3.167:27003,192.168.3.168:27003,192.168.3.170:27003")

    #查看集群状态
    sh.status()
    收起阅读 »

    使用kubeadm半自动安装kubernetes 1.13高可用集群(使用calico网络)

    kubeadm手动安装kubernetes 1.13高可用集群  初始化集群:配置hosts文件 vim /etc/hosts192.168.3.147test-master01 192.168.3.148test-master02 192.168.3.149...
    继续阅读 »
    kubeadm手动安装kubernetes 1.13高可用集群
     初始化集群:配置hosts文件
    vim /etc/hosts
    192.168.3.147test-master01
    192.168.3.148test-master02
    192.168.3.149test-master03
    192.168.3.150test-work01
    配置免密登录
    ssh-keygen
    ssh-copy-id test-master01
    ssh-copy-id test-master02
    ssh-copy-id test-master03
    ssh-copy-id test-work01
    设置参数
    • 关闭防火墙
    systemctl stop firewalldsystemctl disable firewalld
    • 关闭swap
    swapoff -ased -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
    修改 /etc/fstab 文件,注释掉 SWAP 的自动挂载,使用free -m确认swap已经关闭。
    • 关闭selinux
    sed-i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinuxsetenforce0
    • 配置转发相关参数,否则可能会出错
    cat < /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1net.ipv4.ip_forward=1net.ipv4.tcp_tw_recycle=0vm.swappiness=0vm.overcommit_memory=1vm.panic_on_oom=0fs.inotify.max_user_watches=89100fs.file-max=52706963fs.nr_open=52706963net.ipv6.conf.all.disable_ipv6=1net.netfilter.nf_conntrack_max=2310720EOFsysctl --system
    以上在所有的Kubernetes节点执行命令使修改生效
    • kube-proxy开启ipvs
    在所有work节点执行:
    cat > /etc/sysconfig/modules/ipvs.modules <上面脚本创建了的/etc/sysconfig/modules/ipvs.modules文件,保证在节点重启后能自动加载所需模块。 使用lsmod | grep -e ip_vs -e nf_conntrack_ipv4命令查看是否已经正确加载所需的内核模块.接下来还需要确保各个节点上已经安装了ipset软件包yum install ipset。 为了便于查看ipvs的代理规则,最好安装一下管理工具ipvsadm yum install ipvsadm
    yum install ipset -yyum install ipvsadm -y
    如果以上前提条件如果不满足,则即使kube-proxy的配置开启了ipvs模式,也会退回到iptables模式
    • 系统优化参数

    systemctl enable ntpdate.service
    echo '*/30 * * * * /usr/sbin/ntpdate time7.aliyun.com >/dev/null 2>&1'> /tmp/crontab2.tmp
    crontab /tmp/crontab2.tmp
    systemctl start ntpdate.service
    echo "* soft nofile 65536" >> /etc/security/limits.conf
    echo "* hard nofile 65536" >> /etc/security/limits.conf
    echo "* soft nproc 65536" >>/etc/security/limits.conf
    echo "* hard nproc 65536" >>/etc/security/limits.conf
    echo "* soft memlock unlimited" >> /etc/security/limits.conf
    echo "* hard memlock unlimited" >>/etc/security/limits.conf

     安装docker
    yum install -y epel-release
    yum install -y yum-utils device-mapper-persistent-data lvm2 net-tools conntrack-toolswget vim ntpdate libseccomp libtool-ltdltelnet rsync bind-utils
    yum install -y https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/docker-ce-18.06.1.ce-3.el7.x86_64.rpm
    配置docker国内镜像:
    所有节点安装docker
    编辑/etc/docker/daemon.json,添加以下一行
    {
    "registry-mirrors":["https://registry.docker-cn.com"]
    }

    重启docker
    systemctl daemon-reload
    systemctl enable docker
    systemctl start docker

    注:如果使用overlay2的写法:
    daemon.json
    {
    "log-driver": "json-file",
    "log-opts": {
    "max-size": "100m",
    "max-file": "10"
    },
    "registry-mirrors": ["https://pqbap4ya.mirror.aliyuncs.com"],
    "storage-driver": "overlay2",
    "storage-opts":["overlay2.override_kernel_check=true"]
    }

    如果要使用overlay2,前提条件为使用ext4,如果使用xfs,需要格式化磁盘加上参数 mkfs.xfs -n ftype=1 /path/to/your/device ,ftype=1这个参数需要配置为1
     安装keepalived+haproxy
    三台master 节点

    VIP : 192.168.3.80
     安装 kubeadm, kubelet 和 kubectl
    所有节点都执行设置yum源
    cat < /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    enabled=1
    gpgcheck=1
    repo_gpgcheck=1
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    安装组件
    yum install -y kubelet-1.13.1 kubeadm-1.13.1 kubectl-1.13.1
    开机启动
    systemctl enable kubelet.service

     初始化K8S集群编辑kubeadm配置文件:
    下面配置是kubeadm安装etcd写法:
    cat > kubeadm-config.yaml << EOF
    apiVersion: kubeadm.k8s.io/v1beta1
    kind: ClusterConfiguration
    kubernetesVersion: v1.13.1
    apiServer:
    certSANs:
    - "192.168.3.80"
    controlPlaneEndpoint: "192.168.3.80:8443"
    networking:
    podSubnet: "10.50.0.0/16"
    imageRepository: "harbor.oneitfarm.com/k8s-cluster-images"
    EOF

    CNI使用Calico,设置podSubnet: “10.50.0.0/16”
    192.168.3.80是刚才安装haproxy+keepalived的VIP初始化第一个master
    kubeadm init --config kubeadm-config.yaml
    ...
    [root@master01 ~]# mkdir -p $HOME/.kube
    [root@master01 ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    [root@master01 ~]# chown $(id -u):$(id -g) $HOME/.kube/config
    安装网络插件
    按官网方式:
    Installing with the Kubernetes API datastore—50 nodes or less:
    kubectl apply -f \
    https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml

    kubectl apply -f \
    https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml

    以上建议先wget下来,需要根据自己网络修改配置 :
    - name: CALICO_IPV4POOL_CIDR
    value: "10.50.0.0/16"
    复制相关文件到其他master节点
    ssh root@master02 mkdir -p /etc/kubernetes/pki/etcd
    scp /etc/kubernetes/admin.conf root@master02:/etc/kubernetes
    scp /etc/kubernetes/pki/{ca.*,sa.*,front-proxy-ca.*} root@master02:/etc/kubernetes/pki
    scp /etc/kubernetes/pki/etcd/ca.* root@master02:/etc/kubernetes/pki/etcd
    部署master-other
    在其它slave节点上执行下面命令,加入集群
    kubeadm join 192.168.3.80:8443 --token pv2a9n.uh2yx1082ffpdf7n --discovery-token-ca-cert-hash sha256:872cac35b0bfec28fab8f626a727afa6529e2a63e3b7b75a3397e6412c06ebc5 --experimental-control-plane
    kube-proxy开启ipvs
    修改ConfigMap的kube-system/kube-proxy中的config.conf,mode: “ipvs”:
    kubectl edit configmap kube-proxy -n kube-system
    kubectl get pod -n kube-system | grep kube-proxy | awk '{system("kubectl delete pod "$1" -- grace-period=0 --force -n kube-system")}'

     检查测试查看kubernetes集群状态
    kubectl get nodes -o wide
    kubectl get cs
    NAME STATUS MESSAGE ERROR
    controller-manager Healthy ok
    scheduler Healthy ok
    etcd-0 Healthy {"health": "true"}
    查看etcd集群状态
    本文通过kubeadm自动安装etcd,也就是docker方式安装的etcd,可以exec进去容器内检查:
    kubectl exec -ti -n kube-system etcd-an-master01 sh
    / # export ETCDCTL_API=3
    / # etcdctl --endpoints=https://[127.0.0.1]:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt --key=/etc/kubernetes/pki/etcd/healthcheck-client.key member list
    安装失败清理集群
    集群初始化如果遇到问题,可以使用下面的命令进行清理:
    kubeadm reset
    systemctl stop kubelet
    systemctl stop docker
    rm -rf /var/lib/cni/
    rm -rf /var/lib/kubelet/*
    rm -rf /etc/cni/
    ifconfig cni0 down
    ifconfig flannel.1 down
    ifconfig docker0 down
    ip link delete cni0
    ip link delete flannel.1
    systemctl start docker

     设置资源调度
    使用kubeadm初始化的集群,出于安全考虑Pod不会被调度到Master Node上,也就是说Master Node不参与工作负载。这是因为当前的master节点被打上了node-role.kubernetes.io/master:NoSchedule的污点:
    kubectl describe node master01 | grep Taint
    Taints: node-role.kubernetes.io/master:NoSchedule

    检查join进集群的master和work节点,如果调度不对,可以通过如下方式设置:
    [root@an-master01 ~]# kubectl get nodes
    NAME STATUS ROLES AGE VERSION
    an-master01 Ready master 4h39m v1.13.1
    an-master02 Ready 4h32m v1.13.1
    an-master03 Ready master 86m v1.13.1
    an-work01 Ready 85m v1.13.1

    查看当前状态:
    kubectl describe nodes/an-master02 |grep -E '(Roles|Taints)'
    Roles:
    Taints:

    设置为master节点且不调度:
    kubectl label node an-master02 node-role.kubernetes.io/master=
    kubectl taint nodes an-master02 node-role.kubernetes.io/master=:NoSchedule
    如果想去除限制的话:
    kubectl taint nodes an-master03 node-role.kubernetes.io/master-

    work节点设置:
    kubectl label node an-work01 node-role.kubernetes.io/work=
    kubectl describe nodes/an-work01 |grep -E '(Roles|Taints)'
    Roles: work
    Taints:

      收起阅读 »

      使用kubeadm部署Kubernetes v1.13.3

        学习Kubernetes没有什么特殊技巧,需要循序渐进,理论结合实践,不管目前生产中是否使用K8S,作为运维工程师,每个人都应该有自己的一个K8S集群,才能开启探索之路。拒绝夸夸其谈,前后不一致!!!       请查看下面的链接:       htt...
    继续阅读 »
        学习Kubernetes没有什么特殊技巧,需要循序渐进,理论结合实践,不管目前生产中是否使用K8S,作为运维工程师,每个人都应该有自己的一个K8S集群,才能开启探索之路。拒绝夸夸其谈,前后不一致!!!
     
        请查看下面的链接:
     
        https://mp.weixin.qq.com/s?__biz=MzI5MjA5Mjg5OA==&mid=2247484395&idx=1&sn=0767cc24ec99ce818e41f7c40dda5d23&chksm=ec07ed66db7064707b05a9dda9c23882b9106577fc5f1ef45a9d78e6a93a57a5f507210207ae&token=1791180619&lang=zh_CN#rd 收起阅读 »

    【Kubernetes实践指南】5.1-Kubernetes架构介绍

    【前言】       2019年是互联网寒冬几乎成为不争的事实,在寒冬下,往往会暴露出很多被掩盖的事实,就像下面这个案例,看完之后,深有感触。   作为运维工程师,坚持学习才是寒冬中的生存之道。Kubernetes的浪潮已经来了,不管我们是否...
    继续阅读 »
    【前言】
     
        2019年是互联网寒冬几乎成为不争的事实,在寒冬下,往往会暴露出很多被掩盖的事实,就像下面这个案例,看完之后,深有感触。

    微信图片_20190211183731.jpg

     
    作为运维工程师,坚持学习才是寒冬中的生存之道。Kubernetes的浪潮已经来了,不管我们是否愿意,生产中是否使用,Kubernetes已经不知不觉成为运维必备技能。本文介绍Kubernetes架构,作为入门的第一篇文章。    
     
    Kubernetes介绍
        Kubernetes源于希腊语,意为“舵手”或“飞行员”,是用于自动部署,扩展和管理容器化应用程序的开源系统,由于K和S之间有8个字母,被简称为K8S。Kubernetes构建在Google 15年生产环境经验基础之上,可以将Kubernetes看作为Google内部的容器管理平台Borg和Omega的开源版本,当然他们之间是有一些差异的。
     
    Kubernetes系统架构
        Kubernetes被设计为Master和Node两个角色,Master为控制节点,Node为计算节点或者叫工作节点,在Master节点上有一个API Server服务,对外提供标准的RestAPI,这也是Kubernetes集群的入口,意外着只要和集群进行交互必须连接到API Server上。

    1.png

     
    Master节点介绍
    Kubernetes Master节点主要有4个组件,API Server、Scheduler、Controller、etcd。如下图所示:

    2.png

    • API Server:提供Kubernetes API接口,主要处理Rest操作以及更新Etcd中的对象。是所有资源增删改查的唯一入口。
    • Scheduler:绑定Pod到Node上,主要做资源调度。
    • Controller Manager:所有其他群集级别的功能,目前由控制器Manager执行。资源对象的自动化控制中心,Kubernetes集群有很多控制器。
    • Etcd:所有持久化的状态信息存储在Etcd中,这个是Kubernetes集群的数据库。
     Node节点介绍Node节点是Kubernetes集群的工作节点,在Node节点上主要运行了Docker、Kubelet、kube-proxy三个服务(Fluentd请先忽略),如下图所示:
    3.png
    • Docker Engine:负责节点的容器的管理工作,最终创建出来的是一个Docker容器。
    • Kubelet:安装在Node上的代理服务,和API Server进行通信,用来管理Pods以及容器、镜像、Volume等,实现对集群对节点的管理。
    • Kube-proxy:安装在Node上的网络代理服务,提供网络代理以及负载均衡,实现与Service通讯。
     Kubernetes逻辑架构在上面的介绍中提到像Pod、Service这些概念,在Kubernetes的系统架构图中并没有体现出来,这些可以理解为Kubernetes逻辑架构中的组件。也就是在Master和Node上并不具体存在的一个服务或者进程,但却是Kubernetes的组件,也是我们的管理对象。主要有Pod、Service和各种控制器等。 PodPod是Kubernetes的最小管理单元,一个Pod可以包含一组容器和卷。虽然一个Pod里面可以包含一个或者多个容器,但是Pod只有一个IP地址,而且Pod重启后,IP地址会发生变化。
    pod.png
     Controller一个应用如果可以有一个或者多个Pod,就像你给某一个应用做集群,集群中的所有Pod是一模一样的。Kubernetes中有很多控制器可以来管理Pod,例如下图的Replication Controller可以控制Pod的副本数量,从而实现横向扩展。
    rc.png
     Kubernetes中有很多控制器,后面的章节我们会逐步讲到,常用的控制器如下:
    • Replication Controller(新版本已经被ReplicaSet所替代)
    • ReplicaSet(新版本被封装在Deployment中)
    • Deployment:封装了Pod的副本管理、部署更新、回滚、扩容、缩容等功能。
    • DaemonSet:保证所有的Node上有且只有一个Pod在运行。
    • StatefulSet:有状态的应用,为Pod提供唯一的标识,它可以保证部署和scale的顺序。
    • Job:使用Kubernetes运行单一任务。
    • CronJob:使用Kubernetes运行定时任务。

    Service
    由于Pod的生命周期是短暂的,而且每次重启Pod的IP地址都会发生变化,而且一个Pod有多个副本,也就是说一个集群中有了多个节点,就需要考虑负载均衡的问题。Kubernetes使用Service来实现Pod的访问,而且Service有一个Cluster IP,通常也称之为VIP,是固定不变的。

    service.png

     
    Kubernetes网络介绍
    在Kubernetes集群中存在着三种网络,分别是Node网络、Pod网络和Service网络,这几种网络之间的通信需要依靠网络插件,Kubernetes本身并没有提供,社区提供了像Flannel、Calico、Canal等,后面章节会详述。
    Node网络
    Node网络指的是Kubernetes Node节点本地的网络,在本实验环境中使用的是192.168.56.0/24这个网段,所有的Node和Master在该网段都可以正常通信。
    Pod网络
    后面创建的Pod,每一个Pod都会有一个IP地址,这个IP地址网络段被称之为Pod网络,如下图所示。
    [root@linux-node1 ~]# kubectl get pod -o wide
    NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
    nginx-54458cd494-hpn68 1/1 Running 0 9m7s 10.2.1.2 linux-node2.linuxhot.com
    nginx-54458cd494-r4mfq 1/1 Running 0 7m46s 10.2.1.3 linux-node2.linuxhot.com



     
    Service网络
    Service是为Pod提供访问和负载均衡的网络地址段,如下图所示。
     [root@linux-node1 ~]# kubectl get service
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    kubernetes ClusterIP 10.1.0.1 443/TCP 64m
    nginx NodePort 10.1.216.23 80:30893/TCP 8m3s





    Kubernetes的组件和知识绝非如此,快速入门可以先了解这么多,下一章节,我们先快速的部署一个Kubernetes集群。
     
    来新运维社区分享知识!
     
        欢迎来新运维社区分享你的原创文章、博文、理念或者是对运维工程师有帮助的任何知识,如要加入K8S中国交流群,请添加新运维-小助手,备注:姓名-K8S。
    (无备注不予处理,请理解!)

    小助手微信.jpg

    【小助手微信】
     
    END -
     
     
    加入新运维社区,开启新征程!       
     
    牛人并不可怕,可怕的是牛人比我们还努力!
     
    QQ截图20190211183631.png
    收起阅读 »

    浅谈字典跟列表优缺点

    字典跟列表优缺点: 非关系型数据库的redis跟memcached是以key-value健值对的数据类型,那么站在这个角度来讲就可以理解为是字典,而关系型数据库mysql二维表可以理解为是列表。 和list比较,dict有以下几个特点(Redis): 1...
    继续阅读 »
    字典跟列表优缺点:
    非关系型数据库的redis跟memcached是以key-value健值对的数据类型,那么站在这个角度来讲就可以理解为是字典,而关系型数据库mysql二维表可以理解为是列表。
    和list比较,dict有以下几个特点(Redis):
    1、查找和插入的速度极快,不会随着key的增加而变慢; 
    2、需要占用大量的内存,内存浪费多。
    而list相反(Mysql):
    1、查找和插入的时间随着元素的增加而增加; 
    2、占用空间小,浪费内存很少。
    所以,dict(Redis)是用空间来换取时间的一种方法 收起阅读 »

    iTop自定义CI模型

    iTop自定义CI模型,需要Toolkit工具,附件中。   1.下载附件中的Toolkit。直接解压到对应的webroot下。   2.直接访问http://xxx/toolkit访问。    
    iTop自定义CI模型,需要Toolkit工具,附件中。
     
    1.下载附件中的Toolkit。直接解压到对应的webroot下。
     
    2.直接访问http://xxx/toolkit访问。