云计算实训50——Kubernetes基础命令、常用指令

一、Kubernetes 自动补齐

安装自动补齐软件

root@master \~\]# yum -y install bash-completion # 临时开启自动补齐功能 \[root@master \~\]# source # 永 久开启自动补齐功能 \[root@master \~\]# echo "source \> \~/.bashrc

二、Kubernetes 基础命令

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

command:

指定要对一个或多个资源执行的操作。例如 create、get、describe、delete等。(增删改查)

type:

指定资源类型。资源类型不区分大小写,可以指 定单数、复数或缩写形式。

name:

指定资源的名称。名称区分大小写。如果省略名称,则显示所有资源的详细信息:kubectl get pods。

flags:

指定可选的参数。如,可以使用-s或-server参数 指定 Kubernetes API服务器的地址和端口。

1. 初级基础命令

kubectl create

通过 yaml/json 文件或者标准输入创建一个资源对象。

常用子命令及参数(按两次 tab 键即可查到):

  • clusterrolebinding (为特定群集角色创建群集角色绑 定)
  • clusterrole (创建群集角色)
  • configmap (从本地文件、目录或文字值创建 配置映射)
  • cronjob (使用指定的名称创建cron作业)
  • deployment (使用指定的名称创建资源)
  • job (创建具有指定名称的作业)
  • namespace (用指定的名称创建一个命名空 间)
  • priorityclass (使用指定的名称创建优先级类)
  • rolebinding (为特定角色或群集角色创建角色 绑定)
  • role (使用单一规则创建角色)
  • secret (使用指定的子命令创建机密)
  • serviceaccount (创建一个指定名称的服务账户)
  • service (使用指定的子命令创建服务)
  • token (请求服务帐户令牌) -f (指定某个 yaml 或 json 文件来创建资源)

kubectl expose

将 json/yaml 文件中定义的资源对象的端口暴露给新的 service 资源对象

常用子命令及参数:

  • deployment (管理Pod和ReplicaSet的声明式 更新的一种资源对象)
  • replicaset (副本控制器。控制由其管理的 Pod,使Pod副本的数量始终维持在预设的个数)
  • service (暴漏服务的端口)
  • pod (暴露 Pod 容器组的端口)
  • replicationcontroller (检查 Pod 健康状态的控制器)

kubectl run

创建并允许一个或多个容器镜像 常用子命令及参数:

  • --image (指定某个镜像)

kubectl set

配置资源对象设置特定功能

常用子命令及参数:

  • env (更新 Pod 模板上的环境变量)
  • image (更新 Pod 模板上的镜像)
  • resources (使用 Pod 模板更新对象的资源请 求/限制)
  • selector (为资源设置选择器)
  • serviceaccount (更新资源的服务帐户)
  • subject (更新角色绑定或群集角色绑定中的 用户、组或服务帐户)

2. 中级基础命令

kubectl explain

查看资源对象的详细信息,一般用于编写 yaml 的时候做 一个提示。

比如:kubectl explain deployment 会出现 deployment 下面可以写的字段,以及字段属性并且可 以逐级使用。

kubectl get

获取一个或多个资源对象的信息,如:pod 的运行状 态、容器数量、命名空间等。

常用子命令及参数:

  • -n, --namespace (指定要查询的命名空间。如果 不指定,默认查询当前命名空间中的资源)
  • -o, --output (指定输出格式。可以指定yaml、 json、wide等格式。例如,使用-o yaml可以以yaml 格式查看pod的信息,也可以指定已有资源加-o wide 查询状态信息)
  • -w, --watch (实时观察资源的变化)
  • --all-namespaces,-A (获取所有命名空间中的资源信 息)
  • -l, --selector (根据标签选择器过滤资源。可以 使用等于、不等于、包含、不包含等操作符来定义选 择器条件)
  • --field-selector (根据字段选择器过滤资源)
  • --sort-by (按照指定的字段对结果进行排序)
  • --show-kind (显示资源的种类信息)
  • --watch-only (只观察资源的变化,不输出当前 资源信息)
  • pod (查询当前的 pod 资源,不加其他参数 表示查询默认命名空间下的 pod)
  • nodes (查询当前 k8s 集群的所有节点及状态)

kubectl edit

使用默认编辑器编辑服务器上定义的资源对象,保存后 自动应用更改到 kubernetes 集群配置中。

