k8s 二进制安装 详细安装步骤

news2024/9/17 2:53:03

目录

一    实验环境

二   操作系统初始化配置(所有机器)

1,关闭防火墙

2,关闭selinux

3,关闭swap

4, 根据规划设置主机名

5, 做域名映射

6,调整内核参数

7, 时间同步

三   部署 docker引擎(node 节点)

四    部署 etcd 集群

1, etcd 介绍

1.1 etcd 是什么

1.2 etcd 特点

1.3   etcd 端口

2,  准备签发证书环境

3, 下载CFSSL三个工具

4,  生成Etcd证书

5,下载 etcd 的安装包,启动etcd

6, 把etcd相关证书文件、命令文件和服务管理文件全部拷贝到另外两个etcd集群节点

7, 在 node01 节点上操作(etcd02 )

8, 在 node02 节点上操作(etcd03 )

9 ,查看etcd主从 状态

9.1 检查etcd群集状态

9.2 更详细检查etcd群集状态

9.3  查看etcd集群成员列表

五    部署 Master 组件

1,上传5个需要的脚本

2,创建kubernetes工作目录

3,生成CA证书、相关组件的证书和私钥

4, 将 master组件的关键命令文件到 kubernetes工作目录的 bin 

5,  创建token 认证文件

6, 查看准备环境

7, 开启 apiserver 服务

8, 启动 scheduler 服务

9, 启动 controller-manager 服务

10,  生成kubectl连接集群的kubeconfig文件

11,通过kubectl工具查看当前集群组件状态

六     部署 Worker Node 组件(在所有 node 节点上操作)

1,创建kubernetes工作目录,上传两个脚本

2,把 kubelet、kube-proxy 拷贝到 node 节点

3, 生成node 节点的配置文件

3.1 具体步骤

3.2 具体解释

4, 准备环境

4,   启动  kubelet.sh 脚本   启动kublet 组件

5, 在 master01 节点上操作,通过 CSR 请求

6, node节点   启动 proxy 组件

七     部署 CNI 网络组件  之部署 flannel

1,环境准备

2,准备flannel 镜像

3, 准备 cni 的可执行应用

4,利用脚本部署 CNI 网络

5, 查看node 节点状态

6, 将node02 也加入网络

八    部署 CNI 网络组件  之部署  Calico

1,上传 calico.yaml 文件到 /opt/k8s 目录中,部署 CNI 网络

2,执行yaml 文件

 3, 查看node 节点状态

 九   二进制安装步骤总结

1, 环境部署

2,node 节点 部署 docker引擎

3,部署 etcd 集群

3.1 ssl 子目录准备

3.2 bin 子目录准备

3.3 脚本启动一台etcd01

3.4 做其他的etcd

4,部署 Master 组件

4.1 ssl 子目录准备

4.2 bin 子目录准备

4.3 cfg 目录准备

4.4 启动 apiserver 服务

4.5 启动 scheduler 服务

4.6 启动 controller-manager 服务

4.7 启动 kubectl 工具

5, 部署 Worker Node 集群

5.1 bin 子目录 准备

5.2 cfg 子目录准备

5.3 master 机器做RBAC授权

5.4 启动 kubelet 服务

5.5 master通过 CSR 请求

5.6 启动 proxy 服务

6, 部署 flannel

6.1 node机器

6.2 master 机器

7,部署 Calico

6.1 node 机器

6.2 master 机器


一    实验环境

k8s集群master01:192.168.217.66    kube-apiserver kube-controller-manager kube-scheduler etcd
k8s集群master02:192.168.217.77

k8s集群node01:192.168.217.88    kubelet kube-proxy docker 
k8s集群node02:192.168.217.99

etcd集群节点1:192.168.217.66    etcd
etcd集群节点2:192.168.217.88    etcd

etcd集群节点3:192.168.217.99    etcd

负载均衡nginx+keepalive01(master):192.168.217.22
负载均衡nginx+keepalive02(backup):192.168.217.44


VIP 192.168.10.100
 

二   操作系统初始化配置(所有机器)

1,关闭防火墙

systemctl stop firewalld
systemctl disable firewalld
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

#
iptables -F:这一部分命令是用来清空filter表中的所有规则链(包括INPUT、OUTPUT、FORWARD)。这意味着所有进入、离开或通过系统的数据包都将按照默认策略处理,通常是接受(ACCEPT)或拒绝(DROP)。

iptables -t nat -F:这里,-t nat指定了操作表为nat表,-F则表示清空。它会清空nat表内的规则,包括PREROUTING、POSTROUTING和OUTPUT链。这些规则通常用于网络地址转换(NAT),比如端口转发或者IP伪装。

