- 博客(278)
- 资源 (11)
- 收藏
- 关注
原创 kubeadm+kube-vip搭建高可用k8s集群
通用安装基本软件包yum install bash‐comp* vim net‐tools wget ‐y设置主机名,管理节点设置主机名为node1(node2的设置为node2)hostnamectl set-hostname node102设置Host解析,编辑/etc/hosts文件,添加域名解析[root@node1 ~]# vim /etc/hosts10.168.1.101 node10110.168.1.102 node10210.168.1.103
2022-04-08 18:02:41 1719
原创 Docker架构简介
Docker可以帮助用户在容器内部快速自动化部署应用,并利用Linux内核特性命名空间(namespaces)及控制组(cgroups)等为容器提供隔离的运行环境。Docker借助操作系统层的虚拟化实现资源的隔离,因此Docker容器在运行时与虚拟机(VM)的运行有很大的区别,Docker容器与宿主机共享同一个操作系统,不会有额外的操作系统开销。这样的优势很明显,因而大大提高了资源利用率,并且提升了I/O等方面的性能。Docker总架构图Docker的总架构如图1-1所示。架构中主要的模块有:D..
2022-03-08 14:32:32 2927
转载 详解 Kubernetes StatefulSet 实现原理
在 Kubernetes 的世界中,ReplicaSet和Deployment主要用于处理无状态的服务,无状态服务的需求往往非常简单并且轻量,每一个无状态节点存储的数据在重启之后就会被删除,虽然这种服务虽然常见,但是我们仍然需要有状态的服务来实现一些特殊的需求,StatefulSet 就是 Kubernetes 为了运行有状态服务引入的资源,例如 Zookeeper、Kafka 等。这篇文章会介绍 Kubernetes 如何在集群中运行有状态服务,同时会分析这些有状态服务 StatefulSet ...
2022-03-01 16:45:01 450
原创 kubernetes之client-go的Indexer
Indexer是client-go用来存储资源对象并自带索引功能的本地存储,Reflector从DeltaFIFO中将消费出来的资源对象存储至Indexer。Indexer中的数据与Etcd集群中的数据保持完全一致。client-go可以很方便地从本地存储中读取相应的资源对象数据,而无须每次都从远程Etcd集群中读取,这样可以减轻Kubernetes API Server和Etcd集群的压力。在介绍Indexer之前,先介绍一下ThreadSafeMap。ThreadSafeMap是实现并发安全的存储
2022-02-24 18:56:16 614
转载 IaaS、PaaS、SaaS、BaaS和FaaS, 这些区别你真的了解吗?
aaS、PaaS、SaaS、BaaS、FaaS,这些名词后面都带着aas三个字母,aas 是 As-a-Service,即为服务的意思。我们看下面这个架构图:IaaS、PaaS、SaaS云平台一般都会提供以上架构图中的三种云服务IaaS:Infrastructure as a Service(基础设施即服务)从上面的架构图可以看出,IaaS处于最底层,服务商提供底层/物理层基础设施资源(服务器,数据中心,环境控制,电源,服务器机房),客户自己部署和执行操作系统或应用程序等各种软件。.
2022-02-14 19:41:36 618
原创 结合kubebuilder与code generator编写CRD
概念简介code-generatork8s.io/client-go 提供了对k8s原生资源的informer和clientset等等,但对于自定义资源的操作则相对低效,需要使用 rest api 和 dynamic client 来操作,并自己实现反序列化等功能。code-generator 提供了以下工具用于为k8s中的资源生成相关代码,可以更加方便的操作自定义资源:deepcopy-gen: 生成深度拷贝对象方法使用方法: 在文件中添加注释// +k8s:deepcopy-gen=
2022-02-14 18:42:44 1327
原创 prometheus-adapter原理分析
原理分析prometheus+prometheus-adapter的工作原理prometheus通过聚合层扩展kubenetes API原理聚合层在 kube-apiserver 进程内运行。在扩展资源注册之前,聚合层不做任何事情。 要注册 API,用户必须添加一个 APIService 对象,用它来“申领” Kubernetes API 中的 URL 路径。 自此以后,聚合层将会把发给该 API 路径的所有内容 转发到已注册的 APIService。总结原理如下:aggre
2022-01-13 18:56:07 4230
转载 一文读懂 Kubernetes APIServer 原理
前言整个Kubernetes技术体系由声明式API以及Controller构成,而kube-apiserver是Kubernetes的声明式api server,并为其它组件交互提供了桥梁,因此加深对kube-apiserver的理解就显得至关重要了。整体组件功能kube-apiserver作为整个Kubernetes集群操作etcd的唯一入口,负责Kubernetes各资源的认证&鉴权、校验以及CRUD等操作,提供RESTful APIs,供其它组件调用:kube-apis
2022-01-13 17:47:46 495
原创 kubernetes hpa源码分析
初始化文件位置:cmd/kube-controller-manager/app/controllermanager.gofunc NewControllerInitializers(loopMode ControllerLoopMode) map[string]InitFunc { ... controllers["horizontalpodautoscaling"] = startHPAController ...}HPA Controller和其他的Controller一样,...
2022-01-11 10:14:08 571
转载 【SpringBoot】 理解Spirng中的IOC原理
前言前文已经介绍了Spring Bean的生命周期,在这个周期内有一个重要的概念就是:IOC容器大家也知道IOC是Sping 的重要核心之一,那么如何理解它呢,它又是产生什么作用呢?本文就IOC原理进行简要阐述。IOC定义IoC 全称为Inversion of Control,翻译为 “控制反转”,它还有一个别名为 DI(Dependency Injection),即依赖注入。 DI—Dependency Injection,即“依赖注入”:组件之间依赖关系由容器在运行期决...
2020-05-28 01:52:04 6350
转载 Spring中 如果该Service有多个实现类,它怎么知道该注入哪个ServiceImpl类?
每个service的impl都可以指定名称(使用@Service(“名称”))2.Controller中注入service的时候使用名称来指定注入哪一个。(1) @Autowired @Qualifier("名称") (2) @Resource(name="名称")接口 public interface HumanService { public String name();}接口实现类 @Service("teacherService"...
2020-05-15 14:29:04 919
原创 【java】private和static方法不能被重写
一、什么是重写重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Excep...
2020-03-19 11:49:19 2281 3
转载 Kubelet 状态更新机制
当 Kubernetes 中 Node 节点出现状态异常的情况下,节点上的 Pod 会被重新调度到其他节点上去,但是有的时候我们会发现节点 Down 掉以后,Pod 并不会立即触发重新调度,这实际上就是和 Kubelet 的状态更新机制密切相关的,Kubernetes 提供了一些参数配置来触发重新调度到嗯时间,下面我们来分析下 Kubelet 状态更新的基本流程。kubelet 自身会定期更新...
2020-03-04 17:30:45 1305
原创 kubernetes部署dashboard
一、版本k8s版本:v1.17.0root@k8s-1:~# kubectl versionClient Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.0", GitCommit:"70132b0f130acc0bed193d9ba59dd186f0e634cf", GitTreeState:"clean"...
2020-03-04 16:04:39 3530
转载 Bash 脚本 set 命令教程
Bash 脚本 set 命令教程服务器的开发和管理离不开 Bash 脚本,掌握它需要学习大量的细节。set命令是 Bash 脚本的重要环节,却常常被忽视,导致脚本的安全性和可维护性出问题。本文介绍它的基本用法,让你可以更安心地使用 Bash 脚本。一、简介我们知道,Bash 执行脚本的时候,会创建一个新的 Shell。$ bash script.sh上面代码...
2020-03-02 17:41:12 1155
转载 为什么子类重写父类的方法不能低于其在父类中的访问权限?
如果子类重写的父类的方法的访问权限低于其在父类中的访问权限,会影响多态。在父类中是public的方法,如果子类中将其降低访问权限为private, 那么父类在实现多态时如果调用子类的这个重写方法,但是这个方法已经是private,没有办法调用,所以就无法实现多态了。public class Test { public static void main(String[] args) {...
2020-01-07 11:11:18 2510
转载 分配 Pod 到 Node 上
您可以限制pod只能在特定node上运行,或者更倾向于在某些特定 node 上运行。 有几种方法可以做到这一点,他们都使用label selectors进行选择。 一般来说,这种约束是不必要的,因为 scheduler 会自动进行合理的安排(例如,将 pod 分布在所有 node 上,而不是将 pod 分配到空闲资源不足的 node 上,等等) 但是在某些情况下,您可能需要对 node...
2019-12-10 10:19:09 1387
转载 kubernetes平滑迁移某个节点上的pod
cordon, drain, uncordon这三个命令是正式release的1.2新加入的命令,三个命令一起介绍,是因为三个命令配合使用可以实现节点的维护。在1.2之前,因为没有相应的命令支持,如果要维护一个节点,只能stop该节点上的kubelet将该节点退出集群,是集群不在将新的pod调度到该节点上。如果该节点上本生就没有pod在运行,则不会对业务有任何影响。如果该节点上有pod正在运行...
2019-12-10 10:09:57 1957
原创 golang interface内部结构的一个面试考点
关于interface的源码问题,这里举一个例子说明一下,代码如下package mainimport ( "fmt")type People interface { Show()}type Student struct{}func (stu *Student) Show() {}func live() People { var stu *Student ...
2019-12-03 17:41:44 651
原创 golang学习--关于defer的执行顺序
实例一、package mainimport ( "fmt")func main() { defer_call()}func defer_call() { defer func() { fmt.Println("打印前") }() defer func() { fmt.Println("打印中") }() defer func() { ...
2019-12-03 17:18:16 2637
转载 IO多路复用的三种机制Select,Poll,Epoll
I/O多路复用(multiplexing)的本质是通过一种机制(系统内核缓冲I/O数据),让单个进程可以监视多个文件描述符,一旦某个描述符就绪(一般是读就绪或写就绪),能够通知程序进行相应的读写操作select、poll 和 epoll 都是 Linux API 提供的 IO 复用方式。相信大家都了解了Unix五种IO模型,不了解的可以 => 查看这里[1] blocking...
2019-12-03 16:09:44 223
转载 Go 语言闭包详解
Go 语言闭包详解原文链接:Go 语言闭包详解前言Go 语言闭包详解什么是闭包?闭包是由函数和与其相关的引用环境组合而成的实体。下面就来通过几个例子来说明 Go 语言中的闭包以及由闭包引用产生的问题。函数变量(函数值)在说明闭包之前,先来了解一下什么是函数变量。在 Go 语言中,函数被看作是第一类值,这意味着函数像变量一样,有类型、有值,其他普通变量...
2019-12-02 17:56:39 497
原创 k8s源码分析--kube-scheduler源码(一)
版本:v1.13.0启动分析kubernetes基础组件的入口均在cmd目录下,kube-schduler入口在scheduler.go下。kubernetes所有的组件启动采用的均是command的形式,引用的是spf13类库。func main() { rand.Seed(time.Now().UnixNano()) //创建Cobra格式的Sched...
2019-11-28 10:55:39 809
转载 《k8s-1.13版本源码分析》-调度器初始化
源码分析系列文章已经开源到github,地址如下:github: https://github.com/farmer-hutao/k8s-source-code-analysis gitbook: https://farmer-hutao.github.io/k8s-source-code-analysis本文大纲概述 从 –config 开始 options.Optio...
2019-11-28 10:53:18 225
原创 k8s源码分析--kube-scheduler源码(二)
前言Pod priorityPod 有了 priority(优先级) 后才有优先级调度、抢占调度的说法,高优先级的 pod 可以在调度队列中排到前面,优先选择 node;另外当高优先级的 pod 找不到合适的 node 时,就会看 node 上低优先级的 pod 驱逐之后是否能够 run 起来,如果可以,那么 node 上的一个或多个低优先级的 pod 会被驱逐,然后高优先级的 pod 得...
2019-11-28 10:35:21 306
原创 k8s源码分析——kube-apiserver源码阅读
前言Kubernetes API Server 是有kube-apiserver进程实现的,他运行在Kubernetes的管理节点--Master上,并对外提供Kubernetes Restful API,它提供的主要是与集群管理相关的API服务,例如校验pod、service、rc controller的配置并存储到后端的etcd server上。下面我们分别对其启动过程、关键代码分析及设计...
2019-11-25 16:55:00 1656
转载 Kubernetes 源码分析 -- API Server之编解码
在Kubernetes源码分析-- API Server之API Install篇中,我们了解到K8S可以支持多版本的API,但是Rest API的不同版本中接口的输入输出参数的格式是有差别的,Kubernetes是怎么处理这个问题的呢?另外Kubernetes支持yaml、json两个格式的配置,同时又能够支持json、yaml和pb等格式的编解码进行协议传输,那么Kubernetes又是如何实...
2019-11-25 14:55:27 916
转载 Kubernetes 源码分析 -- API Server之API安装
前言API Server的启动中,我们直到介绍了三种服务Master、CustomResourceDefinitions、Aggrator的创建,但是具体的API的创建部分没有介绍。本文旨在把这块说清楚,让我们了解整个API Server对外提供了哪些API,这些API是在怎样被注册到服务中去的。我们知道,API Server对外提供的Http/Https服务,这都是基于go http服务框...
2019-11-25 14:53:12 725
转载 Kubernetes 源码分析 -- API Server之Etcd存储
StorageEncodingOverridesKubernetes资源数据存储在ETCD中,存储的数据格式缺省为:application/json,版本使用__internal版本。具体见:MergeGroupEncodingConfig函数,所以从获取资源的时候,我们是不需要指定版本的。一般基于:schema.GroupResource类型去获取资源,如果要获取所有的资源,资源可以指定为“...
2019-11-25 14:27:58 1172 1
转载 kubelet 源码分析:Garbage Collect
kubernetes GC 简介作为 kubernetes 中重要的组件,kubelet 接管了节点上容器相关的所有工作。除了最核心的任务:根据 apiserver 分配的 pod 创建容器之外,它还有其他很多事情要做,其中之一就是 GC(Garbage Collect)。在运行一段时候之后,节点上会下载很多镜像,也会有很多因为各种原因退出的容器。为了保证节点能够正常运行,kubelet ...
2019-11-22 14:24:07 413
转载 k8s免fq下载镜像
转自:https://juejin.im/post/5d5a0c40e51d4561b072dcfek8s免fq下载镜像简介新手使用kubeadm搭建k8s最困难的一件事情就是下载k8s的docker镜像,那么有没有好的方法呢,之前最常用的就是使用Dockerfile在上面加上FROM+你要下载的镜像字段,然后使用dockerhub把这个镜像编译起来,之后我们本地...
2019-11-21 15:49:24 428
原创 k8s学习笔记--Ingress原理与部署
Ingress 介绍Kubernetes 暴露服务的有三种方式,分别为 LoadBlancer Service、NodePort Service、Ingress。官网对 Ingress 的定义为管理对外服务到集群内服务之间规则的集合,通俗点讲就是它定义规则来允许进入集群的请求被转发到集群中对应服务上,从来实现服务暴漏。 Ingress 能把集群内 Service 配置成外网能够访问的 URL,...
2019-11-21 15:47:41 6962 4
原创 informer和sharedInformer的处理流程比较
我们已经介绍过informer和SharedInformer。那么他们相关的处理流程上有什么不同,下面我们通过流程图来介绍:informer的处理流程informer的处理流程,我们以client-go的example/workqueue/main.go的代码为例:SharedInformer的处理流程SharedInformer的处理流程,这里自己写了一份代码:packag...
2019-11-19 18:35:47 1357 1
原创 client-go源码分析--DeltaFIFO
前言DeltaFIFO是client-go controller framework的重要环节,它的作用是保证Reflector和Indexer之间对象同步。可以说,DeltaFIFO是连接生产者(Reflector)和消费者(Indexer)的通道。阅读本文前希望读者已阅读《client-go源码分析》前面的系列文章,要求已了解Informer和Reflector。1 DeltaFIFO...
2019-11-15 23:42:45 444
原创 client-go源码分析--Reflector
前言在informer机制流程分析中,简单介绍并梳理了Reflector函数执行流程。整个controller framework中,Reflector的角色是生产者,从k8s api-server中获取runtime.Object,并添加到DeltaFIFO中;indexer是消费者,从DeltaFIFO中获取并处理runtime.Object。1 Reflector创建和运行在c...
2019-11-15 17:49:55 786
原创 client-go源码分析--informer机制流程分析
版本version: v12.0.01 informer对象关系informer对象即controller struct(下文的controller即informer,注意这里的controller和k8s中的controller概念是不一样的)。controller对象关联关系比较复杂,上面的组件关系主要抓住几个关键对象:controller,Reflector,cache...
2019-11-15 16:55:44 1529
原创 查看k8s的etcd pod中的数据
查看k8s的etcd数据kubernetes的API对象的数据都保存在etcd中,本文实战如何查看这些数据。环境信息实战环境的版本信息如下,请确保以下软件都已运行正常:操作系统 :Ubuntu 16.04.6 LTSKubernetes:1.15查看etcd版本号:root@k8s-master:~# cat /etc/kubernetes/manifests/et...
2019-11-07 16:12:40 4580 1
Go并发编程实战 第2版 .pdf
2018-10-25
《http权威指南》高清中文
2018-09-27
visual studio code
2018-09-03
TCP-IP详解
2018-04-13
算法导论_中文版_第三版
2018-04-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人