golang & k8s学习笔记

2023-05-16

1、k8s概念图

2、In Kubernetes, namespaces provides a mechanism for isolating groups of resources within a single cluster. 在一个k8s集群中,命名空间提供一种资源组隔离的机制。

3、凡是调度、网络、存储,以及安全相关的属性,基本上是 Pod 级别的。凡是跟容器的 Linux Namespace 相关的属性,也一定是 Pod 级别的。

4、这些特殊 Volume 的作用,是为容器提供预先定义好的数据。所以,从容器的角度来看,这些 Volume 里的信息就是仿佛是被 Kubernetes“投射”(Project)进入容器当中的。到目前为止,Kubernetes 支持的 Projected Volume 一共有四种:Secret;ConfigMap;Downward API;ServiceAccountToken。

5、关于golang中切片作为函数参数:

因为切片中的底层数组部分是通过隐式指针传递(指针本身依然是传值的,但是指针指向的却是同一份的数据),所以被调用函数是可以通过指针修改掉调用参数切片中的数据。除了数据之外,切片结构还包含了切片长度和切片容量信息,这2个信息也是传值的。如果被调用函数中修改了LenCap信息的话,就无法反映到调用参数的切片中,这时候我们一般会通过返回修改后的切片来更新之前的切片。这也是为何内置的append必须要返回一个切片的原因。

6、在Go1.4以前,Go的动态栈采用的是分段式的动态栈,通俗地说就是采用一个链表来实现动态栈,每个链表的节点内存位置不会发生变化。但是链表实现的动态栈对某些导致跨越链表不同节点的热点调用的性能影响较大,因为相邻的链表节点它们在内存位置一般不是相邻的,这会增加CPU高速缓存命中失败的几率。为了解决热点调用的CPU缓存命中率问题,Go1.4之后改用连续的动态栈实现,也就是采用一个类似动态数组的结构来表示栈。不过连续动态栈也带来了新的问题:当连续栈动态增长时,需要将之前的数据移动到新的内存空间,这会导致之前栈中全部变量的地址发生变化。虽然Go语言运行时会自动更新引用了地址变化的栈变量的指针,但最重要的一点是要明白Go语言中指针不再是固定不变的了(因此不能随意将指针保持到数值变量中,Go语言的地址也不能随意保存到不在GC控制的环境中,因此使用CGO时不能在C语言中长期持有Go语言对象的地址)。

7、在程序设计中,鸭子类型(英语:duck typing)是动态类型的一种风格。在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由"当前方法和属性的集合"决定。

在鸭子类型中,关注点在于对象的行为,能作什么;而不是关注对象所属的类型。Go语言中的面向对象就是如此,如果一个对象只要看起来像是某种接口类型的实现,那么它就可以作为该接口类型使用。这种设计可以让你创建一个新的接口类型满足已经存在的具体类型却不用去破坏这些类型原有的定义;当我们使用的类型来自于不受我们控制的包时这种设计尤其灵活有用。Go语言的接口类型是延迟绑定,可以实现类似虚函数的多态功能。

8、Go语言是基于消息并发模型的集大成者,它将基于CSP(Communicating Sequential Process)模型的并发编程内置到了语言中,通过一个go关键字就可以轻易地启动一个Goroutine,与Erlang不同的是Go语言的Goroutine之间是共享内存的。

9、对比系统线程,goroutine的优势点:

    1)调整了栈分配策略,使用动态扩展栈,最小2kb,最大可大1G。

    2)goroutine切换只保存极少的寄存器,切换代价更低。

10、Each controller focuses on one root Kind, but may interact with other Kinds.

11、What is Workload?

    官网的解释:A workload is an application running on Kubernetes. Whether your workload is a single component or several that work together, on Kubernetes you run it inside a set of pods.

    ... However, to make life considerably easier, you don't need to manage each Pod directly. Instead, you can use workload resources that manage a set of pods on your behalf. These resources configure controllers that make sure the right number of the right kind of pod are running, to match the state you specified。

    一言以蔽之:workload是运行在pod之上的k8s对象,通过它来管理pod的生命周期,以达到期望状态。

12、Pods are only scheduled once in their lifetime. Once a Pod is scheduled (assigned) to a Node, the Pod runs on that Node until it stops or is terminated. Pod一经被调度,就无法被修改。那如何保证我们的应用一直运行呢?通过workload resource。

