二进制部署kubernetes(二进制安装K8S(基于1.19.16版本))

2026-02-23 01:15:01 :0

二进制部署kubernetes(二进制安装K8S(基于1.19.16版本))

本篇文章给大家谈谈二进制部署kubernetes,以及二进制安装K8S(基于1.19.16版本)对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

本文目录

二进制安装K8S(基于1.19.16版本)

通过kubeadmin安装K8S集群可以做到快速部署,但是如果需要调整K8S各个组件及服务的安全配置,高可用模式,最好通过二进制模式进行K8S的安装
生产环境K8S Master节点最好在3个节点以上,且配置不低于4核16g
生产环境:确保Master高可用,启用安全访问机制

PS:

服务器节点只是起名字,与是否为k8s-master或k8s-node无关,可根据需要增加或删减测试用例的数量,如多台master主机只部署k8s-master组件。多台node主机只部署k8s-node组件
master1 192.168.100.100
node1 192.168.100.101
node2 192.168.100.102

注:本节中创建的证书为部署流程全过程证书,测试用例为openssl生成证书,cfssl生成证书需要参考cfssl生成k8s证书,并在对应配置文件的相关证书位置替换对应证书

在配置文件中需要在设置Master服务的全部域名和IP地址,包括:

参数解析

配置文件详解:

分发配置文件

配置文件详解:

配置详解

分发配置文件

分发配置文件

在三个kube-apiserver的前段部署HAProxy和keepalived,使用VIP(虚拟IP地址)192.168.100.200作为Master的唯一入口地址,供客户端访问
将HAProxy和keepalived均部署为至少有两个实例的高可用架构,以避免单点故障。
接下来在主机master(192.168.100.100)和主机node1(192.168.100.101)中部署
HAProxy负责将客户端请求转发到后端的3个kube-apiserver实例上,keepalived负责维护VIP的高可用

准备 HAProxy 的配置文件 haproxy.cfg

参数说明:

分发配置文件

在master(192.168.100.100)和node1(192.168.100.101)上使用docker部署HAProxy,并将配置文件挂载到容器的/usr/local/etc/haproxy下

访问192.168.100.100:8888/stats,192.168.100.101:8888/stats

keepalived用于维护VIP地址的高可用,同样在master和node1中部署

主节点配置文件

子节点配置文件

参数解析

主节点和子节点配置异同

健康检查脚本
keeplived需要持续监控HAProxy的运行状态,在某个节点运行不正常时转移到另外的节点上去
监控运行状态需要创建健康检查脚本,定期运行监控
脚本内容如下:

分发脚本

在master(192.168.100.100)和node1(192.168.100.101)上使用docker部署keeplived,并将配置文件挂载到容器的/container/service/keepalived/assets下,将脚本挂载到容器的/usr/bin下

检查ens33网卡是否存在keeplived VIP地址

检测keeplived是否进行转发

注:master集群已经配置完毕,后续需要在node中需要部署docker,kubelet,kube-proxy,且在加入k8s集群后,还需要部署CNI网络插件、DNS插件等
之前已经在master,node1,node2中部署了docker,接下来需要部署其他服务组件,本节部署kubelet组件

参数说明

参数说明

参数说明

当前显示所有node为NOT READY,需要部署完网络插件才可使用
为方便使用kubectl

k8s二进制安装api-server安装

开始是一个master,两个node节点,后面再扩。

使用centos7系统,前面文章已经安装过etcd。

***隐藏网址***

tar -zxf kubernetes-server-linux-amd64.tar.gz

cd kubernetes/server/bin/

cp kube-apiserver kubectl kube-controller-manager kube-scheduler /usr/local/bin

scp kubelet kube-proxy FNSHB109:/usr/local/bin

scp kubelet kube-proxy node1:/usr/local/bin

scp kubelet kube-proxy node2:/usr/local/bin

mkdir -p /etc/kubernetes

mkdir -p /etc/kubernetes/ssl

mkdir -p /var/log/kubernetes

***隐藏网址***

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-apiserver-csr.json | cfssljson -bare kube-apiserver
随机生成序列号,并定义token.csv

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 生成一个证书,以后的访问都是用证书做认证了。
cd /root/k8sbinary/TLS/k8s

cp /root/k8sbinary/TLS/k8s/token.csv /etc/kubernetes/ssl

