kubernetes
文章平均质量分 71
nangonghen
这个作者很懒,什么都没留下…
展开
-
k8clone二进制工具迁移k8s中的无状态应用
k8clone备份恢复k8s集群中的无状态应用原创 2024-11-12 20:46:17 · 450 阅读 · 0 评论 -
基于华为云NAS存储和容器集群部署redis
基于华为云NAS存储和容器集群部署redis服务原创 2024-10-30 00:15:25 · 319 阅读 · 0 评论 -
velero v1.14.1迁移kubernetes集群
velero是vmware开源的一个备份和恢复工具,可作用于kubernetes集群下的任意对象和应用数据(PV上的数据)。github地址是https://github.com/vmware-tanzu/velero。对于应用数据,可分文件级别的复制和块级别的复制。文件级别的复制是更加通用的。数据恢复时,pod会被打入一个init容器(velero-restore-helper)来准备数据目录(从远程对象存储中下载并解密),init容器完成后再启动业务容器。在架构上,velero分为服务端和命令行。原创 2024-09-13 01:28:26 · 460 阅读 · 0 评论 -
kube-apiserver鉴权源码简析
kube-apiserver的鉴权其实so easy原创 2022-11-19 23:41:08 · 545 阅读 · 0 评论 -
pod生命周期回调prestop、poststart源码分析
preStop和postStart的原理和源码分析原创 2022-10-30 22:22:59 · 860 阅读 · 0 评论 -
deployment滚动更新时副本减少的分析
滚动更新的缩容分析原创 2022-08-29 03:13:43 · 391 阅读 · 0 评论 -
promethues metric_relabel_configs用途和源码
prometheus metric_relabel_configs的使用场景和源码分析原创 2022-06-12 02:23:55 · 499 阅读 · 0 评论 -
ingress nginx日志时间精确到毫秒
ingress nginx访问日志的时间精度为毫秒原创 2022-05-18 21:51:24 · 2357 阅读 · 0 评论 -
kubernetes单独安装metrics-server
单独部署metrics-server原创 2022-05-04 00:35:24 · 510 阅读 · 0 评论 -
openssl创建自签CA、签发证书、添加k8s节点
openssl基本用法、为证书指定SAN、为kubernetes集群手工添加节点原创 2022-04-20 23:14:35 · 3562 阅读 · 0 评论 -
kubernetes gvk显示现象
kubernetes gvk显示和http request直接相关原创 2022-04-17 22:17:45 · 697 阅读 · 0 评论 -
nginx ingress代理websocket流量
nginx ingress转发websocket原创 2022-03-22 23:45:39 · 7395 阅读 · 2 评论 -
kubelet liveness probe源码简析
1 概述:1.1 环境版本信息如下:a、操作系统: centos 7.6,amd64b、kubernetes版本:v1.15.4c、服务器docker版本:v18.09.22 liveness探针功能:存活性探针用于探测目标容器是否正常运行,手段有http get请求、tcp请求以及exec命令。探测失败,则kubelet会调用停止容器的API(docker stop)来结束目标容器。3 源码简析:探针的实现是定时器,定时器会定期执行预先设置好的探测动作,探测结果存放在kubelet的原创 2021-11-21 15:18:12 · 1395 阅读 · 0 评论 -
调试kubernetes dashboard v2.3.1
1 概述1.1 环境软件版本信息如下:a、操作系统: centos 7.6,amd64b、kubernetes dashboard版本: v2.3.1c、kubernetes版本: v1.15.4d、服务器docker版本:v18.09.2e、nodejs版本: v14.16.1f、npm版本:6.14.12g、go版本: 1.16.62 安装依赖2.1 安装go环境略,请参考百度。2.2 安装docker和kubernetes环境略,请参考百度。2.3 安装node原创 2021-10-25 23:47:41 · 539 阅读 · 0 评论 -
离线安装k3s v1.21.1 和单进程原理
1 概述:1.1 k3s是什么k3s是经CNCF一致性认证的Kubernetes发行版,专为物联网及边缘计算设计。K3s 有以下增强功能:打包为单个二进制文件。使用基于sqlite3的轻量级存储后端作为默认存储机制(v1.19开始使用内置etcd)。同时支持使用 etcd3、MySQL 和 PostgreSQL 作为存储机制。封装在简单的启动程序中,通过该启动程序处理很多复杂的 TLS 和选项。默认情况下是安全的,对轻量级环境有合理的默认值。添加了简单但功能强大的batteries-inc原创 2021-06-18 16:34:38 · 749 阅读 · 0 评论 -
nginx ingress按照http header进行路由
1 概述:1.1 环境版本信息如下:a、操作系统:centos 7.6b、kubernetes版本:v1.15.0c、ingress nginx版本:0.47.01.2 nginx按照http header转发流量nginx的配置文件nginx.confg中,可使用if语句块来转发流量,表达式包含http header的判断,执行语句是proxy_pass指令,格式类似:if ($http_region = "sz") { proxy_pass http://echo-sz.defaul原创 2021-06-10 02:26:45 · 4831 阅读 · 0 评论 -
golang代码执行kubectl apply
1 概述:1.1 环境版本信息如下:a、操作系统:centos 7.6,amd64b、kubernetes版本:v1.15.0c、docker版本:v1.18.06d、golang版本: v1.132 代码:指定多个目录或文件,效果等同于kubectl apply。package mainimport ( "k8s.io/cli-runtime/pkg/genericclioptions" "k8s.io/cli-runtime/pkg/printers" cliresourc原创 2021-03-26 00:08:02 · 805 阅读 · 0 评论 -
源码编译rancher v2.5.6和debug in kubernetes
1 概述:1.1 环境版本信息如下:a、操作系统:centos 7.6,amd64b、kubernetes版本:v1.18.16c、docker版本:v1.18.06d、rancher版本:v2.5.6e、golang版本: v1.14f、goland版本: 2020.32 安装go环境和docker:省略。3 编译和构建镜像:3.1 在裸机环境执行编译构建命令mkdir -p /opt/ && cd /opt/# 下载rancher源码git clone原创 2021-03-05 23:39:48 · 1008 阅读 · 3 评论 -
故障恢复时期kubernetes dns的响应超过15秒
1 概述:1.1 环境版本信息如下:a、操作系统:centos 7.6c、kubernetes版本:v1.15.01.2 故障恢复时期下的dns查询延时的现象kubernetes dns的实现是coredns,以Deployment的形式双副本分别部署两个节点。一个coredns实例立刻死亡(服务器瞬间宕机,k8s service流量未进行切除),业务pod查询dns时,有机会得到dns服务器的时间长达15秒的失败响应(因为/etc/resolv.conf文件默认超时5秒,重试2次)。等ku原创 2021-02-04 23:29:22 · 804 阅读 · 0 评论 -
kubernetes nodelifecontroller源码简析
1 概述:1.1 环境版本信息如下:a、操作系统:centos 7.6c、kubernetes版本:v1.15.01.2 NodeLifeController原理概述节点上的kubelet程序会定期更新kube-apiserver中node lease或者node status数据,kube-controller-manager中的NodeLifeController会监听这些信息变化,如果一个node很长时间都没有在kube-apiserver中进行状态更新,NodeLifeControll原创 2021-01-17 17:34:52 · 645 阅读 · 0 评论 -
kubernetes configmap热更新源码简析
1 概述:1.1 环境版本信息如下:a、操作系统:centos 7.6c、kubernetes版本:v1.15.01.2 configmap热更新原理概述configmap(secret的热更新也是一个原理)是kubernetes支持的卷的一种,底层原理是kubelet根据configmap中的内容在宿主机上写成若干文件(目录默认是/var/lib/kubelet/pods/<pod的UUI>/volumes/kubernetes.io~configmap/<卷名>),原创 2020-12-14 02:10:47 · 1528 阅读 · 0 评论 -
[ thanos源码分析系列 ]thanos sidecar组件源码简析
1 概述:1.1 源码环境版本信息如下:a、thanos组件版本:v0.16.01.2 Thanos Sidecar的作用Thanos Query组件和prometheus实例绑定在一起,三大作用:1)作为访问代理,对客户端暴露grpc接口,业务逻辑是访问其绑定的prometheus实例的http接口,从而获取metrics和rule数据,最终返回给客户端。2)如果开启对象存储功能,会将promethues tsdb目录下的所有block目录上传至指定的对象存储系统中。3)监听promet原创 2020-12-06 11:43:04 · 1402 阅读 · 0 评论 -
kubernetes exec源码简析
1 概述:1.1 环境版本信息如下:a、操作系统:centos 7.6c、kubernetes版本:v1.15.01.2 exec原理概述为进入目标pod的目标容器中执行命令(挂载标准输入和输出、标准错误的情景),kubectl exec访问kube-apiserver的connect接口(中间过程是通过http协议来握手,之后升级为spdy协议),kube-apiserver把请求转发至对应节点的kubelet进程,而kubelet进程此时是一个反向代理,再把请求转发至cri shim程序(原创 2020-12-01 01:38:15 · 1234 阅读 · 0 评论 -
kubernetes部署skywalking集群和JAVA服务的接入
1 概述:1.1 环境版本信息如下:a、操作系统:centos 7.6a、skywalking版本:v8.0.1c、kubernetes版本:v1.18.5d、es版本:6.4.3e、helm版本: helm31.2 skywalking概述1.2.1 skywalking是什么SkyWalking是一个开源的APM系统,为云原生分布式系统提供监控、链路追踪、诊断能力,支持集成多种编程语言的应用(java、php、go、lua等),也能和服务网格进行集成。除了支持代码侵入方式的集成,一原创 2020-11-28 20:33:29 · 3163 阅读 · 0 评论 -
[ thanos源码分析系列 ]thanos query组件源码简析
1 概述:1.1 源码环境版本信息如下:a、thanos组件版本:v0.16.01.2 Thanos Query的作用Thanos Query组件是http服务器 + grpc服务器,它的数据源是位于下游的已发现的实现STORE API的组件(例如Thanos Sidecar组件、Thanos Store组件、Thanos Ruler组件),同时实现了Prometheus官方的HTTP API。Thanos Query组件从下游处获得数据后,能进行合并、去重等操作,最后将结果返回给外部的客户端。原创 2020-11-24 00:44:41 · 2130 阅读 · 0 评论 -
kubelet驱逐机制的源码分析
1 概述:1.1 源码环境版本信息如下:a、kubernetes集群:v1.15.01.2 维持节点稳定的两道防线对于linux操作系统,CPU时间片、内存、磁盘IO、PID等都是系统资源。系统资源的一种分类:a、可压缩资源(CPU)b、不可压缩资源(内存、磁盘容量和inode、PID)kubelet作为节点代理,自然而然需要一定机制保证服务器资源不会被耗尽。当可压缩资源不够时,Pod(容器或进程)会饥饿,但不会被操作系统和kubelet进行强制退出。当不可压缩资源(例如内存)不够用时,原创 2020-11-15 00:04:53 · 889 阅读 · 0 评论 -
kubeadm reset删除用户通过docker run运行的容器
1 概述:1.1 环境版本信息如下:a、kubernetes集群:v1.18.51.2 现象执行kubeadm reset -f命令后,由我docker run命令运行的名称为xxx_k8s_registry的容器也被删除。我一直以为kubeadm reset命令是删除以 “k8s_” 为前缀的容器,因此我手工启动的容器是特意增加了xxx前缀作为区分。1.3 复现2 kubeadm源码:kubeadm reset命令的主逻辑方法是runCleanupNode(…)func runCl原创 2020-11-13 14:14:08 · 1346 阅读 · 0 评论 -
kubernetes删除pod的流程的源码简析
1 概述:1.1 代码环境版本信息如下:a、kubernetes集群:v1.15.41.2 Pod删除的过程简述当用户执行kubectl delete pod命令时(实际上是带grace-period=30s),实际上是访问kube-apiserver的DELETE接口(此时业务逻辑做的只是更新Pod对象的元信息(DeletionTimestamp字段和DeletionGracePeriodSeconds字段),并没有在etcd中删除记录),此时kubectl命令的执行会阻塞并显示正在删除pod原创 2020-10-27 11:10:40 · 3004 阅读 · 0 评论 -
kubelet垃圾(退出的容器和未使用的镜像)回收源码分析
1 概述:1.1 代码环境版本信息如下:a、kubernetes集群:v1.15.01.2 垃圾回收的简述为减少节点的资源消耗,kubelet组件内部运行着两个协程,一个协程每隔1分钟(时间周期不可修改,写死在代码)清理当前节点上状态为退出的容器,一个协程每隔5分钟(时间周期不可修改,写死在代码)清理当前节点上没被使用的镜像。2 影响垃圾回收的参数:2.1 用户不能配置的影响垃圾回收的参数ContainerGCPeriod,固定为1分钟,此值是常量,定时任务方法在调用时是直接使用此常量。原创 2020-10-25 12:21:16 · 834 阅读 · 0 评论 -
kubernetes部署thanos ruler的发送重复告警的一个隐秘的坑
1 概述:1.1 环境thanos ruler和alertmanager都部署在kubernetes集群,版本信息如下:a、kubernetes集群:v1.18.5b、thanos ruler: v0.11.0c、alertmanager: v0.20.0thanos ruler的yaml文件简介:apiVersion: apps/v1kind: StatefulSetmetadata: labels: app.kubernetes.io/name: thanos-rule原创 2020-10-20 18:28:03 · 2469 阅读 · 2 评论 -
goland IDE和delve调试位于kubernetes集群中的go程序
1 概述:在本地电脑的ide中调试远程go程序,IDE为goland-2019.3,go程序暴露的http接口为GET /ip,go程序是以pod的形式运行在kubernetes集群中。当客户端请求到达目标go程序时,本地的IDE断点生效。2 delve:2.1简介delve是一款go程序调式工具(git clone https://github.com/go-delve/delve.git),是一个简单易用的二进制程序,可用来启动目标go程序,进入dlv环境后可通过各种内置命令进行调试目标go程原创 2020-10-18 22:07:56 · 2203 阅读 · 0 评论 -
扩展Prometheus的解决方案thanos的简介和几个月使用心得
1 云原生监控的事实标准Promethues:监控系统的历史悠久,是一个颇为成熟的领域,而Prometheus作为新生代的开源监控系统,慢慢成为了云原生体系的监控事实标准,也证明了其设计得到业界认可。Prometheus启发于Google公司的borgmon监控系统,由google前员工在2012年作为社区开源项目创建和开发,并于2015年正式发布。2016年,Prometheus正式加入Cloud Native Computing Foundation,成为仅次于Kubernetes的第二把交椅的项目。原创 2020-09-15 14:13:58 · 8067 阅读 · 2 评论 -
疑惑:client-go将http响应序列化为k8s对象时,特意删除gvk信息
1)现象:k8s对象丢失gvk信息通过client-go获取一个pod对象,却发现整个对象没有gvk信息,debug之后才发现是特意去掉gvk信息,个人很疑惑。原创 2020-07-28 22:42:58 · 324 阅读 · 0 评论 -
在kubernetes中使用nginx ingress实现灰度部署
概述1)kuberntes集群环境:v1.14.2。2)nginx ingress版本:nginx-ingress-controller:0.25.0。3)nginx ingress部署方式:daemonset,并直接使用宿主网络(即host模式),80端口。4)官方文档地址:https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#canary1)基于权重的灰度发布(30%请求流入原创 2020-07-03 11:29:24 · 1086 阅读 · 0 评论 -
使用kuberntes storageclass动态提供cephfs存储
概述1)ceph集群:nautilus版,monitoring为192.168.39.19-212)kuberntes集群环境:v1.14.23)集成方式:storageclass动态提供存储4)k8s集群的节点已安装ceph-common包。1)步骤1:在ceph中创建cephfs文件系统#1:启动mds组件ceph-deploy --overwrite-conf mds create node1 datanode2#2:创建cephfs文件系统ceph osd pool create原创 2020-07-01 21:17:04 · 819 阅读 · 0 评论 -
使用kuberntes storageclass动态提供ceph rbd存储
概述1)ceph集群:nautilus版,monitoring为192.168.39.19-212)kuberntes集群环境:v1.14.23)集成方式:storageclass动态提供存储4)k8s集群的节点已安装ceph-common包。1)步骤1:在ceph集群中创建一个用户ceph rbd块的pool和一个普通用户ceph osd pool create ceph-demo 16 16ceph osd pool application enable ceph-demo rbdcep原创 2020-07-01 16:41:39 · 325 阅读 · 0 评论 -
kuberntes集成ceph rbd块的一次挂载失败的故障
1)概述1)ceph版本:nautilus版2)kuberntes集群环境:v1.14.23)集成方式:pod中的Volumes字段直接输入ceph rbd块相关的信息。相关yaml资源是来自kubernetes github的example。2)现象kubectl describe pod pod-rbd命令,发现rbd块已attach到目标节点,但是kubelet执行挂载动作的时候失败并输出报错: failed to mount unformatted volume as read only。原创 2020-07-01 10:16:53 · 628 阅读 · 0 评论 -
ceph-deploy新增monitor节点
1)概述1)ceph版本:nautilus版2)集群环境:2.1)ceph集群:ceph-deploy初始化了两个monitor节点。现在想再增加一个monitor节点。2.2)ceph-deploy工作目录为:/etc/ceph-deploy/ceph/2.3)hosts文件:[root@m1 ceph]# cat /etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4原创 2020-06-29 11:53:44 · 1034 阅读 · 0 评论 -
kubernetes replicaset基础原理
1)概述replicaset对象描述一个[ 特定版本 ]的[ 应用 ],控制着pod的属性(镜像、容器的环境变量等等)以及数量。说明:1)replicaset对象不控制pod对象的版本,针对的是同一个镜像的pod。2)deployment对象控制的是replicaset对象,它才能描述一个应用,因为应用有版本之分。2)大致原理replicaset的控制器会监听kuberntes的pod对象、replicaset对象,这些被监听的对象之变动,就会触发syncLoop循环(叫做syncReplica原创 2020-05-16 02:33:22 · 330 阅读 · 0 评论 -
kubernetes daemonset基础原理
1)概述代理性质的进程需要在每一个节点上,或多个节点上运行,此时可以使用kuberntes daemonset来实现。在实际中,一般会将日志采集的代理、网络插件通过daemonset方式及进行部署。2)大致原理daemonset的控制器会监听kuberntes的daemonset对象、pod对象、node对象,这些被监听的对象之变动,就会触发syncLoop循环让kubernetes集群朝着...原创 2019-12-21 01:16:25 · 1036 阅读 · 0 评论