ThankNeko's Blog ThankNeko's Blog
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)

Hoshinozora

尽人事,听天命。
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)
  • 操作系统

  • 虚拟化服务

    • Docker笔记

    • Kubernetes笔记

      • Kubernetes介绍
      • Kubernetes部署
      • K8S资源与标签
      • Pod资源详解
      • Kubectl命令
        • kubectl介绍
        • kubectl创建资源
          • kubectl create
          • kubectl run
          • kubectl expose
        • kubectl删除资源
          • kubectl delete
        • kubectl修改资源
          • kubectl edit
          • kubectl apply
          • kubectl exec
          • kubeclt label
          • kubectl scale
          • kubectl set image
          • kubectl rollout
          • kubectl patch
        • kubectl查询资源
          • kubectl get
          • kubectl describe
          • kubectl rollout
          • kubectl api-versions
          • kubectl explain
          • kubectl logs
      • 控制器资源配置
      • Service资源配置
      • Ingress资源配置
      • configMap资源配置
      • Volume资源配置
      • Volume资源配置
    • Jenkins笔记

    • K3S笔记

  • 数据库服务

  • 监控服务

  • Web服务

  • 数据处理

  • Ops
  • 虚拟化服务
  • Kubernetes笔记
Hoshinozora
2023-02-26
目录

Kubectl命令

# kubectl介绍

kubectl是master节点上的apiserver的客户端程序,也是我们整个K8S集群的管理入口。通过kubectl我们可以实现对k8s集群中各种资源对象进行管理,资源的增删改查等。

# kubectl创建资源

# kubectl create

用于创建指定资源,该命令可以通过两种方式创建资源。

# 1. 通过命令行创建资源

  • kubectl create [资源类别] [资源名称] <args>

  • # 命令行创建一个deployment控制器
    • kubectl create deployment [控制器名] <args>
    • 参数:
      • --image= - 指定使用的docker镜像与版本
      • --port= - 声明暴露的容器端口
      • --replicas= - 指定创建的pod副本数量 (默认1)
      • --dry-run=[true/false] - 是否开启干跑模式 (试运行),并不是真正执行
        • 用来测试命令是否正确,即并不会真的创建出资源实例,去掉该参数后即可真正执行命令。
    • 例如:
      • kubectl create deployment nginx-deploy --image=nginx:latest --port=80 --replicas=1
  • # 命令行创建一个namespace名称空间
    • kubectl create namespace [名称空间名称]
  • # 命令行创建一个configMap配置资源
    • kubectl create configmap [配置名] <args>
    • 参数:
      • --from-literal=[键名]=[值] - 指定键值对创建
      • --from-file=[键名]=[文件路径] - 指定文件内容作为值创建
      • --from-file=[文件路径] - 不指定键名会将文件名当键名,文件内容当值
  • # 命令行创建一个secret资源
    • kubectl create secret [secret类型] [secret名] <args>
    • 参数和configMap一样。

# 2. 通过配置清单文件创建资源

  • kubectl create -f [资源配置清单文件路径]

  • 例如:kubectl create -f ./pod-demo.yml

# kubectl run

用于运行特定镜像到Pod中,run方式创建的pod不经pod管理器管理,所以没有自愈等功能。

  • # kubectl run [Pod名] <args>
  • 参数:

    • --image= - 指定使用的docker镜像与版本
    • --port= - 声明暴露的容器端口
    • --env="变量名1=值1" - 指定环境变量 (可指定多个环境变量参数)
    • --labels="标签名1=值1,标签名2=值2" - 指定Pod的标签集
    • --dry-run=[true/false] - 是否开启干跑模式 (试运行),并不是真正执行
    • -it - 同等于docker中的-it可进入pod
    • -- [启动命令] - 指定Pod中容器启动后执行的命令 (需要放在命令行最后)

# kubectl expose

用于创建一个Service规则,并暴露指定资源,将service_ip:port映射到指定的source_ip:port。

