kubernetes集群(二进制方式)

准备条件:

二进制方式搭建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 nl

EOF

将桥接的IPv4流量传递到iptables的链
cat >/etc/sysctl.d/k8s.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables =1

EOF

让配置生效:
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-amd64

chmod+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-1192.168.31.71
etcd-2192.168.31.72
etcd-3192.168.31.73

1

注意:为了节省机器,这里与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.yml

kubectl 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 kubectl

4、在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网络插件

测试项目

代码交流 2021