3.2.k8s搭建-kubeadm

目录

一、虚拟机准备

二、所有节点环境准备

1.所有节点做hosts解析

2.所有节点重新命名

3.所有节点安装docker

4.所有节点为docker做linux内核转发

5.所有节点配置docker

6.所有节点关闭swap分区

7.所有节点验证网卡硬件编号是否冲突

8.所有节点配置允许iptables桥接流量

9.所有关闭防火墙和selinux

三、k8s1节点安装harbor镜像仓库

1.安装harbor

2.验证是否成功

四、kubeadm方式部署k8s

1.所有节点安装部署组件

2.初始化master节点(k8s1)

3.验证下master节点组件

4.worker节点加入k8s集群

5.此时查看节点

6.master节点部署网络组件

7.查看节点状态,是否从notready变为ready

8.小彩蛋,命令补全

五、报错解决

报错1


 k8s多种搭建方式汇总:k8s搭建-多种方式汇总-CSDN博客

一、虚拟机准备

搭建学习环境,使用4台虚拟机centos7系统;

主机名称ip地址资源备注
k8s110.128.175.2512核4gmaster节点,harbor镜像仓库
k8s210.128.173.942核4gworker节点
k8s310.128.175.1962核4gworker节点

二、所有节点环境准备

1.所有节点做hosts解析

cat >> /etc/hosts <<EOF
10.128.175.251 k8s1 harbor.oslee.com
10.128.173.94 k8s2
10.128.175.196 k8s3
EOF

2.所有节点重新命名

hostnamectl set-hostname k8s1

hostnamectl set-hostname k8s2

hostnamectl set-hostname k8s3

3.所有节点安装docker

[root@k8s1 data]# cd /data
[root@k8s1 data]# ls
docker.tar.gz
[root@k8s1 data]# tar -xvf docker.tar.gz

[root@k8s1 data]# ls
docker.tar.gz  download  install-docker.sh
[root@k8s1 data]# sh install-docker.sh install

4.所有节点为docker做linux内核转发

因为,docker底层使用了iptables,在容器与宿主机端口映射时,需要源地址转发,共享网络,所以,需要做内核转发配置;

echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf

sysctl -p

5.所有节点配置docker

参数说明

"registry-mirrors": ["https://embkz39z.mirror.aliyuncs.com"], # 阿里云镜像加速,可以自己申请;

"insecure-registries": ["http://harbor.oslee.com"], #允许拉取自建仓库harbor仓库的镜像,后面有部署harbor的教程;

"exec-opts": ["native.cgroupdriver=systemd"]   #kubeadm去寻找的cgroup默认是systemd,而docker不配置的话,默认是cgroupfs,不配置这个,部署k8s时会报错;

