K8S -----二进制搭建 Kubernetes v1.20

目录

一、准备环境

1.1 修改主机名

1.2 关闭防火墙(三台一起,这里只展示master01)

1.3 在master添加hosts(依旧是三台一起)

1.4 调整内核参数并开启网桥模式

二、部署docker引擎

三、部署 etcd 集群 

1.在master01节点上操作

2.生成Etcd证书

1.创建目录

2.创建用于生成CA证书、etcd 服务器证书以及私钥的目录

3.拷贝服务端

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

3.在 node01 节点上操作

同理node2也是同样操作

来到master01上检查etcd群集状态

四、部署Master组件

1.在 master01 节点上操作

1.1创建kubernetes工作目录

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

1.3上传 kubernetes-server-linux-amd64.tar.gz 到 /opt/k8s/ 目录中,解压 kubernetes 压缩包 ​编辑

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

1.5 创建 bootstrap token 认证文件

1.6开启 apiserver 服务

​编辑

1.7启动 scheduler 服务

1.8启动 controller-manager 服务

1.9启动admin服务并生成kubectl连接集群的kubeconfig文件

五、部署 Worker Node 组

1.先在node01和node02上创建kubernetes工作目录

2.在 master01 节点上操作

2.1把配置文件 拷贝到 node 节点

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

4.在node01上操作

5.在master01上操作

6.在node01上操作


一、准备环境

1.1 修改主机名

hostnamectl set-hostname master01
su
hostnamectl set-hostname node01
su
hostnamectl set-hostname node02
su

Master01192.168.21.10
node01192.168.21.30
node02192.168.21.40

1.2 关闭防火墙(三台一起,这里只展示master01)

关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
#关闭selinux
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
关闭swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab 

1.3 在master添加hosts(依旧是三台一起)

vim /etc/hosts

#添加ip
192.168.21.10 master01
192.168.21.30 node01
192.168.21.40 node02

1.4 调整内核参数并开启网桥模式

#调整内核参数
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   刷新

#时间同步
yum install ntpdate -y
ntpdate time.windows.com

如果报错是软件版本的问题,或者dns原因这边建议修改dns都为114.114.114.114

二、部署docker引擎

//所有 node 节点部署docker引擎
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 集群 

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

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

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

1.在master01节点上操作

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
chmod +x /usr/local/bin/cfssl*

因为事先准备好了 我直接拉入

2.生成Etcd证书

1.创建目录
mkdir /opt/k8s
cd /opt/k8s/

#上传 etcd-cert.sh 和 etcd.sh 到 /opt/k8s/ 目录中
chmod +x etcd-cert.sh etcd.sh

2.创建用于生成CA证书、etcd 服务器证书以及私钥的目录
mkdir /opt/k8s/etcd-cert
mv etcd-cert.sh etcd-cert/
cd /opt/k8s/etcd-cert/
./etcd-cert.sh			#生成CA证书、etcd 服务器证书以及私钥

vim etcd-cert.sh

这边要注意两个问题一个是年份,一个是ip地址

3.拷贝服务端

上传 etcd-v3.4.9-linux-amd64.tar.gz 到 /opt/k8s 目录中,启动etcd服务

cd /opt/k8s/
拉入安装包
tar zxvf etcd-v3.4.9-linux-amd64.tar.gz
cd etcd-v3.4.9-linux-amd64/
#创建用于存放 etcd 配置文件,命令文件,证书的目录
mkdir -p /opt/etcd/{cfg,bin,ssl}
mv etcd etcdctl /opt/etcd/bin/
cp *.pem /opt/etcd/ssl/

ps -ef | grep etcd

4.把etcd相关证书文件、命令文件和服务管理文件全部拷贝到另外两个etcd集群节点
scp -r /opt/etcd/ root@192.168.21.30:/opt/
scp -r /opt/etcd/ root@192.168.21.40:/opt/
scp /usr/lib/systemd/system/etcd.service root@192.168.21.30:/usr/lib/systemd/system/
scp /usr/lib/systemd/system/etcd.service root@192.168.21.40:/usr/lib/systemd/system/

3.在 node01 节点上操作

vim /opt/etcd/cfg/etcd

#[Member]
ETCD_NAME="etcd02"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.21.30:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.21.30:2379"

#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.21.30:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.21.30:2379"
ETCD_INITIAL_CLUSTER="etcd01=https://192.168.21.10:2380,etcd02=https://192.168.21.30:2380,etcd03=https://192.168.21.40:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

启动etcd服务

