Skip to content

Latest commit

 

History

History
1157 lines (817 loc) · 45.8 KB

kubectl命令参考.md

File metadata and controls

1157 lines (817 loc) · 45.8 KB

Table of Contents generated with DocToc

kubectl 命令格式

kubectl 命令的基本格式是 kubectl <action> <resource>,其中 action 可以是 create, delete, get 等等,resource 你可以使用 kubectl api-resources 获得完整列表。

例如,你可以通过 kubectl get nodes 获取节点信息,可以通过 kubectl describe nodes ${NODENAME} 获取节点详细信息。

官方命令详解

最基本命令

👉kubectl create - 从文件或标准输入创建资源

kubectl create -f FILENAME

推荐使用yaml,如果手动 create 具体的 resource 请查阅create

👉kubectl create clusterrole - 创建集群角色

kubectl create clusterrole NAME --verb=verb --resource=resource.group [--resource-name=resourcename] [--dry-run=server|client|none]

# 例子
kubectl create clusterrole pod-reader --verb=get,list,watch --resource=pods

👉kubectl create clusterrolebinding - 集群角色绑定

kubectl create clusterrolebinding NAME --clusterrole=NAME [--user=username] [--group=groupname] [--serviceaccount=namespace:serviceaccountname] [--dry-run=server|client|none]

# 例子
kubectl create clusterrolebinding cluster-admin --clusterrole=cluster-admin --user=user1 --user=user2 --group=group1

👉kubectl create configmap - 根据文件、目录或指定的文字值创建配置configmap

kubectl create configmap NAME [--from-file=[key=]source] [--from-literal=key1=value1] [--dry-run=server|client|none]

# 例子
kubectl create configmap my-config --from-file=path/to/bar
kubectl create configmap my-config --from-file=key1=/path/to/bar/file1.txt --from-file=key2=/path/to/bar/file2.txt
kubectl create configmap my-config --from-literal=key1=config1 --from-literal=key2=config2

kubectl create cronjob - 创建cronjob

kubectl create cronjob NAME --image=image --schedule='0/5 * * * ?' -- [COMMAND] [args...]

kubectl create cronjob my-job --image=busybox --schedule="*/1 * * * *"

kubectl create deployment - 创建deployment

kubectl create deployment NAME --image=image -- [COMMAND] [args...]

# 例子
kubectl create deployment my-dep --image=busybox

kubectl create ingress - 创建ingress

kubectl create ingress NAME --rule=host/path=service:port[,tls[=secret]]

# 例子
kubectl create ingress simple --rule="foo.com/bar=svc1:8080,tls=my-cert"

kubectl create job - 创建job

kubectl create job NAME --image=image [--from=cronjob/name] -- [COMMAND] [args...]

# 例子
kubectl create job my-job --image=busybox

👉kubectl create namespace - 创建namespace

kubectl create namespace NAME [--dry-run=server|client|none]

# 例子
kubectl create namespace stonebird

kubectl create poddisruptionbudget - 使用指定的名称、选择器创建 pod

kubectl create poddisruptionbudget NAME --selector=SELECTOR --min-available=N [--dry-run=server|client|none]

# 例子
kubectl create poddisruptionbudget my-pdb --selector=app=rails --min-available=1
kubectl create pdb my-pdb --selector=app=nginx --min-available=50%

👉kubectl create priorityclass - 创建优先级

具有指定名称、值、globalDefault 和描述的

kubectl create priorityclass NAME --value=VALUE --global-default=BOOL [--dry-run=server|client|none]

# 例子
kubectl create priorityclass high-priority --value=1000 --description="high priority"
kubectl create priorityclass default-priority --value=1000 --global-default=true --description="default priority"

👉kubectl create quota - 创建资源配额

具有指定名称、硬限制和可选范围的

kubectl create quota NAME [--hard=key1=value1,key2=value2] [--scopes=Scope1,Scope2] [--dry-run=server|client|none]

# 例子
kubectl create quota my-quota --hard=cpu=1,memory=1G,pods=2,services=3,replicationcontrollers=2,resourcequotas=1,secrets=5,persistentvolumeclaims=10

👉kubectl create role - 使用单一规则创建角色

kubectl create role NAME --verb=verb --resource=resource.group/subresource [--resource-name=resourcename] [--dry-run=server|client|none]

# 例子
kubectl create role foo --verb=get,list,watch --resource=rs.extensions

👉kubectl create rolebinding - 角色绑定

