自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Wang的专栏

Name: wangqiangqiang | Email : [email protected] | Github : github.com/johnnynode

  • 博客(1018)
  • 收藏
  • 关注

原创 K8s: 公有镜像中心和私有镜像中心的搭建

如果 hub.docker.com 在国内无法访问,可以在阿里云上创建 docker hub。在 hub.docker.com 上注册账号 (国内一般访问不了,原因不多说)找到 Create Repository 按钮就行仓库的创建。这样就在官方创建了一个仓库,比如地址为: xx/y-y。现在,我将本地的docker镜像,推送到这个仓库里。1 )在 官方docker镜像中心推送。2 )在阿里云docker镜像中心搭建。配置国内 Docker 镜像源 $为官方docker镜像中心加速。配置之后,需要重启 $

2024-04-26 22:37:54 268

原创 K8s: 最佳实践经验之谈

2 )关于“Naked”Pods 与 ReplicaSet,Deployment 和 Jobs。当 Kubernetes 启动容器时,它提供指向启动容器时正在运行的所有服务的环境变量。Deployment 描述了对象的期望状态,并且如果对该规范的更改被成功应用。在创建相应的后端工作负载(Deployment 或 ReplicaSet)例如,如果存在名为 foo 的服务,则所有容器将在其初始环境中获得以下变量。定义并使用标签来识别应用程序 或 Deployment 的 语义属性。6 )使用 kubectl。

2024-04-25 20:15:00 311

原创 K8s: ConfigMap 与 Secret 的配置管理

要使用 Secret,Pod 需要引用 Secret,Pod 可以用三种方式之一来使用 Secret。基于环境变量方式使用ConfigMap示例。2 )通过文件来创建秘钥。Secret 管理密钥。1 )直接通过命令创建。

2024-04-25 12:45:00 345

原创 K8s: PersistantVolume, PersistentVolumeClaim, Storage Class的相关概念与应用

注意,上面provisioner配置里的名称要和provisioner配置文件中的环境变量PROVISION_NAME保持一致。3 )PV, PVC,StorageClass 的协作流程。注意,要先由pv, 之后才能创建 pvc。

2024-04-25 07:15:00 1472

原创 K8s: 持久化存储之卷, NFS卷

在 Master 节点启动 NFS 服务和 rpcbind,并设置它们在系统启动时自动运行。在 Master节点检查 NFS 服务和 rpcbind 是否运行正常。可以看到,数据是同步的了,当然 hostPath 仍然是有局限的。现在回到 master.k8s 这个 master 节点上查看。查看pod被部署到了哪台node节点上,$在 Master 节点查看挂载效果 $现在,可以看到,nfs 服务正常工作了。3 ) 在 node 节点 运行服务。在 Master 节点配置 $在 Master 节点 $

2024-04-24 19:15:00 613

原创 K8s: 控制器之Job对象

Job 任务在 K8s中类似 DaemonSet 和 Deployment 类似的对象,也是负责管理 Pod 的用于负责一些一次性的业务需求,它不是需要一直在后台运行的,所以不是 DaemonSet同时 Deployment 部署的是大的应用系统本身,它也不是一个 Deployment它可以执行一次,或者是多次有限次数的,或者是定期哪天执行的这么一个任务对于这种需求来讲就定义一个job

2024-04-24 12:45:00 337

原创 K8s: 控制器之DaemonSet对象和调度

6 )DaemonSet 仅在某些节点上运行 Pod。5 )DaemonSet Pod选择器。4 )DaemonSet Pod模板。3 )DaemonSet 必须字段。

2024-04-24 07:30:00 652

原创 K8s: 控制器之StatefulSets对象

在这里面,我们会先创建一个Service,然后再创建这个StatefulSets。新建 sfs-demo1.yaml。

2024-04-23 22:00:00 1039

原创 K8s: 控制器之Deployment对象

以上,基于Deployment对象,实现pod的水平扩容,等某个流量日过了,再修改回来。在实际场景中,单个web服务器并发连接数大概是1000会话左右, 超过就会排队。所以,超过这个数量会话就需要对其调优,性能达到瓶颈,后面请求就会排队。这就是 K8s 强大的地方,动态的扩容和缩容,实现一个弹性的网络。可以看到上面自动创建了 Replica Set 而且数量是2个。现在我们对其配额进行调整,将数量2修改为3, 现在先准备环境。创建 dep-repset.yaml。对于企业来讲,节约资源,节省成本。

