1.centos 7.4 系統
2.已經安裝docker,部署k8s羣集
3.關閉防火牆
4.可鏈接外網前端
爲了實如今Kubernetes集羣上部署容器化應用程序。須要建立一個Kubernetes Deployment,Deployment負責建立和更新應用。建立Deployment後,Kubernetes master 會將Deployment建立好的應用實例調度到集羣中的各個節點。node
應用實例建立完成後,Kubernetes Deployment Controller會持續監視這些實例。若是管理實例的節點被關閉或刪除,那麼 Deployment Controller將會替換它們,實現自我修復能力。nginx
「在舊的世界中」 ,通常一般安裝腳原本啓動應用,可是便不會在機器故障後自動恢復。經過在Node節點上運行建立好的應用實例,使 Kubernetes Deployment 對應用管理提供了大相徑庭的方法。docker
可參考博客 :http://www.javashuo.com/article/p-zkznnblh-ve.htmlvim
vim nginx-deployment.yml後端
kind: Deployment metadata: name: nginx-deploy spec: replicas: 1 template: metadata: labels: app: nginx-cluster spec: containers: - name: nginx-cluster image: nginx ports: - containerPort: 80 resources: requests: cpu: 1 memory: 500Mi limits: cpu: 2 memory: 1024Mi
kind: Deployment
metadata:
name: nginx-deploy
spec:
replicas: 1 #pod副本期待數量
template: #根據此模板建立pod的副本(實例)
metadata:
labels:
app: nginx-cluster #標籤名稱
spec:
containers: #pod容器的定義部分
- name: nginx-cluster #容器名稱
image: nginx #容器鏡像
ports:
- containerPort: 80 #容器應用監控的端口號
resources:
requests:
cpu: 1 #指定cpu數量
memory: 500Mi #指定內存數量
limits:
cpu: 2
memory: 1024Micentos
kubectl create -f nginx-deploy.yml #建立deployment
kubectl get deployment #查看deployment
kubectl get pod -o wide #查看pod狀態api
Pod是有生命週期的。當一個工做節點(Node)銷燬時,節點上運行的Pod也會銷燬,而後經過ReplicationController動態建立新的Pods來保持應用的運行。做爲另外一個例子,考慮一個圖片處理 backend,它運行了3個副本,這些副本是可互換的 —— 前端不須要關心它們調用了哪一個 backend 副本。也就是說,Kubernetes集羣中的每一個Pod都有一個獨立的IP地址,甚至是同一個節點上的Pod,所以須要有一種方式來自動協調各個Pod之間的變化,以便應用可以持續運行。app
Enter Services。Kubernetes中的Service 是一個抽象的概念,它定義了Pod的邏輯分組和一種能夠訪問它們的策略,這組Pod能被Service訪問,使用YAML (優先)或JSON 來定義Service,Service所針對的一組Pod一般由LabelSelector實現(參見下文,爲何可能須要沒有 selector 的 Service)。負載均衡
能夠經過type在ServiceSpec中指定一個須要的類型的 Service,Service的四種type:
ClusterIP(默認) - 在集羣中內部IP上暴露服務。此類型使Service只能從羣集中訪問。
NodePort - 經過每一個 Node 上的 IP 和靜態端口(NodePort)暴露服務。NodePort 服務會路由到 ClusterIP 服務,這個 ClusterIP 服務會自動建立。經過請求 <NodeIP>:<NodePort>,能夠從集羣的外部訪問一個 NodePort 服務。
LoadBalancer - 使用雲提供商的負載均衡器(若是支持),能夠向外部暴露服務。外部的負載均衡器能夠路由到 NodePort 服務和 ClusterIP 服務。
ExternalName - 經過返回 CNAME 和它的值,能夠將服務映射到 externalName 字段的內容,沒有任何類型代理被建立。這種類型須要v1.7版本或更高版本kube-dnsc才支持。
如上圖,A中Service 路由一組Pods的流量。Service容許pod在Kubernetes中被銷燬並複製pod而不影響應用。相關Pod之間的發現和路由(如應用中的前端和後端組件)由Kubernetes Services處理。
Service 使用label selectors來匹配一組Pod,容許對Kubernetes中的對象進行邏輯運算,Label以key/value 鍵/值對附加到對象上。以多種方式使用:
指定用於開發,測試和生產的對象
嵌入版本Label
使用Label分類對象
你能夠在使用
--exposekubectl 建立 Deployment 的同時建立 Service 。
vim nginx-service.yml
apiVersion: v1 kind: Service metadata: name: nginx-service labels: app: nginx-service spec: type: NodePort selector: app: nginx-cluster ports: - port: 8000 targetPort: 80 nodePort: 32500
解釋以下:
apiVersion: v1 #版本號
kind: Service #代表是k8s service
metadata:
name: nginx-service #自定義service 名稱
labels:
app: nginx-service #自定義標籤名稱
spec:
type: NodePort
selector:
app: nginx-cluster
ports:
- port: 8000
targetPort: 80 #nginx 服務默認端口號
nodePort: 32500 #客戶端直接訪問的端口號
kubectl create -f nginx-service.yml #建立service
kubectl get svc #查看service