常用子命令及参数:

  • -f, --filename (指定要编辑的资源对象的文件或 URL)
  • -patch (将文件中的更改作为补丁应用于资源对 象)
  • -p, --patch-strategy (指定补丁策略。可以指定 merge、retainKeys或strategic-merge)
  • --output-patch (输出补丁文件)
  • --local (在本地进行编辑,而不是在集群中进行 编辑)
  • --edit-cache (编辑缓存中的资源对象)

kubectl delete

通过 json/yaml 文件、标准输入、资源名称或标签选择 器来删除资源

常用子命令及参数:

  • -f, --filename (指定要删除的资源对象的文件或 URL)
  • --force (强制删除资源,即使资源正在运行)
  • --cascade (删除与资源相关联的所有子资源)
  • --all (删除所有资源。慎用!!)
  • --grace-period (设置宽限期) -n (指定命名空间)

3. 部署命令

kubectl rollout

资源管理对象的部署

常用子命令及参数:

  • history (显示上线历史)
  • resume (恢复暂停的资源)
  • pause (将所指定的资源标记为已暂停)
  • status (显示上线的状态)
  • restart (重启一个资源)
  • undo (撤销上一次的上线)

kubectl rollout-update

使用 rc(replication controller)来做滚动更新资源, 包括 Deployment、StatefulSet、Job 等。

kubectl scale

对资源扩容或着缩容,包括 deployment、replicaset、 replication、controller 等。

常用子命令及参数:

  • deployment (扩展或缩减 Deployment 控制的 Pod 数量)
  • replicaset (扩展或缩减 Replicaset 控制的 Pod 数量)
  • --replicas (控制 Pod 数量)
  • replicationcontroller (控制 Pod 数量需要达到相对 值的参数)
  • statefulset (部署和扩展有状态的应用程序)

4. 集群管理命令

kubectl cetificate

修改证书资源对象

常用子命令及参数:

  • approve (批准证书签名请求(CSR))
  • reject (拒绝 CSR)get (获取集群中存在的证书及其相关信息)
  • describe (查看集群中证书的详细信息,包括颁发 者、有效期、主题、公钥等)
  • sertificates (获取一个证书的私钥)

kubectl cluster-info

查看集群的概要信息

常用子命令及参数:

  • dump (获取集群详细信息,并可通过 grep 等过滤 命令对集群进行问题诊断、调试测试等)

kubectl top

显示资源、CPU、内存、储存的使用情况

常用子命令及参数:

  • node (显示集群的资源使用情况)
  • pod (显示 pod 的资源使用情况,不加其他参数 显示的是默认 pod)

kubectl cordon

标记集群内的某个节点为不可调度负载节点

常用子命令及参数:

  • 节点名 (如:master、node01 等)

kubectl uncordon

指定某个节点为可调度节点

常用子命令及参数:

  • 节点名 (如:master、node01 等)

kubectl drain

将某个节点上的工作负载平滑地切换到其他节点

常用子命令及参数:

  • 节点名 (如:master、node01 等)

kubectl taint

将一个或多个节点设置为污点,具有污点的节点和 Pod 之间存在一种互斥关系,这可以让节点拒绝 Pod 的调度 执行,甚至将已经存在的 Pod 驱逐出去。

常用子命令及参数:

  • node+节点名+节点名....

5. 故障排查和调试命令

kubectl describe

显示一个或多个资源对象的详细信息

常用子命令及参数:

  • nodes (显示某个节点的详细信息)
  • pod (显示某个 pod 的详细信息)
  • -f .yaml/json (显示某个 yaml/json 文件定义的 资源的详细信息)
  • -l (指定显示的资源对象)
  • --include-uninitialized (显示未初始化的资源对象)

kubectl logs

输出 pod 资源对象中一个容器的日志

常用子命令及参数:

  • replicasets (显示 pod 数量控制器的日志)
  • services (显示 services 日志)
  • deployments (显示 deployments 资源的日志)
  • pods (显示 pod 的日志)

kubectl attach

连接到一个运行的容器

常用子命令及参数:

  • -c (指定要进入的某个容器)
  • -i (将控制台输入发送到容器)
  • -t (为容器分配一个伪终端)

kubectl exec

在指定容器内执行命令,也可连接到某个容器

