Grafana-整合日志查询Loki
Grafana-整合日志查询LokiIntroduce为Grafana添加日志指标
flubit-bitFluent Bit:Fluent Bit 是一个轻量级的日志收集器和处理器。它设计用于从各种来源(如应用程序、容器、操作系统等)收集日志数据,并将其发送到不同的目标。Fluent Bit 可以将日志数据发送到多种目标,包括存储系统、消息队列和分析工具等。它提供了灵活的插件机制,可用于解析、过滤和转换日志数据
LokiLoki 是一个开源的日志聚合系统,专门用于处理和查询大规模分布式日志数据。它是由 Grafana Labs 开发的,作为 Grafana 生态系统的一部分。Loki 使用了 Prometheus 的标签索引和查询语言,可以高效地存储和查询日志数据。Loki 的设计目标是可扩展性和低资源消耗,适用于云原生环境
# 1. 添加Helm仓库helm repo add grafana https://grafana.github.io/helm-charts# *2. 拉取本地Helm文件helm pull grafana/loki-stack# 3. helm安装lokih ...
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置项
# 允许嵌入[security] allow_embedding = true # 允许匿名登入[auth.anonymous] enabled ...
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
# 添加一个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.关闭防火墙等#!/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.ip_forward.*#net.ipv4.ip_forward=1#g" /etc/sysctl ...
K8s-公网部署集群
K8s 公网部署集群BackGroud在公网环境下,或者需要跨局域网组成集群下。需要让Master以公网IP启动,而kubeadm init 参数启动,只支持局域网。
Deploy
获取配置文件kubead config default > k8s-init.yaml,localAPIEndpoint.advertiseAddress就是公网IP地址
最新使用 kubeadm config print init-defaults > k8s-init.yamlapiVersion: kubeadm.k8s.io/v1beta2bootstrapTokens:- groups: - system:bootstrappers:kubeadm:default-node-token token: abcdef.0123456789abcdef ttl: 24h0m0s usages: - signing - authenticationikind: InitConfigurationlocalAPIEndpoint: advertiseAddress: 121 ...
StatefulSet[实例]-Mysql集群
StatefulSet[实例]-Mysql集群Introduce基于StatefulSet搭建K8s集群中的Mysql集群
—个‘主从复制”(MaserˉSlaveReplicatjon)的MySQL集群;
有一个主节点(Master);
有多个从节点(Slave);
从节点需要能水平扩展;
所有写操作只能在主节点上执行;
读操作可以在所有节点上执行
How to work
通过XtraBackup实现MySql备份
配置从节点,复制到/var/lib/mysql,执行
CHANGE MASTER TOMASTER_HOST='$masterip';MASTER_USER='xxx';MATSER_PASSWORK='xxx';# 这个文件来资源第一个创建的xtrabackup_binlog_infoMASTER_LOG_FILE='TheMaster-bin.00001';MASTER_LOG_POS=481;
启动节点备份:
START SLAVE;
添加节点
D ...
Goland—远程Debug
Goland—远程DebugIntroduce主要是本地不能调试的代码,通过Goland远程断点调试
步骤1. 安装Gocurl https://github.com/Piwriw/k8s_example_tools/blob/master/setup-packages/go/setup-linux.sh -o setup-go.shsh setup-go.sh 1.192. 安装dlvgo install github.com/go-delve/delve/cmd/dlv@latest3. 安装gcccgo: C compiler "gcc" not found: exec: "gcc": executable file not found in $PATHyum install -y gccapt install -y gcc4. 远程服务器启动dlv
Kubeedge-解析获取Token(keadm gettoken)
Kubeedge-解析获取Token(keadm gettoken)什么是keadm gettokenleads gettoken一般用于我们接入cloudcore的token的值的获取。
如何获取token通过解析keadm gettoken源码,我们发现,其实keadm gettoken本质上就是查询下了kubeedge namespace 下的name为tokensecret 的Secret的tokendata的值
https://github.com/kubeedge/kubeedge/blob/4ab8abe101e1037415d2c641feef642ab73a1d47/keadm/cmd/keadm/app/cmd/cloud/gettoken.go#L63
这是一个Kubeedge 获取token的最简单的抽象:
package mainimport ( "context" "fmt" metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/cli ...