概述
K8S 集群部署有几种方式: kubeadm,minikube 和二进制包. 前两者属于自动部署, 简化部署操作. 而在生成环境中一般使用二进制包部署, 以下就是使用二进制包部署 Kubernetes 集群.
架构总规划图
环境准备
三台主机, 一台作为 master 节点, 二台作为 node 节点.
其中 master 节点需要安装以下组件
kube-apiserver,kube-controller-manager,kube-scheduler,etcd
node 节点需要安装以下组件
kubelet,kube-proxy,docker,flannel,etcd
组件介绍
Flanner:Flannel 是针对 Kubernetes 设计的一个网络规划服务, 简单来说, 它的功能是让集群中的不同节点主机创建的 Docker 容器都具有全集群唯一的虚拟 IP 地址. 但在默认的 Docker 配置中, 每个 Node 的 Docker 服务会分别负责所在节点容器的 IP 分配. Node 内部得容器之间可以相互访问, 但是跨主机 (Node) 网络相互间是不能通信. Flannel 设计目的就是为集群中所有节点重新规划 IP 地址的使用规则, 从而使得不同节点上的容器能够获得 "同属一个内网" 且 "不重复的"IP 地址, 并让属于不同节点上的容器能够直接通过内网 IP 通信.
部署流程
从官方网站上下载二进制包
部署 etcd 存储
etcd 存储在 master 节点和 node 节点都需要部署, 首先在 master 节点部署
编辑脚本下载官方 cfssl 包
- VIM cfssl.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
- chmod +x /usr/local/bin/cfssl /usr/local/bin/cfssljson /usr/local/bin/cfssl-certinfo
执行脚本
bash cfssl.sh
此时 cd /usr/local/bin / 目录生成三个文件
cfssl: 是生成证书工具
cfssljson: 通过传入 JSON 文件生成证书
cfssl-certinfo: 是查看证书信息
给这三个文件添加执行权限
chmod 777 cfssl cfssl-certinfo cfssljson
定义 ca 证书, 生成证书
构建好二个脚本, 生成证书
第一个脚本 VIM etcd-cert.sh
定义 ca 证书
证书签名
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.JSON -profile=www server-csr.JSON | cfssljson -bare server
上述命令生成所需证书
第二个脚本 VIM etcd.sh
脚本配置完成, 重新加载, 开启 etcd 以及设置开机自启动, 关闭防火墙, 增强性安全功能
- systemctl daemon-reload
- systemctl enable etcd
- systemctl restart etcd
- systemctl stop firewalld.service
- setenforce 0
创建 k8s 目录, 将二个脚本移动至目录下
- mkdir k8s
- cd k8s/
- mkdir etcd-cert
- mv etcd-cert.sh etcd-cert
解压 ETCD 二进制包
tar zxvf etcd-v3.3.10-Linux-amd64.tar.gz
配置文件, 命令文件, 证书
- mkdir /opt/etcd/{
- cfg,bin,ssl
- } -p
- mv etcd-v3.3.10-Linux-amd64/etcd etcd-v3.3.10-Linux-amd64/etcdctl /opt/etcd/bin/
证书拷贝
cp etcd-cert/.pem /opt/etcd/ssl/
进入卡住状态等待其他节点加入
bash etcd.sh etcd01 192.168.142.129 etcd02=https:/ /192.168.142.130:2380,etcd03=https:/ /192.168.149.131:2380
使用另外一个会话打开, 会发现 etcd 进程已经开启
ps -ef | grep etcd
拷贝证书去其他节点
- scp -r /opt/etcd/ [email protected]:/opt/
- scp -r /opt/etcd/ [email protected]:/opt/
启动脚本拷贝其他节点
- scp /usr/lib/systemd/system/etcd.service [email protected]:/usr/lib/systemd/system/
- scp /usr/lib/systemd/system/etcd.service [email protected]:/usr/lib/systemd/system/
在 node01 节点的操作
修改 etcd 文件
VIM /opt/etcd/cfg/etcd
修改名称和地址
- [Member]
- ETCD_NAME="etcd02"
- ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
- ETCD_LISTEN_PEER_URLS="https:/ /192.168.142.130:2380"
- ETCD_LISTEN_CLIENT_URLS="https:/ /192.168.142.130:2379"
- Clustering]
- ETCD_INITIAL_ADVERTISE_PEER_URLS="https:/ /192.168.142.130:2380"
- ETCD_ADVERTISE_CLIENT_URLS="https:/ /192.168.142.130:2379"
- ETCD_INITIAL_CLUSTER="etcd01=http//192.168.142.129:2380,etcd02=https:/ /192.168.14.130:2380,etcd03=https:/ /192.168.142.131:2380"
- ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
- ETCD_INITIAL_CLUSTER_STATE="new"
启动服务
- systemctl start etcd
- systemctl status etcd
3. 在 node02 节点的操作
修改 etcd 文件
VIM /opt/etcd/cfg/etcd
修改名称和地址
- [Member]
- ETCD_NAME="etcd03"
- ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
- ETCD_LISTEN_PEER_URLS="https:#192.168.142.131:2380"
- ETCD_LISTEN_CLIENT_URLS="https:#192.168.142.131:2379"
- [Clustering]
- ETCD_INITIAL_ADVERTISE_PEER_URLS="https:#192.168.142.131:2380"
- ETCD_ADVERTISE_CLIENT_URLS="https:#192.168.142.131:2379"
- ETCD_INITIAL_CLUSTER="etcd01=https:#192.168.142.129:2380,etcd02=https:#192.168.142.130:2380,etcd03=https:#192.168.142.131:2380"
- ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
- ETCD_INITIAL_CLUSTER_STATE="new"
启动服务
systemctl start etcd
部署 flannel
写入分配的子网段到 ETCD 中, 供 flannel 使用
/opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https:/ /192.168.149.131:2379,h ttps://192.168.220.140:2379,https:/ /192.168.220.136:2379 set /core os.com /network/config'{ "Network": "172.17.0.0/16", "Backend": {"Type": "vxlan"}}'
拷贝软件包到所有的 node 节点
- scp flannel-v0.10.0-Linux-amd64.tar.gz [email protected]:/root
- scp flannel-v0.10.0-Linux-amd64.tar.gz [email protected]:/root
所有 node 节点将压缩包解压:
tar zvxf flannel-v0.10.0-Linux-amd64.tar.gz
在 node 节点上, 先创建 k8s 工作工作目录:
- mkdir /opt/kubernetes/{
- cfg,bin,ssl
- } -p
- mv mk-docker-opts.sh flanneld /opt/kubernetes/bin/*
创建 flanner 脚本 VIM flannel.sh
启动并设置开启自启
- systemctl daemon-reload
- systemctl enable flanneld
- systemctl restart flanneld
启动 flanner 网络功能
- bash flannel.sh https:// 19 2.1 68.220.131:2379,https:/ /192.168.220.140:2379,http s://192.168.220.136:2379
- at /run/flannel/subnet.env
- DOCKER_OPT_BIP="--bip=172.17.53.1/24"
- DOCKER_OPT_IPMASQ="--ip-masq=false"
- DOCKER_OPT_MTU="--mtu=1450"
- DOCKER_NETWORK_OPTIONS="--bip=172.17.53.1/24 --ip-masq=false --mtu=1450"
重启 docker
- systemctl daemon-reload
- systemctl restart docker
查看 flanner 网络
来源: http://www.bubuko.com/infodetail-3415590.html