kubectl create rolebinding NAME --clusterrole=NAME|--role=NAME [--user=username] [--group=groupname] [--serviceaccount=namespace:serviceaccountname] [--dry-run=server|client|none]

# 例子
kubectl create rolebinding admin --clusterrole=admin --user=user1 --user=user2 --group=group1
Create a role binding for a particular role or cluster role

👉kubectl create secret - 创建secret

kubectl create secret

# 例子
kubectl create secret docker-registry my-secret --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL
kubectl create secret docker-registry my-secret --from-file=.dockerconfigjson=path/to/.docker/config.json

kubectl create secret docker-registry - 创建docker-registry

用于pod拉取镜像

kubectl create docker-registry NAME --docker-username=user --docker-password=password --docker-email=email [--docker-server=string] [--from-file=[key=]source] [--dry-run=server|client|none]

# 例子
kubectl create secret docker-registry my-secret --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL

kubectl create secret generic - 根据文件、目录或指定的文字值创建secret

kubectl create generic NAME [--type=string] [--from-file=[key=]source] [--from-literal=key1=value1] [--dry-run=server|client|none]

# 例子
kubectl create secret generic my-secret --from-file=path/to/bar

kubectl create secret tls - 从给定的公钥/私钥对创建 secret TLS

kubectl create tls NAME --cert=path/to/cert/file --key=path/to/key/file [--dry-run=server|client|none]

# 例子
kubectl create secret tls tls-secret --cert=path/to/tls.cert --key=path/to/tls.key

👉kubectl create service - 创建service

kubectl create service

👉kubectl create service clusterip - 创建clusterip服务

kubectl create clusterip NAME [--tcp=<port>:<targetPort>] [--dry-run=server|client|none]

# 例子
kubectl create service clusterip my-cs --tcp=5678:8080
# handless 无头服务
kubectl create service clusterip my-cs --clusterip="None"

kubectl create service externalname - 创建指定名称服务

kubectl create externalname NAME --external-name external.name [--dry-run=server|client|none]

# 例子
kubectl create service externalname my-ns --external-name bar.com

👉kubectl create service loadbalancer - 创建loadbalancer 服务

kubectl create loadbalancer NAME [--tcp=port:targetPort] [--dry-run=server|client|none]

# 例子
kubectl create service loadbalancer my-lbs --tcp=5678:8080

👉kubectl create service nodeport - 创建nodeport服务

kubectl create nodeport NAME [--tcp=port:targetPort] [--dry-run=server|client|none]

# 例子
kubectl create service nodeport my-ns --tcp=5678:8080

👉kubectl create serviceaccount -创建具有指定名称的服务帐户

kubectl create serviceaccount NAME [--dry-run=server|client|none]

# 例子
kubectl create serviceaccount my-service-account

👉kubectl create token - 创建请求token

kubectl create token SERVICE_ACCOUNT_NAME

# 例子
kubectl create token myapp
kubectl create token myapp --namespace myns
kubectl create token myapp --duration 10m

👉kubectl get - 显示一个或多个资源

kubectl get [(-o|--output=)json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file|custom-columns|custom-columns-file|wide] (TYPE[.VERSION][.GROUP] [NAME | -l label] | TYPE[.VERSION][.GROUP]/NAME ...) [flags]

# 例子
# --raw k8s-api
kubectl get --raw=/api/v1/nodes/11.185.19.215/proxy/metrics/cadvisor

# yaml 转json
kubectl get -f pod.yaml -o json

# --wath 循环监听
kubectl get node -A --watch
函数 描述 示例 结果
text 纯文本 kind is {.kind} kind is List
@ 当前对象 {@} 与输入相同
. or [] 子运算符 {.kind}, {['kind']} or {['name\.type']} List
.. 递归下降 {..name} 127.0.0.1 127.0.0.2 myself e2e
* 通配符。获取所有对象 {.items[*].metadata.name} [127.0.0.1 127.0.0.2]
[start:end :step] 下标运算符 {.users[0].name} myself
[,] 并集运算符 {.items[*]['metadata.name', 'status.capacity']} 127.0.0.1 127.0.0.2 map[cpu:4] map[cpu:8]
?() 过滤 {.users[?(@.name=="e2e")].user.password} secret
range, end 迭代列表 {range .items[*]}[{.metadata.name}, {.status.capacity}] {end} [127.0.0.1, map[cpu:4]] [127.0.0.2, map[cpu:8]]
'' 引用解释执行字符串 {range .items[*]}{.metadata.name}{'\t'}{end} 127.0.0.1 127.0.0.2

