kubernetes资源对象Deployment

Deployment 是什么?

Deployment 为 Pod 和 Replica Set(下一代 Replication Controller)提供声明式更新。你只需要在 Deployment 中描述你想要的目标状态是什么,Deployment controller 就会帮你将 Pod Replica Set 的实际状态改变到你的目标状态。你可以定义一个全新的Deployment,也可以创建一个新的替换旧的 Deployment。

一个典型的用例如下:

  • 使用 Deployment 来创建 ReplicaSet。ReplicaSet 在后台创建 pod。检查启动状态,看它是成功还是失败。
  • 然后,通过更新 Deployment 的 PodTemplateSpec 字段来声明 Pod 的新状态。这会创建一个新的 ReplicaSet,Deployment 会按照控制的速率将 pod 从旧的ReplicaSet 移动到新的 ReplicaSet 中。
  • 如果当前状态不稳定,回滚到之前的 Deployment revision。每次回滚都会更新Deployment 的 revision。扩容 Deployment 以满足更高的负载。
  • 暂停 Deployment 来应用 PodTemplateSpec 的多个修复,然后恢复上线。
  • 根据 Deployment 的状态判断上线是否 hang 住了。
  • 清除旧的不必要的 ReplicaSet。

Deployment 为 Pod 和 ReplicaSet 提供了一个声明式定义 (declarative) 方法,用来替代以前的 ReplicationController 来方便的管理应用。

  简单的Nginx.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3 #3个副本
  template:
    metadata:
      lables:
        app: nginx
    spec:
      containers:
      - name: nginx
        image:nginx:1.8
        ports:
        - containerPort: 80

扩容、修改副本数量:

kubectl scale deployment nginx-deployment --replicas 10

如果集群支持 horizontal pod autoscaling 的话,还可以为 Deployment 设置自动扩展:

kubectl autoscale deployment nginx-deployment --min=10 --max=15 --cpu
-percent=80

更新镜像:

kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1

回滚:

kubectl rollout undo deployment/nginx-deployment

创建Deployment示例:

kubectl create -f tomcat-deployment.yaml --record #创建deployment
deployment "nginx-deployment" created

[root@master yaml]# kubectl get deployments      #查看详情
NAME            DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
myapp-deploy    2         2         2            2           17d
tomcat-deploy   2         2         2            2           17d

将 kubectl 的  —record  的 flag 设置为  true  可以在 annotation 中记录当前命令创建或者升级了该资源。这在未来会很有用,例如,查看在每个 Deployment revision 中执行了哪些命令。

[root@master yaml]# kubectl get pods --show-labels
NAME                             READY     STATUS    RESTARTS   AGE       LABELS
myapp-deploy-55c6785644-57t85    1/1       Running   0          17d       app=myapp,pod-template-hash=1172341200,release=canary
myapp-deploy-55c6785644-rn7x6    1/1       Running   0          17d       app=myapp,pod-template-hash=1172341200,release=canary
mytomcat                         1/1       Running   2          98d       name=mytomcat
nginx-pod                        1/1       Running   0          3d        app=nginx
tomcat-deploy-58488bcdcd-9xbgz   1/1       Running   0          17d       app=tomcat,pod-template-hash=1404467878,release=canary
tomcat-deploy-58488bcdcd-gnm84   1/1       Running   0          17d       app=tomcat,pod-template-hash=1404467878,release=canary
webapp-f8h5v                     1/1       Running   2          104d      app=webapp
webapp-flpqz                     1/1       Running   2          96d       app=webapp

注意: 你必须在 Deployment 中的 selector 指定正确 pod template label(在该示例中是  app = myapp ),不要跟其他的 controller 搞混了(包括 Deployment、ReplicaSet、Replication Controller 等)。Kubernetes 本身不会阻止你这么做 ,如果你真的这么做了,这些 controller 之间会相互打架,并可能导致不正确的行为。

[root@master yaml]# kubectl describe deployments
Name:                   myapp-deploy
Namespace:              default
CreationTimestamp:      Mon, 02 Aug 2021 07:36:29 +0000
Labels:                 app=myapp
                        release=canary