13、实际上go的GMP模型,只能减少活跃线程切换的数量,如果在一个系统中,阻塞的线程或goroutine固定,活跃的线程或goroutine<= procs,那么这个系统无论是用多线程还是使用goroutine,没有没太大的区别。

14、抢占式和协作式:抢占式是指当前执行程序被动放弃cpu资源,协作式是当前执行程序执行完成了,释放cpu资源,其他执行程序才能得到cpu资源进行执行。goroutine是半抢占式的,指goroutine在10ms前是协作式的,超过10ms后,会被动让出cpu资源,防止其他goroutine被饿死。

15、Golang中一个函数内局部变量,不管是不是动态new出来的,它会被分配在堆还是栈,是由编译器做逃逸分析之后做出的决定。

16、三色标记法和写屏障:所谓三色,是指在垃圾回收的时候,在并发标记,可达性分析一些列过程中的一种方法;所谓写屏障,是指在并发情况下,为了达到标记的一致性,所遵循的规则,如黑色节点不允许连接白色节点。参考:golang/5、Golang三色标记+混合写屏障GC模式全分析.md at main · aceld/golang · GitHub

17、golang 中,panic仅有最后一个可以被revover捕获

18、golang中,在函数有多个返回值时,只要有一个返回值有指定命名,其他的也必须有命名。 如果返回值有有多个返回值必须加上括号; 如果只有一个返回值并且有命名也需要加上括号。

19、只有相同类型的结构体才可以比较,结构体是否相同不但与属性类型个数有关,还与属性顺序相关。两个结构体即使成员相同,定义的顺序不同,编译器也会把它们识别为两个不同的结构体。

20、golang的map跟java和python的map不一样,golang的map对象是个变量,访问其元素返回的是元素值本身(也就是说在golang的map中,元素本身没有“变量”这个概念在map中,来指定元素),因此,不能通过访问map元素来给元素的成员赋值,也不能获取map元素的地址。

21、golang中,使用range遍历list或map,遍历值是一个临时变量,每次循环通过值拷贝给这个临时变量,因此,整个遍历过程中,这个值变量只有一个,因此地址也只有一个,在使用循环赋值这个值变量的地址的时候特别注意。

22、golang中,interface类型,就是指针类型。interface{}可以类比c/c++中的void *。

23、golang中的interface关键字,类比c++中的抽象类:相当于golang在语言层面支持了抽象类,类似于java中interface的关键字。实际上golang将类型进行归类,即:struct、map、slice、interface等,通过这些关键字进行归类是区别于其他语言的一种特性。对于基础类型,单独归为一类。例如int,被归类为int。看看下面代码:

type Student struct {
    Name string
    Age int
}

func (s *Student) Speak(data string) string {
    fmt.Println("Say: ", data)
    return data
}

type People interface {
    Speak(string) string
}

type myS string

func main() {

    var p People = &Student{}
    s := Student{}
    m := myS("ddd")
    k := 12
    fmt.Println(reflect.TypeOf(p).Kind())
    fmt.Println(reflect.TypeOf(p))
    fmt.Println(reflect.TypeOf(s).Kind())
    fmt.Println(reflect.TypeOf(s))
    fmt.Println(reflect.TypeOf(m).Kind())
    fmt.Println(reflect.TypeOf(m))
    fmt.Println(reflect.TypeOf(k).Kind())
    fmt.Println(reflect.TypeOf(k))
}


输出:

ptr

*main.Student

struct

main.Student

string

main.myS

int

int

《张磊讲k8s》

24、“敏捷”和“高性能”是容器相较于虚拟机最大的优势,也是它能够在 PaaS 这种更细粒度的资源管理平台上大行其道的重要原因。

25、容器技术跟kvm技术的区别:

    资源占用:容器使用的是linux的namespace技术隔离进程,对于宿主机来说,容器进程只是加了特定namespace参数的进程,与一般进程无异,因此性能损耗几乎可忽略不计;kvm运行整个模拟操作系统,即使系统不跑任何应用,也会占用资源(100M~200M),并且任何系统调用,都会经过一层hook,也增加了性能消耗。

    隔离性:容器,并不是所有东西都可以用namespace进行隔离,比如系统时间,而且容器与宿主机公用Linux系统内核;而kvm模拟了整个操作系统。

    安全性:由于容器存隔离不足,相对于kvm,暴露给外面的攻击面比较大。因此,生产环境不应该直接把容器的服务暴露到公网。

