当前位置: 首页 > 科技观察

K8S学习你需要掌握的知识!

时间:2023-03-12 22:22:43 科技观察

1。K8S命令概述在学习K8s的基本命令之前,有必要了解和学习docker命令。kubectl和docker的很多命令都有相似之处。dockerps#查看所有up状态容器dockerps-a#查看所有状态容器dockerinspectcontainerid#查看容器详情dockerimages#查看容器镜像dockerstart/stop/restartcontainerid#启动/停止/重启容器dockerexec-itcontaineridbash#进入容器dockerexeccontaineridbash-c'uptime'#在容器外执行命令dockerrmiimageid#删除镜像dockerrmcontainerid#删除容器K8S常用命令;2.K8S集群资源操作clusterresourceviewkubectlgetcs#集群健康状态kubectlversion#K8S集群版本查看kubectlgetnode#查看集群节点kubectlgetpods-owide-A#查看所有生命空间pods-n#后面是specifiednamespace--all-namespaces#equivalentto-Akubectgetdeployments-Akubectlgetsvc,ep-A#查看svc和endpoints标签查看kubectlgetpod--show-labels#查看pod标签kubectlgetnode--show-labels#查看节点标签资源配置查看配置kubectlgetdeployments.appsnginxtest-xxx-oyaml#查看部署资源kubectlgetpodsnginxtest-xxx-oyaml#查看pod资源配置resourcelimits查看是否有资源限制kubectldescribenode192.168.1.2Capacity:cpu:16临时存储:524030980Kihugepages-1Gi:0hugepages-2Mi:0内存:82320508Kipods:253Allocatable:cpu:15100mephemeral-storage:520373252Kihugepages-1Gi:0hugepages-2Mi:0memory:79101052Kipods:253capacity表示Allocatable可以分配给K8S资源的资源总量减去系统预留的资源总量。pod资源限制,防止单个服务占用过多资源而影响其他pod。当达到限制值时,oom将重新启动。kubectl获取podsnginx-test-oyaml|grep-A6resourcesresources:limits:cpu:"5"memory:5000Mirequests:cpu:55mmemory:100Mikubectl--helpmulti-usehelp3,K8S运维场景副本扩展通过副本扩展实现流量分担避免过度在单个节点上加载。建议对资源加入反亲和性,实现对不同节点的不同副本调度。.replicas标签展开后进入podkubectlexec-itpodnamebash#orsh-n指定命名空间kubectlexecnginx-965048598-jt28d-ntestuptime#不进入容器,只获取命令输出poddelete操作kubectldeletepodsnginx-test-6fc6d8666b-mhl48#定时删除kubectldeletepod-lapp=test#基于标签删除,批量操作高效kubectldeletepodsnginx-test-ndev--grace-period=0--force#Forced删除,不终止GracePeriodSeconds30s时间也可以使用kubectlscale命令将replica减为0来删除podpod污点。对于有污点的服务,普通Pod无法调用该节点,只增加Tolerations的容忍度配置。[root@wpseco-node-1log]#kubectldescribenode192.168.0.1|grepTaintsTaints:kubectltaintnode192.168.0.1test-access-node=:NoSchedule--overwrite=true#添加污点kubectltaintnode192.168.0.1test-access-node:NoSchedule-#Deletetaintwhere[effect]可能values:NoSchedule:一定不要调度(新人不要来,这里不要动)PreferNoSchedule:trynottoschedule(尽量不要来,除非没办法)NoExecute:不仅不会调度,但它也会驱逐节点上现有的Podpod文件。Copykubectlcpmy_item.tar.gzredis-6c98cb5b5f-nxb59:/tmp/#复制宿主机到容器kubectlcpredis-6c98cb5b5f-nxb59:/tmp/start.sh./start.sh#Pod文件复制到主机静态podStaticpod由kubelet管理,只存在于特定的节点上;staticpod始终由kubelet创建,并且只运行在kubelet所在的Node上。静态pod不能通过api-server管理,不能关联RC、RS、Deployment或DaemonSet;kubelet无法对静态pod执行健康检查。静态pod资源文件默认存放路径为/etc/kubernetes/manifests,也可以直接查看kubelet启动参数staticPodPath:/etc/kubernetes/manifests配置进行确认。kubectlexec-itkafka-1-192.168.0.1-ckafkash#输入staticpod-c#po有多个容器加-c指定kubectllogskafka-1-192.168.0.1-ckafka4.K8S问题定位处理K8S环境问题,首先要了解pod的生命周期和pod的状态。常见状态原因ImagePullBackOff镜像拉取失败、网络故障、镜像名称错误、镜像仓库认证失败都可能导致该错误。CrashLoopBackOff探针检测失败,服务依赖网络或其他pod服务等。另外,宿主机上的安全软件也可能导致容器无法正常启动。Pending一般表示调度失败,pod没有可调度的节点。常见的原因有:节点被污染,节点亲和性不满足,或者节点处于notready状态。Evicted当节点的内存、磁盘或CPU资源不足时,K8s会根据QoS等级,逐出节点上的部分Pod,释放资源,保证节点可用性。Kubelet可以配置内存、CPU和磁盘驱逐阈值。Terminatingpod被删除后,仍处于Terminating状态的时间超过terminationGracePeriodSeconds参数。可能是有节点故障,与主节点的连接丢失。您可以检查节点状态或尝试重启kubeletCompleted。这个状态一般是job类的pod执行完成,容器正常退出。Init:Errorpod初始化失败,可以查看initpod的日志位置。问题定位往往需要使用如下命令:kubectllogs-fpodnamekubectllogs-f-lapp=nginx-test#在多副本的情况下,可以看到所有的pod日志kubectldescribepodspodname#pod启动日志kubectldescribenode192.168.0.1#节点状态日志kubectlgetevents#查看集群事件系统服务查看systemctlstatuskubelet/docker/etcd系统服务日志查看journalctl-xeukubelet/docker--自指定时间起K8S学习资料https://kubernetes.io/zh-cn/docs/home/