cp /root/k8sbinary/TLS/k8s/ca*.pem /etc/kubernetes/ssl

cp /root/k8sbinary/TLS/k8s/kube-api*.pem /etc/kubernetes/ssl
scp ca*.pem node1:/etc/kubernetes/ssl

scp ca*.pem node2:/etc/kubernetes/ssl
scp /root/k8sbinary/TLS/k8s/token.csv node1:/etc/kubernetes/ssl

scp /root/k8sbinary/TLS/k8s/token.csv node1:/etc/kubernetes/ssl
systemctl daemon-reload

systemctl enable kube-apiserver

systemctl start kube-apiserver

systemctl status kube-apiserver

kubelet启动流程解析(一)启动方式及初始化解析

我们一般以 systemd 系统守护进程的方式启动 kubelet

我们看下 service 配置

其中启动部分执行了 /usr/local/bin/kubelet 二进制文件,启动的参数我们暂且不关注。

/usr/local/bin/kubelet 二进制文件是由 kubernetes 源码编译而来,接下来让我们从 kubelet 源码角度分析它的启动流程

启动主函数位于: kubernetes/cmd/kubelet/kubelet.go

接下来我们来分析 kubelet 初始化流程

源码位置: kubernetes/cmd/kubelet/app/server.go

Kubernetes 基于GlusterFS的动态存储管理StorageClass

最近由于需要部署有状态服务,没有云环境的支持,不能很好的通过cloud provider调用云磁盘EBS,所以在node节点部署了一套glusterFS分布式文件存储系统,用来提供非结构化数据存储,存储图片,大文件等等.

Kubernetes中使用GlusterFS作为持久化存储,要提供storageClass使用需要依赖Heketi工具。Heketi是一个具有resetful接口的glusterfs管理程序,作为kubernetes的Storage存储的external provisioner。 “Heketi提供了一个RESTful管理界面,可用于管理GlusterFS卷的生命周期。借助Heketi,像OpenStack Manila,Kubernetes和OpenShift这样的云服务可以动态地配置GlusterFS卷和任何支持的持久性类型。Heketi将自动确定整个集群的brick位置,确保将brick及其副本放置在不同的故障域中。Heketi还支持任意数量的GlusterFS集群,允许云服务提供网络文件存储,而不受限于单个GlusterFS集群。

Heketi是由golang编写,直接静态编译运行二进制即可也可以通过yum安装以及docker部署,主要会产生db文件存储cluster、node、device、volume等信息。

我们glusterFS部署在k8s集群外,所以heketi通过ssh管理glusterFS。需要创建免秘钥登陆到所有glusterFS节点。

***隐藏网址***

注意:

由于我们开启了heketi认证,所以每次执行heketi-cli操作时,都需要带上一堆的认证字段,比较麻烦,我在这里创建一个别名来避免相关操作:

注意: 如果heketi 运行账号为非root,需要保证有sudo权限。

机器只是作为gluster的运行单元,volume是基于device创建的。同时需要特别说明的是,目前heketi仅支持使用裸分区或裸磁盘(未格式化)添加为device,不支持文件系统。

以上ad-hoc命令均可通过配置文件创建然后导入:

创建:

这里仅仅是做一个测试,实际使用中,会由kubernetes自动创建pv.

创建一个大小为3G,副本为2的volume

添加storageclass-glusterfs.yaml文件,内容如下:

注意:

***隐藏网址***

我们可以看到RECLAIM POLICY: Retain ,经过测试

***隐藏网址***

企业级k8s集群部署

二进制包

注:推荐用二进制包部署Kubernetes集群,虽手动部署麻烦,但可以学习很多工作原理利于后期维护。

环境

可以使用VMware虚拟机,宿主机必须8G内存以上

• 服务器可以访问外网,有从网上拉取镜像的需求

单Master服务器规划:( 注:部署时候根据具体环境进行IP地址调整即可 )



这里使用3台组建集群,可容忍1台机器故障,当然,你也可以使用5台组建集群

etcd1: 192.168.3.110 etcd2: 192.168.3.112 etcd3: 192.168.3.113

cfssl是一个开源的证书管理工具,使用json文件生成证书,相比openssl更方便使用。

找任意一台服务器操作,这里用Master节点。

