etcd

OpenStack操作笔记(1)--- 基础环境搭建

你离开我真会死。 提交于 2020-07-27 12:28:13
参考文档: OpenStack官网地址: https://docs.openstack.org/ OpenStack中文安装手册(Mitaka版): https://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/ OpenStack英文安装手册: https://docs.openstack.org/install-guide/index.html 结合上面的文档内容,我自己安装的是Train版 参考视频: 老男孩OpenStack教学视频,B站链接: https://www.bilibili.com/video/BV1LJ411Y7og?from=search&seid=1640586261709664390 服务器配置(基于VMwareworkstation): controller(控制节点):centos7,1核4G,10.150.165.101 compute1(计算节点):centos7,1核1G,10.150.165.102 以下内容基于此目录顺序(就是上面那个英文安装手册内容): 一、基础环境配置(在所有节点执行) 关闭防火墙、selinux、配置时间同步、互相写入hosts解析 二、基础服务安装(跟着上面的中文手册做) 1、安装启用OpenStack库(在所有节点执行) 2、安装mariadb(在控制节点执行)

分布式系统选主怎么玩

北战南征 提交于 2020-07-26 23:24:12
分布式系统为了保证其可靠性,一般都会多节点提供服务,各别节点的故障不会影响系统的可用性。对于分布式的存储系统来说,在保证可用性的同时,数据的可靠性(不丢失)也是其要解决的核心问题。目前通用的方案是使用多副本存储。这就会引入一个新的问题,分布式存储系统的又一核心问题——多个副本间的数据一致性保障。所以就有了各种数据一致性协议。例如:Zookeeper的Zab、Etcd使用的Raft和无比复杂的Paxos等等。这些一致性协议都有一个共同的特点,那就是都有一个主节点(Leader)负责数据的同步。 本文不讨论这些一致性协议的工作原理,我们重点聊一聊它们的选主策略——当Leader挂掉后,集群必须有能力选出一个新的Leader。为什么只讨论选主呢?因为在我们的工作中几乎不太可能去设计实现一致性协议,但"选主"这个事儿还是有可能需要我们去做的。例如之前文章介绍的时间轮,我们有多个节点提供服务,但只能有一个节点去转动轮子(一秒移动一次当前指针),这个时候就需要系统中始终有一个Leader负责转动轮子。业务上类似的需求还有很多,这里就不举例了,接下来我们介绍下几种选主策略。 首先明确下选主的时机:一般发生在集群的Leader宕机或者集群刚刚启动时,集群中没有Leader,这时就会触发选主。这里有两个技术点: 1、集群中节点需要能够感知到Leader的存在; 2

03 . 二进制部署kubernetes1.18.4

╄→гoц情女王★ 提交于 2020-07-25 18:07:56
简介 目前生产部署kubernetes集群主要两种方式 kubeadm Kubeadm是一个K8s部署工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。 二进制包 从github下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。 Kubeadm降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。如果想更容易可控,推荐使用二进制包部署Kubernetes集群,虽然手动部署麻烦点,期间可以学习很多工作原理,也利于后期维护。 二进制部署K8s List CentOS7.3 cni-plugins-linux-amd64-v0.8.6.tgz etcd-v3.4.9-linux-amd64.tar.gz kube-flannel.yml kubernetes-server-linux-amd64.tar.gz 角色 IP 组件 master 192.168.31.71 kube-apiserver,kube-controller-manager,kube-scheduler,etcd Node1 192.168.31.74 kube-apiserver,kube-controller-manager,kube-scheduler Node2 192.168.31.72 kubelet,kube-proxy,docker

KubeFlow-Pipeline及Argo实现原理速析

China☆狼群 提交于 2020-07-25 16:51:04
Argo是一个开源原生容器工作流引擎用于在Kubernetes上开发和运行应用程序。Argo Workflow流程引擎,可以编排容器流程来执行业务逻辑,在20年4月8日进入CNCF孵化器组。 而KubeFlow的Pipeline子项目,由Google开源,其全面依赖Argo作为底层实现,并增强持久层来补充流程管理能力,同时通过Python-SDK来简化流程的编写。 一. Argo流程引擎 Argo的步骤间可以传递信息,即下一步(容器)可以获取上一步(容器)的结果。结果传递有2种: 1. 文件:上一步容器新生成的文件,会直接出现在下一步容器里面。 2. 信息:上一步的执行结果信息(如某文件内容),下一步也可以拿到。 下面我们就来解读一下,Argo怎么实现“信息”在容器间的传递的,以及它和其他的流程引擎实现传递的区别。 1.1文件怎么从上一个容器跑到下一个容器里的? Argo流程,可以指定2个步骤之间,传递结果文件(Artifact)。即假设流程为:A->B,那么A容器跑完,B容器可以取得上一个容器的输出文件。 如下:A容器生成一个 /tmp/hello_world.txt 文件,Argo将这个文件,放到了B容器里面,并重命名为 /tmp/message文件。 注意:流程上的每个步骤,都对应执行一个容器。 在A跑完后容器就退出了,然后才跑的B(这时候已经没有A容器在运行了)。

gRPC负载均衡(自定义负载均衡策略)

