Kubectl-命令详解

前言

  • kubectl 是 apiserver 的客户端工具,工作在 linux 命令行下,能够连接到 apiserver 上实现各种增、删、改、查等各种操作。

Linux 命令行通过 tab 键自动补全

  • Ubuntu 方法一
//创建脚本存储目录
mkdir /data/scripts -p

//使用 kubeadm 命令生成补全脚本
kubeadm completion bash > /data/scripts/kubeadm_completion.sh

//重新生效补全脚本(仅单次有效)
source /data/scripts/kubeadm_completion.sh

//编写系统环境变量
vim /etc/profile

...省略...
source /data/scripts/kubeadm_completion.sh

//重新生效系统环境变量
source /etc/profile
  • Ubuntu 方法二
source <(kubectl completion bash)

echo "source <(kubectl completion bash)" >> ~/.bashrc
  • Mac 方法
$ brew install bash-completion
$ source $(brew --prefix)/etc/bash_completion
$ source <(kubectl completion bash)

Kubectl 命令帮助简单说明

root@k8s-master1:~# kubectl -h
kubectl controls the Kubernetes cluster manager.

 Find more information at: https://kubernetes.io/docs/reference/kubectl/overview/

Basic Commands (Beginner): #基本命令,适用于新手
  create         #通过文件名或控制台输入,创建资源
  expose         #输入 replication controller,service 或者 pod,并将其暴露为新的 kubernetes service
  run            #在集群中使用指定镜像启动容器
  set            #设置对象的特定特性

Basic Commands (Intermediate): #基本命令集,适合有一定基础的人
  explain        #文档的参考资料
  get            #输出一个/多个资源
  edit           #使用默认编辑器,编辑服务器上定义的资源
  delete         #通过文件名、控制台输入、资源名或者 label selector 删除资源

Deploy Commands:
  rollout        #管理资源的转出
  scale          #为 Deployment, ReplicaSet 或者 Replication Controller 设置一个新的副本数大小
  autoscale      #自动调整 Deployment, ReplicaSet 或者 Replication Controller 的副本数大小

Cluster Management Commands: #集群管理相关的命令集
  certificate    #修改证书资源
  cluster-info   #显示集群信息
  top            #显示资源 (CPU/Memory/Storage) 使用方法。
  cordon         #将node标记为不可调度
  uncordon       #将node标记为可调度
  drain          #设定node进入维护模式
  taint          #设置一个或多个 node 为 taint

Troubleshooting and Debugging Commands: #故障检测及调试相关命令
  describe       #输出指定的一个或多个资源的详细信息
  logs           #输出 pod 中一个容器的日志
  attach         #连接到一个正在运行的容器
  exec           #在容器内部执行命令
  port-forward   #将本地端口转发到 pod
  proxy          #为 Kubernetes API server 启动代理服务器
  cp             #从容器中复制文件和目录
  auth           #检查授权

Advanced Commands: #高级命令
  diff           #比较实时版本和潜在应用版本
  apply          #通过文件名或标准输入对资源进行配置
  patch          #通过控制台输入更新资源中的字段
  replace        #用文件名或标准输入替换资源
  wait           Experimental: Wait for a specific condition on one or many resources.
  convert        #在不同的 API versions 之间转换配置文件
  kustomize      #从目录或远程 url 构建 kustomization 目标

Settings Commands: #设置相关命令
  label          #更新资源上的 label
  annotate       #更新资源上的 annotations
  completion     #输出当指定 shell 完成时的返回码 (bash or zsh)

Other Commands: #其他命令集
  api-resources  #在服务器上打印支持的 API resources
  api-versions   #在服务器上以 "组/版本" 的形式打印支持的 API version
  config         #修改 kubeconfig 配置文件
  plugin         Provides utilities for interacting with plugins (提供与插件交互的实用程序)
  version        #打印客户端和服务器端的版本信息

Usage: #使用格式
  kubectl [flags] [options]

Use "kubectl <command> --help" for more information about a given command. #各个子命令如何获取命令帮助
Use "kubectl options" for a list of global command-line options (applies to all commands). #查看命令的通用选项(所有命令)

Kubectl 常用操作的简单语法

