k8s集群安装(kubeadm)

k8s集群安装(kubeadm)

  • 1、环境准备(master和node节点都执行)
    • 1.1、替换yum源
    • 1.2、关闭selinux
    • 1.3、永久关闭防火墙
    • 1.4、永久关闭swap
    • 1.5、修改主机名添加host
    • 1.6、时间同步
    • 1.7、将桥接的IPv4流量传递到iptables的链
    • 1.8、docker安装
    • 1.9、设置k8s yum源
    • 2.0、安装kubelet,kubeadm,kubectl
  • 2、master节点(master节点执行)
  • 3、加入node节点(具体在哪个节点执行,下面备注有)
  • 4、创建nginx当测试
  • 5、在任意节点使用kubectl

1、环境准备(master和node节点都执行)

这是一个新建的虚拟机环境,需要做以下操作。linux是centos7.6

1.1、替换yum源

把默认的yum源更换成淘宝的yum源

#删除之前的仓库地址
mkdir /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
#查看平台yum仓库
yum repolist

在这里插入图片描述

#下载淘宝的repo镜像仓库地址
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

如果你修改了 任何 repo 文件,记得清除 YUM 的缓存并重新构建缓存

sudo yum clean all && sudo yum makecache
#或者执行
yum clean all && yum makecache && yum repolist

1.2、关闭selinux

#查看selinux状态
sestatus 

永久关闭selinux,修改配置文件/etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled,使用重启命令sudo reboot 配置生效‌

vi /etc/selinux/config

临时关闭SELinux‌,但此方法在重启后会是失效。

sudo setenforce 0

1.3、永久关闭防火墙

#查看防火墙状态
sudo systemctl status firewalld
#停止firewalld服务 && #禁止firewalld服务在系统启动时自动启动
sudo systemctl stop firewalld && sudo systemctl disable firewalld 

1.4、永久关闭swap

查看是否关闭swap, 如下,执行free -h 如果Swap行不为0,说明swap是开着的,为0是关着的。

[root@bogon ~]# free -htotal        used        free      shared  buff/cache   available
Mem:           1.8G        126M        1.5G        9.5M        161M        1.5G
Swap:          2.0G          0B        2.0G

永久关闭swap:
编辑 /etc/fstab文件,找到带有swap行,然后注释该行,重启机器后生效。

vi /etc/fstab

在这里插入图片描述
临时关闭swap,重启失效:

swapoff -a  

1.5、修改主机名添加host

#查看主机的hostname
hostname
#修改hostname为k8s-master1
sudo hostnamectl set-hostname k8s-master1

添加host, 记得后面把node节点的host也配置上。

vi /etc/hosts
192.168.8.132   k8s-master1
192.168.8.133   k8s-node1
192.168.8.134   k8s-node2

1.6、时间同步

sudo yum -y install ntpdate

1.7、将桥接的IPv4流量传递到iptables的链

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

1.8、docker安装

配置docker的yum源

yum install wget -y 
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -P /etc/yum.repos.d/
#清空yum缓存
yum clean all && yum makecache && yum repolist
#查看docker可以安装的版本
yum list docker-ce --showduplicates | sort -
#安装docker
yum install docker-ce-23.0.6 -y
# 启动docker	
systemctl start docker
# 开机自启	
systemctl enable docker	
# 查看启动状态
systemctl status docker	
#查看版本
docker -v
#重启
systemctl daemon-reload && systemctl restart docker

配置docker国内仓库地址
顺便加上"exec-opts": [“native.cgroupdriver=systemd”],防止后面搭建k8s集群报错

vi /etc/docker/daemon.json
{"registry-mirrors": ["https://docker.m.daocloud.io","https://noohub.ru","https://huecker.io","https://dockerhub.timeweb.cloud","https://docker.rainbond.cc"],"exec-opts": ["native.cgroupdriver=systemd"]
}

1.9、设置k8s yum源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

#更新缓存

yum clean all && yum makecache && yum repolist

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 Kubernetes源设为阿里
gpgcheck=0:表示对从这个源下载的rpm包不进行校验
repo_gpgcheck=0:某些安全性配置文件会在 /etc/yum.conf 内全面启用 repo_gpgcheck,以便能检验软件库的中继数据的加密签署
如果gpgcheck设为1,会进行校验,就会报错如下,所以这里设为0