iptables -t mangle -F:这部分命令清空了mangle表中的规则。mangle表用于修改数据包的服务类型、TTL(生存时间)值或标记等,通常涉及到更高级的路由和QoS(服务质量)控制。

iptables -X:此命令用于删除用户自定义的(非内置的)链。这不会影响INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING这样的内置链,而是会删除你自己创建的任何额外链。

综上所述,执行这个命令后,你的iptables规则将会被完全重置,所有的自定义规则都会被清除,系统将恢复到iptables的初始默认状态。在执行此操作前,请确保你了解这将对你的系统网络安全设置产生的影响,并已经做好了相应的备份或有恢复策略。

2,关闭selinux

setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config

3,关闭swap

swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab 
# -r 是开启扩展正则 将.*swap.*  换成#$

4, 根据规划设置主机名

hostnamectl set-hostname master01
hostnamectl set-hostname master02
hostnamectl set-hostname node01
hostnamectl set-hostname node02

5, 做域名映射

cat >> /etc/hosts << EOF
192.168.217.66 master01
192.168.217.77 master02
192.168.217.88 node01
192.168.217.99 node02
EOF

6,调整内核参数

cat > /etc/sysctl.d/k8s.conf << EOF
#开启网桥模式,可将网桥的流量传递给iptables链
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
#关闭ipv6协议
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOF


sysctl --system
##
sysctl --system 命令用于从系统配置文件(通常是 /etc/sysctl.conf 以及 /etc/sysctl.d/ 目录下的其他配置文件)中读取并应用内核参数设置。当执行这个命令时,系统会遍历这些配置文件,将其中定义的内核参数值应用到当前运行的内核中,从而实现对系统行为的调整,例如开启或关闭IP转发、调整网络缓冲区大小、改变文件系统的行为等,而无需重启系统。

7, 时间同步

yum install ntpdate -y
ntpdate time.windows.com

三   部署 docker引擎(node 节点)

yum install -y yum-utils device-mapper-persistent-data lvm2 
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
yum install -y docker-ce docker-ce-cli containerd.io

systemctl start docker.service
systemctl enable docker.service 

四    部署 etcd 集群

CFSSL 是为etcd 的准备的   

CFSSL 生成的 密钥文件  会拖到 etcd 的ssl 目录中

1, etcd 介绍

1.1 etcd 是什么

etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法,etcd是go语言编写的。

1.2 etcd 特点

etcd 作为服务发现系统,有以下的特点:
简单:安装配置简单,而且提供了HTTP API进行交互,使用也很简单
安全:支持SSL证书验证
快速:单实例支持每秒2k+读操作
可靠:采用raft算法,实现分布式系统数据的可用性和一致性
 

1.3   etcd 端口

etcd 目前默认使用2379端口提供HTTP API服务, 2380端口和peer通信(这两个端口已经被IANA(互联网数字分配机构)官方预留给etcd)。 即etcd默认使用2379端口对外为客户端提供通讯,使用端口2380来进行服务器间内部通讯。
etcd 在生产环境中一般推荐集群方式部署。由于etcd 的leader选举机制,要求至少为3台或以上的奇数台。


2,  准备签发证书环境

CFSSL 是 CloudFlare 公司开源的一款 PKI/TLS 工具。 CFSSL 包含一个命令行工具一个用于签名、验证和捆绑 TLS 证书的 HTTP API 服务。使用Go语言编写。
CFSSL 使用配置文件生成证书,因此自签之前,需要生成它识别的 json 格式的配置文件,CFSSL 提供了方便的命令行生成配置文件。
CFSSL 用来为 etcd 提供 TLS 证书,它支持签三种类型的证书:
1、client 证书,服务端连接客户端时携带的证书,用于客户端验证服务端身份,如 kube-apiserver 访问 etcd;
2、server 证书,客户端连接服务端时携带的证书,用于服务端验证客户端身份,如 etcd 对外提供服务;
3、peer 证书,相互之间连接时使用的证书,如 etcd 节点之间进行验证和通信
这里全部都使用同一套证书认证。
 

3, 下载CFSSL三个工具

下载

#准备cfssl证书生成工具
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -O /usr/local/bin/cfssl
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -O /usr/local/bin/cfssljson
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -O /usr/local/bin/cfssl-certinfo

移到指定目录   加权限

cfssl:证书签发的工具命令
cfssljson:将 cfssl 生成的证书(json格式)变为文件承载式证书
cfssl-certinfo:验证证书的信息
cfssl-certinfo -cert <证书名称>			#查看证书的信息

4,  生成Etcd证书