Service实际就是通过iptables进行NAT转发,通过 iptables -vnL -t nat 命令可查看规则。

  • # kubectl expose [资源类别] [资源名称] <args>
  • 参数:

    • --name= - 指定service的名称,创建后可通过 Service名称:端口 来访问目标资源。

      • 例如:nginx-svc
    • --port= - 指定Service暴露的端口

    • --target-port= - 指定映射的目标资源的端口

      • 如果Service端口和目标资源端口一致,则可以只指定其中一个参数,所达到的效果一样。
      • 例如:--port=80 同等于 --port=80 --target-port=80
    • --protocol= - 指定端口的协议 (默认TCP),UDP、TCP、SCTP

    • --external-ip= - 额外添加的指定外部IP,可绑定外网网卡IP

    • --type= - 指定service类型 (默认ClusterIP)

      • ClusterIP:只能被集群内部的各Pod客户端访问,只服务于集群内部,不能被外部访问
      • NodePort:会在节点网络上动态生成一个节点端口,用来映射指定暴露的Service端口
        • 使我们可以从集群外部,通过 节点IP:动态端口 来访问该Service
  • 例如:

    • kubectl expose deployment nginx-deploy --name=nginx-svc --port=80 --target-port=80 --protocol=TCP

# kubectl删除资源

# kubectl delete

用于删除指定资源对象,该命令可以通过两种方式删除资源。

# 1. 通过命令行删除资源

  • kubectl delete [资源类别] <args>
  • 参数:
    • <资源名称> - 仅删除指定资源名称的资源
    • -l [标签名]=[值] - 删除含指定标签的资源
    • -n [名称空间] - 指定名称空间

# 2. 通过配置清单文件删除资源

  • kubectl delete -f [资源配置清单文件路径]

    • 删除使用指定配置清单文件定义的资源对象。
  • 例如:kubectl delete -f ./pod-demo.yml

# kubectl修改资源

# kubectl edit

修改指定资源配置。

  • kubectl edit [资源类别] <args>
  • 参数:
    • <资源名称> - 仅编辑指定资源名称的资源配置,不指定则编辑界面会展示全部匹配的类别资源。
    • -l [标签名]=[值] - 匹配含指定标签的资源
    • -n [名称空间] - 指定名称空间

# kubectl apply

通过文件创建或修改指定资源,对于没有的资源会创建,而对于已有的资源,会读取配置对资源进行配置更新。

  • kubectl apply -f [yaml资源配置清单文件路径]

# kubectl exec

使指定Pod的容器运行指定命令,类似于Docker的exec命令。

  • kubectl exec [POD名称] <args> -- [指定命令]
  • 参数:
    • -it - 以交互模式执行命令,并且为容器重新分配一个伪输入终端 (和Docker一样)

# kubeclt label

添加/修改指定资源的标签,对于不存在的标签会进行添加。

  • kubectl label [资源类别] [资源名称] [标签名]=[标签值] <args>

  • 参数:

    • <资源名称> - 也可以不指定资源名称,而是使用标签选择器匹配资源进行修改或创建的标签
    • --overwrite - 修改原有标签
      • 对于已有标签,需要使用--overwrite参数,才能对其进行修改
  • 例子:

    • 资源添加标签:kubectl label pod test name=test
    • 资源修改标签:kubectl label pod test name=io --overwrite
    • 使用标签选择器来修改标签:kubectl label pod -l hello=world hello=on --overwrite

# kubectl scale

修改控制器的副本集规模,修改指定管理器资源的副本集规模,可以扩容、也可以缩容,但通过edit也可以修改。

  • kubectl scale --replicas=副本数 [资源类别] [资源名称]

# kubectl set image

根据滚动更新策略,滚动更新控制器Pod副本的镜像。

  • kubectl set image [资源类别] [资源名称] [容器名]=[目标镜像]
  • 可使用的资源对象:
    • pod (po)
    • replicationcontroller (rc)
    • deployment (deploy)
    • daemonset (ds)
    • job
    • replicaset (rs)

# kubectl rollout

