zoukankan      html  css  js  c++  java
  • k8s之external-etcd集群管理

    一、概述

    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=3

    #使修改生效

    #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-1 
    --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=5
    LimitNOFILE=65536
    
    [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-201901171717.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-1 
    --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下面的数据。

  • 相关阅读:
    [原创软件]友盟自动添加版本工具
    【Python3.6+Django2.0+Xadmin2.0系列教程之三(入门篇-下)】学生信息管理系统
    【Python3.6+Django2.0+Xadmin2.0系列教程之二(入门篇-中)】学生信息管理系统
    [原创软件]PC端与移动端文件信息互通工具
    【Python3.6+Django2.0+Xadmin2.0系列教程之一(入门篇-上)】环境搭建及项目创建
    [原创软件]考勤查询工具
    [原创软件]友盟自定义事件批量上传器
    [原创软件]全线升级管理平台
    三步走起 提升 iOS 审核通过率 下篇
    三步走起 提升 iOS 审核通过率 上篇
  • 原文地址:https://www.cnblogs.com/cuishuai/p/10283518.html
Copyright © 2011-2022 走看看