二进制部署Kubernetes集群(单Master节点)---------半成品,只部署了 etcd 和 flannel

实验环境

主机系统IP
Master01Centos7192.168.73.188
Node01Centos7192.168.73.88
Node02Centos7192.168.73.166

首选需要关闭防火墙和安全功能,修改主机名

一、ETCD集群

1、先将etcd-cert三个文本拖入指定目录

在这里插入图片描述
在这里插入图片描述

2、上传etcd-cert.sh和 etcd.sh到/opt/k8s目录下(这里的脚本我直接写好了)
mkdir /opt/k8s
cd /opt/k8s
chmod 777 *

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

也可以自己去写脚本 etcd-cert.sh

vim etcd-cert.sh 
cat > ca-config.json <<EOF			#CA证书配置文件
{
  "signing": {					#键名称
    "default": {
      "expiry": "87600h"			#证书有效期(10年)
    },
    "profiles": {				#简介
      "www": {					#名称
         "expiry": "87600h",
         "usages": [				#使用方法
            "signing",				#
            "key encipherment",			#密钥验证(密钥验证要设置在CA证书中)
            "server auth",			#服务器端验证
            "client auth"			#客户端验证
        ]
      }
    }
  }
}
EOF
cat > ca-csr.json <<EOF				#CA签名
{
    "CN": "etcd CA",				#CA签名为etcd指定(三个节点均需要)
    "key": {
        "algo": "rsa",				#使用rsa非对称密钥的形式
        "size": 2048				#密钥长度为2048
    },
    "names": [					#在证书中定义信息(标准格式)
        {
            "C": "CN",				#名称
            "L": "Beijing",		
            "ST": "Beijing"		
        }
    ]
}
EOF
cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
cat > server-csr.json <<EOF			#服务器端的签名
{
    "CN": "etcd",
    "hosts": [					#定义三个节点的IP地址
    "192.168.73.188",
    "192.168.184.88",
    "192.168.184.166"
    ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "BeiJing",
            "ST": "BeiJing"
        }
    ]
}
EOF
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server     #cfssl 为证书制作工具
3、创建启动脚本 etcd.sh
cat etcd.sh 
#!/bin/bash
#以下为使用格式:etcd名称 当前etcd的IP地址+完整的集群名称和地址
# example: ./etcd.sh etcd01 192.168.73.188 etcd02=https://192.168.73.88:2380,etcd03=https://192.168.73.166:2380
ETCD_NAME=$1						#位置变量1:etcd节点名称
ETCD_IP=$2						#位置变量2:节点地址
ETCD_CLUSTER=$3						#位置变量3:集群
WORK_DIR=/opt/etcd					#指定工作目录
cat <<EOF >$WORK_DIR/cfg/etcd				#在指定工作目录创建ETCD的配置文件
#[Member]
ETCD_NAME="${ETCD_NAME}"				#etcd名称
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://${ETCD_IP}:2380"		#etcd IP地址:2380端口。用于集群之间通讯
ETCD_LISTEN_CLIENT_URLS="https://${ETCD_IP}:2379"	#etcd IP地址:2379端口,用于开放给外部客户端通讯
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://${ETCD_IP}:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://${ETCD_IP}:2379"	#对外提供的url使用https的协议进行访问
ETCD_INITIAL_CLUSTER="etcd01=https://${ETCD_IP}:2380,${ETCD_CLUSTER}"		#多路访问
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"		#tokens 令牌环名称:etcd-cluster
ETCD_INITIAL_CLUSTER_STATE="new"			#状态,重新创建
EOF
cat <<EOF >/usr/lib/systemd/system/etcd.service		#定义ectd的启动脚本
[Unit]								#基本项			
Description=Etcd Server					#类似为 etcd 服务
After=network.target					#vu癌症
After=network-online.target
Wants=network-online.target
[Service]						#服务项
Type=notify
EnvironmentFile=${WORK_DIR}/cfg/etcd	#etcd文件位置
ExecStart=${WORK_DIR}/bin/etcd \			#准启动状态及以下的参数
--name=\${ETCD_NAME} \
--data-dir=\${ETCD_DATA_DIR} \
--listen-peer-urls=\${ETCD_LISTEN_PEER_URLS} \
--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=${WORK_DIR}/ssl/server.pem \		#证书相关参数
--key-file=${WORK_DIR}/ssl/server-key.pem \
--peer-cert-file=${WORK_DIR}/ssl/server.pem \
--peer-key-file=${WORK_DIR}/ssl/server-key.pem \
--trusted-ca-file=${WORK_DIR}/ssl/ca.pem \
--peer-trusted-ca-file=${WORK_DIR}/ssl/ca.pem
Restart=on-failure
LimitNOFILE=65536					#开放最多的端口号
[Install]
WantedBy=multi-user.target				#进行启动
EOF
systemctl daemon-reload					#参数重载
systemctl enable etcd
systemctl restart etcd
4、创建证书目录,复制k8s目录下的证书创建脚本
mkdir etcd-cert
cd etcd-cert/
mv ../etcd-cert.sh ./