常用子命令及参数:

  • -c (指定要进入的某个容器)
  • -i (将控制台输入发送到容器)
  • -t (为容器分配一个伪终端)
  • -f (通过已定义好的 yaml/json 文件对容器进行交互)

kubectl port-forward

将本机指定端口映射到 pod 资源对象的端口

常用子命令及参数:

  • Pod (要转发端口的 Pod 名称或选择器,例如: nginx 8080:80,这里 nginx为 Pod 名)

kubectl proxy

将本地指定端口映射到 API Server

常用子命令及参数:

  • -port=PORT (代理服务的端口号。默认为 8001)
  • -www=static-dir (将静态文件目录提供给代理服 务)
  • -www-prefix=prefix (将 static-dir 中的文件路径前缀添加到代理服务中)
  • -api-prefix=prefix (将 API 路径前缀添加到代理服务中)

kubectl cp

用于 pod 与主机交换文件

常用子命令及参数:

  • -c (指定容器名进行文件交互)

kubectl auth

检查操作是否被允许,例如检查是否可以在当前名称空 间中列出部署、执行所有操作等。

常用子命令及参数:

  • can-i (检查是否允许操作)
  • reconcile (协调RBAC角色、角色绑定、集群角色和 集群角色绑定对象的规则...)
  • whoami (显示当前认证用户)

6. 高级命令

kubectl diff

对比本地 json/yaml 文件与 kube-apiserver 中运行的配 置文件是否有差异

常用子命令及参数:

  • -f (指定要比较的资源对象的文件名或路径)
  • -o (指定输出格式,例如"yaml"或"json")

kubectl apply

通过 json/yaml 文件、标准输入对资源进行配置更新或 创建

常用子命令及参数:

  • -f (指定要应用的资源对象的文件名或路径,可以 是YAML、JSON或多个文件)
  • -n (指定要应用的资源对象的命名空间)
  • --recursive (递归地应用目录中的所有资源对象)
  • --prune (删除不再存在的资源对象)
  • --force (强制应用资源对象,即使它们已存在)

kubectl patch

通过 patch 方式修改资源对象字段(补丁式)

常用子命令及参数:

  • -f (指定要修改的资源对象的文件名或路径)
  • -p (指定要应用的补丁,可以是JSON或YAML 格式)
  • --type (指定资源对象的类型,例如"Pod"、 "Deployment"等)
  • -n (指定要修改的资源对象的命名空间)

kubectl replace

通过 json/yaml 文件或标准输入来替换资源对象

常用子命令及参数:

  • -f (指定要替换的资源对象的文件名或路径)
  • --force (强制应用资源对象,即使它们已存在)

kubectl wait

在一个或多个资源上等待条件达成

常用子命令及参数:

  • -f (指定要等待的资源对象的文件名或路径)
  • --for=条件 (指定要等待的条件,例如 "Ready=True")
  • --timeout=时间 (设置等待的超时时间)

kubectl convert

转换 json/yaml 文件为不同的资源版本

常用子命令及参数:

  • -f (指定 yaml/json 文件)
  • --v1 (将资源对象转换为 v1 版本)
  • --v1beta1 (将资源对象转换为 v1 版本测试版 1)

kubectl kustomize

定制 kubernetes 配置

常用子命令及参数:

  • -f (指定要应用的Kustomize配置文件的文件名 或路径)
  • -n (指定要应用的资源对象的命名空间)

7. 设置命令

kubectl label

增删改资源的标签

常用子命令及参数:

  • -f (指定要修改标签的资源对象的文件名或路 径)
  • 标签名=新标签名 (添加一个标签到资源对象上)
  • --overwrite (如果资源对象已经存在标签,则覆盖 该标签)
  • 标签名- (删除一个标签)

kubectl annotate

更新⼀个或者多个资源对象的注释(annotaion)信息

常用子命令及参数:

  • -f (指定 yaml/json 文件)
  • --overwrite (如果资源对象已经存在注 释,则覆盖已有注释)
  • KEY_1=VAL_1 ... KEY_N=VAL_N (指定要添加或更新 的注释键值对)

kubectl completion

开启 kubernetes 命令自动补齐功能。

8. 其他命令

kubectl config ------管理 kubeconfig 配置文件

kubectl plugin ------运行命令行插件功能

