• kubeadm (etcd)


    1、获取etcdctl 命令行工具

    kubeadm 部署的 k8s ,etcd 是封装在 pod 中

    13c600dcab344fea9ddf1f8baaf3eaa7.png

    从 pod 中拿到 etcdctl,先查看在 pod 中 etcdctl 的位置

    f440ed37a5514845ab8e2c480c687b34.png

    获取  etcdctl 并放入/usr/bin下

    1. kubectl -n kube-system cp etcd-k8s-master:/usr/local/bin/etcdctl /usr/bin/etcdctl
    2. chmod +x /usr/bin/etcdctl

    a885eaf49a764924b42a66e0123b162e.png

    2、查看etcd集群成员节点

    输入 etcdctl 提示需要指定版本,etcdctl  的 v2 跟 v3 版本差异很大,k8s 默认使用 v3 版本

    2f9f725e2c63412b9d601641d177c9a4.png

    直接输入 etcdctl ,提示需要证书认证才能使用,所以需要指定 ETCDCTL_API=3

    export ETCDCTL_API=3

    c9dd68d8cc4a4190a548edb45c4568fd.png

    etcdctl --endpoints=https://[127.0.0.1]:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt --key=/etc/kubernetes/pki/etcd/healthcheck-client.key member list -w table

    22e3191606514d8faf19e50b4ab8c944.pngendpoints 执行要操作那个etcd 
    --cacert  --cert  -key 都是指定证书
    member list 显示集群的信息
    其中etcd 签发了很多证书,用哪套都行。peer 是etcd集群通信用的。

    1303de4df0b5488da5c907183fc3b16f.png

    -w table 使用table表格显示

    3224677ab4474a788bf3cbdbe52c1673.png

    etcdctl 加入别名

    1. [root@k8s-master nginx]# alias etcdctl='etcdctl --endpoints=https://[127.0.0.1]:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt --key=/etc/kubernetes/pki/etcd/healthcheck-client.key'
    2. [root@k8s-master nginx]# etcdctl member list -w table
    3. +------------------+---------+------------+---------------------------+---------------------------+
    4. | ID | STATUS | NAME | PEER ADDRS | CLIENT ADDRS |
    5. +------------------+---------+------------+---------------------------+---------------------------+
    6. | b7501a7e3ce53d2b | started | k8s-master | https://192.168.18.7:2380 | https://192.168.18.7:2379 |
    7. +------------------+---------+------------+---------------------------+---------------------------+
    8. [root@k8s-master nginx]#

    363b21a88e5b479b99580530051ac5e3.png

    etcdctl endpoint status -w table   # 当前节点为leader (IS LEADER ) DB_SIZE 数据库大小  RAFT TERM 做了几轮选举06d64152ed4e4d9b8b56d143ea0cd128.png

    3、etcd 数据库介绍

    etcd 是一个key=value类型的数据库,如下写入一个key,查看value

    05963b17a6ce4091a514a89716e87da6.png

    etcd 数据库可以按照目录层次存储,也可以按照目录查看数值
    如下在 /admin目录下存储一个key1,并 key1 的数值等于 value1。在 /admin目录下存储一个key2,并 key2 的数值等于value2。查看 /admin目录下的key和对应的 value。--prefix=true
    检索前缀的意思,意思是检索 /admin目录下的所有

    4d5765288dd74abb88c418e5de3634d0.png

    etcdctl 的 watch 命令,意思是时刻观察事件,就跟tail -f 一样,一致在检测变化

    e40f53e9d85d415b9802012d6978bf66.png

     etcdctl watch /admin/key1 时刻观察/admin/key1的时间,一旦发生改变立马检测到

    dee389af166f47f69d6d8c34b449c983.png

     watch 可以按照目录的形式监控目录下的文件

    4e8c4385bcf647c6850d3edec016efe4.png

    4、查看 k8s 的动态变化

    k8s 资源存储在etcd哪里呢?etcd 数据都是从 / 开始的,我们查看 / 都有啥, --keys-only 只看key不看value

    etcdctl get / --prefix=true --keys-only

    170337132c2b4b559d6949738a5aee76.png

    通过上图可以看到,k8s资源都是在 / 下创建的各种资源,其中 pod 资源在 /registry/pods/下

    09717c25812347b1a87fbe8b55c706d0.png

    所以,我们得出,kubectl 通过yaml 形式、或者kubectl edit 的形式,将需要调度的信息告知apiserver,apiserver 在将信息存储到 etcd 中,kubelet 通过 apiserver 监听发现 etcd 数据变化了,立马拉取新的策略进行构建。

    etcd中的目录,是按照什么形式创建的k8s数据

    kubectl api-resources

    a9fd4c8096764561ab9d126e4c4fdf0f.png

    5、etcd 备份恢复

    方式一、直接备份 etcd 目录

    cp /var/lib/etcd/ /tmp/hostname-etcd_$(date +"%Y-%m-%d_%H:%M").db

    方式二:etcd 快照

    1、备份快照

    etcdctl snapshot save "hostname-etcd_$(date +"%Y-%m-%d_%H:%M").db"

    简单查看备份是否正确,两个对比差不多大

    87fbf67d1c564454a0fdf96bbb86ee56.png

    2、恢复

    1、停止etcd 和 apiserver

    2、移走当前数据目录(注意,需要所有的集群节点)

    mv /var/lib/etcd/ tmp

    3、恢复快照(集群所有节点都需要操作,而且必须用一个.db)

    etcdctl snapshot restore hostname-etcd_2022-08-29_20:27.db --data-dir=/var/lib/etcd/
    

    6、etcd 清理

    如果etcd的数据库很大,一般都是 event 很大,默认都是1h后自动清除,如果etcd数据库很大,需要查看  

    4ee17330508049b0a8b33bba21892306.png

  • 相关阅读:
    RabbitMQ
    同花顺_知识_庄家技法_1打压股价
    synchronized关键字在同步代码块中的应用(下)
    kubernetes架构原则和对象设计
    gitlab-ce搭建和数据迁移
    CMake的学习
    更改表的CHARSET
    使用C语言实现二叉树的链式存储
    每日一题:Spring MVC 的执行流程是什么❓
    Java笔记(九)
  • 原文地址:https://blog.csdn.net/Jerry00713/article/details/126581563