使用 kubectl 和 JSONPath 表达式的示例:

# 例子
kubectl get pods -o json
kubectl get pods -o=jsonpath='{@}'
kubectl get pods -o=jsonpath='{.items[0]}'
kubectl get pods -o=jsonpath='{.items[0].metadata.name}'
kubectl get pods -o=jsonpath="{.items[*]['metadata.name', 'status.capacity']}"
kubectl get pods -o=jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.startTime}{"\n"}{end}'

kubectl run - 创建pod运行镜像

kubectl run NAME --image=image [--env="key=value"] [--port=port] [--dry-run=server|client] [--overrides=inline-json] [--command] -- [COMMAND] [args...]

👉kubectl expose - 将资源公开为k8s服务

pod (po), service (svc), replicationcontroller (rc), deployment (deploy), replicaset (rs)

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]

# 例子 
kubectl expose service nginx --port=443 --target-port=8443 --name=nginx-https

👉kubectl delete - 删除资源

按文件名、标准输入、资源和名称,或按资源和标签选择器删除资源

kubectl delete ([-f FILENAME] | [-k DIRECTORY] | TYPE [(NAME | -l label | --all)])

# 例子
# -f
kubectl delete -f ./pod.json

# stdin
cat pod.json | kubectl delete -f -

# -k yaml文件夹
kubectl delete -k dir

# -l 通过label删除
kubectl delete pods,services -l name=myLabel

# --force 立即删除
kubectl delete pod foo --force

app管理

👉kubectl apply - 将配置应用于资源

通过文件名或标准输入

kubectl apply (-f FILENAME | -k DIRECTORY)

kubectl apply edit-last-applied - 从默认编辑器配置资源

kubectl apply edit-last-applied (RESOURCE/NAME | -f FILENAME)

# 例子
kubectl apply edit-last-applied deployment/nginx

kubectl apply set-last-applied - 通过文件更新配置

一般使用 kubectl apply -f

kubectl apply set-last-applied -f FILENAME

# 例子
kubectl apply set-last-applied -f deploy.yaml
kubectl apply set-last-applied -f path/

kubectl apply view-last-applied - 查看最新的配置注释

kubectl apply view-last-applied (TYPE [NAME | -l label] | TYPE/NAME | -f FILENAME)

# 例子
kubectl apply view-last-applied deployment/nginx
kubectl apply view-last-applied -f deploy.yaml -o json

👉kubectl annotate - 更新注解

kubectl annotate [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]

# 例子
kubectl annotate --overwrite pods foo description='my frontend running nginx'

kubectl autoscale - 为资源自动扩缩副本

kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU]

# 例子
kubectl autoscale deployment foo --min=2 --max=10 --cpu-percent=80

kubectl debug - debug调试容器资源

kubectl debug (POD | TYPE[[.VERSION].GROUP]/NAME) [ -- COMMAND [args...] ]

# 例子
kubectl debug mypod -it --image=busybox --copy-to=my-debugger

👉kubectl diff - 对比pod与yaml的差异

 kubectl diff -f FILENAME
 
 # 例子
 cat service.yaml | kubectl diff -f -

👉kubectl edit - 修改编辑资源

kubectl edit (RESOURCE/NAME | -f FILENAME

kubectl kustomize - 定制k8s配置

kubectl kustomize DIR

👉kubectl label - 修改资源label

kubectl label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]

# 例子
kubectl label pods foo unhealthy=true

👉kubectl patch - 修改资源

kubectl patch (-f FILENAME | TYPE NAME) [-p PATCH|--patch-file FILE]

# 例子
kubectl patch pod valid-pod -p '{"spec":{"containers":[{"name":"kubernetes-serve-hostname","image":"new image"}]}}'

👉kubectl replace - 替换资源

用文件名或标准输入 一般用apply替换

kubectl replace -f FILENAME

kubectl rollout - 版本控制

👉kubectl rollout history - 查看历史版本

kubectl rollout history (TYPE NAME | TYPE/NAME) [flags]

# 例子
kubectl rollout history daemonset <daemonset-name>

👉kubectl rollout pause - 将资源标记为暂停

kubectl rollout pause RESOURCE

# 例子
kubectl rollout pause deployment/nginx

👉kubectl rollout restart - 重启资源

kubectl rollout restart RESOURCE

