一、概述

kubernetes使用etcd作为数据中心,使用kubeadm部署kubernetes的时候默认会自己部署一个etcd,当然也可以将kubeadm部署的单点的etcd做成集群,但是比较麻烦,所以我们使用的是自建

的etcd集群即external  etcd cluster。在使用kubeadm初始化集群的时候指定etcd为external。

具体kubeadm的init config参考我的另外一篇blog:https://www.cnblogs.com/cuishuai/p/10149727.html

etcd集群的搭建参考:https://www.cnblogs.com/cuishuai/p/9897006.html

本片blog不再赘述详细的搭建过程,主要记录一下etcd集群的管理。

二、Etcd Cluster 管理

1、准备etcdctl

默认etcd部署采用的是etcd-v2,kubernetes默认使用的是v3,所以直接使用etcdctl在etcd里查不到任何关于kubernetes的信息,v2和v3有很大的差距,可以从v2迁移到v3,但是不能往回迁。

想要使用必须指定etcd api 为v3,作如下操作:

# vim  ~/.bashrc

#etcd
host1='10.42.13.230:2379' host2='10.42.43.147:2379' host3='10.42.150.212:2379' endpoints=$host1,$host2,$host3
alias etcdctl='etcdctl --endpoints=$endpoints --key /etc/etcd/ssl/etcd-key.pem --cert /etc/etcd/ssl/etcd.pem --cacert /etc/kubernetes/ssl/ca.pem'
export ETCDCTL_API=

#使修改生效

#source  ~/.bashrc

现在使用etcdctl查看kubernetes的信息:

查看所有的key:

etcdctl get --prefix "" --keys-only

删掉所有的key:

etcdctl del  --prefix  ""

查看以calico开头的所有的key:

etcdctl get --prefix "/calico" --keys-only

使用etcdctl可以管理很多etcd的内容,具体的可以使用etcdctl  --help查看。

2、etcd集群添加节点

添加节点前的准备:

!集群必须是奇数个节点

!重新创建etcd的证书,将所有要添加的ip都加进去,参考https://www.cnblogs.com/cuishuai/p/9897006.html

!为新的etcd服务创建启动文件,参考https://www.cnblogs.com/cuishuai/p/9897006.html,需要做一些简单的修改:

#cat /etc/systemd/system/etcd.service

