k8s
文章平均质量分 81
常鱼
这个作者很懒,什么都没留下…
展开
-
kubectl rollout 实现金丝雀发布的流量控制策略
金丝雀发布是一种逐步引入新版本应用程序的策略,以减少潜在风险。本文介绍如何使用Kubernetes的kubectl rollout pause和kubectl rollout resume命令,结合修改Deployment的maxSurge和maxUnavailable字段,来实现金丝雀发布的流量控制。通过反复执行这些步骤,我们可以逐步引入新版本,并监控其性能和稳定性,最终完成金丝雀发布。原创 2023-11-28 17:50:08 · 247 阅读 · 0 评论 -
【玩转client-go】使用client-go从POD拷贝文件出来
先讲思路,通过client-go RestClient模拟kubectl exec 的手法,结合容器镜像里的tar命令和golang原生tar包,作为管道的输入输出,实现文件的数据流拷贝,以下是具体做法。循环读取,并把归档输出写入新创建的文件,当出现End of File(文件结束符)错误,代表输入已完成,没有可读取的输出。tar cf - index.html这条命令的含义是创建一个tar归档文件,并将名为"index.html"的文件加入到归档中。首先是一段将文件内容输出到标准输出的代码。原创 2023-11-27 15:57:53 · 482 阅读 · 0 评论 -
解决Spring Boot应用在Kubernetes上健康检查接口返回OUT_OF_SERVICE的问题
通过自定义和配置探针的HTTP路径,我们成功解决了Spring Boot应用在Kubernetes上健康检查接口返回的问题。现在,健康检查接口返回正确的健康状态,并且探针路径也与公司的重定向配置保持一致。这样,我们可以确保应用在Kubernetes环境中的健康检查正常运行,同时满足公司的需求。原创 2023-11-20 16:19:43 · 1277 阅读 · 0 评论 -
实现ConfigMap热更新的三种常用方法:使用sidecar、CI脚本和自定义Controller
在config-reloader容器中,我们指定了ConfigMap的watched-dir和volume-dir,并指定了webhook-url为localhost:5000/-/reload,当ConfigMap发生变化时,config-reloader会向该地址发送一个HTTP POST请求,触发应用程序的重新读取。其次,由于Controller需要监听ConfigMap的变化事件,并更新对应的Pod,这可能会增加集群的负载,影响集群的稳定性。首先,需要编写CI脚本,配置复杂,需要一定的编程能力。原创 2023-04-03 17:36:26 · 3047 阅读 · 0 评论 -
【玩转client-go】管理 Kubernetes 中资源删除:Finalizer 和 DeletionTimestamp
Finalizer 和 DeletionTimestamp 是 Kubernetes 中管理资源删除的重要机制。控制器可以使用 Finalizer 和 DeletionTimestamp 安全地管理资源对象的删除,并在必要时执行某些清理操作。在处理资源对象时,务必考虑 Finalizer 和 DeletionTimestamp 的作用,并确保正确使用它们,以避免意外删除资源对象。原创 2023-04-03 14:18:12 · 1042 阅读 · 0 评论 -
【玩转client-go】解析 Kubernetes 资源的 YAML 数据的 Go 函数实现
函数的参数cf是 Kubernetes 的客户端配置信息,typ和name分别代表所要获取资源的类型和名称。函数返回的是该资源的 YAML 数据的字节数组和可能出现的错误。原创 2023-04-03 11:13:45 · 834 阅读 · 0 评论 -
【玩转client-go】如何获取 Kubernetes API 客户端的 *rest.Config 对象
本文介绍了四种获取 Kubernetes API 客户端的对象的方法,分别是使用kubeconfig文件、使用 Kubernetes 集群内的 Service Account、直接指定 API Server 的地址和认证信息、以及使用方法。不同的方法适用于不同的场景,开发者可以根据自己的需求来选择使用。原创 2023-04-02 22:29:50 · 1381 阅读 · 0 评论 -
code-generator 使用介绍——CRD客户端生成工具
ops-operator是我的项目名称,extensions是GVK的Group中的抬头,operation是我的CRD的名称,v1则是GVK的Version。然后需要根据CRD的申明字段做一些客制化的修改,这里的代码主要是用于Controller调用client-go过程中对对象的一些反序列化操作,以及对外暴露的注册到Manager 的Scheme的函数方法。此外,查看生成的代码目录,还支持Clientset以外的informer、lister的扩展。要先生成整体的客户端代码,首先需要打下框架。原创 2023-03-07 15:37:27 · 751 阅读 · 0 评论 -
nerdctl不完全使用指南(开发者)
由于懒是我们的宗旨,所以干脆直接在容器中构建,也即dind(docker in docker),从docker转containerd后,应该叫cinc了,这也是ci/cd pipeline里面的常用体位。开发调试,通常不需要ci/cd去做一个整个链路的编译打包镜像,一来耗时,二来可能需要上下游协作,增加了沟通和时间成本。本篇只要是描述在docker被取代后的一些开发者技巧。又因为众所周知的原因,本地编译好的可执行程序上传云服务器的速率非常慢,不如直接同步服务器上的代码,在服务器上直接完成编译。原创 2023-03-06 15:20:06 · 734 阅读 · 0 评论 -
K8S中Pod通过域名访问Service失败,提示bad address
可以看到Pod内部的resolv.conf 内容,其中nameserver指定DNS解析服务器IP为 “10.96.0.2” ,这个IP地址正是Kubernetes集群CoreDNS的Service “kube-dns” 的 cluterIP,说明当Pod内部进行域名解析时,确实是将查询请求发送到Service “kube-dns” 提供的虚拟IP进行域名解析 既然Pod 中 DNS配置文件没问题,且CoreDNS也没问题,会不会是Pod本身域名解析不正常呢?转载 2023-02-17 16:48:16 · 2075 阅读 · 1 评论 -
kubeconfig文件执行kubectl发生x509证书认证问题解决
我们的kubernetes的apiserver-advertise-address是一个内网IP,默认情况下,kubernetes自建的CA会为apiserver签发一个证书,证书的默认可访问的是内网IP、kubernetes、kubernetes.default kubernetes.default.svc、kubernetes.default.svc.cluster.local,不包含设备的外网IP。删除当前kubernetes集群下的apiserver的cert和key。刷新admin.conf。原创 2022-11-11 14:59:48 · 2619 阅读 · 0 评论 -
Golang+Vue2从零开始搭建K8S后台管理系统(4)——自动更新资源列表(下)
至此,整一个websocket的前后端调用就完成了。可见的是,这种是比较初级的做法,未来将会看见更优雅的实现。原创 2022-10-15 23:59:50 · 650 阅读 · 0 评论 -
Golang+Vue2从零开始搭建K8S后台管理系统(3)——自动更新资源列表(上)
这里只是做一个思路的展示,因为诸如或者容器日志或者远程 shell 这类复杂的操作,往往通过多个资源的组合(namespace、deployment、pod..)来获取最终操作的对象,我们不可能去多次请求api,一是延迟问题,二是 apiserver 的压力问题(这个影响比较小)。有了本地缓存 map,我们就可以通过加入 deployment 对应类型的 informer 去 watch 资源的变化,并且通过 handler 来对 map 中的内容进行增删改。原创 2022-10-15 16:26:31 · 1059 阅读 · 0 评论 -
Golang+Vue2从零开始搭建K8S后台管理系统(1)——列表展现
该路由通过项目路径 '@/views/workloads/deploylist' 指向了一个组件,因此我们需要在 /src/views/workload 下新建文件 deploylist.vue;3.根据我们后端 api 的返回结果,需要将请求拿到的结果做一定处理,并将处理后的结果赋给 data 中的表单对象,并在 html 中选择返回结果中合适的成员变量插入对应的表列中。仿照内置的 template,我们需要在 index.js 中根据对应的格式建立一个用于存放我们工作负载的列表集合路径。原创 2022-09-26 18:30:32 · 1084 阅读 · 0 评论 -
gitlab-ci的最简最速实践
获取 gitlab access token 或者是把主机的 ssh key 配置到 gitlab 服务端上我这里获取 gitlab 的 access token。请根据自己的情况选择然后勾选所有权限,并一键生成获得一串序列码,注意保存配置 git remotes,URL 格式为至此,完成了本地代码和代码库的关联。原创 2022-09-09 16:16:09 · 674 阅读 · 0 评论 -
记一次磁盘空间不足引起的pod驱逐问题
现象:观察到磁盘空间不足的节点有大量pod处于Evicted 0/1状态,但并未进行重新调度。原创 2022-08-05 16:00:01 · 2803 阅读 · 0 评论 -
一文搞懂Docker、RunC、Containerd之间的关系
于是通过grpc调用的方式,并规定了grpc的接口方法和字段,各个厂商必须实现,也就是我们所谓的CRI(ContainerRuntimeInterface)。RunC是容器运行工具,纯从系统角度,Runc才是底层运行时,Runc是Docker中最为核心的部分,容器的创建、运行、销毁等等操作最终都将通过调用Runc完成。Containerd是容器运行时,从容器编排角度,Containerd是容器运行时。我们常说的docker一般指的是docker-shim,其也是一种容器运行时。......原创 2022-07-28 11:19:28 · 2977 阅读 · 0 评论 -
Kubernetes中Pod在处于Terminating状态时探针(Probe)仍在运行并检测失败
目录背景出现问题问题追溯解决方法参考文档(issue 和 pull request 已按照时间线梳理)本篇建议建立在以下文档之上进行阅读: 配置存活、就绪和启动探测器关于 K8S 探针的最佳实践 众所周知,日志作为实现软件可观测性的三大支柱之一,为了解系统运行状况,排查系统故障提供了关键的线索,在运维管理中起着至关重要的作用。Kubernetes 提供了两种原生的日志形式——审计(Audit)和事件(Event),它们分别记录了对于集群资源的访问以及集群中发生的事件信息。本篇的背景正是以K8S事件为基础建立原创 2022-07-12 18:24:12 · 1077 阅读 · 0 评论 -
关于 K8S 探针(startupProbe、livenessProbe、readinessProbe)的最佳实践
我们在 k8s 中使用【readiness】探针是用来判定容器是否准备就绪,是否可以接受流量。当 Pod 内所以容器均就绪,则 Pod 将被认为已 ready,如果没有,那么将从 service 的 Loader Blance 中剔除该 Pod。而 k8s 中使用【liveness】探针是用于判定是否需要重启容器,通常情况下主要用于检查容器是否无响应,死锁等,从而通过重启来提高应用的可用性。至于k8s 1.6中增加的【starup】探针是用于判定应用程序容器什么时候启动了,而启用这个探针主要目的是希望容器在原创 2022-07-07 17:45:31 · 1170 阅读 · 0 评论 -
Kubernetes面试题整理(持续更新)——网络插件
目录网络插件相关熟悉哪些网络插件?各自有什么模式?插件与插件之间,模式与模式之间有什么区别?网络插件解决了什么问题模式基本分两种,用了隧道技术和没有使用隧道技术,即覆盖网络方案和路由方案网络插件在使用方面的差异云厂商提供的网络插件,有什么优点,解决了什么问题网络插件相关熟悉哪些网络插件?各自有什么模式?插件与插件之间,模式与模式之间有什么区别?这几个问题的核心其实是一样的,解构这个问题,其实面试官关心的是你对于不同的插件/模式的理解,它们是怎么设计的,实现原.原创 2022-05-30 17:56:01 · 686 阅读 · 0 评论 -
通过ServiceAccount创建eks集群的kubeconfig文件来绕过IAM鉴权
至此,我们通过创建 SA 的方式生成了包含其 Secret TOKEN的 kubeconfig 的文件,并且通过该文件访问 kube- APIserver 能够有效避开 IAM 鉴权,能够加强我们敲 kuebctl命令的体验,并且通过这种方式,也能够根据不同的 clusterrole & role 去生成不同的 kubeconfig 文件做权限的分发。建立 Amazon EKS 的 kubeconfig管理服务账号通过将多个 kubeconfig 文件合并为一个来进行K8S多集群统一管理。原创 2022-05-26 11:03:59 · 1681 阅读 · 0 评论 -
合并kubeconfig文件来进行K8S多集群统一管理
应用背景项目通常有多个 k8s 集群环境,dev、testing、staging、prod,kubetcl 在多个环境中切换,操作集群 Pod 等资源对象,前提条件是将这三个环境的配置信息都写到本地机或是K8S外部一台管理机器的 $HOME/.kube/config 文件中。本文将介绍如何通过将多个kubeconfig文件合并为一个来配置多集群的访问,从而进行K8S多集群统一管理。默认情况下 kubectl 会查找 $HOME/.kube 目录中命名为 config 的文件。那么,我们如何将多个转载 2022-05-23 18:40:15 · 1283 阅读 · 0 评论 -
使用抓包软件(WireShark、Charles)查看kubectl访问apiserver的请求信息
在进行运维 paas 平台开发时,我们会经常接触到需要调 Kuberenetes api 的情况。因为云厂商只封装了部分的 Kuberenetes api 提供接口访问,部分 API 如获取 event ,云厂商还是建议使用原生的 Kuberenetes api 去做请求,这就要求我们对 k8s api 有相当的熟悉度,这可能需要详细阅读官方的 API 文档。本文提供一种方式,通过探查 kubectl 请求时与 apiserver 的交互数据,来熟悉这些相关接口。Kuberenetes客户端和服务端交互原创 2022-05-23 15:20:41 · 1028 阅读 · 0 评论 -
k8s集群安装metrics-server解决error: Metrics API not available问题
文章目录概述部署下载部署文件修改镜像地址概述cka有一道考题,需要试用kubectl top,这个命令需要有对应的metrics接口,如果不安装metrics-server,使用top命令查看Pod的CPU、内存使用过程中,会遇到以下问题:$ kubectl top poW0818 03:22:46.090578 26207 top_pod.go:140] Using json format to get metrics.e-protocol-buffers flagerror: Metric原创 2022-04-22 17:40:47 · 12481 阅读 · 0 评论 -
Thanos+Prometheus+Grafana打造云原生分布式监控系统
概述Prometheus 几乎已成为监控领域的事实标准,它自带高效的时序数据库存储tsdb,可以让单台 Prometheus能够高效的处理大量的数据,还有友好并且强大的 PromQL 语法,可以用来灵活的查询各种监控数据以及配置告警规则,同时它的 pull 模型指标采集方式被广泛采纳,非常多的应用都实现了 Prometheus 的 metrics 接口以暴露自身各项数据指标让 Prometheus 去采集,很多没有适配的应用也会有第三方 exporter 帮它去适配 Prometheus,所以监控系统.原创 2022-03-30 10:48:09 · 4136 阅读 · 0 评论 -
cka备考笔记
etcd备份/恢复对于恢复etcd集群,官方建议重启k8s组件,具体说明如下:说明:如果集群中正在运行任何 API 服务器,则不应尝试还原 etcd 的实例。相反,请按照以下步骤还原 etcd:停止所有API 服务实例 在所有 etcd 实例中恢复状态 重启所有 API 服务实例我们还建议重启所有组件(例如kube-scheduler、kube-controller-manager、kubelet),以确保它们不会 依赖一些过时的数据。请注意,实际中还原会花费一些时间。 在还原...原创 2022-02-09 17:02:48 · 841 阅读 · 0 评论 -
Kubernetes中快速部署基于Rook-Ceph集群的分布式块存储
Rook安装注意1:rook的版本大于1.3,不要使用目录创建集群,要使用单独的裸盘进行创建,也就是创建一个新的磁盘,挂载到宿主机,不进行格式化,直接使用即可。 注意2:做这个实验需要高配置,每个节点配置不能低于2核4G 注意3:k8s 1.19以上版本,快照功能需要单独安装snapshot控制器下载Rook安装文件下载指定版本Rookgit clone --single-branch --branch v1.8.2 https://github.com.cnpmjs.org...原创 2022-01-20 18:26:04 · 4260 阅读 · 0 评论 -
通过kubevela和harbor在持续交付中集成镜像仓库
本文针对私有化场景和本地化的持续交付流程,如果需要做持续集成,需要通过gitlab ci或者jenkins等平台工具将git——harbor/acr/...打通,构建完整的pipeline。#KubeVela 触发器与制品仓库的对接是十分顺滑且无缝的,除了 Harbor 之外,KubeVela 还支持 ACR 镜像仓库以及自定义触发的格式。通过使用 KubeVela 触发器,我们可以轻松地根据镜像版本实现自动部署,从而完成应用版本的迭代。有任何的问题,都欢迎私信我或者在评论下方留言!原创 2022-01-20 11:42:57 · 1182 阅读 · 0 评论 -
通过harbor和rancher在私有化场景发布应用
至此,我们的私有化的应用发布流程就结束了(docker image推送到registry的步骤还没有体现)。这样做的好处是将底层组件模块化,基本上可以兼容所有的私有化场景,当面对不同客户环境时,只要底层组件支持了,那不管上层应用怎么变都没关系。初步设想是开发一个面向交付过程的工具,rancher主要面向开发和运维人员。工具的落点主要集中在:1.添加主机2.利用sealos/sealer一键拉起k8s集群3.打包和注册应用到rancher catalog上面。原创 2021-12-30 11:18:17 · 2098 阅读 · 0 评论 -
Rancher——企业级容器管理平台
这周对于后续开发方向和工作安排上发生了很大的变化标准化的工具开发以及单一的交付场景->各式各样的交付场景因此用脚本去启服务的这种方式可行性值得商榷。1.这会让交付过程变长,因为这个安装过程不稳定2.工作量会链式增长,操作系统,节点数量,需要考虑的因素很多,一有新的接单或客户需求就需要改脚本之类的,工作重复度大。原创 2021-12-23 17:39:09 · 2615 阅读 · 2 评论 -
一键构建高效应用交付的k8s集群
lite应该是不将docker image的镜像打进sealer镜像中,我们的目的是制作离线安装包,指定container是创建6个容器来作为k8s的3个master节点和3个node节点,我在执行过程中得到了找不到clusterfile的返回结果,clusterfile是sealer中对k8s集群的配置文件。3.还有就是目标要求离线安装,那么无论是operator还是helm的安装方式都需要导入对应的镜像和配置文件,需要构建一个私有的镜像仓库,那么无疑会让整个工具变得更重。那好,话不多说,动手实践。原创 2021-12-17 17:20:03 · 1193 阅读 · 0 评论