一笑奈何 提交于 2020-07-25 13:30:06
前言 上篇文章介绍了如何实现gRPC负载均衡,但目前官方只提供了 pick_first 和 round_robin 两种负载均衡策略,轮询法 round_robin 不能满足因服务器配置不同而承担不同负载量,这篇文章将介绍如何实现自定义负载均衡策略-- 加权随机法 。 加权随机法 可以根据服务器的处理能力而分配不同的权重,从而实现处理能力高的服务器可承担更多的请求,处理能力低的服务器少承担请求。 自定义负载均衡策略 gRPC提供了 V2PickerBuilder 和 V2Picker 接口让我们实现自己的负载均衡策略。 type V2PickerBuilder interface { Build(info PickerBuildInfo) balancer.V2Picker } V2PickerBuilder 接口:创建V2版本的子连接选择器。 Build 方法:返回一个V2选择器,将用于gRPC选择子连接。 type V2Picker interface { Pick(info PickInfo) (PickResult, error) } V2Picker 接口:用于gRPC选择子连接去发送请求。 Pick 方法:子连接选择 问题来了,我们需要把服务器地址的权重添加进去,但是地址 resolver.Address 并没有提供权重的属性。官方给的答复是:把权重存储到地址的元数据

kubernetes-master安装

给你一囗甜甜゛ 提交于 2020-07-25 07:34:17
导出配置文件 kubeadm config print init-defaults > kubernetes-config.yaml 修改配置文件 vim kubernetes-config.yaml #配置信息 apiVersion: kubeadm.k8s.io/v1beta2 bootstrapTokens: groups: system:bootstrappers:kubeadm:default-node-token token: abcdef.0123456789abcdef ttl: 24h0m0s usages: signing authentication kind: InitConfiguration localAPIEndpoint: advertiseAddress: 192.168.100.10 bindPort: 6443 nodeRegistration: criSocket: /var/run/dockershim.sock name: master01 taints: effect: NoSchedule key: node-role.kubernetes.io/master apiServer: timeoutForControlPlane: 4m0s apiVersion: kubeadm.k8s.io/v1beta2

简单聊聊Calico与Flannel

蹲街弑〆低调 提交于 2020-07-24 23:39:04
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 本人在接触k8s的2年多过程中对于flannel和calico都使用过,也查阅资料了解过此两种网络的底层,今天简单聊聊Calico与Flannel两种网络,如有错误之处欢迎指正。 容器虚拟化网络方案,总体分为2种截然不同的发展路线: 基于隧道 基于路由 基于隧道 1、隧道方案最具普适性,在任何网络环境下都可以正常工作,这与它的原理密不可分。 2、最常见的隧道方案是flannel vxlan模式,以及calico的ipip模式,其核心原理包含了2个部分。 分配网段 每台宿主机上都有网络插件的agent进程,它们连接到etcd集中式存储,从虚拟IP池中申请一个IP段占位己有,宿主机上每个容器则从IP段中分配得到1个虚拟IP。 封装/解封 1)、当不同宿主机上的容器互相访问时,数据包的源IP和目标IP都是容器IP。 2)、数据包经过宿主机的agent进程进行封装后,新数据包的源IP和目标IP则变成了两端宿主机的物理IP。 3)、数据包送到目标宿主机后,经过agent解封后得到原始数据包,并将数据包送入容器中处理,这就给两端容器营造了一种互通的感觉。 4)、因为物理IP属于3层网络,可以在互联网中经过中间路由设备互相送达,所以隧道方案对宿主机之间的网络环境没有特殊要求

跟着炎炎盐实践k8s---Kubernetes 1.16.10 二进制高可用集群部署之通用配置

元气小坏坏 提交于 2020-07-24 15:02:12
文档将介绍如何使用二进制部署Kubernetes v1.16高可用集群,而不是使用自动化部署(kubeadm)集群。在部署过程中,将详细列出各个组件启动参数,以及相关配置说明。部署完成后,将理解k8s各个组件的交互原理,并且可以快速解决实际问题。 * 环境及组件版本 Centos7.2 Kubernetes v1.16.10 Docker 18.09 .01(需要和k8s版本匹配) Etcd 3.3.13 Flanneld 0.12.0 一、 环境准备 服务器准备 master节点 10.13.33.29 master-01 10.13.33.40 master-02 10.13.33.38 master-03 node节点 10.13.33.31 node-01 修改主机名 为对应服务器设置永久主机名 cat >> /etc/hosts <<EOF 10.13.33.29 master-01 10.13.33.40 master-02 10.13.33.38 master-03 10.13.33.31 node-01 EOF hostnamectl set-hostname master-01 #所有机器按照要求修改 bash #刷新主机名 更新PATH变量 k8s所有文件和配置都会存储在/opt/k8s/ 中,运行以下命令,配置环境变量 echo 'PATH=/opt/k8s

Can't connect to the ETCD of Kubernetes

☆樱花仙子☆ 提交于 2020-06-29 03:58:49
问题 I've accidentally drained/uncordoned all nodes in Kubernetes (even master) and now I'm trying to bring it back by connecting to the ETCD and manually change some keys in there. I successfuly bashed into etcd container: $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8fbcb67da963 quay.io/coreos/etcd:v3.3.10 "/usr/local/bin/etcd" 17 hours ago Up 17 hours etcd1 a0d6426df02a cd48205a40f0 "kube-controller-man…" 17 hours ago Up 17 hours k8s_kube-controller-manager_kube-controller

Kubernetes object size limitations

最后都变了- 提交于 2020-05-29 05:20:08
问题 I am dealing with CRDs and creating Custom resources. I need to keep lots of information about my application in the Custom resource. As per the official doc, etcd works with request up to 1.5MB. I am hitting errors something like "error": "Request entity too large: limit is 3145728" I believe the specified limit in the error is 3MB. Any thoughts around this? Any way out for this problem? 回答1: The "error": "Request entity too large: limit is 3145728" is probably the default response from