K8S控制器详解,Deployment,DaemonSet,Job/CronJob,StatefulSet,HPA

控制器:实现pod的自动部署,维护,扩容等
Deployment
DaemonSet
Job/CronJob

高级控制器:有状态的应用,连接到指定的服务,
StatefulSet:解决pod的创建顺序,解决pod的访问问题 
HPA

一.Deployment:(ReplicaSet和pod)
	功能:pod自动部署,维护,更新,版本回滚
	1.1 Deployment资源清单文件
		---
		kind: Deployment          # 资源对象类型
		apiVersion: apps/v1       # 版本
		metadata:                 # 元数据
		  name: mydeploy          # 名称
		spec:                     # 详细定义
		  replicas: 3             # 副本数量
		  selector:               # 定义标签选择器
		    matchLabels:          # 支持 matchExpressions 表达式语法
		      app: deploy-httpd   # 通过标签来确定那个 Pod 由它来管理
		  template:               # 定义用来创建 Pod 的模板,以下为 Pod 定义
		    metadata:
		      labels:
		        app: deploy-httpd
		    spec:
		      containers:
		      - name: web
		        image: myos:httpd
	
	1.2 容器内的高可用搭建(service+deployment)

		service --- pod ---- deployment

		srvice:
		---
		kind: Service
		apiVersion: v1
		metadata:
		  name: mysvc
		spec:
		  type: NodePort
		  selector:
		   app: deploy-httpd  #标签匹配pod
		  ports:
		  - protocol: TCP
		    port: 80
		    nodePort: 30080
		    targetPort: 80
		
		deployment:
		---
		apiVersion: apps/v1
		kind: Deployment
		metadata:
		  name: mydeploy
		spec:
		  replicas: 3
		  selector:
		    matchLabels:
		      app: deploy-httpd  #标签匹配pod
		  template:              #pod的模板
		    metadata:
		      labels:
		        app: deploy-httpd #标签匹配pod
		    spec:
		      containers:
		      - image: myos:httpd
		        name: web
	
	1.3 集群的扩缩容(scale)
		kubectl scale 资源类型 资源名称 --replicas 副本数量
		kubectl scale deployment mydeploy --replicas 10

	1.4 更新pod的镜像
	    #template下添加参数:
		imagePullPolicy: Always(镜像仓库下载) | 本地缓存 | 优先仓库下载

	    #更新镜像,滚动更新集群,使用新的镜像替换pod里面指定的镜像
	    [root@master ~]# kubectl set image deployment mydeploy web=myos:nginx

	    #查看历史版本信息
		kubectl rollout history 资源类型 资源名称
		kubectl rollout history deployment(资源类型) mydeploy(名称)

	    #给版本添加注释信息添加注释信息:
		kubectl annotate 资源类型 资源名称 kubernetes.io/change-cause="版本信息"
		kubectl annotate deployments mydeploy kubernetes.io/change-cause="httpd.v1"

	    #镜像更新原理:
	    重建式更新:创建一个replicaset,然后通过replicaset区重建pod,干掉一个更新一个,不占用系统资源,但更新时间慢
	    滚动式更新:通过设置的超量和最少数量,使用replicaset进行pod的删除和更新,占用资源大,速度快.

	1.5 历史版本与回滚
	    kubectl rollout undo 资源类型 资源名称 --to-version  版本号
	    kubectl rollout undo deployment mydeploy --to-revision 1(版本号)


二.DaenonSet:所创建的pod与node节点绑定,每个node上都会运行一个pod,无法自定义副本数量(例如创建kubeproxy等资源).
	资源清单文件的编写,通过对deployment进行修改(删除副本数量)
	---
	kind: DaemonSet         # 资源对象类型
	apiVersion: apps/v1
	metadata:
	  name: myds            # 控制器名称
	spec:
	  selector:
	    matchLabels:
	      app: ds-httpd     # 修改标签防止冲突
	  template:
	    metadata:
	      labels:
	        app: ds-httpd   # 修改标签防止冲突
	    spec:
	      containers:
	      - name: web
	        image: myos:httpd
	        imagePullPolicy: Always

