k8s学习笔记(6)--- kubernetes命令行工具kubectl详解

1、kubectl概述

        kubectl是Kubernetes集群的命令行工具,通过kubectl能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署。运行kubectl命令的语法如下所示:

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

注意:在一个命令行中也可以同时对多个资源对象进行操作,以多个TYPE和NAME的组合表示。
示例如下:
1.获取多个Pod的信息:kubectl get pods pod1 pod2
2.获取多种对象的信息:kubectl get pod/pod1 rc/rc1
3.同时应用多个yaml文件,以多个-f file参数表示:kubectl create -f pod1.yaml -f rc1.yaml -f service1.yaml
  • comand:指定要对资源执行的操作。例如create、get、describe、delete、log、exec等等;
  • TYPE:指定资源类型,资源类型是大小学敏感的,开发者能够以单数、复数和缩略的形式。如node、pod、deployment、namespaces等等;
  • NAME:资源对象的名称,区分大小写。如果不指定名称,则系统将返回属于TYPE的全部对象的列表,例如$ kubectl get pods将返回所有Pod的列表。
  • flags:kubectl子命令的可选参数,例如使用“-s”指定apiserver的URL地址而不用默认值。

2、资源对象类型

        在kubernetes中,提供了很多的资源对象,开发和运维人员可以通过这些对象对容器进行编排。在下表中,是kubectl所支持的资源对象类型,以及它们的缩略别名:

资源对象类型 缩略别名
apiservices -
certificatesigningrequests csr
clusterrolebindings -
clusters -
componentstatuses cs
configmaps cm
controllerrevisions -
cronjobs -
customresourcedefinition crd
daemonsets ds
deployments deploy
endpoints ep
events ev
horizontalpodautoscalers hpa
ingresses ing
jobs -
limitranges limits
namespaces ns
networkpolicies netpol
nodes no
persistentvolumeclaims pvc
persistentvolumes pv
poddisruptionbudget pdb
podpreset -
pods po
podsecuritypolicies psp
podtemplates -
replicasets rs
replicationcontrollers rc
resourcequotas quota
rolebindings -
roles -
secrets -
serviceaccounts sa
services svc
statefulsets -
storageclasses -

3、kubectl命令大全

        kubectl作为kubernetes的命令行工具,主要的职责就是对集群中的资源的对象进行操作,这些操作包括对资源对象的创建、删除和查看等。下表中显示了kubectl支持的所有操作,以及这些操作的语法和描述信息:
注意:每个命令的具体使用可以使用kubectl [command] -h进行查看。设置kubectl命令自动补充source <(kubectl completion bash)

  • 基础命令
命令 语法 描述
create kubectl create -f FILENAME [options] 从文件或stdin中创建一个或多个资源对象
expose kubectl expose (-f FILENAME | TYPE NAME) [ --port=port] [ --protocol=TCP |UDP|SCTP] [ --target-port=number-or-name][ --name=name] [ --external-ip=external-ip-of-service] [ --type=type] [options] 将rc,svc,deploy,pod暴露为一个新的svc
run kubectl run NAME --image=image [ --env=“key=value”] [ --port=port] [ --replicas=replicas] [ --dry-run=bool] [ --overrides=inline-json] [ --command] --[COMMAND] [args…] [options] 在集群上运行一个指定的镜像
set kubectl set SUBCOMMAND [options] 更改现有的应用程序资源,SUBCOMMAND包括image、resources、selector、subject、env、serviceaccount,具体用法可以使用kubectl set [SUBCOMMAND ] -h 查看
explain kubectl explain RESOURCE [options] 查询资源的文档
get kubectl get [(-o| --output=)json|yaml|wide|custom-columns=…|custom-columns-file=…|go-template=…|go-template-file=…|jsonpath=…|jsonpath-file=…](TYPE[.VERSION][.GROUP] [NAME | -l label] | TYPE[.VERSION][.GROUP]/NAME …) [flags] [options] 查询一个或者多个资源
edit kubectl edit (RESOURCE/NAME | -f FILENAME) [options] 通过默认编辑器编辑和更新服务器上的一个或多个资源对象
delete kubectl delete ([-f FILENAME] | [-k DIRECTORY] | TYPE [(NAME | -l label | --all)]) [options] 删除资源对象
  • 部署命令
命令 语法 描述
rollout kubectl rollout SUBCOMMAND [options] 管理资源的部署,SUBCOMMAND包括history、pause、restart、resume、status、undo
rolling-update kubectl rolling-update OLD_CONTROLLER_NAME([NEW_CONTROLLER_NAME] --image=NEW_CONTAINER_IMAGE | -f NEW_CONTROLLER_SPEC) [options] 通过逐步替换指定的副本控制器和Pod来执行滚动更新
scale kubectl scale [ --resource-version=version] [ --current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME)[options] 扩宿容副本集的数量
autoscale kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [ --min=MINPODS] --max=MAXPODS [ --cpu-percent=CPU] [options] 自动扩宿容由副本控制器管理的Pod
  • 集群管理命令