准备k8s 目录

上传 etcd-cert.sh (生成CFSSL 证书的脚本) etcd.sh (启动 etcd 的脚本)到 /opt/k8s/ 目录中

并加 执行权限

创建用于生成CA证书、etcd 服务器证书以及私钥的目录   将脚本移过去

编写脚本  注意更改证书 生命周期   以及etcf 服务器的ip 地址

运行脚本 生成CA证书、etcd 服务器证书以及私钥

  1. ca-config.json:CA(Certificate Authority,证书颁发机构)的配置文件,定义了如何生成CA证书的规则,比如默认有效期、密钥使用算法等。

  2. ca-csr.json:CA证书签名请求文件(Certificate Signing Request),包含了请求CA签发证书所需的信息。

  3. ca.pem:CA的公钥证书文件,用于验证由该CA签发的所有证书的真实性。

  4. server.csr:服务器证书的签名请求文件,用于请求签发特定服务器的TLS证书。

  5. server-key.pem:服务器私钥文件,与server.pem一起用于服务器的TLS加密通信。

  6. server-csr.json:另一个服务器证书签名请求文件,可能用于不同目的或备份。

  7. server.pem:服务器的公钥证书文件,包含了服务器的公钥以及由CA签名的证书信息。

  8. etcd-cert.sh:一个脚本文件,可能是用来自动化执行上述TLS证书生成过程的Shell脚本。

5,下载 etcd 的安装包,启动etcd

下载 etcd 的安装包 到/opt/k8s

https://github.com/etcd-io/etcd/releases/download/v3.4.9/etcd-v3.4.9-linux-amd64.tar.gz

解压安装包并查看   

etcd就是etcd 服务的启动命令,后面可跟各种启动参数
etcdctl主要为etcd 服务提供了命令行操作

创建用于存放 etcd 配置文件命令文件,证书的目录

把 原来 压缩包解压出来的  etcd  etcdctl 移动到 bin

将把4个.pem 结尾的   证书 放ssl

写etcd 启动脚本 (根据脚本示例   用位置变量 跟三个etcd 的ip来启动)脚本

确保所有的启动etcd 的准备环境(cfg 配置文件目前是空的  在启动etcd 脚本后会自动生成)

启动etcd 启动脚本

cd /opt/k8s/


./etcd.sh etcd01 192.168.217.66 etcd02=https://192.168.217.88:2380,etcd03=https://192.168.217.99:2380

#
进入卡住状态等待其他节点加入,这里需要三台etcd服务同时启动,如果只启动其中一台后,服务会卡在那里,直到集群中所有etcd节点都已启动,可忽略这个情况

可另外打开一个窗口查看etcd进程是否正常ps -ef | grep etcd

注意 他可能会报超时的错误   查看端口都正常运行

6, 把etcd相关证书文件、命令文件和服务管理文件全部拷贝到另外两个etcd集群节点

拷贝etcd 目录 下的所有文件(证书  配置文件 二进制文件)

拷贝服务管理文件

scp /usr/lib/systemd/system/etcd.service root@192.168.217.99:/usr/lib/systemd/system/

scp /usr/lib/systemd/system/etcd.service root@192.168.217.88:/usr/lib/systemd/system/

7, 在 node01 节点上操作(etcd02 )

vim /opt/etcd/cfg/etcd   写etcd02 的配置文件

启动etcd服务

8, 在 node02 节点上操作(etcd03 )

vim /opt/etcd/cfg/etcd 

9 ,查看etcd主从 状态

启动顺序: 应先启动etcd01   再启动etcd02 03

9.1 检查etcd群集状态
ETCDCTL_API=3   /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.217.66:2379,https://192.168.217.88:2379,https://192.168.217.99:2379" endpoint health --write-out=table

##########

------------------------------------------------------------------------------------------
--cert-file:识别HTTPS端使用SSL证书文件
--key-file:使用此SSL密钥文件标识HTTPS客户端
--ca-file:使用此CA证书验证启用https的服务器的证书
--endpoints:集群中以逗号分隔的机器地址列表
cluster-health:检查etcd集群的运行状况

9.2 更详细检查etcd群集状态
ETCDCTL_API=3 /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.217.66:2379,https://192.168.217.88:2379,https://192.168.217.99:2379" endpoint status --write-out=table