三.Job/CronJob:单任务控制器,负责执行一次任务,保证任务在一个或多个pod上执行成功
	3.1 Job
		保证pod成功执行:
		---
		kind: Job
		apiVersion: batch/v1
		metadata:
		  name: myjob
		spec:
		  template:  # 以下定义 Pod 模板
		    metadata: {}
		    spec:
		      restartPolicy: OnFailure
		      containers:
		      - name: myjob
		        image: myos:8.5
		        command: ["/bin/sh"]
		        args:
		        - -c
		        - |
		          sleep 3
		          exit $((RANDOM%2))  0为正常
	
	3.2 CronJob:计划任务控制器(带有计划任务的job),根据计划任务创建job和pod
		---
		kind: CronJob
		apiVersion: batch/v1
		metadata:
		  name: mycj
		spec:
		  schedule: "* * * * *"  #时间计划
		  jobTemplate:   	     #定义Job模板
		    metadata: {}
		    spec:   
		      template:  	     #定义pod模板
		        metadata: {}
		        spec:
		          restartPolicy: OnFailure
		          containers:
		          - name: myjob
		            image: myos:8.5
		            command: ["/bin/sh"]
		            args:
		            - -c
		            - |
		              sleep 3
		              exit $((RANDOM%2))
	    		
四.StatefulSet:解决pod的创建顺序,解决pod的访问问题 
	通过Headless存储pod的ip,实现访问指定的pod
	4.1 工作原理:StatefulSet -- pod -- Headless:存储pod的ip(Service) <--client
   	4.2 创建Headless,利用service资源清单文件
		---
		kind: Service
		apiVersion: v1
		metadata:
		  name: stssvc          # 服务名称
		spec:
		  type: ClusterIP
		  clusterIP: None       # 设置 IP 为 None
		  selector:
		    app: sts-httpd      # 设置 Pod 标签
		  ports:
		  - protocol: TCP
		    port: 80
		    targetPort: 80

		利用deployment创建StatefulSet
		---
		kind: StatefulSet       # 资源对象类型
		apiVersion: apps/v1
		metadata:
		  name: mysts           # 控制器名称
		spec:
		  serviceName: stssvc   # 新增 headless 服务名称
		  replicas: 3
		  selector:
		    matchLabels:
		      app: sts-httpd    # 修改标签防止冲突
		  template:
		    metadata:
		      labels:
		        app: sts-httpd  # 修改标签防止冲突
		    spec:
		      containers:
		      - name: web
		        image: myos:httpd
	    4.3 通过(pod名称.service资源名称)访问指定的容器服务 
		 进入某个容器: curl http://mysts-0.stssvc
		 通过service资源名称访问,实现负载均衡:curl http://stssvc

五.HPA弹性控制器:监控控制器,实现集群的自动扩缩容

		设置控制器:
		---
		kind: Deployment
		apiVersion: apps/v1
		metadata:
		  name: mydeploy
		spec:
		  replicas: 1
		  selector:
		    matchLabels:
		      app: deploy-httpd
		  template:
		    metadata:
		      labels:
		        app: deploy-httpd
		    spec:
		      containers:
		      - name: web
		        image: myos:httpd
		        resources:           # 为该资源设置配额
		          requests:          # HPA 控制器会根据配额使用情况伸缩集群
		            cpu: 300m        # CPU 配额
		---
		kind: Service   #负载均衡
		apiVersion: v1
		metadata:
		  name: websvc
		spec:
		  type: ClusterIP
		  clusterIP: 10.245.1.80
		  selector:
		    app: deploy-httpd
		  ports:
		  - protocol: TCP
		    port: 80
		    targetPort: 80

		HPA 控制器:
		---
		kind: HorizontalPodAutoscaler
		apiVersion: autoscaling/v2
		metadata:
		  name: myhpa
		spec:
		  behavior:                # 窗口稳定期,这个期间的资源变化
		    scaleDown:
		      stabilizationWindowSeconds: 60
		  scaleTargetRef:          # 指定控制器
		    kind: Deployment
		    apiVersion: apps/v1
		    name: mydeploy
		  minReplicas: 1           # 副本数量      
		  maxReplicas: 3
		  metrics:                 # 扩缩容设置     
		  - type: Resource
		    resource:
		      name: cpu
		      target:
		        type: Utilization
		        averageUtilization: 50 #百分比,节点超过设置的cpu资源的百分之50,则扩容节点,平均资源小于值,缩容
	