26、Linux Cgroups 就是 Linux 内核中用来为进程设置资源限制的一个重要功能。

27、Linux Cgroups 的全称是 Linux Control Group。它最主要的作用,就是限制一个进程组能够使用的资源上限,包括 CPU、内存、磁盘、网络带宽等等。

28、Linux Cgroups 的设计还是比较易用的,简单粗暴地理解呢,它就是一个子系统目录加上一组资源限制文件的组合。

29、实际上,Mount Namespace 正是基于对 chroot 的不断改良才被发明出来的,它也是 Linux 操作系统里的第一个 Namespace。

30、而这个挂载在容器根目录上、用来为容器进程提供隔离后执行环境的文件系统,就是所谓的“容器镜像”。它还有一个更为专业的名字,叫作:rootfs(根文件系统)。

31、思考:docker exec 命令,实际上并不是真的“进入”了一个容器的东西,而是通过chroot命令,改变了要执行进程的rootfs,即根文件系统。

32、docker镜像实际就是一个完整文件系统的压缩包,启动容器的时候,1号进程被mount namespace到这个文件系统上。

33、需要明确的是,rootfs 只是一个操作系统所包含的文件、配置和目录,并不包括操作系统内核。在 Linux 操作系统中,这两部分是分开存放的,操作系统只有在开机启动时才会加载指定版本的内核镜像。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

