
the way to kubernetes
kubernetes 学习之路
rocsdu
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
本地部署istio多集群(共享控制面)
环境准备使用kind进行集群安装,通过静态路由打通两个集群的容器网络。cluster1 初始化cluster1 kind配置如下kind: ClusterapiVersion: kind.x-k8s.io/v1alpha4featureGates: GenericEphemeralVolume: truenetworking: podSubnet: "10.241.0.0/16" serviceSubnet: "10.95.0.0/16"nodes:- role: contro原创 2020-09-10 13:53:07 · 785 阅读 · 0 评论 -
控制pod内container执行顺序的几种姿势
介绍在使用k8s的过程中在特定场景可能需要控制pod的执行顺序,接下来我们将学习各个开源组件的实现方式istio中的实现今天在测试istio新功能时注意到istio中添加了values.global.proxy.holdApplicationUntilProxyStarts,使sidecar注入器在pod容器列表的开始处注入sidecar,并将其配置为阻止所有其他容器的开始,直到代理就绪为止。在查看代码后发现对istio-proxy容器注入了以下内容。 lifecycle:原创 2020-08-28 14:41:10 · 3025 阅读 · 2 评论 -
在k8s中实现优雅关闭和零停机部署
在本文中,您将学习如何在Pod启动或关闭时防止断开的连接.您还将学习如何正常关闭长时间运行的任务.在Kubernetes中,创建和删除Pod是最常见的任务之一.当您执行滚动更新,扩展部署,每个新版本,每个作业和cron作业等时,都会创建Pod.但是在驱逐后,Pods也会被删除并重新创建-例如,当您将节点标记为不可调度时.如果这些Pod的性质如此短暂,那么当Pod在响应请求时却被告知关闭时会发生什么呢?请求在关闭之前是否已完成?接下来的请求又如何呢?在讨论删除Pod时会发生什么之前,有必要讨.翻译 2020-08-13 13:17:32 · 5638 阅读 · 0 评论 -
你想要的CD工具 - flagger
介绍flagger是一个k8s operator,可以基于多种ingress 实现金丝雀升级,以进行流量转移,并使用Prometheus指标进行流量分析。canary分析器可以通过webhooks进行扩展,以运行系统集成/验收测试,负载测试或任何其他自定义验证。Flagger实现了一个控制环路,该环路逐渐将流量转移到金丝雀,同时测量关键性能指标,例如HTTP请求成功率,请求平均持续时间和Pod运行状况。 基于对KPI的分析,金丝雀会被提升或中止.工作原理flaager 可以通过自定义canary资原创 2020-08-07 15:33:10 · 1105 阅读 · 0 评论 -
readnessgate controller demo
Readiness Gateskubernetes从1.11版本开始引入了Pod Ready++特性对Readiness探测机制进行扩展,在1.14版本时达到GA稳定版本,称其为Pod Readiness Gates。通过Pod Readiness Gates机制,用户可以将自定义的ReadinessProbe探测方式设置在Pod上,辅助kubernetes设置Pod何时达到服务可用状态Ready,为了使自定义的ReadinessProbe生效,用户需要提供一个外部的控制器Controller来设置相应原创 2020-07-11 14:24:25 · 572 阅读 · 0 评论 -
基于k8s运行wasm的新玩具-krustlet
介绍Krustlet 是基于k8s运行wasm程序的负载,通过亲和性来运行wasm程序,其实现了kubelet api,且兼容了 kubectl logs 和 kubectl delete 命令。接下来将一步步安装、运行krustletkind安装kind config配置kind: ClusterapiVersion: kind.sigs.k8s.io/v1alpha3kubeadmConfigPatches:- | apiVersion: kubeadm.k8s.io/v1beta1原创 2020-07-01 15:22:19 · 1245 阅读 · 0 评论 -
云原生工作流引擎 - argo-workflow
argoargo工作流是什么Argo Workflows是一个开源的容器本机工作流引擎,用于在Kubernetes上协调并行作业。Argo Workflows通过Kubernetes CRD(自定义资源定义)实现。定义工作流,其中工作流中的每个步骤都是一个容器。将多步骤工作流建模为一系列任务,或者使用图形(DAG)捕获任务之间的依赖关系。使用Kubernetes上的Argo Workflow,可以在短时间内轻松运行用于计算机学习或数据处理的计算密集型作业。在Kubernetes上本地运行CI原创 2020-05-28 14:24:57 · 5404 阅读 · 0 评论 -
Argo CD-基于Kubernetes的声明式持续交付工具
什么是Argo CD?Argo CD是用于Kubernetes的声明性GitOps连续交付工具。为什么选择Argo CD?应用程序定义,配置和环境应为声明性的,并受版本控制。应用程序部署和生命周期管理应该是自动化的,可审核的且易于理解的。argo cd 架构Argo CD被实现为kubernetes控制器,该控制器连续监视正在运行的应用程序,并将当前的活动状态与所需的目标状态(在Git存储库中指定)进行比较。其活动状态偏离目标状态的已部署应用程序被标记为OutOfSync。Argo CD报原创 2020-05-28 14:23:50 · 1485 阅读 · 0 评论 -
基于envoy的分布式网关-contour
contourContour是开源的Kubernetes入口控制器,为Envoy边缘和服务代理提供控制平面.Contour支持动态配置更新和多团队入口委托,同时保持轻量级配置文件。特点内置envoyContour是基于Envoy,高性能L7代理和负载均衡器的控制平面灵活的架构轮廓可以部署为Kubernetes部署或守护程序集TLS证书授权管理员可以安全地委派通配符证书访问架构原理Envoy,提供高性能的反向代理。Contour,充当Envoy的管理服务器并为其提供配置原创 2020-05-28 14:21:49 · 1762 阅读 · 0 评论 -
容器中的ulimit
背景使用的是公有云,最近要对k8s版本进行升级,在升级之后发发现从我们的web terminal 进入到容器,拥有sudo权限的用户无法进行sudo命令,即使使用root通过docker exec 进入到容器,依旧无法sudosudo: pam_open_session: Permission deniedsudo: policy plugin failed session initialization定位进入到容器中我们查看ulimit -a 如下core file size原创 2020-05-28 14:20:32 · 4052 阅读 · 1 评论 -
使用argo构建云原生workflow
argoargo工作流是什么Argo Workflows是一个开源的容器本机工作流引擎,用于在Kubernetes上协调并行作业。Argo Workflows通过Kubernetes CRD(自定义资源定义)实现。定义工作流,其中工作流中的每个步骤都是一个容器。将多步骤工作流建模为一系列任务,或者使用图形(DAG)捕获任务之间的依赖关系。使用Kubernetes上的Argo Workflow,可以在短时间内轻松运行用于计算机学习或数据处理的计算密集型作业。在Kubernetes上本地运行CI原创 2020-05-26 18:02:01 · 2296 阅读 · 0 评论 -
使用scheduler-framework扩展原生k8s调度器
scheduler-framework本文将讲述如何使用scheduler-framework扩展原生调度器目的: 在prefilter阶段检查pod是否添加有dely注释,如果未达到对应时间则不调度分析需要实现的method注册插件WithPlugin返回一个注册选项,由此我们可以看出,我们的插件需要实现framework.PluginFactory 接口func WithPlugi...原创 2019-12-26 18:59:19 · 2203 阅读 · 3 评论 -
k8s 使用code-generator生成crd controller
code-generator用于生成k8s风格的api代码生成器client-genconversion-gendeepcopy-gendefaulter-gengo-to-protobufimport-bossinformer-genlister-genopenapi-genregister-genset-genclient-gen在pkg/apis/${GRO...原创 2019-12-25 10:27:42 · 3459 阅读 · 1 评论 -
k8s scheduling-framework介绍
scheduling-frameworkscheduling framework 是Kubernetes Scheduler的一种新的可插入架构,可简化调度程序的自定义,它向现有的调度程序中添加了一组新的pluginAPI。插件被编译到调度程序中。这些API允许大多数调度功能实现为插件,同时使调度core保持简单且可维护。有关该框架设计的更多技术信息,请参阅scheduling framew...原创 2019-12-25 10:26:32 · 1910 阅读 · 0 评论 -
K8S deployment可视化故障排查指南
这是一个示意图,可帮助您调试Kubernetes中的deployemnt,当您希望在Kubernetes中部署应用程序时,通常定义三个组件:一个deployment - 这是创建名为Pods的应用程序副本的秘诀一个service - 内部负载平衡器路由流量到pod一个ingress - 从外部访问集群服务的网络流向的描述以下是快速视觉回顾。在Kubernetes中,...翻译 2019-12-23 19:04:17 · 2000 阅读 · 0 评论 -
golang+shell快速实现docker运行时
手动挂载镜像导出镜像为tar包docker save -o busybox.tar busybox解压镜像tar xf busybox.tar查看文件ls 020584afccce44678ec82676db80f68d50ea5c766b6e9d9601f7b5fc86dfb96d.json busybox.tar2ec9d8fd000cf6929df9aa7a...原创 2019-12-05 18:21:15 · 484 阅读 · 0 评论 -
critical pod浅谈
除了在主机上运行的Kubernetes核心组件(如api-server, scheduler, controller-manager )外,还有许多附加组件,由于各种原因,这些附加组件必须在常规群集节点(而不是Kubernetes master)上运行。其中一些附加组件对于功能齐全的群集至关重要,例如metrics-server,DNS和UI。如果紧急附加组件被驱逐(手动或作为其他操作(如...原创 2019-12-04 17:18:01 · 918 阅读 · 0 评论 -
KubeEdge - edgecore初始化源码分析
edgecore功能由官方文档我们知道,kubeedge核心为cloudcore和edgecore,edgecore主要分为以下几个组件Edged:在边缘管理容器化的应用程序。EdgeHub:Edge上的通信接口模块。EventBus:使用MQTT处理内部边缘通信。DeviceTwin:它是用于处理设备元数据的设备的软件镜像。MetaManager:它管理边缘节点上的元数据。启动...原创 2019-11-13 18:37:57 · 2260 阅读 · 0 评论 -
源码安装kubeedge
依赖安装docker注意docker的cgroup确定和集群kubelet的要一致安装kubeadm/kubectl]创建k8s集群安装golang在每个edge节点安装mosquitto以上安装可参考我的笔记有关内容如果边缘节点为centos可以只直接yum安装,如果为其他系统参见官方文档, centos执行以下命令:yum install epel* -y &a...原创 2019-11-12 15:55:59 · 1835 阅读 · 2 评论 -
metalb - 让本地集群使用LoadBalancer成为可能
介绍Kubernetes没有为裸机集群提供网络负载平衡器的实现(svc 类型为loadbalance),Kubernetes附带的Network LB的实现都是调用各种IaaS平台(GCP,AWS,Azure等)的粘合代码。如果您未在受支持的IaaS平台(GCP,AWS,Azure等)上运行,则LoadBalancers在创建时将无限期保持pending状态metalb解决了这种问题,使得裸...原创 2019-11-08 10:18:04 · 3086 阅读 · 1 评论 -
jaeger入门
本文将讲解jaeger基本概念,基于golang的代码实现以及注入原理jaeger 概述组件概念:jaeger-clientjaeger-agent 将client发送的span发送到collectorjaeger-collector 收集数据并存储或发送到队列jaeger ingester 读取kafka队列写入存储jaeger-query 查询数据展示tracer逻辑概念:...原创 2019-11-05 18:30:55 · 4739 阅读 · 0 评论 -
修改prometheus实现数据库存储报警规则和收集目标
从数据库获取报警规则和服务目标组prometheus本身报警规则及服务发现策略基于文件配置很不方便,对于非K8S服务监控经常需要操作配置文件,不利于管理系统平台化建设。实现思路:将相关配置信息存储在MySQL里,加入新的逻辑,实现保留文件加载配置的同时,加载MySQL中的信息,动态生成static_config及alert_rule从而实现报警及监控目标的配置UI化.MySQL配置使用以...原创 2019-11-04 18:52:52 · 2048 阅读 · 1 评论 -
使用 elk stack监控kubernetes
启动elasticsearch+kibana为了快速启动这里直接使用dockerdocker run -d -v /etc/localtime:/etc/localtime -p 9200:9200 -p 9300:9300 --name=elasticsearch -e "discovery.type=single-node" docker.elastic.co/elasticsearch/...原创 2019-11-04 18:44:43 · 473 阅读 · 0 评论 -
Admission Webhook Part 2
目标本篇文章我们将参照官方的测试实例来一步步添加一个Admission Webhook#配置webhook证书生成由上节的配置我们可以看出,我们的webhook必须使用https,所以我们需要生成一个自签名的https证书,ca可以使用自定义的也可以共用apiserver的。脚本可以参照istio的证书生成脚本: https://raw.githubusercontent.com/is...原创 2019-10-25 11:45:28 · 441 阅读 · 0 评论 -
深入理解AdmissionWebhook 1
简介Admission webhooks 是接收准入请求http回调并且进行处理,分为两种类型: validating admission Webhook mutating admission webhook mutating admission webhook 先于validating admission Webhook被调用,可以由mutating admission ...原创 2019-10-25 11:39:42 · 1652 阅读 · 0 评论 -
通过自定义prometheus数据实现k8s hpa
核心指标管道从 Kubernetes 1.8 开始,资源使用指标(如容器 CPU 和内存使用率)通过 Metrics API 在 Kubernetes 中获取。 这些指标可以直接被用户访问(例如通过使用 kubectl top 命令),或由集群中的控制器使用(例如,Horizontal Pod Autoscale 可以使用这些指标作出决策)。Resource Metrics AP...原创 2018-03-14 22:03:54 · 6969 阅读 · 4 评论 -
使用metric-server替换heapster实现基于mem/cpu的hpa
依赖k8s 1.8+安装prometheus监控使用 prometheus-operator安装prometheusgit clone https://github.com/coreos/prometheus-operatorcd prometheus-operatorkubectl apply -f ./contrib/kube-prometheus/manifests...原创 2018-07-31 14:02:49 · 925 阅读 · 0 评论 -
基于k8s的纵向扩容介绍(VPA)
Vertical Pod Autoscaler VPA介绍安装关于向后兼容性的注意事项先决条件安装命令快速开始测试您的安装示例VPA配置故障排除VPA的组成部分删除alpha版本的已知限制相关链接原文Vertical Pod Autoscaler VPA)介绍Vertical Pod Autoscaler(VPA)使用户无需为其pods中的容器设置最新的资源request。配置后,它将根据使...翻译 2018-09-27 16:58:56 · 8060 阅读 · 0 评论 -
k8s hpa中的指标来源及实现
k8s hpa中的指标类型指标类型Object类型Pods类型Resource类型指标类型在autoscaling/v2beta1/HorizontalPodAutoscaler 中包含以下几种指标源类型:ObjectPodsResourceObject类型Object类型是用于描述k8s内置对象的指标,例如ingress对象中hits-per-second指标type Obj...原创 2018-09-29 11:50:44 · 4536 阅读 · 0 评论 -
k8s web terminal的实现
使用beego+sockjs写的实例:https://github.com/du2016/web-terminal-in-goweb terminal可以让我们更方便的访问container,执行shell命令,提高工作效率k8s本身实际上已经封装了docker的terminal api只需要很简单的操作就可以实现一个terminal,获取输入返回输出req := restc...原创 2017-10-13 21:56:15 · 11117 阅读 · 5 评论 -
使用client-go 进行k8s相关操作-clientset(一)
package mainimport ("flag""fmt""k8s.io/client-go/1.4/kubernetes""k8s.io/client-go/1.4/pkg/api""k8s.io/client-go/1.4/pkg/api/unversioned""k8s.io/client-go/1.4/pkg/api/v1""k8s.io/cli原创 2016-10-09 16:46:24 · 10807 阅读 · 4 评论 -
使用client-go 进行k8s相关操作-dynamicclient(二)
package mainimport ( "encoding/json" "flag" "k8s.io/client-go/1.5/dynamic" "k8s.io/client-go/1.5/pkg/api/unversioned" "k8s.io/client-go/1.5/pkg/apis/extensions" "k8s.io/client-go/1.5/rest" "k原创 2017-01-12 19:29:41 · 6075 阅读 · 0 评论 -
使用client-go 进行k8s相关操作-restclient(三)
restclient 是dynamic client和clientset的基础,支持json与protobuf,可以访问所有资源,实现对自定义thirdpartresource资源的获取示例代码:package mainimport ( "flag" "k8s.io/client-go/pkg/api" "k8s.io/client-go/pkg/api/v1" "k8s.io原创 2017-01-14 15:05:09 · 6465 阅读 · 2 评论 -
k8s thirdpartresource添加
主要使用了clientset 和restclient两种接口,通过对资源的定义以及资源实例的定义、注册,实现自定义资源加入自定义thirdpartresourcepackage mainimport ( "flag" "fmt" // "encoding/json" "k8s.io/client-go/kubernetes" "k8s.io/client-go/原创 2017-01-14 15:49:49 · 1744 阅读 · 0 评论