一、实验环境

1、需要三台服务器

主机名ip搭建的服务信息
master20.0.0.10kube-apiserver kube-controller-manager kube-scheduler etcd
node120.0.0.11kubelet kube-proxy docker flannel etcd
node220.0.0.12kubelet kube-proxy docker flannel etcd

上面软件说明
##各配置的作用:

etcd生产环境中往往放在master上面,,,构建一个集群最少需要三个节点
kube-apiserver 就是master的主脑部分
kube-controller-manager 控制器的管理器
kube-scheduler 调度器
kubelet 3希望master给它颁发证书
kube-proxy 4提供对外的服务
docker 1容器
flannel 2网络主键

2、关闭相关的安全软件,因为这时实验环境,所以直接关闭就行,改下主机名

hostnamectl set-hostname node2
su
systemctl stop firewalld
iptables -F
setenforce 0

二、进行实验

在master上操作

1、创建工作目录,传文件,##从宿主机将所需要的个文件放在k8s目录

mkdir k8s 
cd k8s/
ls		 ##从宿主机将所需要的个文件在这,两个脚本,一个目录
etcd-cert  etcd-cert.sh  etcd.sh
cd etcd-cert/
chmod +x cfssl cfssl-certinfo cfssljson
mv cfssl cfssl-certinfo cfssljson /usr/local/bin/
ls /usr/local/bin/	##查看下有有没有下面三个文件
cfssl  cfssl-certinfo  cfssljson
#cfssl:生成证书工具
#cfssl-certinfo:查看证书信息
#cfssljson:通过传入json文件生成证书

2、制作CA证书

