概述

  • 什么是etcd?

官方文档是这么解释的:
etcd是一个分布式键值存储,旨在可靠,快速地保存和提供对关键数据的访问。它通过分布式锁定,领导者选举和写入障碍实现可靠的分布式协调。etcd集群旨在实现高可用性和永久数据存储和检索。

  • etcd在k8s中担当的什么角色?

Etcd是Kubernetes集群中的一个十分重要的组件,用于保存集群所有的网络配置和对象的状态信息。整个kubernetes系统中一共有两个部分需要用到etcd用来协同和存储配置,分别是:

  • 网络插件flannel、对于其它网络插件也需要用到etcd存储网络的配置信息
  • kubernetes本身,包括各种对象的状态和元信息配置
  • 个人观点

说的通俗点其实etcd就是在k8s集群中的各个地方都有使用,存储了各个组件的信息,各个节点的信息,当你运行镜像时也有使用。

准备工作

硬件环境

准备三个节点,分别为node1,node2,node3。系统为centos7(当然你也可以使用其他linux系统)

  • 部署说明:
主机名主机ip内存cpu容量
node9192.168.1.2502G2C20G
node10192.168.1.2512G2C20G
node11192.168.1.2522G2C20G
网络环境
  1. 设置关闭防火墙及SELINUX
#关闭防火墙
[root@localhost ~]# systemctl stop firewalld 
#关闭开机自启
[root@localhost ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
#关闭SELINUX
[root@localhost ~]# setenforce 0
#修改配置文件进行永久关闭
[root@localhost ~]# vi /etc/selinux/config

在这里插入图片描述
2. 关闭Swap

#关闭swap分区
[root@localhost ~]# swapoff -a
#注释掉swap分区部分
[root@localhost ~]# vi /etc/fstab

注释掉

软件准备
  1. 下载k8s所需组件二进制文件

链接: https://pan.baidu.com/s/1PU-iBCFP6o1mH7N9DFgI5g 提取码: y3dg

  1. 下载ssl证书工具
# 创建存储证书工具目录
mkdir sslTools
cd sslTools
# 下载证书工具
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
# 给予权限
chmod +x cfssl_linux-amd64 cfssljson_linux-amd64 cfssl-certinfo_linux-amd64
# 移动到已有的path路径下
mv cfssl_linux-amd64 /usr/local/bin/cfssl
mv cfssljson_linux-amd64 /usr/local/bin/cfssljson
mv cfssl-certinfo_linux-amd64 /usr/bin/cfssl-certinfo
  1. 下载并安装配置docker
#配置docker所需的网络环境
cat << EOF | tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
#重置
sysctl -p /etc/sysctl.d/k8s.conf

注意:
若执行重置时失败,出现:
  sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: No such file or directory
  sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: No such file or directory
解决方法:
 先执行:modprobe br_netfilter

#配置docker
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 查看docker列表
yum list docker-ce --showduplicates | sort -r
#安装最新版本docker
yum install docker-ce -y
#设置开机自启并启动docker
systemctl start docker && systemctl enable docker

安装完毕输入:docker -info 能考到docker和系统信息
在这里插入图片描述




etcd部署

tar -zxvf etcd-v3.3.10-linux-amd64.tar.gz 
cd etcd-v3.3.10-linux-amd64/
mkdir /k8s/etcd/{bin,ssl,config} -p
mkdir /home/sslTools/ssl
cp etcd etcdctl /k8s/etcd/bin/
创建 ETCD 证书
cd /home/sslTools/ssl
cat << EOF | tee ca-config.json
{
  "signing": {
    "default": {
      "expiry": "87600h"
    },
    "profiles": {
      "k8s": {
         "expiry": "87600h",
         "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ]
      }
    }
  }
}
EOF

创建 ETCD CA 配置文件

cat << EOF | tee etcd-ca-csr.json
{
    "CN": "etcd CA",
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "beijing",
            "ST": "beijing"
        }
    ]
}
EOF

创建 ETCD Server 证书

cat << EOF | tee etcd-server-csr.json
{
    "CN": "etcd",
    "hosts": [
    "192.168.1.250",
    "192.168.1.251",
    "192.168.1.252"
    ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "beijing",
            "ST": "beijing"
        }
    ]
}
EOF
#生成etcd证书
cfssl gencert -initca etcd-ca-csr.json | cfssljson -bare ca -
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=k8s etcd-server-csr.json | cfssljson -bare server