golang & k8s学习笔记 的相关文章

  • 进程的调用

    每个进程都有一个非负整数的唯一ID xff0c 用pid t结构表示其ID xff0c 其中ID为0的是调度进程 xff0c 常被称为交换进程 是内核的一部分为系统进程 xff0c ID为1的是init进程 xff0c 他是一个普通用户进程
  • Oracle VM VirtualBox UUID already exists 问题解决

    当我们在VirtualBox下装完系统 xff0c 想拷贝一份备用的时候 xff0c 导入备份的虚拟磁盘的会提示VirtualBox UUID already exists问题 xff0c 其实这个问题在网络上早就有各种不同的解决方案了 x
  • Mac下将文件复制到移动硬盘

    现象分析 xff1a 如果你在使用Mac系统时 xff0c 发现Mac系统和移动硬盘之间无法拷贝数据 xff0c 很有可能你的移动硬盘是NTFS格式的 xff0c 因为目前苹果系统的硬盘格式暂时不兼容这样的格式拷贝 xff0c 只能从NTF
  • Maven打包时报Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war解决方案

    问题现象 xff1a 用Maven打包时 xff0c 报Failed to execute goal org apache maven plugins maven war plugin 2 2 war错误 原因分析 xff1a 打包时在We
  • mac系统中怎么把显示在桌面上的磁盘图标取消掉?

    问题现象 xff1a 安装一些软件时 xff0c 桌面上总会出现外置磁盘图标如图1 下面就简单介绍下怎样取消这种外置图标 图1 解决方案 xff1a finder xff0d 偏好设置 xff0d 通用 xff0d 外置设置 取消前面对话框
  • tensorflow深度学习实战笔记(三):使用tensorflow lite把训练好的模型移植到手机端,编译成apk文件

    目录 一 准备工作 1 1模型训练 1 2模型固化和pb转tflite 1 3下载tensorflow源码 1 4安装android studio 二 在Android studio中进行开发 2 1修改app的build gradle文件
  • nvidia和cuda对应以及cuda和cuDNN对应版本

  • 修改spring Boot启动时的默认图案Banner

    一 修改Banner spring Boot启动的时候会有一个默认的启动图案 如下图 39 39 39 39 96 39 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • Java线程池自学手册Executor的使用

    准备做一个系列文章 xff0c 将零散的知识整理起来分享给大家 xff0c 希望给大家的工作和学习带来帮助 目录 1 Executor 2 ExecutorService 3 Executors 4 ThreadPoolExecutor 5
  • 常用开发资源整理(更新日:2017/4/26)

    说明 xff1a 为了方便 xff0c 今后将工作中用到一些常用的资源链接进行整理 xff0c 初衷是想发些各版本的冷资源 xff0c 免得在需要的时候花大量时间寻找 一 开发语言 1 Spring各版本压缩包下载 http repo sp
  • 博客地址迁移www.xiangquba.cn

    大家好 xff0c 非常感谢大家一直以来对我的关注 xff0c 博客有一年时间没有更新了 xff0c 其实我并没有停止分享 xff0c 只是这一年时间并没有在csdn上更新 xff0c 原因是因为起初csdn有一个自己给csdn发送短信绑定
  • FreeRTOS 任务函数里面的死循环

    任务函数是一个无限循环且不带返回值的函数 任务必须是死循环 xff0c 否则任务将经过 LR 返回 xff0c 如果 LR 指向了非法内存就会产生HardFault Handler xff0c 而 FreeRTOS 指向一个死循环 xff0
  • 使用libcurl异步发送http请求

    在工作中需要完成一个工具 xff0c 该工具主要的用途就是向指定的服务器和端口发送http请求 xff0c 为了提高性能 xff0c 采用多线程的方式进行 xff0c 同时采用libcurl的异步形式 代码如下 xff0c 在其中添加一些注
  • 【Kubernetes】K8S实践感受HPA的功能

    1 确保metrics server安装好 span class token punctuation span root 64 jdmaster span class token punctuation span span class to
  • 拓扑结构与IP地址划分

    拓扑结构 分为总线型 星型和环形 环形要比星型的可靠性更高 公司的网络拓扑结构是星型 中心是交换机 IP发展 第一阶段 分为A E类 第二阶段 子网划分 第三阶段 无类域间路由 现在多采用这一种 不仅满足大网分小 也满足子网合成超网 无类域
  • 多网卡udp绑定问题

    在多网卡机器上 udp包 协议会自动根据路由最优选择从哪个网卡发数据包出去 即使你在此之前把改socket绑定到了另一个网卡上 参考文章 https blog csdn net Scarlett OHara article details
  • QIODevice::readyRead()

    void QIODevice readyRead This signal is emitted once every time new data is available for reading from the device 每次当新数据
  • 论文投稿参考——如何撰写和发表SCI论文

    如何撰写和发表SCI论文 汪景秀 提要 对从事基础研究的科学工作者 能否在SCI收录的杂志发表论文 是能否进入学术前沿 在国际公认的同一个平台上参与学术竞争 做出原创性贡献的一个基本标志 那么怎样的论文才是合格的 xff1f 本文提出一些建
  • Win7电脑遇到蓝屏,并报错:IRQL NOT LESS OR EQUAL

    这一阵电脑老是蓝屏 xff0c 重启后window和360都检测到之前发生过蓝屏 xff0c 但是都不能够修复成功 一开始直接在百度上搜电脑蓝屏 xff0c 也没啥大的收获 直到有次注意到蓝屏时还有错误类型 xff1a IRQL NOT L
  • VS使用收获总结

    诊断工具在调试 gt 窗口 gt 显示诊断工具 报CL exe问题 可能是IDE的问题 比如写一个最简单的hello world代码来进行检验 可以在查找时使用正则表达式 xff0c 比如想要搜索 行尾为 61 1 xff1b 的文本 可以