# 例子
kubectl rollout restart deployment/nginx

👉kubectl rollout resume - 恢复暂停的资源

kubectl rollout resume RESOURCE

# 例子
kubectl rollout resume deployment/nginx

👉kubectl rollout status - 显示资源状态

kubectl rollout status (TYPE NAME | TYPE/NAME) [flags]

# 例子
kubectl rollout status deployment/nginx

👉kubectl rollout undo - 回退到指定版本

kubectl rollout undo (TYPE NAME | TYPE/NAME) [flags]

# 例子
kubectl rollout undo daemonset <daemonset-name> --to-revision=<revision> 
#--to-revision 参数未指定,将选中最近的版本

👉kubectl scale - 设置资源副本数

为一个 Deployment、ReplicaSet 或 ReplicationController、statefulset设置一个新的规模尺寸值

kubectl scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME)

# 例子
kubectl scale --replicas=3 statefulset/web
kubectl scale --replicas=3 rs/foo
kubectl scale --replicas=3 deployment/mysql

kubectl set - 设置资源

👉kubectl set env - 更新pod上的环境变量

kubectl set env RESOURCE/NAME KEY_1=VAL_1 ... KEY_N=VAL_N

# 例子
kubectl set env deployment/registry STORAGE_DIR=/local

👉kubectl set image - 更新资源的现有容器镜像

kubectl set image (-f FILENAME | TYPE NAME) CONTAINER_NAME_1=CONTAINER_IMAGE_1 ... CONTAINER_NAME_N=CONTAINER_IMAGE_N

# 例子
kubectl set image deployment/nginx busybox=busybox nginx=nginx:1.9.1

👉kubectl set resources - 更新resources (CPU、内存)

为定义 pod 模板的任何资源指定计算资源要求(CPU、内存)。 如果一个 pod 被成功调度,它可以保证请求的资源量,但可能会达到其指定的限制。

kubectl set resources (-f FILENAME | TYPE NAME) ([--limits=LIMITS & --requests=REQUESTS]

# 例子
kubectl set resources deployment nginx -c=nginx --limits=cpu=200m,memory=512Mi
kubectl set resources deployment nginx --limits=cpu=0,memory=0 --requests=cpu=0,memory=0

kubectl set selector - 在资源上设置选择器

请注意,如果资源在调用“设置选择器”之前有一个,则新选择器将覆盖旧选择器

kubectl set selector (-f FILENAME | TYPE NAME) EXPRESSIONS [--resource-version=version]

👉kubectl set serviceaccount - 更新pod模板serviceaccount

kubectl set serviceaccount (-f FILENAME | TYPE NAME) SERVICE_ACCOUNT

# 例子
kubectl set serviceaccount deployment nginx-deployment serviceaccount1
kubectl set sa -f nginx-deployment.yaml serviceaccount1 --local --dry-run=client -o yaml

👉kubectl set subject - 更新角色绑定

或集群角色绑定中的用户、组或服务帐户

kubectl set subject (-f FILENAME | TYPE NAME) [--user=username] [--group=groupname] [--serviceaccount=namespace:serviceaccountname] [--dry-run=server|client|none]

# 例子
kubectl set subject clusterrolebinding admin --serviceaccount=namespace:serviceaccount1
kubectl set subject rolebinding admin --user=user1 --user=user2 --group=group1

kubect wait - 等待达到某种状态

kubectl wait ([-f FILENAME] | resource.group/resource.name | resource.group [(-l label | --all)]) [--for=delete|--for condition=available|--for=jsonpath='{}'=value]

# 例子
kubectl wait --for=condition=Ready pod/busybox1

app使用

kubectl attach - 连接到现有容器中运行的进程。

kubectl attach (POD | TYPE/NAME) -c CONTAINER

# 例子
kubectl attach mypod -c ruby-container -i -t

kubectl auth - 检查授权

kubectl auth

👉kubectl auth can-i - 检查是否允许操作

kubectl auth can-i VERB [TYPE | TYPE/NAME | NONRESOURCEURL]

# 例子
kubectl auth can-i create pods --all-namespaces
kubectl auth can-i list deployments.apps

👉kubectl auth reconcile - 绑定对象的规则

协调 RBAC 角色、角色绑定、集群角色和集群角色

kubectl auth reconcile -f FILENAME

# 例子
kubectl auth reconcile -f FILENAME
kubectl auth reconcile -f my-rbac-rules.yaml

👉kubectl cp - 复制文件

复制到容器 或者从容器复制

kubectl cp <file-spec-src> <file-spec-dest>

# 例子
kubectl cp /tmp/foo_dir <some-pod>:/tmp/bar_dir
kubectl cp /tmp/foo <some-pod>:/tmp/bar -c <specific-container>
kubectl cp <some-namespace>/<some-pod>:/tmp/foo /tmp/bar

👉kubectl describe - 显示资源详细信息

kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | -l label] | TYPE/NAME)

