• 【k8s】kubectl命令详解


    命令行工具 kubectl

    官方文档:https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands

    在slave下配置kubectl

    # 1. 将 master 节点中 /etc/kubernetes/admin.conf 拷贝到需要运行的服务器的 /etc/kubernetes 目录中
    scp /etc/kubernetes/admin.conf root@slave:/etc/kubernetes
    
    # 2. 在对应的服务器上配置环境变量
    echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
    source ~/.bash_profile
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    资源操作

    创建对象
    $ kubectl create -f ./my-manifest.yaml           # 创建资源
    $ kubectl create -f ./my1.yaml -f ./my2.yaml     # 使用多个文件创建资源
    $ kubectl create -f ./dir                        # 使用目录下的所有清单文件来创建资源
    $ kubectl create -f https://git.io/vPieo         # 使用 url 来创建资源
    $ kubectl run nginx --image=nginx                # 启动一个 nginx 实例
    $ kubectl explain pods,svc                       # 获取 pod 和 svc 的文档
    
    # 从 stdin 输入中创建多个 YAML 对象
    $ cat <
    • 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

    API概述

    类型

    • Alpha(最新的)

      • 包含 alpha 名称的版本(例如v1alpha1)。

      • 该软件可能包含错误。启用一个功能可能会导致 bug。默认情况下,功能可能会被禁用。

      • 随时可能会丢弃对该功能的支持,恕不另行通知。

      • API 可能在以后的软件版本中以不兼容的方式更改,恕不另行通知。

      • 该软件建议仅在短期测试集群中使用,因为错误的风险增加和缺乏长期支持

    • Beta

      • 包含 beta 名称的版本(例如 v2beta3)。
      • 该软件经过很好的测试。启用功能被认为是安全的。默认情况下功能是开启的。
      • 细节可能会改变,但功能在后续版本不会被删除
      • 对象的模式或语义在随后的 beta 版本或 Stable 版本中可能以不兼容的方式发生变化。如果这种情况发生时,官方会提供迁移操作指南。这可能需要删除、编辑和重新创建API对象。
      • 该版本在后续可能会更改一些不兼容地方,所以建议用于非关键业务,如果你有多个可以独立升级的集群,你也可以放宽此限制。
      • 大家使用过的 Beta 版本后,可以多给社区反馈,如果此版本在后续更新后将不会有太大变化。
    • Stable(稳定版 -> 用这个)

      • 该版本名称命名方式:vX 这里 X 是一个整数。
      • Stable 版本的功能特性,将出现在后续发布的软件版本中。

    访问控制

    认证
    授权

    废弃API说明

    https://kubernetes.io/zh-cn/docs/reference/using-api/deprecation-guide/

    资源管理

    学习kubernetes的核心,就是学习如何对集群上的Pod、Pod控制器、Service、存储等各种资源进行操作

    资源管理介绍

    1. k8s本质就是一个集群系统,用户在集群中部署各种服务

      部署服务就是在k8s集群中,运行一个个的容器,并将制定的程序跑在容器内部

    2. k8s的最小管理单元是pod而不是容器,所以只能将容器放在pod中

      而k8s通常不会直接去管理pod,而是通过pod管理器来管理pod的

    3. 如何访问pod的服务呢?k8s提供了service资源实现这个功能

    4. 当然了,为了确保pod中程序数据的持久化,k8s还提供了各种存储系统

    资源管理方式

    类型操作对象适用环境优点缺点
    命令式对象管理对象测试简单只能操作活动对象,无法审计、跟踪
    命令式对象配置文件开发可以审计、跟踪项目大时,配置文件多,操作麻烦
    声明式对象配置目录开发支持目录操作意外情况下难以调试
    • 命令式对象管理:直接使用命令去操作k8s资源

      kubectl run nginx-pod --image=nginx:1.17.1 --port=80

    • 命令式对象配置:通过命令配置和配置文件去操作k8s资源

      kubectl create/patch -f nginx-pod.yaml

    • 声明式对象配置:通过apply命令和配置文件去操作k8s资源

      kubectl apply -f nginx-pod.yaml

    命令式对象管理

    kubectl是kubernetes集群的命令行工具,通过它能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署。

    • 命令语法格式

      kubectl [command] [type] [name] [flags]

      • comand:指定要对资源执行的操作,例如create、get、delete
      • type:指定资源类型,比如deployment、pod、service
      • name:指定资源的名称,名称大小写敏感
      • flags:指定额外的可选参数

      eg

      # 查看所有pod
      kubectl get pod 
      
      # 查看某个pod
      kubectl get pod pod_name
      
      # 查看某个pod,以yaml格式展示结果
      kubectl get pod pod_name -o yaml
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    • 资源name

      k8s中所有的内容都抽象为资源,可以通过kubectl api-resources命令查看

      常用资源如下:

      集群级别资源nodesno集群组成部分
      namespacesns隔离Pod
      pod资源podspo装载容器
      pod资源控制器replicationcontrollersrc控制pod资源
      replicasetsrs控制pod资源
      deploymentsdeploy控制pod资源
      daemonsetsds控制pod资源
      jobs控制pod资源
      cronjobscj控制pod资源
      horizontalpodautoscalershpa控制pod资源
      statefulsetssts控制pod资源
      服务发现资源servicessvc统一pod对外接口
      ingressing统一pod对外接口
      存储资源volumeattachments存储
      persistentvolumespv存储
      persistentvolumeclaimspvc存储
      配置资源configmapscm配置
      secrets配置
    • 操作指令command

      k8s允许对资源进行多种操作,可以通过–help查看

      常用操作如下:

      基本命令create创建创建一个资源
      edit编辑编辑一个资源
      get获取获取一个资源
      patch更新更新一个资源
      delete删除删除一个资源
      explain解释展示资源文档
      运行和调试run运行在集群中运行一个指定的镜像
      expose暴露暴露资源为Service
      describe描述显示资源内部信息
      logs日志输出容器在 pod 中的日志输出容器在 pod 中的日志
      attach缠绕进入运行中的容器进入运行中的容器
      exec执行容器中的一个命令执行容器中的一个命令
      cp复制在Pod内外复制文件
      rollout首次展示管理资源的发布
      scale规模扩(缩)容Pod的数量
      autoscale自动调整自动调整Pod的数量
      高级命令applyrc通过文件对资源进行配置
      label标签更新资源上的标签
      其他命令cluster-info集群信息显示集群信息
      version版本显示当前Server和Client的版本

      下面以一个namespace/pod的创建和删除来简单演示下

      # 创建一个namespace
      [root@master ~]# kubectl create namespace dev
      namespace/dev created
      
      # 获取namespace
      [root@master ~]# kubectl get ns
      NAME              STATUS   AGE
      default           Active   21h
      dev               Active   21s
      kube-node-lease   Active   21h
      kube-public       Active   21h
      kube-system       Active   21h
      
      # 在此namespace下创建并运行一个nginx的Pod
      [root@master ~]# kubectl run pod --image=nginx:latest -n dev
      kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
      deployment.apps/pod created
      
      # 查看新创建的pod
      [root@master ~]# kubectl get pod -n dev
      NAME  READY   STATUS    RESTARTS   AGE
      pod   1/1     Running   0          21s
      
      # 删除指定的pod
      [root@master ~]# kubectl delete pod pod-864f9875b9-pcw7x
      pod "pod" deleted
      
      # 删除指定的namespace
      [root@master ~]# kubectl delete ns dev
      namespace "dev" deleted
      
      • 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
    命令式对象配置

    使用命令配合配置文件一起去操作k8s资源

    创建yaml文件
    apiVersion: v1
    kind: Namespace
    metadata:
      name: dev
    
    ---
    
    apiVersion: v1
    kind: Pod
    metadata:
      name: nginxpod
      namespace: dev
    spec:
      containers:
      - name: nginx-containers
        image: nginx:latest
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    创建资源
    [root@master ~]# kubectl create -f nginxpod.yaml
    namespace/dev created
    pod/nginxpod created
    
    • 1
    • 2
    • 3
    查看资源
    [root@master ~]#  kubectl get -f nginxpod.yaml
    NAME            STATUS   AGE
    namespace/dev   Active   18s
    
    NAME            READY   STATUS    RESTARTS   AGE
    pod/nginxpod    1/1     Running   0          17s
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    删除资源
    [root@master ~]# kubectl delete -f nginxpod.yaml
    namespace "dev" deleted
    pod "nginxpod" deleted
    
    • 1
    • 2
    • 3
    声明式对象配置

    kubectl apply -f nginx-pod.yaml

    总结:
        其实声明式对象配置就是使用apply描述一个资源最终的状态(在yaml中定义状态)
        使用apply操作资源:
            如果资源不存在,就创建,相当于 kubectl create
            如果资源已存在,就更新,相当于 kubectl patch
    
    • 1
    • 2
    • 3
    • 4
    • 5

    kebectl在node节点上运行

    只需要将master上的.kube文件复制到node节点上,即在master节点上执行下面操作:

    scp -r HOME/.kube node1: HOME/

    查看每种资源的可配置项

    #小提示:
    #   在这里,可通过一个命令来查看每种资源的可配置项
    #   kubectl explain 资源类型         查看某种资源可以配置的一级属性
    #   kubectl explain 资源类型.属性     查看属性的子属性
    [root@k8s-master01 ~]# kubectl explain pod
    KIND:     Pod
    VERSION:  v1
    FIELDS:
       apiVersion   
       kind 
       metadata     
       spec 
       status       
    
    [root@k8s-master01 ~]# kubectl explain pod.metadata
    KIND:     Pod
    VERSION:  v1
    RESOURCE: metadata 
    FIELDS:
       annotations  
       clusterName  
       creationTimestamp    
       deletionGracePeriodSeconds   
       deletionTimestamp    
       finalizers   <[]string>
       generateName 
       generation   
       labels       
       managedFields        <[]Object>
       name 
       namespace    
       ownerReferences      <[]Object>
       resourceVersion      
       selfLink     
       uid  
    
    • 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

    推荐增删改查操作

    • 创建/更新资源 使用声明式对象配置 kubectl apply -f XXX.yaml
    • 删除资源 使用命令式对象配置 kubectl delete -f XXX.yaml
    • 查询资源 使用命令式对象管理 kubectl get(describe) 资源名称
  • 相关阅读:
    CSS选择符和可继承属性
    关于蓝牙人员定位的几个重要问题
    超宽带UWB实时精准定位,短距离无缝交互应用,物联网厘米级精度方案
    自学WEB后端01-安装Express+Node.js框架完成Hello World!
    神奇的 perfma:一站式解决所有 JVM 疑难杂症!
    Spring原理-IOC和AOP
    单视觉L2市场「鲶鱼」来了,掀起数据反哺高阶新打法
    FANUC机器人_KAREL编程入门学习(1)
    智慧电力运维系统助力实现配电室无人值守
    metaRTC新增SRS的WebRTC over TCP和turn的TCP支持
  • 原文地址:https://blog.csdn.net/al6nlee/article/details/133386986