摘要:前面我们的课程中学习了大部分资源对象的使用方法,上节课我们通过一个WordPress的示例把我们前面的内容做了一个总结。今天我们来给大家讲解另外一个Pod控制器的使用方法,我们前面主要讲解的是Deployment这种对象资源的使用,接下来我们要讲解的是在特定场合下使用的控制器:DaemonSet与S
阅读全文
06 2022 档案
摘要:控制器 一、 Pod 的分类: 二、控制器类型: 1 Replication Controller(rc)和ReplicaSet(rs) 1.1ReplicaSet控制器示例: 2.Deployment 2.1Deployment控制器示例 3.DaemonSet 3.1DaemonSet控制器示例
阅读全文
摘要:大家都喜欢无状态的应用,因为存在随意停止、负载均衡,扩容、缩容等巨大优点,但是世界没有那么美好,都是无状态,那数据存放在哪里? 所以和Deployment差不多,K8S又搞了一个kind: StatefulSet来帮忙保存应用程序的数据,本质上在K8S上跑的是容器,容器本质是操作系统的进程,进程产生
阅读全文
摘要:1.应用场景 - 稳定的不共享持久化存储:即每个pod的存储资源是不共享的,且pod重新调度后还是能访问到相同的持久化数据,基于pvc实现。 - 稳定的网络标志:即pod重新调度后其PodName和HostName不变,且PodName和HostName是相同的,基于Headless Service
阅读全文
摘要:StatefulSet 有状态集群的调度。 对于ZooKeeper、Elasticsearch、MongoDB、Kafka等有状态集群,虽然集群中的每个Worker节点看起来都是相同的,但每个Worker节点都必须有明确的、不变的唯一ID(主机名或IP地址),这些节点的启动和停止次序通常有严格的顺序
阅读全文
摘要:Pod IP Kubernetes的最小部署单元是Pod。利用Flannel作为不同HOST之间容器互通技术时,由Flannel和etcd维护了一张节点间的路由表。Flannel的设计目的就是为集群中的所有节点重新规划IP地址的使用规则,从而使得不同节点上的容器能够获得“同属一个内网”且”不重复的”
阅读全文
摘要:kubernetes是什么? kubernetes是一个基于容器技术的分布式架构领先方案 k8s基础概念: Master 集群的"大脑",Kubernetes里的Master指的是集群控制节点,负责整个集群的管理和控制,基本上接收Kubernetes的所有控制命令,master负责具体的执行过程。m
阅读全文
摘要:1、service简介 2、开启kube-proxy的ipvs [root@server2 ~]# kubectl -n kube-system get pod | grep proxy 每个节点都有haproxy kube-proxy-d6cp2 1/1 Running 6 (121m ago)
阅读全文
摘要:01常见的业务场景 假设有两个服务A和B,他们之间相互调用,且同时对外提供,如下图所示 服务A和B之间必须互通 服务A和B都需要访问各种需要的基础设施,如数据库、消息队列等 服务A和B都对外暴露API 服务需要高可用,自动扩缩容 我们暂且不讨论这个架构设计是否合理,假设场景就是如此,正常线上情况往往
阅读全文
摘要:理解K8s中的三个IP概念 对于K8s集群中出现的三个IP概念:Node IP、Pod IP以及Cluster IP,它们分别指向不同的含义: 多个Pod部署在同一个物理机节点(或者虚拟机节点)上,此时这个节点的IP就是Node IP。 由多个pod组成的部署管理对象Deployment,如果需要对
阅读全文
摘要:文章目录 1. 核心组件原理 —— pod 核心原理 1.1 pod 是什么 1.2 pod 用来干什么 1.3 实现 web 服务集群 1.4 pod 底层网络和数据存储是如何进行的 2. ReplicaSet 副本控制器 2.1 副本控制器基本理解 2.2 ReplicaSet 和 Replic
阅读全文
摘要:文章目录 1. k8s 在企业中的应用场景 1.1 自动化运维平台 1.2 充分利用服务器资源 1.3 服务无缝迁移 2. 服务部署模式变迁 & 服务部署变化问题的思考 2.1 服务部署模式是如何变迁的 2.2 服务部署模式变化,带来了哪些问题 3. 云架构 & 云原生 3.1 云 和 k8s 的关
阅读全文
摘要:1. 复习 pod 相关核心结构 1.1 pod 结构 pod 相当于一个容器,pod 有独立的 ip 地址,也有自己的 hostname,利用 namespace 进行资源隔离,相当于一个独立沙箱环境。 pod 内部封装的是容器,可以封装一个,或者多个容器(通常是一组相关的容器) 1.2 pod
阅读全文
摘要:在实际生产环境中,有些容器内应用(比如编码器)需要用到物理层面的网络资源(比如组播流)。这就要求Kubernetes中的该Pod以HOST模式来启动。以下实验了Kubernetes-HOST网络模式,并给出了一些运维建议。 1、Pod的网络 每个Pod都会默认启动一个pod-infrastructu
阅读全文
摘要:为什么需要注册中心 随着单体应用拆分,首当面临的第一份挑战就是服务实例的数量较多,并且服务自身对外暴露的访问地址也具有动态性。可能因为服务扩容、服务的失败和更新等因素,导致服务实例的运行时状态经常变化,如下图: 商品详情需要调用营销、订单、库存三个服务,存在问题有:1.营销、订单、库存这三个服务的地
阅读全文
摘要:容器化趋势已势不可挡,但是在迁移过程中会遇到很多的问题,典型的就是 在迁移过程中不可能将全部的服务一次性的迁移至k8s集群中,一般都会逐步的迁移,这种时候http的服务无所谓,但是遇到rpc的就比较麻烦,我们需要将一部分服务放在集群内,一部分服务放在集群外,这时就需要将注册中心放在k8s的集群外,可
阅读全文
摘要:1 前言 ● 介绍如何在kubernetes集群中部署一个Nginx服务,并且能够对其访问。 2 Namespace 2.1 概述 ● Namespace是kubernetes系统中一种非常重要的资源,它的主要作用是用来实现多套系统的资源隔离或者多租户的资源隔离。● 默认情况下,kubernetes
阅读全文
摘要:kubernetes 自从1.7开始,可以在pod 的container 内获取pod的spec,metadata 等信息。 具体方法可以通过env获取: env: - name: MY_NODE_NAME valueFrom: fieldRef: fieldPath: spec.nodeName
阅读全文
摘要:上一篇博客总结的项目怎么部署到k8s上运行,但是运行pod ip是docker网桥的IP地址段进行分配的,通常是一个虚拟的二层网络,外部网络并没有办法访问,并且,pod ip是随时会变的,不是固定的,k8s引入了Service的概念,通过Service管理这些pod,Service创建后的Servi
阅读全文
摘要:使用Docker已有一段时间了,今天正好有空梳理下自己平时操作Docker时的一些命令和注意细节: Docker 命令帮助 $ sudo docker Commands: attach Attach to a running container --将终端依附到容器上 1> 运行一个交互型容器 [r
阅读全文
摘要:Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷(Data Volume)。数据卷可以用来存储Docker应用的数据,也可以用来在Docker容器间进行数据共享。数据卷呈现给Docker容器的形式就是一个目录,支持多个容器间共享,修改也不会影响镜像。使用Docker
阅读全文
摘要:自从Docker容器出现以来,容器网络通信就一直是被关注的焦点,也是生产环境的迫切需求。容器网络通信又分为两大方面:单主机容器上的相互通信,和跨主机的容器相互通信。 一、Docker单主机容器通信基于对net namespace的控制,docker可以为在容器创建隔离的网络环境,在隔离的网络环境下,
阅读全文
摘要:一、什么是Podkubernetes中的一切都可以理解为是一种资源对象,pod,rc,service,都可以理解是 一种资源对象。pod的组成示意图如下,由一个叫”pause“的根容器,加上一个或多个用户自定义的容器构造。pause的状态带便了这一组容器的状态,pod里多个业务容器共享pod的Ip和
阅读全文
摘要:自从Docker容器出现以来,容器的网络通信就一直是被关注的焦点,也是生产环境的迫切需求。容器的网络通信又可以分为两大方面:单主机容器上的相互通信,和跨主机的容器相互通信。 一、端口映射(局域网,外网此方式均可)。 此种方式是将容器的某个端口映射到宿主机的某个端口,其它主机访问容器提供的服务需要通过
阅读全文
摘要:Docker Docker 这个东西所扮演的角色,容易理解,它是一个容器引擎,也就是说实际上我们的容器最终是由Docker创建,运行在Docker中,其他相关的容器技术都是以Docker为基础,它是我们使用其他容器技术的核心。 Docker-Compose Docker-Compose 是用来管理你
阅读全文
摘要:最近项目用到kubernetes(以下简称k8s,k和s之间有8个字母)。虽然之前也有简单使用过,但最近发现k8s概念较多,命令也有些不够用了,故想借此机会写点东西,更全面认识并使用k8s。本篇文章目的:让你更全面了解k8s概念,以及学到在工作中常用的操作。整体更偏向于原理和应用。在正式开始k8s之
阅读全文
摘要:2010年,几个搞IT的年轻人,在美国旧金山成立了一家名叫“dotCloud”的公司。 这家公司主要提供基于PaaS的云计算技术服务。具体来说,是和LXC有关的容器技术。 LXC,就是Linux容器虚拟技术(Linux container) 后来,dotCloud公司将自己的容器技术进行了简化和标准
阅读全文
摘要:最近学到了shell脚本编程,觉得脚本中的不同括号有不同的用处,以及有些括号的格式也有特殊要求,下面我就总结一下各种括号的用法。 一、小括号();双小括号(()) 1、单小括号 () 1:命令替换。等同于`comm`,shell扫描一遍命令行,发现了$(comm)结构,便将$(comm)中的comm
阅读全文
摘要:先来说一下主要以下有几种方式: fork: 如果脚本有执行权限的话,path/to/foo.sh。如果没有,sh path/to/foo.sh。 exec: exec path/to/foo.sh source: source path/to/foo.sh fork fork 是最普通的, 就是直接
阅读全文
摘要:Shell 变量的作用域(Scope),就是 Shell 变量的有效范围(可以使用的范围)。在不同的作用域中,同名的变量不会相互干涉,就好像 A 班有个叫小明的同学,B 班也有个叫小明的同学,虽然他们都叫小明(对应于变量名),但是由于所在的班级(对应于作用域)不同,所以不会造成混乱。但是如果同一个班
阅读全文
摘要:Linux下一条命令或一个进程执行完成会返回一个一个状态码。 0 成功执行 非0 执行过程中出现异常或非正常退出 在Shell脚本中 最后执行的一条命令将决定整个shell脚本的状态. 此外 shell的内部命令exit也可以随时终止shell脚本的执行,返回Shell脚本的状态码 当shell脚本
阅读全文
摘要:变量 简介 变量就是程序设计语言中的一个可以变化的量,当然,可以变化的是变量的值。变量几乎所有的程序设计语言中都有定义,并且其涵义也大同小异。从本质上讲,变量就是在程序中保存用户数据的一块内存空间,而变量名就是这块内存空间的地址。在程序的执行过程中,保存数据的内存空间的内容可能会不断地发生变化,但是
阅读全文
摘要:对于初学者来说这几个意思可能只知道其中几个的意思,下面我们来看一下。 1、竖线‘|’ ,在linux中是作为管道符的,将‘|’前面命令的输出作为'|'后面的输入。举个例子 [18066609@root~]$ cat /etc/passwdroot:x:0:0:root:/root:/bin/bash
阅读全文
摘要:本文对SSH连接验证机制进行了非常详细的分析,还详细介绍了ssh客户端工具的各种功能,相信能让各位对ssh有个全方位较透彻的了解,而不是仅仅只会用它来连接远程主机。 另外,本人翻译了ssh客户端命令的man文档,如本文有不理解的地方,可以参考man文档手册:ssh中文手册。 SSH系列文章: SSH
阅读全文
摘要:SSH系列文章:SSH基础:SSH和SSH服务SSH转发代理:ssh-agent用法详解SSH隧道:端口转发功能详解 1.1 ssh安全隧道(一):本地端口转发 如下图,假如host3和host1、host2都同互相通信,但是host1和host2之间不能通信,如何从host1连接上host2? 对
阅读全文
摘要:SSH系列文章:SSH基础:SSH和SSH服务SSH转发代理:ssh-agent用法详解SSH隧道:端口转发功能详解 使用ssh-agent之前 使用ssh公钥认证的方式可以免去ssh客户端(如ssh命令、xshell等)连接远端主机sshd时需要输入对方用户密码的问题。 但如果执行ssh命令所在的
阅读全文
摘要:在经过编写 CLI 程序的尝试之后,我们继续回来聊 Go 语言的基础知识。 相信实际写过一些代码之后,会更容易理解。 原计划这期聊 数组和切片。考虑到聊切片时,无论如何绕不开指针和引用的话题,干脆提到前面来。 目录 [TOC] 指针 指针(Pointer)本质上是一个指向某块计算机内存的地址。就像日
阅读全文
摘要:编译自 Custom JSON Marshalling in Go。 我们知道,通过tag,可以有条件地实现定制Go JSON序列化的方式,比如json:",omitempty", 当字段的值为空的时候,我们可以在序列化后的数据中不包含这个值,而json:"-"可以直接不被JSON序列化,如果想被序
阅读全文
摘要:Go 语言中,函数参数传递采用是值传递的方式。所谓“值传递”,就是将实际参数在内存中的表示逐位拷贝到形式参数中。对于像整型、数组、结构体这类类型,它们的内存表示就是它们自身的数据内容,因此当这些类型作为实参类型时,值传递拷贝的就是它们自身,传递的开销也与它们自身的大小成正比。 但是像 string、
阅读全文
摘要:1. 包的概念 Go 语言是使用包来组织源代码的,并实现命名空间的管理。任何源代码文件必须属于某个包。源码文件的第一行有效代码必须是 package pacakgeName 语句,通过该语句声明自己所在的包。 2. 包的特征 所有的 .go 文件,除了空行和注释,都应该在第一行声明自己所属的包。即所
阅读全文
摘要:为想尝试 Go 的朋友开个头,介绍环境的配置。语言的优缺点不在此展开。 因身边多数使用 Win64 环境,以下无特殊说明均以 Win64 为例,日后有需要再补充其他平台部分。 1. Go 下载:https://golang.org/dl/ (out of wall) 版本:1.9+,一般下载最新版本
阅读全文
摘要:以前写过《配置 Golang 开发环境》(go < 1.13, win64)。然后 1.13 是一个重大变更,大到需要原有的依赖管理要做迁移的程度(《golang 1.13 - 依赖管理从 dep 到 mod 踩坑》)。 1.13 让原来的配置方式有了变化,撇开语言特性不谈,仅说和配置相关的,最大的
阅读全文
摘要:在写 《配置 1.13+ 的 golang 环境》时,花了大量篇幅解释 module 的概念,还有 module 与 package 之间的联系。眼看字数翻了一番,干脆把这部分另起一篇。 module 与 package 0x0 module 不是 package 是的,他们不是同一个概念!!mod
阅读全文
摘要:软件是由代码组成的。为了复用代码,代码的组织出现了不同层次的抽象和实现,如 Module(模块),包(Package),Lib(库),Framwork(框架)等。 通常一个Project(项目),会根据功能拆分很多 module,常用的软件会打包成一个个共享库。在开源社区分享软件包是一件十分 coo
阅读全文
摘要:一文搞懂Go语言的最新依赖管理:go mod的使用 2.1 背景 Go 依赖管理的演进经历了以下 3 个阶段: 目前被广泛应用的是 Go Module,整个演进路线主要围绕实现两个目标来迭代发展: 不同环境 (项目) 依赖的版本不同; 控制依赖库的版本。 2.2 Go 依赖管理的演进 2.2.1 G
阅读全文
摘要:在使用 Go module 过程中,随着引入的依赖增多,也许你会发现go.mod文件中部分依赖包后面会出现一个// indirect的标识。这个标识总是出现在require指令中,其中// 与代码的行注释一样表示注释的开始,indirect表示间接的依赖。 比如开源软件 Kubernetes(v1.
阅读全文
摘要:import golang 中的模块是通过 package 进行组织管理的,通过 import 进行导入的 几种包的导入形式: 导入标准库 import "fmt",是最常用导入标准的形式 import f "fmt",为标准库起一个别名,而后调用 fmt.Println("") 可以使用 f.Pr
阅读全文
摘要:hello world 从一个简单的程序开始解释,将下面的内容放进test.go文件中,路径随意: package main import ( "fmt" ) func main() { fmt.Println("Hello World") } Go通过包的方式管理程序,每个Go源代码文件都必须声明
阅读全文
摘要:import导入包 搜索路径 import用于导入包: 1 2 3 4 5 import ( "fmt" "net/http" "mypkg" ) 编译器会根据上面指定的相对路径去搜索包然后导入,这个相对路径是从GOROOT或GOPATH(workspace)下的src下开始搜索的。 假如go的安装
阅读全文
摘要:一、golang 的 module 是包管理工具 此篇属于golang开发基础、入门,管理源码中包的依赖关系、版本。捋顺包管理方法、重要性不言而喻。在 go1.11 之前,安装 golang 之后,需要配置两个环境变量即GOROOT 和GOPATH。GOROOT是 go 安装后的所在的路径,GOPA
阅读全文
摘要:Go 并发 Go 程 Go 程(goroutine)是由 Go 运行时管理的轻量级线程。 go f(x, y, z) 会启动一个新的 Go 程并执行 f(x, y, z) f, x, y 和 z 的求值发生在当前的 Go 程中,而 f 的执行发生在新的 Go 程中。 Go 程在相同的地址空间中运行,
阅读全文
摘要:Go 流程控制语句:for、if、else、switch 和 defer § for Go 只有一种循环结构:for 循环。 基本的 for 循环由三部分组成,它们用分号隔开: 初始化语句:在第一次迭代前执行 条件表达式,则前后的;会被去掉,若有:在每次迭代前求值 后置语句:在每次迭代的结尾执行 初
阅读全文
摘要:Go 更多类型:指针、struct、slice 和映射 指针 Go 拥有指针。指针保存了值的内存地址。 类型 *T 是指向 T 类型值的指针。其零值为 nil。 var p *int & 操作符会生成一个指向其操作数的指针。 i := 42 p = &i * 操作符表示指针指向的底层值。 fmt.P
阅读全文
摘要:Go 方法和接口 方法 Go 没有类。不过你可以为结构体类型定义方法。 方法就是一类带特殊的 接收者 参数的函数。 方法接收者在它自己的参数列表内,位于 func 关键字和方法名之间。 package main import ( "fmt" "math" ) type Vertex struct {
阅读全文
摘要:学习 A Tour of Go (中文参考 Go 之旅中文 ) 整理的笔记。介绍包、变量和函数的基本概念和使用。 包、变量和函数 1. package $GOPATH/src/go_note/gotour/basics/package/package.go 源码如下: /** * packages
阅读全文
摘要:1.0 函数、方法和接口 具名函数一般对应于包级的函数,是匿名函数的一种特例,当匿名函数引用了外部作用域中的变量时就成了闭包函数闭包函数是函数式编程语言的核心。 方法是绑定到一个具体类型的特殊函数,Go语言中的方法是依托于类型的,必须在编译时静态绑定。 接口定义了方法的集合,这些方法依托于运行时的接
阅读全文
摘要:今天get到一个在linux下gdb调试程序的技巧和大家分享一下!平时我们利用gcc进行编程,进行程序调试时,观察程序的跳转等不是这么直观。都是入下的界面! 但是如果我们在编译连接时上加了-g命令生成的可执行文件,用gdb -tui -q p2psrv(要debug的命令),就可以进入一个类似的可视
阅读全文
摘要:GDB 概述 GDB 是 GNU 开源组织发布的一个强大的 UNIX 下的程序调试工具。也许大多数开发人员比较喜欢那种图形界面方式的,像 VC 、 BCB 等 IDE 的调试,但如果你是在 UNIX 平台下做软件开发,你会发现 GDB 这个调试工具有比 VC 、 BCB 的图形化调试器更强大的功能。
阅读全文
摘要:原文链接 使用GDB 要调试C/C++的程序,在编译时,使用编译器(cc/gcc/g++)的 -g 参数把调试信息加到可执行文件中。启动GDB的方法: gdb <program> : 用gdb调试可执行文件。 gdb <program> core : 用gdb调试coredump。 gdb <pro
阅读全文
摘要:ldd命令 linux 下可以使用ldd查看可执行文件所需要的动态链接库(*.so)。 注:下文用so代替动态链接库文件。 // 举个例子 ~$ ldd /bin/ls linux-vdso.so.1 => (0x00007ffe06386000) libselinux.so.1 => /lib/x
阅读全文
摘要:问题现象 gdb调试core文件或进程时,出现加载so库符号失败,错误信息如下 warning: Could not load shared library symbols for ../libadd.so Do you need "set solib-search-path" or "set sy
阅读全文
摘要:嵌入式Linux的GDB调试环境由Host和Target两部分组成,Host端使用arm-linux-gdb,Target Board端使用gdbserver。调试时,应用程序在嵌入式目标系统上运行,而gdb调试在Host端。 一、编译安装gdb+gdbserver 首先下载gdb源码,我下载的是g
阅读全文
摘要:1、调试原理 GDB调试是应用程序在开发板上运行,然后在PC机上对开发板上得应用程序进行调试,PC机运行GDB,开发板上运行GDBServer。在应用程序调试的时候,pc机上的gdb向开发板上的GDBServer发出命令,而开发板上的gdbserver就会向应用程序发出信号,使应用程序停下来或者完成
阅读全文
摘要:1.gdb和gdbserver调试原理 通过linux虚拟机里的gdb,来向开发板里的gdbserver发送命令,比如设置断点,运行setp等,然后开发板上的gdbserver收到命令后,便会执行应用程序做相应的动作,来实现调试的功能 和之前学的裸板GDB调试 一样,只不过之前学的是在win下的,本
阅读全文
摘要:目录 一、原理 二、环境搭建 1、VSCode设置 2、gdbserver安装 三、调试过程 一、原理 嵌入式系统中一般在 PC端运行 gdb工具,源码也是在 PC端,源码对应的可执行文件放到开发板中运行。为此我们需要在开发板中运行 gdbserver,通过网络与 PC端的 gdb进行通信。因此要想
阅读全文
摘要:目录标题 引言 环境 步骤 vscode remote ssh 配置 Linux编译机配置 设备板端配置 vscode launch设置 调试 引言 之前说了,通过core dump找程序bug,但是有些时候排查问题的还是不够高效,命令行形式gdb还是太简陋了,在IDE debug代码打断点,查堆栈
阅读全文
摘要:目录 环境 工具 安装Remote-SSH插件 安装SSH客户端 配置ssh客户端路径 配置服务器的地址、端口号和登录用户 连接服务器 选择一个远程目录作为工作区 在远程服务器上安装插件 创建和修改launch.json文件 创建和修改task.json文件 远程调试程序 后记 参考资料 环境 本地
阅读全文
摘要:1、安装openssh windows客户端、linux服务器端都需要安装openssh,一般情况linux服务器默认安装,windows除去新版的 win10,其他都需要单独安装 2、安装vscode插件 需要安装 C/C++、CMake Tools、Remote - SSH、Remote Dev
阅读全文
摘要:什么是SSH?简单说,SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylon
阅读全文
摘要:Proxifier是一款SOCKS5客户端通用代理软件,支持网络应用程序通过HTTPS或SOCKS代理上网。Proxifier支持XP,Vista,Win7和MAC OS等操作系统,支持SOCKS4,SOCKS5,HTTP,TCP和UDP等协议; Proxifier还支持玩各种网页游戏,与CCPro
阅读全文
摘要:本文是介绍通过clion进行本地windows对远程Linux的程序进程调试 必要条件:Linux环境上有安装cmake、 make、 g++、 gdb、 gdbserver 本文调试的代码 #include <iostream> using namespace std; int add(int a
阅读全文
摘要:必要条件 ①Linux环境上安装了gdb ②动态库、二进制文件编译时要加-g选项 ③vs安装了 “使用C++的Linux开发” 组件 步骤一:vs安装了 “使用C++的Linux开发” 组件 通过控制面板->程序和功能->Visual Studio右键更改->勾选 “使用C++的Linux开发” 组
阅读全文