# 例子
kubectl describe pods/nginx
kubectl describe po -l name=myLabel

👉kubectl exec - 在容器中执行命令

# 单个命令不带参数可以不带 --
kubectl exec (POD | TYPE/NAME) [-c CONTAINER] [flags] -- COMMAND [args...]

# 例子
kubectl exec mypod -c ruby-container -it bash 
kubectl exec nginx -- nginx -T

👉kubectl logs - 查看容器日志

kubectl logs [-f] [-p] (POD | TYPE/NAME) [-c CONTAINER]

# 例子
kubectl logs -f nginx
kubectl logs --tail=20 nginx
kubectl logs --since=1h nginx

👉kubectl port-forward - 将本地端口转发到pod

一个或多个本地端口

kubectl port-forward TYPE/NAME [options] [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N]

# 例子
# Listen on ports 5000 and 6000 locally, forwarding data to/from ports 5000 and 6000 in the pod
kubectl port-forward pod/mypod 5000 6000

# Listen on port 8888 on all addresses, forwarding to 5000 in the pod
kubectl port-forward --address 0.0.0.0 pod/mypod 8888:5000

👉kubectl proxy - local代码k8s API

kubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix]

# 例子
# 默认8001
kubectl proxy --api-prefix=/ &

kubectl top - 显示资源(CPU/内存)使用情况

kubectl top

👉kubectl top node - 显示节点的资源(CPU/内存)使用情况

kubectl top node [NAME | -l label]

# 例子
kubectl top node # all node
kubectl top node NODE_NAME

👉kubectl top pod - 显示pod的资源(CPU/内存)使用情况

kubectl top pod [NAME | -l label]

# 例子
kubectl top pod # 默认default空间
kubectl top pod --namespace=NAMESPACE

集群管理

👉kubectl api-versions - 集群可用的api版本

kubectl api-versions

kubectl certificate - 修改证书资源

👉 kubectl certificate approve - 批准证书签名请求

kubectl certificate approve (-f FILENAME | NAME)

# 例子
kubectl certificate approve csr-sqgzp

👉 kubectl certificate deny - 拒绝证书签名请求

kubectl certificate deny (-f FILENAME | NAME)

# 例子
kubectl certificate deny (-f FILENAME | NAME)

👉kubectl cluster-info - 集群信息

kubectl cluster-info

👉kubectl cluster-info dump - 导出集群信息

kubectl cluster-info dump

# 例子
kubectl cluster-info dump --output-directory=/path/to/cluster-state

👉kubectl cordon - 将节点置为不可调度

kubectl cordon NODE

👉kubectl uncordon - 将节点置为可调度

kubectl drain NODE

👉kubectl drain - 安全清空node

kubectl drain NODE

# 例子
# 使用 --force,否则 drain 不会删除任何 pod。 如果一个或多个 pod 的管理资源丢失, --force 也将允许继续删除
kubectl drain foo --force

👉kubectl taint - 更新节点上的污点。

一个或多个node

kubectl taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 ... KEY_N=VAL_N:TAINT_EFFECT_N

# 例子
# Update node 'foo' with a taint with key 'dedicated' and value 'special-user' and effect 'NoSchedule' 
kubectl taint nodes foo dedicated=special-user:NoSchedule

# move from node 'foo' the taint with key 'dedicated' and effect 'NoSchedule' if one exists
kubectl taint nodes foo dedicated:NoSchedule-

# Remove from node 'foo' all the taints with key 'dedicated'
ubectl taint nodes foo dedicated-

设置和使用

kubectl alpha - alpha 功能

kubectl alpha

kubectl alpha events - 展示事件

但是我们会发现默认情况下 kubectl get events 并没有按照 events 发生的顺序进行排列,所以我们往往需要为其增加 --sort-by='{.metadata.creationTimestamp}' 参数来让其输出可以按时间进行排列。

这也是为何 Kubernetes v1.23 版本中会新增 kubectl alpha events

