k8s之etcd集群部署篇(k8s篇一)

概述

  • 什么是etcd?

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

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

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

  • 网络插件flannel、对于其它网络插件也须要用到etcd存储网络的配置信息
  • kubernetes自己,包括各类对象的状态和元信息配置
  • 我的观点

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

准备工做

硬件环境

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

  • 部署说明:
主机名 主机ip 内存 cpu 容量
node9 192.168.1.250 2G 2C 20G
node10 192.168.1.251 2G 2C 20G
node11 192.168.1.252 2G 2C 20G
网络环境
  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. 关闭Swapgithub

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

注释掉

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

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

  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

#配置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和系统信息
在这里插入图片描述shell




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 配置文件json

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 证书centos

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 文章提供的信息帮助