文章目录
前言
一:单master节点用二进制部署K8S集群
calico:另一个支持BGP的网络组建
1.1:拓扑图与主机分配
主机名 | IP地址 | 资源分配 | 所需部署组件 |
---|---|---|---|
master | 192.168.233.131 | 1G+2CPU | kube-apiserver、kube-controller-manager、kube-scheduler、etcd |
node01 | 192.168.233.132 | 2G+4CPU | kubelet、kube-proxy、docker、flannel、etcd |
node02 | 192.168.233.133 | 2G+4CPU | kubelet、kube-proxy、docker、flannel、etcd |
1.1.1:拓扑图介绍
-
master组件介绍:
kube-apiserver:是集群的统一入口,各个组件的协调者,所有对象资源的增删改查和监听操作都交给APIserver处理,再提交给etcd存储。
kube-controller-manager:处理群集中常规的后台任务,一个资源对应一个控制器,而controller-manager就是负责管理这些控制器。
kube-scheduler:根据调度算法为新创建的pod选择一个node节点,可以任意部署,可以部署同一个节点上,也可以部署在不同节点上
-
node组件介绍:
kubelet:kube是master在node节点上的Agent,管理本机运行容器的生命周期,比如创建容器、Pod挂载数据卷、下载secret、获取容器和节点状态等工作。kubelet将每个pod转换成一组容器
kube-proxy:在node节点上实现pod网络代理,维护网络规划和四层负载均衡的工作
docker:Docker引擎
flannel:flannel网络
-
etcd集群介绍:etcd集群在这里分布的部署到了三个节点上
etcd是CoreOS团队于2013年6月发起的开源项目,基于go语言开发,目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法。
etcd集群数据无中心化集群,有如下特点:
1、简单:安装配置简单,而且提供了HTTP进行交互,使用也很简单
2、安全:支持SSL证书验证
3、快速:根据官方提供的benchmark数据,单实例支持每秒2k+读操作
4、可靠:采用raft算法,实现分布式数据的可用性和一致性
-
部署K8S集群中会用到的自签SSL证书
组件 使用的证书 etcd ca.pem,server.pem,server-key.pem flannel ca.pem,server.pem,server-key.pem kube-apiserver ca.pem,server.pem,server-key.pem kubelet ca.pem,ca-key.pem kube-proxy ca.pem,kube-proxy.pem,kube-proxy-key.pem kubectl ca.pem,admin-pem,admin-key.pem
1.2:开局优化
-
1、修改主机名
[root@localhost ~]# hostnamectl set-hostname master '//相同方法修改另外两台主机' [root@localhost ~]# su [root@master ~]#
-
2、关闭防火墙与核心防护,三个节点都做,此处仅展示master 的操作
[root@node02 ~]# systemctl stop firewalld && systemctl disable firewalld Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. [root@node02 ~]# setenforce 0 && sed -i "s/SELINUX=enforcing/SELNIUX=disabled/g" /etc/selinux/config
1.3:ETCD集群部署
-
1、master主机创建k8s文件夹并上传etcd脚本,下载cffssl官方证书生成工具
[root@master ~]# mkdir -p k8s/etcd-cert [root@master ~]# cd k8s/ [root@master k8s]# rz -E '//上传etcd脚本' rz waiting to receive. [root@master k8s]# ls etcd-cert etcd-cert.sh etcd.sh [root@master k8s]# mv etcd-cert.sh etcd-cert '//移动到相应目录' [root@master k8s]# 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 [root@master k8s]# bash cfssl.sh '//运行下载工具的脚本' [root@master k8s]# ls /usr/local/bin/ cfssl cfssl-certinfo cfssljson '//cfssl:生成证书工具、cfssljson:通过传入json文件生成证书、cfssl-certinfo查看证书信息'
-
2、创建证书
[root@master k8s]# cd etcd-cert/ [root@master etcd-cert]# ls etcd-cert.sh [root@master etcd-cert]# vim etcd-cert.sh [root@master etcd-cert]# cat > ca-config.json <<EOF '//定义ca证书配置文件' > { > "signing": { > "default": { > "expiry": "87600h" '//有效期10年' > }, > "profiles": { > "www": { > "expiry": "87600h", > "usages": [ > "signing", > "key encipherment", > "server auth", > "client auth" > ] > } > } > } > } > EOF [root@master etcd-cert]# ls ca-config.json etcd-cert.sh [root@master etcd-cert]# cat > ca-csr.json <<EOF '//实现证书签名' > { > "CN": "etcd CA", > "key": { > "algo": "rsa", > "size": 2048 > }, > "names": [ > { > "C": "CN", > "L": "Beijing", > "ST": "Beijing" > } > ] > } > EOF [root@master etcd-cert]# ls ca-config.json ca-csr.json etcd-cert.sh [root@master etcd-cert]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca - '//生成证书:ca-key.pem、ca.pem' 2020/04/28 17:20:04 [INFO] generating a new CA key and certificate from CSR 2020/04/28 17:20:04 [INFO] generate received request 2020/04/28 17:20:04 [INFO] received CSR 2020/04/28 17:20:04 [INFO] generating key: rsa-2048 2020/04/28 17:20:04 [INFO] encoded CSR 2020/04/28 17:20:04 [INFO] signed certificate with serial number 627688569501939751033650268553951663355426596234 [root@master etcd-cert]# ls ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem etcd-cert.sh
-
3、指定etcd三个节点之间的通信验证
[root@master etcd-cert]# cat > server-csr.json <<EOF '//配置服务器端的签名文件' > { > "CN": "etcd", > "hosts": [ > "192.168.233.131", > "192.168.233.132", > "192.168.233.133" > ], > "key": { > "algo": "rsa", > "size": 2048 > }, > "names": [ > { > "C": "CN", > "L": "BeiJing", > "ST": "BeiJing" > } > ] > } > EOF [root@master etcd-cert]# ls ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem etcd-cert.sh server-csr.json [root@master etcd-cert]# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfss