共计 3548 个字符,预计需要花费 9 分钟才能阅读完成。
导读 | 通过 kubectl 命令可以操作和管理 K8S 资源,对于初学者可以在掌握 K8S 基础命令的基础上再去学习 K8s 的原理和架构,那么 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 常用命令;
- 1、集群资源查看
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
- 2、标签查看
kubectl get pod --show-labels #查看 pod 标签
kubectl get node --show-labels #查看 node 标签
- 3、资源配置查看
查看配置
kubectl get deployments.apps nginxtest-xxx -oyaml #查看 deployment 资源
kubectl get pods nginxtest-xxx -oyaml #查看 pod 资源配置
- 4、资源限制
查看是否有资源限制
kubectl describe node 192.168.1.2Capacity:
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: 100Mikubectl --help 多用 help
- 1、副本扩容
通过副本扩容实现流量分摊,避免单个节点负载过高,建议资源中增加反亲和性,达到不同副本调度到不同 node
kubectl scale deployment nginx-test --replicas=2 #副本扩容
kubectl edit deployment nginx-test #直接编辑修改 spec.replicas 标签扩容
- 2、进入 pod
kubectl exec -it podname bash #或者 sh
-n 指定名字空间
kubectl exec nginx-965048598-jt28d -n test uptime #不进入容器,只获取命令输出
- 3、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
- 4、pod 污点
对于设置了污点的服务,普通 pod 无法调用到此节点,只有增加了 Tolerations 容忍配置才可以。
[root@wpseco-node-1 log]# kubectl describe node 192.168.0.1 | grep Taints
Taints:
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
- 5、pod 文件拷贝
kubectl cp my_item.tar.gz redis-6c98cb5b5f-nxb59:/tmp/ #宿主机拷贝到容器内
kubectl cp redis-6c98cb5b5f-nxb59:/tmp/start.sh ./start.sh #pod 内文件拷贝到宿主机
- 6、静态 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
处理 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/