网站首页 > 博客文章 正文
通过kubectl命令可以操作和管理K8S资源,对于初学者可以在掌握K8S基础命令的基础上再去学习K8s的原理和架构,那么K8S常用的命令有哪些呢?
01
K8S命令概述
在学习K8s基础命令前,了解和学习docker命令是很有必要的,kubectl和docker很多命令都有相通之处
docker ps #查看所有up状态容器
docker ps -a #查看所有状态的容器
docker inspect containerid #查看容器详情
docker images #查看容器镜像
docker start/stop/restart containerid #启动/停止/重启容器
docker exec -it containerid bash #进入容器
docker exec containerid bash -c 'uptime' #容器外执行命令
docker rmi imageid #删除镜像
docker rm containerid #删除容器
- K8S常用命令
02
K8S集群资源操作
- 集群资源查看
kubectl get cs #集群健康情况
kubectl version #K8S集群版本查看
kubectl get node #查看集群节点
kubectl get pods -o wide -A #查看所有命命空间pod
-n #后跟指定命名空间
--all-namespaces #等同于-A
kubect get deployments -A
kubectl get svc,ep -A #查看svc和endpoints
- 标签查看
kubectl get pod --show-labels #查看pod标签
kubectl get node --show-labels #查看node标签
- 资源配置查看
查看配置
kubectl get deployments.apps nginxtest-xxx -oyaml #查看deployment资源
kubectl get pods nginxtest-xxx -oyaml #查看pod资源配置
- 资源限制
查看是否有资源限制
kubectl describe node 192.168.1.2
Capacity:
cpu: 16
ephemeral-storage: 524030980Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 82320508Ki
pods: 253
Allocatable:
cpu: 15100m
ephemeral-storage: 520373252Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 79101052Ki
pods: 253
capacity代表减去系统预留的资源总量
Allocatable可分配给K8S资源的总量
pod资源限制,防止单个服务占用资源过高影响其他pod,达到limits数值后会oom重启
kubectl get pods nginx-test -oyaml | grep -A 6 resources
resources:
limits:
cpu: "5"
memory: 5000Mi
requests:
cpu: 55m
memory: 100Mi
kubectl --help 多用help
03
K8S运维场景
- 副本扩容
通过副本扩容实现流量分摊,避免单个节点负载过高,建议资源中增加反亲和性,达到不同副本调度到不同node
kubectl scale deployment nginx-test --replicas=2 #副本扩容
kubectl edit deployment nginx-test #直接编辑修改spec.replicas标签扩容
- 进入pod
kubectl exec -it podname bash #或者sh
-n 指定名字空间
kubectl exec nginx-965048598-jt28d -n test uptime #不进入容器,只获取命令输出
- pod删除操作
kubectl delete pods nginx-test-6fc6d8666b-mhl48 #常规删除
kubectl delete pod -l app=test #基于标签删除,批量操作效率高
kubectl delete pods nginx-test -n dev --grace-period=0 --force #强制删除,没有terminationGracePeriodSeconds 30s的时间
还可以通过kubectl scale命令将副本缩为0的方式删除pod
- pod污点
对于设置了污点的服务,普通pod无法调用到此节点,只有增加了Tolerations容忍配置才可以
[root@wpseco-node-1 log]# kubectl describe node 192.168.0.1 | grep Taints
Taints: <none>
kubectl taint node 192.168.0.1 test-access-node=:NoSchedule --overwrite=true #污点添加
kubectl taint node 192.168.0.1 test-access-node:NoSchedule- #污点删除
其中[effect] 可取值:
NoSchedule :一定不能被调度(新来的不要来,在这的就别动了)
PreferNoSchedule:尽量不要调度(尽量不要来,除非没办法)
NoExecute:不仅不会调度,还会驱逐Node上已有的Pod
- pod文件拷贝
kubectl cp my_item.tar.gz redis-6c98cb5b5f-nxb59:/tmp/ #宿主机拷贝到容器内
kubectl cp redis-6c98cb5b5f-nxb59:/tmp/start.sh ./start.sh #pod内文件拷贝到宿主机
- 静态pod
静态pod 是由 kubelet 管理的,只在特定node上存在的pod;静态pod总是由kubelet创建的,并且只在kubelet所在的Node上运行。静态pod 不能通过 api-server来管理,无法和 RC,RS,Deployment或者 DaemonSet进行关联;并且 kubelet无法对静态pod 进行健康检查
静态pod资源文件默认存放路径/etc/kubernetes/manifests,也可以直接查看kubelet启动参数staticPodPath: /etc/kubernetes/manifests配置确定
kubectl exec -it kafka-1-192.168.0.1 -c kafka sh #进入静态pod
-c #po有多个容器要加-c指定
kubectl logs kafka-1-192.168.0.1 -c kafka
04
K8S问题定位
处理K8S环境问题,首先要了解pod的生命周期和pod的状态
常见状态原因
- ImagePullBackOff 镜像拉取失败,网络不通,镜像名称有误或者镜像仓库认证失败都可能有这个报错
- CrashLoopBackOff 探针检测失败,服务对网络或者其他pod服务有依赖等,此外宿主机上的安全软件可能也会导致容器无法正常启动
- Pending 一般是调度失败,pod没有可调度的节点,常见原因:节点有污点,不满足节点亲和性,或者节点处于notready状态
- Evicted 当节点内存、磁盘或者cpu资源不足时,K8s 会按照 QoS 等级对节点上的某些 Pod 进行驱逐,释放资源保证节点可用性,kubelet可以配置内存,cpu和磁盘的驱逐阈值
- Terminating pod删除后超过terminationGracePeriodSeconds参数时间还处于Terminating状态可能是存在节点故障,和master节点失联,可以检查节点状态或者尝试重启kubelet
- Completed 此状态通常是job类的pod执行完成了正常退出容器
- Init:Error pod初始化失败,可以查看init pod的日志定位
问题定位经常需要使用如下命令
kubectl logs -f podname
kubectl logs -f -l app=nginx-test #多副本情况下,可以看到所有pod日志
kubectl describe pods podname #pod启动日志
kubectl describe node 192.168.0.1 #节点状态日志
kubectl get events #查看集群事件
系统服务查看
systemctl status kubelet/docker/etcd
系统服务日志查看
journalctl -xeu kubelet/docker
--since指定时间
- K8S学习资料
https://kubernetes.io/zh-cn/docs/home/
大波小阳人来袭,组内2/3人员已经沦陷了,各位小伙伴注意防护哦,多喝热水。
猜你喜欢
- 2024-09-11 K8S从懵圈到熟练 - 我们为什么会删除不了集群的命名空间?
- 2024-09-11 从零开始入门 K8s | Kubernetes 存储架构及插件使用
- 2024-09-11 「云原生」Spark on k8s 讲解与实战操作
- 2024-09-11 K8S扫盲什么是云?什么是云架构?什么是云原生?什么是K8S?
- 2024-09-11 K8S | 核心原理分析(k8s原理图)
- 2024-09-11 《深入浅出Prometheus》 原理、应用、源码与拓展详解
- 2024-09-11 Kubernetes原理最全详解(图文全面总结)
- 2024-09-11 Kubernetes(k8s)CNI(flannel)网络模型原理
- 2024-09-11 「云原生」k8s 中的 hostNetwork 和 NetworkPolicy 讲解与实战操作
- 2024-09-11 「云原生」Kubernetes(k8s)最完整版环境部署(V1.24.1)
你 发表评论:
欢迎- 06-23MySQL合集-mysql5.7及mysql8的一些特性
- 06-23MySQL CREATE TABLE 简单设计模板交流
- 06-23MYSQL表设计规范(mysql设计表注意事项)
- 06-23MySQL数据库入门(四)数据类型简介
- 06-23数据丢失?别慌!MySQL备份恢复攻略
- 06-23MySQL设计规范(mysql 设计)
- 06-23MySQL数据实时增量同步到Elasticsearch
- 06-23MySQL 避坑指南之隐式数据类型转换
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)