######
------------------------------------------------------------------------------------------
--cert-file:识别HTTPS端使用SSL证书文件
--key-file:使用此SSL密钥文件标识HTTPS客户端
--ca-file:使用此CA证书验证启用https的服务器的证书
--endpoints:集群中以逗号分隔的机器地址列表
cluster-health:检查etcd集群的运行状况

  • ENDPOINT: 表示etcd集群中每个成员的访问地址和端口。

  • ID: 是每个etcd节点在集群中的唯一标识符,通常是一个随机生成的字符串。

  • VERSION: 显示etcd服务器的版本号。

  • DB SIZE: 数据库的大小,这里以“20 kB”为例,表示当前etcd节点存储的数据量大小。

  • IS LEADER: 指示该节点是否为集群中的领导者(Leader)。在Raft共识算法中,集群中只有一个Leader负责处理所有写操作和协调集群状态。结果显示为truefalse

  • IS LEARNER: 表示该节点是否为学习者(Learner)节点,学习者节点接收复制的日志条目但不参与选举。结果显示为truefalse

  • RAFT TERM: Raft协议中的任期号(Term),用于选举领导和日志复制的逻辑时钟。每当选举出新的领导者时,任期号就会递增。

  • RAFT INDEX: 当前Raft日志条目的索引,表示了Raft日志的最新位置。

  • RAFT APPLIED INDEX: 已经被应用到状态机的日志条目索引,这个值应该总是小于等于RAFT INDEX,表示哪些日志已经被实际执行。

  • ERRORS: 如果在检查该节点状态时遇到任何错误,这一列将显示具体的错误信息。如果没有错误,则为空。

9.3  查看etcd集群成员列表
ETCDCTL_API=3 /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.217.66:2379,https://192.168.217.88:2379,https://192.168.217.99:2379" --write-out=table member list

五    部署 Master 组件

大体逻辑是  创建kubernetes工作目录
mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs}  将需要的文件都拖入

然后 分别执行4个脚本 开启   

apiserver 服务(    需要二进制文件、token、证书)

scheduler 服务
controller-manager 服务

kubectl工具

1,上传5个需要的脚本

上传 master.zip 和 k8s-cert.sh 到 /opt/k8s 目录中

解压 master.zip 压缩包  unzip master.zip

得到4个 启动脚本    以及生成证书的脚本(api server 需要)

2,创建kubernetes工作目录

mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs}

3,生成CA证书、相关组件的证书和私钥

创建用于生成CA证书、相关组件的证书和私钥的目录

运行脚本    生成CA证书、相关组件的证书和私钥

修改  这个生成证书的 脚本

启动脚本   生成证书  ./k8s-cert.sh 

复制CA证书、apiserver相关证书和私钥到 kubernetes工作目录的 ssl 子目录中

cp ca*pem apiserver*pem /opt/kubernetes/ssl/

4, 将 master组件的关键命令文件到 kubernetes工作目录的 bin 

#上传 kubernetes-server-linux-amd64.tar.gz 到 /opt/k8s/ 目录中,解压 kubernetes 压缩包
#下载地址:

ttps://github.com/kubernetes/kubernetes/blob/release-1.20/CHANGELOG/CHANGELOG-1.20.md
#注:打开链接你会发现里面有很多包,下载一个server包就够了,包含了Master和Worker Node二进制文件。

 解压kubernetes-server 包

查看解压后的 文件

复制master组件的关键命令文件到 kubernetes工作目录的 bin 子目录中

并 做软连接

5,  创建token 认证文件

创建 bootstrap toke长度n 认证文件,apiserver 启动时会调用,然后就相当于在集群内创建了一个这个用户,接下来就可以用 RBAC 给他授权

cd /opt/k8s/    vim token.sh

#获取随机数前16个字节内容,以十六进制格式输出,并删除其中空格
BOOTSTRAP_TOKEN=$(head -c 16 /dev/urandom | od -An -t x | tr -d ' ')
#生成 token.csv 文件,按照 Token序列号,用户名,UID,用户组 的格式生成
cat > /opt/kubernetes/cfg/token.csv <<EOF
${BOOTSTRAP_TOKEN},kubelet-bootstrap,10001,"system:kubelet-bootstrap"
EOF

脚本执行完毕后,会在 /opt/kubernetes/cfg/token.csv 路径下生成一个包含新Bootstrap Token的CSV文件。当 Kubernetes API Server 启动时,如果配置为读取此文件或目录下的token文件,它会自动识别并注册这些Token,使得集群内可以使用这个Token进行认证。之后,通过RBAC(Role-Based Access Control)系统,可以进一步为这个Token关联的用户或用户组分配具体的访问权限。

给脚本加权限   并执行  这就是token

6, 查看准备环境

4个启动 脚本

7, 开启 apiserver 服务

二进制文件、token、证书都准备好后,开启 apiserver 服务

./apiserver.sh 192.168.217.66 https://192.168.217.66:2379,https://192.168.217.88:2379,https://192.168.217.99:2379

