【云原生】Kubeadm搭建K8S

news2024/10/5 17:27:04

一、部署Kubernetes

实验环境

服务器主机名IP地址主要组件
k8s集群master01 + etcd01master01192.168.10.100kube-apiserver kube-controller-manager kube-schedular etcd
k8s集群node01 + etcd02node01192.168.10.101kubelet kube-proxy docker flannel
k8s集群node02 + etcd03node02192.168.10.102kubelet kube-proxy docker flannel

1.1、操作系统初始化配置

1.1.1 设置主机名

[root@localhost ~]#hostnamectl set-hostname master01
[root@localhost ~]#bash
[root@localhost ~]#hostnamectl set-hostname node01
[root@localhost ~]#bash
[root@localhost ~]#hostnamectl set-hostname node02
[root@localhost ~]#bash

1.1.2 关闭防火墙

#所有节点,关闭防火墙规则,
systemctl stop firewalld
systemctl disable firewalld
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

1.1.3 关闭核心防护

##所有节点关闭核心防护
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config

1.1.4 关闭swap

swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab

1.1.5 添加主机映射

cat >> /etc/hosts << EOF
192.168.10.100 master01
192.168.10.102 node01
192.168.10.103 node02
EOF

cat /etc/hosts

1.1.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

1.1.7 时间同步

##三台机器同时进行时间同步
yum install ntpdate -y
ntpdate time.windows.com

进行时间同步

1.2、所有 node 节点部署docker引擎

1.2.1 安装依赖包

yum install -y yum-utils device-mapper-persistent-data lvm2

1.2.2 安装阿里云镜像源

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

1.2.3 安装docker

yum install -y docker-ce docker-ce-cli containerd.io

1.2.4 开启docker服务并设置开机自启、查看状态

systemctl start docker.service
systemctl enable docker.service
systemctl status docker.service

1.2.5 查看版本

docker -v

1.2.6 添加镜像加速器配置

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://5nbz4xnp.mirror.aliyuncs.com"]
}
EOF

systemctl daemon-reload
systemctl restart docker

1.3、部署 etcd 集群

在master01节点上操作

1.3.1 准备cfssl证书生成工具

wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -O /usr/local/bin/cfssl --no-check-certificate
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -O /usr/local/bin/cfssljson --no-check-certificate
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -O /usr/local/bin/cfssl-certinfo --no-check-certificate

chmod +x /usr/local/bin/cfssl*

给cfssl证书添加执行权限

chmod +x /usr/local/bin/cfssl*

1.3.2 生成Etcd证书

1.3.2.1 创建etcd证书目录
mkdir /opt/k8s
cd /opt/k8s/

1.3.2.2 上传etcd的两个脚本
etcd-cert.sh  etcd.sh    #这需要上传下面两个文件,上传之后需要在脚本里面修改一下IP地址
[root@master k8s]#vim etcd-cert.sh 
将大概79行开始的hosts改为自己的ip,不修改的话生成的证书效果没用!!!

chmod +x etcd-cert.sh etcd.sh   ##给两个脚本添加执行权限

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

ls

1.3.2.4 上传 etcd-v3.4.9-压缩包 到 /opt/k8s 目录中,启动etcd服务
[root@master01 etcd-cert]#cd /opt/k8s/
[root@master01 k8s]#ls
etcd-cert  etcd.sh
[root@master01 k8s]#rz -E
rz waiting to receive.
[root@master01 k8s]#ls
etcd-cert  etcd.sh  etcd-v3.4.9-linux-amd64.tar.gz
[root@master01 k8s]#tar xf etcd-v3.4.9-linux-amd64.tar.gz 
[root@master01 k8s]#ls 
etcd-cert  etcd.sh  etcd-v3.4.9-linux-amd64  etcd-v3.4.9-linux-amd64.tar.gz
[root@master01 k8s]#ls etcd-v3.4.9-linux-amd64
Documentation  etcd  etcdctl  README-etcdctl.md  README.md  READMEv2-etcdctl.md

1.3.2.5 创建用于存放 etcd 配置文件,命令文件,证书的目录
mkdir -p /opt/etcd/{cfg,bin,ssl}

