1 K8S(kubernetes) 1.1 Kubernetes基础命令 |
1.2 Kubernetes快速部署 |
1.3 Kubernetes部署(Test) |
1.4 资源对象Kind |
1.4.1 Deployment对象 |
1.4.1.1 rollout |
1.4.2 自动扩缩容 |
1.5 Kubernetes基本概念与术语 |
1.5.1 Master |
1.5.2 Node |
1.6 集群部署3 Master 2 node |
1.6.1 kuber |
1.6.2 kubernetes高可用集群验证 |
Deployment对象,顾名思义,是用于部署应用的对象。它使Kubernetes中最常用的一个对象, 它为ReplicaSet和Pod的创建提供了一种声明式的定义方法,从而无需像前两篇文章中那样手动创建ReplicaSet和Pod对象 (使用Deployment而不直接创建ReplicaSet是因为Deployment对象拥有许多ReplicaSet没有的特性,例如滚动升级和回滚) 详情请查询官方文档 https://kubernetes.io/docs/concepts/workloads/controllers/deployment/
• 创建ReplicaSet和Pod • 滚动升级(不停止旧服务的状态下升级)和回滚应用(将应用回滚到之前的版本) • 平滑地扩容和缩容 • 暂停和继续Deployment
部署一个简单的Nginx应用进行测试实验
首先创建对应两个yaml文件,nginx_deployment.yaml.nginx_service.yaml
nginx_deployment.yaml
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 template: metadata: labels: app: nginx track: stable spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80 |
kubectl create -f nginx_deployment.yaml --record
--record 参数记录当前版本Deployment执行了哪些命令
创建完成后,查询创建节点的情况
DESIRED 期望副本个数 CURRENT 当前已经创建副本个数 UP-TO-DATE 表示已经更新完成副本个数 AVAILABLE 当前用户可用的副本数量 AGE 当前已经运行的时常
通过kubectl get rs来查看系统中ReplicaSet对象,由此可以看出Deployment会自动创建一个ReplicaSet对象。 通过kubectl get pods --show-labels命令来查看当前系统中的Pod对象,可以成功观察到nginx-deployment创建的3个Pod。
Deployment 更新 假如我们现在想要让 nginx pod 使用 nginx:1.9.1 的镜像来代替原来的 nginx:1.7.9 的镜像,运行以下命令: kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1
或者我们可以使用 edit 命令来编辑 Deployment,将image从nginx:1.7.9 改写成 nginx:1.9.1。 kubectl edit deployment/nginx-deployment 查看更新进度: $ kubectl rollout status deployment/nginx-deployment Waiting for rollout to finish: 2 out of 3 new replicas have been updated... deployment "nginx-deployment" successfully rolled out 扩容: kubectl scale deployment nginx-deployment --replicas 10
如果集群支持 horizontal pod autoscaling 的话,还可以为 Deployment 设置自动扩展:
kubectl autoscale deployment nginx-deployment --min=10 --max=15 --cpu-percent=80 Deployment更新时会创建一个新的ReplicaSet,然后将新的ReplicaSet中的Pod慢慢扩容到指定的副本数,将旧的ReplicaSet慢慢缩容到0。 因此,更新时总能够确保旧的服务不会停止,这就是滚动更新。
4. Deployment的回滚 当我们像上文一样更新了Deployment之后,我们发现nginx:1.9.1的镜像不是很稳定,因此想要修改回nginx:1.7.9的版本, 此时我们不需要手动更改Deployment文件,而是利用Deployment的回滚功能。
使用rollout history命令查看Deployment的版本(revision): $ kubectl rollout history deployment/nginx-deployment
deployments "nginx-deployment": REVISION CHANGE-CAUSE 1 kubectl create -f docs/user-guide/nginx-deployment.yaml --record 2 kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1
因为我们创建 Deployment 的时候使用了 —recored 参数可以记录命令,我们可以很方便的查看每次 revison 的变化。
查看单个 revision 的详细信息: kubectl rollout history deployment/nginx-deployment --revision=2
现在,可以使用rollout undo命令回滚到前一个revision: $ kubectl rollout undo deployment/nginx-deployment deployment "nginx-deployment" rolled back
也可以使用--to-revision参数指定某个历史版本: $ kubectl rollout undo deployment/nginx-deployment --to-revision=2 deployment "nginx-deployment" rolled back 你可以通过设置 .spec.revisonHistoryLimit 项来指定 deployment 最多保留多少 revison 历史记录。默认的会保留所有的 revision;如果将该项设置为 0,Deployment 就不允许回退了。 只有 Deployment 的 rollout 被触发才会创建一个 revision!注意!当且仅当 Deployment 的 Pod template被更改, 例如更新 template 中的 label 和容器镜像时,才会触发一个rollout,从而为Deployment创建出一个新的 revision。
----------------------------------------------------------------------------------------------------------------------------
nginx_service.yaml
kubectl create -f nginx_service.yaml
apiVersion: v1 kind: Service metadata: name: nginx-service-node spec: selector: app: nginx ports: - name: port: 8000 protocol: TCP targetPort: 80 type: NodePort |
|