kubectl命令行管理工具

kubectl 就是 kube-apiserver 的客户端程序,是通过连接 master 节点的 apiserver 上实现各种 k8s 相关对象资源的增删改查

k8s 可管理对象资源:

资源分类资源名称缩写资源作用
集群级别资源nodesno集群组成部分
namespacesns隔离 pod
pod资源podspo装载容器
pod资源控制器ReplicationControllerrc比较原始的 pod 控制器,已经被废弃,由 ReplicaSet 替代
replicasetsrs保证副本数量一直维持在期望值,并支持 pod 数量扩缩容,镜像版本升级
deploymentsdeploy通过控制 ReplicaSet 来控制 Pod,并支持滚动升级、回退版本(如:nginx、tomcat)
daemonsetsds在集群中的指定 Node 上运行且仅运行一个副本,一般用于守护进程类的任务
比如收集日志进程 filebeat、监控进程 node-exporter
jobs它创建出来的 pod 只要完成任务就立即退出,不需要重启或重建,用于执行一次性任务(比如一次性计算类任务)
cronjobscj它创建的 Pod 负责周期性任务控制,不需要持续后台运行(比如每天的定时备份)
horizontalpodautoscalershpa可以根据集群负载自动水平调整 Pod 的数量,实现削峰填谷
statefulsetssts管理有状态应用(如:redis mysql nacos es zookeeper mq MongoDB Sentinel)
服务发现资源servicessvc四层代理,统一 pod 对外接口
ingressing七层代理,统一 pod 对外接口
存储资源volumeattachments存储
persistentvolumespvPV(Persistent Volume):持久化卷
persistentvolumeclaimspvcPVC(Persistent Volume Claim):持久卷声明
配置资源configmapscm配置文件
secretssecrets秘钥文件

1 基础命令

命令描述
create通过文件或 stdin(标准输入)创建资源
kubectl create deployment my-test --image=busybox
expose将rs、service、deploy 或 pod 发布出来
kubectl expose deployment dev-dmp --port=8000 --target-port=80 --type=ClusterIP
run在集群中运行一个指定的镜像
set在对象上设置特定的功能
get显示一个或多个资源
-n namespace:指定命名空间
-A:显示所有的命名空间中的对象(生产中慎用)kubectl get pod -A -o wide
示例:
kubectl -n kube-system get po -o wide
kubectl -n kube-system get po -o name
kubectl -n kube-system get po -o json
kubectl -n kube-system get deploy dev-nginx -o yaml
kubectl -n kube-system get svc
kubectl -n kube-system get po -l app=auto
kubectl get ns
kubectl -n logs get ds
kubectl -n logs get sts
explain文档的参考资料
kubectl explain deployment.spec.template.spec.imagePullSecrets
edit在服务器上使用默认的编辑器编辑一个资源
例1:修改名字为 nginx-svc 的 service:kubectl edit svc nginx-svc
例2:修改名字为 nginx-dep 的 deployment:kubectl edit deploy nginx-dep
edit 编辑修改配置文件后,不需要重启服务,改完后即可生效
delete按文件名、标准输入、资源名称或标签选择器删除资源

2 部署命令

命令描述
rollout管理资源的回滚
kubectl rollout pause deploy/myapp-v1 -n ml
kubectl rollout resume deploy/myapp-v1 -n ml
rolling-update对给定的复制控制器滚动更新
scale为部署、副本集、复制控制器或作业设置新大小,即手动改变应用程序的规模(size)
扩容或缩容 Pod 数量,Deployment、ReplicaSet、RC 或 Job
kubectl scale deployment ngx-1 -n test --replicas=3
autoscale创建一个自动选择扩容或缩容并设置 Pod 数量
自动伸缩部署、副本集或副本控制器,即自动改变应用程序的规模

3 集群管理命令

命令描述
certificate修改证书资源
cluster-info显示集群信息
kubectl cluster-info
top显示资源(CPU/Memory/Storage)使用,需要 Heapster 运行
kubectl top node
kubectl top pod -n bi
cordon将节点标记为不可调度
kubectl cordon node名字
uncordon将节点标记为可调度
kubectl uncordon node名字
drain驱逐节点上的应用,准备下线维护
kubectl drain node名字 --delete-local-data --ignore-daemonsets --force
taint更新一个或多个节点上的污点,和高级调度相关的,给节点增加污点后,
能容忍污点的pod就可以调度上来,否则就不能调度上来
其实当前的master就有很多污点,这也就是为什么很多创建的pod不会调度到master上,
因为默认创建的所有pod都无法容忍master的污点,
这样确保了master只运行apiserver、controller-manager、schedulable和etcd等几个重要的系统级资源
示例:kubectl taint nodes node1 key=xsj:NoSchedule