2024-04-23 20:30:00 991

原创 K8s: 控制器之ReplicaSet对象

pod 是一个无状态的,并且可以被任意的按需的调度,在各个work node上运行的组件。谁来控制这类调度就变得非常复杂,不可能去手工的去维护某一个pod的一个运行实例。K8s中提供了 controller 这个概念,对于副本管理来说,有两种。如果那样的话呢,它就失去了容器的概念,就会像一个虚拟机一样去运行。RS 可以独立使用,但是也可以被 Deployment 用来协调。这个说明副本控制器就是一直在工作来维持副本运行的稳定性。新建 rep-nginx.yaml。我们可以在A窗口这个监控窗口中看到。

2024-04-23 19:15:00 705

原创 K8s: 部署 kubernetes dashboard

K8s 官方有一个项目叫 dashboard,通过这个项目更方便监控集群的状态。所以 K8s 提供了一个dashboard UI界面来供运维人员使用。能够查看到集群所有的组件,但这样的方式比较不太直观。要查看集群有哪些pod,用户,命名空间等,比较麻烦。部署 dashboard。通常我们通过命令行 $之后,对该文件稍作修改。查看命名空间中的服务。

2024-04-22 22:56:53 1011

原创 K8s: Ingress对象, 创建Ingress控制器, 创建Ingress资源并暴露服务

外部到 K8s work node 上的请求,所以,它就是类似于 nginx 的组件。简单来说 ingress controller 实际在系统里面创建一系列的pod。5 )基于 ingress 控制器创建 ingress 资源,并对外暴露服务。本质上就是运行在 K8s服务器上的一系列的 pod, 通过 pod 来接管。有了这样的一个组件在K8s平台运行起来之后,可以检查部署版本,粘贴如下。综上,ingress 的控制器已经搭建完毕。3 )最小 Ingress 资源示例。4 )Ingress 控制器。

2024-04-22 20:50:20 1283

原创 K8s: 从集群外部访问Service

在前面我们一直实践的是在集群内部访问 Service,之前有2种方法方法1:在一个node节点上,通过对创建的的时候,对port进行一个环境变量的注册来保证Service能够正确对 不同的pod 访问到就是在这个node节点上,也是在集群内部方法2:另外一种方式呢是通过DNS记录比如说静态的pod创建这种专有域名的方式来保证集群内部都能访问到这个pod,这个service

2024-04-22 07:15:00 934

原创 K8s: 集群内Pod通信机制之DNS

有了这样的参数之后,我们创建的pod,它就会自带 DNS这个域名,它的hostname 就会变成一个 full qualified 这么一个域名。hostname,就是我的主机名, 这个pod我可以认为它是一个最小的主机,这个主机已经有个名字了,比如说叫 busybox1。有了上面全的域名地址,就可以访问到它这个pod了,通过这种方式,K8s提供了pod的dns注册机制。然后域名就是你的公司名称,集群的名称,可以是你公司的域名,比如 x.com。通过这个域名,能够让别人通过这个DNS服务来找到我。

2024-04-21 21:28:48 1210

原创 K8s: 集群内Pod通信机制之环境变量

2.3 调整顺序,这时候已经有 service 了,删除 development, 重新启动 development。2.1 这里我们先反过来,先创建 deployment 再创建 service。2.2 再创建 service:svc-my-nginx.yaml。好现在服务已经运行起来了, 现在进入pod容器中。借用之前的 development 先运行起来。创建 svc-my-nginx.yaml。

2024-04-21 19:15:00 1032

原创 K8s: Service对象以及与Pod之间的通信关系

在用这种方式创建的时候,先把之前创建的 Service 删除。1 )配置 Deployment 对象用来维护 Pod。这样就会创建2个pod, 之后,创建 Service。上面等价于通过 yaml 文件创建 Service。现在创建 svc-my-nginx.yaml 文件。新建 dep-my-nginx.yaml。可以看到,多了一个 deploment。2.2 基于yaml文件来处理。2 ) 定义 Service。通过 label 来查看。2 )创建 Service。创建 Service。

2024-04-20 15:00:00 954

原创 K8s: 运行Pod时的root用户和非root用户的安全相关配置