kubectl alpha events [--for TYPE/NAME] [--watch]

👉kubectl api-resources - 查看可用的API

kubectl api-resources

👉kubectl completion - 命令自动补全

kubectl completion SHELL

# 例子
# install bash-completion
source <(kubectl completion bash)

👉kubectl config - 修改 kubeconfig 文件

kubectl config current-context - 展示current-context

kubectl config current-context

kubectl config delete-cluster - 从 kubeconfig 中删除指定的集群

kubectl config delete-cluster NAME

# 例子
kubectl config delete-cluster minikube

kubectl config delete-context - 从 kubeconfig 中删除指定的context

kubectl config delete-context NAME

# 例子
kubectl config delete-context minikube

kubectl config delete-user - 从 kubeconfig 中删除指定的user

kubectl config delete-user NAME

# 例子
kubectl config delete-user minikube

kubectl config get-clusters - 显示 kubeconfig 中定义的集群

kubectl config get-clusters

kubectl config get-contexts - 显示 kubeconfig 文件中的一个或多个context

kubectl config get-contexts [(-o|--output=)name)]

# 例子
# List all the contexts in your kubeconfig file
kubectl config get-contexts

# one
kubectl config get-contexts my-context

kubectl config get-users - 显示 kubeconfig 中定义的用户

kubectl config get-users

kubectl config rename-context - 从 kubeconfig 文件重命名context

kubectl config rename-context CONTEXT_NAME NEW_NAME

kubectl config set - 在 kubeconfig 文件中设置单个值

kubectl config set PROPERTY_NAME PROPERTY_VALUE

# 例子
kubectl config set clusters.my-cluster.server https://1.2.3.4

kubectl config set-cluster - 在 kubeconfig 中设置集群

kubectl config set-cluster NAME [--server=server] [--certificate-authority=path/to/certificate/authority] [--insecure-skip-tls-verify=true] [--tls-server-name=example.com]

# 例子
# Set only the server field on the e2e cluster entry without touching other values
kubectl config set-cluster e2e --server=https://1.2.3.4

kubectl config set-context - 在 kubeconfig 中设置context

kubectl config set-context [NAME | --current] [--cluster=cluster_nickname] [--user=user_nickname] [--namespace=namespace]

# 例子
kubectl config set-context gce --user=cluster-admin

kubectl config set-credentials 在 kubeconfig 中设置用户

kubectl config set-credentials NAME [--client-certificate=path/to/certfile] [--client-key=path/to/keyfile] [--token=bearer_token] [--username=basic_user] [--password=basic_password] [--auth-provider=provider_name] [--auth-provider-arg=key=value] [--exec-command=exec_command] [--exec-api-version=exec_api_version] [--exec-arg=arg] [--exec-env=key=value]

# 例子
kubectl config set-credentials cluster-admin --client-key=~/.kube/admin.key

kubectl config unset - 在 kubeconfig 文件中取消设置单个值

kubectl config unset PROPERTY_NAME

# 例子
kubectl config unset contexts.foo.namespace

kubectl config use-context - 在 kubeconfig 文件中设置use-context

kubectl config use-context CONTEXT_NAME

# 例子
kubectl config use-context minikube

kubectl config view - 显示 kubeconfig 文件

kubectl config view

# 例子
kubectl config view
kubectl config view -o jsonpath='{.users[?(@.name == "e2e")].user.password}'

👉kubectl explain - 列出支持资源的字段

kubectl explain RESOURCE

# 例子
kubectl explain pods
kubectl explain pods.spec.containers

👉kubectl options - 打印所有命令继承的标志列表

kubectl options

👉kubectl plugin - 插件

kubectl plugin list - 列出用户 PATH 上所有可用的插件

kubectl plugin list

👉kubectl version - 版本信息

kubectl version

kubectl 配置文件

kubectl 通过读取配置文件信息与 kubernetes 集群交互,默认配置文件路径是 ~/.kube/config,内容可能如下:

$ cat ~/.kube/config
apiVersion: v1
clusters:
- cluster:
    certificate-authority: /Users/deyuandeng/.minikube/ca.crt
    server: https://192.168.99.100:8443
  name: minikube
contexts:
- context:
    cluster: minikube
    user: minikube
  name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
  user:
    client-certificate: /Users/deyuandeng/.minikube/apiserver.crt
    client-key: /Users/deyuandeng/.minikube/apiserver.key

这里有三个重要的顶级概念: clusters, userscontexts