1.docker的三种编排工具

Docker的第一类编排工具:

a.docker compose(docker原生):只能对一个主机上的容器进行编排,无法编排多个主机上的容器;

b.docker swarm(docker原生):可以对多个主机上的容器进行编排;

c.docker machine(docker原生):可以将一个主机迅速初始化到docker swarm集群里.

以上三个称为docker三剑客

Docker的第二类编排工具:

mesos:它不是docker的编排工具,而是资源分配工具,所以mesos必须要依赖于容器编排框架marathon.

Docker的第三类编排工具:

kubernetes(简称k8s):这个容器编排工具占据了80%以上的市场份额.

有了容器和容器编排技术,对持续集成(CI)、持续交付Delivery(CD)和持续部署Deployment(CD)的需求有了很大帮助,这也就是DevOps的理念,DevOps并不是一种技术,而是一种运动、一种文化、一种思想.

2.k8s介绍

k8s的代码托管在github之上:https://github.com/kubernetes/kubernetes/releases

特性:

a.可以自动装箱,即:可以自动完成容器的部署,而不影响可用性;
b.可以自我修复,如果容器崩溃了,可以1s内重新启动,有了k8s后,我们不再关注个体,而是关注群体;
c.可以自动实现水平扩展,一个容器不够,再启动一个;
d.可以自动实现服务发现和负载均衡,可以自动发现每个微服务之间的关系,也可以自动对容器内多个服务做负载均衡;
e.可以实现自动发布和回滚;
f.可以实现密钥和配置管理,也就是说每个容器不是加载容器内的配置文件,而是加载远程服务器上(配置中心)的配置文件;
g.可以实现存储编排;
h.可以实现任务的批量处理执行.

k8s是一个有中心节点架构的集群,由master节点(至少三个)和nodes节点(运行容器的节点)组成,客户的启动容器等请求会先发给master节点,master节点有个调度器会分析node节点资源(cpu、内存)的可用状态,找到最佳适配的node来启动用户请求的容器.

master上的第一个组件叫调度器(Scheduler),它的工作原理有两步:第一步调度器先做预选,即先评估有多少个node符合容器需求;第二步调度器再做优选,即在符合的node中选择一个最佳的node来运行容器.如果node宕机了,那么托管在node之上的所有容器也就不见了,此时k8s可以在其他节点上创建出来和宕机node上一模一样的容器.

另外,master上还有一个组件叫控制器,它会不停的Loop,用来周期性监控每个node的健康状态;控制器是有多个的(因为有至少三个master),master上还有一个组件叫控制器管理器(Controller-Mnager),控制器管理器用来监控每个控制器的健康.

在k8s上运行的最小单元不是容器,而是pod.pod可以理解为容器外壳,pod里面装的就是容器.一个pod里面可以放多个容器,这些容器可以共享一个底层的网络名称空间、存储卷,这样一来,pod对外更像一个虚拟机.

一般说来,一个pod里只放一个容器;如果一个pod必须要放多个容器,那么里面有一个是主容器,其他都是辅助容器,辅助容器主要是为了辅助主容器的主程序的某些功能而设置的.

一个pod里面的所有容器只能运行在一个node上,最终用户无需再关注pod运行在哪个node之上,这也就是云的概念,也就是把很多的node做为一个资源池,来进行统一管理.pod尽量由控制器管理,而不要手工管理.

3.pod可以分为两类

a.自主式pod:即自我管理的pod.创建Pod,首先交给Apiserver,然后调度器调度给指定的node节点.如果容器需要启动,由node上kubelet组件来完成;如果node发生故障,那么pod也就消失了.

b.控制器管理的Pod(建议创建这种Pod):这种Pod是有生命周期的对象.由master上的调度器将pod调度至某node进行运行或者停止,Replica Set(副本集控制器),但是该控制器并不直接使用,而是使用一个声明更新的控制器Deployment,这个也是用的最多的,Deployment控制器只能管理那些无状态的应用;有状态的应用是由Stateful Set控制器管理.

对于Deployment控制器,它还支持二级控制器,叫HPA(horizontalPodAutoscaler),该控制器可以自动水平扩展pod,也就是当一个pod压力大时,HPA控制器会自动水平扩展加几个新的pod来分解压力,具体加几个,HPA会根据当前节点的cpu、内存负荷来计算,一旦访问量小了,HPA还会自动减少pod个数;