docker 容器运行起来,默认是 root 用户这样运行起来后,基本不会遇到权限相关问题带来的问题是: 权限过大,被攻击后会遇到严峻挑战基于这个问题,K8s提出了特权用户的概念在容器启动时,虽然启动的是 root 用户,但是不具备所有root功能只是一个映射的root用户,如果不开启 privilege 试图修改系统关键信息是会报错的,加上 --privilege 之后,就是一个特权用户,就可以进行修改

2024-04-19 23:45:00 1290 2

原创 K8s: 在Pod中将configmap数据注入容器

文档:Kubernetes 为我们提供了 ConfigMap,可以方便的配置一些变量是一个存储键值对 key-value 对象的metadata:data:---kind: Podmetadata:labels:spec:resources:limits:envFrom:这里只在 data 中配置一个 db-url 如果需要多个,自行配置创建查看 configmap这里可以看到,配置的字段写入了环境变量这样应用程序就可以读取环境变量了,实现了应用的解耦。

2024-04-19 21:15:00 562

原创 K8s: 在Pod中使用亲和性调度节点

它有一个节点亲和性配置 requiredDuringSchedulingIgnoredDuringExecution , disktype=ssd。这意味着 pod 只会被调度到具有 disktype=ssd 标签的节点上。依据强制的节点亲和性调度 Pod, 下面清单描述了一个 Pod。2 )场景2: 将数据库类型的应用部署到 db 类型的节点上。如果有移除相关label, 参考: $亲和性有很多类型,这里是一种节点亲和性。可以看到非常准确的部署到 设置了。创建 affinity.yaml。

2024-04-19 19:30:00 1054

原创 K8s: 在Pod里面对容器进行配额管理和相关原理

需要让资源在受控的环境下运行,一般都是加上 resources limits 的配置才能达到最佳实践。在生产环境中,内存占用通常很大,如果里面有死循环,会导致内存和cpu过大导致影响其他pod运行资源。默认cpu是0.5个cpu, 一般定义的时候参数是最高的门槛,不会超过这个设置。创建一个命名空间,以便将 本练习中创建的资源与集群的其余部分资源隔离。1 )Docker namespace 隔离。创建 cpu-limit.yaml。2 )CGroups 实现资源配额。

2024-04-19 12:45:00 728

原创 K8s: 在Pod里面配置容器启动的命令参数及容器间依赖的环境变量

在 Pod 配置文件中设置了一个命令与两个参数。现在,创建一个只包含单个容器的 Pod。2.2 将环境变量作为命令参数。以上是打印出来了几个环境变量。创建 args.yaml。

2024-04-19 07:30:00 899

原创 K8s: 在Pod里面创建init容器与健康检查

kubelet会向容器内运行的服务(服务会监听 8080 端口)发送一个 HTTP GET 请求来执行探测。如果服务器上 /healthz 路径下的处理程序返回成功代码,则 kubelet 认为容器是健康存活的。同时pod中和容器中打印的时间相差 20s,这两个相差的时间一定是 大于 睡了的10s的。容器存活的最开始 10 秒中, /healthz 处理程序返回一个 200 的状态码。这样,通过探针的健康检查,可以判断pod的运行健康状态。下面的例子定义了一个有 init 容器和一个业务容器。

2024-04-18 23:30:00 1086

原创 K8s: 关于Kubernetes中的Pod的生命周期(状态)以及生命周期的钩子函数处理

在上述配置文件中,可以看到 postStart 命令在容器的 /usr/share 目录下写入文件 message。创建一个包含一个容器的 Pod,该容器为 postStart 和 preStop 事件提供对应的处理函数。在Pod配置文件中,定义 postStart 和 preStop 处理函数。创建一个 pod, 新建一个 lifecycle-demo.yaml 文件。命令 preStop 负责优雅地终止 nginx 服务。当因为失效而导致容器终止时,这一处理方式很有用。查看文件是否被写入内容。

2024-04-18 20:45:00 933

原创 K8s: 关于Kubernetes中的Pod的创建,实现原理,Job调度pod以及pod网络

