Kubernetes入门 三、命令行工具 kubectl

这篇具有很好参考价值的文章主要介绍了Kubernetes入门 三、命令行工具 kubectl。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

语法

使用以下语法从终端窗口运行 kubectl 命令:

kubectl [command] [TYPE] [NAME] [flags]

参数:

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

经常使用的操作如下所示:

  • ① 基本命令:
命令 翻译 命令作用
create 创建 创建一个资源
edit 编辑 编辑一个资源
get 获取 获取一个资源
patch 更新 更新一个资源
delete 删除 删除一个资源
explain 解释 展示资源文档
  • ② 运行和调试:
命令 翻译 命令作用
run 运行 在集群中运行一个指定的镜像
expose 暴露 暴露资源为 Service
describe 描述 显示资源内部信息
logs 日志 输出容器在 Pod 中的日志
attach 缠绕 进入运行中的容器
exec 执行 执行容器中的一个命令
cp 复制 在 Pod 内外复制文件
rollout 首次展示 管理资源的发布
scale 规模 扩(缩)容 Pod 的数量
autoscale 自动调整 自动调整 Pod 的数量
port-forward 转发 转发一个或多个
  • ③ 高级命令:
命令 翻译 命令作用
apply 应用 通过文件对资源进行配置
label 标签 更新资源上的标签
  • ④ 集群管理命令:
命令 介绍
certificate 修改证书资源
cluster-info 显示集群信息
top 显示资源(CPU/M)
cordon 标记节点不可调度
uncordon 标记节点可被调度
drain 驱逐节点上的应用,准备下线维护
taint 修改节点taint标记

操作示例

资源操作

创建对象:

$ 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 的文档

显示查找资源:

# Get commands with basic output
$ kubectl get services                          # 列出所有 namespace 中的所有 service
$ kubectl get pods --all-namespaces             # 列出所有 namespace 中的所有 pod
$ kubectl get pods -o wide                      # 列出所有 pod 并显示详细信息
$ kubectl get deployment my-dep                 # 列出指定 deployment
$ kubectl get pods --include-uninitialized      # 列出该 namespace 中的所有 pod 包括未初始化的

# 使用详细输出来描述命令
$ kubectl describe nodes my-node
$ kubectl describe pods my-pod

$ kubectl get services --sort-by=.metadata.name # List Services Sorted by Name

# 根据重启次数排序列出 pod
$ kubectl get pods --sort-by='.status.containerStatuses[0].restartCount'

# 获取所有具有 app=cassandra 的 pod 中的 version 标签
$ kubectl get pods --selector=app=cassandra rc -o \
  jsonpath='{.items[*].metadata.labels.version}'

# 获取所有节点的 ExternalIP
$ kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'

# 列出属于某个 PC 的 Pod 的名字
# “jq”命令用于转换复杂的 jsonpath,参考 https://stedolan.github.io/jq/
$ sel=${$(kubectl get rc my-rc --output=json | jq -j '.spec.selector | to_entries | .[] | "\(.key)=\(.value),"')%?}
$ echo $(kubectl get pods --selector=$sel --output=jsonpath={.items..metadata.name})

# 查看哪些节点已就绪
$ JSONPATH='{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}' \
 && kubectl get nodes -o jsonpath="$JSONPATH" | grep "Ready=True"

# 列出当前 Pod 中使用的 Secret
$ kubectl get pods -o json | jq '.items[].spec.containers[].env[]?.valueFrom.secretKeyRef.name' | grep -v null | sort | uniq

更新资源:

$ kubectl rolling-update frontend-v1 -f frontend-v2.json           # 滚动更新 pod frontend-v1
$ kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2  # 更新资源名称并更新镜像
$ kubectl rolling-update frontend --image=image:v2                 # 更新 frontend pod 中的镜像
$ kubectl rolling-update frontend-v1 frontend-v2 --rollback        # 退出已存在的进行中的滚动更新
$ cat pod.json | kubectl replace -f -                              # 基于 stdin 输入的 JSON 替换 pod

# 强制替换,删除后重新创建资源。会导致服务中断。
$ kubectl replace --force -f ./pod.json

# 为 nginx RC 创建服务,启用本地 80 端口连接到容器上的 8000 端口
$ kubectl expose rc nginx --port=80 --target-port=8000

# 更新单容器 pod 的镜像版本(tag)到 v4
$ kubectl get pod mypod -o yaml | sed 's/\(image: myimage\):.*$/\1:v4/' | kubectl replace -f -

$ kubectl label pods my-pod new-label=awesome                      # 添加标签
$ kubectl annotate pods my-pod icon-url=http://goo.gl/XXBTWq       # 添加注解
$ kubectl autoscale deployment foo --min=2 --max=10                # 自动扩展 deployment “foo”

修补资源:

$ kubectl patch node k8s-node-1 -p '{"spec":{"unschedulable":true}}' # 部分更新节点