kubectl version ------查看客户端服务端的系统版本信 息

kubectl api-versions ------列出当前 kubernetes 系统 支持的资源组和资源版本表现形式为/

kubectl api-resources ------列出当前 kubernetes 系统 支持的resource资源列表

kubectloptions ------查看支持的参数列表

三、kubernetes 常用命令

1. 编写 yaml 文件

kubectl create 通过配置文件名或标准输入创建一个集群资源对象,支 持 json 和 yaml 格式的文件

root@master \~\]# mkdir k8s \[root@master \~\]# cd k8s \[root@master k8s\]# vim busybox.yaml ![](https://i-blog.csdnimg.cn/direct/e52763153b5942848d795c9c77a520dc.png) #### 2. kubectl create 通过配置文件名或标准输入创建一个集群资源对象,支 持 json 和 yaml 格式的文件 语法: kubectl create -f 文件名 kubectl create deployment 资源名 --image=镜像名 示例: > # 通过json或yaml文件创建pod > > \[root@master k8s\]# kubectl create -f ./busybox.yaml > > \[root@master k8s\]# kubectl get pod > > # 通过标准输入来创建pod > > \[root@master k8s\]# cat busybox.yaml \| kubectl create -f - > > \[root@master k8s\]# kubectl get pod > > # 通过指定镜像创建pod > > \[root@master k8s\]# kubectl create deployment nginx --image=nginx:latest > > \[root@master k8s\]# kubectl get pod > > kubectl create deployment 资源名 --image=镜像名 -- dry-run=client -o yaml \> 文件名.yaml > > # 不创建pod只生成yaml文件 > > \[root@master k8s\]# kubectl create deployment nginx --image=nginx --dryrun=client -o yaml \> nginx.yaml > > \[root@master k8s\]# ls > > # 生成的nginx.yaml文件 > > \[root@master k8s\]# cat nginx.yaml #### 3. kubectl get 语法: kubectl get resource_name(资源名、类型) 常见 resource_name: ![](https://i-blog.csdnimg.cn/direct/f82989f348ba487888fc9572b05cc9c4.png) ![](https://i-blog.csdnimg.cn/direct/ddcd70ead9064052acae28da56bf527c.png) ![](https://i-blog.csdnimg.cn/direct/64e2f73e414a4201b4b34d2aa3567741.png) ![](https://i-blog.csdnimg.cn/direct/4d0f2e2114d1490ba974192c537ba3eb.png) ![](https://i-blog.csdnimg.cn/direct/857e5c5ded0246cd92c641613423332e.png) ![](https://i-blog.csdnimg.cn/direct/a695a91c69724a15896b03e68c3f2888.png) 其他可选参数: -o wide/json/yaml (用不同格式查看) -l key=value (看指定标签的pods,⽀持'=', '==', and '!='操作符) 示例: > # 查看Master状态 > > \[root@master k8s\]# kubectl get componentstatuses > > # 查看所有命名空间 > > \[root@master k8s\]# kubectl get namespaces > > # 列出kube-system命名空间下的所有pod,不加-n 参数查看default命名空间下的pod > > \[root@master k8s\]# kubectl get pods -n kube-system > > # 显示更多的pods列表信息(例如 pod的ip和所处的 node) > > \[root@master k8s\]# kubectl get pods -o wide > > # 列出名字为web的rc > > \[root@master k8s\]# kubectl get replicationcontroller web > > # 获取名字为nginx-7854ff8877-nphcf的pod的 信息,并以json格式输出 > > \[root@master k8s\]# kubectl get -o json pod nginx-7854ff8877-nphcf > > # 根据pod⽂件查找pod,并以json格式输出,查询 前确保目标pod存在于集群中 > > \[root@master k8s\]# kubectl get -f busybox.yaml -o json > > # 获取pod的kube-dns-795f5f6f9c-ldxxs容器的 状态 > > \[root@master k8s\]# kubectl get -o template pod/kube-dns-795f5f6f9c-ldxxs - -template {{.status.phase}} > > # 同时获取所有的rc和service > > \[root@master k8s\]# kubectl get rc,services > > # 获取符合条件的所有rc,svc,pod,因为当前集群 中没有这些资源,所以查不到便报错 > > \[root@master k8s\]# kubectl get rc/web service/frontend pods/web-pod-13je7 > > # 显示所有资源,包括pod、deployment、 service、replicaset > > \[root@master k8s\]# kubectl get all > > # 查看pod⾥的容器名 > > \[root@master k8s\]# kubectl get pods nginx-7854ff8877-nphcf -o jsonpath='{.spec.containers\[\*\].name}' #### 4. kubectl delete kubernetes 集群中,可通过指定配置文件 (json/yaml)、stdin(标准输入)、资源名称或 label (标签)来删除资源。 Pod 支持平滑删除,因为这些资源一般是集群中的实 体,所以删除无法立即生效,这些资源在强制终止之前 默认定义了一个周期 (宽限期),但可以使用"-graceperiod flag"来覆盖该值,或通过"pass --now"设置该周 期为 1. 如果托管 Pod 的 Node 节点已停止或无法连接 API Server,使用 delete 删除 Pod 需等待时间更长,此时要 想强制删除,需指定"-force flag" ,且设置周期为 0。 注意:执行delete命令时不会检查资源版本,如果在 执行delete操作时有人进行了更新操作,那么更新操 作将连同资源一起被删除。 语法: kubectl delete (\[ -f 文件名 \] \| TYPE \[NAME \| -l label \| - -all\]) ![](https://i-blog.csdnimg.cn/direct/156f8473598d4efa80ae43e5ddbe69fd.png) #### 5. kubectl set 更新资源: # 更新 "nginx" Deployment 的 "nginx" 容器镜 像 kubectl set image deployment nginx nginx=nginx:v2 #### 6. kubectl edit 编辑资源: # 编辑名为nginx的集群管理器,进入一个如vim的文本 编辑器,但不能使用鼠标滚轮滑动 kubectl edit deployment nginx #### 7. kubectl replace 更新资源: # 强制替换,删除后重建资源。会导致服务不可⽤。 kubectl replace --force -f ./nginx.yaml #### 8. kubectl logs 输出 pod 中一个容器的日志。如果 pod 只包含一个容器 则省略容器名。 语法: kubectl logs \[-f\] \[-p\] POD \[-c CONTAINER