创建工作目录:

自签CA:

生成证书:

会生成ca.pem和ca-key.pem文件。

创建证书申请文件:

注:上述文件hosts字段中IP为所有etcd节点的集群内部通信IP,一个都不能少!为了方便后期扩容可以多写几个预留的IP。

生成证书:

会生成etcd.pem和etcd-key.pem文件。

***隐藏网址***

以下在节点1上操作,然后将文件拷贝到其他集群机器

把刚才生成的证书拷贝到配置文件中的路径:

注意修改节点2和节点3分别etcd.conf配置,按照下面提示的修改

启动各节点的etcd服务

如果输出上面信息,就说明集群部署成功。

如果有问题看日志:/var/log/message

docker二进制下载地址:

***隐藏网址***

注:使用yum安装也行

集群所有机器都安装docker

生成证书:

会生成ca.pem和ca-key.pem文件。

创建证书申请文件:

生成证书:

会生成k8s.pem和k8s-key.pem文件。

下载地址参考:

***隐藏网址***

***隐藏网址***

***隐藏网址***


把刚才生成的证书拷贝到配置文件中的路径:

TLS Bootstrapping 机制,对work-node加入进行自签证书用


创建上述配置文件中token文件:

token 可以自行生产,百度下怎么生产

kube-apiserver服务


生成kube-controller-manager证书:

生成kubeconfig文件(以下是shell命令,直接在终端执行):

生成kube-scheduler证书:

生成kubeconfig文件:


生成kubeconfig文件:

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


在所有worker node创建工作目录:

从master节点拷贝:

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

***隐藏网址***



确保kubelet启用CNI:




在Master执行:



应用场景:例如kubectl logs

在Master节点将Worker Node涉及文件拷贝到新节点192.168.3.112/113

注:这几个文件是证书申请审批后自动生成的,每个Node不同,必须删除

Node2(192.168.3.113 )节点同上。记得修改主机名!


***隐藏网址***

创建service account并绑定默认cluster-admin管理员集群角色:

使用输出的token登录Dashboard。

CoreDNS用于集群内部Service名称解析。

DNS解析测试:

这样 单Master集群就搭建完成了



K8s二进制安装之ETCD错误

etcd v3.4.9

使用member list查询etcd状态或者使用endpoint health查询群集状态时

#etcdctl member list

出现如下信息,切记不是报错信息,只是通过客户端访问的时候需要带上证书访问

{"level":"warn","ts":"2021-02-23T02:42:32.148-0500","caller":"clientv3/retry_interceptor.go:62","msg":"retrying of unary invoker failed","target":"endpoint://client-633d3464-2a3d-432c-a269-01eb26d31ba0/127.0.0.1:2379","attempt":0,"error":"rpc error: code = DeadlineExceeded desc = latest balancer error: all SubConns are in TransientFailure, latest connection error: connection error: desc = \"transport: Error while dialing dial tcp 127.0.0.1:2379: connect: connection refused\""}

Error: context deadline exceeded

#etcdctl endpoint health

{"level":"warn","ts":"2021-02-23T02:42:32.148-0500","caller":"clientv3/retry_interceptor.go:62","msg":"retrying of unary invoker failed","target":"endpoint://client-633d3464-2a3d-432c-a269-01eb26d31ba0/127.0.0.1:2379","attempt":0,"error":"rpc error: code = DeadlineExceeded desc = latest balancer error: all SubConns are in TransientFailure, latest connection error: connection error: desc = \"transport: Error while dialing dial tcp 127.0.0.1:2379: connect: connection refused\""}

Error: context deadline exceeded
正确的访问方法:

#etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem \

***隐藏网址***

结果:

***隐藏网址***

***隐藏网址***

***隐藏网址***

OK,关于二进制部署kubernetes和二进制安装K8S(基于1.19.16版本)的内容到此结束了,希望对大家有所帮助。

二进制部署kubernetes(二进制安装K8S(基于1.19.16版本))

本文编辑:admin

更多文章:


维热纳尔密码翻译器(请问有谁知道古代密码学的发展过程)

维热纳尔密码翻译器(请问有谁知道古代密码学的发展过程)

今天给各位分享请问有谁知道古代密码学的发展过程的知识,其中也会对请问有谁知道古代密码学的发展过程进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录请问有谁知道古代密码学的发展过程密码解密主要是用运用什么原理维热纳