2.0、安装kubelet,kubeadm,kubectl

yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
systemctl enable kubelet

2、master节点(master节点执行)

#查看k8s版本
kubeadm version
#查看初始化需要哪些镜像
kubeadm config images list
#查看kubelet状态
systemctl status kubelet

可以先通过kubeadm config images pull手动在各个节点上拉取所k8s需要的docker镜像,master节点初始化或者node节点加入集群时,会用到这些镜像

如果不先执行kubeadm config images pull拉取镜像,其实在master节点执行kubeadm init 或者node节点执行 kubeadm join命令时,也会先拉取镜像。
本人没有提前拉取镜像,都是在master节点kubeadm init 和node节点 kubeadm join时,自动拉的镜像。

注意 : apiserver-advertise-address指的是master的主机IP

kubeadm init --kubernetes-version=v1.23.6 \
--apiserver-advertise-address=192.168.8.132 \
--image-repository=registry.aliyuncs.com/google_containers \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16

初始化遇到错误,排查错误。
在这里插入图片描述
用命令journalctl -xefu kubelet查看错误日志

journalctl -xefu kubelet

在这里插入图片描述
上面错误是因为kubelet的cgroup和docker的不一致所导致的,“kubelet cgroup驱动为systemd,而docker的为cgroupfs”,解决方式修改docker的cgroup为systemd。(环境准备时已经加上了)

{"registry-mirrors": ["https://docker.m.daocloud.io","https://noohub.ru","https://huecker.io","https://dockerhub.timeweb.cloud","https://docker.rainbond.cc"],"exec-opts": ["native.cgroupdriver=systemd"]
}

然后重启kubelet

systemctl restart kubelet
systemctl status kubelet
journalctl -xefu kubelet

再次查看,发现报没认证信息,不用管,
在这里插入图片描述
重新重置下,重新init

kubeadm resetkubeadm init --kubernetes-version=v1.23.6 \
--apiserver-advertise-address=192.168.8.132 \
--image-repository=registry.aliyuncs.com/google_containers \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16

在这里插入图片描述
执行下面三条命令。

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

3、加入node节点(具体在哪个节点执行,下面备注有)

查看token,node加入集群需要该token。
TTL表示token过期时间,如果过期了,使用create重新创建下token就行。
(master节点执行)

#如果查不出来,表示token过期,需要重新创建。
kubeadm token list
#重新创建token
kubeadm token create
[root@k8s-master1 ~] kubeadm token list
TOKEN                     TTL         EXPIRES                USAGES                   DESCRIPTION                                                EXTRA GROUPS
u3ht6s.l91gbx6rkqrkkktj   23h         2024-11-10T08:04:30Z   authentication,signing   <none>                                                     system:bootstrappers:kubeadm:default-node-token

用openssl生成sha值
(master节点执行)

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

生成hash 格式:f0e9a247c9382fd88327335d616725d59f37f02941676ff029c413611f8112df

(node节点执行)
加入集群命令(在node节点执行)
记得hash 后需要手动加上sha256

kubeadm join 192.168.8.132:6443 --token y2fexv.1wtmar0g1kg42yyw \--discovery-token-ca-cert-hash sha256:f0e9a247c9382fd88327335d616725d59f37f02941676ff029c413611f8112df

查看k8s各个节点状态,发现节点都是nodeready状态,各个组件状态正常。

(master节点执行)

#查看节点状态
kubectl get node
#查看各个组件状态,比如etcd,scheduler,controller-manager
kubectl get cs
#查看各个pod状态,发现crons没起来,可能是因为网络插件还没装.
kubectl get pod -n kube-system

安装网络插件
(master节点执行)

curl https://docs.projectcalico.org/manifests/calico.yaml -O#修改calico.yaml中的CALICO_IPV4POOL_CIDR(默认是注释的),注意要配置为k8s集群的pod网段。#查看网络需要下载的镜像
grep image calico.yaml
#修改网络下载镜像的默认地址为空,则默认使用docker的仓库地址
sed -i 's#docker.io/##g' calico.yaml

启动网络插件:
(master节点执行)

kubectl apply -f calico.yaml

然后继续查看网络的pod是否起来了
(master节点执行)

kubectl get pod -n kube-system

如果pod一直起不来,则使用describe 命令查看日志状态。
(master节点执行)

kubectl describe pod pod名称 -n kube-system