示例:

返回仅包含⼀个容器的pod nginx的⽇志快照

kubectl logs nginx

持续输出pod⽇志

kubectl logs -f nginx-7854ff8877-x8v6f

指定命名空间和pod查看⽇志

kubectl logs -f kube-apiserver-k8s-master -n kube-system

查看后⾯10⾏内容

kubectl logs -f kube-apiserver-k8s-master -n kube-system --tail 10

查看某个pod⾥某个容器的⽇志

kubectl logs -f nginx-7854ff8877-x8v6f -c nginx

9. kubectl exec

连接容器并可在容器内部执行命令

语法: kubectl exec POD [-c CONTAINER] -- COMMAND [args...]

  • -c,--container="": 容器名。如果未指定,使用pod中 的一个容器。
  • -p,--pod="": Pod名
  • -i,--stdin[=false]: 将控制台输入发送到容器
  • -t,--tty[=false]: 为容器分配一个伪终端

示例:

10. kubectl top

显示资源 cpu 内存 存储使⽤情况

相关推荐
sa10027几秒前
淘宝商品详情 API 接口开发实战:item_detail 调用、参数与 Python 示例
linux·数据库·python
Flying pigs~~16 分钟前
深度学习之循环神经网络RNN
人工智能·rnn·深度学习·自然语言处理·循环神经网络
sbjdhjd21 分钟前
RHCE | Web 服务器与 Nginx 全栈详解
linux·nginx·http·云原生·oracle·架构·web
ホロHoro25 分钟前
深度学习路线
人工智能·深度学习
敲代码还房贷25 分钟前
FSL6.0.7安装教程
linux·ubuntu·医学生·fsl
小云数据库服务专线29 分钟前
linux awk使用
linux·运维·服务器
XuecWu338 分钟前
Karpathy的AutoResearch与Gemini三层 Agent 架构后的相通设计逻辑
人工智能·深度学习·语言模型·自然语言处理
我爱学习好爱好爱1 小时前
Kubernetes 1.29集群上部署Java网站项目
java·容器·kubernetes
执笔为剑1 小时前
1.2、docker环境部署
运维·docker·容器
LuDvei1 小时前
linux TCP/UDP
linux·tcp/ip·udp