K8s-List-watch机制
K8s-List-watch机制BackGround在 Kubernetes 中,有5个主要的组件,分别是 master 节点上的 kube-api-server、kube-controller-manager 和 kube-scheduler,node 节点上的 kubelet 和kube-proxy 。这其中 kube-apiserver 是对外和对内提供资源的声明式 API 的组件,其它4个组件都需要和它交互。为了保证消息的实时性,有两种方式: 客户端组件 (kubelet, scheduler, controller-manager 等) 轮询 apiserver apiserver 通知客户端 为了降低kube-apiserver的压力,就是通过list-watch机制。其实list-watch就是client监听K8s资源变化 list-watach 机制需要满足以下需求: 实时性 (即数据变化时,相关组件越快感知越好) 保证消息的顺序性 (即消息要按发生先后顺序送达目的组件。很难想象在Pod创建消息前收到该Pod删除消息时组件应该怎么处理) 保证消息不丢失或者...
Prometheus-接入ETCD监控
Prometheus-接入ETCD监控Introduce通过Prometheus监控ETCD数据,包括Grafana Overview1234567# 通过2379 获取指标curl http://<hostip>:2379/metrics# 开启tls认证的etcdcerts=/etc/kubernetes/pki/etcd/curl --cacert $certs/ca.crt --cert $certs/peer.crt --key $certs/peer.key https://<hostip>:2379/metrics Etcd 中的指标可以分为三大类: Server Disk Netwrok Server以下指标前缀为 etcd_server_。 has_leader:集群是否存在 Leader 没有的话集群不可以 leader_changes_seen_total:leader 切换数 比较多的话说明集群不稳定 proposals_committed_total:已提交提案数 如果 member 和 leader 差距较大,说...
Grafana-整合日志查询Loki
Grafana-整合日志查询LokiIntroduce为Grafana添加日志指标 flubit-bitFluent Bit:Fluent Bit 是一个轻量级的日志收集器和处理器。它设计用于从各种来源(如应用程序、容器、操作系统等)收集日志数据,并将其发送到不同的目标。Fluent Bit 可以将日志数据发送到多种目标,包括存储系统、消息队列和分析工具等。它提供了灵活的插件机制,可用于解析、过滤和转换日志数据 LokiLoki 是一个开源的日志聚合系统,专门用于处理和查询大规模分布式日志数据。它是由 Grafana Labs 开发的,作为 Grafana 生态系统的一部分。Loki 使用了 Prometheus 的标签索引和查询语言,可以高效地存储和查询日志数据。Loki 的设计目标是可扩展性和低资源消耗,适用于云原生环境 123456# 1. 添加Helm仓库helm repo add grafana https://grafana.github.io/helm-charts# *2. 拉取本地Helm文件helm pull grafana/loki-stack# 3. he...
Raft 算法概述
Raft 算法概述What is RaftRaft 协议是一种共识算法(consensus algorithm) 简单来说,其实就是大家投票,超过半数,通过✅ 为什么需要 Raft ? 回答该问题之前可以思考一下另一个问题:为什么需要共识算法? 为了解决单点问题,软件系统工程师引入了数据复制技术,实现多副本。而多副本间的数据复制就会出现一致性问题。所以需要共识算法来解决该问题。 共识算法的祖师爷是 Paxos, 但是由于它过于复杂,难于理解,工程实践上也较难落地,导致在工程界落地较慢。 Raft 算法正是为了可理解性、易实现而诞生的 概述Raft给服务器设置了三种状态,分别是领导者(leader)、跟随者(follower)和候选者(candidate)。跟随者通过投票选出领导者,只有得到“大多数”跟随者投票的服务器能成为领导者;领导者负责将命令同步给跟随者,只有被“大多数”跟随者确认的命令才能提交。 raft 会先选举出 leader,leader 完全负责 replicated log 的管理。leader 负责接受所有客户端更新请求,然后复制到 follower 节点,并...
Grafana-嵌入前端
Grafana-嵌入前端IntroduceGrafana能展示好看的图表,但是前端不能直接展示 Quick Startiframe模式演示使用prometheus中的grafana,K8s部署 添加配grafana置项 123456# 允许嵌入[security] allow_embedding = true # 允许匿名登入[auth.anonymous] ...
K8s-网络模型
K8s-网络模型K8s场景网络主要有以下几种: Container-to-Container网络 Pod-to-Pod网络 Pod-to-Service网络 Internet-to- Service网络 Container-to-Container网络虚拟机网络: 在Linux 系统中,其实本质上在network namespace通信,每一个network namespace提供逻辑的网络堆栈,创建的namespace,会被挂载到/var/run/netns 123456# 添加一个network namespaceip netns add ns1# 查看所有network namespaceip netns# 查看挂载点ls /var/run/netns 默认情况下,Linux所有的进程都被分配到root network namespace 在K8s网络下,所有Pod下的容器共享一个网络: 在这个network namespace下使用同一个IP和同一个端口空间 通过localhost自然也可以访问Pod下的其他容器 Pod-to-Pod的网络Pod和Pod之...
Istio-初识
Istio-初识What is Istio? Istio是一个用于服务治理的开发平台 Istio是一个Service Mesh形态的服务治理开发平台 Istio是一个Kubernetes紧密结合的适用于云原生场景的Service Mesh形态的平台 Main of Istio 自动注入:创建应用程序自动注入Sidecar代理。在K8s下创建Pod,Kube-apiserver调用管理面组件的Sidecar-Injector服务,自动修改应用程序的描述信息并注入Sidecar。在真正创建Pod,创建业务容器会在容器Pod内创建Sidecar容器 流量拦截:在Pod初始化的时候设置iptables规则,当流量到达根据iptables的规则拦截Inbound流量和Outbound流量到Sidecar 服务发现:服务发起方的Envoy调用管理面组件Pilot的服务发现接口获取目标服务的实例列表 负载均衡:服务发起方的Envoy根据配置的负载均衡策略选择服务实例,连接对应的实例地址 流量治理:Envoy从Pilot中获取配置的流量规则,在拦截到Inbound流量和Outbound流量执...
cri-o的安装
cri-o的安装CRI-O是一个为容器运行时提供轻量级、高效和符合标准的解决方案的开源项目。它是Kubernetes使用的容器运行时接口(CRI)规范的实现之一。 安装1.关闭防火墙等123456789101112131415161718192021222324252627282930#!/bin/bash# 关闭 防火墙systemctl stop firewalldsystemctl disable firewalld# 关闭 SeLinuxsetenforce 0sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config# 关闭 swapswapoff -ayes | cp /etc/fstab /etc/fstab_bakcat /etc/fstab_bak |grep -v swap > /etc/fstab# 修改 /etc/sysctl.conf# modprobe br_netfilter# 如果有配置,则修改sed -i "s#^net.ipv4.i...
K8s-公网部署集群
K8s 公网部署集群BackGroud在公网环境下,或者需要跨局域网组成集群下。需要让Master以公网IP启动,而kubeadm init 参数启动,只支持局域网。 Deploy 获取配置文件kubead config default > k8s-init.yaml,localAPIEndpoint.advertiseAddress就是公网IP地址 最新使用 kubeadm config print init-defaults > k8s-init.yaml12345678910111213141516171819202122232425262728293031323334353637383940apiVersion: kubeadm.k8s.io/v1beta2bootstrapTokens:- groups: - system:bootstrappers:kubeadm:default-node-token token: abcdef.0123456789abcdef ttl: 24h0m0s usages: - signing - auth...