如果报错日志是镜像拉不下来,则手动去master和node节点都拉下镜像
(master和node节点执行)

docker pull calico/kube-controllers:v3.25.0
docker pull calico/cni:v3.25.0
docker pull calico/node:v3.25.0

然后发现网络插件都启动正常,节点也都是ready状态,此时就搭建集群成功了,如果需要加入其他node节点,重复上面操作即可。

4、创建nginx当测试

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort

查看放开的端口:

[root@k8s-master1 opt]# kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP        28h
nginx        NodePort    10.102.104.249   <none>        80:30940/TCP   6m10s

通master或者node节点的ip+端口访问即可:

http://192.168.8.132:30940/
http://192.168.8.133:30940/

5、在任意节点使用kubectl

master节点执行,拷贝到需要kubectl命令的节点

scp /etc/kubernetes/admin.conf root@k8s-node1:/etc/kubernetes

对应的node节点执行

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Matlab建立随机森林

综述 除了神经网络模型以外&#xff0c;树模型及基于树的集成学习模型是较为常用的效果较好的预测模型。我们以下构建一个随机森林模型。 随机森林是一种集成学习方法&#xff0c;通过构建多个决策树并结合其预测结果来提高模型的准确性和稳定性。在MATLAB中&#xff0c;可以…

Wireshark

目录 解题思路 题目设计原理 总结 解题思路 首先下载文件&#xff0c;用 wireshark 打开一头雾水。 但是看看题目的提示&#xff0c;说管理员的密码就是 flag 的内容&#xff0c;我们可以知道&#xff0c;关键词估计是密码&#xff0c;passwd、password、pwd之类的。 所以我…

FreeRTOS学习13——任务相关API函数

任务相关API函数 任务相关API函数任务相关API函数介绍任务相关 API 函数详解函数 uxTaskPriorityGet()函数 vTaskPrioritySet()函数 uxTaskGetSystemState()函数 vTaskGetInfo()函数 xTaskGetApplicationTaskTag()函数 xTaskGetCurrentHandle()函数 xTaskGetHandle()函数 xTask…

使用kalibr_calibration标定相机(realsense)和imu(h7min)

vslam-evaluation/VINS/Installation documentation/4.IMU和相机联合标定kalibr_calibration.md at master DroidAITech/vslam-evaluation GitHub 目录 1.kalibr安装 1.1安装依赖项 1.2创建工作空间 1.3下载kalibr并编译 1.4设置环境变量 2.准备标定板 3.配置驱动和打…

