K8S系列(二)二进制部署(一)之etcd集群
上一篇: K8S系列(一)kubeadm部署
下一篇: K8S系列(二)二进制部署(二)之Master节点
一、 介绍
- 博主的k8s系列上一篇介绍了关于使用[kubeadm]的方式搭建咱们的k8s集群.(上方链接)
- 但是基于kubeadm的方式搭建集群会有以下几个问题
2.1 这种方式帮我们屏蔽了很多很多的细节,不利于我们的理解各个组件
2.2 正因为屏蔽了细节,在某些情况下不利于我们排错 - 而二进制的部署方式和kubeadm比起来肯定是要更复杂和麻烦的,因为每个组件都需要我们自己独立部署,但是能更好的帮助我们熟悉和理解k8s
二、 准备工作
2.1 机器准备,这次就简单点,只用3台机器
角色 | ip | 主机名 |
---|---|---|
master | 192.168.3.10 | hostnamectl set-hostname master |
node1 | 192.168.3.11 | hostnamectl set-hostname node1 |
node2 | 192.168.3.12 | hostnamectl set-hostname node2 |
2.2 关闭防火墙
1 `systemctl stop firewalld`
2 `systemctl disable firewalld`
2.3 关闭selinux(建议永久)
1 `sed -i 's/enforcing/disabled/' /etc/selinux/config` # 永久
2 `setenforce 0` #临时
2.4 关闭swap(建议永久)
1 `sed -ri 's/.*swap.*/#&/' /etc/fstab` # 永久
2 `swapoff -a` # 临时
2.5 对应上面表格,将hostname设置一下
2.6 本地host添加映射
cat >> /etc/hosts << EOF
192.168.3.10 master
192.168.3.11 node1
192.168.3.12 node2
EOF
2.7 将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
# 生效
2.8 时间同步一下
1 `yum install -y ntpdate`
2 `ntpdate time.windows.com` #生效
这些步骤都是初始化步骤,和kubeadm的一样,都需要做
三、 部署
3.1 为etcd做自签证书
3.1.1 创建证书存放目录
1. cd ~ ##到此目录
2. mkdir certs ##创建存放自签证书文件目录
3. cd certs ##进入目录
3.1.2 下载自签工具并授权
1. wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 ##下载自签工具
2. wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64##下载自签工具
3. wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64##下载自签工具
4. chmod +x cfssl_linux-amd64 cfssljson_linux-amd64 cfssl-certinfo_linux-amd64##给自签工具权限
5. mv cfssl_linux-amd64 /usr/local/bin/cfssl
6. mv cfssljson_linux-amd64 /usr/local/bin/cfssljson
7. mv cfssl-certinfo_linux-amd64 /usr/bin/cfssl-certinfo
8. mkdir etcd && cd etcd
3.1.3 创建根证书配置并生成根证书
1. cat > ca-config.json << EOF
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"etcd": {
"expiry": "87600h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
}
}
}
}
EOF ##创建ca配置文件,这个过期时间自己定义
2. cat > ca-csr.json << EOF
{
"CN": "etcd",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "Beijing",
"ST": "Beijing"
}
]
}
EOF ##这个也是ca相关的配置
3. cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
##这样我们就创建了根证书
3.1.4 为etcd生成证书
1. cat > etcd-csr.json << EOF
{
"CN": "etcd",
"hosts": [
##这个地方放的是我们etcd集群的ip地址,可以预留多方几个
##不然以后增加机器的话,所有节点的证书都需要重新生成和替换
##否则新加的节点是无法通信的
"192.168.3.10",
"192.168.3.11",
"192.168.3.12"
],
"key": {## 加密算法
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "BeiJing",
"ST": "BeiJing"
}
]
}
EOF ## 为etcd申请签发证书的配置
2. cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json \
-profile=etcd etcd-csr.json | cfssljson -bare etcd
## 执行完成后会在目录下生成etcd.csr,etcd.pem 和 etcd-key.pem 文件
3. 到这个步骤,我们的自签证书已经生成好了
3.2 部署etcd集群
3.2.1 创建目录并下载、解压etcd包
1.cd / && mkdir sw && cd sw ## 创建软件包存放目录
2.wget https://github.com/etcd-io/etcd/releases/download/v3.4.9/etcd-v3.4.9-linux-amd64.tar.gz ## 下载etcd的包,如果有现成的包,可以移进来
3.mkdir /opt/etcd/{bin,cfg,ssl} -p ## 创建etcd的目录
4.cp ~/certs/etcd/{ca*pem,etcd*pem} /opt/etcd/ssl/ ## 将上面步骤生成的证书复制
5.tar zvxf etcd-v3.4.9-linux-amd64.tar.gz ##解压ectd包
6.cp etcd-v3.4.9-linux-amd64/{etcd,etcdctl} /opt/etcd/bin/ ##将执行文件复制
7.cp etcd-v3.4.9-linux-amd64/etcdctl /usr/bin ##执行文件
3.2.2 创建etcd配置文件
1. cd /opt/etcd/cfg/ ##进入etcd配置目录
2. cat > etcd.conf << EOF
#[Member]
ETCD_NAME="etcd1" ##节点名称,集群内不可重复
ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ##数据存放目录
ETCD_LISTEN_PEER_URLS="https://192.168.3.10:2380" ##当前节点地址(配置作用)
ETCD_LISTEN_CLIENT_URLS="https://192.168.3.10:2379" ##客户端访问当前节点地址(配置作用)
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.3.10:2380" ##集群内部通信监听地址
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.3.10:2379" ##集群内客户端访问地址
ETCD_INITIAL_CLUSTER="etcd1=https://192.168.3.10:2380,etcd2=https://192.168.3.11:2380,etcd3=https://192.168.3.12:2380" ##集群地址列表
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new" ##加入集群的当前状态,new是新集群,existing表示加入已有集群
ETCD_ENABLE_V2="true" ##兼容 flannel 使用
EOF ## 创建配置文件
3.2.3 创建etcd服务启动文件
cat > /usr/lib/systemd/system/etcd.service << EOF
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
EnvironmentFile=/opt/etcd/cfg/etcd.conf
ExecStart=/opt/etcd/bin/etcd \
--cert-file=/opt/etcd/ssl/etcd.pem \
--key-file=/opt/etcd/ssl/etcd-key.pem \
--peer-cert-file=/opt/etcd/ssl/etcd.pem \
--peer-key-file=/opt/etcd/ssl/etcd-key.pem \
--trusted-ca-file=/opt/etcd/ssl/ca.pem \
--peer-trusted-ca-file=/opt/etcd/ssl/ca.pem \
--logger=zap
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF ## 这一步是创建ectd的启动服务
3.2.4 将etcd相关文件拷贝到其他节点及部分配置修改
1.scp -r /opt/etcd/ root@192.168.3.11:/opt/ && scp -r /opt/etcd/ root@192.168.3.12:/opt/
## 将etcd的工作目录分别拷贝到别的节点
2.scp /usr/lib/systemd/system/etcd.service root@192.168.3.11:/usr/lib/systemd/system/
&& scp /usr/lib/systemd/system/etcd.service root@192.168.3.12:/usr/lib/systemd/system/
## 将启动文件也拷贝一下
3. 在/opt/etcd/cfg/etcd.conf的配置文件中,这几个值需要改成当前节点的ip
ETCD_NAME, //这个值设置etcd集群内名称
ETCD_LISTEN_PEER_URLS,
ETCD_LISTEN_CLIENT_URLS,
ETCD_INITIAL_ADVERTISE_PEER_URLS,
ETCD_INITIAL_ADVERTISE_PEER_URLS
3.2.5 启动etcd
1. systemctl daemon-reload
2. systemctl start etcd ##启动命令
3. systemctl enable etcd ##添加到自启动
4. systemctl status etcd ##查看启动状态
3.2.6 查看集群状态
1. 上面步骤完成了咱们etcd的集群部署,下面来监控一下集群状态
2. 官方etcdctl指令查看,但是由于k8s用的是etcd-v3,所以需要指定证书,不然会报错
etcdctl \ ##bin目录下的执行文件
--endpoints=192.168.3.10:2379,192.168.3.11:2379,192.168.3.12:2379 \ ##集群的list
--cert=/opt/etcd/ssl/etcd.pem \ ##证书
--key=/opt/etcd/ssl/etcd-key.pem \ ##证书
--cacert=/opt/etcd/ssl/ca.pem \ ##证书
member list --write-out=table \ ##输出类型是表
3.2.7 如果节点宕机需要重启
1. 首先查出故障节点的id,并移除
/opt/etcd/bin/etcdctl
--endpoints=192.168.3.10:2379,192.168.3.11:2379,192.168.3.12:2379
--cert=/opt/etcd/ssl/etcd.pem
--key=/opt/etcd/ssl/etcd-key.pem
--cacert=/opt/etcd/ssl/ca.pem
member remove id
2. 重启故障节点的etcd
3. 启动成功后重新添加到集群中
/opt/etcd/bin/etcdctl
--endpoints=192.168.3.10:2379,192.168.3.11:2379,192.168.3.12:2379
--cert=/opt/etcd/ssl/etcd.pem
--key=/opt/etcd/ssl/etcd-key.pem
--cacert=/opt/etcd/ssl/ca.pem
member add id
--peer-urls="https://当前节点ip:2380"
四、总结
1. 按照上面的步骤,我们就已经完成了k8s集群中的一个组件,etcd的集群部署
2. 接下来我们将完成Master节点的部署
3. 如有问题欢迎指正,希望能帮到大家