命令 语法 描述
certificate kubectl certificate SUBCOMMAND [options] 修改证书资源,SUBCOMMAND包括approve、deny
cluster-info kubectl cluster-info [flags] [options] 显示群集中的主节点和服务的的端点信息
top kubectl top [flags] [options] 显示node或pod资源(CPU/内存/存储)使用情况
cordon kubectl cordon NODE [options] 将node标记为不可调度
uncordon kubectl uncordon NODE [options] 将node标记为可调度
drain kubectl drain NODE [options] 驱逐节点,准备维护
taint kubectl taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 … KEY_N=VAL_N:TAINT_EFFECT_N [options] 更新一个或多个节点上的污点
  • 故障排除和调试命令
命令 语法 描述
describe kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | -l label] | TYPE/NAME) [options] 显示一个或者多个资源对象的详细信息
logs kubectl logs [-f] [-p] (POD | TYPE/NAME) [-c CONTAINER] [options] 显示Pod中一个容器的日志
attach kubectl attach (POD | TYPE/NAME) -c CONTAINER [options] 连接到正在运行的容器上,以查看输出流或与容器交互(stdin)。
exec kubectl exec (POD | TYPE/NAME) [-c CONTAINER] [flags] --COMMAND [args…] [options] 在Pod的容器中执行一个命令
port-forward kubectl port-forward TYPE/NAME [options] [LOCAL_PORT:]REMOTE_PORT […[LOCAL_PORT_N:]REMOTE_PORT_N] 将一个或多个本地端口转发到Pod
proxy kubectl proxy [ --port=PORT] [ --www=static-dir] [ --www-prefix=prefix] [ --api-prefix=prefix] [options] 为kubernetes API服务器运行一个代理
cp kubectl cp <file-spec-src> <file-spec-dest> [options] 从容器中复制文件和目录
auth kubectl auth [flags] [options] 检查授权
  • 高级命令
命令 语法 描述
diff kubectl diff -f FILENAME [options] Diff live version against would-be applied version
apply kubectl apply (-f FILENAME | -k DIRECTORY) [options] 将来自于文件或stdin的配置变更应用到主要对象中
patch kubectl patch (-f FILENAME | TYPE NAME) -p PATCH [options] 使用策略合并补丁过程更新资源对象中的一个或多个字段
replace kubectl replace -f FILENAME [options] 从文件或stdin中替换资源对象
wait kubectl wait ([-f FILENAME] | resource.group/resource.name | resource.group [(-l label | --all)]) [ --for=delete| --for condition=available] [options] 等待一个或多个资源上的特定条件
convert kubectl convert -f FILENAME [options] 将配置文件转换为不同的API Version
kustomize kubectl kustomize <dir> [flags] [options] 从目录或远程url构建kustomization目标
  • 设置命令