cd /opt/k8s/etcd-v3.4.9-linux-amd64/
mv etcd etcdctl /opt/etcd/bin/
cp /opt/k8s/etcd-cert/*.pem /opt/etcd/ssl/

cd /opt/k8s/
./etcd.sh etcd01 192.168.10.80 etcd02=https://192.168.10.18:2380,etcd03=https://192.168.10.19:2380
##进入卡住状态等待其他节点加入,这里需要三台etcd服务同时启动,如果只启动其中一台后,服务会卡在那里,直到集群中所有etcd节点都已启动,可忽略这个情况。

##在开一个窗口查看
ps -ef | grep etcd

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

1.4、部署node节点的etcd集群

1.4.1 在 node01 节点上操作

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

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

1.4.2 启动etcd服务

systemctl start etcd.service    #启动etcd服务
systemctl enable etcd.service   #设置开机自启
systemctl status etcd           #查看服务状态

1.4.3 在node02节点操作

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

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

1.4.4 启动etcd服务

systemctl start etcd.service    #启动etcd服务
systemctl enable etcd.service   #设置开机自启
systemctl status etcd           #查看服务状态

再次查看master01节点上的etcd服务的状态

1.4.5 检查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.10.100:2379,https://192.168.10.102:2379,https://192.168.10.103:2379" endpoint health --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.10.100:2379,https://192.168.10.102:2379,https://192.168.10.103:2379" endpoint status --write-out=table

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

1.4.6 查看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.10.100:2379,https://192.168.10.102:2379,https://192.168.10.103:2379"  --write-out=table member list
---------------------------------------------------------------------------------------------cert-file:识别HTTPS端使用SSL证书文件
--key-file:使用此SSL密钥文件标识HTTPS客户端
--ca-file:使用此CA证书验证启用https的服务器的证书
--endpoints:集群中以逗号分隔的机器地址列表
member list  查看列表

1.5、部署Master 组件

master组件签发证书

在 master01 节点上操作

1.5.1 上传 master.zip  到 /opt/k8s 目录中,并解压 

cd /opt/k8s/

master.zip   k8s-cert.sh

unzip master.zip
chmod +x *.sh

1.5.2 创建kubernetes工作目录

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

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

[root@master01 k8s]#mkdir /opt/k8s/k8s-cert
[root@master01 k8s]#mv /opt/k8s/k8s-cert.sh /opt/k8s/k8s-cert
[root@master01 k8s]#cd /opt/k8s/k8s-cert/
[root@master01 k8s-cert]#ls
k8s-cert.sh
[root@master01 k8s-cert]#vim k8s-cert.sh 
[root@master01 k8s-cert]#./k8s-cert.sh

 

pwd
ll *.pem

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

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

1.5.4.1 上传 kubernetes-server 到 /opt/k8s/ 目录中,解压 kubernetes 压缩包
下载地址:https://github.com/kubernetes/kubernetes/blob/release-1.20/CHANGELOG/CHANGELOG-1.20.md
#注:打开链接你会发现里面有很多包,下载一个server包就够了,包含了Master和Worker Node二进制文件。
[root@master01 k8s-cert]#cd /opt/k8s/
[root@master01 k8s]#rz -E
rz waiting to receive.
[root@master01 k8s]#ls
admin.sh               etcd-cert                etcd-v3.4.9-linux-amd64.tar.gz        master.zip
apiserver.sh           etcd.sh                  k8s-cert                              scheduler.sh
controller-manager.sh  etcd-v3.4.9-linux-amd64  kubernetes-server-linux-amd64.tar.gz
[root@master01 k8s]#
[root@master01 k8s]#tar xf kubernetes-server-linux-amd64.tar.gz 
[root@master01 k8s]#ls
admin.sh               etcd-cert                etcd-v3.4.9-linux-amd64.tar.gz  kubernetes-server-linux-amd64.tar.gz
apiserver.sh           etcd.sh                  k8s-cert                        master.zip
controller-manager.sh  etcd-v3.4.9-linux-amd64  kubernetes                      scheduler.sh

1.5.4.2 复制master组件的关键命令文件到 kubernetes工作目录的 bin 子目录中
[root@master01 k8s]#cd /opt/k8s/kubernetes/server/bin
[root@master01 bin]#cp kube-apiserver kubectl kube-controller-manager kube-scheduler /opt/kubernetes/bin/
[root@master01 bin]#ln -s /opt/kubernetes/bin/* /usr/local/bin/

1.5.4.3 创建 bootstrap token 认证文件,apiserver 启动时会调用,接下来就可以用 RBAC 给他授权
[root@master01 bin]#cd /opt/k8s/
[root@master01 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
cat /opt/kubernetes/cfg/token.csv

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

[root@master01 k8s]#cd /opt/k8s/
[root@master01 k8s]#./apiserver.sh 192.168.10.100 https://192.168.10.100:2379,https://192.168.10.102:2379,https://192.168.10.103:2379
#安全端口6443用于接收HTTPS请求,用于基于Token文件或客户端证书等认证

[root@master01 k8s]#ps aux | grep kube-apiserver
[root@master01 k8s]#netstat -natp | grep 6443

1.5.6 启动 scheduler 服务

cd /opt/k8s/
ls
vim scheduler.sh

vim scheduler.sh

#生成kubeconfig文件                                            ##45
KUBE_CONFIG="/opt/kubernetes/cfg/kube-scheduler.kubeconfig"    ##46
KUBE_APISERVER="https://192.168.10.100:6443"                   ##47

[root@master01 k8s]#./scheduler.sh
[root@master01 k8s]#ps aux | grep kube-scheduler

1.5.7 启动 controller-manager 服务

pwd
/opt/k8s

ls
vim controller-manager.sh 

#生成kubeconfig文件
KUBE_CONFIG="/opt/kubernetes/cfg/kube-controller-manager.kubeconfig"
KUBE_APISERVER="https://192.168.10.100:6443"

[root@master01 k8s]#./controller-manager.sh
[root@master01 k8s]#ps aux | grep kube-controller-manager

1.5.8 生成kubectl连接集群的kubeconfig文件

pwd
/opt/k8s

ls
vim admin.sh

[root@master01 k8s]#vim admin.sh

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

[root@master01 k8s]#pwd
/opt/k8s
[root@master01 k8s]#kubectl get cs

1.5.9 查看版本信息

[root@master01 k8s]#kubectl version

1.6、 部署 Worker Node 组件

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

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

相关文章

win server服务器 关闭危险端口 135,137,138,139,445的方法

通过防火墙来控制 打开控制面板 选择检查防火墙状态 选择高级设置 选择入站规则&#xff0c;再新建规则 选择端口&#xff0c;下一步 选择端口应用于啥协议&#xff0c;再指定端口&#xff0c;再下一步 选择阻止连接&#xff0c;下一步 下一步 给规则别名一下&#xff0c;方便…

【谷粒商城】04.快速开发

1.克隆代码 https://gitee.com/renrenio DELLLJL MINGW64 ~/Desktop $ git clone https://gitee.com/renrenio/renren-fast.git Cloning into renren-fast... remote: Enumerating objects: 1965, done. remote: Counting objects: 100% (1965/1965), done. remote: Compress…

齐护K210系列教程(十八)_识别条码

识别条码 联系我们 将识别到的条形码内容打印输出并显示 测试条形码可以到如下网站得到&#xff1a;http://www.jsons.cn/barcode/ 4&#xff0c;课程资源 课程程序下载&#xff1a;【18条形码】 联系我们 扫码 或者点这里加群了解更多&#xff01; Created by qdprobot

2024年3月 青少年等级考试机器人理论真题四级

202403 青少年等级考试机器人理论真题四级 第 1 题 Arduino UNO/Nano主控板&#xff0c;通过按键开关切换高低电平&#xff0c;电路搭设如下&#xff0c;该电路属于&#xff1f;&#xff08; &#xff09; A&#xff1a;外部上拉电阻电路 B&#xff1a;外部下拉电阻电路 C&a…

Docker 入门篇(八)-- Docker Compose 使用指南

一、Docker Compose 简介 Docker Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose&#xff0c;您可以使用 YML 文件来配置应用程序需要的所有服务。然后&#xff0c;使用一个命令&#xff0c;就可以从 YML 文件配置中创建并启动所有服务。 Compose 使用…

Android:资源的管理,Glide图片加载框架的使用

目录 一&#xff0c;Android资源分类 1.使用res目录下的资源 res目录下资源的使用&#xff1a; 2.使用assets目录下的资源 assets目录下的资源的使用&#xff1a; 二&#xff0c;glide图片加载框架 1.glide简介 2.下载和设置 3.基本用法 4.占位符&#xff08;Placehold…

Linux信号概念,信号的产生异常情况,信号的保存,信号的处理,捕捉信号,可重入函数,volatile,SIGCHLD信号

文章目录 信号的概念谈谈硬件 信号的产生1. 键盘组合键2. kill命令3. 系统调用异常4. 由硬件异常产生信号5. 由软件异常产生信号Core Dump 信号的保存sigset_t信号集操作函数sigprocmasksigpending 信号的处理重谈地址空间 捕捉信号1. 内核如何实现信号的捕捉2. sigaction问题一…

重磅 | 国家标准《网络安全技术 零信任参考体系架构》正式发布

根据2024年4月25日国家市场监督管理总局、国家标准化管理委员会发布的中华人民共和国国家标准公告&#xff08;2024年第6号&#xff09;&#xff0c;其中易安联参编的国家标准GB/T 43696-2024《网络安全技术 零信任参考体系架构》正式发布&#xff0c;并于2024年11月1日正式施行…

基于Python实现蔬菜水果识别

蔬菜水果识别在农业生产、食品加工和市场销售等领域具有重要意义。随着计算机视觉和机器学习技术的发展,利用图像识别技术实现蔬菜水果的自动化识别已成为可能。 目录 引言研究背景问题陈述研究目标文献综述蔬菜水果识别的相关研究概述基于计算机视觉和机器学习的图像识别方法…

SCQA表达模型:让你的表达更具吸引力(2)

一、引言 站在巨人的肩膀上&#xff0c;思维模型是前人智慧结晶&#xff0c;当我们面对相似挑战时&#xff0c;借鉴与模仿这些模型&#xff0c;往往能为我们带来意想不到的结果。 在信息爆炸的时代&#xff0c;如何高效、准确地传达信息成为了人们关注的焦点。SCQA表达模型作为…

企业网站HTTP网站业务被慢连接攻击了该怎么办

企业的网站建设中遇到网络攻击会出现哪些问题&#xff1f;一些中小型企业对于网络安全的认知不足&#xff0c;网站建设种类众多&#xff0c;电子商城类&#xff0c;小型游戏&#xff0c;支付类型&#xff0c;H5页面的网站&#xff0c;开发等等&#xff0c;如遇见网络攻击造成的…

LOTO示波器软件PC缓存(波形录制与回放)功能

当打开PC缓存功能后, 软件将采用先进先出的原则排队对示波器采集的每一帧数据, 进行帧缓存。 当发现屏幕中有感兴趣的波形掠过时, 鼠标点击软件的(暂停)按钮, 可以选择回看某一帧的波形。一帧数据的量 是 当前用户选择时基档位缓冲区总数据大小。不同时基档位缓冲区大小不同&am…

002.反应式编程的必要性

在实际应用程序中&#xff0c;您可以在许多情况下发现可能的时变变量—例如&#xff0c;GPS位置、温度、鼠标坐标&#xff0c;甚至文本框的内容。所有这些都有一个随时间变化的值应用程序会发生反应&#xff0c;因此是时变的。还有一点值得一提时间本身就是一个时变;它的值一直…

python爬虫(五)之新出行汽车爬虫

python爬虫&#xff08;五&#xff09;之新出行汽车爬虫 接完最后一单&#xff0c;终于肝完了最后一个python爬虫——新出行爬虫&#xff0c;将https://www.xchuxing.com网站上所有的汽车爬虫全部抓取下来。 import requests import json import csv from lxml import etree …

Secnet-智能路由系统 actpt_5g.data 信息泄露漏洞复现

0x01 产品简介 Secnet安网智能AC管理系统是广州安网通信技术有限公司&#xff08;简称“安网通信”&#xff09;的无线AP管理系统。 0x02 漏洞概述 Secnet-智能路由系统 actpt_5g.data 接口存在信息泄露漏洞&#xff0c;未经身份验证的远程攻击者可以利用此漏洞获取系统账户…

AI模型部署实战:利用OpenCV的CUDA模块加速视觉模型部署流程

本文首发于公众号【DeepDriving】&#xff0c;欢迎关注。 一. 前言 我在之前的文章《AI模型部署实战&#xff1a;利用CV-CUDA加速视觉模型部署流程》中介绍了如何使用CV-CUDA库来加速视觉模型部署的流程&#xff0c;但是CV-CUDA对系统版本和CUDA版本的要求比较高&#xff0c;在…

政安晨:【Keras机器学习示例演绎】(四十五)—— 使用变换器进行命名实体识别

目录 简介 安装 HuggingFace 的开源数据集库 将 NER 模型类构建为 keras.Model 子类 从数据集库加载 CoNLL 2003 数据集并进行处理 制作 NER 标签查找表 编译和拟合模型 指标计算 结论 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏…

PyTorch进行CIFAR-10图像分类

本节将通过一个实战案例来详细介绍如何使用PyTorch进行深度学习模型的开发。我们将使用CIFAR-10图像数据集来训练一个卷积神经网络。 神经网络训练的一般步骤如图5-3所示。 &#xff08;1&#xff09;加载数据集&#xff0c;并做预处理。 &#xff08;2&#xff09;预处理后的…

使用PageHelper分页插件,发现获取到的total总记录数量不对,无法获取到正确的total数量

目录 1.1、错误描述 1.2、解决方案 1.1、错误描述 周一在工作中&#xff0c;写了一个列表分页的接口&#xff0c;其中使用的是PageHelper分页依赖&#xff0c;原本想着挺简单的&#xff0c;也就是使用PageHelper.startPage(pageNum, pageSize);方法就可以了&#xff0c;代码…

讨论:WGS84与CGCS2000的坐标系怎么互转

前言&#xff1a; 今天我们要讨论一个问题&#xff1a;WGS84与CGCS2000的坐标系怎么互转&#xff1f; 对于有一定基础的朋友应该知道&#xff0c;WGS84和CGCS2000属于不同的椭球&#xff0c;如果进行严密的数学转换&#xff0c;是需要建立参数模型之后&#xff0c;再进行转换&…