准备条件:
二进制方式搭建k8s的集群:
满足几个条件:
1、一台或多台机器,操作系统CentOS7.x-86_x64
2、配置硬件:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多
3、集群中所有机器之间网络互通
4、可以访问外网,需要拉去镜像,如果服务器不能上网,需要提前下载镜像并导入节点
5、禁止swap分区
服务器规划:
角色服务器规划: IP 组件
k8s-master 192.168.31.71 kube-apiserver,kube-cotroller-manager,kube-scheduler,etcd
k8s-node1 192.168.31.72 kubelet,kube-proxy,docker etcd
k8s-node2 192.168.31.73 kubelet,kube-proxy,docker,etcd
系统初始化操作:
#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld#关闭selinux
sed -i 's/enforecing/disabled' /etc/selinux/config #永久setenfore 0 #临时
#关闭swap
swapoff -a #临时
sed -ri 's/.*swap.*/#&/' /etc/fstab #永久#根据规划设置主机名
hostnamectl set-hostname <hostname>
#在master添加hosts
cat >> /etc/hosts <<EOF
192.168.44.147 ml
192.168.44.148 nlEOF
将桥接的IPv4流量传递到iptables的链
cat >/etc/sysctl.d/k8s.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables =1EOF
让配置生效:
sysctl --system #生效#时间同步:
yum install ntpdate -y
ntpdate time.windows.com
3、为etcd和apiserver自签证书
k8s没有证书,会存在访问受限
集群内部访问:master和node之间通讯需要证书
外部访问集群也需要证书
需要到官方网站(google.net)签证
由于我们自己学习,我们自己签发证书
4、准备cffssl证书生成工具
cffssl是一个开源的证书管理工具,使用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-amd64chmod+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
5、部署Etcd集群
Etcd是一个分布式的简直存储系统,Kubernetes使用Etcd镜像数据存储,所以先准备一个Etcd数据库,为解决Etcd单点故障
,应采用集群方式部署,这里使用3台组件集群,可容忍1台机器故障,当然,你也可以使用5台集群,可容忍2台故障。
节点名称 | IP |
etcd-1 | 192.168.31.71 |
etcd-2 | 192.168.31.72 |
etcd-3 | 192.168.31.73 |
注意:为了节省机器,这里与k8s节点机器服用。也可以独立于k8s集群之外部署,只要apiserver能连接到就行
部署etcd集群:
删除掉ssl里面证书,替换成我们我们上面是很生成的证书。删除掉ssl里面的所有文件
rm ssl/* -f
修改etcd.conf配置文件:
将master节点所审查隔行的文件拷贝到节点2:
scp -r etcd root@192.168.44.148:/opt/
scp -r etcd.service root@192.168.44.148:/usr/lib/systemed/system
注意修改从节点上etcd.conf文件:
启动并设置开机启动 :
systemctl daemon-reload
systemctl start etcd
systemctl enable etcd
提示错误:没有这个单元。
主要是etcd.service没有复制过去导致的。复制etcd目录下的etcd.service到/usr/lib/systemd/system/
cp etcd.service /usr/lib/systemd/system/
启动:
systemctl daemon-reload
systemctl start etcd
etcd.conf里面的etcd_name修改成对应的名字
下载二进制文件:
https: //github.com/kubernetes/kubernetes/blob/master/CHANGELOG
上面文件都放到master文件中bin目录下:
上传master,把证书文件复制到master下面的ssl
表示的意思:
-logtostderr:启用日志
-v:日志等级
-log-dir:日志目录
-etcd-servers:etcd集群地址
-bind-address:监听地址
-secyre-port:https安全端口
-advertise-address:集群通告地址
-allow-privileged:启用授权
-service-cluster-ip-range:Service虚拟IP地址段
-enable-admission-plugins:准入控制模块
-authorzation-mode:认证授权,启用RBAC授权和节点自管理
-enable-bootstrap-token-auth:启用TLS bootstrap机制
-token-auth-file:bootstrap token文件
-service-node-port-range:service nodeport类型默认分配端口范围
-kubelet-client-xxx:apiserver访问kubelet客户端证书
-tls-xxx-file:apiserver https证书
-etcd-xxxfile:连接Etcd集群证书
-audit-log-xxx:审计日志
移动:
mv /opt/kubernetes/bin/kubectl /usr/local/bin/
授权kebelet-bootstrap用户允许请求证书
kubectl create clusterrolebinding kubelet-bootstrap \
--clusterrole = system:node-bootstrapper \
--user=kubelet-bootstrap
部署master节点
kube-cotroller-manager、APIserver、scheduler
启动并设置开机启动:
systemctl daemon-reload
systemctl start kube-apiserver
systemctl enable kube-apicerver
部署node节点
kubelet、kube-proxy、docker
安装Docker:
下载地址:https: //down.docker.com/linux/static/stable/x86_64/docker-19.03.9.tgz
采用二进制安装,yum安装也可以
1、解压二进制包
tar zxvf docker-19.03.9.tgz
mv docker/* /usr/bin
systemctl start docker(启动)
systemctl enable docker(开机启动)
安装kubelet:
bootstrap.kubeconfig(ip改为master ip)kube-proxy.kubeconfig(ip改为master ip)
kubelet.conf(主机名改为实际主机名称)
kube-proxy-config.yml(修改主机名称(host那么Override:n1))
通过master节点把证书复制到ssl下面
启动并设置开机启动:
systemctl daemon-reload(重载)
systemctl start kubelet(启动)
systemctl enable kubelet(开机启动)
启动并设置开机启动:
systemctl daemon-reload(重载)
systemctl start kube-proxy(启动)
systemctl enable kube-proxy(开机启动)
有了证书,还必须要授权,master节点授权kubelet证书申请并加入集群
#查看kebelet证书请求
kubectl get csr
#批准申请
kubectl certificate approve node-csr-uCEGPOIiDdiLODKts8J658HrFq9CZ--K6M4G7bjhk8A
#查看节点
kubectl get node
注意:由于网络插件还没有部署,节点会没有准备就绪NotReady
部署CNI网络配置:
先准备好CNI二进制文件:
下载地址:
https://github.com/containernerworking/plugins/releases/download/v0.8.6/cni-plugins-linux-amd64-v0.8.6.tgz
解压二进制包并动刀默认工作目录:
mkdir /opt/cni/bin
tar zxvf cni-plugins-linux-amd64-v0.8.6.tgz -C /opt/cni/bin
或者命令下载:
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.ymlkubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl get pods -n kube-system
测试集群:
在Kubernetes集群中创建一个pod,验证是否正常运行:
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=90 --type=NodePort
kubectl get pod,svc
搭建Kubernetes俩种集群的总结:
kubeadm(kubeadmin方式)搭建k8s流程
kubeadm搭建k8s
1、安装虚拟机,在虚拟机安装linux系统
2、系统初始化
3、在所有节点(master、node)安装docker、kubelet、kubectl、kubeadm
a、(docker不指定版本,安装的就是最新的版本)
b、修改docker仓库地址,yum源仓库地址,改为阿里云地址
c、安装kubeadm,kubelet和kubectl
*k8s已经发布最新1.19版本,可以指定版本安装,不指定安装最新
yum install -y kubelet kubeadm kubectl4、在master节点执行初始化命令操作
kubeadm init \
指定镜像源,使用阿里云镜像
5、部署CNI网络插件
kubectl apply -f /kube-flannel.yml
6、在所有的node节点上,使用join命令,把node节点家伙是哪个
向集群添加新节点,执行在kubeadm init输出的kubeadm join命令:
kubeadm join IP:port --
二进制文件搭建k8s流程
二进制方式搭建k8s集群
1、安装虚拟机和操作系统,对操作系统初始化操作
2、生成cfssl自签证书
生成ca-key.pem ca.pem
server相关证书:server-key.pem server.pem
3、部署ectd集群
本质 把etcd服务 交给 systemd管理
a、把生成证书复制过来,启动,设置开机启动
4、为apiserver自签证书
生成过程和etcd类似
5、部署master组件
a、apiserver
b、controller-manager
c、scheduler
组件交给systemd管理组件启动,设置开机启动
安装最新1.19版本,下载二进制文件进行安装
6、部署node组件
a、docker
b、kubelet
c、kube-proxy交给systemd管理组件-组件启动,设置开机启动
d、批准kubelet证书申请并加入集群
7、部署CNI网络插件测试项目