如果我们想在一个Node上只运行一个副本,需要用DaemonSet控制器;

如果需要运行作业(如备份、清理数据等),需要conjob控制器.以上所讲的都是pod的控制器,用来管理不同类型的pod.

4.service

标签选择器(Lablel Selector)组件:是一个根据标签来过滤符合要求的资源机制,给pod打上标签(Lablel),可以实现分组效果.

客户端是通过service来找到pod的,service是通过pod的标签选择器来找到pod的.

service只是一个iptables方式的net地址转换路由规则,到了1.11版本,支持了ipvs方式的分发规则,支持各种调度算法,这也就实现了负载均衡,装完k8s,需要创建一个DNS pod,这是因为service的名字需要DNS服务器来解析,这种pod是k8s的组成部分,被称为k8s基础架构的pod,也被称为k8s的附件,英文名叫AddOns.这种DNS是用来解析service名字的,而不是pod的,DNS名称解析是K8s自动维护的,不需要人工干预.

一句话:service里面的地址存在于iptables net或者ipvs中,service是用来调度流量的,而不会启动或者停止容器.

pod的启动或者关闭、创建等是由控制器来做的,比如创建一个nginx pod,就得先创建一个nginx控制器,nginx控制器就会自动帮我们创建nginx pod;然后再创建一个nginx service,把nginx pod发布出去.

service有两种类型:一种是调度流量仅供k8s内部使用;另外一种则调度流量供k8s外部使用.

service是用来分发流量给pod,控制器是用来创建、启动和停止pod,标签选择器是让service根据标签来识别每个pod的.

5.网络

在k8s中,需要三种网络

a.各pod在一个网络中;
b.service在另外一个网络,即service的地址和pod的地址是不同网段的,
pod的地址是配置在pod内部的网络名称空间,是可以ping通的,
但service的地址是虚拟的,是假地址,只存在于iptables或者ipvs中.
c.node又存在于另外一个网络.
所以外部先到达node网络,然后再到service网络,最后才到pod网络.

pod之间怎么通信呢?同一个pod内的多个容器通过lo进行通信;

各pod之间通过overlay network(叠加网络)进行通信,即使pod之间跨主机,通信也没问题;

pod与service之间通过网关(也就是docker 零桥的地址)进行通信.

node上有个组件叫kube-proxy,它负责和ApiServer进行通信,kube-proxy一旦发现service背后的pod地址发生变化,就会改变service在ipvs中的pod地址,所以service的管理是靠kube-proxy来实现的.

kubelet--node上用于和master通信的一个组件,试图启动node上的容器,启动容器是由容器引擎来操作的,最流行的容器引擎是docker.

6.通信简介

在master(master是有多个的)上的数据并不存在master本地,而是存在共享存储DB中,这个共享DB叫etcd.etcd的数据以key-value形式存储,集群中所有状态信息都在etcd中,所以ectd要做冗余,一般至少三个节点,etcd通过https方式访问,etcd有一个端口用于集群内部通信(也就是和其它etcd通信),还有一个端口用于对ApiServer通信,所以etcd内部通讯需要点对点的专门证书,对ApiServer通信需要另外一套证书;ApiServer向客户端提供服务,需要一套证书;ApiServer和node上的kubelet组件和kube-proxy组件通信也需要CA证书,所以做K8s的部署,需要建立5个CA,这个比较考验功底.

把k8s归为以下三类节点:master、node(部署pod)和ectd(存储集群状态信息),彼此通过http或https进行通信,网络分为:pod网络、service网络和node网络.所以需要构建出三类网络,但是K8s自己不提供这三类网络,依赖于第三方插件CNI.

k8s通过CNI(容器网络接口)插件体系接入网络.目前常见的CNI插件是flannel,其实网络用于提供两个功能:一个是给pod、service等提供ip地址;另外就是提供网络测试的功能,来隔离不同Pod之间的通信.

flannel插件只支持网络配置(供ip地址的功能),不支持网络策略,CNI插件中的calico可以同时支持网络配置和网络策略,但是calico的部署和使用门槛比较高,于是,又有了第三个CNI插件canel,它用flannel提供网络配置,用calico提供网络策略.这些插件可以作为k8s之上的守护进程运行,也可以在k8s里面的容器运行.

名称空间--可以将不同种类的pod运行在不同的名称空间中.比如可以把名称空间分为开发名称空间、测试名称空间等,可以通过网络策略来定义名称空间之间、同一个名称空间的pod之间的网络行为.

