Kubernetes之kubectl认识

kubectl概述&操作示范

kubectl是k8s集群的命令行工具,通过kubect能够实现对集群本身进行管理维护

  • kubectl是对集群本身进行管理维护的,默认只对master节点开放,如果现在其他node节点上运行

    1. 将 master 节点中 /etc/kubernetes/admin.conf 拷贝到需要运行的服务器的 /etc/kubernetes 目录中

    2. 在对应的服务器上配置环境变量

- echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
- source ~/.bash_profile

资源操作

创建对象

$ kubectl create -f ./test.yaml                  # 创建资源
$ kubectl create -f ./test1.yaml -f ./test2.yaml # 使用多个文件创建资源
$ kubectl create -f ./test                       # 使用目录下的所有清单文件来创建资源
$ kubectl create -f https://test.io/test.yaml    # 使用 url 来创建资源
$ kubectl run nginx --image=nginx                # 启动一个 nginx 实例
$ kubectl explain pods,svc                       # 获取 pod 和 svc 的文档

显示和查找资源

$ 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'
​
# 列出当前 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 deployment/test                        # 更到名为test的deployment副本数为3
$ kubectl scale --replicas=3 -f test.yaml                           # 
$ kubectl scale --current-replicas=2 --replicas=3 deployment/mysql  # 
$ kubectl scale --replicas=5 rc/foo rc/bar rc/baz                   #

删除资源

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

与运行状态的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和容器的指标度量

与集群和节点交互

$ 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

格式化输出

$ kubectl ... -o json    # 输出Json格式
$ kubectl ... -o name    # 仅打印资源名称
$ kubectl ... -o wide    # 以纯文本格式输出所有信息
$ kubectl ... -o yaml    # 输出yaml格式

kubectl --help

  • 键入 kubectl --help:看到如下信息

Basic Commands (Beginner):
  create        Create a resource from a file or from stdin.
  expose        使用 replication controller, service, deployment 或者 pod 并暴露它作为一个新的 Kubernetes
Service
  run           在集群中运行一个指定的镜像
  set           为 objects 设置一个指定的特征
​
Basic Commands (Intermediate):
  explain       查看资源的文档
  get           显示一个或更多 resources
  edit          在服务器上编辑一个资源
  delete        Delete resources by filenames, stdin, resources and names, or by resources and label selector
​
Deploy Commands:
  rollout       Manage the rollout of a resource
  scale         Set a new size for a Deployment, ReplicaSet or Replication Controller
  autoscale     自动调整一个 Deployment, ReplicaSet, 或者 ReplicationController 的副本数量
​
Cluster Management Commands:
  certificate   修改 certificate 资源.
  cluster-info  显示集群信息
  top           Display Resource (CPU/Memory/Storage) usage.
  cordon        标记 node 为 unschedulable
  uncordon      标记 node 为 schedulable
  drain         Drain node in preparation for maintenance
  taint         更新一个或者多个 node 上的 taints
​
Troubleshooting and Debugging Commands:
  describe      显示一个指定 resource 或者 group 的 resources 详情
  logs          输出容器在 pod 中的日志
  attach        Attach 到一个运行中的 container
  exec          在一个 container 中执行一个命令
  port-forward  Forward one or more local ports to a pod
  proxy         运行一个 proxy 到 Kubernetes API server
  cp            复制 files 和 directories 到 containers 和从容器中复制 files 和 directories.
  auth          Inspect authorization
​
Advanced Commands:
  diff          Diff live version against would-be applied version
  apply         通过文件名或标准输入流(stdin)对资源进行配置
  patch         使用 strategic merge patch 更新一个资源的 field(s)
  replace       通过 filename 或者 stdin替换一个资源
  wait          Experimental: Wait for a specific condition on one or many resources.
  convert       在不同的 API versions 转换配置文件
  kustomize     Build a kustomization target from a directory or a remote url.
​
Settings Commands:
  label         更新在这个资源上的 labels
  annotate      更新一个资源的注解
  completion    Output shell completion code for the specified shell (bash or zsh)
​
Other Commands:
  alpha         Commands for features in alpha
  api-resources Print the supported API resources on the server
  api-versions  Print the supported API versions on the server, in the form of "group/version"
  config        修改 kubeconfig 文件
  plugin        Provides utilities for interacting with plugins.
  version       输出 client 和 server 的版本信息
​
Usage:
  kubectl [flags] [options]

kubectl 命令分类总结

基础命令

基础命令解释
create 通过文件名或标准输入创建资源
expose 将一个资源公开为一个新的Service
run 在集群中运行一个特定的镜像
get 显示一个或者多个资源
set 在对象上设置特定的功能
explain 文档参考资料
edit 使用默认的编辑器编辑一个资源
delete 通过文件名、标准输入、资源名称,或标签来删除资源

部署命令

部署命令解释
rollout 管理资源的发布
rolling-update 对给定的复制控制器滚动更新
scale 扩容或者缩绒pod数量、Deployment、ReplicaSet、RC、Job
autoscale 创建一个自动进行扩容和缩容并设置Pod数量

集群管理命令

集群管理命令解释
certificate 修改证书资源
cluster-info 显示集群信息
top 显示资源使用,需要Heapster运行
cordon 标记节点不可被调度
uncordon 标记几点可被调度
drain 驱逐姐弟啊上的应用,准备下线维护
taint 修改节点taint标记

故障和调试命令

故障和调试命令解释
describe 显示特定资源胡资源组的详细信息
logs 在一个pod中打印一个容器日志,如果pod只有一个容器,容器名称是可选的
attach 附加到一个运行的容器
exex 执行命令到容器
port-forward 转发一个多或多个本地端口到pod
proxy 运行一个proxy到kubenetes API Server
cp 拷贝文件或目录到容器中
auth 检查授权

其他命令

其他命令解释
apply 通过文件名或者标准输入对资源应用配置
patch 使用补丁修改,更新资源字段
replace 通过文件名或标准输入替换一个资源
convert 不同的API版本之间转换配置文件
label 更新资源上的标签
annotate 更新资源上的注释
completion 用于实现kucectl工具自动补全
api-versions 打印受支持的API版本
config 修改kubeconfig文件,用于访问API,比如配置认证信息
help 所有帮助命令
plugin 运行一个命令行插件
version 打印客户端和服务版本信息

.

 

posted @ 2021-01-16 18:06  鞋破露脚尖儿  阅读(570)  评论(0编辑  收藏  举报