检查进程是否启动成功

ps aux | grep kube-apiserver

netstat -natp | grep 6443   #安全端口6443用于接收HTTPS请求,用于基于Token文件或客户端证书等认证

8, 启动 scheduler 服务

vim scheduler.sh

启动脚本

查看是否启动成功

9, 启动 controller-manager 服务

vim controller-manager.sh 

启动脚本

查看是否启动成功

10,  生成kubectl连接集群的kubeconfig文件

vim admin.sh

启动脚本

11,通过kubectl工具查看当前集群组件状态

kubectl get cs

查看版本信息

kubectl version

六     部署 Worker Node 组件(在所有 node 节点上操作)

大体的思路就是 bin,cfg,ssl,logs 这四个文件夹内放入指定

通过这两个脚本启动组件  kubelet.sh、proxy.sh
 

1,创建kubernetes工作目录,上传两个脚本

解压压缩包 查看压缩包  获得两个启动脚本,并加权限

2,把 kubelet、kube-proxy 拷贝到 node 节点

在 master01 节点上操作

3, 生成node 节点的配置文件

3.1 具体步骤

在 master01 节点上操作

上传kubeconfig.sh文件到/opt/k8s/kubeconfig目录中

 #上传kubeconfig.sh文件到/opt/k8s/kubeconfig目录中,生成kubelet初次加入集群引导kubeconfig文件kube-proxy.kubeconfig文件
#kubeconfig 文件包含集群参数(CA 证书、API Server 地址),客户端参数(上面生成的证书和私钥),集群 context 上下文参数(集群名称、用户名)。Kubenetes 组件(如 kubelet、kube-proxy)通过启动时指定不同的 kubeconfig 文件可以切换到不同的集群,连接到 apiserver。

执行脚本

把配置文件 bootstrap.kubeconfig、kube-proxy.kubeconfig 拷贝到 node 节点

RBAC授权,使用户 kubelet-bootstrap 能够有权限发起 CSR 请求证书

kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap

###############
若执行失败,可先给kubectl绑定默认cluster-admin管理员集群角色,授权集群操作权限
kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous

3.2 具体解释

kubelet 采用 TLS Bootstrapping 机制自动完成到 kube-apiserver 的注册,在 node 节点量较大或者后期自动扩容时非常有用。
Master apiserver 启用 TLS 认证后,node 节点 kubelet 组件想要加入集群,必须使用CA签发的有效证书才能与 apiserver 通信,当 node 节点很多时,签署证书是一件很繁琐的事情。因此 Kubernetes 引入了 TLS bootstraping 机制来自动颁发客户端证书kubelet 会以一个低权限用户自动向 apiserver 申请证书,kubelet 的证书由 apiserver 动态签署。

kubelet 首次启动通过加载 bootstrap.kubeconfig 中的用户 Token 和 apiserver CA 证书发起首次 CSR 请求,这个 Token 被预先内置在 apiserver 节点的 token.csv 中,其身份为 kubelet-bootstrap 用户和 system:kubelet-bootstrap 用户组;想要首次 CSR 请求能成功(即不会被 apiserver 401 拒绝),则需要先创建一个 ClusterRoleBinding,将 kubelet-bootstrap 用户和 system:node-bootstrapper 内置 ClusterRole 绑定(通过 kubectl get clusterroles 可查询),使其能够发起 CSR 认证请求

TLS bootstrapping 时的证书实际是由 kube-controller-manager 组件来签署的,也就是说证书有效期是 kube-controller-manager 组件控制的;kube-controller-manager 组件提供了一个 --experimental-cluster-signing-duration 参数来设置签署的证书有效时间;默认为 8760h0m0s,将其改为 87600h0m0s,即 10 年后再进行 TLS bootstrapping 签署证书即可。

也就是说 kubelet 首次访问 API Server 时,是使用 token 做认证,通过后,Controller Manager 会为 kubelet 生成一个证书,以后的访问都是用证书做认证了。
 

4, 准备环境

准备两个启动脚本

准备 对应目录的文件

4,   启动  kubelet.sh 脚本   启动kublet 组件

在 node01 节点上操作

 查看kubelet.sh 脚本

启动kubelet 组件

5, 在 master01 节点上操作,通过 CSR 请求

在 master01 节点上操作

检查到 node01 节点的 kubelet 发起的 CSR 请求,Pending 表示等待集群给该节点签发证书

通过 CSR 请求

kubectl certificate approve 

# 后面跟node请求的那个很长的编号

再次查看  Approved,Issued 表示已授权 CSR 请求并签发证书

