美文网首页
kubectl 命令

kubectl 命令

作者: 河码匠 | 来源:发表于2023-01-29 13:03 被阅读0次

基本命令初级

命令 语法 说明
create kubectl create -f filename [flags] 从配置文件或 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,service,deployment 或 pod 暴露为一个新的 service
set kubectl set SUBCOMMAND [options] 设置资源对象的某个特定信息
run kubectl run NAME --image=image [--env="key=value"] [--port=port] [--dry-run=server|client] [--overrides=inline-json] [--command] -- [COMMAND] [args...] [options] 基于一个镜像在 kubernetes 集群上启动一个 deployment

基本命令中级

命令 语法 说明
explain kubectl explain [--include-extended-apis=true] [--recursive=false] [flags] 对资源对象属性的详细说明
get kubectl get [(-o|--output=)json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file|custom-columns-file|custom-columns|wide] (type[.version][.group] [name | -l label] | type[.version][.group]/name ...) [flags] [options] 显示一个或多个资源对象的该要信息
-l:指定查看的标签 如:-l key=value
--show-labels: 显示标签
-A/--all-namespace: 所有 namespace 下的资源
-w 动态查看资源状态
--kubeconfig: 指定使用的配置文件,默认~/.kube/config
delete kubectl delete [-f filename | type name | -l label] [flags] 从配置文件,stdin,资源名称或label selector 删除资源对象
edit kubectl edit [-f filename | type name | type/name] [flags] 编辑资源对象的属性,在线更新

扩展命令

命令 语法 说明
rollout kubectl rollout SUBCOMMAND [options] 对 deployment 进行管理,可用操作包括:history,pause,resume,undo,status
scale kubectl scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME) [options] 扩容/缩容一个 deployment,replicaSet,RC 或 job 中的 pod 的数量
autoscale kubectl antoscale [-f filename | type name | type/name] 对 deployment,replicaSet 或 replicationController 进行水平自动扩容和缩容的设置

集群管理命令

命令 语法 说明
certificate kubectl certificate SUBCOMMAND [options] 修改自签证书
cluster-info kubectl cluster-info [flags] 显示集群 master 和内置服务的信息
top kubectl top node 查看 node 或 pod 的资源使用情况,需要在集群中运行 metics server
cordon kubectl cordon node [flags] 将 node 标记 node 为 unschedulable
uncordon kubectl uncordon node 标记 node 为 schedulable
drain kubectl drain node [flags] 首先将 node 设置为 unscheduled,然后删除在该 node 上运行的所有 pod,但不会删除由 api server 管理的 pod
taint kubectl taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 ... KEY_N=VAL_N:TAINT_EFFECT_N [options] 设置 node 的 taint 信息,用于将特定的 pod 调度到特定的 node 的操作

故障排除和调试命令

命令 语法 说明
describe kubectl describe [-f filename | type name] [flags] 描述一个或多个资源对象的详细信息
logs kubectl logs pod [-c container] [--follow] [flags] 打印一个容器的日志
attach kubectl attach POD -c container [flags] 附着到一个正在允许的容器上
exec kubectl exec (pod | type/name) [-c container] [flags] -- command [args...] [options] 执行一个容器中的命令
-i: 交互模式
-t: 为终端方式
-c:指定进去到 pod 中的那个容器里面
-- command:要运行的命令,例如:-- /bin/bash
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] 将本机某个端口号映射到 api server 上
auth kubectl auth [flags] [options] 检查 RBAC 权限
cp kubectl cp <file-spec-src> <file-spec-dest> [options] 复制 files 和 directories 到 containers 和从容器中复制 files 和 directories

高级命令

命令 语法 说明
diff kubectl diff -f filename [options] 查看配置文件与当前系统中正在运行的资源对象的差异
apply kubectl apply -f filename [flags] 从配置文件或 stdin 中对资源对象进行配置更新
patch kubectl patch (-f filename | type name) [-p patch|--patch-file file] [options] 以 merge 形式对资源的某部分字段的值进行修改
replace kubectl replace -f filename [flags] 从配置文件或 stdin 替换资源对象

设置命令

