![](https://img-blog.csdnimg.cn/2019092715111047.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Git | Linux | Docker | K8S
文章平均质量分 82
运维相关知识分类
Wang's Blog
Keep learning for the innovation era.
展开
-
K8s: Helm搭建mysql集群(2)
应用中心,mysql 文档参考https://artifacthub.io/packages/helm/bitnami/mysql1 )helm 搭建 mysqlA. 无存储,重启数据丢失添加源 $ helm repo add mysql-repo https://charts.bitnami.com/bitnami安装 $ helm install my-mysql mysql-repo/mysql --set primary.persistence.enabled=false,auth.r原创 2024-05-02 15:43:25 · 562 阅读 · 0 评论 -
K8s: Helm搭建mongodb集群(1)
mongdb 部署前 需要创建 pvc, pv 和 sc,如果在云上会自动创建helm 应用中心: https://artifacthub.io1 )Helm 安装 mongodbA. 无本地存储配置,重启数据消失在 https://artifacthub.io/packages/helm/bitnami/mongodb?modal=install 这个界面弹出的窗口中$ helm repo add bitnami https://charts.bitnami.com/bitnami这样就添原创 2024-05-02 14:35:02 · 1787 阅读 · 1 评论 -
K8s: Kubernetes扩展之自定义资源
自定义资源是 K8s 的扩展,有时候需要对K8s进行一个扩展在默认的K8s集群里面提供的资源对象是一个有限的集合比如常用的pod, deployment, service,这些都是K8s原生的资源之所以它资源,是因为它能够对外提供API接口变成一个resource进行访问通过 kubectl 创建,也能把这些资源创建出来当有限的K8s的资源,不能满足你的需求的情况下就需要通过 Custom Resource 来实现自定义的这个资源。原创 2024-05-01 01:00:00 · 1667 阅读 · 3 评论 -
K8s: Prometheus结合Grafana监控应用数据及相关配置 (三)
启动起来之后,可以留意一下2 )一键部署部署这个文件之前,可以先清理之前在这个命名空间,重新进行部署现在编写这个文件 $ 注意,下面两个 job_name 下定义的 target 地址 换成自己的$ 编写 grafana 配置部署 Grafana $ 上面两套都部署完成后,验证状态访问 Grafana UI界面 ip:30982 登录 添加 DataSource之后进行 Grafana Dashboard 的配置,现在换一个监控的模板数据面板会有延时,也可自行刷新查看,每个指标都是配置原创 2024-04-30 23:30:00 · 1608 阅读 · 0 评论 -
K8s: Prometheus结合Grafana监控应用数据及相关配置 (二)
重新打包和部署之后重新打包 $ mvn package登录到私有镜像中心 $ docker login 10.211.10.2:8081构建镜像 $ docker build -t 10.211.10.2:8081/docker/k8sblog:1.4 .给镜像添加tag $ docker tag 10.211.10.2:8081/docker/k8sblog:1.4 10.211.10.2:8081/docker/k8sblog:latest 同步 latest推送到私有镜像中心 $ dock原创 2024-04-30 19:15:00 · 285 阅读 · 0 评论 -
K8s: Prometheus结合Grafana监控应用数据及相关配置 (一)
Prometheus 核心是在于持续数据的存储,然后提供了数据的查询语言 promQL但是它的显示和图表做的并不好所以这个时候需要结合业界最专业的做报表展示的Grafana这个组件它的应用是非常广泛我们尝试部署 Grafana 来配置日志的一个显示创建Grafana Dashboard模版相关的configmap这个模板可以定制一个 Dashboard也就是说 Grafana 里面的 Dashboard 是通过一个 json 串来定义的这样就非常灵活,可以细致看下里面的一些字段原创 2024-04-30 12:45:00 · 301 阅读 · 0 评论 -
K8s: Prometheus 监控主机 和 K8s 集群
搭建 Prometheus创建对应 ServiceAccount达成角色访问的目的,避免所有人都能看到创建配置相关的 configmap定义了一堆的任务,收集各个层面的监控数据创建告警规则相关的configmap比如内存大于 75% 就加入一些标签并且可以出发一些事件创建Prometheus的缺省用户及密码缺省用户/密码为admin/admin: echo “YWRtaW4=” | base64 -D原创 2024-04-29 20:45:00 · 846 阅读 · 0 评论 -
K8s: Prometheus 服务结构以及基础抓取数据服务部署
我们要实现集群的系统时间同步,这个是非常重要,在每个node节点不管是master还是work node上都要执行。在这种情况下就需要部署一些能够采集到监控指标的一些服务,我们使用 Node Exporter 来进行集群的任务。集群都是有很多数据,要实现监控,需要知道监控的指标: 比如,磁盘CPU内存,还有网络的一些异常情况。注意,我们用的是时序数据库,时间一定要同步,不同步时间,数据会有问题。原创 2024-04-29 19:15:00 · 1242 阅读 · 0 评论 -
K8s: Helm包管理工具的应用以及项目分环境部署
1 ) 概述k8s中官方包管理工具, 官网:用 Yaml 管理多个应用同时部署不需要在不同的yaml中写两遍,执行两遍解决一键部署的问题,联合部署实现了部署的版本管理可以实现版本回滚应用和配置分离2 )安装下载解压移动到bin目录which helm验证命令helm ls列出。原创 2024-04-28 23:53:21 · 1080 阅读 · 1 评论 -
K8s: 应用项目部署运维环境搭建
注意,在低版本的一些 mysql 中的配置会有不同,而且可能需要加上如下,不会意外退出。我们在 node1 这个 work 节点部署,准备 app-mysql.yaml。这里的密码加密的生成,这里上面的可以进行参考,之前博文也有其他方式,请持续关注。注意,这个配置有很多的优化点,比如:集群副本,存储,密码加密等。可见,mysql数据库环境准备好了,这里只做了单实例的。这个就是在私有镜像中心设置的拉取镜像时的密码。现在,我们可以创建一个新的数据库了。2 )现在进入正题,应用程序的配置。1 ) 关于空间隔离。原创 2024-04-28 19:45:00 · 1043 阅读 · 0 评论 -
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 · 1160 阅读 · 0 评论 -
K8s: 最佳实践经验之谈
2 )关于“Naked”Pods 与 ReplicaSet,Deployment 和 Jobs。当 Kubernetes 启动容器时,它提供指向启动容器时正在运行的所有服务的环境变量。Deployment 描述了对象的期望状态,并且如果对该规范的更改被成功应用。在创建相应的后端工作负载(Deployment 或 ReplicaSet)例如,如果存在名为 foo 的服务,则所有容器将在其初始环境中获得以下变量。定义并使用标签来识别应用程序 或 Deployment 的 语义属性。6 )使用 kubectl。原创 2024-04-25 20:15:00 · 551 阅读 · 0 评论 -
K8s: ConfigMap 与 Secret 的配置管理
要使用 Secret,Pod 需要引用 Secret,Pod 可以用三种方式之一来使用 Secret。基于环境变量方式使用ConfigMap示例。2 )通过文件来创建秘钥。Secret 管理密钥。1 )直接通过命令创建。原创 2024-04-25 12:45:00 · 728 阅读 · 0 评论 -
K8s: PersistantVolume, PersistentVolumeClaim, Storage Class的相关概念与应用
注意,上面provisioner配置里的名称要和provisioner配置文件中的环境变量PROVISION_NAME保持一致。3 )PV, PVC,StorageClass 的协作流程。注意,要先由pv, 之后才能创建 pvc。原创 2024-04-25 07:15:00 · 1943 阅读 · 0 评论 -
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 · 860 阅读 · 0 评论 -
K8s: 控制器之Job对象
Job 任务在 K8s中类似 DaemonSet 和 Deployment 类似的对象,也是负责管理 Pod 的用于负责一些一次性的业务需求,它不是需要一直在后台运行的,所以不是 DaemonSet同时 Deployment 部署的是大的应用系统本身,它也不是一个 Deployment它可以执行一次,或者是多次有限次数的,或者是定期哪天执行的这么一个任务对于这种需求来讲就定义一个job原创 2024-04-24 12:45:00 · 387 阅读 · 0 评论 -
K8s: 控制器之DaemonSet对象和调度
6 )DaemonSet 仅在某些节点上运行 Pod。5 )DaemonSet Pod选择器。4 )DaemonSet Pod模板。3 )DaemonSet 必须字段。原创 2024-04-24 07:30:00 · 757 阅读 · 0 评论 -
K8s: 控制器之StatefulSets对象
在这里面,我们会先创建一个Service,然后再创建这个StatefulSets。新建 sfs-demo1.yaml。原创 2024-04-23 22:00:00 · 1365 阅读 · 0 评论 -
K8s: 控制器之Deployment对象
以上,基于Deployment对象,实现pod的水平扩容,等某个流量日过了,再修改回来。在实际场景中,单个web服务器并发连接数大概是1000会话左右, 超过就会排队。所以,超过这个数量会话就需要对其调优,性能达到瓶颈,后面请求就会排队。这就是 K8s 强大的地方,动态的扩容和缩容,实现一个弹性的网络。可以看到上面自动创建了 Replica Set 而且数量是2个。现在我们对其配额进行调整,将数量2修改为3, 现在先准备环境。创建 dep-repset.yaml。对于企业来讲,节约资源,节省成本。原创 2024-04-23 20:30:00 · 1255 阅读 · 0 评论 -
K8s: 控制器之ReplicaSet对象
pod 是一个无状态的,并且可以被任意的按需的调度,在各个work node上运行的组件。谁来控制这类调度就变得非常复杂,不可能去手工的去维护某一个pod的一个运行实例。K8s中提供了 controller 这个概念,对于副本管理来说,有两种。如果那样的话呢,它就失去了容器的概念,就会像一个虚拟机一样去运行。RS 可以独立使用,但是也可以被 Deployment 用来协调。这个说明副本控制器就是一直在工作来维持副本运行的稳定性。新建 rep-nginx.yaml。我们可以在A窗口这个监控窗口中看到。原创 2024-04-23 19:15:00 · 982 阅读 · 0 评论 -
K8s: 部署 kubernetes dashboard
K8s 官方有一个项目叫 dashboard,通过这个项目更方便监控集群的状态。所以 K8s 提供了一个dashboard UI界面来供运维人员使用。能够查看到集群所有的组件,但这样的方式比较不太直观。要查看集群有哪些pod,用户,命名空间等,比较麻烦。部署 dashboard。通常我们通过命令行 $之后,对该文件稍作修改。查看命名空间中的服务。原创 2024-04-22 22:56:53 · 1183 阅读 · 0 评论 -
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 · 1489 阅读 · 0 评论 -
K8s: 从集群外部访问Service
在前面我们一直实践的是在集群内部访问 Service,之前有2种方法方法1:在一个node节点上,通过对创建的的时候,对port进行一个环境变量的注册来保证Service能够正确对 不同的pod 访问到就是在这个node节点上,也是在集群内部方法2:另外一种方式呢是通过DNS记录比如说静态的pod创建这种专有域名的方式来保证集群内部都能访问到这个pod,这个service原创 2024-04-22 07:15:00 · 1142 阅读 · 0 评论 -
K8s: 集群内Pod通信机制之DNS
有了这样的参数之后,我们创建的pod,它就会自带 DNS这个域名,它的hostname 就会变成一个 full qualified 这么一个域名。hostname,就是我的主机名, 这个pod我可以认为它是一个最小的主机,这个主机已经有个名字了,比如说叫 busybox1。有了上面全的域名地址,就可以访问到它这个pod了,通过这种方式,K8s提供了pod的dns注册机制。然后域名就是你的公司名称,集群的名称,可以是你公司的域名,比如 x.com。通过这个域名,能够让别人通过这个DNS服务来找到我。原创 2024-04-21 21:28:48 · 1361 阅读 · 0 评论 -
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 · 1123 阅读 · 0 评论 -
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 · 1252 阅读 · 0 评论 -
K8s: 运行Pod时的root用户和非root用户的安全相关配置
docker 容器运行起来,默认是 root 用户这样运行起来后,基本不会遇到权限相关问题带来的问题是: 权限过大,被攻击后会遇到严峻挑战基于这个问题,K8s提出了特权用户的概念在容器启动时,虽然启动的是 root 用户,但是不具备所有root功能只是一个映射的root用户,如果不开启 privilege 试图修改系统关键信息是会报错的,加上 --privilege 之后,就是一个特权用户,就可以进行修改原创 2024-04-19 23:45:00 · 1738 阅读 · 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 · 597 阅读 · 0 评论 -
K8s: 在Pod中使用亲和性调度节点
它有一个节点亲和性配置 requiredDuringSchedulingIgnoredDuringExecution , disktype=ssd。这意味着 pod 只会被调度到具有 disktype=ssd 标签的节点上。依据强制的节点亲和性调度 Pod, 下面清单描述了一个 Pod。2 )场景2: 将数据库类型的应用部署到 db 类型的节点上。如果有移除相关label, 参考: $亲和性有很多类型,这里是一种节点亲和性。可以看到非常准确的部署到 设置了。创建 affinity.yaml。原创 2024-04-19 19:30:00 · 1086 阅读 · 0 评论 -
K8s: 在Pod里面对容器进行配额管理和相关原理
需要让资源在受控的环境下运行,一般都是加上 resources limits 的配置才能达到最佳实践。在生产环境中,内存占用通常很大,如果里面有死循环,会导致内存和cpu过大导致影响其他pod运行资源。默认cpu是0.5个cpu, 一般定义的时候参数是最高的门槛,不会超过这个设置。创建一个命名空间,以便将 本练习中创建的资源与集群的其余部分资源隔离。1 )Docker namespace 隔离。创建 cpu-limit.yaml。2 )CGroups 实现资源配额。原创 2024-04-19 12:45:00 · 771 阅读 · 0 评论 -
K8s: 在Pod里面配置容器启动的命令参数及容器间依赖的环境变量
在 Pod 配置文件中设置了一个命令与两个参数。现在,创建一个只包含单个容器的 Pod。2.2 将环境变量作为命令参数。以上是打印出来了几个环境变量。创建 args.yaml。原创 2024-04-19 07:30:00 · 1224 阅读 · 0 评论 -
K8s: 在Pod里面创建init容器与健康检查
kubelet会向容器内运行的服务(服务会监听 8080 端口)发送一个 HTTP GET 请求来执行探测。如果服务器上 /healthz 路径下的处理程序返回成功代码,则 kubelet 认为容器是健康存活的。同时pod中和容器中打印的时间相差 20s,这两个相差的时间一定是 大于 睡了的10s的。容器存活的最开始 10 秒中, /healthz 处理程序返回一个 200 的状态码。这样,通过探针的健康检查,可以判断pod的运行健康状态。下面的例子定义了一个有 init 容器和一个业务容器。原创 2024-04-18 23:30:00 · 1207 阅读 · 0 评论 -
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 · 1126 阅读 · 0 评论 -
K8s: 关于Kubernetes中的Pod的创建,实现原理,Job调度pod以及pod网络
Pod 是最小部署的单元,Pod里面是由一个或多个容器组成,也就是一组容器的集合一个pod中的容器是共享网络命名空间,每个Pod包含一个或多个紧密相关的用户业务容器Pod 是 k8s 系统中可以创建和管理的最小单元是资源对象模型中由用户创建或部署的最小资源对象模型也是在 k8s 上运行容器化应用的资源对象,其他的资源对象都是用来支撑或者扩展 Pod 对象功能的, 比如控制器对象是用来管控 Pod 对象的Service 或者 Ingress 资源对象是用来暴露 Pod 引用对象的。原创 2024-04-18 19:15:00 · 1215 阅读 · 0 评论 -
K8s: 将一个节点移出集群和相关注意事项
如果在执行 kubectl cordon 和 kubectl drain 命令后,节点的状态变为 NotReady,SchedulingDisabled。此外,如果你在生产环境中操作,请务必先在测试环境中验证所有步骤,以确保操作的正确性和安全性。但尚未成功将所有Pod驱逐到其他节点或节点本身存在某些问题导致它无法进入Ready状态。请注意,在执行这些操作之前,确保已经备份了所有重要的数据和配置,以防万一出现意外情况。可以通过执行以下命令来检查集群中的节点列表:$3 ) 从集群中移除节点。原创 2024-04-14 17:42:16 · 1022 阅读 · 0 评论 -
K8s: 裸机初始化Kubernetes集群环境
目前可用的 k8s版本在 1.29,每个版本配置不一样,最新版本基于 containerd.io 的, 删除了docker运行时。也可以使用 docker 的运行时,但配置比较麻烦,所以,我们使用 1.22.4版本,这是一个简单的版本。如果在 阿里云等云产品上,还需要配置安全组, 配置安全组类似于这样。还有需要了解 master 节点不跑任务,都是在 工作节点来跑。删除之前服务器上的一些 相关软件,(裸机的话,不用执行)现在工作节点上,也有这个文件了, 在工作节点上 执行。配置 Docker 安装源。原创 2024-04-13 13:56:35 · 707 阅读 · 0 评论 -
consul: 集群搭建和数据中心通信
对于当前的两台机器和单机部署的场景,每台机器上的Consul实例已经是其数据中心内的唯一服务器节点,因此它们不会通过WAN Gossip层进行通信。在大多数情况下,server节点需要这些配置来确保跨数据中心的通信,而client节点则主要关注与本地server节点的通信。在多数据中心的Consul配置中,client和server的配置会有所不同,具体取决于它们在架构中的角色和功能。同样的,并在 dc2 的 server.json 中添加指向dc1的配置,这里不再赘述。原创 2024-04-05 00:55:18 · 865 阅读 · 0 评论 -
nginx: 集群环境配置搭建
在构建和管理NGINX集群时,有许多关键的注意事项,如下。从这里可以看到,每个端口都可以自行配置管理。4 )服务器的硬件与配置。2 ) 目录结构配置。3 )网络带宽与延迟。原创 2024-04-04 19:30:00 · 2307 阅读 · 1 评论 -
Nginx: proxy_set_header 与 add_header 区别
proxy_set_header 和 add_header 是 Nginx 配置中两个不同的指令, 它们各自有不同的用途proxy_set_header 指令用于修改转发到代理服务器(通常是后端应用服务器)的 HTTP 请求头它允许您设置或覆盖请求头中的字段,以便后端服务器能够接收正确的信息或根据这些信息做出响应例如,有时可能会使用 proxy_set_header 来设置 Host 头,这样后端服务器就知道它正在为哪个域名提供服务有时候,还可以设置 X-Real-IP 和 X-Forwarded-原创 2024-04-01 20:59:42 · 1239 阅读 · 0 评论 -
github: 关于博客文章图片无法显示的问题
博客的图片托管于github之上,部分博客文章图片可能会不能正常加载,是github的一些域名无法正常解析造成的同时此篇文章也是解决github图片无法正常加载的处理方式原创 2020-04-24 11:53:29 · 684 阅读 · 1 评论