Annotations:            deployment.kubernetes.io/revision=1
                        kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"name":"myapp-deploy","namespace":"default"},"spec":{"replicas":2,"selector":{...
Selector:               app=myapp,release=canary
Replicas:               2 desired | 2 updated | 2 total | 2 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=myapp
           release=canary
  Containers:
   myapp:
    Image:        ikubernetes/myapp:v2
    Port:         80/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   myapp-deploy-55c6785644 (2/2 replicas created)
Events:          <none>


Name:                   tomcat-deploy
Namespace:              default
CreationTimestamp:      Mon, 02 Aug 2021 07:49:00 +0000
Labels:                 app=tomcat
                        release=canary
Annotations:            deployment.kubernetes.io/revision=1
                        kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"name":"tomcat-deploy","namespace":"default"},"spec":{"replicas":2,"selector":...
Selector:               app=tomcat,release=canary
Replicas:               2 desired | 2 updated | 2 total | 2 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=tomcat
           release=canary
  Containers:
   tomcat:
    Image:        tomcat:7-alpine
    Ports:        8080/TCP, 8009/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   tomcat-deploy-58488bcdcd (2/2 replicas created)
Events:          <none>
[root@master yaml]# kubectl describe myapp
the server doesn't have a resource type "myapp"
[root@master yaml]# kubectl get rs
NAME                       DESIRED   CURRENT   READY     AGE
myapp-deploy-55c6785644    2         2         2         17d
tomcat-deploy-58488bcdcd   2         2         2         17d
[root@master yaml]# kubectl describe myapp-deploy
the server doesn't have a resource type "myapp-deploy"
[root@master yaml]# kubectl describe deployments
Name:                   myapp-deploy
Namespace:              default
CreationTimestamp:      Mon, 02 Aug 2021 07:36:29 +0000
Labels:                 app=myapp
                        release=canary
Annotations:            deployment.kubernetes.io/revision=1
                        kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"name":"myapp-deploy","namespace":"default"},"spec":{"replicas":2,"selector":{...
Selector:               app=myapp,release=canary
Replicas:               2 desired | 2 updated | 2 total | 2 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=myapp
           release=canary
  Containers:
   myapp:
    Image:        ikubernetes/myapp:v2
    Port:         80/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   myapp-deploy-55c6785644 (2/2 replicas created)
Events:          <none>


Name:                   tomcat-deploy
Namespace:              default
CreationTimestamp:      Mon, 02 Aug 2021 07:49:00 +0000
Labels:                 app=tomcat
                        release=canary
Annotations:            deployment.kubernetes.io/revision=1
                        kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"name":"tomcat-deploy","namespace":"default"},"spec":{"replicas":2,"selector":...
Selector:               app=tomcat,release=canary
Replicas:               2 desired | 2 updated | 2 total | 2 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=tomcat
           release=canary
  Containers:
   tomcat:
    Image:        tomcat:7-alpine
    Ports:        8080/TCP, 8009/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   tomcat-deploy-58488bcdcd (2/2 replicas created)
Events:          <none>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
k8s学习 介绍 序⾔ 课程介绍 Docker 基础 Docker 简介 镜像和容器的基本操作 Dockerfile 定制镜像 私有镜像仓库 数据共享与持久化 Docker 的⽹络模式 Docker 三架⻢⻋ Docker Compose Docker Machine Docker Swarm Docker 实践 图形化管理和监控 Docker 的多阶段构建 Dockerfile 最佳实践 Kubernetes 基础 Kubernetes 初体验 基本概念与组件 kubeadm 搭建集群 使⽤ kubeadm 搭建集群环境 安装 Dashboard 插件 17.1 7.2 7.3 7.4 7.5 8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9 8.10 9.1 9.2 9.3 10.1 10.2 10.3 11.1 11.2 11.3 深⼊理解 Pod YAML ⽂件 静态 Pod Pod Hook Pod 的健康检查 初始化容器 常⽤对象操作: Replication Controller 与 Replica Set Deployment HPA Job/CronJob Service ConfigMap Secret RBAC 部署Wordpress示例 DaemonSet 和 StatefulSet 持久化存储: PV PVC StorageClass 服务发现 kubedns ingress 安装配置 ingress tls 和 path 的使⽤ 包管理⼯具 Helm Helm 的安装使⽤ Helm 的基本使⽤ Helm 模板之内置函数和Values 211.4 11.5 11.6 11.7 11.8 12.1 12.2 13.1 13.2 13.3 13.4 13.5 13.6 13.7 13.8 13.9 14.1 14.2 15.1 15.2 15.3 15.4 15.5 15.6 15.7 Helm 模板之模板函数与管道 Helm 模板之控制流程 Helm 模板之命名模板 Helm 模板之其他注意事项 Helm Hooks 调度器 Kubernetes 调度器介绍 Kubernetes 亲和性调度 集群监控 ⼿动安装 Prometheus 监控 Kubernetes 集群应⽤ 监控 Kubernetes 集群节点 监控 Kubernetes 常⽤资源对象 Grafana 的安装使⽤ AlertManager 的使⽤ Prometheus Operator 的安装 ⾃定义Prometheus Operator 监控项 Prometheus Operator⾼级配置 ⽇志收集 ⽇志收集架构 搭建 EFK ⽇志系统 CI/CD: 动态 Jenkins Slave Jenkins Pipeline 部署 Kubernetes 应⽤ Jenkins BlueOcean Harbor Gitlab Gitlab CI Devops
kubernetes-learning.pdf,网盘文件永久链接 ├ 一、课程介绍 │ └ 11.课程介绍.mp4 ├ 七、深入理解Pod │ │ 18.YAML 文件.mp4 │ │ 19.静态 Pod.mp4 │ │ 20.Pod Hook.mp4 │ │ 21.Pod 的健康检查.mp4 │ └ 22.初始化容器.mp4 ├ 三、Docker三架马车 │ │ 10.Docker Swarm.mp4 │ │ 8.Docker Compose.mp4 │ └ 9.Docker Machine.mp4 ├ 九、持久化存储 │ │ 35.PV 的使用.mp4 │ │ 36.PVC 的使用.mp4 │ └ 37.StorageClass 的使用.mp4 ├ 二、Docker基础 │ │ 2.Docker 简介与安装.mp4 │ │ 3.Docker 基本命令.mp4 │ │ 4.Dockerfile 基本用法.mp4 │ │ 5.Docker 私有仓库.mp4 │ │ 6.数据共享与持久化.mp4 │ └ 7.Docker 网络模式.mp4 ├ 五、Kubernetes基础 │ │ 14.Kubernetes 初体验.mp4 │ └ 15.基本概念和组件.mp4 ├ 八、常用资源对象 │ │ 23.Replication Controller 与 Replica Set.mp4 │ │ 24.Deployment 的使用.mp4 │ │ 25.Pod 自动扩缩容.mp4 │ │ 26.Job 和 CronJob 的使用.mp4 │ │ 27.Service 的使用.mp4 │ │ 28.ConfigMap 的使用.mp4 │ │ 29.Secret 的使用.mp4 │ │ 30.RBAC 的使用(1).mp4 │ │ 31.RBAC 的使用(2).mp4 │ │ 32.WordPress 部署示例(1).mp4 │ │ 33.WordPress 部署示例(2).mp4 │ └ 34.DaemonSet 与 StatefulSet 的使用.mp4 ├ 六、集群环境搭建 │ │ 16.使用 Kubeadm 搭建集群环境.mp4 │ └ 17.Dashboard 插件安装.mp4 ├ 十、服务发现 │ │ 38.集群内部服务发现-kubedns.mp4 │ │ 39.traefik 的安装使用.mp4 │ └ 40.Ingress TLS 与 PATH 使用.mp4 ├ 十一、Helm包管理工具 │ │ 41.Helm 的安装使用.mp4 │ │ 42.Helm 的基本使用.mp4 │ │ 43.Helm 模板之内置函数和 Values.mp4 │ │ 44.Helm 模板之模板函数与管道.mp4 │ │ 45.Helm 模板之控制流程.mp4 │ │ 46.Helm 模板之命名模板.mp4 │ │ 47.Helm 模板之其他注意事项.mp4 │ └ 48.Helm Hooks 的使用.mp4 ├ 十三、集群监控 │ │ 52.手动安装 Prometheus.mp4 │ │ 53.Prometheus 安装错误排查.mp4 │ │ 54.监控 Kubernetes 集群应用.mp4 │ │ 55.node-exporter 的安装使用.mp4 │ │ 56.Prometheus 自动发现 K8S 节点.mp4 │ │ 57.Kubernetes 常用资源对象监控.mp4 │ │ 58.Grafana 的安装使用.mp4 │ │ 59.Grafana 的插件和监控.mp4 │ │ 60.AlertManager 的安装使用.mp4 │ │ 61.AlertManager 结合钉钉的报警.mp4 │ │ 62.Prometheus Operator 的安装使用.mp4 │ │ 63.自定义 Prometheus Operator 监控.mp4 │ │ 64.自定义 Prometheus Operator 报警.mp4 │ └ 65.Prometheus Operator 高级配置.mp4 ├ 十二、调度器 │ │ 49.调度器解析.mp4 │ │ 50.节点亲和性.mp4 │ └ 51.Pod 亲和性与反亲和性以及污点和容忍.mp4 ├ 十五、CICD │ 69.动态 Jenkins Slave.mp4 │ 70.Jenkins Pipeline 部署 K8S 应用.mp4 │ 71.Jenkins Blue Ocean 的使用.mp4 │ 72.Harbor.........

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值