Kubernetes单节点二进制部署
一、常见的K8S部署方式:
1.Minikube
Minikube是一个工具,可以在本地快速运行一个单节点微型K8S,仅用于学习、预览K8S的一些特性使用。部署地址:https://kubernetes.io/docs/setup/minikube
2.Kubeadmin
Kubeadmin也是一个工具,提供kubeadm init和kubeadm join,用于快速部署K8S集群,相对简单。
https:// kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
3.二进制安装部著
生产首选,从官方下载发行版的二进制包,手动部署每个组件和自签TLS证书,组成K8S集群,新手推荐。https://github.com/ kubernetes/kubernetes/releases
二、二进制部署
环境准备
k8s集群master01:192.168.19.11 kube-apiserver kube-controller-manager kube-scheduler etcd
k8s集群master02:192.168.19.33 (为多节点准备)
k8s集群node01:192.168.19.44 kubelet kube-proxy docker flannel
k8s集群node02: 192.168.19.55
etcd集群节点1:192.168.19.11 etcd
etcd集群节点2:192.168.19.44
etcd集群节点3:192.168.19.55
负载均衡nginx+keepalive01 (master):192.168.19.66
负载均衡nginx+keepalive02 (backup):192.168.19.77
systemetl stop firewalld
systemctl disable firewalldsetenforce 0
1.部署etcd
etcd是Coreos团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法,etcd是go语言编写的。
etcd作为服务发现系统,有以下的特点:
简单:安装配置简单,而且提供了HTTP API进行交互,使用也很简单
安全:支持ssL证书验证
快速:单实例支持每秒2k+读操作
可靠:采用raft算法,实现分布式系统数据的可用性和一致性
etcd 目前默认使用2379端口提供HTTP API服务,2380端口和peer通信(这两个端口已经被IANA(互联网数字分配机构)官方预留给etcd)。
即etcd默认使用2379端口对外为客户端提供通讯,使用端口2380来进行服务器间内部通讯。
etcd在生产环境中一般推荐集群方式部署。由于etcd 的leader选举机制,要求至少为3台或以上的奇数台。
准备签发证书环境
CFSSL是Cloudrlare公司开源的一款、 PKI/TLS 工具。CESSI包含一个命令行工具和一个用于签名、验证和捆绑TLS证书的HTTP API 服务。使用Go语言编写。
CFSSL使用配置文件生成证书,因此自签之前,需要生成它识别的json格式的配置文件,CFSSL提供了方便的命令行生成配置文件。CFSSL用来为 etcd提供TLS 证书,它支持签三种类型的证书:
(1)client 证书,服务端连接客户端时携带的证书,用于客户端验证服务端身份,如 kube-apiserver访问etcd;
(2)server 证书,客户端连接服务端时携带的证书,用于服务端验证客户端身份,如 etcd对外提供服务;
(3)peer 证书,相互之间连接时使用的证书,如 etcd节点之间进行验证和通信。
这里全部都使用同一套证书认证。
(1)修改主机名,关闭防火墙
# k8smaster01(192.168.19.11)
hostnamectl set-hostname k8smaster01
su
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
# k8snode01(192.168.19.44)
hostnamectl set-hostname k8snode01
su
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
# k8snode02(192.168.19.55)
hostnamectl set-hostname k8snode02
su
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
(2)上传证书制作工具(k8smaster01上操作)
cd /usr/local/bin
上传 cfssl cfssl-certinfo cfssljson
chmod +x *
注释
cfssl:证书签发的工具命令
cfssljson:将 cfssl生成的证书(json格式)变为文件承载式证书
cfssl-certinfo:验证证书的信息
cfssl-certinfo -cert<证书名称> #查看证书的信息
#创建k8s工作目录
cd /opt
rm -rf *
mkdir k8s/
#上传etcd-cert.sh和etcd.sh到/opt/k8s/目录中
chmod +x etcd-cert.sh etcd.sh
#创建用于生成CA证书、etcd服务器证书以及私钥的目录
mkdir etcd-cert
mv etcd-cert.sh etcd-cert/
cd etcd-cert/
./etcd-cert.sh
#生成CA证书、etcd服务器证书以及私钥
ls
(3)启动etcd服务(k8smaster01上操作)
#etcd二进制包地址: https://github.comletcd-ioletcd/releases
#上传 etcd-v3.3.10-linux-amd64.tar.gz到/opt/k8s/目录中,解压etcd压缩包
cd /opt/k8s/
tar zxvf etcd-v3.3.10-linux-amd64.tar.gz
ls etcd-v3.3.10-linux-amd64
注释
etcd就是etcd服务的启动命令,后面可跟各种启动参数
etedctl主要为etcd服务提供了命令行操作
#创建用于存放etcd配置文件,命令文件,证书的目录
mkdir -p /opt/etcd/{
cfg,bin,ssl}
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/
./etcd.sh etcd01 192.168.19.11 etcd02=https://192.168.19.44:2380,etcd03=https://192.168.19.55:2380
#进入卡住状态等待其他节点加入,这里需要三台etcd服务同时启动,如果只启动其中一台后,服务会卡在那里,直到集群中所有etcd节点都己启动,可忽略这个情况
#另外打开一个窗口查看etcd进程是否正常
ps -ef | grep etcd
#把etcd相关证书文件和命令文件全部拷贝到另外两个etcd集群节点
scp -r /opt/etcd/ root@192.168.19.44:/opt/
scp -r /opt/etcd/ root@192.168.19.55:/opt/
#把etcd服务管理文件拷贝到另外两个etcd集群节点
scp /usr/lib/systemd/system/etcd.service root@192.168.19.44:/usr/lib/systemd/system/
scp /usr/lib/systemd/system/etcd.service root@192.168.19.55:/usr/lib/systemd/system/
(4)修改node01和node02的配置文件(k8snode01和k8snode02)
# k8snode01(192.168.19.44)
vim /opt/etcd/cfg/etcd
#[