#从官网源中下载制作证书的工具
curl -L https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -o /usr/local/bin/cfssl
curl -L https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -o /usr/local/bin/cfssljson
curl -L https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -o /usr/local/bin/cfssl-certinfo

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5、将压缩包放入/opt/k8s目录下进行解压
tar -zxvf etcd-v3.3.10-linux-amd64.tar.gz

在这里插入图片描述

6、创建用于存放 etcd 配置文件,命令文件,证书的目录
mkdir -p /opt/etcd/{cfg,bin,ssl}

在这里插入图片描述

7、将刚刚解压出来的etcd文件中的 etcd 和 etcdctl移动到 /opt/etcd/bin目录下
cd /opt/k8s/
cd etcd-v3.3.10-linux-amd64/
mv etcd etcdctl /opt/etcd/bin/

在这里插入图片描述

8、将刚刚解压出来的etcd文件中的 私钥和公钥还有证书 移动到 /opt/etcd/ssl目录下
cd ..
cd etcd-cert/
cp *.pem /opt/etcd/ssl/

在这里插入图片描述
在这里插入图片描述

9、执行etcd.sh脚本文件
cd /opt/k8s/
./etcd.sh etcd01 192.168.73.188 etcd02=https://192.168.73.88:2380,etcd03=https://192.168.73.166:2380

在这里插入图片描述

10、将Master中的两个配置文件远程复制给另外两台节点服务器
scp -r /opt/etcd/ root@192.168.73.88:/opt
scp -r /opt/etcd/ root@192.168.73.166:/opt

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Master01服务器

cd /usr/lib/systemd/system
scp etcd.service root@192.168.73.88:/usr/lib/systemd/system
scp etcd.service root@192.168.73.166:/usr/lib/systemd/system

在这里插入图片描述
在这里插入图片描述

11、更改Node节点服务器的配置文件

两台Node服务器

vim cfg/etcd
#[Member]
ETCD_NAME="etcd02"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.73.88:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.73.88:2379"

#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.73.88:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.73.88:2379"
ETCD_INITIAL_CLUSTER="etcd01=https://192.168.73.188:2380,etcd02=https://192.168.73.88:2380,etcd03=https://192.168.73.166:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

在这里插入图片描述

systemctl start etcd.service
systemctl status etcd.service

在这里插入图片描述
另一台Node也是一样的操作
在这里插入图片描述
在这里插入图片描述

12、检查一下etcd状态

Master服务器

cd /opt/etcd/bin/
ln -s /opt/etcd/bin/etcdctl /usr/local/bin/
cd /opt/etcd/ssl/
etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://192.168.73.188:2379,https://192.168.73.88:2379,https://192.168.73.166:2379" cluster-health

在这里插入图片描述
在这里插入图片描述

13、此时etcd服务部署完成

二、部署Docker引擎

在所有Node节点上面部署

安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2 
设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 

yum install -y docker-ce ##这里我只安装docker-ce了

systemctl start docker
systemctl status docker

在这里插入图片描述
在这里插入图片描述

三、配置flannel网络

  • flannel是实现不同node中Pod相互通信用的。

flannel的工作流程

flannel 会把内部的pod iP 封装到udp中,再根据在etcd 保存的路由表通过物理网卡发送给目的node,目的node在接受到转发来的数据后由flanneld解封装暴露出udp里的内部 Pod ip ,再根据目的IP由 flannel0 --> dockerO转发到目的pod 中

在这里插入图片描述

1、写入分配的子网段到ETCD中,供flannel使用

Master01上操作

etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://192.168.73.188:2379,https://192.168.73.88:2379,https://192.168.73.166:2379" set /coreos.com/network/config '{ "Network": "172.17.0.0/16", "Backend": {"Type": "vxlan"}}'

在这里插入图片描述

2、上传 flannel.sh 和 flannel-v0.10.0-linux-amnd64.tar.gz到/opt目录中,解压flannel压缩包

所有node节点上操作

tar -zxvf flannel-v0.10.0-linux-amd64.tar.gz

在这里插入图片描述

3、创建工作目录
mkdir -p /opt/kubernetes/{cfg,bin,ssl}

 flanneld  mk-docker-opts.sh 放入工作目录中的bin目录下
mv flanneld mk-docker-opts.sh /opt/kubernetes/bin/

在这里插入图片描述在这里插入图片描述

4、编写启动脚本
vim flannel.sh

#!/bin/bash

#定义etcd集群的端点IP地址和对外提供服务的2379端口
#${var:-string}:若变量var为空,则用在命令行中用string来替换;否则变量var不为空时,则用变量var的值来替换,这里的1代表的是位置变量$1
ETCD_ENDPOINTS=${1:-"http://127.0.0.1:2379"}

#创建flanneld配置文件
cat > /opt/kubernetes/cfg/flanneld <<EOF
FLANNEL_OPTIONS="--etcd-endpoints=${ETCD_ENDPOINTS} \\
-etcd-cafile=/opt/etcd/ssl/ca.pem \\
-etcd-certfile=/opt/etcd/ssl/server.pem \\
-etcd-keyfile=/opt/etcd/ssl/server-key.pem"
EOF

#flanneld 本应使用 etcd 客户端TLS相关证书(client 证书),这里全部都使用同一套证书认证。


#创建flanneld.service服务管理文件
cat > /usr/lib/systemd/system/flanneld.service <<EOF
[Unit]
Description=Flanneld overlay address etcd agent
After=network-online.target network.target
Before=docker.service

[Service]
Type=notify
EnvironmentFile=/opt/kubernetes/cfg/flanneld
ExecStart=/opt/kubernetes/bin/flanneld --ip-masq \$FLANNEL_OPTIONS
ExecStartPost=/opt/kubernetes/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/subnet.env
Restart=on-failure

[Install]
WantedBy=multi-user.target

EOF

#flanneld启动后会使用 mk-docker-opts.sh 脚本生成 docker 网络相关配置信息
#mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS:将组合选项键设置为环境变量DOCKER_NETWORK_OPTIONS,docker启动时将使用此变量
#mk-docker-opts.sh -d /run/flannel/subnet.env:指定要生成的docker网络相关信息配置文件的路径,docker启动时候引用此配置

systemctl daemon-reload
systemctl enable flanneld
systemctl restart flanneld
chmod +x flannel.sh

./flannel.sh https://192.168.73.188:2379,https://192.168.73.88:2379,https://192.168.73.166:2379

systemctl status flanneld.service

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

cat /run/flannel/subnet.env

在这里插入图片描述

5、配置docker连接flannel
vim /usr/lib/systemd/system/docker.service

----------------13行和14行添加------------------
13 EnvironmentFile=/run/flannel/subnet.env
14 ExecStart=/usr/bin/dockerd $DOCKER_NETWORK_OPTIONS -H fd:// --containerd=/run/containerd/containerd.sock

在这里插入图片描述

6、重载和重启docker服务
systemctl  daemon-reload
systemctl restart docker
ifconfig

这个时候docker0网卡已经和flannel同步过来了,同步成同一网段
在这里插入图片描述
在这里插入图片描述
node2和node1一样配置

7、验证flannel

node1和node2
方法一:

ping -I 172.17.36.1 172.17.56.1

在这里插入图片描述

方法二:
node1和node2

两台node都需要这样操作
docker run -it centos:7 /bin/bash
yum install net-tools -y

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值