K8S系列(二)二进制部署(一)之etcd集群

7 篇文章 1 订阅
1 篇文章 0 订阅

K8S系列(二)二进制部署(一)之etcd集群
上一篇: K8S系列(一)kubeadm部署

下一篇: K8S系列(二)二进制部署(二)之Master节点

一、 介绍

  1. 博主的k8s系列上一篇介绍了关于使用[kubeadm]的方式搭建咱们的k8s集群.(上方链接)
  2. 但是基于kubeadm的方式搭建集群会有以下几个问题
    2.1 这种方式帮我们屏蔽了很多很多的细节,不利于我们的理解各个组件
    2.2 正因为屏蔽了细节,在某些情况下不利于我们排错
  3. 而二进制的部署方式和kubeadm比起来肯定是要更复杂和麻烦的,因为每个组件都需要我们自己独立部署,但是能更好的帮助我们熟悉和理解k8s

二、 准备工作

2.1 机器准备,这次就简单点,只用3台机器

角色ip主机名
master192.168.3.10hostnamectl set-hostname master
node1192.168.3.11hostnamectl set-hostname node1
node2192.168.3.12hostnamectl 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. 如有问题欢迎指正,希望能帮到大家
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值