- 博客(95)
- 收藏
- 关注
原创 Pod中使用PVC
一、Pod中使用PVC 在PVC创建成功之后,Pod就可以存储卷的方式使用PVC的存储资源了。。PVC受限于命名空间,Pod在使用PVC时必须PVC同处于一个命名空间。 Kubernetes为Pod挂载PVC的过程如下: 系统在Pod所在的命名空间中找到其配置的PVC,然后找到PVC绑定的后端PV,将PV存储挂载到Pod所在的Node目录下,最后将Node目录挂载到Pod的容器内。 在Pod中使用PVC时,需要在YAML配置中设置PVC类型的Volume,然...
2021-12-04 19:20:32 6685
原创 PVC详解
PVC作用用户对存储资源的需求申请,主要涉及存储空间请求、访问模式、PV选择条件和存储类别等信息设置。apiVersion: v1kind: PersistentVolumeClaimmetadata: name: test-pvcspec: accessModes: - ReadWriteOnce #访问模式(与PV模式相同) ReadWriteOnce,读写权限,并且只能被单个Node使用 volumeMode: Filesystem #存储卷模式 re...
2021-12-04 17:34:02 1496
原创 PV(Persistent Volume)
一、PVPV作为对存储资源的定义,主要涉及存储能力、访问模式、存储类型、回收策略、后端存储类型等关键信息设置。apiVersion: v1kind: PersistentVolumemetadata: name: pv1spec: capacity: storage: 5Gi #存储空间 5G volumeMode: Filesystem #存储卷模式:文件系统 accessModes: - ReadWriteOnce #访问模式,读写权限,并且只能被单个
2021-12-04 17:32:14 970
原创 Cgroup概述
一、Cgroup的目的 Cgroup和namespa类似,也是将进程进程分组,但是目的与namespace不一样,namespace是为了隔离进程组之前的资源,而Cgroup是为了对一组进程进行统一的资源监控和限制。二、为什么需要Cgroup 在Linux里,对进程进程分组,比如Session group、process group等,后来需要追踪一组进程的内存和IO使用情况,出现了cgroup,用来统一对进程进行分组,并在分组的基础上对进程进程监控和资源控制管理等。三、...
2021-12-04 07:35:39 18165 1
原创 持久卷(Persistent Volume)详解
一、概述 在Kubenetes中,对存储资源的管理方式和计算资源(CPU/内存),截然不同。为了能够屏蔽底层存储实现的细节,让用户方便使用及管理员方便管理,Kubernetes从1.0版本就已经引入了Persistent Volume(PV)和Persistent Volume Claim(PVC)两个资源对象来实现存储管理系统。 PV(持久卷)是对存储资源的抽象,将存储定义为一种容器应用可以使用的资源,PV由管理员创建和配置,它与存储提供商的具体实现直接相关,例如:GlusterF...
2021-11-28 15:00:55 4706
原创 Node本地存储卷
Kubernetes管理的Node的本地存储卷(Volume)的类型:类型 描述 EmptyDir 与Pod同生命周期的Node临时存储 HostPath Node目录 Local 基于持久(PV)管理的Ndoe目录 一、EmptyDir这种类型的Volume将在Pod被调度到Node时进行创建,在初始化状态下目录中时空的,所里命名为“空目录”(Empty Directory),它与Pod具有相同的生命周期,当Pod被销毁时,Node上相应的目录也会被删除。用
2021-11-21 14:03:08 1457
原创 将资源对象映射为存储卷
在Kubernetes中有一些资源对象可以以存储卷的形式挂载为容器内的目录或者文件,目前包括ConfigMap、Secret、DownwardAPI、ServiceAccountToken、Project Volume。一、ConfigMapConfigMap主要保存应用程序所需要的配置文件,并且通过Volume形式挂载到容器内的文件系统中,供容器内的应用程序读取。例如,一个包含两个配置文件的ConfigMap资源如下:apiVersion: v1kind: ConfigMapmeta
2021-11-20 21:05:22 922 1
原创 初始化列表
一、类中的const变量#include<stdio.h>class Test{private: const int ci; //ci只读变量public: Test() { // ci=10; // error ci只读变量 } int getCI() { return ci; } };int main(){ Test t; printf
2021-11-16 19:54:43 170
原创 对象的构造下
一、特殊的构造函数1.无参构造函数 没有参数的构造函数 当类中没有定义构造函数时,编译器默认提供一个无参构造函数,并且其函数体为空/*问:下列类中有什么?*/class T{ //至少有一个编译器默认提供的构造函数 T(){},};2.拷贝构造函数 参数为constclass_name&的构造函数 当类中没有定义拷贝构造函数时,编译器默认提供一个拷贝构造函数,简单的进行成员变量的值复制二...
2021-11-16 19:51:54 101
原创 构造函数中
一、带有参数的构造函数、 --- 构造函数可以根据需要定义参数 --- 一个类中可以存在多个重载的构造函数 ---构造函数的重载遵循C++重载的规则class Test{public: Test(int v) { //use v to initialize member }};二、对象的定义和对象的声明不同 .对象定义 --申请对象的空间并调用构造函数 ...
2021-11-16 19:50:59 458
原创 对象的构造上
一、对象中的成员变量的初始值是多少? 对象的初始化: 从程序设计的角度,对象只是变量,因此 ----在栈上创建对象时,成员变量初始值为随机值 ----在堆上创建对象时,成员变量初始值为随机值 ----在静态存储区创建对象时,成员变量初始为0值#include<stdio.h>class Test{private: int i; int j;public: int getI(...
2021-11-16 19:45:50 133
原创 类的真正形态
一、类的关键字 1.struct在C语言中已经有了自己的含义,必须继续兼容 2.在C++中提供了新的关键字class用于类定义 3.class和struct的用法完全相同二、class与struct的区别 1.在用struct定义类时,所有的成员默认访问级别为public 2.在用class定义类时,所有成员的默认访问级别为private#include<stdio.h>struct...
2021-11-16 19:44:30 535
原创 类与封装的概念
一、类的组合二、类的封装 .类通常分为以下两个部分 --类的实现细节 --类的使用方式.封装的基本概念 --根据经验并不是类的每个属性都是对外公开的 --而一些类的属性是对外公开的 --必须在类的表示法中定义属性和行为的公开级别 ...
2021-11-16 19:43:05 1900
原创 经典问题解析
一、关于const的疑问1.const常量的判别准则 --- 只用用字面量初始化的const常量才会进入符号表 --- 使用其它变量初始化的const常量仍然是只读变量 --- 被volatile修饰的const的常量不会进入符号表,只是的得到一个只读变量,而这个只读变量不能出现在赋值符号的左边 注意:在编译期间不能直接确定初始值的const标识符,都被作为只读变量处理2.const引用的类型与初始化变量的类型 --相...
2021-11-16 19:41:34 501
原创 新型类型的转换
一、C语言强制类型转换 1.C方式强制类型转换存在的问题 ---过于粗暴 .任意类型直接都可以进行转换,编译器很难判断其正确性 ---难于定位 .在源码中无法快速定位所有使用强制类型转换语句可以编译通过,运行后发生段错误:#include <stdio.h>typedef void(PF)(int);struct Point{ int x; int y;};int main(){ ...
2021-11-16 19:39:42 245
原创 C++中的新成员
一、动态内存分配1.C++中的动态内存分配 --C++中通过new关键字进行动态内存申请 --C++中的动态内存申请是基于类型进行的 --delete关键字用于内存释放 变量申请:Type* pointer = new Type;//....delete pointer; 数组申请:Type* pointer = new Type[N];//.....delete[] pointer;二、new关键字与m...
2021-11-16 19:38:02 156
原创 函数重载分析下
一、重载与指针1.函数重载遇到函数指针(需要考虑返回值类型) 将重载函数名赋值给函数指针时 1.1 根据重载规则挑选与函数指针参数列表一致的候选者 1.2严格匹配候选者的函数类型与函数指针的函数类型 注意: 函数类型需要和函数指针所指向的类型完全一致#include<stdio.h>#include<string.h>int func(int x){ return x;}int func(int ...
2021-11-16 19:35:29 124
原创 函数重载分析上
一、重载概念 在同一标识符在不同的上下文有不同的意义二、函数重载 1. 用同一个函数名定义不同函数 2. 当函数和不同的参数搭配时函数的意义不同/*函数名形同但是执行的函数体不同*/int func(int x){ return x;}int func(int a ,int b){ return a+b;}int func(const char* s){ return strlen(s);}3.函数重...
2021-11-15 20:06:14 279
原创 函数参数的扩展
一、函数参数的默认值1. C++中可以在函数声明时为参数提供一个默认值2. 当函数调用时没有提供任何参数的值,则使用默认值 int mul(int x = 0) int main() { printf("%d\n",mul()); //mul(0) } int mul(int x) { return x*x; }3.参数的默认值必须在函数声明中指定#include<stdio.h>...
2021-11-15 20:03:52 255
原创 内联函数分析
一、内联函数 1. C++中推荐使用内联函数代替宏代码片段 2. C++中使用inline关键字声明内联函数inline int func(int a ,int b) { return a<b ? a:b;} 内联函数声明时,inline关键字必须和函数定义结合在一起,否则编译器会直接忽略内联请求。 3. C++编译器可以将一个函数进行内联编译 4. 被C++编译器内联编译的函数叫做内联函数 5. C++编译器直接将函数体插入...
2021-11-15 20:02:11 156
原创 Kubernetes--Ingress 7层路由机制
一、Ingress 7层路由机制 Service的表现形式为IP地址和端口号(ClusterIP:Port),工作在TCP/IP层。对于基于HTTP的服务来说,不同的URL地址经常对应到不用的后端服务或者虚拟服务器(virtual Host),这些应用层的转发机制仅通过Kubernetes的Service机制是无法实现的。Kubernetes从1.1版本开始引入Ingress资源对象,用于将Kubernetes外的客户端请求路由到集群内部的服务上,同时提供7(HTTP和HTTPS)层路由功能。 ..
2021-11-15 19:57:48 2136
原创 Kubernetes--Pod的DNS域名和相关特性
一、Pod的DNS域名Pod作为集群中提供具体服务的实体,也可以像Service一样设置DNS域名。另外,系统为客户端应用Pod提供需要使用的DNS策略提供多种选择。 对Pod来说,Kubernetes会为其设置一个<pod-ip>.<namespace>.pod.<cluster-domain>格式的DNS域名,其中Pod IP部分需要用"-"替换"."符号,例如 系统为webapp-p598v这个pod设置的DNS域名为10-244-2-3.defau..
2021-11-15 19:56:21 2681 1
原创 Kubernetes--Node本地DNS缓存
一、Node本地DNS缓存由于在Kubernetes中配置的DNS服务是一个名为“kube-dns”的Service,所以容器应用都通过ClusterIP地址(例如:169.168.0.100)去执行服务名的DNS域名解析。这对于大规模的集群会存在两个问题:集群DNS服务压力增大(可以通过自动扩容缓解) 由于DNS服务的IP地址是Service的ClusterIP地址,所以会通过kube-proxy设置的iptables规则进行转发,可能导致域名解析性能含茶,原因是Netfilter在做DNAT转
2021-11-15 19:52:57 1700
原创 Kubernetes--服务拓扑(Service Topology)
一、服务拓扑 服务拓扑机制从Kubernetes1.17版本开始引入,目标是实现基于Node拓扑的流量路由,例如将发送到某个服务的流量优先路由到与客户端相同Node的Endpoint上,或者路由到与客户端相同的Zone的那些Node的Endpoint上。 在默认情况下,发送到一个Service的流量会被均匀的转发到每个后端Endpoint上,但无法根据复杂的拓扑信息设置复杂的路由策略。服务拓扑机制的引入就是为了实现基于Node拓扑的服务器路由,允许Service创建者根据来源Node和目...
2021-11-15 19:52:17 2052
原创 Kubernetes--DNS服务器
一、DNS服务器 作为服务发现基本功能,在集群内需要通过服务名对服务进行访问,这需要一个集群内的DNS服务器来完成从服务器名到CluseterIP地址的解析。DNS服务器在Kubernetes的发展过程中经历了3个阶段。 Kubernetes1.2版本: DNS服务器由skyDNS提供,由四个容器组成:容器名 功能 kube2sky 监控kubenetes master中Service资源变化,根据service的名称和IP地址生成DNS记录并保存在etcd中 ...
2021-11-15 19:49:59 650
原创 Kubernetes--端点分片
一、Service面临问题(会更新所有Node上的Endpoint) Service的后端是一组Endpoint列表, 为客户端端应用提供了极大的便利。但是随着集群规模的扩大以及Service数量的增加,尤其是Service后端Endpoint数量的增加,kube-proxy需要维护的负载分发规则(例如iptables规则或ipvs)数量也会急剧增加,导致后续对Service后端Endpoint的增加、删除等更新操作成本急剧上升。例如:在kubernetes集群中有10000个Endpoint运行..
2021-11-15 19:47:47 1918 2
原创 Kubernetes--服务发现机制
服务发现机制指客户端应用在一个Kubernetes集群中如何获知后端服务的访问地址。Kubernetes提供两种供客户端应用以固定的方式获取后端服务的访问地址:环境变量和DNS方式。一、环境变量 在一个Pod运行起来的时候,系统会自动为其容器运行环境注入所有集群中有效的Service信息。Service的相关信息包括服务IP、服务端口号、各端口号相关的协议等,通过{SVCNAME}_SERVICE_HOST和{SVCNAME}_SERVICE_PORT格式进行设置。其中,SVCN...
2021-11-15 07:38:27 578
原创 Kuberbetes--将Service暴露到集群外部
一、Service作用 Kubernetes为Service创建的ClusterIP地址是对后端Pod列表的一层抽象,对于集群外部来说没有任何意意义,但有很多Service需要对外部提供服务,Kubernetes提供多种机制将Service暴露出去,供客户端访问。可以通过Service对象的类型字段"type"进行设置。Service类型:ClusterIP:Kubernetes默认会自动设置Service的虚拟IP地址,仅可供集群内部的客户端应用访问,可以手动设置一个ClusterIP..
2021-11-14 07:37:17 1131
原创 Kubernetes--从集群外部访问Pod或Service
一、背景 由于Pod和Service都是Kubernetes集群范围内的虚拟概念,所以集群外的客户端系统无法通过Pod的IP地址或者Service的虚拟IP地址和虚拟端口号访问它们。为了让外部客户端可以访问这些服务,可将Pod或Service的端口号映射到宿主机,以使客户端应用能够通过物理机访问容器应用。二、将容器应用的端口号映射到物理机 (1)通过设置容器级别的hostPort,将容器应用的端口号映射到物理机:apiVersion: v1kind: Podmetadata:...
2021-11-14 07:31:53 1500 1
原创 Kubernetes--Headless Service
一、Headless Service概念 在某些应用场景中,客户端不需要通过Kubernetes内置的Service实现负载均衡功能,或者需要自行完成对服务后端各个实例的服务发现机制,或者需要自行实现负载均衡功能,可以通过创建特殊的名为“Headless”的服务实现。 Headless Service的概念是这种服务没有入口访问地址(无ClusterIP地址),kube-proxy不会为其创建负载转发规则,而服务名(DNS域名)的解析机制取决于该Headless Service是否设置了L...
2021-11-14 07:25:41 3089
原创 Kubernetes--将外部服务定义为Service
一、将外部服务定义为Service 普通的Service通过Label Selector对后端Endpoint列表进行一次抽象,如果后端Endpoint不是Pod副本提供的,则Service还可以抽象定义任意其它服务,将一个Kubernetes集群外部的已知服务定义为Kubernetes内的一个Service,提供集群内的其他应用访问,常见的应用常见包括:已部署的集群外服务,例如数据库服务、缓存服务等 其他Kubernetes集群的某个服务 迁移过程中对某个服务进行Kubernetes内的..
2021-11-14 07:23:29 641
原创 Kubernetes--kube-proxy模式
一、kube-proxy三种工作模式 在kubernetes集群的每个节点上都运行着kube-proxy进程负责实现Kubernetes中Service组件的虚拟IP服务。目前kube-proxy有三种工作模式:User space模式 iptables模式 IPVS模式Userspace模式 Userspace模式作用是在proxy的用户空间监听一个端口,所有的Service都转到这个端口,然后proxy的内部应用层对其转发。proxy会为每个Service随机监听一个...
2021-11-14 07:22:04 1479
原创 Kubernetes--Service负载均衡机制
一、负责均衡机制 当一个Service对象在Kubernetes集群中被定义,集群内的客户端应用就可以通过服务IP访问到具体的Pod容器提供的服务器了。从服务IP到后端Pod的负载均衡机制,由每个Node上的kube-proxy负责实现。二、kube-proxy的代理模式 kube-proxy提供了代理模式(通过启动参数--proxy-mode设置)userspace模式:用户空间模式,由kube-proxy完成代理的实现,效率最低,不推荐使用; iptables模式:kub...
2021-11-14 07:19:31 1203
原创 Kubernetes--多端口Service
一、多端口Service 一个容器应用可以提供多个端口服务,那么在这个Service的定义中可以相应的设置为将多个端口对应到多个应用服务。# Service使用了两个端口,并为两个端口设置名称apiVersion: v1kind: Servicemetadata: name: webappspec: ports: - port: 8080 targetPort: 8080 name: web - port: 8005 targetPort: 8...
2021-11-14 07:17:00 1862
原创 Kubernetes--Service用法
一、Service基本用法 一般来说对外提供服务的应用程序需要通过某种机制实现,对于容器应用最简单的方式就是通过TCP/IP机制以及监听IP和端口号实现。例如定义一个提供Web服务的RC,由两个Tomcat容器副本组成,每个容器都通过containerPort设置提供服务的端口号未8080。apiVersion: v1kind: ReplicationControllermetadata: name: webappspec: replicas: 2 template: ..
2021-11-14 07:14:18 988
原创 Kubernetes--service定义
apiVersion: v1kind: Servicemetadata:#元数据 name: string #Service名称 namespace: string #命名空间,不指定时默认为default命名空间 labels: #自定义标签属性列表 - name: string annotations: #自定义注解属性列表 - name: stringspec:#详细描述 selector: [] #Labe.
2021-11-14 07:10:30 308
原创 Kuberneters--kubernetes网络实现
一、K8S网络实现在实际的业务场景中,业务组件之间关系十分复杂,特别是随着微服务的发展。为了支持业务应用组件的通信,Kubernetes网络的设计主要致力于解决以下问题:容器与容器之间的直接通信 抽象Pod到Pod之间的通信 Pod到Service之间的通信 集群外部与内部组件之间的通信二、容器到容器的通信 同一个Pod内的容器(Pod内的容器不会跨宿主机的)共享一个网络的命名空间,共享同一个Linux协议栈。所以对于网络的各种操作,就和他们在同一台机器上一台,可以用localh...
2021-11-14 07:07:57 1032
原创 Kubernetes--Docker网络实现
一、Docker网络模式host模式:使用--net=host指定 container模式:使用--net=container:NAME_or_ID指定 none模式:使用--net=none指定 bridge模式:使用--net=bridge指定,为默认设置 在kubernetes管理模式下通常只会使用brige模式,Docker Daemon第一次启动时会创建一张虚拟的网桥,默认名称为docker0,然后按照RPC1918的网络模型在私有 网络空间给这个网桥分配一个子网。针对由Dock..
2021-11-11 16:33:50 1061
原创 Kubernetes--网络原理路由
一、路由 Linux系统包含一个完整的路由功能。当IP层处理数据发送或者转发时,会使用路由表来决定发往哪里。在通常情况下,如果主机与目的主机直接相连,那么主机可以直接发送IP报文到目的主机。例如:通过点对点的链接或网络共享,如果主机与目的主机没有直接相连,那么主机将IP报文发送给默认的路由器,然后路由器来决定往哪里发送报文。 路由功能由IP层维护一张路由表来实现。当主机接收到数据报文时,它用此表来决策接下来应该做什么操作。当从网络侧接收到的数据报文时,IP层首先会检查报文中目的的IP地址...
2021-11-09 08:12:43 1191
原创 Kubernetes--iptables与netfilte
一、防火墙防火墙用于实现linux下的访问控制的,分为软件和硬件两种防火墙,防火墙工作的地方一定是在网络边缘,我们需要定义的是防火墙到底如何工作,这就是防火墙的策略,规则,以达到它对出入网络IP、数据进行检测。目前市面上比较常见的有3、4层的防火墙,叫网络层的防火墙,还有7层的防火墙,其实是代理层的网关。二、iptables netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数linux软件一样,这个包过滤防火墙是免费的,完成封...
2021-11-09 08:11:13 349
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人