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

本文为您带来Kubernetes实用技巧

时间:2023-03-19 02:19:22 科技观察

1.Kubectl命令参数自动补全如果你用过Kubernetes,你肯定会用到Kubectl命令。默认情况下,kubectl命令不支持参数自动补全。配置kubectl命令参数的自动补全方式如下:在linux上以Centos为例$yuminstall-ybash-completion$source/usr/share/bash-completion/bash_completion$source<(kubectlcompletionbash)$echo"source<(kubectlcompletionbash)">>$brewinstallbash-completion$source$(brew--prefix)/etc/bash_completion$source<(kubectlcompletionzsh)$echo'source<(kubectlcompletionzsh)'>>~/.zshrcKubectl对~/.bashrcMAC的常见操作[1]1。如何找到非运行状态的Pod?$kubectlgetpods-A--field-selector=status.phase!=Running|grep-vComplete2,如何找到运行状态的Pod?$kubectlgetpods-A--field-selector=status。阶段=运行|grep-vComplete3。获取节点列表,包括每个节点上运行的Pod数量?$kubectlgetpo-ojson--all-namespaces|jq'.items|group_by(.spec.nodeName)|map({"nodeName":.[0].spec.nodeName,"count":length})|sort_by(.count)'[{"nodeName":"service1","count":6},{"nodeName":"service3","count":13}]4。使用kubectltop获取Pod列表,并根据消耗的CPU或内存进行排序#Getcpu$kubectltoppods-A|sort--reverse--key3--numeric#获取内存$kubectltoppods-A|sort--reverse--key4--numeric2.添加Namespace默认CPU和内存限制有时Pod没有资源限制,它会因为个别Pod的使用量超标,影响整个宿主应用。以下为具体示例,相关参数可根据实际情况进行调整。apiVersion:“v1”种类:“LimitRange”元数据:名称:“资源限制”命名空间:默认规范:限制:-类型:“Pod”max:cpu:“4”内存:“4Gi”min:cpu:“100m”内存:“100Mi”-类型:“容器”max:cpu:“4”内存:“4Gi”min:cpu:“100m”内存:“100Mi”默认:cpu:“500m”内存:“500Mi”defaultRequest:cpu:“100m”内存:“100Mi”maxLimitRequestRatio:cpu:“60”3。使用Kubelet为Nodeeviction预留资源Hard:imagefs.available:15%memory.available:1Gnodefs.available:10%nodefs.inodesFree:5%4,使用KubernetesRBAC进行权限划分当多个团队将应用程序部署到一个kubernetes集群时,情况可能会变得非常复杂。记住不要给每个人管理员权限。我个人的建议是将各个团队按照命名空间进行分离和隔离,然后使用RBAC策略只允许各自的团队访问各自的命名空间。如果我们向每个人授予管理员访问权限,那么在pod级别读取、创建和删除访问权限可能会令人沮丧,因为经常会发生误用。出于这个原因,应该只允许管理员访问,从而将管理集群的人员的权限与部署集群的人员的权限分开。5、如何充分利用PodDisruptionBudgetcontroller来保证kubernetes集群中的应用始终能够正常运行?答案:使用PodDisruptionBudget控制器。在kubectldrain操作过程中,kubernetes会根据PodDisruptionBudget控制器判断应用Pod集群的数量,然后保证应用Pod在不中断业务或者不降级业务SLA的情况下被销毁。PDB(PodDisruptionBudget)应放置在具有多个实例的每个部署上。我们可以使用简单的yaml为集群创建PDB,并使用标签选择器来确定PDB应该作用于哪些标签资源。注意:PDB只考虑主动中断,硬件故障等情况PDB不考虑。示例:apiVersion:policy/v1beta1kind:PodDisruptionBudgetmetadata:name:zk-pdbspec:minAvailable:2selector:matchLabels:app:zookeeper6.使用探针检测应用程序状态Kubernetes支持配置探针。kubelet使用探测器来确定pod中应用程序的运行状况。K8S提供了两种类型来实现这个功能,Readinessprobe和Livenessprobe。就绪:探测器用于确定容器何时准备好接收流量。Liveness:探测用于判断容器是否健康,如果不健康则根据策略判断是否重新部署一个新的容器来替代。示例:readinessProbe:tcpSocket:port:8080initialDelaySeconds:5periodSeconds:10livenessProbe:tcpSocket:port:8080initialDelaySeconds:15periodSeconds:20参考链接[1]https://mp.weixin.qq.com/s/fJpSlVOywrgIhejsWSvhbw[2]https://zhuanlan.zhihu.com/p/81666500