参考博客:http://blog.itpub.net/28916011/viewspace-2213456/

k8s入门简介的更多相关文章

  1. K8s 入门

    中文文档:https://www.kubernetes.org.cn/kubernetes%E8%AE%BE%E8%AE%A1%E6%9E%B6%E6%9E%84 小结大白话 Portainer 挺好 ...

  2. k8s入门系列之guestbook快速部署

    k8s集群以及一些扩展插件已经安装完毕,本篇文章介绍一下如何在k8s集群上快速部署guestbook应用. •实验环境为集群:master(1)+node(4),详细内容参考<k8s入门系列之集 ...

  3. k8s入门系列之扩展组件(一)DNS安装篇

    DNS (domain name system),提供域名解析服务,解决了难于记忆的IP地址问题,以更人性可读可记忆可标识的方式映射对应IP地址. Cluster DNS扩展插件用于支持k8s集群系统 ...

  4. k8s入门系列之集群安装篇

    关于kubernetes组件的详解介绍,请阅读上一篇文章<k8s入门系列之介绍篇> Kubernetes集群安装部署 •Kubernetes集群组件: - etcd 一个高可用的K/V键值 ...

  5. 掌握 Ajax,第 1 部分: Ajax 入门简介

    转:http://www.ibm.com/developerworks/cn/xml/wa-ajaxintro1.html 掌握 Ajax,第 1 部分: Ajax 入门简介 理解 Ajax 及其工作 ...

  6. MongoDB入门简介

    MongoDB入门简介 http://blog.csdn.net/lolinzhang/article/details/4353699 有关于MongoDB的资料现在较少,且大多为英文网站,以上内容大 ...

  7. (转)Web Service入门简介(一个简单的WebService示例)

    Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...

  8. NodeJS入门简介

    NodeJS入门简介 二.模块 在Node.js中,以模块为单位划分所有功能,并且提供了一个完整的模块加载机制,这时的我们可以将应用程序划分为各个不同的部分. const http = require ...

  9. ASP.NET Core学习之一 入门简介

    一.入门简介 在学习之前,要先了解ASP.NET Core是什么?为什么?很多人学习新技术功利心很重,恨不得立马就学会了. 其实,那样做很不好,马马虎虎,联系过程中又花费非常多的时间去解决所遇到的“问 ...

随机推荐

  1. LeetCode(123) Best Time to Buy and Sell Stock III

    题目 Say you have an array for which the ith element is the price of a given stock on day i. Design an ...

  2. install mongodb on macos

    Update Homebrew’s package database. In a system shell, issue the following command: brew update 2 In ...

  3. 如何将Python对象保存在本地文件中?

    Python对象的永久存储 1.使用Python的pickle模块 import pickle class A: def __init__(self,name,a): self.name=name s ...

  4. Django Form two

    Django_Form: 1.class TeacherNewForm(Form): username = fields.CharField( required=True, error_message ...

  5. chardet的下载及安装

    1.chardet下载地址 https://pypi.python.org/pypi/chardet/3.0.4#downloads 2.解压至安装路径 D:\Program Files (x86)\ ...

  6. verilog 实现中值滤波

    图像信号在形成.传输和记录的过程中,由于成像系统.传输介质.工作环境和记录设备等的固有缺陷,不可避免地产生各种类型的噪声,降低了图像的质量,进而影响后续处理(如边缘检测.图像分割.特征提取.模式识别等 ...

  7. tzcacm去年训练的好题的AC代码及题解

    A - Tree UVA - 548 You are to determine the value of the leaf node in a given binary tree that is th ...

  8. Wannafly模拟赛2

    Contest 时间限制:1秒 空间限制:131072K 题目描述 n支队伍一共参加了三场比赛. 一支队伍x认为自己比另一支队伍y强当且仅当x在至少一场比赛中比y的排名高. 求有多少组(x,y),使得 ...

  9. 紫书第三章训练1 D - Crossword Answers

    A crossword puzzle consists of a rectangular grid of black and white squares and two lists of defini ...

  10. ubuntu 安装tomcat<服务器>

    一.下载tomcat 可以先下载到本地,然后ftp到服务器 官方 Apache Tomcat 的下载页面(下面的链接是apache自己的镜像服务器的地址,不同网络连接的话,apache会给出不同的镜像 ...