1、安装要求

在开始之前,部署Kubernetes集群机器需要满足以下几个条件:

  • 一台或多台机器,操作系统 CentOS7.x-86_x64
  • 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多
  • 可以访问外网,需要拉取镜像,如果服务器不能上网,需要提前下载镜像并导入节点
  • 禁止swap分区

2、准备环境

这里实验环境只创建一个node节点

角色IP组件
master192.168.100.10kube-apiserer,kube-controller-manager,kube -scheduler,etcd
node1192.168.100.20kubelet,kube-proxy,docker etcd

3、操作系统初始化配置

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
setenforce 0  # 临时

# 关闭swap
swapoff -a  # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久

# 根据规划设置主机名
hostnamectl set-hostname <hostname>

# 在master添加hosts
cat >> /etc/hosts << EOF
192.168.100.10 master
192.168.100.20 node1
EOF

# 将桥接的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  # 生效

# 时间同步
yum install ntpdate -y
ntpdate -u asia.pool.ntp.org

4、部署 Etcd 集群

4.1 准备 cfssl 证书生成工具

cfssl 是一个开源的证书管理工具,使用 json 文件生成证书,相比 openssl 更方便使用。 找任意一台服务器操作,这里用 Master 节点。

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 
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

4.2 生成 Etcd 证书

(1)自签证书颁发机构(CA)
创建工作目录:

mkdir -p ~/TLS/{etcd,k8s} 
cd TLS/etcd

自签CA:

[root@master etcd]# vim ca-config.json
{
  "signing": {
    "default": {
      "expiry": "87600h"
    },
    "profiles": {
      "www": {
         "expiry": "87600h",
         "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ]
      }
    }
  }
}
[root@master etcd]# vim ca-csr.json 
{
    "CN": "etcd CA",
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "Beijing",
            "ST": "Beijing"
        }
    ]
}

生成证书:做一个初始化操作

[root@master etcd]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
2021/05/27 16:04:55 [INFO] generating a new CA key and certificate from CSR
2021/05/27 16:04:55 [INFO] generate received request
2021/05/27 16:04:55 [INFO] received CSR
2021/05/27 16:04:55 [INFO] generating key: rsa-2048
2021/05/27 16:04:55 [INFO] encoded CSR
2021/05/27 16:04:55 [INFO] signed certificate with serial number 573472150799289061281169541828288654078398525841

[root@master etcd]# ls *pem
ca-key.pem  ca.pem

(2)使用自签 CA 签发 Etcd HTTPS 证书
创建证书申请文件:

[root@master etcd]# vim server-csr.json 
{
  "CN": "etcd",
  "hosts": [
  "192.168.100.10",
  "192.168.100.20"
  ],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "L": "BeiJing",
      "ST": "BeiJing"
    }
  ]
}

注:上述文件 hosts 字段中 IP 为所有 etcd 节点的集群内部通信 IP,一个都不能少!为了 方便后期扩容可以多写几个预留的 IP。

#ca和cak生成证书文件
[root@master etcd]# cfssl gencert -ca=ca.pem  -ca-key=ca-key.pem  -config=ca-config.json -profile=www server-csr.json  |cfssljson -bare server            
2021/05/27 16:28:16 [INFO] generate received request
2021/05/27 16:28:16 [INFO] received CSR
2021/05/27 16:28:16 [INFO] generating key: rsa-2048
2021/05/27 16:28:16 [INFO] encoded CSR
2021/05/27 16:28:16 [INFO] signed certificate with serial number 456667975612415335746587662654416203938464123440
2021/05/27 16:28:16 [WARNING] This certificate lacks a "hosts" field. This makes it unsuitable for
websites. For more information see the Baseline Requirements for the Issuance and Management
of Publicly-Trusted Certificates, v.1.1.6, from the CA/Browser Forum (https://cabforum.org);
specifically, section 10.2.3 ("Information Requirements").

这些最后就是生成证书的文件

[root@master etcd]# ls *.pem
ca-key.pem  ca.pem  server-key.pem  server.pem

这里最后一步生成证书的我执行的出错了,找了好半天错误,总结一下

https://blog.csdn.net/qq_44792624/article/details/117332764

4.3 从 Github 下载二进制文件

我这个在GitHub上找包,进网址到最下面选择tar包,下载完上传到master节点,然后解压

https://github.com/etcd-io/etcd/releases/tag/v3.4.16
在这里插入图片描述

tar -zxf etcd-v3.4.16-linux-amd64.tar.gz

4.4 部署 Etcd 集群

以下在node1 上操作,为简化操作,完成以后把文件拷贝到剩余节点就可以了

(1)创建工作目录并解压二进制包

[root@master ~]# mkdir /opt/etcd/{bin,cfg,ssl} -p
[root@master ~]# ll
总用量 35824
-rw-------. 1 root    root       955 527 19:07 anaconda-ks.cfg
-rwxr-xr-x. 1 root    root   6595195 417 03:17 cfssl-certinfo_linux-amd64
-rwxr-xr-x. 1 root    root   2277873 417 03:17 cfssljson_linux-amd64
-rwxr-xr-x. 1 root    root  10376657 417 03:17 cfssl_linux-amd64
drwxr-xr-x. 3 6810230 users     4096 512 09:58 etcd-v3.4.16-linux-amd64
-rw-r--r--. 1 root    root  17408178 528 2021 etcd-v3.4.16-linux-amd64.tar.gz
drwxr-xr-x. 2 root    root      4096 527 14:12 rbac
[root@master ~]# tar -zxf etcd-v3.4.16-linux-amd64.tar.gz
[root@master ~]# rm -rf etcd-v3.4.16-linux-amd64.tar.gz 
[root@master ~]# cd etcd-v3.4.16-linux-amd64/
[root@master etcd-v3.4.16-linux-amd64]# ll
总用量 40628
drwxr-xr-x. 14 6810230 users     4096 512 09:58 Documentation
-rwxr-xr-x.  1 6810230 users 23914048 512 09:58 etcd
-rwxr-xr-x.  1 6810230 users 17616480 512 09:58 etcdctl
-rw-r--r--.  1 6810230 users    43094 512 09:58 README-etcdctl.md
-rw-r--r--.  1 6810230 users     8431 512 09:58 README.md
-rw-r--r--.  1 6810230 users     7855 512 09:58 READMEv2-etcdctl.md
[root@master etcd-v3.4.16-linux-amd64]# mv etcd* /opt/etcd/bin/
[root@master etcd-v3.4.16-linux-amd64]#

(2)创建 etcd 配置文件

[root@master cfg]# pwd
/opt/etcd/cfg

[root@master cfg]# vim etcd.conf 
#[Member]
ETCD_NAME="etcd-1"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.100.10:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.100.10:2379"

#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.100.10:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.100.10:2379"
ETCD_INITIAL_CLUSTER="etcd-1=https://192.168.100.10:2380,etcd-2=https://192.168.100.20:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_NAME:节点名称,集群中唯一 
ETCD_DATA_DIR:数据目录 
ETCD_LISTEN_PEER_URLS:集群通信监听地址 
ETCD_LISTEN_CLIENT_URLS:客户端访问监听地址 
ETCD_INITIAL_ADVERTISE_PEER_URLS:集群通告地址 
ETCD_ADVERTISE_CLIENT_URLS:客户端通告地址 
ETCD_INITIAL_CLUSTER:集群节点地址 
ETCD_INITIAL_CLUSTER_TOKEN:集群 Token 
ETCD_INITIAL_CLUSTER_STATE:加入集群的当前状态,new 是新集群,existing 表示加入 已有集群

(3)systemd 管理 etcd

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