随机推荐

  • 进程间的mutex

    设两个进程共用一个临界资源的互斥信号量mutex 61 1 xff0c 当mutex xff1d xff0d 1时表示 一个进程进入了临界区 xff0c 另一个进程等待 没有一个进程进入临界区 两个进程都进入临界区 两个进程都在等待 互斥信
  • 128种chatGPT可以为人类做的事情

    1 充当英语翻译 充当英语翻译员 拼写纠正员和改进员 xff0c 我会用任何语言与你交谈 xff0c 你会检测语言 xff0c 翻译它并用我的文本的更正和 改进版本用英语回答 2 充当词典 充当英英词典 xff0c 对于给出的英文单词 xf
  • thing_10

    Choose Your Tools with Care Modern applications are very rarely built from scratch They are assembled using existing too
  • Distinguish Business Exceptions from Technical 21

    Distinguish Business Exceptions from Technical There are basically two reasons that things go wrong at runtime technical
  • Do Lots of Deliberate Practice 22

    Do Lots of Deliberate Practice Deliberate practice is not simply performing a task If you ask yourself Why am I performi
  • 只抓 5 件事,让管理更有效

    管理的第一性原理 效率 效益 环境的巨大不确定性带来前所未有的挑战 练好基本功 xff1a 提升管理质量 5件事 xff1a 计划 组织 控制 领导 人员配备 计划的意义 集中资源 注意力管理 协同 让计划滚动起来 控制 xff1a 计划
  • 二维vector,clear()操作请慎重,当心遇到vector subscript out of range问题

    问题 今天想要用vector实现二维数组的功能 尝试了把二维vector 谁知道刚上手就遇到了雷 代码的形式大致如下 vector lt vector lt int gt gt vv 3 vv clear for int i 61 0 i
  • UART详解

    UART 通用异步收发传输器 xff08 Universal Asynchronous Receiver Transmitter xff0c 通常称作UART xff09 是一种串行异步收发协议 xff0c 应用十分广泛 UART工作原理是
  • OpenCV学习笔记(10)CvMat 与 STL vector 的格式转换与数据读写

    用STL vector来进行数组的数据读写非常方便 xff0c 可以动态调整数组大小 xff0c 不过在OpenCV里使用vector时 xff0c 要保存vector数组的数据 xff0c 就需要转换为 CvMat 格式 比如有一个双通道
  • 回首5年嵌入式开发之路

    转眼毕业5年 xff0c 也是从事嵌入式软件开发5年 回首过往 xff0c 发现都在埋头敲代码 xff0c 从没有过梳理过自己的知识脉络 xff0c 利用这里梳理一下自己的知识结构 xff0c 首先梳理的是自己从事的第一个工作也是最简单的单
  • Trie实践:一种比哈希表更快的数据结构

    本文乃Siliphen原创 转载请注明出处 xff1a http blog csdn net stevenkylelee 本文分为5部分 从我 思考和认知的角度 xff0c 由浅到深带你认识Trie数据结构 1 桶状哈希表与直接定址表的概念
  • 图文详解HashTree(哈希树)

    引 在各种数据结构 xff08 线性表 树等 xff09 中 xff0c 记录在结构中的相对位置是随机的 因此在机构中查找记录的时需要进行一系列和关键字的比较 这一类的查找方法建立在 比较 的基础上 查找的效率依赖于查找过程中所进行的比较次
  • App中显示html网页

    在如今的移动开发中 xff0c 越来越多的web元素加入到了app里面 xff0c hybrid app能够综合native app 和 web app的优点 xff0c 可以通过webView实现 htmllayout xml xff1a
  • RGBD-SLAM V2 +RealsenseD435

    参考以下链接 xff1a https blog csdn net qq 28467367 article details 92832685
  • PX4开发环境搭建--源码下载+基本工具链

    PX4 开发环境搭建 xff08 2022 5 28 xff09 前言一 基本工具二 基本步骤1 安装虚拟机和Ubuntu操作系统注意 2 修改虚拟机上源网站 xff08 1 xff09 备份原来的sources list xff08 2
  • fisher分类器的python实现(两个类别、两个特征)

    一 数据准备 类别A W1 两个特征 45条训练数据 45 2矩阵 类别B W2 两个特征 45条训练数据 45 2矩阵 测试数据A T1 两个特征 5条数据 5 2矩阵 测试数据B T2 两个特征 5条数据 5 2矩阵 二 Fisher分
  • Cartographer导航问题——TF变换关系(1)

    硬件平台 xff1a 底盘 xff1a XRay 系统 xff1a Ros Melodic 激光雷达 xff1a 思岚A1 查看TF树 xff1a rosrun rqt tf tree rqt tf tree 更新中
  • Nano姿态估计:Mediapipe进行姿态估计

    使用Mediapipe进行姿态估计检测时 xff0c 拥有代码机构简单的优势 xff0c 而且较小量的模型使得姿态估计速度快 xff0c 真率高 xff0c 实时性较好 一 Windows环境中 在Windows环境中使用Mediapipe
  • PaddleDetection 训练自己的数据集(一)

    一 数据集准备 这里准备的是VOC数据集 dateset VOC jpegimages imgs annotations xmls label txt train txt valid txt 二 修改对应的yml文件 configs mod
  • golang & k8s学习笔记

    1 k8s概念图 2 In Kubernetes namespaces provides a mechanism for isolating groups of resources within a single cluster 在一个k8