2026年7月10日 23:15

手机老是出现failed(华为手机errconnectfailed)

手机老是出现failed(华为手机errconnectfailed)

“手机老是出现failed”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看手机老是出现failed(华为手机errconnectfailed)!本文目录华为手机errconnectfailed苹果手机为什么总出现失败怎么办啊

2025年12月31日 05:30

快递公司网站设计(中通快递logo的设计理念是什么)

快递公司网站设计(中通快递logo的设计理念是什么)

今天给各位分享中通快递logo的设计理念是什么的知识,其中也会对中通快递logo的设计理念是什么进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录中通快递logo的设计理念是什么联邦快递网站的功能和特点物流公司网

2025年8月28日 15:45

mathematica10下载(mathematica免费下载地址)

mathematica10下载(mathematica免费下载地址)

大家好,今天小编来为大家解答以下的问题,关于mathematica10下载,mathematica免费下载地址这个很多人还不知道,现在让我们一起来看看吧!本文目录mathematica免费下载地址mathematica下载mathemati

2026年1月12日 23:00

catchphrase的意思(catchphrase是什么意思)

catchphrase的意思(catchphrase是什么意思)

大家好,今天小编来为大家解答以下的问题,关于catchphrase的意思,catchphrase是什么意思这个很多人还不知道,现在让我们一起来看看吧!本文目录catchphrase是什么意思phrase是什么意思catchphrase是什么

2025年7月19日 18:45

server作主语(英语you must set two server name values怎么翻译)

server作主语(英语you must set two server name values怎么翻译)

大家好,关于server作主语很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于英语you must set two server name values怎么翻译的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决

2026年2月25日 04:00

c语言求最大公约数和最小公倍数辗转相除法(c语言求最大公约数和最小公倍数)

c语言求最大公约数和最小公倍数辗转相除法(c语言求最大公约数和最小公倍数)

各位老铁们好,相信很多人对c语言求最大公约数和最小公倍数辗转相除法都不是特别的了解,因此呢,今天就来为大家分享下关于c语言求最大公约数和最小公倍数辗转相除法以及c语言求最大公约数和最小公倍数的问题知识,还望可以帮助大家,解决大家的一些困惑,

2025年6月24日 13:30

表单大师下载表单大师app下载(眉山市幼儿报名登记表怎么下载下来)

表单大师下载表单大师app下载(眉山市幼儿报名登记表怎么下载下来)

各位老铁们,大家好,今天由我来为大家分享表单大师下载表单大师app下载,以及眉山市幼儿报名登记表怎么下载下来的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

2025年7月1日 03:15