systemctl start etcd
systemctl enable etcd     ##systemctl enable --now etcd

同理node2也是同样操作
vim /opt/etcd/cfg/etcd
#[Member]
ETCD_NAME="etcd03"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.21.40:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.21.40:2379"

#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.21.40:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.21.40:2379"
ETCD_INITIAL_CLUSTER="etcd01=https://192.168.21.10:2380,etcd02=https://192.168.21.30:2380,etcd03=https://192.168.21.40:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

来到master01上检查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.21.10:2379,https://192.168.21.30:2379,https://192.168.21.40:2379" endpoint status --write-out=table

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.21.30:2379,https://192.168.21.30:2379,https://192.168.21.40:2379" endpoint health --write-out=table

查看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.21.10:2379,https://192.168.21.30:2379,https://192.168.21.40:2379" --write-out=table member list

四、部署Master组件

1.在 master01 节点上操作
上传 master.zip 和 k8s-cert.sh 到 /opt/k8s 目录中,解压 master.zip 压缩包
cd /opt/k8s/
unzip master.zip
chmod +x *.sh

1.1创建kubernetes工作目录
mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs}

1.2 创建用于生成CA证书、相关组件的证书和私钥的目录
mkdir /opt/k8s/k8s-cert
cd k8s-cert
拉入事先准备好的脚本
chmod +x k8s-cert.sh

记得脚本把注释去了,并修改为自己的ip地址

vim k8s-cert

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

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

1.3上传 kubernetes-server-linux-amd64.tar.gz 到 /opt/k8s/ 目录中,解压 kubernetes 压缩包
 
1.4 复制master组件的关键命令文件到 kubernetes工作目录的 bin 子目录中
cd /opt/k8s/kubernetes/server/bin
cp kube-apiserver kubectl kube-controller-manager kube-scheduler /opt/kubernetes/bin/

1.5 创建 bootstrap token 认证文件
cd /opt/k8s/
vim token.sh
#!/bin/bash
#获取随机数前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

chmod +x token.sh
./token.sh

1.6开启 apiserver 服务
cd /opt/k8s/master

./apiserver.sh 192.168.21.10 https://192.168.21.10:2379,https://192.168.21.30:2379,https://192.168.10.40:2379
#检查进程是否启动成功
ps aux | grep kube-apiserver

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

1.7启动 scheduler 服务
cd /opt/k8s/
./scheduler.sh
ps aux | grep kube-scheduler

vim scheduler.sh

1.8启动 controller-manager 服务
./controller-manager.sh
ps aux | grep kube-controller-manager

1.9启动admin服务并生成kubectl连接集群的kubeconfig文件
./admin.sh

#通过kubectl工具查看当前集群组件状态
kubectl get cs
NAME                 STATUS    MESSAGE             ERROR
controller-manager   Healthy   ok                  
scheduler            Healthy   ok                  
etcd-2               Healthy   {"health":"true"}   
etcd-1               Healthy   {"health":"true"}   
etcd-0               Healthy   {"health":"true"}  

#查看版本信息
kubectl version

五、部署 Worker Node 组

1.先在node01和node02上创建kubernetes工作目录

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

2.在 master01 节点上操作

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

cd /opt/k8s/kubernetes/server/bin
scp kubelet kube-proxy root@node01:/opt/kubernetes/bin/
scp kubelet kube-proxy root@node02:/opt/kubernetes/bin/

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

mkdir /opt/k8s/kubeconfig

cd /opt/k8s/kubeconfig
chmod +x kubeconfig.sh
./kubeconfig.sh 192.168.21.10 /opt/k8s/k8s-cert/

2.1把配置文件 拷贝到 node 节点
scp bootstrap.kubeconfig kube-proxy.kubeconfig root@node01:/opt/kubernetes/cfg/
scp bootstrap.kubeconfig kube-proxy.kubeconfig root@node02:/opt/kubernetes/cfg/

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

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

4.在node01上操作

#启动 kubelet 服务
cd /opt/
./kubelet.sh 192.168.10.18
ps aux | grep kubelet

5.在master01上操作

在 master01 节点上操作,通过 CSR 请求
#检查到 node01 节点的 kubelet 发起的 CSR 请求,Pending 表示等待集群给该节点签发证书
kubectl get csr
NAME                                                   AGE  SIGNERNAME                                    REQUESTOR           CONDITION
node-csr-duiobEzQ0R93HsULoS9NT9JaQylMmid_nBF3Ei3NtFE   12s  kubernetes.io/kube-apiserver-client-kubelet   kubelet-bootstrap   Pending
#通过 CSR 请求
kubectl certificate approve node-csr-duiobEzQ0R93HsULoS9NT9JaQylMmid_nBF3Ei3NtFE