Operation Description Syntax
annotate 为一个或多个资源添加注释 kubectl annotate (-f FILENAME
api-versions 列出支持的API版本 kubectl api-versions [flags]
apply 对文件或stdin的资源进行配置更改 kubectl apply -f FILENAME [flags]
attach 连接到一个运行的容器,既可以查看output stream,也可以与容器(stdin)进行交互 kubectl attach POD -c CONTAINER [-i] [-t] [flags]
autoscale 自动扩容/缩容由replication controller管理的一组pod kubectl autoscale (-f FILENAME
cluster-info 显示有关集群中master和services的终端信息 kubectl cluster-info [flags]
config 从file,stdin或指定label 选择器,names,resource选择器或resources中删除resources kubectl delete (-f FILENAME
describe 显示一个或多个resources的详细状态 kubectl describe (-f FILENAME
edit 使用默认编辑器编辑和更新服务器上一个或多个定义的资源 kubectl edit (-f FILENAME
exec 对pod中的容器执行命令 kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [– COMMAND [args…]]
explain 获取各种资源的文档。例如pod,node,services等 kubectl explain [–include-extended-apis=true] [–recursive=false] [flags]
expose 将 replication controller,service或pod作为一个新的Kubernetes service显示 kubectl expose (-f FILENAME
get 列出一个或多个资源 kubectl get (-f FILENAME
label 添加或更新一个或多个资源的flags kubectl label (-f FILENAME
logs 在pod中打印容器的日志 kubectl logs POD [-c CONTAINER] [–follow] [flags]
patch 使用strategic merge 补丁程序更新资源的一个或多个字段 kubectl patch (-f FILENAME
port-forward 将一个或多个本地端口转发到pod kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT […[LOCAL_PORT_N:]REMOTE_PORT_N] [flags]
proxy 在Kubernetes API服务器运行代理 kubectl proxy [–port=PORT] [–www=static-dir] [–www-prefix=prefix] [–api-prefix=prefix] [flags]
replace 从file或stdin替换资源 kubectl replace -f FILENAME
rolling-update 通过逐步替换指定的replication controller及其pod来执行滚动更新 kubectl rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] –image=NEW_CONTAINER_IMAGE
run 在集群上运行指定的镜像 kubectl run NAME –image=image [–env="key=value"] [–port=port] [–replicas=replicas] [–dry-run=bool] [–overrides=inline-json] [flags]
scale 更新指定replication controller的大小 kubectl scale (-f FILENAME
stop 已弃用 kubectl stop
version 显示客户端和服务器上运行的Kubernetes版本 kubectl version [–client] [flags]

英文缩写

英文缩写
clusters (仅对federation apiservers有效)
componentstatuses (缩写 cs)
configmaps (缩写 cm)
daemonsets (缩写 ds)
deployments (缩写 deploy)
endpoints (缩写 ep)
events (缩写 ev)
horizontalpodautoscalers (缩写 hpa)
ingresses (缩写 ing)
jobs
limitranges (缩写 limits)
namespaces (缩写 ns)
networkpolicies
nodes (缩写 no)
persistentvolumeclaims (缩写 pvc)
persistentvolumes (缩写 pv)
pods (缩写 po)
podsecuritypolicies (缩写 psp)
podtemplates
replicasets (缩写 rs)
replicationcontrollers (缩写 rc)
resourcequotas (缩写 quota)
secrets
serviceaccounts (缩写 sa)
services (缩写 svc)
statefulsets
storageclasses
thirdpartyresources

Kubectl 获取资源属性

  • 获取 pod 的 ip
  • 其中我们通过 -l app=naftis-ui 用于匹配 pod,在 jsonpath 中指定要获取的资源属性
kubectl -n naftis get pod -l app=naftis-ui -o jsonpath='{.items[0].status.podIP}'

Kubectl 同时管理多个集群

  • 如果我们有多个集群,那我们就有多个 config 文件。如果切换需要替换 config 文件,这比较麻烦,我们可以在一个 config 文件里面把多个集群配置在一起。

  • 比如我们有两个 config 文件,分别如下

  • 文件一

current-context: "contexts1"

apiVersion: v1
kind: Config
clusters:
- name: "cluster1"
  cluster:
    server: "xxxxxxxxxxxxxxxxx"
    api-version: v1
    certificate-authority-data: "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"

users:
- name: "user1"
  user:
    token: "xxxxxxxxxxxxxxxx"

contexts:
- name: "contexts1"
  context:
    user: "user1"
    cluster: "cluster1"
  • 文件二
current-context: "contexts2"

apiVersion: v1
kind: Config
clusters:
- name: "cluster2"
  cluster:
    server: "xxxxxxxxxxxxxxxxx"
    api-version: v1
    certificate-authority-data: "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"

users:
- name: "user2"
  user:
    token: "xxxxxxxxxxxxxxxx"

contexts:
- name: "contexts2"
  context:
    user: "user2"
    cluster: "cluster2"
  • 我们可以手动将两个文件合并成一个
current-context: "contexts3"

apiVersion: v1
kind: Config
clusters:
- name: "cluster1"
  cluster:
    server: "xxxxxxxxxxxxxxxxx"
    api-version: v1
    certificate-authority-data: "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
- name: "cluster2"
  cluster:
    server: "xxxxxxxxxxxxxxxxx"
    api-version: v1
    certificate-authority-data: "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"

users:
- name: "user1"
  user:
    token: "xxxxxxxxxxxxxxxx"
- name: "user2"
  user:
    token: "xxxxxxxxxxxxxxxx"

contexts:
- name: "contexts1"
  context:
    user: "user1"
    cluster: "cluster1"
- name: "contexts2"
  context:
    user: "user2"
    cluster: "cluster2"
  • 这样我们就可以通过命令切换集群
kubectl config use-context contexts1/contexts2
点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注