Kubernetes系列
文章平均质量分 77
Kubernetes基础及实战
alden_ygq
一枚北漂5年多的资深SRE菜鸟,专注SRE方向,专注于运维体系建设。个人宣言:先努力成就自己,再用知识成就他人。
展开
-
K8S性能优化(一)-集群调优
因此,运行 10 个 pod 的系统实际上会运行 20 个容器。在安装大型集群或将现有的集群扩展到较大规模时,在安装集群设置集群网络 cidr 时,如果集群的节点数超过 500 个,则可能无法使用常用的集群网络 cidr。根据节点中的处理器内核数来设置节点可运行的 pod 数量。当两个参数都被设置时,其中较小的值限制了节点上的 pod 数量。把节点可以运行的 pod 数量设置为一个固定值,而不需要考虑节点的属性。设为 10 ,则该节点上允许的最大 pod 数量为 40。,以支持超过 500 个节点的环境。原创 2024-05-09 09:37:21 · 926 阅读 · 0 评论 -
Kubernetes基础(三十一)-kubelet 参数/配置详解
基本参数--allow-privileged=true #允许容器请求特权模式 --anonymous-auth=false #不允许匿名请求到 kubelet 服务(默认 true ) --authentication-token-webhook=true #使用 TokenReview API 来确定不记名令牌的身份验证 --authorization-mode=Webhook #kubelet 服务的授权模式,Webhook 模式使用 SubjectAccessReview AP原创 2024-05-07 22:46:30 · 553 阅读 · 0 评论 -
Kubernetes实战(三十二)-使用shell脚本批量清理集群中Evicted状态的pod
【代码】Kubernetes实战(三十一)-使用shell脚本批量清理集群中Evicted状态的pod。原创 2024-04-30 15:23:10 · 87 阅读 · 0 评论 -
Kubernetes实战(三十一)-安装containerd
containerd项目官方地址。原创 2024-03-21 20:08:38 · 383 阅读 · 0 评论 -
Kubernetes实战(三十一)-使用开源CEPH作为后端StorageClass
如果部署其他版本的csi,可以自己设置通过阿里云容器镜像服务托管下载。主要步骤为下载官方csi部署文件,创建csi需要使用到的configmap及sa、secret。在部署CSI前需要确认好部署的CSI版本,在CSI的官网,可以看到CSI版本与K8S之间的对应关系。作者环境的K8S版本为1.24,Ceph版本为14,因此使用3.5.1版本的CSI。本文主要介绍K8S对接Ceph使用RBD块的方法,对象存储或文件存储可以参考官方文档进行对接。K8S主要通过容器存储接口CSI和Ceph进行交互。原创 2024-03-19 19:08:36 · 701 阅读 · 0 评论 -
Kubernetes实战(三十)-部署pod到集群中的指定node
以上这段配置部署了一个Go服务,指定节点在k8s-node2,并且限制了资源,同时暴露了一个30091外部访问端口,看下服务是不是部署在指定的节点。集群只有两个节点,这里打算将应用部署在k8s-node2节点上,需要先记下这个节点的名称:k8s-node2。服务确实部署在k8s-node2节点上,这样就成功在Kubernetes部署服务到集群中的指定节点。k8s编排文件中指定nodeName,只需这一行配置。原创 2023-07-17 21:53:35 · 1085 阅读 · 0 评论 -
Kubernetes实战(二十九)-kubecm管理多集群实战
将指定目录中的所有 kubeconfig 配置文件合并为一个并且覆盖默认的 Kubeconfig 配置文件。使用上下键上线上下切换即可,😼表示当前所在集群。切换到config-oma集群。切换到config集群成功。1、kubecm安装部署。* 代表当前所在集群。原创 2023-05-23 18:24:55 · 297 阅读 · 0 评论 -
Kubernetes实战(二十八)-KPA实战
scale-to-zero-pod-retention-period定义了当Autoscaler决定要缩容到零时,最后一个Pod保留的最小时长。该设置主要针对那些启动代价高、流量突发性高的场景。其配置如下。全局关键字:scale-to-zero-pod-retention-period。修订版注解关键字:autoscaling.knative.dev/scaleToZeroPodRetentionPeriod。可能的值:非负时间字符串。默认值:0s。原创 2024-02-08 15:18:44 · 778 阅读 · 0 评论 -
Kubernetes实战(二十七)-HPA实战
HPA 全称是 Horizontal Pod Autoscaler,用于POD 水平自动伸缩, HPA 可以 基于 POD CPU 利用率对 deployment 中的 pod 数量进行自动扩缩容(除了 CPU 也可以基于自定义的指标进行自动扩缩容)。pod 自动缩放不适用于无法缩放的对象,比如 DaemonSets。HPA 由 Kubernetes API 资源和控制器实现。控制器会周期性的获取平均 CPU 利用率, 并与目标值相比较后调整 deployment 中的副本数量。原创 2024-02-08 14:05:03 · 1496 阅读 · 0 评论 -
Kubernetes实战(二十七)-pod内多容器运行
使用kubectl get pods命令可以获取此pod的详细信息,可以看到READY显示为3/3,说明包含三个容器全部正常启动,整体状态STATUS为Running状态,Pod本身的IP为10.254.176.3,Pod名称为multi-pods。pause镜像确认,使用docker ps命令可以确认到包含pause在内的4个容器,pause容器作为此Pod的根容器,负责整个Pod的网络信息。然后可以确认到在其余的容器中都和此Pod有所关联,可以看到Pause作为根容器为其余容器所起到的作用。原创 2024-02-07 16:06:46 · 591 阅读 · 0 评论 -
Kubernetes实战(二十六)-K8S 部署Dashboard UI
Kubernetes Dashboard是Kubernetes集群的通用、基于Web的UI。它允许用户管理集群中运行的应用程序并对其进行故障排除,以及管理集群本身。本文将采用通过NodePort类型的Service访问方式部署Dashboard UI。原创 2024-02-06 14:54:31 · 1858 阅读 · 0 评论 -
Kubernetes实战(二十五)-快速下载k8s.gcr.io,gcr.io,quay.io镜像
在云计算和云原生的环境下,不可避免的会使用很多镜像创建容器,其中有些镜像只有谷歌镜像仓库才有,但是国内不可以直接下载谷歌仓库的镜像,下面推荐几种方法,原创 2024-02-05 20:07:22 · 977 阅读 · 0 评论 -
Kubernetes实战(二十四)-Pod log查询和存储实战
Pod日志是容器内产生的日志数据,其存储在/var/log/containers/*.log中,kubectl logd pod_name所输出的日志就是/var/log/containers/*.log中指定pod的日志。原创 2024-02-02 18:09:10 · 519 阅读 · 0 评论 -
Kubernetes实战(二十三)-k8s event监控利器kube-eventer对接企微告警
监控是保障系统稳定性的重要组成部分,在Kubernetes开源生态中,资源类的监控工具与组件监控比较多。原创 2024-02-01 20:59:19 · 1399 阅读 · 0 评论 -
Kubernetes实战(二十二)-Pod时区修改
一般国内引用的基础镜像时区都是 UTC 时区,在此基础上,如果去容器查看日志的话就会发现和本地时间对不上,会导致一些问题出现,比如输出的日志时间和当前不一致,所以一般都会把操作系统或容器里的时区替换为 Shanghai。原创 2024-02-01 20:15:57 · 569 阅读 · 0 评论 -
Kubernetes实战(二十一)-event事件持久化
默认情况下, K8S 会将事件保留在 etcd 中一个小时,超过1小时的事件将无法看到,所以 K8S 默认保留事件的时间不足以来更深入的了解集群,所以将事件导出到集群外存储是有必要的,以实现可观测性和告警。原创 2024-02-01 00:16:27 · 650 阅读 · 0 评论 -
Kubernetes实战(二十)-集群节点磁盘清理
然后就是docker exec -it 进去看看,如果日志输出不正常就需要反馈给开发,不用往本地目录里打日志文件了。如果清理了无用的镜像和容器磁盘水位还是比较高。那大概率是某个容器有问题,比如疯狂往磁盘上记日志。: 可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及。:所有镜像占用的空间,包括拉取下来的镜像,和本地构建的。注意:这两个命令会把你暂时关闭的容器,以及暂时没有用到的。:运行的容器占用的空间,表示每个容器的读写层的空间。: 清理得更加彻底,可以将没有容器使用。:容器挂载本地数据卷的空间。原创 2024-01-31 22:40:03 · 948 阅读 · 0 评论 -
Kubernetes实战(十九)-Pod亲和与反亲和调度
1 调度Pod的主要方式1 调度Pod的主要方式Pod调度到指定Node的方式主要有4种:nodeName调度:直接在Pod的yaml编排文件中指定nodeName,调度到指定name的节点上。nodeSelector调度:直接在Pod的yaml编排文件中指定,调度到带有指定label的节点上。污点(Taints)和容忍度(Tolerations)调度:主要通过在Node节点上打污点,然后在Pod的yaml编排文件中配置容忍度,来实现调度。亲和-反亲和调度:本文介绍。2 为什么需要亲和调度?原创 2024-01-22 22:58:59 · 912 阅读 · 0 评论 -
Kubernetes实战(十八)-Pod配置污点和容忍
亲和性调度的方式都是站在Pod的角度上,通过在Pod上增加属性来将Pod调度到到指定的节点上,其实也可以站在Node节点的角度上,通过给Node节点设置属性,来决定是否允许Pod调度过来,这就是污点。Node被设置上污点之后就和Pod存在了一种相斥的关系,进而拒绝Pod调度进来,甚至可以将已经存在的Pod驱逐出去。污点的格式为 key=value:effect,key和value是污点的标签,effect描述五点多额作用,支持如下三个选项1.3 污点案例1)给node1设置一个污点,尽量不要调度过原创 2024-01-21 22:59:47 · 417 阅读 · 0 评论 -
Kubernetes实战(十七)-节点调度策略
设置完以后,查看发现有pod已经调度在ops-master-3节点上。一般情况下,master节点均设置不可调度以确保集群高可用性要求。原在ops-master-3节点节点上的pod被驱逐。原创 2024-01-13 22:09:48 · 487 阅读 · 0 评论 -
Kubernetes实战(十六)-k8s节点打标签
pod可以根据调度策略让pod调度到想要的节点上运行,或者不在某节点运行。原创 2024-01-13 13:54:50 · 796 阅读 · 0 评论 -
Kubernetes实战(十五)-Pod垂直自动伸缩VPA实战
VPA 全称 Vertical Pod Autoscaler,即垂直 Pod 自动扩缩容,它根据容器资源使用率自动设置 CPU 和 内存 的requests,从而允许在节点上进行适当的调度,以便为每个 Pod 提供适当的资源。它既可以缩小过度请求资源的容器,也可以根据其使用情况随时提升资源不足的容量。VPA不会改变Pod的资源limits值,只调整pod的request 值。VPA目前还没有生产就绪,在使用之前需要了解资源调节对应用的影响。原创 2024-01-10 22:28:53 · 1090 阅读 · 0 评论 -
Kubernetes实战(十四)-k8s高可用集群扩容master节点
Kubernetes 作为容器集群系统,通过健康检查 + 重启策略实现了 Pod 故障自我修复能力,通过调度算法实现将 Pod 分布式部署,并保持预期副本数,根据 Node 失效状态自动在其他 Node 拉起 Pod,实现了应用层的高可用性。针对 Kubernetes 集群,高可用性还应包含以下两个层面的考虑:Etcd 数据库的高可用性和 Kubernetes Master 组件的高可用性。而 Etcd 我们已经采用 3 个节点组建集群实现高可用,本节将对 Master 节点高可用进行说明和实施。原创 2023-12-13 22:32:53 · 1682 阅读 · 2 评论 -
Kubernetes实战(十三)-使用kube-bench检测Kubernetes集群安全
CIS()是一家致力于网络安全的非营利组织。它提供一系列针对各种操作系统和应用程序的基线安全标准,这些标准被广泛认可,是防止网络攻击的有效手段。CIS基准是由美国计算机互联网安全中心(Center for Internet Security,简称CIS)制定的一系列全球公认的最佳实践标准,用于保护系统和数据免受威胁。这些基准包括了各种技术平台和系统的配置指南,例如操作系统、网络设备、移动设备、服务器应用等。CIS基准提供了详细的步骤来保护特定系统,每个步骤都有清晰的说明和建议。原创 2023-12-12 21:51:18 · 1307 阅读 · 0 评论 -
Kubernetes实战(十二)-使用kubeconfig文件管理多套kubernetes(k8s)集群
在生产环境中可能不止有一套kubernetes(k8s)集群,面对多套集群,运维人员可以使用kubeconfig文件管理多套kubernetes(k8s)集群,使用 kubeconfig 文件,可以组织集群、用户和命名空间,还可以定义上下文,以便在集群和命名空间之间快速轻松地切换。原创 2023-12-11 23:55:29 · 1503 阅读 · 0 评论 -
Kubernetes实战(十一)-重装Kubernetes集群
kubectl drain 安全驱逐节点上面所有的 pod,--ignore-daemonsets往往需要指定的,这是因为deamonset会忽略SchedulingDisabled标签(使用kubectl drain时会自动给节点打上不可调度SchedulingDisabled标签),因此deamonset控制器控制的pod被删除后,可能马上又在此节点上启动起来,这样就会成为死循环.因此这里忽略daemonset。ops-worker-2变为SchedulingDisabled。原创 2023-12-11 21:28:32 · 683 阅读 · 0 评论 -
Kubernetes实战(十)-升级k8s集群
Kubernetes 使用kubeadm工具来管理集群组件的升级。在集群节点层面,升级 Kubernetes(k8s)集群的过程可以分为以下几个步骤:1)检查当前环境和配置是否满足升级要求。2)升级master主节点(如果是多master,则master轮着升级)。3)升级worker工作节点。4)升级网络插件。在软件层面,升级 Kubernetes(k8s)集群的过程可以分为以下几个步骤:1)升级kubeadm2)节点执行drain操作3)升级各个组件4)取消drain操作。原创 2023-12-10 22:26:22 · 1137 阅读 · 1 评论 -
Kubernetes实战(九)-kubeadm安装k8s集群
这里是通过kubeadm init安装,所以执行后会下载相应的docker镜像,一般会发现在控制台卡着不动很久,这时就是在下载镜像,可以使用docker images命令查看是不是有新的镜像增加。主要是以下命令:ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=kubeadm安装好后,控制台也会有提示执行以下命令,照着执行(也就是第11步最后控制台输出的)master/与slave主机均需要设置。原创 2023-12-10 18:49:26 · 1380 阅读 · 0 评论 -
Kubernetes实战(八)-防止k8s namespace被误删除
运维新同学在预发环境操作删除pod的时候,不知道什么原因把kubectl delete pod命令敲成了kubectl delete ns pre把预发环境删了,几十个模块,将近一个小时才恢复。幸亏是测试环境啊,如果是生产可以可以跑路了。原创 2023-12-07 00:23:18 · 1422 阅读 · 0 评论 -
Kubernetes实战(七)-反向提取镜像Dockerfile
反向生成 Dockerfile总结了下面几个场景 :场景一 : 在日常开发中,可以根据记录找到历史的docker镜像并进行操作,历史记录docker帮我们保存了,但是并没有一个好的方式去查看和保存构建者的Dockerfile文件内容。场景二 : 在做优化镜像时,尽管知道镜像是分层构建,但如果我们想要优化一个镜像的大小和安全性,那么就需要去逐层解析和处理,这个过程就需要知道构建过程也就是Dockerfile是什么样的。原创 2023-12-04 20:07:27 · 844 阅读 · 0 评论 -
Kubernetes实战(六)-多系统架构容器镜像构建实战
每个 Docker 镜像都是通过一个 manifest 来描述的,manifest 中包含了这个镜像的基本信息,包括它的 mediaType、大小、摘要以及每一层的分层信息等。可以使用},},},},可以加上--verbose},...我一般不会直接使用 manifest,而是通过标签来关联它方便使用。从上面的输出结果可以看出,该 manifest 通过这个镜像标签来关联,支持的平台是,该镜像有四个分层,另外注意这里的mediaType字段,它的值是,表示这是 Docker 镜像格式(如果是。原创 2023-12-03 21:05:12 · 1035 阅读 · 0 评论 -
Kubernetes实战(五)-pod之间网络请求实战
同namespace下不同pod直接可通过svc name、pod ip及dns互相访问。pod ip是不固定的,会伴随pod的状态变化发生改变,生产环境不建议使用pod ip作为请求地址。不同namespace下pod直接可通过pod ip及dns互相访问,但不能通过svc name进行访问pod ip是不固定的,会伴随pod的状态变化发生改变,生产环境不建议使用pod ip作为请求地址。原创 2023-11-19 17:34:22 · 206 阅读 · 0 评论 -
Kubernetes实战(四)-部署docker harbor私有仓库
Harbor 是 VMware 公司开源的企业级 Docker Registry 项目,其目标是帮助用户迅速搭建一个企业级的 Docker Registry 服务。Harbor以 Docker 公司开源的 Registry 为基础,提供了图形管理 UI 、基于角色的访问控制(Role Based AccessControl) 、AD/LDAP 集成、以及审计日志(Auditlogging) 等企业用户需求的功能,同时还原生支持中文。原创 2023-11-08 21:51:25 · 619 阅读 · 0 评论 -
Kubernetes实战(三)-k8s节点设置cpu高于多少就不调度
一般情况下,k8s节点的CPU调度限制默认为100%,而实际调度节点的CPU利用率一般不会超过80%左右,因此,合理的CPU限制数值应该小于80%。进入k8s dashboard,选择Pods - Nodes选项卡,在Nodes列表中选择需要验证的Node,在该Node的Details选项中找到Allocated Resources的CPU信息,可以看到该节点的CPU利用率是否达到了限制值。3)修改配置参数--cpu-limit-percent的数值,将其设置为一个合理的值;4)保存并退出文件。原创 2023-10-15 21:37:22 · 1082 阅读 · 0 评论 -
Kubernetes实战(二)-使用Kor过滤Kubernetes未使用资源
Kor 是一个找到未使用 Kubernetes 资源的工具。目前,Kor 能够识别并列出以下未使用的资源:ConfigMapSecretServiceDeploymentRoleHPAPVCIngressePDB。原创 2023-10-15 13:24:22 · 223 阅读 · 0 评论 -
Kubernetes实战(一)-二进制部署Kubernetes集群
三台机器混合部署本文档的 etcd、master 集群和 woker 集群。/opt/k8s/bin 目录保存本文档下载安装的程序。本操作只需要在sre-master-node节点上进行。如果 DNS 不支持主机名称解析,还需要在每台机器的。退出,重新登录 root 账号,可以看到主机名生效。# 将当前的 UTC 时间写入硬件时钟。# 重启依赖于系统时间的服务。本操作所有节点均需要执行。本操作所有节点均需要执行。本操作所有节点均需要执行。本操作所有节点均需要执行。本操作所有节点均需要执行。原创 2023-09-09 22:23:22 · 435 阅读 · 1 评论 -
Kubernetes基础(三十)-imagefs与nodefs限制
10.142.232.161上docker安装在/app/docker目录下,kubelet的--root-dir没有设置,使用默认的/var/lib/kubelet。查看node的状态,报Attempting to reclaim nodefs,意思是尝试回收nodefs,也就是nodefs超标了。3.4 修改让imagefs的阈值为80%,nodefs的阈值为80%;2.1 修改nodefs的阈值为50%,node应该报nodefs超标。接下来,我们来验证一下我们对imagefs与nodefs的理解。原创 2024-05-05 18:52:22 · 620 阅读 · 1 评论 -
Kubernetes基础(二十九)-资源预留
如果还设置了对应的 --system-reserved-cgroup 和 --kube-reserved-cgroup参数,Pod能实际使用的资源上限不会改变(即kubepods.limit_in_bytes不变),但系统进程与kube进程也会受到资源上限的限制。比如某个节点的内存的allocatable为10Gi,有三个Pod(requests.memory=3Gi)已经调度到该节点上,那么第4个Pod就无法调度到该节点上,即使该Node上的空闲内存大于3Gi。原创 2024-05-05 18:51:02 · 992 阅读 · 0 评论 -
Kubernetes基础(二十八)-K8S调度之拓扑分布TopologySpreadConstraints
TopologySpreadConstraints是K8s中一种用于调整Pod在集群中分布的机制。它允许用户定义一组规则,指导调度器确保Pod在各个拓扑域(Topology Domain)中得到均匀分布。拓扑域可以是节点、机架、区域等,这有助于提高应用程序的可用性和鲁棒性。将同一应用程序的Pod分散在不同节点、机架或区域,以防止单一点故障引起的影响。在集群中均匀分布Pod,以确保各个节点的资源利用率相对平衡,提高整体性能。原创 2024-03-15 19:22:53 · 1210 阅读 · 0 评论 -
Kubernetes基础(二十七)-nodePort/targetPort/port/containerPort/hostPort
port和nodePort都是service的端口,前者暴露给集群内客户访问服务,后者暴露给集群外客户访问服务。从这两个端口到来的数据都需要经过反向代理kube-proxy流入后端pod的targetPod,从而到达pod上的容器内。原创 2024-03-04 16:02:20 · 552 阅读 · 0 评论