• k8s核心概念Controller 基本操作和命令



    controller主要用于控制pod

    分类

    • Deployments 部署无状态应用,控制pod升级,回退
    • ReplicaSet 副本集,控制pod扩容,裁减
    • ReplicationController(相当于ReplicaSet的老版本,现在建议使用Deployments加ReplicaSet替代RC)
    • StatefulSets 部署有状态应用,结合Service、存储等实现对有状态应用部署
    • DaemonSet 守护进程集,运行在所有集群节点(包括master), 比如使用filebeat,node_exporter
    • Jobs 一次性
    • Cronjob 周期性

    Deployment控制器

    Replicaset控制器的功能

    • 支持新的基于集合的selector(以前的rc里没有这种功能)
    • 通过改变Pod副本数量实现Pod的扩容和缩容

    Deployment控制器的功能

    • Deployment集成了上线部署、滚动升级、创建副本、回滚等功能
    • Deployment里包含并使用了ReplicaSet

    Deployment用于部署无状态应用及无状态服务特点

    • 所有pod无差别
    • 所有pod中容器运行同一个image
    • 所有pod可以运行在集群中任意node上
    • 所有pod无启动顺序先后之分
    • 随意pod数量扩容或缩容
    • 例如简单运行一个静态web程序

    创建Deployment类型应用

    准备yaml文件

    • 可以先使用kubectl explain deployment查看相关的帮助
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: deployment-test
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 80
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    应用YAML文件创建deployment

    kubectl apply -f deployment_pod.yaml 
    deployment.apps/deployment-test created
    
    • 1
    • 2

    验证

    • 查看pod
    kubectl get pod -o wide
    NAME                               READY   STATUS    RESTARTS   AGE   IP           NODE             NOMINATED NODE   READINESS GATES
    deployment-test-845d4d9dff-4kvmv   1/1     Running   0          85s   10.1.0.135   docker-desktop   <none>           <none>
    
    • 1
    • 2
    • 3

    查看deployment

    kubectl get deployment              
    NAME              READY   UP-TO-DATE   AVAILABLE   AGE
    deployment-test   1/1     1            1           29s
    
    • 1
    • 2
    • 3

    删除deployment中的pod

    直接删除pod

    • 直接使用删除pod命令删除pod
    kubectl delete pod deployment-test-845d4d9dff-4kvmv
    pod "deployment-test-845d4d9dff-4kvmv" deleted
    
    • 1
    • 2
    • 查看pod
    kubectl get pod -o wide                            
    NAME                               READY   STATUS    RESTARTS   AGE   IP           NODE             NOMINATED NODE   READINESS GATES
    deployment-test-845d4d9dff-xvvrq   1/1     Running   0          11s   10.1.0.136   docker-desktop   <none>           <none>
    
    • 1
    • 2
    • 3
    • 发现直接删除pod,后台又重新调度起了一个pod,同时新起的IP也和老的不同

    直接删除deployment

    • 查看删除deployment
    kubectl get deployment 
    NAME              READY   UP-TO-DATE   AVAILABLE   AGE
    deployment-test   1/1     1            1           5m39s
    
    kubectl delete deployment deployment-test
    deployment.apps "deployment-test" deleted
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 查看deployment和pod
    kubectl get deployment                   
    No resources found in default namespace.
    
    kubectl get pod                          
    NAME                               READY   STATUS        RESTARTS   AGE
    deployment-test-845d4d9dff-xvvrq   0/1     Terminating   0          3m18s
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    pod版本改动

    pod版本升级

    • 查看pod当前版本:kubectl describe pod deployment-test-845d4d9dff-4cjd7
      在这里插入图片描述
    • 升级为1.16版本
    kubectl set image deployment deployment-test nginx=nginx:1.16-alpine --record
    deployment.apps/deployment-test image updated
    
    • 1
    • 2

    在这里插入图片描述

    • 验证
      在这里插入图片描述

    pod版本回退

    • 验证之前先讲pod的版本升级到nginx1.17
    kubectl set image deployment deployment-test nginx=nginx:1.17-alpine --record
    deployment.apps/deployment-test image updated
    
    • 1
    • 2
    • 查看版本历史信息
    kubectl rollout history deployment deployment-test
    deployment.apps/deployment-test
    REVISION  CHANGE-CAUSE
    1         <none>
    2         kubectl set image deployment deployment-test nginx=nginx:1.16-alpine --record=true
    3         kubectl set image deployment deployment-test nginx=nginx:1.17-alpine --record=true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 定义要回退的版本
    zsx:~ zsx$ kubectl rollout undo deployment deployment-test --to-revision=1
    deployment.apps/deployment-test rolled back
    zsx:~ zsx$ kubectl rollout history deployment deployment-test
    deployment.apps/deployment-test
    REVISION  CHANGE-CAUSE
    2         kubectl set image deployment deployment-test nginx=nginx:1.16-alpine --record=true
    3         kubectl set image deployment deployment-test nginx=nginx:1.17-alpine --record=true
    4         <none>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    副本数改动

    • 因为nginx需要使用同一个端口,在此重新再给一个例子
    • 编写yaml标签文件,在此已经准本好了相应的配置文件
    apiVersion: apps/v1 
    kind: Deployment  
    metadata:   
      name: my-go-app1 
    spec:     
      replicas: 1
      selector:
        matchLabels:
          app: go-app
      template: 
        metadata:
          labels:
            app: go-app
        spec: 
          containers:
            - name: go-app-container
              image: zsx123456/go-app-img
              ports:
                - containerPort: 3000
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 查看启动pod
    kubectl get pod
    NAME                          READY   STATUS    RESTARTS   AGE
    my-go-app1-7b77966865-fzxvn   1/1     Running   0          30s
    
    • 1
    • 2
    • 3
    • 将副本扩展成2个
    kubectl scale --replicas=2 -f deployment.yaml
    deployment.apps/my-go-app1 scaled
    
    • 1
    • 2
    • 验证
    kubectl get pod
    NAME                          READY   STATUS    RESTARTS   AGE
    my-go-app1-7b77966865-fzxvn   1/1     Running   0          2m25s
    my-go-app1-7b77966865-nrjmd   1/1     Running   0          38s
    
    • 1
    • 2
    • 3
    • 4

    ReplicaSet

    1, 编写YAML文件

    [root@master ~]# vim rs-nginx.yml
    apiVersion: apps/v1
    kind: ReplicaSet
    metadata:
      name: rs-nginx
      namespace: default
    spec:                    # replicaset的spec
      replicas: 2            # 副本数
      selector:              # 标签选择器,对应pod的标签
        matchLabels:
          app: nginx         # 匹配的label
      template:
        metadata:
          name: nginx        # pod名
          labels:           # 对应上面定义的标签选择器selector里面的内容
            app: nginx
        spec:               # pod的spec
          containers:
          - name: nginx
            image: nginx:1.15-alpine
            ports:
            - name: http
              containerPort: 80
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    2, 应用YAML文件

    kubectl apply -f rs-nginx.yml
    replicaset.apps/rs-nginx created
    
    • 1
    • 2

    3, 验证

    kubectl get rs
    NAME       DESIRED   CURRENT   READY   AGE
    rs-nginx   2         2         2       26s
    
    • 1
    • 2
    • 3
    kubectl get pods
    NAME             READY   STATUS    RESTARTS   AGE
    rs-nginx-7j9hz   1/1     Running   0          44s
    rs-nginx-pncsk   1/1     Running   0          43s
    
    • 1
    • 2
    • 3
    • 4
    kubectl get deployment
    No resources found.
    
    找不到deployment,说明创建rs并没有创建deployment
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    好的详细设计文档是可以降本增效的
    正则表达式大全,30个正则表达式详细案例
    C/C++语言标准
    SpringBoot+Vue实现简单的文件上传(txt篇)
    2022年最新四川水利水电施工安全员模拟试题题库及答案
    能学习139条红外码的红外空调控制器长什么样子?
    ubuntu 22.04 安装python-pcl
    Yakit工具篇:爆破与未授权检测的使用
    C语言指针进阶
    m无线通信信道matlab仿真,包括自由空间损耗模型,Okumura-Hata模型,COST231 Hata模型,SUI信道模型
  • 原文地址:https://blog.csdn.net/double_happiness/article/details/126467178