k8s之etcd集群部署篇(k8s篇一)
etcd是一个分布式键值存储,旨在可靠,快速地保存和提供对关键数据的访问。它通过分布式锁定,领导者选举和写入障碍实现可靠的分布式协调。etcd集群旨在实现高可用性和永久数据存储和检索。
概述
- 什么是etcd?
官方文档是这么解释的:
etcd是一个分布式键值存储,旨在可靠,快速地保存和提供对关键数据的访问。它通过分布式锁定,领导者选举和写入障碍实现可靠的分布式协调。etcd集群旨在实现高可用性和永久数据存储和检索。
- etcd在k8s中担当的什么角色?
Etcd是Kubernetes集群中的一个十分重要的组件,用于保存集群所有的网络配置和对象的状态信息。整个kubernetes系统中一共有两个部分需要用到etcd用来协同和存储配置,分别是:
- 网络插件flannel、对于其它网络插件也需要用到etcd存储网络的配置信息
- kubernetes本身,包括各种对象的状态和元信息配置
- 个人观点
说的通俗点其实etcd就是在k8s集群中的各个地方都有使用,存储了各个组件的信息,各个节点的信息,当你运行镜像时也有使用。
准备工作
硬件环境
准备三个节点,分别为node1,node2,node3。系统为centos7(当然你也可以使用其他linux系统)
- 部署说明:
主机名 | 主机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 |
网络环境
- 设置关闭防火墙及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
软件准备
- 下载k8s所需组件二进制文件
链接: https://pan.baidu.com/s/1PU-iBCFP6o1mH7N9DFgI5g 提取码: y3dg
- 下载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
- 下载并安装配置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 文章提供的信息帮助
更多推荐
所有评论(0)