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
Docker架构简介 Docker可以帮助用户在容器内部快速自动化部署应用,并利用Linux内核特性命名空间(namespaces)及控制组(cgroups)等为容器提供隔离的运行环境。Docker借助操作系统层的虚拟化实现资源的隔离,因此Docker容器在运行时与虚拟机(VM)的运行有很大的区别,Docker容器与宿主机共享同一个操作系统,不会有额外的操作系统开销。这样的优势很明显,因而大大提高了资源利用率,并且提升了I/O等方面的性能。Docker总架构图Docker的总架构如图1-1所示。架构中主要的模块有:D..
详解 Kubernetes StatefulSet 实现原理 在 Kubernetes 的世界中,ReplicaSet和Deployment主要用于处理无状态的服务,无状态服务的需求往往非常简单并且轻量,每一个无状态节点存储的数据在重启之后就会被删除,虽然这种服务虽然常见,但是我们仍然需要有状态的服务来实现一些特殊的需求,StatefulSet 就是 Kubernetes 为了运行有状态服务引入的资源,例如 Zookeeper、Kafka 等。这篇文章会介绍 Kubernetes 如何在集群中运行有状态服务,同时会分析这些有状态服务 StatefulSet ...
kubernetes之client-go的Indexer Indexer是client-go用来存储资源对象并自带索引功能的本地存储,Reflector从DeltaFIFO中将消费出来的资源对象存储至Indexer。Indexer中的数据与Etcd集群中的数据保持完全一致。client-go可以很方便地从本地存储中读取相应的资源对象数据,而无须每次都从远程Etcd集群中读取,这样可以减轻Kubernetes API Server和Etcd集群的压力。在介绍Indexer之前,先介绍一下ThreadSafeMap。ThreadSafeMap是实现并发安全的存储
IaaS、PaaS、SaaS、BaaS和FaaS, 这些区别你真的了解吗? aaS、PaaS、SaaS、BaaS、FaaS,这些名词后面都带着aas三个字母,aas 是 As-a-Service,即为服务的意思。我们看下面这个架构图:IaaS、PaaS、SaaS云平台一般都会提供以上架构图中的三种云服务IaaS:Infrastructure as a Service(基础设施即服务)从上面的架构图可以看出,IaaS处于最底层,服务商提供底层/物理层基础设施资源(服务器,数据中心,环境控制,电源,服务器机房),客户自己部署和执行操作系统或应用程序等各种软件。.
结合kubebuilder与code generator编写CRD 概念简介code-generatork8s.io/client-go 提供了对k8s原生资源的informer和clientset等等,但对于自定义资源的操作则相对低效,需要使用 rest api 和 dynamic client 来操作,并自己实现反序列化等功能。code-generator 提供了以下工具用于为k8s中的资源生成相关代码,可以更加方便的操作自定义资源:deepcopy-gen: 生成深度拷贝对象方法使用方法: 在文件中添加注释// +k8s:deepcopy-gen=
prometheus-adapter原理分析 原理分析prometheus+prometheus-adapter的工作原理prometheus通过聚合层扩展kubenetes API原理聚合层在 kube-apiserver 进程内运行。在扩展资源注册之前,聚合层不做任何事情。 要注册 API,用户必须添加一个 APIService 对象,用它来“申领” Kubernetes API 中的 URL 路径。 自此以后,聚合层将会把发给该 API 路径的所有内容 转发到已注册的 APIService。总结原理如下:aggre
一文读懂 Kubernetes APIServer 原理 前言整个Kubernetes技术体系由声明式API以及Controller构成,而kube-apiserver是Kubernetes的声明式api server,并为其它组件交互提供了桥梁,因此加深对kube-apiserver的理解就显得至关重要了。整体组件功能kube-apiserver作为整个Kubernetes集群操作etcd的唯一入口,负责Kubernetes各资源的认证&鉴权、校验以及CRUD等操作,提供RESTful APIs,供其它组件调用:kube-apis
kubernetes hpa源码分析 初始化文件位置:cmd/kube-controller-manager/app/controllermanager.gofunc NewControllerInitializers(loopMode ControllerLoopMode) map[string]InitFunc { ... controllers["horizontalpodautoscaling"] = startHPAController ...}HPA Controller和其他的Controller一样,...
【SpringBoot】 理解Spirng中的IOC原理 前言前文已经介绍了Spring Bean的生命周期,在这个周期内有一个重要的概念就是:IOC容器大家也知道IOC是Sping 的重要核心之一,那么如何理解它呢,它又是产生什么作用呢?本文就IOC原理进行简要阐述。IOC定义IoC 全称为Inversion of Control,翻译为 “控制反转”,它还有一个别名为 DI(Dependency Injection),即依赖注入。 DI—Dependency Injection,即“依赖注入”:组件之间依赖关系由容器在运行期决...
Spring中 如果该Service有多个实现类,它怎么知道该注入哪个ServiceImpl类? 每个service的impl都可以指定名称(使用@Service(“名称”))2.Controller中注入service的时候使用名称来指定注入哪一个。(1) @Autowired @Qualifier("名称") (2) @Resource(name="名称")接口 public interface HumanService { public String name();}接口实现类 @Service("teacherService"...
【java】private和static方法不能被重写 一、什么是重写重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Excep...
Kubelet 状态更新机制 当 Kubernetes 中 Node 节点出现状态异常的情况下,节点上的 Pod 会被重新调度到其他节点上去,但是有的时候我们会发现节点 Down 掉以后,Pod 并不会立即触发重新调度,这实际上就是和 Kubelet 的状态更新机制密切相关的,Kubernetes 提供了一些参数配置来触发重新调度到嗯时间,下面我们来分析下 Kubelet 状态更新的基本流程。kubelet 自身会定期更新...
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"...
Bash 脚本 set 命令教程 Bash 脚本 set 命令教程服务器的开发和管理离不开 Bash 脚本,掌握它需要学习大量的细节。set命令是 Bash 脚本的重要环节,却常常被忽视,导致脚本的安全性和可维护性出问题。本文介绍它的基本用法,让你可以更安心地使用 Bash 脚本。一、简介我们知道,Bash 执行脚本的时候,会创建一个新的 Shell。$ bash script.sh上面代码...
为什么子类重写父类的方法不能低于其在父类中的访问权限? 如果子类重写的父类的方法的访问权限低于其在父类中的访问权限,会影响多态。在父类中是public的方法,如果子类中将其降低访问权限为private, 那么父类在实现多态时如果调用子类的这个重写方法,但是这个方法已经是private,没有办法调用,所以就无法实现多态了。public class Test { public static void main(String[] args) {...
分配 Pod 到 Node 上 您可以限制pod只能在特定node上运行,或者更倾向于在某些特定 node 上运行。 有几种方法可以做到这一点,他们都使用label selectors进行选择。 一般来说,这种约束是不必要的,因为 scheduler 会自动进行合理的安排(例如,将 pod 分布在所有 node 上,而不是将 pod 分配到空闲资源不足的 node 上,等等) 但是在某些情况下,您可能需要对 node...