Kubernetes是容器集羣管理系統,是一個開源的平臺,能夠實現容器集羣的自動化部署、自動擴縮容、維護等功能。node
便攜性: 不管公有云、私有云、混合雲仍是多雲架構都全面支持
可擴展: 它是模塊化、可插拔、可掛載、可組合的,支持各類形式的擴展
自修復: 它能夠自保持應用狀態、可自重啓、自複製、自縮放的,經過聲明式語法提供了強大的自修復能力nginx
名稱 Kubernetes 源於希臘語,意爲 「舵手」 或 「飛行員」, 且是英文 「governor」 和 「cybernetic」的詞根。 K8s 是經過將 8 個字母 「ubernete」 替換爲 8 而導出的縮寫。另外,在中文裏,k8s 的發音與 Kubernetes 的發音比較接近。docker
每個 Kubernetes 就集羣都由一組 Master 節點和一系列的 Worker 節點組成,其中 Master 節點主要負責存儲集羣的狀態併爲 Kubernetes 對象分配和調度資源。
api
server.js網絡
var http = require('http'); var handleRequest = function(request, response) { console.log('Received request for URL: ' + request.url); response.writeHead(200); response.end('Hello World!'); }; var www = http.createServer(handleRequest); www.listen(8080);
FROM node:6.9.2 EXPOSE 8080 COPY server.js . CMD node server.js
eval $(minikube docker-env)
docker build -t hello-node:v1 .
建立 Deployment架構
kubectl run hello-node --image=hello-node:v1 --port=8080
查看 Deployment:app
kubectl get deployments
查看pod負載均衡
kubectl get pods
查看集羣事件:模塊化
kubectl get events
查看 kubectl 配置:post
kubectl config view
建立service
暴露到公網
kubectl expose deployment hello-node --type=LoadBalancer
kubectl get services
服務訪問
minikube service hello-node --url
查看log
kubectl logs <POD-NAME>
更新應用:
response.end('Hello World Again!');
構建v2鏡像
docker build -t hello-node:v2 .
修改鏡像
kubectl set image deployment/hello-node hello-node=hello-node:v2
再次訪問
如今能夠清理您在集羣中建立的資源:
kubectl delete service hello-node kubectl delete deployment hello-node
能夠中止 Minikube VM:
minikube stop eval $(minikube docker-env -u)
或者,刪除 Minikube VM:
minikube delete
經過yaml描述文件建立deployment
deployment.yaml
apiVersion: apps/v1beta1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 2 # tells deployment to run 2 pods matching the template template: # create pods using pod definition in this template metadata: # unlike pod-nginx.yaml, the name is not included in the meta data as a unique name is # generated from the deployment name labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80
將 kubectl 的 —record 的 flag 設置爲 true 能夠在 annotation 中記錄當前命令建立或者升級了該資源。這在將來會頗有用,例如,查看在每一個 Deployment revision 中執行了哪些命令。
kubectl create -f deployment.yaml --record
kubectl describe deployment nginx-deployment
kubectl get deployments
給這個nginx換個版本
kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1 或手動改配置 kubectl edit deployment/nginx-deployment
查看狀態:
kubectl rollout status deployment/nginx-deployment - deployment "nginx-deployment" successfully rolled out
經過record能夠記錄命令
kubectl rollout history deployment/nginx-deployment deployment.extensions/nginx-deployment REVISION CHANGE-CAUSE 1 kubectl create --filename=deployment.yaml --record=true 2 kubectl create --filename=deployment.yaml --record=true
擴容/縮容
kubectl scale deployment nginx-deployment --replicas=4
查看歷史操做
kubectl rollout history deployment/nginx-deployment
回滾
kubectl rollout history deployment/nginx-deployment --revision=2
回滾到歷史版本
kubectl rollout undo deployment/nginx-deployment --to-revision=2
暫停/恢復
kubectl rollout pause deployment/nginx-deploymen kubectl rollout resume deploy nginx-deployment
.spec.strategy.rollingUpdate.maxSurge 能夠爲整數或者百分比,默認爲desired Pods數的25%
.spec.strategy.rollingUpdate.maxUnavailable 能夠爲整數或者百分比,默認爲desired Pods數的25%
在Deployment rollout時,須要保證Available(Ready) Pods數不低於 desired pods number - maxUnavailable; 保證全部的Pods數很少於 desired pods number + maxSurge。
rollout時,先建立maxSurge個Pods,這時達到pods數的上限值desired replicas + maxSurge,而後delete OldRS maxUnavailable個Pods,這時Ready的Pods number最差也能保證desired replicas - maxUnavailable個。直到刪除全部的pods。升級結束。
kubectl rollout pause只會用來中止觸發下一次rollout。因此正在執行的滾動不會中止。可是下次滾動就會被暫停,直到用戶執行kubectl rollout resume
回滾的時候也是按照滾動的機制進行的,一樣要遵照maxSurge和maxUnavailable的約束。並非一次性將全部的Pods刪除,而後再一次性建立新的Pods。
docker swarm優勢
Kubernetes優勢:
Kubernetes:
須要成熟的部署和監控選項
須要快速可靠的響應時間
須要開發複雜的應用程序,而且須要高資源計算而不受限制
有一個很是大的集羣
Docker,
但願快速,方便的部署集羣
啓動速度快
http://www.javashuo.com/article/p-cviahawv-dz.html
http://www.javashuo.com/article/p-nndfwuug-nb.html
k8s service詳解:https://zhuanlan.zhihu.com/p/39909011