[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
Documentation=https://github.com/coreos [Service]
Type=notify
WorkingDirectory=/var/lib/etcd/
EnvironmentFile=-/etc/etcd/etcd.conf
ExecStart=/opt/bin/etcd \
--name=etcd-host3 \
--cert-file=/etc/etcd/ssl/etcd.pem \
--key-file=/etc/etcd/ssl/etcd-key.pem \
--peer-cert-file=/etc/etcd/ssl/etcd.pem \
--peer-key-file=/etc/etcd/ssl/etcd-key.pem \
--trusted-ca-file=/etc/kubernetes/ssl/ca.pem \
--peer-trusted-ca-file=/etc/kubernetes/ssl/ca.pem \
--initial-advertise-peer-urls=https://10.42.10.90:2380 \
--listen-peer-urls=https://10.42.10.90:2380 \
--listen-client-urls=https://10.42.10.90:2379,http://127.0.0.1:2379 \
--advertise-client-urls=https://10.42.10.90:2379 \
--initial-cluster-token=etcd-cluster- \
--initial-cluster=etcd-host0=https://10.42.13.230:2380,etcd-host1=https://10.42.43.147:2380,etcd-host2=https://10.42.150.212:2380,etcd-host3=https://10.42.10.90:2380 \
--initial-cluster-state=exsiting \
--data-dir=/var/lib/etcd Restart=on-failure
RestartSec=
LimitNOFILE= [Install]
WantedBy=multi-user.target
--initial-cluster-state修改为existing

创建数据目录:

mkdir  /var/lib/etcd

添加节点:

etcdctl member add --endpoints=https://10.42.10.90:2379 etcd-host3 https://10.42.10.90:2380

启动etcd实例

systemctl start etcd
systemctl enable etcd

查看:

etcdctl  endpoint health
etcdctl member list

3、移除节点

找到需要移除节点的memberid:

etcdctl  member  list 

移除:

etcdctl  member  remove  [memberid]

4、etcd集群数据备份与恢复

!数据备份

准备备份路径

mkdir  -p /data/backup/etcd

开始备份:

etcdctl snapshot save /data/backup/etcd/snapshot-$(date +%Y%m%d%H%M).db

查看snapshot文件的状态:

etcdctl snapshot status /data/backup/etcd/snapshot-.db

!数据恢复

写了一个脚本,现在集群假设是3个节点,名称一次为etcd-host0、etcd-host1、etcd-host2:

#cat etcdrestoe.sh

#!/bin/bash

h0=10.42.13.230
h1=10.42.43.147
h2=10.42.150.212 for i in h0 h1 h2
do etcdctl snapshot restore snapshot.db \
--data-dir=/var/lib/etcd \
--name=$i \
--initial-cluster=etcd-host0=https://$h0:2380,etcd-host1=https://$h1:2380,etcd-host2=https://$h2:2380 \
--initial-cluster-token=etcd-cluster- \
--initial-advertise-peer-urls=https://$i:2380 && \ mv /var/lib/etcd/ etcd_$i done

把生成的etcd_10.42.13.230、etcd_10.42.43.147、etcd_10.42.150.212分别覆盖各自节点之前的/var/lib/etcd下面的数据。

k8s之external-etcd集群管理的更多相关文章

  1. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.服务器设置 1.把每一 ...

  2. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...

  3. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之集群部署环境规划(一)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.环境规划 软件 版本 ...

  4. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之flanneld网络介绍及部署(三)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.flanneld介绍 ...

  5. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之部署master/node节点组件(四)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 1.部署master组件 ...

  6. 2、二进制安装K8s 之 部署ETCD集群

    二进制安装K8s 之 部署ETCD集群 一.下载安装cfssl,用于k8s证书签名 二进制包地址:https://pkg.cfssl.org/ 所需软件包: cfssl 1.6.0 cfssljson ...

  7. k8s之创建etcd集群

    主机规划 maste01——192.168.10.63 master02——192.168.10.64 node01——192.168.10.65 node02——192.168.10.66 1.为保 ...

  8. 一键部署etcd集群管理脚本

    一.编写脚本 1 #!/bin/sh 2 # 安装 3 # ./run.sh etcd03 etcd01=http://192.168.2.44:2380,etcd02=http://192.168. ...

  9. k8s集群之上运行etcd集群

    一.知识点: 1.headless services NOTE:: 我们在k8s上运行etcd集群,集群间通告身份是使用dns,不能使用pod ip,因为如果pod被重构了ip会变,在这种场景中不能直 ...

  10. 灵雀云:etcd 集群运维实践

    [编者的话]etcd 是 Kubernetes 集群的数据核心,最严重的情况是,当 etcd 出问题彻底无法恢复的时候,解决问题的办法可能只有重新搭建一个环境.因此围绕 etcd 相关的运维知识就比较 ...

随机推荐

  1. LOJ-10097(2-sat问题)

    题目链接:传送门 思路: 2-sat问题,如果选每个集合最多有两个元素,eg:(Ai,Ai’),(Bi,Bi’): 如果Ai,Bi冲突,就只能选Ai,Bi’(建立边),然后缩点,查找有无相同集合的点在 ...

  2. maple推导剑桥模型塑性势函数

    with(DEtools); Parameter(M); de := diff(q(p), p)+(M^*p^-q(p)^)/(*p*q(p)) = ; dsolve({de, q(px) = }, ...

  3. 安装php rabbitmq扩展,继上一篇安装Rabbitmq

    1 安装 rabbitmq-c,C 与 RabbitMQ 通信需要依赖这个库,这里只贴出正确的步骤,错误类型太多,不一一举例,大部分都是安装问题,缺少组件,安装目录问题 git clone git:/ ...

  4. redis_简单动态字符串

    在redis中,C字符串(以'\0'结尾的字符数组)只用在一些无需对字符串值进行修改的地方,比如打印日志.其他情况,redis使用SDS - SimpleDynamicString 简单动态字符串,来 ...

  5. extjs__(grid Panel绑定数据)

    1.修改面板名称 双击My Panel  就可以进行修改 2拖入一个grid  panel绑定数据 3.创建一个model  只是为了创建一个模型  相当于java中的模型层  只是数据的一个标准 4 ...

  6. Xaml引用图片路径的方式

    最近写代码的时候遇到过好几次引用某个路径下图片资源的情况,思索了一下,便将自己所知的在xaml里引用图片资源的方法写成了个小Demo,并完成了这篇博文.希望罗列出的这些方式能够对大家有所帮助. Xam ...

  7. ELK从5.6.3升级到6.3.0总结

    ELK从5.6.3升级到6.3.0总结 由于6.3.0默认有es的监控功能,并且我们现在es总是有各种问题,原有的es开源插件head和HQ的监控都不够详细,所以决定升级es集群.我们目前es有5个n ...

  8. Sql- Group By ,Where,having用法

    Group by,where,having 是数据库查询中最常用的几个关键字.在工作中,时常用到,前面遇到一个问题,一个查询中使用了where ,group by ,having及聚集函数时 ,执行顺 ...

  9. C++面试基础概念之动态库篇

    编写DLL所学所思(1)——导出函数 编写DLL所学所思(2)——导出类 C++ DLL导出类 知识大全 C++类库开发详解

  10. [转] An Introduction to Mutual SSL Authentication

    1. Introduction Mutual SSL authentication or certificate based mutual authentication refers to two p ...