6, node节点   启动 proxy 组件

在 master01 节点上操作

查看节点,由于网络插件还没有部署,节点会没有准备就绪 NotReady

在 node01 节点上操作

加载 ip_vs 模块

for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done


--------------------------------------------------------
#
对于在 /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs 路径下,通过列出文件并使用 grep 命令筛选出以点号之前的部分(即模块名称)的每一个条目,执行以下操作:

打印(echo)出当前处理的模块名称。
使用 /sbin/modinfo 命令查询该模块的文件名(-F filename),此步骤用来检查模块信息是否存在且是否可以被正确识别。2>&1 是将错误输出重定向到标准输出,以便于忽略可能的错误信息不影响后续命令执行。
如果上一步骤成功(意味着模块信息存在且可识别),则使用 /sbin/modprobe 命令加载该内核模块。
简而言之,这个脚本会遍历指定目录下的 IPVS 相关内核模块,检查每个模块的有效性,然后尝试加载这些有效的内核模块。

启动proxy服务

node2 重复以上操作

七     部署 CNI 网络组件  之部署 flannel

1,环境准备

在 master01 节点上操作

两个node  都通过已授权 CSR 请求并签发证书

2,准备flannel 镜像

在 node01 节点上操作

准备flannel 镜像的压缩包

导入镜像

3, 准备 cni 的可执行应用

在 node01 节点上操作

创建指定目录    将cni 压缩包解压到  

看一下  全是绿色可执行文件

4,利用脚本部署 CNI 网络

在 master01 节点上操作

上传 kube-flannel.yml 文件到 /opt/k8s 目录中,部署 CNI 网络


 

执行部署的 yaml 文件

kubectl apply -f kube-flannel.yml 

5, 查看node 节点状态

在 master01 节点上操作

kubectl get pods -n kube-system

##########################
这个命令是用于在 Kubernetes 集群中查询指定命名空间 (kube-system) 内的所有 Pod 的状态

查看node 状态

6, 将node02 也加入网络

因为 k8s 自动修复的功能   所以只需要在node02  上拖入flannel 镜像,和cni 应用

node2  即会自动加入网络

在 node02 节点上操作

在 master01 节点上操作

八    部署 CNI 网络组件  之部署  Calico

备注: 此项操作与部署flannel 二选一 

这边不需要拖cni包,ymal 文件全给你配置好了,他会从镜像仓库上拉取,自动解压到/opt/cni/bin   变成一堆绿色的可执行文件 这边注意网络环境是否通畅,如有必要改一下dns

在 master01 节点上操作

1,上传 calico.yaml 文件到 /opt/k8s 目录中,部署 CNI 网络

#修改里面定义 Pod 的网络(CALICO_IPV4POOL_CIDR),需与前面 kube-controller-manager 配置文件指定的 cluster-cidr 网段一样

#Calico 默认使用的网段为 192.168.0.0/16

2,执行yaml 文件

kubectl apply -f calico.yaml

 3, 查看node 节点状态

此时有个为notready  因为88机器未做好cni组件

 将 node02 里  cni文件夹下的一堆可执行文件   拖到node01

注意!此处这些绿色可执行文件和flannel 模式下的  文件是不一样的

再次查看  网络已通

以上。一个简单架构的未禁止安装k8s 就做好了

由于篇幅有限,下一章将详细介绍部署master02 以及 nginx负载均衡

 九   二进制安装步骤总结

1, 环境部署

关闭防火墙 关闭selinux 关闭swap 根据规划设置主机名

做域名映射 调整内核参数 时间同步

2,node 节点 部署 docker引擎

3,部署 etcd 集群

大体步骤是 etcd 目录下(cfg bin ssl 三个子目录)

3.1 ssl 子目录准备

下载CFSSL 工具

用etcd-cert.sh脚本 生成CA证书、etcd 服务器证书以及私钥

4个.pem 结尾的 文件 放ssl

3.2 bin 子目录准备

下载 etcd 的安装包(etcd-v3.4.9-linux-amd64.tar.gz) 解压

将可执行文件 etcd etcdctl 移动到 bin

3.3 脚本启动一台etcd01

etcd.sh

3.4 做其他的etcd

拷贝 etcd 目录下(cfg bin ssl 三个子目录)

拷贝服务管理文件

改其他etcd机器的 etcd 目录下cfg子目录的配置文件

4,部署 Master 组件

大体步骤是 kubernetes目录 下 bin,cfg,ssl,logs 四个子目录

4.1 ssl 子目录准备

下载CFSSL 工具

用k8s-cert.sh 脚本 生成CA证书、apiserver相关证书和私钥