"data-root": "/data/lib/docker" # docker存储数据目录;

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://embkz39z.mirror.aliyuncs.com"],
  "insecure-registries": ["http://harbor.oslee.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "data-root": "/data/lib/docker"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker

6.所有节点关闭swap分区

[root@k8s1 data]# sed -ni '/^[^#]*swap/s@^@#@p' /etc/fstab
[root@k8s1 data]# free -h
              total        used        free      shared  buff/cache   available
Mem:            31G        357M         28G        9.1M        1.9G         30G
Swap:            0B          0B          0B

7.所有节点验证网卡硬件编号是否冲突

# 所有节点都执行,对比是否冲突

ifconfig eth0 |grep ether |awk '{print $2}'

cat /sys/class/dmi/id/product_uuid

8.所有节点配置允许iptables桥接流量

cat > /etc/modules-load.d/k8s.conf << EOF
br_netfilter
EOF

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
net.ipv4.ip_forward=1
EOF

sysctl --system

9.所有关闭防火墙和selinux

#1,关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

#2,关闭selinux

setenforce 0
sed -i '7c SELINUX=disabled' /etc/selinux/config

三、k8s1节点安装harbor镜像仓库

1.安装harbor

#1,创建harbor工作目录

[root@k8s1 harbor]# mkdir -pv /data/harbor
[root@k8s1 harbor]# cd /data/harbor

#2,上传harbor本地安装包;

[root@k8s1 harbor]# ls
harbor-offline-installer-v2.3.1.tgz

#3,解压harbor安装包

[root@k8s1 harbor]# tar -xvf harbor-offline-installer-v2.3.1.tgz 

#4,查看harbor的目录文件

[root@k8s1 harbor]# ll harbor
total 618124
-rw-r--r-- 1 root root      3361 Jul 19  2021 common.sh
-rw-r--r-- 1 root root 632922189 Jul 19  2021 harbor.v2.3.1.tar.gz
-rw-r--r-- 1 root root      7840 Jul 19  2021 harbor.yml.tmpl
-rwxr-xr-x 1 root root      2500 Jul 19  2021 install.sh
-rw-r--r-- 1 root root     11347 Jul 19  2021 LICENSE
-rwxr-xr-x 1 root root      1881 Jul 19  2021 prepare

#5,复制修改harbor的配置文件名称
[root@k8s1 harbor]# cp harbor/harbor.yml.tmpl harbor/harbor.yml

#6,修改配置文件信息

[root@harbor harbor]# vim harbor/harbor.yml

...

hostname: harbor.oslee.com

...

################################################

#注释掉下面的信息

# https related config
# https:
#  # https port for harbor, default is 443
#  port: 443
#  # The path of cert and key files for nginx
#  certificate: /your/certificate/path
#  private_key: /your/private/key/path

################################################

harbor_admin_password: harbor123

# 启动harbor脚本

[root@k8s1 harbor]# ./harbor/install.sh

2.验证是否成功

[root@k8s1 harbor]# pwd
/data/harbor/harbor
[root@k8s1 harbor]# ls
common  common.sh  docker-compose.yml  harbor.v2.3.1.tar.gz  harbor.yml  harbor.yml.tmpl  install.sh  LICENSE  prepare
[root@k8s1 harbor]# docker-compose ps

本地windows浏览器访问;

注意:先配置windows本地hosts;

10.128.175.251 harbor.oslee.com

四、kubeadm方式部署k8s

1.所有节点安装部署组件

# 本地离线安装

#1,上传并解压软件包

[root@k8s1 data]# tar -xvf kubeadm-kubelet-kubectl.tar.gz

#2,所有节点本地安装

yum -y localinstall kubeadm-kubelet-kubectl/*.rpm

#3,设置启动及开机自启动k8s

systemctl enable --now kubelet.service

#4,查看状态(此时启动失败,不用管,因为还没配置完成,配置完之后自动回启动)

systemctl status kubelet.service

2.初始化master节点(k8s1)

如果你的初始化失败,想要重新初始化:kubeadm reset -f

rm -rf /etc/kubernetes/manifests/kube-apiserver.yaml
rm -rf /etc/kubernetes/manifests/kube-controller-manager.yaml
rm -rf /etc/kubernetes/manifests/kube-scheduler.yaml
rm -rf /etc/kubernetes/manifests/etcd.yaml
rm -rf /var/lib/etcd/*

[root@k8s1 data]# kubeadm init --kubernetes-version=v1.23.17 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.100.0.0/16 --service-cidr=10.200.0.0/16 --service-dns-domain=oslee.com

参数释义:

--pod-network-cidr=10.100.0.0/16   #pod的网段

--service-cidr=10.200.0.0/16    #service资源的网段

--service-dns-domain=oslee.com  #service集群的dns解析名称

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 10.35.8.50:6443 --token 19g89m.8susoikd7tl2c2n8 \
        --discovery-token-ca-cert-hash sha256:a4342264f0142b43a1ac1f7a1b66aafd04f915194d5298eb96b7b2d5bc292687 

#拷贝整数到家目录下

[root@k8s1 data]# mkdir -p $HOME/.kube
[root@k8s1 data]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s1 data]# sudo chown $(id -u):$(id -g) $HOME/.kube/config

3.验证下master节点组件

#1,查看master组件

[root@k8s1 data]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE                         ERROR
scheduler            Healthy   ok                              
controller-manager   Healthy   ok                              
etcd-0               Healthy   {"health":"true","reason":""}

4.worker节点加入k8s集群

# 上面初始化master节点时生成的

kubeadm join 10.35.8.50:6443 --token 19g89m.8susoikd7tl2c2n8 \
        --discovery-token-ca-cert-hash sha256:a4342264f0142b43a1ac1f7a1b66aafd04f915194d5298eb96b7b2d5bc292687

# 如果过期了,可重新生成

kubeadm token create --print-join-command

5.此时查看节点

[root@k8s1 ~]# kubectl get nodes
NAME   STATUS     ROLES                  AGE     VERSION
k8s1   NotReady   control-plane,master   22m     v1.23.17
k8s2   NotReady   <none>                 4m10s   v1.23.17
k8s3   NotReady   <none>                 15s     v1.23.17

################

此时发现,状态显示“没准备好”,是因为未有CNI网络组件

6.master节点部署网络组件

#1,本地上传网络组建文件

[root@k8s1 data]# ls kube-flannel.yml 
kube-flannel.yml
[root@k8s231 ~]# vim kube-flannel.yml

  net-conf.json: |
    {
      "Network": "10.100.0.0/16",
      "Backend": {
        "Type": "vxlan"
      }
    }
 

#3,部署flannel组件

[root@k8s231 ~]# kubectl apply -f kube-flannel.yml

#4,查看flannel组件是否成功创建pod(每个节点是否都有)

[root@k8s231 ~]# kubectl get pods -A -o wide | grep flannel

7.查看节点状态,是否从notready变为ready

[root@k8s1 data]# watch -n 2 kubectl get nodes

NAME   STATUS   ROLES                  AGE     VERSION
k8s1   Ready    control-plane,master   7m41s   v1.23.17
k8s2   Ready    <none>                 4m33s   v1.23.17
k8s3   Ready    <none>                 3m13s   v1.23.17

8.小彩蛋,命令补全

yum -y install bash-completion
kubectl completion bash > ~/.kube/completion.bash.inc
echo "source '$HOME/.kube/completion.bash.inc'" >> $HOME/.bash_profile
source $HOME/.bash_profile

五、报错解决

报错1

[preflight] Running pre-flight checks
        [WARNING Hostname]: hostname "k8s2" could not be reached
        [WARNING Hostname]: hostname "k8s2": lookup k8s2 on 10.128.86.49:53: no such host
error execution phase preflight: [preflight] Some fatal errors occurred:
        [ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher

# 临时解决

echo "1">/proc/sys/net/bridge/bridge-nf-call-iptables
echo "1">/proc/sys/net/bridge/bridge-nf-call-ip6tables

# 永久解决

## 在/etc/sysctl.conf中添加: 
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

## 执行sysctl -p
如果出现 缺少文件的现象

sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: 没有那个文件或目录

则确认是否驱动加载完成

## 驱动加载
modprobe br_netfilter 
bridge

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

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

相关文章

【HTML】简单制作一个分形动画

目录 前言 开始 HTML部分 效果图 ​编辑​编辑​编辑​编辑总结 前言 无需多言&#xff0c;本文将详细介绍一段代码&#xff0c;具体内容如下&#xff1a; 开始 首先新建文件夹&#xff0c;创建一个文本文档&#xff0c;其中HTML的文件名改为[index.html]&a…

【原创教程】Smart200通过Modbus RTU实现V90位置控制的方法

1 绪论 1.1 本文的目的 S7-200Smart 可通过标准的 Modbus 功能块发送伺服驱动器的控制指令及读写驱动器的参数。本文详细叙述了 S7-200 SMART PLC 通过 Modbus RTU 通信连接 SINAMICS V90 实现内部位置的 MDI 功能。(MDI(Manual Data Input)称为设定值直接给定运行方式。…

岛屿个数c++

参考文章 岛屿个数1岛屿个数2 题目 输入样例&#xff1a; 2 5 5 01111 11001 10101 10001 11111 5 6 111111 100001 010101 100001 111111输出样例&#xff1a; 1 3样例解释 对于第一组数据&#xff0c;包含两个岛屿&#xff0c;下面用不同的数字进行了区分&#xff1a; 0…

计算机网络-TCP基础、三次挥手、四次握手过程

TCP基础 定义&#xff1a;TCP是面向连接的、可靠的、基于字节流的传输层通信协议。这意味着在发送数据之前&#xff0c;TCP需要建立连接&#xff0c;并且它能确保数据的可靠传输。此外&#xff0c;TCP将数据视为无结构的连续字节流。面向连接&#xff1a;TCP只能一对一进行连接…

Harmony与Android项目结构对比

主要文件对应 Android文件HarmonyOS文件清单文件AndroidManifest.xmlmodule.json5Activity/Fragmententryability下的ts文件XML布局pages下的ets文件resresourcesModule下的build.gradleModule下的build-profile.json5gradlehvigor根目录下的build.gradle根目录下的build-profi…

动态内存管理详解

一.为什么要存在动态内存分配&#xff1a; 下图是不同类型数据在内存中的分配&#xff1a; 上述的开辟空间的⽅式有两个特点&#xff1a; • 空间开辟⼤⼩是固定的。 • 数组在申明的时候&#xff0c;必须指定数组的⻓度&#xff0c;数组空间⼀旦确定了⼤⼩不能调整 但是对…

DeepStream做对象模糊的几种方法

有时候&#xff0c;我们需要对视频的敏感信息做模糊处理&#xff0c;比如模糊人脸&#xff0c;车牌。 有时候&#xff0c;也需要对整帧做模糊&#xff0c;或者遮挡。比如这个例子。 下面介绍几种模糊的办法。 1. 通过nvosd deepstream-test1是DeepStream最简单的一个例子&…

基于SpringBoot的“垃圾分类网站”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“垃圾分类网站”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 系统功能界面图 用户登录、用户注…

基于java+springboot+vue实现的人事管理系统(文末源码+Lw)23-242

摘 要 使用旧方法对人事管理系统的信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在人事管理系统的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。这次开发的人事管理…

时序预测 | Matlab实现SSA-ESN基于麻雀搜索算法(SSA)优化回声状态网络(ESN)的时间序列预测

时序预测 | Matlab实现SSA-ESN基于麻雀搜索算法(SSA)优化回声状态网络(ESN)的时间序列预测 目录 时序预测 | Matlab实现SSA-ESN基于麻雀搜索算法(SSA)优化回声状态网络(ESN)的时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现SSA-ESN基于麻雀搜索…

SQL 注入之 Windows/Docker 环境 SQLi-labs 靶场搭建!

在安全测试领域&#xff0c;SQL注入是一种常见的攻击方式&#xff0c;通过应用程序的输入执行恶意SQL查询&#xff0c;从而绕过认证和授权&#xff0c;可以窃取、篡改或破坏数据库中的数据。作为安全测试学习者&#xff0c;如果你要练习SQL注入&#xff0c;在未授权情况下直接去…

(2022级)成都工业学院数据库原理及应用实验一:CASE工具概念数据模型建模

写在前面 1、基于2022级软件工程/计算机科学与技术实验指导书 2、代码仅提供参考 3、如果代码不满足你的要求&#xff0c;请寻求其他的途径 运行环境 window11家庭版 PowerDesigner 16.1 实验要求 某医院一个门诊部排班管理子系统涉及如下信息&#xff1a; 若干科室&a…

传输大咖22|如何利用ProtoBuf实现高效的数据传输?

在今日信息技术日新月异的时代&#xff0c;数据传输的速度与安全性无疑成为了软件开发中的重中之重。无论是微服务架构下的服务间交流&#xff0c;还是客户端与服务器间的数据互动&#xff0c;寻求一种既高效又稳妥的数据传输方式已成为共识。尽管传统的数据格式&#xff0c;如…

论文复现 混淆矩阵

概念 参考视频&#xff1a; 使用pytorch和tensorflow计算分类模型的混淆矩阵_哔哩哔哩_bilibili 混淆矩阵是评判模型结果的一种指标&#xff0c;属于模型评估的一部分&#xff0c;常用于评判分类器模型的优劣。 准确率&#xff1a;所有预测正确的验证集样本个数/所有的验证集…

什么是SSL重签(reissue)?具体怎么做?

SSL重签&#xff08;reissue&#xff09;是指在SSL/TLS证书到期或需要更新时&#xff0c;证书持有者向证书颁发机构&#xff08;CA&#xff09;申请新的证书的过程。这通常是因为原有证书的有效期即将结束&#xff0c;或者证书因为某些原因&#xff08;如密钥泄露、证书损坏等&…

2024,嵌入式还适合入吗?为什么好多人劝退?

昨几天有个老铁找我&#xff0c;说买了我们的教程。 我有点奇怪&#xff0c;c语言教程我们都是送的。 聊了一会才知道&#xff0c;有人拿我送给粉丝的教程工具资料&#xff0c;到某宝上卖。 他就是买了资料&#xff0c;看我们的教程和经历&#xff0c;找到我的。 他说&#xff…

深入理解LRU缓存算法:原理、应用与优化

LRU算法&#xff08;Least Recently Used&#xff0c;最近最少使用算法&#xff09;的思想是基于"时间局部性"原理&#xff0c;即在一段时间内&#xff0c;被访问过的数据在未来仍然会被频繁访问的概率较高。 LRU 原理 LRU算法的主要思想是将最近被使用的数据保留在…

redis的三大模式的演化及集群模式思考和总结

redis的三大模式&#xff0c;也是循序渐进。 1、主从复制 比如一开始的读写分离的&#xff0c;主从复制。 一个master&#xff0c;多个slave。 master进行写和 增量同步&#xff0c;slave负责读&#xff0c;和接收增量同步的信息。 这样压力减轻。 2、哨兵模式 这个推出…

如何通过VPN访问内网?

VPN&#xff08;Virtual Private Network&#xff09;是一种通过公共网络建立私有网络连接的技术&#xff0c;可以在不同地点的网络中建立安全通道&#xff0c;实现远程访问内网资源的目的。本文将介绍如何通过VPN访问内网&#xff0c;并介绍一款名为“天联”的VPN服务。 什么是…

ASP.NET Core 标识(Identity)框架系列(一):如何使用 ASP.NET Core 标识(Identity)框架创建用户和角色?

前言 ASP.NET Core 内置的标识&#xff08;identity&#xff09;框架&#xff0c;采用的是 RBAC&#xff08;role-based access control&#xff0c;基于角色的访问控制&#xff09;策略&#xff0c;是一个用于管理用户身份验证、授权和安全性的框架。 它提供了一套工具和库&…