雲化各組件是什麼?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• 支持一致性快照