4个.pem 结尾的 文件 放ssl

4.2 bin 子目录准备

下载master的安装包( kubernetes-server-linux-amd64.tar.gz) 解压

将可执行文件 (kube-apiserver kubectl kube-controller-manager kube-scheduler)移动到 bin

4.3 cfg 目录准备

用token.sh 脚本 在/opt/kubernetes/cfg/token.csv 生成token 令牌

4.4 启动 apiserver 服务

用 apiserver.sh 脚本

4.5 启动 scheduler 服务

用scheduler.sh 脚本 (需要在脚本指定api server 的ip)

4.6 启动 controller-manager 服务

用controller-manager.sh 脚本 (需要在脚本指定api server 的ip)

4.7 启动 kubectl 工具

用 admin.sh 脚本 (需要在脚本指定api server 的ip)

5, 部署 Worker Node 集群

大体步骤是 kubernetes目录 下 bin,cfg,ssl,logs 四个子目录

5.1 bin 子目录 准备

将master的安装包( kubernetes-server-linux-amd64.tar.gz) 解压后的 可执行文件 kubelet kube-proxy 放入

5.2 cfg 子目录准备

在master机器 用kubeconfig.sh 脚本 生成生成kubelet初次加入集群需要的bootstrap.kubeconfig、kube-proxy.kubeconfig

把bootstrap.kubeconfig、kube-proxy.kubeconfig 放入

5.3 master 机器做RBAC授权

RBAC授权,使用户 kubelet-bootstrap 能够有权限发起 CSR 请求证书

5.4 启动 kubelet 服务

kubelet.sh 脚本

5.5 master通过 CSR 请求

因为启动了 kubelet 服务 所以会有来自node的请求

检查CSR 请求 (kubectl get csr)

并通过 CSR 请求 (kubectl certificate approve 请求编号)

5.6 启动 proxy 服务

加载 ip_vs 模块

proxy.sh 脚本 启动

6, 部署 flannel

6.1 node机器

载入 flannel 镜像

将cni 包加压到 /opt/cni/bin

6.2 master 机器

执行部署的 yaml 文件 kubectl apply -f kube-flannel.yml

7,部署 Calico

6.2 master 机器

(改ip)执行部署的 yaml 文件 kubectl apply -f calico.yaml

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1680731.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git项目管理——提交项目和版本回退(二)

个人名片&#xff1a; &#x1f393;作者简介&#xff1a;嵌入式领域优质创作者&#x1f310;个人主页&#xff1a;妄北y &#x1f4de;个人QQ&#xff1a;2061314755 &#x1f48c;个人邮箱&#xff1a;[mailto:2061314755qq.com] &#x1f4f1;个人微信&#xff1a;Vir2025WB…

嵌入式——C51版本Keil环境搭建

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 目标搭建流程下载与安装激活STC环境添加校验是否导入STC环境 目标 ● 了解C51版本Keil开发环境的概念和用途 ● 掌握C51版本Keil环…

PG Vacuum 空间管理工具与pg_freespacemap使用

1.什么是Vacuum&#xff1a; PG pageinspect使用与块空间清理学习-CSDN博客 之前说过PG块更新的特点:先删除后插入&#xff0c;但老元组并不会真正删除&#xff0c;只是把老元组标记为删除状态&#xff0c;这就导致了PG中会有大量的垃圾数据&#xff0c;update所造成的资源消…

LeetCode518:零钱兑换Ⅱ

题目描述 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带符号…

进程信号 signal

文章目录 信号基础信号的产生OS中的时间 信号的保存sigset_tsigprocmasksigpending 信号的捕捉用户态和内核态sigactionvolatile SIGCHLD 信号基础 生活中的信号 你在网上买了很多件商品&#xff0c;再等待不同商品快递的到来。但即便快递没有到来&#xff0c;你也知道快递来临…

Blog搭建:pycharm+虚拟环境+django

pycharm创建项目 在pycharm新建项目&#xff0c;选择Django 项目名称&#xff1a;自定义项目位置&#xff1a;自定义创建git&#xff1a;方便上传到github选择虚拟环境方式venvpython解释器位置&#xff0c;和版本&#xff0c;如果你没有下载他会跳转到不同版本的供你下载temp…

分布式计算、并行计算、网格计算、边缘计算

分布式计算 分布式计算是一种计算方法&#xff0c;它将一个大型的计算任务分解成多个子任务&#xff0c;并将这些子任务分布在网络上的多台计算机&#xff08;节点&#xff09;上同时执行。这些节点通过通信网络协同工作&#xff0c;共同完成任务。每个节点可以独立处理自己的…

Skywalking配置traceId