#Approved,Issued 表示已授权 CSR 请求并签发证书
kubectl get csr
NAME                                                   AGE  SIGNERNAME                                    REQUESTOR           CONDITION
node-csr-duiobEzQ0R93HsULoS9NT9JaQylMmid_nBF3Ei3NtFE   2m5s kubernetes.io/kube-apiserver-client-kubelet   kubelet-bootstrap   Approved,Issued

#查看节点,由于网络插件还没有部署,节点会没有准备就绪 NotReady
kubectl get node
NAME            STATUS     ROLES    AGE    VERSION
192.168.21.10   NotReady   <none>   108s   v1.20.11

6.在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

#启动proxy服务
cd /opt/
./proxy.sh 192.168.21.10
ps aux | grep kube-proxy

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

水电站机组油压自动化控制系统概述及优势介绍

一、系统背景 我国河流、湖泊分布广泛&#xff0c;落差巨大&#xff0c;蕴藏着丰富的资源优势&#xff0c;我国作为世界第二大能源消耗国&#xff0c;对于电力的需求是巨大的&#xff0c;水力发电具有高效、清洁、能量供给稳定充足的特点&#xff0c;因此&#xff0c;水电工程…

基础ArkTS组件:数据面板组件(图表),日期选择器组件(HarmonyOS学习第三课【3.5】)

tuoz数据面板组件 DataPanel 数据面板组件&#xff0c;用于将多个数据占比情况使用占比图进行展示。 说明 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口 DataPanel(options:{values: numbe…

19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)

基础知识要求&#xff1a; Java&#xff1a;方法、while循环、for循环 Python&#xff1a; 方法、while循环、for循环 题目&#xff1a; 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head […

深入了解 MyBatis 插件:定制化你的持久层框架

序言 MyBatis 是一个流行的 Java 持久层框架&#xff0c;它提供了简单而强大的数据库访问功能。然而&#xff0c;有时候我们需要在 MyBatis 中添加一些自定义的功能或行为&#xff0c;来满足特定的需求。这时&#xff0c;MyBatis 插件就发挥了重要作用。本文将深入探讨 MyBati…

【C++】深度解析:用 C++ 模拟实现 String 类,探索其底层实现细节

目录 了解string类 string的内存管理 VS下string的结构 ​g下string的结构 string的模拟实现 string的构造函数 浅拷贝 深拷贝 string的遍历 重载 [] 下标访问 迭代器访问 reserve resize 增删查改 push_back() append和 insert和erase find substr swap 流插入…

一个完美的回到顶部按钮

大家好,我是 Just,这里是「设计师工作日常」,今天给大家写了一个丝滑回到顶部的按钮,原生js实现的,兼容性所有主流浏览器,可在vue中使用,适用于网页、h5等。 最新实例通过公众号「设计师工作日常」发布。 目录 整体效果核心代码html 代码css 部分代码js 部分代码完整代…

网络网络层之(5)IPv6协议

网络网络层之(5)IPv6协议 Author: Once Day Date: 2024年5月12日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文档可参考专栏&#xff1a;通信网络技术_Once-Day…

啥都吃的打字练习软件TL(TypeLetters)

今天给大家安利一款啥都吃的打字练习软件——TL&#xff08;TypeLetters&#xff09;。 为什么说TL啥都吃呢&#xff1f;很简单&#xff0c;因为不管是科技的、还是时事的、或者潮流的、或者热点的&#xff0c;凡是英文的资料TL都能通通吃下去&#xff0c;所以说TL是来者不拒&…

QT C++ widget layout 嵌套 例子2

在上篇文章中描述了实中套虚&#xff08;用setLayout&#xff09;&#xff0c;虚中套实&#xff08;用addWidget&#xff09;。 本文再加1条&#xff0c;虚中套虚&#xff08;用addLayout&#xff09;。 所谓虚中套虚&#xff0c;是layout 套 layout 。 另外用循环代码生成从…

新书速览|MATLAB科技绘图与数据分析

提升你的数据洞察力&#xff0c;用于精确绘图和分析的高级MATLAB技术。 本书内容 《MATLAB科技绘图与数据分析》结合作者多年的数据分析与科研绘图经验&#xff0c;详细讲解MATLAB在科技图表制作与数据分析中的使用方法与技巧。全书分为3部分&#xff0c;共12章&#xff0c;第1…