命令 语法 说明
label kubectl label [--overwrite] (-f filename | type name) key_1=val_1 ... key_n=val_n [--resource-version=version] [options] 设置或更新这个资源的 label
annotate kubectl annotate [-f filename | type name | type/name] key1=value1,key2=value2 添加或更新资源对象的 annotation 信息
completion kubectl completion shell [flags] 输出 shell 命令的执行结果

其他命令

命令 语法 说明
api-version kubectl api-version [flags] 列出当前系统支持的 api 版本列表,格式为"group/version"
api-resources kubectl 列出 api 资源
config kubectl config SUBCOMMAND [flags] 修改 kubeconfig 文件
plugin kubectl plugin [flags] [options] 在 kubectl 命令行适用用户自定义的插件
version kubectl version 查看版本信息

-o 输出格式参数说明

get 等命令中会用到 -o

输出格式 说明
-o=custom-columns=<spec> 自定义列名进行输出,以逗号分割
-o=custom-columns-file=<filename> 从文件中获取自定义列名进行输出
-o=json 以 json 格式输出
-o=jsonpath=<template> 输出 jsonpath 表达式定义的字段信息
-o=jsonpath-file=<filename> 商促局 jsonpath 表达式定义的字段信息,来源于文件
-o=name 仅输出资源对象的名称
-o=wide 输出额外信息,对于 pod 将输出 pod 所在 node 名
-o=yaml 以 yaml 格式输出内容

常用命令汇总

关于 pod 的

  • 获取指定标签的 pod 列表
kubectl get pods -l key-value
  • 列出所有 pod 中某个标签的值
root@master:~/k8s# kubectl get pods -A -L k8s-app
NAMESPACE     NAME                                       READY   STATUS    RESTARTS      AGE   K8S-APP
kube-system   calico-kube-controllers-6744f6b6d5-hjwqp   1/1     Running   0             21h   calico-kube-controllers
kube-system   calico-node-9fqfg                          1/1     Running   0             21h   calico-node
kube-system   calico-node-hv2tf                          1/1     Running   0             21h   calico-node
kube-system   calico-node-ts6hs                          1/1     Running   0             21h   calico-node
kube-system   coredns-7f8cbcb969-9j5v6                   1/1     Running   0             21h   kube-dns
kube-system   coredns-7f8cbcb969-vnz5h                   1/1     Running   0             21h   kube-dns
  • 在 pod 列表中查看 ip 和分配到那个节点
kubectl get pods -o wide
  • 指定 namespace 查看 pod
kubectl get pods -n xxxx
  • 给 pod 添加标签
kubectl label pods xxx key=value
  • 查看 pod 所有标签
kubectl get pods --show-labels
  • 查看 pod 详细信息
kubectl describe pods xxx
  • 进入pod中的某个容器
kubectl exec -it pod名 -c 容器名 -- /bin/bash
  • 删除 pod
kubectl delete pods xxx
  • 删除基于 yaml 创建的 pod
kubectl delete -f xxx.yaml
  • 查看 pod yaml 配置
kubectl get pods xxx -o yaml

关于 deployment 的

  • 查看 deployment 详情
kubectl describe deploy xxx
  • 查看滚动跟新版本
kubectl rollout history deployment xxx
  • 回滚到指定版本
kubectl rollout undo deployment/xxx --to-revision=版本号
  • 使用命令修改策略
kubectl patch deployment xxx -p '{"spec":{"strategy":{"rollingUpdate": {"maxSurge":1,"maxUnavailable":1}}}}'
  • 修改 deployment pod 中某个容器的镜像
kubectl set image deployment deployment名 容器名=镜像地址 -n 命名空间
  • 暂停 deployment 滚动跟新
kubectl rollout pause deployment deployment名 -n 命名空间
  • 恢复 deployment 滚动跟新
kubectl rollout resume deployment deployment名 -n 命名空间

关于 service

查看 service

kubectl get svc

查看 service 详情

kubectl describe svc xxx

关于 node 的

  • 查看 node 节点标签
klubectl get nodes --show-lables
  • node 节点添加标签
