云化各组件是什么?node
一、Docker是什么?redis
Docker是一个跨平台,可移植而且简单易用的容器解决方案。docker
官方的定义:Docker是以docker容器为资源分割和调度的基本单位,封装整个软件运行时环境,为开发者和系统管理员设计的,用于构建、发布和运行分布式应用的平台。数据库
二、Kubernetes是什么?json
kubernetes是Borg的开源版本;Brog是google公司内部使用的大规模集群管理系统,它是基于容器技术,目的是实现资源管理的自动化,以及跨多个数据中心的资源利用率的最大化。浏览器
kubernetes是一个全新的基于容器技术的分布式架构领先方案。安全
kubernetes提供的自动化机制,大幅度下降系统后期的运维难度和运维成本。bash
kubernetes是一个完备的分布式系统支撑平台。服务器
三、MooseFS是什么?网络
MooseFS是是OpenStack开源云计算项目的子项目之一,被称为对象存储,提供了强大的扩展性、高可靠性和持久性。它可以将文件分布存储于不一样的物理机器上,对外却提供的是一个透明的接口的存储资源池。它还具备在线扩展、文件切块存储、节点无单点故障、读写效率高等特色。
四、ZooKeeper是什么?
ZooKeeper是一个开源的分布式协调服务,他为分布式应用提供了高效且可靠的分布式协调服务,提供了诸如统一命名空间服务,配置服务和分布式锁等分布式基础服务。
五、Etcd是什么?
etcd是一个分布式的、可靠的key-value存储系统,用于存储分布式系统的最关键的数据。
六、Calico是什么?
Calico是一个纯三层的协议,为docker容器提供多主机间通讯。Calico不使用重叠网络,使用虚拟路由代替虚拟交换,每一台虚拟路由经过BGP协议传播可达信息(路由)到剩余数据中心。
七、Keepalived是什么?
Keepalived 一方面具备服务器状态检测和故障隔离功能,另一方面也有HA cluster功能。
云化概述:
云计算是一种资源的服务模式,该模式能够实现随时随地、便捷按需地从可配置计算资源共享池中获取所需的资源(如网络、服务器、存储、数据库,运行时环境、应用及服务)资源可以快速供应并释放,大大减小资源管理工做开销。
经典云计算架构包括Iaas(Infrastructure as a Service,基础设施即服务)、PaaS(Platform as a Service平台即服务)、SaaS(Software as a Service,软件即服务)
IaaS层为基础设施运维人员服务,提供计算、存储、网络及其余基础资源。
PaaS层为应用开发人员服务,提供支撑应用运行所需的软件运行时环境、相关工具与服务。
SaaS层为通常用户服务,提供了一套完整可用的软件系统,让通常用户无需关注技术细节,只需经过浏览器、应用客户端等方式就能提供部署在云上的应用服务。
IaaS管理控制软件:openstack、zstack等;具备表明性的厂商:Vmware、微软、IBM、CloudSwitch、HP、Openstack、Eucalyptus、Amazon EC二、Google Compute Engine、华胜天成、阿里巴巴、世纪互联、万网、鹏博士等等
PaaS管理控制软件:kubernetes、mesos等;
Docker项目有Solomon Hukeys所带领的团队发起,在Dokcer公司的前身dotCloud内部启动孕育,代码托管于GitHub。
围绕Docker生态系统自上而下分别覆盖IaaS层和PaaS层所涉及的各种问题,包括资源调度、编排、部署、配置管理、网络管理、应用管理和部署平台、应用开发工具、应用服务供应以及大数据分析等云计算相关的服务。Docker及其生态主要带来了如下几点好处:
一、持续部署与测试。
二、跨云平台支持。
三、环境标准化和版本控制。
四、高资源利用率与隔离。
五、容器跨平台性与镜像。
六、易于理解与易用。
七、应用镜像仓库
容器云以容器为资源分割和调度的基本单位,封装整个软件运行时环境,为开发者和系统管理员提供用于构建、发布和运行分布式应用的平台。当容器云专一于资源共享与隔离、容器编排与部署时,它更接近传统的IaaS;当容器云渗透到应用支撑与运行环境时,它更接近PaaS。
容器云并不只限于Docker,基于kubernetes构建的PaaS平台也是容器云。Docker的出现让人们意识到容器的价值,使得一直以来长期存在但未被重视的轻量级虚拟化技术获得快速的发展和应用。
docker前期发展重要历程:
2013年3月:Docker正式发布开源版本,GitHub中的Docker代码提交盛况空前。
2013年11月:REHL6.5正式版发布,集成对Docker的支持。
2014年4月到6月:云技术市场上的三巨头Amazon、Google及Mrcrosoft支持Docker。
2014年6月:Docker1.0版本正式发布。
2014年8月:Vmware宣布与Docker创建合做关系,标志虚拟化市场的新格局。
2014年10月:微软宣布将整合Docker进入下一代Windows Server中。
2014年末:Google发布容器引擎GCE致力于为用户提供面向Docker化应用的云计算平台,Amazon发布的EC2,它是一项高度可扩展,高性能,免费的容器管理服务。
截止2015年5月:GitHub的docker的贡献者多达千人,近5000个分支(Fork)。
PAAS平台架构图
kubernetes的总体架构:
kubernetes的基本术语:
ØMaster 集群的控制节点。
ØNode除master外的其余机器称为node。
ØDeployment 是kubernetes1.2引入的的新概念,为了更好解决Pod的编排问题。
ØHPA 经过追踪分析RC控制的全部目标Pod的负载变化状况,来肯定是否针对性的调整Pod的副本数。(kubernetes 1.4后只支持稳定版本)
ØPods 是链接在一块儿的容器组合并共享文件卷。它们是最小的部署单元,由 Kubernetes统一建立、调度、管理。Pods是能够直接建立的,但推荐的作法是使用 Replication Controller,即便是建立一个 Pod。
ØReplication controllers 管理 Pods 的生命周期。它们确保指定数量的 Pods 会一直运行,经过建立和杀掉 Pods 能够保证到这个效果。
ØLabels 它被用来管理和选取基于键值对为基础的对象组。
ØServices 提供独立、可靠名称和地址的 Pods 集合。它就像一个基础版本的负载均衡器。
ØNode 相对master是工做主机,较早版本也叫Minon,物理机、虚拟机都可;kubelet、kube-proxy、docker daemon;至关于openstack中的计算节点。
ØNamespace 不一样的namespace造成逻辑上不一样的项目或用户组
ØVolume 是Pod中被多个容器访问的共享目录。支持EmptyDir、hostPath、gcePersistenDisk、awsElasticBlockStore、nfs、iscsi等等。
Ø 1. 建立资源对象根据yaml配置文件一次性建立service和rc:kubectl create -f my-service.yaml -f my-rc.yaml
根据<directory>目录下全部.yaml、.yml、.json文件的定义进行建立操做:kubectl create -f <directory>
Ø 2. 查看资源对象查看全部Pod列表:kubectl get pods
查看rc和service列表:kubectl get rc,service
Ø 3. 描述资源对象显示Node的详细信息:kubectl describe nodes <node-name>
显示Pod的详细信息:kubectl describe pods/<pod-name>
显示由RC管理的Pod的信息:kubectl describe pods <rc-name>
Ø 4. 删除资源对象基于Pod.yaml定义的名称删除Pod:kubectl delete -f pod.yaml
删除全部包含某个label的Pod和service:kubectl delete pods,services -l name=<label-name>
删除全部Pod:kubectl delete pods --all
ØØ 5. 执行容器的命令执行Pod的data命令,默认是用Pod中的第一个容器执行:kubectl exec <pod-name> data
指定Pod中某个容器执行data命令:kubectl exec <pod-name> -c <container-name> data
经过bash得到Pod中某个容器的TTY,至关于登陆容器:kubectl exec -it <pod-name> -c <container-name> bash
Ø 6.Pod 的扩容与缩容执行扩容缩容Pod的操做kubectl scale rc redis --replicas=3
Ø 7.Pod 的滚动升级执行滚动升级操做:kubectl rolling-update redis -f redis-rc.update.yaml
docker的namesapce隔离
docker的基本概念和术语
Ø 镜像 (image) :镜像是构建 docker 世界的基石,用户基于镜像建立容器,它是基于联合文件系统的一种层式结构,由一系列指令一步步构建出来的。能够简单的理解为镜像就是容器运行的程序代码。Ø Registry : Docker 用 Registry 来保存用户构建的镜像。 Registry 分为公共和私有两种。 Docker 公司运营的公共 Registry 叫作 Docker Hub 。用户能够在 Docker Hub 上注册帐号,分享并保存本身构建的镜像。Ø 容器 (container) :容器是基于镜像启动起来的,容器中能够运行一个或者多个进程,咱们能够认为,镜像是 Docker 生命周期中的构建和打包阶段,而容器则是启动和执行阶段 。Ø Docker 守护 进程 : docker deamonØ Docker 客户端 : docker client , 其实是 docker 的二进制程序,是主要的用户与 Docker 交互方式。docker使用的cgroup的配置限额Ø libcontainer : 用于容器管理的包,管理 namespaces 、 cgroups 、 capabilities 以及文件系统来对容器控制。可用 Libcontainer 建立容器,并对容器进行管理。 pivot_root 用于改变进程的根目录,能够将进程控制在 rootfs 中。若是 rootfs 是基于 ramfs 的(不支持 pivot_root ),那会在 mount 时使用 MS_MOVE 标志位加上 chroot 来顶替 。 Libcontainer 经过接口的方式定义了一系列容器管理的操做,包括处理容器的建立( Factory )、容器生命周期管理( Container )、进程生命周期管理( Process )等 一系列接口。
docker的AUFS
docker实现持续发布![]()
dockerfile语法
Ø ADDADD命令有两个参数,源和目标。它的基本做用是从源系统的文件系统上复制文件到目标容器的文件系统。若是源是一个URL,那该URL的内容将被下载并复制到容器中。
Ø CMD和RUN命令类似,CMD能够用于执行特定的命令。和RUN不一样的是,这些命令不是在镜像构建的过程当中执行的,而是在用镜像构建容器后被调用。
Ø ENTRYPOINT配置容器启动后执行的命令,而且不可被 docker run 提供的参数覆盖。
每一个 Dockerfile中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。
ENTRYPOINT 帮助你配置一个容器使之可执行化,若是你结合CMD命令和ENTRYPOINT命令,你能够从CMD命令中移除“application”而仅仅保留参数,参数将传递给ENTRYPOINT命令。
Ø ENVENV命令用于设置环境变量。这些变量以”key=value”的形式存在,并能够在容器内被脚本或者程序调用。这个机制给在容器中运行应用带来了极大的便利。
Ø EXPOSEEXPOSE用来指定端口,使容器内的应用能够经过端口和外界交互。
Ø FROMFROM命令多是最重要的Dockerfile命令。改命令定义了使用哪一个基础镜像启动构建流程。基础镜像能够为任意镜 像。若是基础镜像没有被发现,Docker将试图从Docker image index来查找该镜像。FROM命令必须是Dockerfile的首个命令。
Ø MAINTAINER建议这个命令放在Dockerfile的起始部分,虽然理论上它能够放置于Dockerfile的任意位置。这个命令用于声明做者,并应该放在FROM的后面。
Ø RUNRUN命令是Dockerfile执行命令的核心部分。它接受命令做为参数并用于建立镜像。不像CMD命令,RUN命令用于建立镜像(在以前commit的层之上造成新的层)。
Ø USERUSER命令用于设置运行容器的UID。
Ø VOLUMEVOLUME命令用于让你的容器访问宿主机上的目录。
Ø WORKDIRdocker的基本操做WORKDIR命令用于设置CMD指明的命令的运行目录。
Ø 查询本地镜像 # docker imagesØ 搜索 镜像 # docker search debianØ 下载 镜像 # docker pull debianØ 建立 镜像(建立镜像能够通用 2 方式完成, 1 保存镜像修改, 2 经过 Dockerfile 文件) # docker commit -m " commont of this image" -a " Autho " container_name repo/ image:tag#docker build -t repo/ image:tag . # 注意 "." 为当前目录必须包含 Dockerfile 文件Ø 提交 镜像 # docker push container_nameØ 删除 镜像 # docker rmi image_nameØ 导 入镜像文件 # docker save -o image.tar debian:8Ø 查看 全部的容器 # docker ps –aØ 运行 容器 # docker run --name container_name - dti debian / bin/bashØ 进入 运行容器 # docker exec -ti debian bashØ 中止 容器 # docker stop container_nameØ 启动 容器 # docker start container_nameØ 查看 容器状态 # docker stats container_nameØ 删除 容器 # docker rm container_name网络模型之dockerØ 导出 容器 # docker export -o container.tar container_name
网络模型之kubernetes
Ø Pod 的 IP 地址是 Docker Daemon 根据 docker0 网桥的 IP 地址段进行分配的。 Service 的 Cluster IP 地址相对于 Pod 的 IP 地址来讲相对稳定, Service 被建立时即被分配一个 IP 地址,在销毁该 Service 以前,这个 IP 地址都不会变化了。而 Pod 在 K8s 集群中生命周期较短,可能被 ReplicationController 销毁、再次建立,新建立的 Pod 将会分配一个新的 IP 地址
Ø kubernetes 的服务发现机制:经过 Add-On 增值包的方式引入 DNS 系统,把服务名做为 DNS 域名,程序可使用服务名来创建连接。
Ø 外部系统访问 service : Node IP + NodePort 模式访问此服务。
Ø Load balancer : HAProxy 或 Nginx
目的:为了能经过服务的名字在集群内部进行服务的相互访问,须要建立一个虚拟的 DNS 服务来完成服务名到 C lusterIP 的解析
Ø etcd : DNS 存储网络模型之calico
Ø kube2sky :将 Kubernetes Master 中的 Service 注册到 etcd 中
Ø skyDNS :提供 DNS 域名解析服务
Ø healthz :提供对 skydns 服务的健康检查功能
![]()
![]()
MooseFS分布式存储
MooseFS 有哪些特色1. MooseFS 提供了类 Unix 文件系统的标准操做,应用程序无需修改便可运行• 文件层级结构• 保存 POSIX 标准文件属性• 支持特殊文件类型• 支持软 / 硬联接• 支持基于 IP 和密码的存储访问2. MooseFS 提供了比单机存储系统更加优秀的特性• 采用多副本方式提升可靠性• 容量能够动态扩展• 支持被删除文件的恢复zookeeper• 支持一致性快照