【鸿蒙+全国产瑞芯微】智慧楼宇解决方案 | 如何实现多场景下智慧化、精细化楼宇管理?

随着数字化、智能化与工作生活的联结日渐紧密&#xff0c;聚焦人性化服务&#xff0c;以数字和科技匹配多重需求&#xff0c;加速商业楼宇智能化转型的脚步&#xff0c;逐步形成智慧楼宇产品矩阵。 方案亮点 01/数字标牌——形象展示 企业文化宣传、公告通知等 播放内容统一远…

blender 制作圆角立方体模型,倒角实现。cocos 使用。导出fbx

图片&#xff1a; 步骤&#xff1a; 1.首先创建一个立方体&#xff0c;这里可以使用默认的立方体。 2.在属性面板选择如“扳手”图标一样的修改器工具。 3.设置数量和段数实现圆角的圆滑效果&#xff0c;没有菱角。 保存导出相关的教程&#xff1a;

object.key()用法

object.key(obj) 一、概念&#xff1a;返回一个由一个给定对象的自身可枚举属性组成的数组。 二、用法&#xff1a; 1、参数为对象&#xff1a;则返回为 对象属性名组成的数组。 let obj {日期&#xff1a;date,姓名&#xff1a;userName,地址:address}console.log(Object.k…

使用Go和JavaScript爬取股吧动态信息的完整指南

引言 在现代金融生态系统中&#xff0c;信息流动的速度和效率对于市场的健康和投资者的成功至关重要。股市信息&#xff0c;特别是来自活跃交流平台如股吧的实时数据&#xff0c;为投资者提供了一个独特的视角&#xff0c;帮助他们洞察市场趋势和投资者情绪。这些信息不仅能够…

Bovine Serum Albumin ELISA kit(牛血清白蛋白)

牛血清白蛋白&#xff08;Bovine serum albumin, BSA&#xff09;是一种提取自牛的血清白蛋白。成熟的牛血清白蛋白含有583个氨基酸。像其他血清白蛋白一样&#xff0c;牛血清白蛋白在毛细血管内提供胶体渗透压&#xff0c;运输脂肪酸、胆红素、矿物质和激素&#xff0c;并在作…

Windows电脑使用Docker安装AList网盘神器并配置公网地址打造私人云存储空间

文章目录 前言1. 使用Docker本地部署Alist1.1 本地部署 Alist1.2 访问并设置Alist1.3 在管理界面添加存储 2. 安装cpolar内网穿透3. 固定Alist公网地址 前言 本文和大家分享如何在Windows系统使用Docker本地部署Alist全平台网盘神器&#xff0c;然后结合cpolar内网穿透工具实现…

论文阅读:The Unreasonable Ineffectiveness of the Deeper Layers 层剪枝与模型嫁接的“双生花”

作者实证研究了针对流行的开放式预训练 LLM 系列的简单层修剪策略&#xff0c;发现在不同的 QA 基准上&#xff0c;直到去掉一大部分&#xff08;最多一半&#xff09;层&#xff08;Transformer 架构&#xff09;后&#xff0c;性能的下降才会降到最低。为了修剪这些模型&…

自然资源-“十四五”规划引领,审批智慧化提升-值得学习

自然资源-“十四五”规划引领&#xff0c;审批智慧化提升-值得学习 2022年1月12日&#xff0c;国务院正式印发了《“十四五”数字经济发展规划》&#xff08;国发〔2021〕29号&#xff09;&#xff0c;从八个方面对“十四五”期间我国数字经济发展做出总体部署。其中第五点要求…

Q1季度电饭煲家电行业线上市场(京东天猫淘宝)销售数据排行榜

鲸参谋监测的2024年Q1季度线上电商平台&#xff08;天猫淘宝京东&#xff09;电饭煲家电销售数据已出炉&#xff01; 今年Q1季度&#xff0c;电饭煲销售成绩不如预期。根据鲸参谋数据显示&#xff0c;今年Q1季度在线上电商平台&#xff08;淘宝天猫京东&#xff09;电饭煲销量…

Qt-FFmpeg开发-打开摄像头直接显示YUYV422图像(12)

Qt-FFmpeg开发-打开摄像头直接显示YUYV422图像&#x1f4c0; 文章目录 Qt-FFmpeg开发-打开摄像头直接显示YUYV422图像&#x1f4c0;1、概述&#x1f4f8;2、实现效果&#x1f4bd;3、主要代码&#x1f50d;4、完整源代码&#x1f4d1; 更多精彩内容&#x1f449;个人内容分类汇…