K8s: 控制器之Deployment对象

发布于:2024-04-24 ⋅ 阅读:(22) ⋅ 点赞:(0)

Deployment 对象


1 )概述

  • 为什么大家都用Deployment,不直接用Pod,不直接用 Replica Set
  • 因为deployment就是专门像一个管理员一样,专门来管这些散落在各处的各种各样的Pod
  • Deployment不仅会管Pod,还会管Replica Set
  • 只要负责描述Deployment目标中的目标状态,然后Deployment就可以根据你的目标去改变实际的状态,使它变成一个你期望的一个状态
  • Deployment的概念非常简单,就是一个控制器,这也是K8s里面为了管理Pod, 专门设计出来的这么一个对象
  • 创建Deployment,然后让 Replica Set 后台创建 pod, 也就是 Deployment 和 Pod 中间有一个 Replica Set
  • 而中间的这个 Replica Set 才是真正管理副本的控制器,而 Deployment 是管理这个 Replica Set
  • Deployment它有一个很大的典型场景,就是承担更多的负载,只需要修改 里面的Replica Set副本数量即可完成

2 )应用

  • 创建 dep-repset.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: dep-repset-nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: dep-repset-nginx
      template:
        metadata:
          name: dep-repset-nginx
          labels:
            app: dep-repset-nginx
        spec:
          containers:
          - name: dep-repset-nginx
            image: nginx
            resources:
              limits:
                memory: '64Mi'
                cpu: '100m'
            ports:
            - containerPort: 80
    
  • $ kubectl apply -f dep-repset.yaml 创建 Development

    deployment.apps/dep-repset-nginx created
    
  • $ kubectl get all 获取全部

    NAME                                    READY   STATUS    RESTARTS   AGE
    pod/dep-repset-nginx-65d94b6698-tt9tz   1/1     Running   0          45s
    pod/dep-repset-nginx-65d94b6698-xnnjt   1/1     Running   0          45s
    
    NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
    service/kubernetes   ClusterIP   10.1.0.1     <none>        443/TCP   6d
    
    NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/dep-repset-nginx   2/2     2            2           45s
    
    NAME                                          DESIRED   CURRENT   READY   AGE
    replicaset.apps/dep-repset-nginx-65d94b6698   2         2         2       45s
    
  • 可以看到上面自动创建了 Replica Set 而且数量是2个

  • 在实际场景中,单个web服务器并发连接数大概是1000会话左右, 超过就会排队

  • 所以,超过这个数量会话就需要对其调优,性能达到瓶颈,后面请求就会排队

  • 现在我们对其配额进行调整,将数量2修改为3, 现在先准备环境

    • 原来的窗口中运行 $ kubectl get po -w 命名为窗口A,目的是监控
    • 新增一个窗口运行进行修改, 命名为窗口B
      • $ vi dep-repset.yaml 修改 replicas: 2replicas: 3
      • $ kubectl apply -f dep-repset.yaml 重新应用
        deployment.apps/dep-repset-nginx configured
        
    • 发现,窗口B中执行apply的一瞬间,在窗口A中监控中新增了一个pod
      • 这个新pod的状态,从: Pending => ContainerCreating => Running 三个状态的转变
      • 在窗口B中执行 $ kubectl get po 发现变成了3个pod
  • 以上,基于Deployment对象,实现pod的水平扩容,等某个流量日过了,再修改回来

  • 这就是 K8s 强大的地方,动态的扩容和缩容,实现一个弹性的网络

  • 对于企业来讲,节约资源,节省成本