kubectl label nodes xxx key=value
  • 删除 node 节点标签
kubectl label nodes xxx key-
  • 定义 node 污点
kubectl taint nodes 节点名 key=value

例子
kubectl taint nodes 节点名 node-aaa=production:NoSchedule

详情中
Taints:             nodeaaa=production:NoSchedule

命名空间

  • 查看命名空间
kubectl get ns
  • 创建命名空间
kubectl create ns xxx

pv 和 pvc 相关命令

查看 pv 或 pvc

kubectl get pv/pvc

ConfigMap 相关命令

  • 查看 ConfigMap
kubectl get cm
  • 查看 ConfigMap 详情
kubectl describe cm xxx
  • 创建 key-value 方式 ConfigMap
# --from-literal 添加 key=value 参数
kubectl create configmap 名字 --from-literal=键=值 --from-literal=键2=值2
  • 创建文件 ConfigMap
kubectl create configmap 名字 --from-file=键=配置文件1 --from-file=键2=配置文件2
或
这样 key 就是文件名
kubectl create configmap 名字 --from-file=配置文件1
  • 创建目录 ConfigMap
这样 key 就是文件名
kubectl create configmap 名字 --from-file=目录

Secret 相关命令

  • 查看 Secret
kubectl get secret
  • 查看 Secret 详情
kubectl describe secret xxx
  • 创建 generic 形式的。伪加密通过 base64 decode 可以解密
kubectl create secret generic 名字 --from-literal=键=值 --from-literal=键2=值2

Role ClusterRole 相关命令

  • 查看角色
kubectl get role/clusterrole
  • 查看角色详情
kubectl describe role/clusterrole xxx
  • 用户和权限绑定

命名空间 中创建 rolebinding名,将 用户名clusterrole名字 进行绑定。
这里的 --user 是 kubectl 客户端的用户

kubectl create rolebinding rolebinding名 --clusterrole=clusterrole名字 --user=用户名 --namespace=命名空间

命名空间a 下创建 rolebinding名字,将 命名空间 下的 :ServiceAccount账户 绑定在 clusterrole名字

kubctl create rolebinding rolebinding名字 --clusterrole=clusterrole名字 --serviceaccount=命名空间:ServiceAccount账户 --namespace=命名空间a

创建 clusterrolebinding名,将 用户名clusterrole名 进行绑定
这里的 --user 是 kubectl 客户端的用户

kubectl create clusterrolebinding clusterrolebinding名 --clusterrole=clusterrole名 --user=用户名

创建 clusterrolebinding名,将 ServiceAccount账户clusterrole名 进行绑定

kubectl create clusterrolebinding clusterrolebinding名 --clusterrole=clusterrole名 --serviceaccount=ServiceAccount账户

创建 kubectl 客户端用户

  • 生成新用户相关证书
私钥
umask 077; openssl genrsa -out xxx.key 2048

请求证书
openssl req -new -key xxx.key -out xxx.csr -subj "/CN=xxx"

生成一个证书
openssl x509 -req -in xxx.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out xxx.crt -days 3650
  • kubectl 下新增用户和配置 kube/config
kubectl config set-credentials xxx --client-certificate=./xxx.crt --client-key=./xxx.key --embed-certs=true  

在 kubeconfig下新增加一个 xxx 这个账号
kubectl config set-context xxx@kubernetes --cluster=kubernetes --user=xxx
  • 切换账号
    这时的账号是没有任何权限的需要使用 rolebinding 等绑定权限
    这个账号可以和操作系统新增的账户联合使用,修改操作系统的新增账户的 ~/.kube/config 为 kubectl 新增的 xxx 配置即可
kubectl config use-context xxx@kubernetes

其他

  • 查看 kubectl config 信息
kubectl config view
  • 查看日志
kubectl logs xxx
  • 查看资源配额
kubectl get resourcequota -n xxx
  • 动态查看资源状态
kubect get 资源类型 -w
  • 查看 api
    api 组成 apiGroup/apiVersion
kubectl api-versions

相关文章

网友评论

      本文标题:kubectl 命令

      本文链接:https://www.haomeiwen.com/subject/qnfphdtx.html