cd ..
mv etcd-cert.sh etcd-cert/
cd etcd-cert/
1、创建ca证书的配置文件
vim ca-config.json
{
  "signing": {
    "default": {   ##系统设定值
      "expiry": "87600h"  ##证书的有效期10},
    "profiles": {   ##配置
      "www": {   ##台头是www
        "expiry": "87600h",  ##时效 87600h
        "usages": [   ##常见用法(标签)
          "signing",   ##签字签名
          "key encipherment",  ##加密
          "server auth",  ##服务端验证
          "client auth"   ##客户端验证
        ]
      }
    }
  }
}
2、创建ca证书的签名证书  ##看到csr这个就是签名的证书
vim ca-csr.json
{
    "CN":"etcd CA",   ##CN中国
    "key": {    ##秘钥
        "algo":"rsa",   ##秘钥类型采用rsa非对称秘钥
        "size":2048   ##秘钥长度
    },
    "names": [   ##证书的名称
        {
            "C":"CN",   ##来自于中国
            "L":"Beijing",  ##地区
            "ST":"Beijing"  ##时区
        }
    ]
}

3、用ca签名证书生成ca证书,得到ca-key.pem ca.pem
cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
ls	##能看到下面六个文件
ca-config.json  ca.csr  ca-csr.json  ca-key.pem  ca.pem  etcd-cert.sh

上面指令3的部分解释。
gencert -initca读取
ca-csr.json初始化用的
cfssljson -bare基本信息的读取时-bare
ca-key.pem ca.pem这两个是所获得的证书
ca-config.json做server要用到的

3、指定etcd三个节点之间的通信验证—需要服务器签名证书 server-csr.json

vim server-csr.json    ##通讯验证证书
{
    "CN": "etcd",
    "hosts": [   ##指明host的文件地址
    "20.0.0.10",
    "20.0.0.11",
    "20.0.0.12"
    ],
    "key": {
        "algo": "rsa",   ##给你ca相匹配的秘钥证明
        "size": 2048
    },
    "names": [
        {
          "C": "CN",
          "L": "Beijing",
          "ST": "Beijing"
        }
    ]
}

4、用ca-key.pem、ca.pem、服务器签名证书 生成ETCD证书 ----server-key.pem、server.pem

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server

ls	##看一下会有下面八个证书#其中server-key.pem  server.pem是最重要的
ca-config.json  ca-csr.json  ca.pem        server.csr       server-key.pem
ca.csr          ca-key.pem   etcd-cert.sh  server-csr.json  server.pem

5、使用证书、etcd脚本搭建ETCD集群

51、上传一个生成ETCD配置文件的脚本etcd.sh到 /root/k8s 目录下,脚本内容如下:
cd ..
tar zxf etcd-v3.3.10-linux-amd64.tar.gz
52、解压后到etcd-v3.3.10-linux-amd64下会生成两个文件etcd 和etcdctl是很重要的。
mkdir /opt/etcd/{cfg,bin,ssl} -p ##在opt目录中创建etcd集群的工作目录
ls /opt/etcd/
#bin  cfg  ssl   		##看是否创建成功
cd /root/k8s/etcd-v3.3.10-linux-amd64/
mv etcd etcdctl /opt/etcd/bin/ ##将解压后的文件放在/opt/etcd/bin 目录下
ls /opt/etcd/bin/   		##查看一下有两个文件了etcd  etcdctl
cd /root/k8s/etcd-cert/
cp *.pem /opt/etcd/ssl/  	##将所有的证书放在/opt/etcd/ssl中
ls /opt/etcd/ssl/
#ca-key.pem  ca.pem  server-key.pem  server.pem       ##再去查看下有没有
cd /root/k8s/  ##将这个三个压缩包gz结尾的从宿主机放在它下面
#cfssl.sh   etcd-v3.3.10-linux-amd64            kubernetes-server-linux-amd64.tar.gz
#etcd-cert  etcd-v3.3.10-linux-amd64.tar.gz
#etcd.sh    flannel-v0.10.0-linux-amd64.tar.gz
53、执行 etcd.sh 脚本产生etcd集群的配置脚本和服务启动脚本,进入卡住状态等待其他节点加入
#注意:修改成自己的ip地址《vim /root/k8s/etcd.sh这个文件中能看你配置的群集信息》
[root@localhost k8s]# bash etcd.sh etcd01 20.0.0.10 etcd02=https://20.0.0.11:2380,etcd03=https://20.0.0.12:2380

三、使用另外一个会话窗口,会发现etcd进程己经开启

ps -ef | grep etcd
....  		##能显示下面的端口信息
root      16431  0.0  0.0 112664   972 pts/2    S+   22:38   0:00 grep --color=auto etcd
scp -r /opt/etcd/ root@20.0.0.11:/opt/
scp -r /opt/etcd/ root@20.0.0.12:/opt/
#将所有的配置文件远程拷贝到对方的/opt目录下,记得一定是这个目录,不然你要重新改配置文件。
scp /usr/lib/systemd/system/etcd.service root@20.0.0.11:/usr/lib/systemd/system/
scp /usr/lib/systemd/system/etcd.service root@20.0.0.12:/usr/lib/systemd/system/
#将启动脚本远程拷贝到node节点的启动脚本的位置

四、在node上面进行相关的更改节点node2的node1差不对这里不多解释。

#主机名最好改一下
hostnamectl set-hostname node1
su
cd /opt/etcd/cfg       #
[root@node2 cfg]# vim etcd   ##修改集群的名称和ip

#[Member]    ##成员
ETCD_NAME="etcd02"    ##修改etcd节点的名称
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"  ##服务运行数据保存的路径(设置数据保存的目录)
ETCD_LISTEN_PEER_URLS="https://20.0.0.11:2380" ##监听的同伴通信的地址,比如http://ip:2380,如果有多个,使用逗号分隔。需要所有节点都能够访问,所以不要使用 localhost!(用于监听其他etcd member的url (统一资源定位器,有叫网页地址))
ETCD_LISTEN_CLIENT_URLS="https://20.0.0.11:2379" ##监听的客户端服务地址(对外提供服务的地址(CLIENT客户机))

#[Clustering]     #使成群(cluster的现在分词)或聚类
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://20.0.0.11:2380" ##对外公告的该节点同伴监听地址,这个值会告诉集群中其他节点
ETCD_ADVERTISE_CLIENT_URLS="https://20.0.0.11:2379"  ##对外公告的该节点客户端监听地址,这个值会告诉集群中其他节点。
ETCD_INITIAL_CLUSTER="etcd01=https://20.0.0.10:2380,etcd02=https://20.0.0.11:2380,etcd03=https://20.0.0.12:2380"    ##集群中所有节点的信息,格式为
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"  ##集群的ID,多个集群的时候,每个集群的ID必须保持唯一
ETCD_INITIAL_CLUSTER_STATE="new"   ##新建集群的时候,这个值为 new;假如加入已经存在的集群,这个值为existing。

这里是具体的要更改的说明
vim etcd
#[Member]
ETCD_NAME="etcd02" ##改
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://20.0.0.11:2380" ##改
ETCD_LISTEN_CLIENT_URLS="https://20.0.0.11:2379" ##改
##
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://20.0.0.11:2380" ##改
ETCD_ADVERTISE_CLIENT_URLS="https://20.0.0.11:2379"  ##改
ETCD_INITIAL_CLUSTER="etcd01=https://20.0.0.10:2380,etcd02=https://20.0.0.11:2380,etcd03=https://20.0.0.12:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

五、两个node节点都改过后可以去master节点上将集群打开,,,原来开的应该会超时而自动退出,所有要重新去开启,

 bash etcd.sh etcd01 20.0.0.10 etcd02=https://20.0.0.11:2380,etcd03=https://20.0.0.12:2380Created symlink from /etc/systemd/system/multi-user.target.wants/etcd.service to /usr/lib/systemd/system/etcd.service.

六、然后回到node节点开启etcd

[root@localhost ~]# systemctl start etcd
[root@localhost ~]# systemctl status etcd
若是running状态证明是正常的

七、最后到master去执行集群健康检查

cd /root/k8s/etcd-cert
 /opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://20.0.0.10:2379,https://20.0.0.11:2379,https://20.0.0.12:2379" cluster-health
member 4a9f1750486efa02 is healthy: got healthy result from https://20.0.0.10:2379
member c1b99d661e10b568 is healthy: got healthy result from https://20.0.0.11:2379
member f33c8e897853b7c4 is healthy: got healthy result from https://20.0.0.12:2379
cluster is healthy
出现cluster is healthy说明正常

在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