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