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...
StatefulSet[实例]-Mysql集群
StatefulSet[实例]-Mysql集群Introduce基于StatefulSet搭建K8s集群中的Mysql集群 —个‘主从复制”(MaserˉSlaveReplicatjon)的MySQL集群; 有一个主节点(Master); 有多个从节点(Slave); 从节点需要能水平扩展; 所有写操作只能在主节点上执行; 读操作可以在所有节点上执行 How to work 通过XtraBackup实现MySql备份 配置从节点,复制到/var/lib/mysql,执行 1234567CHANGE MASTER TOMASTER_HOST='$masterip';MASTER_USER='xxx';MATSER_PASSWORK='xxx';# 这个文件来资源第一个创建的xtrabackup_binlog_infoMASTER_LOG_FILE='TheMaster-bin.00001';MASTER_LOG_POS=481; 启动节点备份: 1START SLAVE...
Goland—远程Debug
Goland—远程DebugIntroduce主要是本地不能调试的代码,通过Goland远程断点调试 步骤1234567891011121314151. 安装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的最简单的抽象: 123456789101112131415161718192021222324package mainimport ( "context" "fmt" metaV1 "k8s.io/apimachine...
K8s-解析云上初始化(keadm init)
K8s-解析云上初始化(keadm init)什么是keadm initkeadm init通过keadm init可以实现初始化cloudcore。 解析keadm init过程 ExecuteInit就是真正执行init的方法,实际上是通过实现了InstallTools接口函数的方法实现的 所以InstallTools方法实现了init的进入函数 真正实现下载安装的函数是runHelmInstall 1234567891011121314151617// IsKubeEdgeProcessRunning checks if the given process is running or notfunc IsKubeEdgeProcessRunning(proc string) (bool, error) { //pidof是Linux系统中用来查找正在运行进程的进程号(pid)的工具 // proc=cloudcore procRunning := fmt.Sprintf("pidof %s 2>&1", pr...