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

简介: k8s 二进制安装 详细安装步骤(二)

续:k8s 二进制安装 详细安装步骤(一):https://developer.aliyun.com/article/1525912

五    部署 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

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
人工智能 运维 Kubernetes
2025 超详细!Lens Kubernetes IDE 多平台下载安装与集群管理教程
Lens 是一款企业级 Kubernetes 可视化操作平台,2025版实现了三大技术革新:AI智能运维(异常检测准确率98.7%)、多云联邦管理(支持50+集群)和实时3D拓扑展示。本文介绍其安装环境、配置流程、核心功能及高阶技巧,帮助用户快速上手并解决常见问题。适用于 Windows、macOS 和 Ubuntu 系统,需满足最低配置要求并前置依赖组件如 kubectl 和 Helm。通过 Global Cluster Hub 实现多集群管理,AI辅助故障诊断提升运维效率,自定义监控看板和插件生态扩展提供更多功能。
|
Kubernetes 应用服务中间件 nginx
二进制安装Kubernetes(k8s)v1.32.0
本指南提供了一个详细的步骤,用于在Linux系统上通过二进制文件安装Kubernetes(k8s)v1.32.0,支持IPv4+IPv6双栈。具体步骤包括环境准备、系统配置、组件安装和配置等。
4714 11
|
Kubernetes Ubuntu Docker
从0开始搞K8S:使用Ubuntu进行安装(环境安装)
通过上述步骤,你已经在Ubuntu上成功搭建了一个基本的Kubernetes单节点集群。这只是开始,Kubernetes的世界广阔且深邃,接下来你可以尝试部署应用、了解Kubernetes的高级概念如Services、Deployments、Ingress等,以及探索如何利用Helm等工具进行应用管理,逐步提升你的Kubernetes技能树。记住,实践是最好的老师,不断实验与学习,你将逐渐掌握这一强大的容器编排技术。
2469 1
|
Kubernetes Linux 开发工具
centos7通过kubeadm安装k8s 1.27.1版本
centos7通过kubeadm安装k8s 1.27.1版本
|
Kubernetes Docker 容器
rancher docker k8s安装(二)
rancher docker k8s安装(二)
362 1
|
Kubernetes Ubuntu Linux
我应该如何安装Kubernetes
我应该如何安装Kubernetes
|
Kubernetes 网络协议 安全
[kubernetes]二进制方式部署单机k8s-v1.30.5
[kubernetes]二进制方式部署单机k8s-v1.30.5
|
5月前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
508 1
|
5月前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
349 89
|
10月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
630 9

推荐镜像

更多