风向阅读致力于提供优质的在线Go语言学习笔记全栈编程学习资源,提供每日好文阅读推荐
序前面介绍了k8s组件和对象的一些基本概念,了解了k8s具体是做什么的以及架构,那么接下来我们开始介绍怎么去安装k8s,这里我们以windows为例,其他平台可以参考Kubernetes官方文档,其实安装方式都是类似的。先决条件要在系统中安装 Kubernetes,以下是一些需要特别注意的先决条件。软件要求如下:已启用 Hyper-V确保系统已安装 Docker上面两个条件如果你还不满足的话,可以参考网上有很多安装教程,当然这里后面也会出一个比较详细的安装说明文章。Kubernetes 安装实践因为我的系统很早之前就已经安装好了Docker,所以我们直接来看怎么通过Docker去安装Kubernetes。首先打开Docker Desktop,然后在电脑右下角右键单击 Docker 托盘图标并选择setting,或者点击Docker面板右上角的设置图标:弹出软件setting面板,在面板的左菜单中选择Kubernetes, 勾选启用Kubernetes并点击“应用”:Docker 在安装过程中会安装额外的包和依赖项。安装可能需要 5 到 10 分钟,具体取决于你的网络速度和电脑的性能
序上一篇我们介绍了 k8s 的基本架构,我们在这篇文章将介绍 Kubernetes 关键组件和概念。还是先来一张图:根据上图我们分别对Deployment、ReplicaSet、Pod详细的介绍,其他的几个在上一篇也做了介绍:DeploymentDeployment 是 Kubernetes 中的资源对象,为应用程序提供声明性更新。部署允许你描述应用程序的生命周期。也就是说他的主要作用就是管理和控制 Pod 和 ReplicaSet,监控它们运行在用户所期望的状态中。例如应用程序使用哪些镜像像、应该有的 Pod 数量以及更新它们的方式。ReplicaSetReplicaSet 是一个运行 Pod 的多个实例并保持指定的 Pod数量不变的进程。目的就是在任何时间内维持集群中运行的指定数量的 Pod 实例,以防止用户在 Pod 发生故障或无法访问时失去对其应用程序的访问权限,如果监控到某一个Pod不能继续服务的时候,他会确保我们的应用程序Pod总体服务数量保持在我们期望的数量,然后再重新启动一个Pod。这里说一下Replication Controller 与 ReplicaSet,Rep
Kubernetes 概述当下,我们很多项目于都在Cloud Native(云原生)的上面,这种方法旨在使组织能够确保可用性并快速响应和适应变化,云原生其实就是一组本质上支持在不同云环境(公共云、私有云或混合云)上大规模构建、运行和管理应用程序的实践和技术。云原生离不开两个概念:容器和微服务,这两个概念是任何云原生应用程序的构建块:微服务是小型、独立的服务(软件)的集合,可以在容器中轻松打包和执行。容器基于容器镜像, 容器是一个标准的软件单元,它打包代码及其所有依赖项,无论基础设施如何, 都允许应用程序快速可靠地运行容器镜像是一个轻量级的、独立的、可执行的软件包,其中包含运行应用程序所需的一切,容器镜像在运行时成为容器使用微服务架构是确保应用程序速度、敏捷性、增长和可用性的基础,因此,它改善了用户体验。例如,随着网络流量的增加或减少,放置在单体专用服务器上的整体应用程序比一组微服务更难扩展和缩减。然而,微服务架构的快速采用导致生产环境中容器数量的增加,这使得容器的管理和维护变得非常困难。并且,如果服务的请求量上来,已部署的服务响应不过来的时候怎么办呢?传统的做法是,如果请求量、内存、C
在上一篇文章中,我分享了有关context包的第一部分:valueCtx和cancelCtx,我们在这篇文章中继续探索更多内容。WithTimeout 和 WithDeadline我们还是先来一个例子:package main import ( "context" "fmt" "time" ) func main() { cancelCtx, cancel := context.WithTimeout(context.Background(), time.Second*3) defer cancel() go task(cancelCtx) time.Sleep(time.Second * 4) } func task(ctx context.Context) { i := 1 for { select { case <-ctx.Done(): fmt.Println(ctx.Err())
背景context在整个Golang生态体系中被广泛使用,我们在平时开发的时候也会经常用到它,而且Golang的很多标准包都依赖它context。关于context的一些使用方法的应用场景我在前面两篇文章也做了详细介绍,今天这篇文章我们就来介绍context内部的源码。我们先回顾一下context它能解决的一些问题:公共参数或数据的传递通知所有子goroutine优雅退出,从而释放资源业务执行超时或者在截止日期之前执行结束,然后程序优雅地退出或返回上面几种使用方法就不做详细的介绍,下面直接看context包的源码。源码分析我们打开context包里面的context.go文件,发现其实除开注释的一些文档外,差不多也就只有200多行的代码。Context接口和emptyCtxcontext最基本的数据结构是Context如下接口:type Context interface { Deadline() (deadline time.Time, ok bool) Done() <-chan struct{} Err() error Value(key i
我们总以为,这是时间在优胜劣汰,大浪淘沙,时间留下了最适合你的人。有一位朋友在我的视野里消失很久了,久到我几乎忘记了她。有一天我忽然想起她,心想她是不是退出微博或者屏蔽我了,于是特意去搜了她的微博和朋友圈。我这才发现,她发状态的频率相当高,就在两个小时前还po了新照片。这让我很惊讶,我们一直是互相关注的状态,只是很久没有互动,但不知道为什么,明明她的动态就在眼前,但关于她的一切就好像在我脑袋里自动屏蔽了。我们是如何疏远的呢?我沿着记忆的轨迹向前搜寻。她发来的上一条微信是新年祝福,我没回。再往前是中秋节祝福和五一节祝福,我依然高冷地没回。继续往前翻已经是去年3月份,她问我去不去楼梯间抽烟,我回,好的。那时候,我们的关系非常好。好到她抽到一半的烟屁股,我抢过来继续抽。我们在二月的春风里张罗着要一起去旅游,我搜遍了旅游网站上所有的地名然后说,随便哪都行,只要你想去我都就舍命相陪,她说,啊呸。半夜我发微博说肚子饿,没多久就听到有人敲门,原来她远程帮我订了麦当劳。那段时间我新书未出,日夜赶稿,写到卡住的地方就发给她,无论凌晨几点,她都会第一时间回复,评论中肯又走心。我很感激她的帮助,她笑笑说没什
电视里,女主角终于要嫁给自己爱的人,她一个人半夜爬起来,穿上婚纱,对着镜子,没完没了地笑。吃着红薯粥、蓬头垢面地坐在沙发上,我突然意识到,自己这辈子可能都穿不上婚纱了,就是穿上,也未必有这样甜蜜的笑,就是有这样的笑,也已经太晚了。15岁的时候再得到那个5岁的时候热爱的布娃娃,65岁的时候终于有钱买25岁的时候热爱的那条裙子,又有什么意义。什么都可以从头再来,只有青春不能。那么多事情,跟青春绑在一起就是美好,离开青春,就是傻冒。骑车在大街上大声唱走调的歌,冬天的雪夜里“嘎吱”“嘎吱” 踩着雪地去突袭一个人,紧皱着眉头读萨特的书并在上面划满严肃的道道,走在商场里悄悄拆一包东西吃然后再悄悄地放回去。看一个朋友拍的一个“搞笑片”,但看来看去,我就是笑不出来,原因是这个片子里都是些35岁左右的“中青年人”。这样的片子,若是15岁的小孩子拍,会“很搞笑”。若是25岁左右的人拍,会“挺搞笑”。但是35岁的人拍,便觉得很不好笑。连愚蠢,也只是青年人的专利。张爱玲说,出名要趁早。我不知道别人怎么理解这句话,照我不堪的理解,就是早点出名,好男人就早点发现你,然后浪漫故事就早早地发生了。你若是35岁、45岁
介绍今天,我们讨论Go编程中context非常重要的一个东西:context超时。我们先简单举个现实生活中的一个场景:想象一下您在一个游乐场,兴奋地想要坐上巨型过山车。但有一个问题:排队的队伍超级长,而且距离游乐场关闭只有一个小时的时间。你该怎么办?嗯,你可能会等一段时间,但不会等一个小时,对吧?如果你等了 30 分钟但仍未排在队伍的前面,你可以离开队列尝试其他的项目。这个例子就是我们所说的“超时”。现在,想象一下你还在排队,突然下起了大雨。游乐场决定关闭过山车。你肯定不会还坚持去排队等待吧?你会马上离开或者去其他地方。这里就是我们所说的“取消”了。在编程里面,我们经常也会遇到类似的情况。要求我们的程序执行可能需要很长时间或由于某种原因需要停止任务。那么这时候context包发挥作用就来了。它可以让我们能够优雅的去处理这些超时和取消。当然我们在上一篇《goroutine并发控制与通信》文章中也讲到了用context去实现多线程的并发控制与通信,这里我们更详细的去介绍context的使用方法。工作原理我们可以分下面几步去模拟上面的场景:首先创建一个上下文,这里和上面场景的去排队过山车类似
序这是Go标准库中的包之一,优雅、功能强大、编写良好且文档齐全。大多数Go开发者的初级阶段都觉得它更令人困惑,就像我在学习Go程序的早期阶段所遇到的那样,迷茫不知道如何上手。原理如下图所示: Golang 中context的入口点是上下文包,它是一个根节点emptyCtx,我们需要的任何上下文(Context)都将是根(emptyCtx)上下文的子级。当需要带有cancel - cancelCtx的上下文时,它实际上会采用父级上下文(空Context),在本例中context.Background()返回的就是一个emptyCtx,并且它将生成以context.Background()作为父级上下文的新上下文,所以我们可以从先前的上下文创建任何上下文作为父上下文,这样就形成了一个图表,也类似于我们常说的树这种数据结构。如果父级上下文被取消(cancel),取消实际上会传播到其所有子级及其子级的所有子级,因此我们在复杂的并发编程中非常有用。应用context中有以下几个场景方法:上面的Background()与TODO()都是空上下文,但是一般我们都使用context.Backgroun
隔日清早,我坐在房间中间,拆开一个又一个礼品盒子。我不知道自己为何如此费劲,因为我总是兴味索然地看上一眼,就将礼物丢到屋角去。它们在那边积成一堆:宝丽莱相机,变频收音机,精巧的电动列车组合玩具——还有几个装着现金的信封。我知道自己永远不会花那些钱,不会听那个收音机,而那辆电动列车也不会在我房间中爬上它的轨道。我不想要这些东西——这些全都是血腥钱;而且,若非我赢得风筝大赛,爸爸根本就不会替我举办那么一场宴会。爸爸给了我两件礼物。一辆崭新的施温·斯丁格雷,自行车之王,毫无疑问会让临近的小孩垂涎三尺,喀布尔拥有新斯丁格雷的孩子寥寥无几,如今我也跻身其中了。它的手把高高升起,握柄由黑色橡胶制成,还有个蜚声久远的香蕉型车座,轮辐是金色的,钢做的车身是红色的,赭红色,像鲜血那样。换成别的孩子,恐怕会立即跳上去,骑着它招摇过市。几个月前的我也许会这么做。“你喜欢吗?”爸爸斜倚在我房间门口问。我露出温顺的笑容,匆匆说了声“谢谢”。我多希望我能多说几句话。“我们可以去骑骑。”爸爸说。他在邀请我,不过并非真心实意。“再说吧,我有点累了。”“好的。”爸爸说。“爸爸?”“怎么?”“谢谢你的烟花。”我说。我在感
青丝南开
文字、摄影、骑行爱好者