官方文档是这么解释的:
etcd是一个分布式键值存储,旨在可靠,快速地保存和提供对关键数据的访问。它经过分布式锁定,领导者选举和写入障碍实现可靠的分布式协调。etcd集群旨在实现高可用性和永久数据存储和检索。html
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 |
#关闭防火墙 [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
连接: https://pan.baidu.com/s/1PU-iBCFP6o1mH7N9DFgI5g 提取码: y3dgweb
# 建立存储证书工具目录 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所需的网络环境 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
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/
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
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"
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-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
显示如下说明搭建成功
感谢k8s中文社区中 https://www.kubernetes.org.cn/4963.html 文章提供的信息帮助