控制器:实现pod的自动部署,维护,扩容等
Deployment
DaemonSet
Job/CronJob

高级控制器:有状态的应用,连接到指定的服务,
StatefulSet:解决pod的创建顺序,解决pod的访问问题 
HPA

一.Deployment:(ReplicaSet和pod)
    功能:pod自动部署,维护,更新,版本回滚
    1.1 Deployment资源清单文件
        ---
        kind: Deployment          # 资源对象类型
        apiVersion: apps/v1       # 版本
        metadata:                 # 元数据
          name: mydeploy          # 名称
        spec:                     # 详细定义
          replicas: 3             # 副本数量
          selector:               # 定义标签选择器
            matchLabels:          # 支持 matchExpressions 表达式语法
              app: deploy-httpd   # 通过标签来确定那个 Pod 由它来管理
          template:               # 定义用来创建 Pod 的模板,以下为 Pod 定义
            metadata:
              labels:
                app: deploy-httpd
            spec:
              containers:
              - name: web
                image: myos:httpd
    
    1.2 容器内的高可用搭建(service+deployment)

        service --- pod ---- deployment

        srvice:
        ---
        kind: Service
        apiVersion: v1
        metadata:
          name: mysvc
        spec:
          type: NodePort
          selector:
           app: deploy-httpd  #标签匹配pod
          ports:
          - protocol: TCP
            port: 80
            nodePort: 30080
            targetPort: 80
        
        deployment:
        ---
        apiVersion: apps/v1
        kind: Deployment
        metadata:
          name: mydeploy
        spec:
          replicas: 3
          selector:
            matchLabels:
              app: deploy-httpd  #标签匹配pod
          template:              #pod的模板
            metadata:
              labels:
                app: deploy-httpd #标签匹配pod
            spec:
              containers:
              - image: myos:httpd
                name: web
    
    1.3 集群的扩缩容(scale)
        kubectl scale 资源类型 资源名称 --replicas 副本数量
        kubectl scale deployment mydeploy --replicas 10

    1.4 更新pod的镜像
        #template下添加参数:
        imagePullPolicy: Always(镜像仓库下载) | 本地缓存 | 优先仓库下载

        #更新镜像,滚动更新集群,使用新的镜像替换pod里面指定的镜像
        [root@master ~]# kubectl set image deployment mydeploy web=myos:nginx

        #查看历史版本信息
        kubectl rollout history 资源类型 资源名称
        kubectl rollout history deployment(资源类型) mydeploy(名称)

        #给版本添加注释信息添加注释信息:
        kubectl annotate 资源类型 资源名称 kubernetes.io/change-cause="版本信息"
        kubectl annotate deployments mydeploy kubernetes.io/change-cause="httpd.v1"

        #镜像更新原理:
        重建式更新:创建一个replicaset,然后通过replicaset区重建pod,干掉一个更新一个,不占用系统资源,但更新时间慢
        滚动式更新:通过设置的超量和最少数量,使用replicaset进行pod的删除和更新,占用资源大,速度快.

    1.5 历史版本与回滚
        kubectl rollout undo 资源类型 资源名称 --to-version  版本号
        kubectl rollout undo deployment mydeploy --to-revision 1(版本号)


二.DaenonSet:所创建的pod与node节点绑定,每个node上都会运行一个pod,无法自定义副本数量(例如创建kubeproxy等资源).
    资源清单文件的编写,通过对deployment进行修改(删除副本数量)
    ---
    kind: DaemonSet         # 资源对象类型
    apiVersion: apps/v1
    metadata:
      name: myds            # 控制器名称
    spec:
      selector:
        matchLabels:
          app: ds-httpd     # 修改标签防止冲突
      template:
        metadata:
          labels:
            app: ds-httpd   # 修改标签防止冲突
        spec:
          containers:
          - name: web
            image: myos:httpd
            imagePullPolicy: Always

