# Kubernetes常用命令

# 基础命令

命令 描述
create 通过文件名或标准输入创建资源
expose 为Deployment,Pod创建Service
run 在集群中运行一个特定的镜像
set 在对象上设置特定的功能
explain 文档参考资料
get 显示一个或多个资源
edit 使用系统编辑器编辑一个资源。
delete 通过文件名、标准输入、资源名称或标签选择器来删除资源。

# 部署类命令

命令 描述
rollout 管理Deployment,Daemonset资源的发布(例如状态、发布记录、回滚等)
rolling-update 滚动升级,仅限ReplicationController
scale 对Deployment、ReplicaSet、RC或Job资源扩容或缩容Pod数量
autoscale 为Deploy, RS, RC配置自动伸缩规则(依赖metrics-server和hpa)

# 集群管理命令

命令 描述
certificate 修改证书资源
cluster-info 显示集群信息
top 查看资源利用率(依赖metrics-server)
cordon 标记节点不可调度
uncordon 标记节点可调度
drain 驱逐节点上的应用,准备下线维护
taint 修改节点taint标记

# 命令补全【重要且方便】

# 下载依赖包
yum install bash-completion

source <(kubectl completion bash)

# 让补全生效
bash
source <(kubectl completion bash)

# 查看类命令

  • kubectl cluster-info ---- 查看集群信息
  • kubectl -s http://localhost:8080 get componentstatuses ---- 查看各组件信息
  • kubectl get pods ---- 列出当前所有的pod
  • kubectl get pods -o wide ---- 查看pods所在的运行节点
  • kubectl get pods -o yaml ---- 查看pods定义的详细信息
  • kubectl get pods [可选pod名称] -w ---- 实时跟踪pod状态
  • kubectl get pods --show-labels ---- 查看pods有哪些标签
  • kubectl get pods -l key:value ---- 根据标签查询含有标签的资源
  • kubectl get pod -o wide ---- 查看pod被分配到了哪个节点上
  • kubectl describe pods [pod名称] ---- 根据标签查询含有标签的资源
  • kubectl get rc ---- 查看Replication Controller信息
  • kubectl get service ---- 查看service的信息
  • kubectl get nodes ---- 查看节点信息
  • kubectl describe nodes [node名称] ---- 查询node节点配置
  • kubectl get pod --selector name=redis ---- 按selector名来查找pod
  • kubectl exec [pod] env ---- 查看运行的pod的环境变量
  • kubectl get deployment ---- 查看所有控制器
  • kubectl get ep ---- 查看deployment的pod列表
  • kubectl describe node <node名称> ---- 查询node的资源占用情况和已分配情况

# 操作类命令

  • kubectl create -f 文件名 ---- 创建

  • kubectl replace -f 文件名  [--force] ---- 重建

  • kubectl delete -f 文件名

  • kubectl delete pod pod名

  • kubectl delete deployment deployment名 ---- 删除指定控制器

  • kubectl delete rc rc名

  • kubectl delete service service名

  • kubectl delete pod --all

  • kubectl delete deployments mybusybox ---- 删除创建的pod

  • kubectl run mybusybox --image=busybox ---- 启动一个pod

  • kubectl run mybusybox --image=busybox --replicas=5 ---- 启动多个pod

  • kubectl run mynginx --image=nginx --port=80 --hostport=8000 ---- 创建带有端口映射的pod

  • kubectl run -i --tty busybox --image=busybox ---- 创建带有终端的pod

  • kubectl edit svc service名称 ---- 编辑service

  • kubectl label nodes <node名称> key=value ---- 给node打标签

  • kubectl get node --show-labels ---- 查询node的所有标签

  • kubectl get node -l key=value ---- 根据标签筛选node

  • kubectl taint node [node名称] key=value:[effect] ---- 设置污点

  • kubectl taint node [node名称] key=value:[effect]- ---- 移除污点

    其中effect的可选值

    1. NoSchedule: 一定不能被调度
    2. PreferredNoSchedule: 尽量不要调度
    3. NoExecute: 不仅不会被调度,还会驱逐node上的pod

# 示例

# 通过命令生成一个带有基本格式的yaml文件(以nginx为例)

  • 格式:kubectl run [pod名称] --image=[镜像名称] --dry-run=client -o yaml > [生成的yaml文件名称前缀].yaml
kubectl run nginx --image=nginx --dry-run=client -o yaml > pod.yaml

# 导出镜像

docker save -o xx.tar nginx:latest
  • xx.tar 导出的jar名称
  • nginx:latest 镜像:tag, 这里以nginx最新的镜像为例

# 导入镜像

  • docker
docker load -i xx.tar
  • containerd
ctr image import xx.tar
  • 导入镜像后, 自动识别镜像名称和tag信息

# 修改镜像

在k8s重新部署的过程中, 我遇到了一个问题,就是修改镜像源后,registry.aliyuncs.com/google_containers/coredns/coredns:v1.8.0找不到,阿里云上面没有这个镜像。折腾了半天,下载了1.7.0的镜像,导出,导入,一顿操作猛如虎,结果切换容器引擎到containerd之后,这种方式居然不工作。 就想找一找有没有更简单的方式修改镜像,因为registry.aliyuncs.com/google_containers/coredns:1.7.0这个镜像是有的,也是可使用的。期间有人建议我修改kubelet的二进制文件,想想就很麻烦, 就想找一个更简单的方式,果然遇事不决找度娘就很好。

kubectl -n kube-system edit deploy/coredns

执行这个命令后,就会在image栏发现我们要修改的镜像名称,改成registry.aliyuncs.com/google_containers/coredns:1.7.0即可,退出后自动生效。

....
    spec:
      containers:
      - args:
        - -conf
        - /etc/coredns/Corefile
        image: registry.aliyuncs.com/google_containers/coredns:1.7.0
....
Last Updated: 3/30/2022, 5:47:50 PM