[Docker#8] 容器配置 | Mysql | Redis | C++ | 资源控制 | 命令对比

目录 一&#xff1a;Mysql 容器化安装 二&#xff1a;Redis 容器化安装 Redis 简介 Redis 容器创建 三&#xff1a;C容器制作 四&#xff1a;容器资源更新 常见问题 一&#xff1a;Mysql 容器化安装 进入 mysql 的镜像网站&#xff0c;查找 mysql 的镜像 mysql docker…

1小时构建Vue3知识体系之vue的生命周期函数

本文转载自&#xff1a;https://fangcaicoding.cn/course/12/63 大家好&#xff01;我是方才&#xff0c;目前是8人后端研发团队的负责人&#xff0c;拥有6年后端经验&3年团队管理经验。 系统学习践行者&#xff01;近期在系统化输出前端入门相关技术文章&#xff0c;期望能…

数据结构-集合

一.集合的表示 一个重要的操作是查某个元素属于哪个集合&#xff0c;另一个操作是合并操作 从这个树的节点去找树根也就是从下往上找,要把树并起来只需把两个根并在一起就可以了 不存在已知一个节点去找孩子节点&#xff0c;根重要的是已知一个节点找它的父亲节点,与之前的二…

unity基础,点乘叉乘。

简单记录下点乘叉乘&#xff0c;要不每次用完就忘&#xff0c;忘了又查。 using System.Collections; using System.Collections.Generic; using UnityEngine;public class TestCrossDot : MonoBehaviour {/// <summary>/// 原点/// </summary>public Transform t…

springboot 之 整合springdoc2.6 (swagger 3)

版本 springboot 3.3.5 jdk 17 springdoc 2.6.0 依赖pom <dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.6.0</version> </dependency>注解对比…

数据结构与算法-前缀和数组

前缀和问题 什么是前缀和? 对于一个一般数组 nums,如果我们需要知道 S1 nums[0] nums[1]的结果&#xff0c; S2 nums[0] nums[1] nums[2] … 计算公式相当于: S2 S1 nums[2] … Sn Sn-1 nums[n]; 所谓前缀和&#xff1a;用来记录数组前项和的一个新数组&#xff0c;提…

R语言机器学习与临床预测模型77--机器学习预测常用R语言包

R小盐准备介绍R语言机器学习与预测模型的学习笔记 你想要的R语言学习资料都在这里&#xff0c; 快来收藏关注【科研私家菜】 01 预测模型常用R包 常见回归分析包: rpart 包含有分类回归树的方法; earth 包可以实现多元自适应样条回归; mgev包含广义加性模型回归; Rweka 包中的M…

Elasticsearch可视化工具Elasticvue插件用法

目录 1.打开浏览器扩展程序(示例Edge浏览器) ​2.搜索elasticvue并安装 3.打开elasticvue ​4.连接Es 5.有些浏览器无法下载安装扩展&#xff0c;例如谷歌。可以打包扩展给别的浏览器使用。 5.1打开浏览器扩展&#xff0c;打开开发人员模式&#xff0c;记住扩展程序id 5…

大数据技术之HBase中的HRegion

如果你正在学习大数据&#xff0c;你应该知道HBase是一个列式存储的NoSQL分布式数据库&#xff0c;可以配合Hadoop来使用。今天自己简单做了几页PPT&#xff0c;解释了一下HBase当中HRegion的基本概念&#xff0c;很多初学者在学习的时候对HRegion这个概念一直懵懵懂懂&#xf…

Spring Cloud Contract快速入门Demo

1.什么是Spring Cloud Contract &#xff1f; Spring Cloud Contract 是 Spring 提供的一套工具&#xff0c;用于帮助开发者通过契约&#xff08;Contract&#xff09;驱动的方式进行微服务的测试和集成。它主要解决微服务之间通信时&#xff0c;如何确保服务提供者和消费者之…

GISBox VS ArcGIS:分别适用于大型和小型项目的两款GIS软件

在现代地理信息系统&#xff08;GIS&#xff09;领域&#xff0c;有许多大家耳熟能详的GIS软件。它们各自具有独特的优势&#xff0c;适用于不同的行业需求和使用场景。在众多企业和开发者面前&#xff0c;如何选择合适的 GIS 软件成为了一个值得深入思考的问题。今天&#xff…

Linux 进程线程间通信总结

线程 线程共享存储空间主要带来的问题是数据同步和互斥。由于线程在同一进程中运行&#xff0c;它们共享相同的内存空间&#xff0c;任何线程都可以访问共享数据。这样&#xff0c;多个线程并发执行时&#xff0c;可能会导致以下两种主要问题&#xff1a; 互斥问题&#xff0…

【再谈设计模式】抽象工厂模式~对象创建的统筹者

一、引言 在软件开发的世界里&#xff0c;高效、灵活且易于维护的代码结构是每个开发者追求的目标。设计模式就像是建筑蓝图中的经典方案&#xff0c;为我们提供了应对各种常见问题的有效策略。其中&#xff0c;抽象工厂模式在对象创建方面扮演着重要的角色&#xff0c;它如同一…

Web安全之SQL注入---基础

文章目录 SQL注入简介SQL注入基础SQL注入分类SQL注入流程 SQL注入简介 什么是SQL注入&#xff1f; SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严&#xff0c;攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句&#xff0c;在管理…

机器学习——贝叶斯

&#x1f33a;历史文章列表&#x1f33a; 机器学习——损失函数、代价函数、KL散度机器学习——特征工程、正则化、强化学习机器学习——常见算法汇总机器学习——感知机、MLP、SVM机器学习——KNN机器学习——贝叶斯机器学习——决策树机器学习——随机森林、Bagging、Boostin…

gdb编译教程(支持linux下X86和ARM架构)

1、下载源码 http://ftp.gnu.org/gnu/gdb/ 我下载的8.2版本。 2、下载完后拷贝到linux的x86系统。 3、解压&#xff0c;然后进入到目录下&#xff0c;打开当前目录的命令行窗口。 4、创建一个生成目录。 5、我们先开始x86版本&#xff0c;这个比较简单&#xff0c;不需要配置…