三.Job/CronJob:单任务控制器,负责执行一次任务,保证任务在一个或多个pod上执行成功
    3.1 Job
        保证pod成功执行:
        ---
        kind: Job
        apiVersion: batch/v1
        metadata:
          name: myjob
        spec:
          template:  # 以下定义 Pod 模板
            metadata: {}
            spec:
              restartPolicy: OnFailure
              containers:
              - name: myjob
                image: myos:8.5
                command: ["/bin/sh"]
                args:
                - -c
                - |
                  sleep 3
                  exit $((RANDOM%2))  0为正常
    
    3.2 CronJob:计划任务控制器(带有计划任务的job),根据计划任务创建job和pod
        ---
        kind: CronJob
        apiVersion: batch/v1
        metadata:
          name: mycj
        spec:
          schedule: "* * * * *"  #时间计划
          jobTemplate:            #定义Job模板
            metadata: {}
            spec:   
              template:           #定义pod模板
                metadata: {}
                spec:
                  restartPolicy: OnFailure
                  containers:
                  - name: myjob
                    image: myos:8.5
                    command: ["/bin/sh"]
                    args:
                    - -c
                    - |
                      sleep 3
                      exit $((RANDOM%2))
                
四.StatefulSet:解决pod的创建顺序,解决pod的访问问题 
    通过Headless存储pod的ip,实现访问指定的pod
    4.1 工作原理:StatefulSet -- pod -- Headless:存储pod的ip(Service) <--client
       4.2 创建Headless,利用service资源清单文件
        ---
        kind: Service
        apiVersion: v1
        metadata:
          name: stssvc          # 服务名称
        spec:
          type: ClusterIP
          clusterIP: None       # 设置 IP 为 None
          selector:
            app: sts-httpd      # 设置 Pod 标签
          ports:
          - protocol: TCP
            port: 80
            targetPort: 80

        利用deployment创建StatefulSet
        ---
        kind: StatefulSet       # 资源对象类型
        apiVersion: apps/v1
        metadata:
          name: mysts           # 控制器名称
        spec:
          serviceName: stssvc   # 新增 headless 服务名称
          replicas: 3
          selector:
            matchLabels:
              app: sts-httpd    # 修改标签防止冲突
          template:
            metadata:
              labels:
                app: sts-httpd  # 修改标签防止冲突
            spec:
              containers:
              - name: web
                image: myos:httpd
        4.3 通过(pod名称.service资源名称)访问指定的容器服务 
         进入某个容器: curl http://mysts-0.stssvc
         通过service资源名称访问,实现负载均衡:curl http://stssvc

五.HPA弹性控制器:监控控制器,实现集群的自动扩缩容

        设置控制器:
        ---
        kind: Deployment
        apiVersion: apps/v1
        metadata:
          name: mydeploy
        spec:
          replicas: 1
          selector:
            matchLabels:
              app: deploy-httpd
          template:
            metadata:
              labels:
                app: deploy-httpd
            spec:
              containers:
              - name: web
                image: myos:httpd
                resources:           # 为该资源设置配额
                  requests:          # HPA 控制器会根据配额使用情况伸缩集群
                    cpu: 300m        # CPU 配额
        ---
        kind: Service   #负载均衡
        apiVersion: v1
        metadata:
          name: websvc
        spec:
          type: ClusterIP
          clusterIP: 10.245.1.80
          selector:
            app: deploy-httpd
          ports:
          - protocol: TCP
            port: 80
            targetPort: 80

        HPA 控制器:
        ---
        kind: HorizontalPodAutoscaler
        apiVersion: autoscaling/v2
        metadata:
          name: myhpa
        spec:
          behavior:                # 窗口稳定期,这个期间的资源变化
            scaleDown:
              stabilizationWindowSeconds: 60
          scaleTargetRef:          # 指定控制器
            kind: Deployment
            apiVersion: apps/v1
            name: mydeploy
          minReplicas: 1           # 副本数量      
          maxReplicas: 3
          metrics:                 # 扩缩容设置     
          - type: Resource
            resource:
              name: cpu
              target:
                type: Utilization
                averageUtilization: 50 #百分比,节点超过设置的cpu资源的百分之50,则扩容节点,平均资源小于值,缩容
    
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

skyQAQLinux

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值