管理滚动更新。

  • 暂停滚动更新

    • kubectl rollout pause [资源类别] [资源名称] <args>
  • 恢复暂停的滚动更新

    • ``kubectl rollout resume [资源类别] [资源名称] `
  • 滚动回滚副本的镜像

    • kubectl rollout undo [资源类别] [资源名称] <args>
    • 参数:
      • --to-revision= - 指定回滚的版本,不指定默认是回滚到上一个版本

# kubectl patch

给指定资源打补丁,通过命令行加json串对指定资源进行配置修改,在做定时扩缩容时可以通过该命令行方式修改副本数。

  • kubectl patch [资源类别] [资源名称] -p '{JSON}'
  • 例如:
    • kubectl patch pod nginx -p '{"metadata": {"labels": {"app":"nginx"}}}'

# kubectl查询资源

# kubectl get

获取集群资源的总体信息。

  • kubectl get [资源类别] <args>

  • 资源类别:

    • kubectl get pod - 获取名称空间中的pods
    • kubectl get svc - 获得名称空间中的service
    • kubectl get cs - 获得集群组件状态
    • kubectl get node - 获得节点状态
    • kubectl get ns - 获取所有名称空间
      • defaults - 集群资源默认的名称空间
      • kube-system - 系统级的pods所在的名称空间
    • 剩下的资源类别以此类推即可,例如ingress、secret等
  • 参数:

    • <资源名称> - 仅获取指定名称的资源信息

    • --show-labels - 额外打印标签信息

    • -n [名称空间] - 获取指定名称空间的资源信息,不指定则默认是default名称空间

    • -L [标签名] - 额外输出指定"标签名"的值信息

    • -o [指定输出方式]

      • wide - 额外打印更多信息
      • yaml - 输出yaml格式配置
    • -l [标签名]<=[值]> - 筛选出含指定"标签名"或"标签名=值"的资源,多个标签条件可用","隔开

      • 例如:

        # 筛选出含app标签的资源
        -l app
        # 筛选出含app、version标签的资源
        -l app, version
        # 筛选出含app标签且该标签值为myapp的资源
        -l app=myapp
        # 筛选出有app标签值,且其值属于该集合的资源
        -l "app in (nginx,redis)"
        
        1
        2
        3
        4
        5
        6
        7
        8

# kubectl describe

获取集群资源的详细信息。

  • kubectl describe [资源类别] <args>
  • 参数:
    • <资源名称> - 指定名称的资源详细信息
    • -n [名称空间] - 获取指定名称空间的资源信息
    • -l [标签名]<=[值]> - 筛选出含指定"标签名"或"标签名=值"的资源

# kubectl rollout

查看资源滚动更新的信息。

  • 查看滚动更新状态
    • kubectl rollout status [资源类别] [资源名称]
  • 查看滚动更新历史
    • kubectl rollout history [资源类别] [资源名称]

# kubectl api-versions

查看所有资源类别的版本。

  • kubectl api-versions

# kubectl explain

查看资源清单定义方式。

  • kubectl explain [资源类别]
    • 查看指定资源类别如何定义,字段所需的值需要是object类型时,则表示是嵌套字段。
    • 二级以上的字段名如果是复数s,除了时间之类的字段外,一般都是object类型。
  • kubectl explain [资源类别].<字段>.<字段>...
    • 查看多级字段的详细信息。

# kubectl logs

查看Pod中容器的日志信息。

  • kubectl logs [资源类别] [资源名称] <args>
  • 参数:
    • --tail= - 只展示日志最后N行,如果不指定则默认打印全部
    • -f - 追踪打印日志
    • -l [标签名]=[值] - 匹配含指定标签的资源
    • -n [名称空间] - 指定名称空间
#Linux#DevOps#Kubernetes#容器编排#kubectl#集群管理
Pod资源详解
控制器资源配置

← Pod资源详解 控制器资源配置→

最近更新
01
二〇二五年四月十七日随笔
04-17
02
二〇二五年四月十六日随笔
04-16
03
二〇二五年四月九日随笔
04-09
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Hoshinozora | MIT License
湘ICP备2022022820号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式