4 故障诊断和调试命令

命令描述
describe显示特定资源或资源组的详细信息
kubectl describe pod pod名字
kubectl describe node node名字(可以查看污点等信息)
kubectl describe deploy deploy名字
kubectl describe cm configMap名字
logs在一个 Pod 中打印一个容器日志,如果 Pod 只有一个容器,容器名称是可选的
如果 Pod 有两个以上的容器,需要添加 -c 参数指定容器名称
attach附加到正在运行的 pod 上,实时查看 pod 消息
exec在 pod 中执行命令
kubectl exec -it nginx-xxx -n web -- /bin/bash
port-forward将一个或多个本地端口转发到一个 pod
proxy运行 Kubernetes API 服务器的代理
运行一个 proxy 到 Kubernetes API Server
cp从 pod 中复制文件和目录,或者向 pod 中拷贝文件
auth检查授权
debug调试,对 pod 和 node 进行故障排除

5 高级命令

命令描述
diff区分实时版本和潜在应用版本
apply通过文件名或标准输入创建(更改)配置信息
示例:kubectl apply -f test-deploy.yaml
示例:kubectl apply -f test-deploy.yaml --dry-run
patch使用策略合并补丁部分更新资源的相关信息
replace通过文件名或标准输入,使用 yaml 配置文件来替换正在运行中的配置参数
convert在不同的 API 版本之间转换配置文件
wait实验性:在一个或多个资源上等待特定条件
kustomize从目录或URL构建 kustomization 目标

6 设置命令

命令描述
label更新资源上的标签,注意:lable 有长度限制
示例:kubectl label nodes node1 airflow=true
annotate更新资源上的注释,注释没有长度限制,可以打上任何的 kv 数据
completion用于实现 kubectl 工具自动补全,指定shell的输出shell完成代码(bash 或 zsh)

7 其他命令

命令描述
api-resources在服务器上打印支持的API资源
kubectl api-resources
api-versions在服务器上以“组/版本”的形式打印支持的 API 版本
kubectl api-versions
config修改 kubeconfig 文件(用于访问 API,比如配置认证信息)
kubectl config -h
示例:https://blog.csdn.net/weixin_56752399/article/details/124374683?spm=1001.2014.3001.5501
help关于任何命令的帮助
kubectl logs -h
plugin运行一个命令行插件
version打印客户端和服务器版本信息kubectl version
打印 kube-controller-manager 版本信息kube-controller-manager --version
kubectl version

8 排查 Pod 异常的常用命令:

查看 Pod 状态

kubectl get pods <pod-name> -n <namespace> -o wide

查看 Pod 的 yaml 配置

kubectl get pods <pod-name> -n <namespace> -o yaml

查看 pod 的事件

kubectl describe pods <pod-name> -n <namespace>

查看 node 的事件

kubectl describe node <node-name> -n <namespace>

查看 deploy 的事件

kubectl describe deploy <deploy-name> -n <namespace>

查看 Pod 容器日志

kubectl logs -n <namespace> <pod-name> [-c <container-name>]

# 可以 tailf 该 Pod 的日志观察进度
kubectl logs -f -n kube-system kibana-logging-7445dc9757-pvpcv 

查看 kube-system 命名空间下的所有服务

kubectl get svc -n kube-system

在 pod 中执行一条命令

kubectl exec -it nginx-xxxx -n web /bin/bash 
cat /etc/nginx.conf
# 或者直接查看
kubectl exec -it nginx-xxxx -n web cat /etc/nginx.conf

从 nginx-xxxx 的 pod 中将数据拷贝到物理机的 /tmp/ 中

kubectl cp nginx-xxxx:/etc/nginx.conf /tmp/
# 如果拷贝失败,请检查是否安装 tar 包,如果没有请安装
kubectl exec -it nginx-xxxx -n web /bin/bash 
yum -y install tar # 可能需要修改 yum 源

从物理机的 /tmp/test.conf 中将数据拷贝到 nginx-xxxx 的 pod 中

kubectl cp /tmp/test.conf nginx-xxxx:/tmp/

9 pod排错步骤:

查看 kube-system 命名空间下的所有pod状态

kubectl -n kube-system get pods 
kubectl -n kube-system get pods -o wide(显示IP信息和运行的node信息)

查看pod的事件

kubectl -n kube-system describe pod metrics-server-v0.2.1-5988c5d6b8-8x4l2 

查看pod metrics-server-v0.2.1-5988c5d6b8-8x4l2,容器名是metrics-server的日志,因为metrics-server-v0.2.1-5988c5d6b8-8x4l2有两个容器

kubectl -n kube-system logs metrics-server-v0.2.1-5988c5d6b8-8x4l2 metrics-server 
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值