k8s之external-etcd集群管理

Posted 诗码者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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下面的数据。

以上是关于k8s之external-etcd集群管理的主要内容,如果未能解决你的问题,请参考以下文章

云原生k8s集群命令行工具kubectl之集群管理命令

二进制部署K8s集群进阶使用之第2节kubectl-陈述式资源管理

第二篇:二进制部署K8s集群进阶使用

云原生之kubernetes实战kubernetes集群的证书管理

二进制部署K8s集群进阶使用之第3节kubectl-声明式资源管理

【1】k8s之master