命令 语法 描述
label kubectl label [ --overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 … KEY_N=VAL_N [ --resource-version=version][options] 添加或更新一个或者多个资源对象的标签
annotate kubectl annotate [ --overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 … KEY_N=VAL_N [ --resource-version=version][options] 添加或更新一个或多个资源的注释
completion kubectl completion SHELL [options] 输出指定shell的代码完成命令 (bash or zsh)
  • 其它命令
命令 语法 描述
api-resources kubectl api-resources [flags] [options] 在服务器上打印支持的API资源
api-versions kubectl api-versions [flags] [options] 在服务器上以“group/version”的形式打印支持的API版本
config kubectl config SUBCOMMAND [options] 修改kubeconfig文件,SUBCOMMAND 包括current-context、delete-cluster、delete-context、get-clusters、get-contexts、rename-context、set、set-cluster、set-context、set-credentials、unset、use-context、view,具体用法可查看kubectl config SUBCOMMAND -h
plugin kubectl plugin [flags] [options] 提供与插件交互的实用程序
version kubectl version [flags] [options] 输出client和server的版本信息
  • global options

以下选项可以传递给任何命令:

全局参数 描述
 --add-dir-header=false 如果为真,则将文件目录添加到标头
 --alsologtostderr=false 日志到标准错误以及文件
 --as=’’ 模拟操作的用户名
 --as-group=[] 集团的模拟操作,这个标志可以重复指定多个组。
 --cache-dir=’/root/.kube/http-cache’ 默认HTTP cache目录
 --certificate-authority=’’ 指向证书颁发机构的证书文件的路径
 --client-certificate=’’ TLS客户端证书文件的路径
 --client-key=’’ TLS的客户端密钥文件的路径
 --cluster=’’ 要使用的kubeconfig集群的名称
 --context=’’ The name of the kubeconfig context to use
 --insecure-skip-tls-verify=false 如果为真,将不检查服务器的证书的有效性。这将使您的HTTPS连接不安全
 --kubeconfig=’’ 用于CLI请求的kubeconfig文件的路径。
 --log-backtrace-at=:0 当日志记录命中行文件N时,发出堆栈跟踪
 --log-dir=’’ 如果非空,则在此目录中写入日志文件
 --log-file=’’ 如果非空,则使用此日志文件
 --log-file-max-size=1800 定义日志文件可以增长到的最大大小。单位是字节。如果该值为0,则最大文件大小不受限制。
 --log-flush-frequency=5s 日志刷新之间的最大秒数
 --logtostderr=true 日志到标准错误而不是文件
 --match-server-version=false 要求服务器版本与客户端版本匹配
 -n, --namespace=’’ 如果存在,此CLI请求的名称空间范围
 --password=’’ API服务器的基本身份验证密码
 --profile=‘none’ 要捕获的配置文件的名称,可设置(none|cpu|heap|goroutine|threadcreate|block|mutex)
 --profile-output=‘profile.pprof’ 要写入概要文件的文件名称
 --request-timeout=‘0’ 在放弃单个服务器请求之前等待的时间长度。非零值应包含相应的时间单位(如1s、2m、3h)。值为0表示不超时请求。
 -s, --server=’’ Kubernetes API服务器的地址和端口
 --skip-headers=false 如果为真,则在日志消息中避免头前缀
 --skip-log-headers=false 如果为真,在打开日志文件时要避免头文件
 --stderrthreshold=2 在此阈值或以上的日志将转到stderr
 --token=’’ 用于向API服务器进行身份验证的承载令牌
 --user=’’ 要使用的kubeconfig用户的名称
 --username=’’ API服务器的基本身份验证的用户名
 -v, --v=0 日志级别冗长性的编号
 --vmodule=‘’ 逗号分隔的模式列表=N个文件过滤日志记录设置

4、kubectl安装部署

  • 下载kubectl
    执行以下命令,获取 Kubectl 工具:
  1. Mac OS X 系统

     curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.8.13/bin/darwin/amd64/kubectl
    
  2. Linux 系统

     curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.8.13/bin/linux/amd64/kubectl
    
  3. Windows 系统

     curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.8.13/bin/windows/amd64/kubectl.exe
    

以linux为例,若要下载最新的kubectl,可以执行以下命令:

curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl

要下载特定版本,请用特定版本替换:

扫描二维码关注公众号,回复: 8738916 查看本文章
$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)

例如,要在Linux上下载版本v1.17.0,请输入:

curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.17.0/bin/linux/amd64/kubectl
  • 安装 Kubectl 工具
    已下载kubectl工具,安装步骤以 Linux 系统为例
  1. 执行以下命令,添加执行权限

     chmod +x ./kubectl
     sudo mv ./kubectl /usr/local/bin/kubectl
    
  2. 执行以下命令,测试安装结果

     kubectl version
    

    如若输出类似以下版本信息,即表示安装成功。

     Client Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"08e099554f3c31f6e6f07b448ab3ed78d0520507", GitTreeState:"clean", BuildDate:"2017-01-12T04:57:25Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"}
    

5、kubectl连接集群

        通过证书信息使用 Kubectl 操作集群

  • 单次连接集群
    Kubectl 命令格式如下所示:

      -s "域名信息" --username=用户名 --password=密码 --certificate-authority=证书路径
    

    示例:

      kubectl get node -s "https://cls-66668888.ccs.tencent-cloud.com" --username=admin --password=6666o9oIB2gHD88882quIfLMy6666 --certificate-authority=/etc/kubernetes/cluster-ca.crt
    
  • 修改 Kubectl 配置文件,长期连接集群

  1. 参考以下命令,修改 Kubectl 配置文件中的密码、证书信息

     kubectl config set-credentials default-admin --username=admin --password=6666o9oIB2gHD88882quIfLMy6666
     kubectl config set-cluster default-cluster --server=https://cls-66668888.ccs.tencent-cloud.com --certificate-authority=/etc/kubernetes/cluster-ca.crt
     kubectl config set-context default-system --cluster=default-cluster --user=default-admin
     kubectl config use-context default-system
    
  2. 配置完成后,执行以下命令,获取 node 节点信息

     kubectl get nodes
    

    返回类似以下信息,即表示修改成功

     NAME        STATUS    AGE
     10.0.0.61   Ready     10h
    

本文仅是个人学习时的整理收藏,以便回顾所用,内容均来源其它处。
[参考文档]https://www.kubernetes.org.cn/4060.html.
[参考文档]https://kubernetes.io/docs/tasks/tools/install-kubectl/#tabset-2.

发布了9 篇原创文章 · 获赞 0 · 访问量 905

猜你喜欢

转载自blog.csdn.net/qq_42987484/article/details/103830180