1.引言 1.1 SkyWalking概述 SkyWalking是一个开源的分布式系统观测平台&#xff0c;旨在解决微服务和云原生架构中常见的性能监控和故障排除问题。自2015年由Apache基金会孵化以来&#xff0c;SkyWalking已经成为全球范围内广泛使用的APM&#xff08;应用性能管理&#xff09…

括号生成[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 数字n代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;["((()))","(()())","(())(…

MATLAB车辆动力学建模 ——《控制系统现代开发技术》

引言 在上这门课之前&#xff0c;我已经用过CasADi 去做过最优化的相关实践&#xff0c;其中每一步迭代主要就是由&#xff1a;对象系统优化求解两部分组成的。这里我们重点介绍 “对象系统”如何去描述 &#xff0c;因为它是每一步迭代中重要的一环——“优化求解”会获得控制…

2024生日快乐祝福HTML源码

源码介绍 2024生日快乐祝福HTML源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面&#xff0c; 源码截图 源码下载 2024生日快乐祝福HTML源码

【C++】学习笔记——多态_1

文章目录 十二、继承8. 继承和组合 十三、多态1. 多态的概念2. 多态的定义和实现虚函数重写的两个特殊情况override 和 final 3. 多态的原理1. 虚函数表 未完待续 十二、继承 8. 继承和组合 我们已经知道了什么是继承&#xff0c;那组合又是什么&#xff1f;下面这种情况就是…

哈希表+DFS快速解决力扣129题:求根节点到叶节点数字之和

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航&#xff1a; LeetCode解锁100…

TypeScript高级类型 在鸿蒙中的使用 Partial、Required、Readonly、Pick、Record

我的工程代码在这里&#xff0c;持续更新中 欢迎交流&#xff0c;谢谢 https://github.com/MartinLi89/WanHarmony Partial <Type> 新定义 一个类型&#xff0c;将所有属性变为可选的类. class TextTS {a: string "1"b: string "2"c: string &…

(十一)Python基础练习题二(50道选择题)#Python

本文整理了Python基础知识相关的练习题&#xff0c;共50道&#xff0c;适用于刚入门初级Python想巩固基础的同学。来源&#xff1a;如荷学数据科学题库&#xff08;技术专项-Python一&#xff09;。序号之前的题请看往期文章。 51&#xff09; 52&#xff09; 53&#xff09; …

【数据结构】时间、空间复杂度实例分析

跌倒了&#xff0c;就重新站起来&#xff0c;继续向前走&#xff1b;傻坐在地上是没用的。&#x1f493;&#x1f493;&#x1f493; 目录 •✨说在前面 &#x1f34b;知识点一&#xff1a;算法的效率 • &#x1f330;1.斐波那契数列的第n项 • &#x1f330;2.算法的复杂度…

ChatGPT 4o 使用案例之一

2024年GPT迎来重大更新&#xff0c;OpenAI发布GPT-4o GPT-4o&#xff08;“o”代表“全能”&#xff09; 它可以接受任意组合的文本、音频和图像作为输入&#xff0c;并生成任意组合的文本、音频和图像输出。它可以在 232 毫秒内响应音频输入&#xff0c;平均为 320 毫秒&…

数学建模——建立数学模型(1)

前言 这个也是对《数学模型》&#xff08;姜启源第四版&#xff09;书内容的摘抄 建立数学模型 数学模型这个词汇现在越来越多地出现在现代入的 生产、工作和社会活动中&#xff0e;广大的科学技 术人员和应用数学工作者来说&#xff0c;建立数学模型是沟通摆在面前的实际问…

无人售货奶柜:掘金新零售蓝海,

无人售货奶柜&#xff1a;掘金新零售蓝海&#xff0c; 在日新月异的商业浪潮中&#xff0c;无人奶柜犹如一股清新的创业飓风&#xff0c;正以不可阻挡之势吸引着众多创业者的目光。这股新兴力量以其独到之处和庞大的市场蓝海&#xff0c;预示着一场关于健康、便捷消费方式的深…

荣耀MagicBook X 14 Pro锐龙版 2023 集显(FRI-H76)笔记本电脑原装出厂Windows11系统工厂模式安装包下载,带F10智能还原

恢复开箱状态预装OEM系统&#xff0c;适用型号&#xff1a;HONOR荣耀FRI-H76、FRI-H56 链接&#xff1a;https://pan.baidu.com/s/1Lcg45byotu5kDDSBs3FStA?pwdl30r 提取码&#xff1a;l30r 华为荣耀原装WIN11系统工厂安装包&#xff0c;含F10一键恢复功能、系统自带所有驱…