webservice访问地址(浏览器中怎么访问WSDL文件我知道访问java的webservice为:http://localhost:8888/服务名/方法名WSDL)

webservice访问地址(浏览器中怎么访问WSDL文件我知道访问java的webservice为:http://localhost:8888/服务名/方法名WSDL)

大家好,webservice访问地址相信很多的网友都不是很明白,包括浏览器中怎么访问WSDL文件我知道访问java的webservice为:http://localhost:8888/服务名/方法名WSDL也是一样,不过没有关系,接下来就来

2026年5月7日 20:30

count函数怎么用来统计单元格数量(EXCEL中如何统计此列有数字的单元格个数)

count函数怎么用来统计单元格数量(EXCEL中如何统计此列有数字的单元格个数)

本篇文章给大家谈谈count函数怎么用来统计单元格数量,以及EXCEL中如何统计此列有数字的单元格个数对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔

2025年9月23日 17:15

eclipse jdk编译版本(JDK7搭配什么版本的eclipse若是jdk 1.7的话该用Eclipse的哪个版本)

eclipse jdk编译版本(JDK7搭配什么版本的eclipse若是jdk 1.7的话该用Eclipse的哪个版本)

今天给各位分享JDK7搭配什么版本的eclipse若是jdk 1.7的话该用Eclipse的哪个版本的知识,其中也会对JDK7搭配什么版本的eclipse若是jdk 1.7的话该用Eclipse的哪个版本进行解释,如果能碰巧解决你现在面临的

2026年1月15日 13:30

奔驰e300可以插u盘听歌吗(奔驰E300怎么插U盘)

奔驰e300可以插u盘听歌吗(奔驰E300怎么插U盘)

今天给各位分享奔驰E300怎么插U盘的知识,其中也会对奔驰E300怎么插U盘进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录奔驰E300怎么插U盘奔驰e300如何插U盘听歌2011奔驰e300车上有插u盘的地方

2025年12月11日 03:45

模板制作检验批多少米一张(3000多米的围墙,每100米做一个检验批具体怎么做)

模板制作检验批多少米一张(3000多米的围墙,每100米做一个检验批具体怎么做)

大家好,关于模板制作检验批多少米一张很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于3000多米的围墙,每100米做一个检验批具体怎么做的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站

2026年9月17日 02:30

easyuidatagrid 获取选中行数据到详情页(easyui datagrid 怎样获取点击行的数据)

easyuidatagrid 获取选中行数据到详情页(easyui datagrid 怎样获取点击行的数据)

大家好,如果您还对easyuidatagrid 获取选中行数据到详情页不太了解,没有关系,今天就由本站为大家分享easyuidatagrid 获取选中行数据到详情页的知识,包括easyui datagrid 怎样获取点击行的数据的问题都会给

2025年6月21日 20:00

img格式打开(win7电脑如何打开img文件win7系统打开img文件的方法)

img格式打开(win7电脑如何打开img文件win7系统打开img文件的方法)

本篇文章给大家谈谈img格式打开,以及win7电脑如何打开img文件win7系统打开img文件的方法对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录win7电脑如何打开img文件win7系统打开img文件的方法img用什么软件

2025年9月24日 08:30

befarform是什么意思(be far form中的form什么意思 说详细些)

befarform是什么意思(be far form中的form什么意思 说详细些)

其实befarform是什么意思的问题并不复杂,但是又很多的朋友都不太了解be far form中的form什么意思 说详细些,因此呢,今天小编就来为大家分享befarform是什么意思的一些知识,希望可以帮助到大家,下面我们一起来看看这个

2025年12月14日 23:15

小时代2免费观看(小时代2电影的剧情简介谁知道)

小时代2免费观看(小时代2电影的剧情简介谁知道)

本篇文章给大家谈谈小时代2免费观看,以及小时代2电影的剧情简介谁知道对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录小时代2电影的剧情简介谁

2025年6月8日 05:45

js禁止页面前进和后退(禁止浏览器页面的前进和后退的方式)

js禁止页面前进和后退(禁止浏览器页面的前进和后退的方式)

今天给各位分享禁止浏览器页面的前进和后退的方式的知识,其中也会对禁止浏览器页面的前进和后退的方式进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录禁止浏览器页面的前进和后退的方式用js如何控制 html5 vid

2025年10月26日 14:15

xml文件和db文件的区别(db文件是什么文件啊)

xml文件和db文件的区别(db文件是什么文件啊)

“xml文件和db文件的区别”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看xml文件和db文件的区别(db文件是什么文件啊)!本文目录db文件是什么文件啊db文件是什么格式文件类型有那些db文件是什么文件啊.db是date

2026年7月9日 17:15

两函数相加定义域怎么求(两函数相加 定义区怎么求啊拜托了各位 谢谢)

两函数相加定义域怎么求(两函数相加 定义区怎么求啊拜托了各位 谢谢)

各位老铁们好,相信很多人对两函数相加定义域怎么求都不是特别的了解,因此呢,今天就来为大家分享下关于两函数相加定义域怎么求以及两函数相加 定义区怎么求啊拜托了各位 谢谢的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目

2026年9月20日 15:30

近期文章

ilitate(imitate意思是)
2026-09-25 23:30:01
本站热文

electronics软件(labcenter electronics是什么软件)
2025-05-22 23:45:02 浏览:134
博客是微博吗(博客是微博吗)
2025-05-22 22:45:01 浏览:111
diversity and distribution(悬赏英语短文)
2025-05-23 16:15:02 浏览:107
ios软件开发前景(iOS就业前景怎么样)
2025-05-22 23:00:01 浏览:102
next month(有The next month这个单词吗,和 next month有什么区别)
2025-05-23 02:30:01 浏览:102
patron(patron是什么意思)
2025-05-23 10:30:02 浏览:95
标签列表

热门搜索