复制 *.pem 证书到我们k8s文件夹中:

cp *pem /k8s/etcd/ssl
etcd信息配置
  • 创建etcd配置文件
vi /k8s/etcd/config/etcd
#[Member]
ETCD_NAME="etcd01"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://192.168.1.250:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.1.250:2379"

#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.1.250:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.1.250:2379"
ETCD_INITIAL_CLUSTER="etcd01=http://192.168.1.250:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
  • 修改etcd.service文件
vi  /usr/lib/systemd/system/etcd.service 

[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
Type=notify
EnvironmentFile=/k8s/etcd/config/etcd
ExecStart=/k8s/etcd/bin/etcd \
--name=${ETCD_NAME} \
--data-dir=${ETCD_DATA_DIR} \
--listen-peer-urls=${ETCD_LISTEN_PEER_URLS} \
#127.0.0.1:2379 一 定 要 加 上!!
--listen-client-urls=${ETCD_LISTEN_CLIENT_URLS},http://127.0.0.1:2379 \
--advertise-client-urls=${ETCD_ADVERTISE_CLIENT_URLS} \
--initial-advertise-peer-urls=${ETCD_INITIAL_ADVERTISE_PEER_URLS} \
--initial-cluster=${ETCD_INITIAL_CLUSTER} \
--initial-cluster-token=${ETCD_INITIAL_CLUSTER_TOKEN} \
--initial-cluster-state=new \
--cert-file=/k8s/etcd/ssl/server.pem \
--key-file=/k8s/etcd/ssl/server-key.pem \
--peer-cert-file=/k8s/etcd/ssl/server.pem \
--peer-key-file=/k8s/etcd/ssl/server-key.pem \
--trusted-ca-file=/k8s/etcd/ssl/ca.pem \
--peer-trusted-ca-file=/k8s/etcd/ssl/ca.pem
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

启动测试下

systemctl daemon-reload
systemctl start etcd
systemctl status etcd

当看到如下图说明启动成功。
在这里插入图片描述

搭建集群

经过上面步骤我们已经配置好了一个etcd单机运行,我们只需要把已经运行的机器的全部配置发到其他节点上就可以了。

配置ssh认证
 ssh-keygen 

一路下一步
在这里插入图片描述
然后将ssh的key发给其他节点

ssh-copy-id 192.168.1.252
ssh-copy-id 192.168.1.251

按照提示输入yes和其他节点的密码

修改节点配置

我们先将配置发送给其他节点信息修改接收节点中的配置文件

cd /k8s/ 
scp -r etcd 192.168.1.252:/k8s/
scp -r etcd 192.168.1.251:/k8s/
scp /usr/lib/systemd/system/etcd.service  192.168.1.252:/usr/lib/systemd/system/etcd.service
scp /usr/lib/systemd/system/etcd.service  192.168.1.251:/usr/lib/systemd/system/etcd.service 

首先修改这两个节点配置文件中的本机ip和etcd-name
在这里插入图片描述
然后我们需要修改三个节点的配置文件中 ETCD_INITIAL_CLUSTER的部分

修改为:
ETCD_INITIAL_CLUSTER=“etcd01=http://192.168.1.250:2380,etcd02=http://192.168.1.251:2380,etcd03=http://192.168.1.252:2380”
请注意http一定要写,名字和IP一定要对应,将三个节点的配置文件都按照自己实际情况改为该模式

然后三个节点重新启动

systemctl daemon-reload
systemctl enable etcd
systemctl restart etcd

查看集群健康状态

 cd /k8s/etcd/bin/
./etcdctl \
--ca-file=/k8s/etcd/ssl/ca.pem \
--cert-file=/k8s/etcd/ssl/server.pem \
--key-file=/k8s/etcd/ssl/server-key.pem \
--endpoints="http://192.168.1.250:2379,http://192.168.1.251:2379,http://192.168.1.252:2379" \
 cluster-health

显示以下说明搭建成功
在这里插入图片描述

错误请参考

  • 当我们启动集群时发现其中某一节点状态出现错误,如下图
    在这里插入图片描述
    该错误是我们的etcd启动多次造成,只需要将配置文件中 ETCD_DATA_DIR指向的路径删除重启即可,以该案例为例
    在这里插入图片描述

感谢k8s中文社区中 https://www.kubernetes.org.cn/4963.html 文章提供的信息帮助

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