Pod 是最小部署的单元,Pod里面是由一个或多个容器组成,也就是一组容器的集合一个pod中的容器是共享网络命名空间,每个Pod包含一个或多个紧密相关的用户业务容器Pod 是 k8s 系统中可以创建和管理的最小单元是资源对象模型中由用户创建或部署的最小资源对象模型也是在 k8s 上运行容器化应用的资源对象,其他的资源对象都是用来支撑或者扩展 Pod 对象功能的, 比如控制器对象是用来管控 Pod 对象的Service 或者 Ingress 资源对象是用来暴露 Pod 引用对象的。

2024-04-18 19:15:00 1081

原创 Go微服务: 服务限流原理, 负载均衡与API网关

go 微服务保稳三剑客: 熔断,限流,负载均衡限流的作用限制流量,在服务端生效注意:熔断是客户端生效保护后端服务餐厅吃饭排队的问题,提供凳子,让等候,这就是限流操作如果不限流,每个客户都吃不上饭与熔断互补go 微服务保稳三剑客: 熔断,限流,负载均衡负载均衡的作用提高系统可扩展性如果漏桶算法中的处理速度存在瓶颈不满足需求,我们就要通过负载均衡来弥补如果客户端请求,服务端压力比较大的时候,也可以用负载均衡支持 HTTP, HTTPS, TCP, UDP 请求。

2024-04-16 12:45:00 1338

原创 Go微服务: 服务熔断hystrix原理

go 微服务保稳三剑客:熔断,限流,负载均衡微服务熔断(hystrix-go) 与 服务雪崩效应在服务里面,有服务A调用服务B, 会有依赖调用关系,同时服务C被B依赖如果依赖关系在生产环境中多的话,C挂了之后服务B原本正常,也会因为C导致不正常同时,A因为依赖B导致A也出了问题这时候,会级联反应,就是服务雪崩效应,如下图微服务熔断 (hystrix-go) 目标组织故障的连锁反应快速失败并迅速恢复它会走一个熔断的逻辑回退并优雅降级。

2024-04-16 07:45:00 918

原创 Go微服务: go-micro集成链路追踪jaeger

链路追踪数据写入的过程可以加入 kafaka 缓冲压力我们可以通过链路追踪开发发现我们是否有循环调用在链路中非必要尽量避免带入异步场景的span异步场景,比如写入日志,操作数据库把这些操作加入span, 也没有一个明确返回的时间特别不利于排错

2024-04-15 08:45:00 300

原创 Go微服务: 链路追踪jaeger原理和环境搭建

著名的管理学大师彼得·德鲁克曾说过“If you can’t measure it, you can’t improve it”意思是:如果你不能度量它,你就无法改进它在微服务开发后期,服务会越来越多,调用链过多,进行链路追踪时,心态会崩溃这时候,我们就要引入一个链路跟踪的工具:jaegerjaeger 是用来监视和诊断基于微服务的分布式系统用于服务依赖性分析,辅助性能优化里面反应出来依赖关系之间的调用时间 (开始和结束时间)

2024-04-15 06:15:00 803

原创 Go微服务: go-micro集成consul的注册中心和配置中心

1 )consul 集群 2 )consul 中设置mysql的配置文件 2 )common 核心代码参考 3 )main.go 核心代码

2024-04-14 20:47:42 621 1

原创 K8s: 将一个节点移出集群和相关注意事项

如果在执行 kubectl cordon 和 kubectl drain 命令后,节点的状态变为 NotReady,SchedulingDisabled。此外,如果你在生产环境中操作,请务必先在测试环境中验证所有步骤,以确保操作的正确性和安全性。但尚未成功将所有Pod驱逐到其他节点或节点本身存在某些问题导致它无法进入Ready状态。请注意,在执行这些操作之前,确保已经备份了所有重要的数据和配置,以防万一出现意外情况。可以通过执行以下命令来检查集群中的节点列表:$3 ) 从集群中移除节点。

2024-04-14 17:42:16 812

原创 K8s: 裸机初始化Kubernetes集群环境

目前可用的 k8s版本在 1.29,每个版本配置不一样,最新版本基于 containerd.io 的, 删除了docker运行时。也可以使用 docker 的运行时,但配置比较麻烦,所以,我们使用 1.22.4版本,这是一个简单的版本。如果在 阿里云等云产品上,还需要配置安全组, 配置安全组类似于这样。还有需要了解 master 节点不跑任务,都是在 工作节点来跑。删除之前服务器上的一些 相关软件,(裸机的话,不用执行)现在工作节点上,也有这个文件了, 在工作节点上 执行。配置 Docker 安装源。

