• 【云原生之k8s】K8s 管理工具 kubectl 详解(二)



    K8S模拟项目

    Kubectl是管理k8s集群的命令行工具,通过生成的json格式传递给apiserver进行创建、查看、管理的操作。

    //帮助信息
    [root@localhost bin]# kubectl --help
    kubectl controls the Kubernetes cluster manager. 
    
    Find more information at: https://kubernetes.io/docs/reference/kubectl/overview/
    
    Basic Commands (Beginner):
      create         Create a resource from a file or from stdin.
      expose         使用 replication controller, service, deployment 或者 pod
    并暴露它作为一个 新的 Kubernetes Service
      run            在集群中运行一个指定的镜像
      set            为 objects 设置一个指定的特征
    
    Basic Commands (Intermediate):
      explain        查看资源的文档
      get            显示一个或更多 resources
      edit           在服务器上编辑一个资源
      delete         Delete resources by filenames, stdin, resources and names, or by resources and
    label selector
    
    Deploy Commands:
      rollout        Manage the rollout of a resource
      scale          为 Deployment, ReplicaSet, Replication Controller 或者 Job
    设置一个新的副本数量
      autoscale      自动调整一个 Deployment, ReplicaSet, 或者 ReplicationController
    的副本数量
    
    Cluster Management Commands:
      certificate    修改 certificate 资源.
      cluster-info   显示集群信息
      top            Display Resource (CPU/Memory/Storage) usage.
      cordon         标记 node 为 unschedulable
      uncordon       标记 node 为 schedulable
      drain          Drain node in preparation for maintenance
      taint          更新一个或者多个 node 上的 taints
    
    Troubleshooting and Debugging Commands:
      describe       显示一个指定 resource 或者 group 的 resources 详情
      logs           输出容器在 pod 中的日志
      attach         Attach 到一个运行中的 container
      exec           在一个 container 中执行一个命令
      port-forward   Forward one or more local ports to a pod
      proxy          运行一个 proxy 到 Kubernetes API server
      cp             复制 files 和 directories 到 containers 和从容器中复制 files 和
    directories.
      auth           Inspect authorization
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    1、项目的生命周期

    创建–>发布–>更新–>回滚–>删除

    2、创建kubectl run命令

    • 1.创建并运行一个或多个容器镜像
    • 2.创建一个deployment或job来管理容器
    • 3.kubectl run --help查看使用帮助

    启动nginx实例,暴露容器端口80,设置副本数3

    kubectl run nginx-deployment --image=nginx:1.14 --port=80 --replicas=3
    
    
    • 1
    • 2

    在这里插入图片描述
    使用run报错

    k8sv1.18.0以后的版本, --replicas以后弃用该命令,推荐使用deployment创建pods
    我这里用的是1.21.3版本

    • 1.想创建多个实例时可以使用:kubectl create deployment pg102 --image=pg:12 –port=5432 --replicas=3 来进行创建;
    • 2.查看pod: kubectl get pod,用来查看使用命令创建的所有实例
    • 3.查看deploy:kubectl get deploy,用来查看实例所创建的数量;
    • 4.高于1.17版本的建议以后直接使用create deployment创建pod管理器方式创建pod;
    kubectl create deployment nginx --image=nginx:1.14 --port=80 --replicas=3
    
    
    • 1
    • 2

    在这里插入图片描述
    在这里插入图片描述

    3、发布kubectl expose命令

    将资源暴露为新的Service

    为Deployment的nginx创建Service,并通过Service的80端口转发至容器的80端口上,Service的名称为nginx-service,类型为NodePort

    kubectl expose deployment nginx2 --port=80 --target-port=80 --name=nginx-service --type=NodePort
    
    • 1

    3、发布kubectl expose命令

    将资源暴露为新的Service

    为Deployment的nginx创建Service,并通过Service的80端口转发至容器的80端口上,Service的名称为nginx-service,类型为NodePort

    kubectl expose deployment nginx2 --port=80 --target-port=80 --name=nginx-service --type=NodePort
    
    • 1

    在这里插入图片描述

    3.1 Service的作用

    • 1.Kubernetes之所以需要Service,一方面是因为Pod的IP不是固定的(Pod可能会重建),另一方面是因为一组Pod实例之间总会有负载均衡的需求。
    • 2.Service通过Label Selector实现的对一组的Pod的访问。
    • 3.对于容器应用而言,Kubernetes提供了基于VIP(虚拟IP)的网桥的方式访问Service,再由Service重定向到相应的Pod。

    3.2 Service的类型

    • 1.ClusterIP:提供一个集群内部的虚拟IP以供Pod访问(Service默认类型)
    • 2.NodePort:在每个Node上打开一个端口以供外部访问,Kubernetes将会在每个Node上打开一个端口并且每个Node的端口都是一样的,通过NodeIP:NodePort的方式
    • 3.LoadBalancer:通过外部的负载均衡器来访问,通常在云平台部署LoadBalancer还需要额外的费用。

    3.3 查看Pod网络状态详细信息和Service暴露端口

    kubectl get pods,svc -o wide
    
    • 1

    在这里插入图片描述

    3.4 查看关联后端的节点

    kubectl get endpoints
    
    • 1

    在这里插入图片描述

    3.5 查看service的描述信息

    kubectl describe svc nginx
    
    • 1

    在这里插入图片描述

    3.6 访问查看

    curl 10.100.145.244
    
    • 1

    在这里插入图片描述

    kubectl describe svc nginx | grep NodePort
    curl 192.168.28.5:32460
    
    • 1
    • 2

    在这里插入图片描述

    3.7 查看访问日志

    kubectl logs [pod name]
    
    • 1

    在这里插入图片描述

    4、更新kubectl set

    更改现有应用资源一些信息。

    kubectl set --help查看使用帮助
    
    • 1
    [root@master ~]# kubectl set --help
    Configure application resources
    
     These commands help you make changes to existing application resources.
    
    Available Commands:
      env            Update environment variables on a pod template
      image          更新一个 pod template 的镜像
      resources      在对象的 pod templates 上更新资源的 requests/limits
      selector       设置 resource 的 selector
      serviceaccount Update ServiceAccount of a resource
      subject        Update User, Group or ServiceAccount in a RoleBinding/ClusterRoleBinding
    
    Usage:
      kubectl set SUBCOMMAND [options]
    
    Use "kubectl  --help" for more information about a given command.
    Use "kubectl options" for a list of global command-line options (applies to all commands).
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    4.1 获取修改模板

    kubectl set image --help获取
    
    • 1

    在这里插入图片描述

    4.2 查看当前nginx的版本号

    curl 192.168.28.5:32460
    
    • 1

    在这里插入图片描述

    4.3 将nginx版本更新为1.15

    kubectl set image deployment/nginx nginx=nginx:1.2
    
    • 1

    89d21ebdc6c4f.png)

    4.4 监听pod状态

    处于动态监听pod状态,由于使用的是滚动更新方式,所以会先生成一个新的pod,然后删除一个旧的pod,往后以此类推

    kubectl get pods -w
    
    • 1

    在这里插入图片描述
    注:更新规则可通过“kubetl describe deployment nginx”的“RollingUpdateStrategy”查看,默认配置为“25% max unavailable, 25% max surge”,即按照25%的比例进行滚动更新。
    在这里插入图片描述

    4.5 查看pod的ip变化

    kubectl get pod -o wide
    
    • 1

    在这里插入图片描述

    5、回滚kubectl rollout

    对资源进行回滚管理

    kubectl rollout --help查看使用帮助
    
    • 1
    [root@master ~]# kubectl rollout --help
    Manage the rollout of a resource.
      
     Valid resource types include:
    
      *  deployments
      *  daemonsets
      *  statefulsets
    
    Examples:
      # Rollback to the previous deployment
      kubectl rollout undo deployment/abc
      
      # Check the rollout status of a daemonset
      kubectl rollout status daemonset/foo
    
    Available Commands:
      history     显示 rollout 历史
      pause       标记提供的 resource 为中止状态
      restart     Restart a resource
      resume      继续一个停止的 resource
      status      显示 rollout 的状态
      undo        撤销上一次的 rollout
    
    Usage:
      kubectl rollout SUBCOMMAND [options]
    
    Use "kubectl  --help" for more information about a given command.
    Use "kubectl options" for a list of global command-line options (applies to all commands).
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    5.1 查看历史版本

    kubectl rollout history deployment/nginx
    
    • 1

    在这里插入图片描述

    5.2 执行回滚到上一个版本

    kubectl rollout undo deployment/nginx
    kubectl get pods -o wide
    
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    查看nginx当前版本
    在这里插入图片描述

    5.3 执行回滚到指定版本

    查看历史版本
    在这里插入图片描述
    回到revison4,即1.15版本

    kubectl rollout undo deployment/nginx --to-revision=4
    
    • 1

    在这里插入图片描述
    查看pod的ip变化
    在这里插入图片描述
    查看当前nginx版本
    在这里插入图片描述

    5.4 检查回滚状态

    kubectl rollout status deployment/nginx
    
    
    • 1
    • 2

    在这里插入图片描述

    6、删除kubectl delete

    6.1 删除副本控制器

    kubectl delete deployment/nginx
    
    • 1

    在这里插入图片描述

    6.2 删除service

    kubectl delete svc/nginx-service
    
    • 1

    在这里插入图片描述

  • 相关阅读:
    git基础命令(二)
    卷积神经网络——vgg16网络及其python实现
    mock(抓包)-测试平台开发-1.平台介绍
    IDEA自定义Maven仓库
    three.js简单3D图形的使用
    安卓 Android 终端接入阿里云 IoT 物联网平台
    操作系统之——调度算法
    c++实现观察者模式
    视频集中存储/云存储平台EasyCVR级联下级平台的详细步骤
    封阳台怎么避坑
  • 原文地址:https://blog.csdn.net/weixin_71429790/article/details/127750125