# 更新容器镜像; spec.containers[*].name 是必须的,因为这是合并的关键字
$ kubectl patch pod valid-pod -p '{"spec":{"containers":[{"name":"kubernetes-serve-hostname","image":"new image"}]}}'

# 使用具有位置数组的 json 补丁更新容器镜像
$ kubectl patch pod valid-pod --type='json' -p='[{"op": "replace", "path": "/spec/containers/0/image", "value":"new image"}]'

# 使用具有位置数组的 json 补丁禁用 deployment 的 livenessProbe
$ kubectl patch deployment valid-deployment  --type json   -p='[{"op": "remove", "path": "/spec/template/spec/containers/0/livenessProbe"}]'

编辑资源:

$ kubectl edit svc/docker-registry                      # 编辑名为 docker-registry 的 service
$ KUBE_EDITOR="nano" kubectl edit svc/docker-registry   # 使用其它编辑器

scale 资源:

$ kubectl scale --replicas=3 rs/foo                                 # Scale a replicaset named 'foo' to 3
$ kubectl scale --replicas=3 -f foo.yaml                            # Scale a resource specified in "foo.yaml" to 3
$ kubectl scale --current-replicas=2 --replicas=3 deployment/mysql  # If the deployment named mysql's current size is 2, scale mysql to 3
$ kubectl scale --replicas=5 rc/foo rc/bar rc/baz                   # Scale multiple replication controllers

删除资源:

$ kubectl delete -f ./pod.json                                              # 删除 pod.json 文件中定义的类型和名称的 pod
$ kubectl delete pod,service baz foo                                        # 删除名为“baz”的 pod 和名为“foo”的 service
$ kubectl delete pods,services -l name=myLabel                              # 删除具有 name=myLabel 标签的 pod 和 serivce
$ kubectl delete pods,services -l name=myLabel --include-uninitialized      # 删除具有 name=myLabel 标签的 pod 和 service,包括尚未初始化的
$ kubectl -n my-ns delete po,svc --all                                      # 删除 my-ns namespace 下的所有 pod 和 serivce,包括尚未初始化的

Pod 与集群

与运行的 Pod 交互:

$ kubectl logs my-pod                                 # dump 输出 pod 的日志(stdout)
$ kubectl logs my-pod -c my-container                 # dump 输出 pod 中容器的日志(stdout,pod 中有多个容器的情况下使用)
$ kubectl logs -f my-pod                              # 流式输出 pod 的日志(stdout)
$ kubectl logs -f my-pod -c my-container              # 流式输出 pod 中容器的日志(stdout,pod 中有多个容器的情况下使用)
$ kubectl run -i --tty busybox --image=busybox -- sh  # 交互式 shell 的方式运行 pod
$ kubectl attach my-pod -i                            # 连接到运行中的容器
$ kubectl port-forward my-pod 5000:6000               # 转发 pod 中的 6000 端口到本地的 5000 端口
$ kubectl exec my-pod -- ls /                         # 在已存在的容器中执行命令(只有一个容器的情况下)
$ kubectl exec my-pod -c my-container -- ls /         # 在已存在的容器中执行命令(pod 中有多个容器的情况下)
$ kubectl top pod POD_NAME --containers               # 显示指定 pod 和容器的指标度量

与节点和集群交互:文章来源地址https://www.toymoban.com/news/detail-639167.html

$ kubectl cordon my-node                                                # 标记 my-node 不可调度
$ kubectl drain my-node                                                 # 清空 my-node 以待维护
$ kubectl uncordon my-node                                              # 标记 my-node 可调度
$ kubectl top node my-node                                              # 显示 my-node 的指标度量
$ kubectl cluster-info                                                  # 显示 master 和服务的地址
$ kubectl cluster-info dump                                             # 将当前集群状态输出到 stdout                                    
$ kubectl cluster-info dump --output-directory=/path/to/cluster-state   # 将当前集群状态输出到 /path/to/cluster-state

# 如果该键和影响的污点(taint)已存在,则使用指定的值替换
$ kubectl taint nodes foo dedicated=special-user:NoSchedule

资源类型与别名

  • ① 集群级别资源:
资源名称 缩写 资源作用
nodes no 集群组成部分
namespaces ns 隔离 Pod
  • ② Pod资源:
资源名称 缩写 资源作用
Pods po 装载容器
  • ③ Pod资源控制器:
资源名称 缩写 资源作用
replicationcontrollers rc 控制 Pod 资源
replicasets rs 控制 Pod 资源
deployments deploy 控制 Pod 资源
daemonsets ds 控制 Pod 资源
jobs 控制 Pod 资源
cronjobs cj 控制 Pod 资源
horizontalpodautoscalers hpa 控制 Pod 资源
statefulsets sts 控制 Pod 资源
  • ④ 服务发现资源:
资源名称 缩写 资源作用
services svc 统一 Pod 对外接口
ingress ing 统一 Pod 对外接口
  • ⑤ 存储资源:
资源名称 缩写 资源作用
volumeattachments 存储
persistentvolumes pv 存储
persistentvolumeclaims pvc 存储
  • ⑥ 配置资源:
资源名称 缩写 资源作用
configmaps cm 配置
secrets 配置

格式化输出

  • 输出 json 格式:-o json
  • 仅打印资源名称:-o name
  • 以纯文本格式输出所有信息:-o wide
  • 输出 yaml 格式:-o yaml

到了这里,关于Kubernetes入门 三、命令行工具 kubectl的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用kubectl连接远程Kubernetes(k8s)集群

    你需要准备一个Kubernetes集群,你要记下你安装Kubernetes的版本。如图我已经准备好了一个版本号为 v1.21.14 的集群: 注意下载的版本号最好与你安装的Kubernetes版本对应上,各个版本的下载地址(⚠️注意修改url中的版本号): Windows: x86_64: arm64: MacOS: Intel: Apple Silicon: Linux: x86

    2024年02月04日
    浏览(59)
  • 四、Kubernetes(K8S):kubectl概述、安装、设置

    目录 概述 安装与配置kubectl 语法 命令 对象 规则结构 命令选项 资源类型 输出选项 格式化输出 自定义列 排序列表对象 常用操作示例 kubectl 是Kubernetes命令行工具。它允许用户与Kubernetes集群进行交互,并管理Kubernetes对象,如Pod、Service、Deployment等。kubectl可以在命令行界面中

    2024年02月12日
    浏览(62)
  • k8s kubectl常用命令

    kubectl 是 Kubernetes 的一个命令行管理工具,可用于 Kubernetes 上的应用部署和日常管理。本文列举了 9 个常见的 kubectl 命令,并总结了一些使用技巧,希望可以帮助系统管理员简化管理工作。 对于刚开始使用命令行工具的开发者,最保险的方法是提出问题(读取操作),而不是

    2024年02月11日
    浏览(40)
  • Kubernetes(K8s)从入门到精通系列之十四:安装工具

    Kubernetes 命令行工具 kubectl, 让你可以对 Kubernetes 集群运行命令。 你可以使用 kubectl 来部署应用、监测和管理集群资源以及查看日志。 kind 让你能够在本地计算机上运行 Kubernetes。 使用这个工具需要你安装 Docker 或者 Podman。 与 kind 类似,minikube 是一个工具, 能让你在本地运

    2024年02月14日
    浏览(43)
  • K8S之kubectl命令详解及示例

    目录 1、查看类命令 2、操作类命令 3、进阶命令操作 4、kubectl replace 重启pod的四种方法 5、kubectl语法 # 获取节点和服务版本信息 kubectl get nodes # 获取节点和服务版本信息,并查看附加信息 kubectl get nodes -o wide # 获取pod信息,默认是default名称空间 kubectl get pod # 获取pod信息,默认

    2024年02月01日
    浏览(49)
  • Kubernetes 命令行工具 kubectl 安装和使用教程

    管理 Kubernetes 集群资源的唯一入口是通过调用 apiserver 的接口,kubectl 是官方提供的 CLI 命令行工具,kubectl 将用户在命令行输入的命令组织并转化为 apiserver 能识别的信息,进而实现对 Kubernetes 各种资源的管理功能。使用 kubectl 可以实现部署应用程序、检查和管理集群资源、查

    2024年02月06日
    浏览(43)
  • k8s集群node节点运行kubectl命令

            在容器化项目部署中,某些应用需要部署到指定的机器上(涉及机器信息收集,然后生成license,机器授权等),所以需要在k8s集群的node节点上,手动执行kubectl命令。         具体的操作步骤如下: (1)在node节点执行任意kubectl命令,例如:kubectl get nodes,可以看到

    2024年02月14日
    浏览(51)
  • 【云原生】K8s管理工具--Kubectl(一)

    1、陈述式管理方式 kubernetes 集群管理集群资源的唯一入口是通过相应的方法调用 apiserver 的接口 kubectl 是官方的 CLI 命令行工具,用于与 apiserver 进行通信,将用户在命令行输入的命令,组织并转化为 apiserver 能识别的信息,进而实现管理 k8s 各种资源的一种有效途径 kubectl 的

    2024年02月05日
    浏览(40)
  • k8s:kubectl 命令设置简写&启用自动补全功能

    💖The Begin💖点点关注,收藏不迷路💖 Kubernetes(K8s)是一个强大的容器编排平台,而kubectl则是与之交互的命令行工具。尽管Kubernetes提供了强大的功能,但有时候频繁输入长长的kubectl命令可能会降低效率。为了提高工作效率,我们可以通过设置别名来简化kubectl命令。 在本文

    2024年04月16日
    浏览(55)
  • K8S集群Token过期处理方法以及Kubectl命令无法使用的问题解决

    使用Kubeadm方式部署的K8S集群,在初始化的时候生成的Token的有效期为1天,当过期之后Token就无法使用了,也就意味着,在Node节点执行 kubeadm join 命令加入K8S集群时就会失败,可以通过下面的方法重新生成Token。 1)创建Token

    2024年02月16日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包