2024-04-13 13:56:35 678

原创 设计模式: 行为型之解释器模式(23)

解释器模式(Interpreter Pattern)是一种行为型设计模式,用于给定一门语言,定义它的文法的一种表示并定义一个解释器,该解释器使用该表示来解释语言中的句子这种模式按照规定的文法(语法)进行解析,使得一些重复出现的问题可以用一种简单的语言进行表达我们首先要定义语言的文法表示,这通常涉及到定义语言的语法规则和句子结构然后,我们设计一个解释器,它能够读取这些语法规则和句子,并根据这些规则进行解释或执行相应的操作。

2024-04-13 08:15:00 842

原创 设计模式: 行为型之访问者模式(22)

访问者模式(Visitor Pattern)是一种行为设计模式,它封装了一些作用于某种数据结构各元素的操作可以在不改变数据结构的前提下定义作用于这些元素的新的操作访问者模式适用于需要对一个对象结构中的对象进行很多不同操作同时需要避免让这些操作“污染”这些对象的类。

2024-04-13 06:45:00 622

原创 设计模式: 行为型之中迭代器模式(21)

迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式它提供了一种方法顺序访问一个聚合对象中各个元素,而又无须暴露该对象的内部表示,这种模式属于行为型模式迭代器模式的核心思想是将集合对象的迭代行为抽象到迭代器中,提供一致的接口使得不同的容器可以提供一致的遍历行为,而不用关心容器内元素的组成结构这种设计方式解耦了迭代与集合,使得集合对象本身无需关心遍历的逻辑,而迭代器对象则专注于遍历的实现。

2024-04-12 23:45:00 571

原创 设计模式: 行为型之中状态模式(20)

状态模式(State Pattern)是一种行为设计模式,它允许对象在内部状态改变时改变其行为状态模式通过为每个状态定义一个类,使得对象在其内部状态改变时,可以改变其行为。

2024-04-12 21:45:00 640

原创 设计模式: 行为型之中观察者模式(19)

观察者模式(Observer Pattern)是一种行为设计模式它定义了对象之间的依赖关系,当一个对象(被称为主题或发布者)的状态改变时所有依赖于它的对象(被称为观察者)都会得到通知并自动更新。

2024-04-12 20:30:00 765

原创 设计模式: 行为型之中介者模式(18)

中介者模式(Mediator Pattern)是一种行为设计模式,它用于减少对象之间的直接交互,从而使其可以松散耦合中介者模式通过引入一个中介者对象来协调多个对象之间的交互,使得这些对象不需要知道彼此的具体实现,只需与中介者进行通信中介者模式结构中介者(Mediator)定义了一个接口,用于与各同事对象通信具体中介者实现中介者接口,协调各个同事对象之间的交互并可以维护同事对象之间的引用关系同事类每一个同事对象都知道中介者对象,并与它通信。

2024-04-12 19:30:00 740

原创 设计模式: 行为型之命令模式(17)

由于命令模式引入了额外的命令对象,可能会导致请求处理的时间变长。:命令模式可以方便地实现请求的撤销与重做,只需将命令对象保存到历史记录中,然后按需执行撤销或重做操作。:客户端无需了解复杂的业务逻辑,只需调用命令对象的执行方法即可,降低了客户端的复杂性。:由于命令对象相对独立,增加新的命令比较容易,只需实现新的命令类即可,符合开闭原则。:命令模式支持命令的组合,即多个命令可以组合成一个复合命令,从而一次性执行多个操作。:如果命令的执行速度至关重要,命令模式的间接调用机制可能会引入额外的性能开销。

2024-04-12 12:45:00 783

原创 设计模式: 行为型之策略模式(16)

策略模式(Strategy Pattern)是一种行为设计模式,它使你能在运行时改变对象的行为该模式定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

2024-04-12 08:45:00 376

原创 设计模式: 行为型之模板方法模式(15)

模板方法模式(Template Method Pattern)是一种行为设计模式它在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤// 定义抽象类,它包含了算法的框架或者说模板方法// 模板方法,定义了算法的骨架// 原语操作,留给子类去实现// 具体子类,实现抽象类中未实现的原语操作// 使用示例// 输出:// ---是抽象类,它定义了算法的模板方法和几个抽象方法。

2024-04-12 07:45:00 233

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除