学习笔记十三:云服务器通过Kubeadm安装k8s1.25,供后续试验用

news2024/11/17 16:55:36

Kubeadm安装k8s1.25

  • k8s环境规划:
  • 初始化安装k8s集群的实验环境
  • 先建生产环境服务器,后面可以通过生成镜像克隆node环境
      • 修改主机名
      • 配置yum源
      • 关闭防火墙
      • 关闭selinux
      • 配置时间同步
      • 配置主机 hosts 文件,相互之间通过主机名互相访问 **192.168.40.180**为你的内网IP
      • 修改机器内核参数
      • 重启后模块会失效,配置开机自动加载模块的脚本
      • 配置安装k8s组件需要的阿里云的repo源
      • 安装基础软件包
      • 备注:docker也要安装,docker跟containerd不冲突,安装docker是为了能基于dockerfile构建镜像
      • 安装containerd服务
      • 修改/etc/crictl.yaml文件
      • 安装初始化k8s需要的软件包
      • 设置容器运行时
      • k8smaster1和k8snode1都需要上传k8s_1.25.0.tar.gz 镜像包
      • 上传calico.tar.gz到k8smaster1上
  • 关闭服务器生成镜像,克隆出node节点
  • 如果初始化有问题,k8s重新初始化
  • 添加第一个工作节点
  • 安装kubernetes网络组件-Calico
      • 可以把k8snode1的ROLES变成work
  • 测试在k8s创建pod是否可以正常访问网络

k8s环境规划:

podSubnet(pod网段) 10.244.0.0/16
serviceSubnet(service网段): 10.96.0.0/12

实验环境规划:
操作系统:centos7.5
配置: 2Gib内存/4vCPU/50G硬盘

在这里插入图片描述

初始化安装k8s集群的实验环境

先建生产环境服务器,后面可以通过生成镜像克隆node环境

修改主机名

hostnamectl set-hostname k8smaster1 && bash  #k8smaster1 为服务器名称

配置yum源

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
yum makecache

关闭防火墙

systemctl stop firewalld.service   #停止firewall
systemctl disable firewalld.service    #禁止firewall开机启动
firewall-cmd --state          #查看防火墙状态
yum install -y iptables-services     #安装iptables
service iptables stop && systemctl  disable iptables   #停用iptables并关闭开机启动iptables
service iptables status
iptables -F    #清空防火墙规则

关闭selinux

setenforce 0  
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 
getenforce   #查看是否为Disabled
swapoff -a  #关闭交换分区swap,提升性能

配置时间同步

yum install -y ntpdate ntp
ntpdate cn.pool.ntp.org   
#每小时进行时间同步 
echo "* */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org" >>/var/spool/cron/root
systemctl restart crond   #重启计划任务

配置主机 hosts 文件,相互之间通过主机名互相访问 192.168.40.180为你的内网IP

rm -rf /etc/hosts
cat > /etc/hosts <<EOF    
192.168.40.180 k8smaster1
192.168.40.181 k8snode1
EOF

修改机器内核参数

modprobe br_netfilter
echo "modprobe br_netfilter" >> /etc/profile
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 -p /etc/sysctl.d/k8s.conf

重启后模块会失效,配置开机自动加载模块的脚本

cat> /etc/rc.sysinit <<EOF
#!/bin/bash
for file in /etc/sysconfig/modules/*.modules ; do
[ -x $file ] && $file
done
EOF

在/etc/sysconfig/modules/目录下 新建文件如下

cat> /etc/sysconfig/modules/br_netfilter.modules <<EOF
modprobe br_netfilter
EOF
#增加权限
chmod 755 /etc/sysconfig/modules/br_netfilter.modules   
lsmod |grep br_netfilter    #重启机器模块也会自动加载

配置安装k8s组件需要的阿里云的repo源

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

安装基础软件包

yum install -y device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel  python-devel epel-release openssh-server socat  ipvsadm conntrack telnet ipvsadm

备注:docker也要安装,docker跟containerd不冲突,安装docker是为了能基于dockerfile构建镜像

yum install yum-utils -y
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install  docker-ce  -y
systemctl enable docker --now

配置docker镜像加速器和驱动

cat> /etc/docker/daemon.json <<EOF
{
 "registry-mirrors":["https://vh3bm52y.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com"]
} 
EOF
systemctl restart docker #重启docker

安装containerd服务

yum install  containerd.io-1.6.6 -y
mkdir -p /etc/containerd #生成 containerd 的配置文件
containerd config default > /etc/containerd/config.toml
vim /etc/containerd/config.toml
#把SystemdCgroup = false修改成SystemdCgroup = true
#把sandbox_image = "k8s.gcr.io/pause:3.6"修改成sandbox_image="registry.aliyuncs.com/google_containers/pause:3.7"
systemctl enable containerd  --now  #配置 containerd 开机启动,并启动 containerd

修改/etc/crictl.yaml文件

cat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF

配置containerd镜像加速器,k8s所有节点均按照以下配置:

vim /etc/containerd/config.toml
#找到config_path = "",修改成如下目录:
config_path = "/etc/containerd/certs.d"
mkdir /etc/containerd/certs.d/docker.io/ -p
cat>/etc/containerd/certs.d/docker.io/hosts.toml<<EOF
[host."https://vh3bm52y.mirror.aliyuncs.com",host."https://registry.docker-cn.com"]
 capabilities = ["pull"]
EOF
systemctl restart containerd #重启containerd

安装初始化k8s需要的软件包

安装1.25

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

设置容器运行时

crictl config runtime-endpoint /run/containerd/containerd.sock

k8smaster1和k8snode1都需要上传k8s_1.25.0.tar.gz 镜像包

k8s_1.25.0.tar.gz链接:https://pan.baidu.com/s/1ytLFwRB3oHxTGu1DPG9YIg?pwd=r5p1
提取码:r5p1

ctr -n=k8s.io images import k8s_1.25.0.tar.gz
crictl images  #查看镜像

上传calico.tar.gz到k8smaster1上

上传calico.tar.gz到k8smaster1上,使用yaml文件安装calico 网络插件 。
链接:https://pan.baidu.com/s/17MW_un5N1-3w-yJOSNUYhw?pwd=seoz
提取码:seoz

ctr -n=k8s.io images import calico.tar.gz

关闭服务器生成镜像,克隆出node节点

使用kubeadm初始化k8s集群
在master执行,确认服务启动正常

systemctl restart docker
systemctl status docker
systemctl restart containerd
systemctl status containerd

kubeadm config print init-defaults > kubeadm.yaml

使用kubeadm初始化k8s集群
根据我们自己的需求修改配置,比如修改 imageRepository 的值,kube-proxy 的模式为 ipvs,初始化节点的时候需要指定cgroupDriver为systemd

cat> kubeadm.yaml <<EOF
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.40.180 #控制节点的 ip
  bindPort: 6443
nodeRegistration:
  criSocket: unix:///run/containerd/containerd.sock
  imagePullPolicy: IfNotPresent
  name: k8smaster1 #控制节点主机名
  taints: null
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers #指定阿里云镜像仓库地址
kind: ClusterConfiguration
kubernetesVersion: 1.25.0 #k8s 版本
networking:
  dnsDomain: cluster.local
  podSubnet: 10.244.0.0/16 #指定 pod 网段, 需要新增加这个
  serviceSubnet: 10.96.0.0/12  #指定 Service 网段
scheduler: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
EOF

基于kubeadm.yaml初始化k8s集群

kubeadm init --config=kubeadm.yaml --ignore-preflight-errors=SystemVerification

出现如下截图就成功了

在这里插入图片描述

如果遗忘了节点的token可以在master节点执行下列命令获取token

kubeadm token create --print-join-command

配置kubectl的配置文件config,相当于对kubectl进行授权,这样kubectl命令可以使用这个证书对k8s集群进行管理

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

如果初始化有问题,k8s重新初始化

kubeadm reset
rm -rf /root/.kube
rm -rf /etc/cni/net.d

修改完一些配置比如kubeadm-config.yaml 后,重新初始化

kubeadm init --config kubeadm.yaml --ignore-preflight-errors=SystemVerification

添加第一个工作节点

在k8snode1服务器上修改主机名

hostnamectl set-hostname k8snode1 && bash  #k8snode1 为服务器名称

在k8snode1节点执行上面获取到的值,并添加参数–ignore-preflight-errors=SystemVerification

kubeadm join 172.27.0.10:6443 --token abcdef.0123456789abcdef \
        --discovery-token-ca-cert-hash sha256:5d85ecacdc1520befa8fc33dfac4f16d03893888ba65949a02c293b26336efc4  –ignore-preflight-errors=SystemVerification	

出现下列截图证明成功加入了

在这里插入图片描述

安装kubernetes网络组件-Calico

镜像已经在 “上传calico.tar.gz到k8smaster1上” 这一步上传了
仍需上传calico.yaml到k8smaster1上,使用yaml文件安装calico 网络插件 。
链接:https://pan.baidu.com/s/1MzhaKeNdaHB7gwvhPTCMOg?pwd=91vs
提取码:91vs

kubectl apply -f  calico.yaml
#注:在线下载配置文件地址是:https://docs.projectcalico.org/manifests/calico.yaml

等两分钟查看集群状态

kubectl get pod -n kube-system 
kubectl get nodes

在这里插入图片描述

#STATUS状态是Ready,说明k8s集群正常运行了

可以把k8snode1的ROLES变成work

可以看到k8snode1的ROLES角色为空,就表示这个节点是工作节点。
按照如下方法:

kubectl label node k8snode1 node-role.kubernetes.io/worker=worker

测试在k8s创建pod是否可以正常访问网络

把busybox-1-28.tar.gz上传到k8snode1、k8snode2节点,手动解压
链接:https://pan.baidu.com/s/1HdG5Zv3LThn4H5n6-bOxDQ?pwd=kyue
提取码:kyue
busybox要用指定的1.28版本,不能用最新版本,最新版本,nslookup会解析不到dns和ip

k8smaster1和k8snode1节点都需要执行

ctr -n k8s.io images import busybox-1-28.tar.gz

在k8smaster1 执行

kubectl run busybox --image docker.io/library/busybox:1.28  --image-pull-policy=IfNotPresent --restart=Never --rm -it busybox -- sh
ping www.baidu.com

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

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

相关文章

argo workflows archived 归档设置

由于工作需要配置argo workflows归档&#xff0c;介绍一下大致步骤: 文章目录 1.在k8s中是找这个configmap2.编辑configmap3 配置数据库用户名和密码&#xff1a;4.把workflow这个pod删掉&#xff0c;让他重新生成一个 1.在k8s中是找这个configmap kubectl get cm -n argo2.编…

SpringBoot集成Lock4j 底层使用Redission 实现分布锁

Lock4j 在分布式系统中&#xff0c;实现锁的功能对于保证数据一致性和避免并发冲突是非常重要的。Lock4j是一个简单易用的分布式锁框架&#xff0c;而Redisson是一个功能强大的分布式解决方案&#xff0c;可以与Lock4j进行集成。 操作步骤 第一步&#xff1a;添加依赖 首先&…

uniAPP 视频图片预览组件

效果图 思路&#xff1a;处理文件列表&#xff0c;根据文件类型归类 已兼容 H5 ios 设备&#xff0c;测试已通过 浙政钉&#xff0c;微信小程序 视频资源因为&#xff0c;没有预览图&#xff0c;用灰色图层加播放按钮代替 <template><!--视频图片预览组件 -->&l…

【2023最新教程】6个步骤从0到1开发自动化测试框架(0基础也能看懂)

一、序言 随着项目版本的快速迭代、APP测试有以下几个特点&#xff1a; 首先&#xff0c;功能点多且细&#xff0c;测试工作量大&#xff0c;容易遗漏&#xff1b;其次&#xff0c;代码模块常改动&#xff0c;回归测试很频繁&#xff0c;测试重复低效&#xff1b;最后&#x…

使用MyBatis(1)

目录 一、什么是MyBatis 二、搭建MyBatis开发环境 &#x1f345;添加MyBatis依赖 &#x1f345;在数据库添加数据 &#x1f345;设置MyBatis配置 &#x1f388;数据库的相关连接信息&#x1f388;xml的保存和设置路径 三、使用MyBatis模式和语法操作数据库 &#x1f34…

BGP的介绍

目录 BGP基础 BGP的发展历史 BGP在企业中的应用 距离矢量型协议和路径矢量型协议的区别 BGP的特征 1.可控性 2.可靠性 3.AS-BY-AS BGP的对等关系 BGP的数据包 1.open报文 2.Keepalive报文 3.Update报文 4.Notification 报文 5.Route-refresh报文 BGP的状态机 …

GitLab备份升级

数据备份(默认的备份目录在/var/opt/gitlab/backups/下&#xff0c;生成一个以时间节点命名的tar包。) gitlab-rake gitlab:backup:create新建repo源&#xff0c;升级新版本的gitlab vim /etc/yum.repos.d/gitlab-ce.repo [gitlab-ce] namegitlab-ce baseurlhttps://mirrors.…

EMQ X 集群部署

EMQ X 消息服务器集群基于 Erlang/OTP 分布式设计,集群原理可简述为下述两条规则: MQTT 客户端订阅主题时,所在节点订阅成功后广播通知其他节点:某个主题(Topic)被本节点订阅。 MQTT 客户端发布消息时,所在节点会根据消息主题(Topic),检索订阅并路由消息到相关节点。 1. 集…

ICLR 2023 | 用于分布外泛化的拓扑感知鲁棒优化

论文链接&#xff1a;https://openreview.net/pdf?idylMq8MBnAp 代码链接&#xff1a;GitHub - joffery/TRO: The Pytorch implementation for "Topology-aware Robust Optimization for Out-of-Distribution Generalization" (ICLR 2023) 01. 研究背景 近年来&…

虹科分享 | 工业4.0:IO-Link wireless等先进通信技术是不可或缺的支柱

近年来&#xff0c;随着工业4.0&#xff08;工业革命4.0&#xff09;的提出&#xff0c;制造业转型浪潮拉开帷幕。工业4.0是将数字技术整合到传统的制造流程中&#xff0c;从而创建智能工厂。对此类工厂的最初要求是工厂各个层面的完全连接&#xff0c;从制造车间一直到管理和云…

重大更新|Sui主网即将上线流动性质押,助力资产再流通

Sui社区一直提议官方上线流动质押功能&#xff0c;现在通过SIP过程&#xff0c;已经升级该协议以实现这一功能。 Sui使用委托权益证明机制&#xff08;DPoS&#xff09;来选择和奖励负责运营网络的验证节点。为了保障网络安全&#xff0c;验证节点通过质押SUI token获得质押奖…

win10小任务栏显示日期

win10存在一个问题, 就是任务栏为小任务栏时, 无法显示系统日期, 只能显示时间, 对这个问题有两个办法, 1, 把小任务栏改为大任务栏, 日期就能显示出来 但如果你就是想用小任务栏, 不想用大任务栏, 又想显示日期, 只靠win10内置的设置是没法实现的, 只能借助其他软件, 具体看…

HTTP协议揭秘:探寻互联网的背后密码、探秘数据传输的奥秘

HTTP&#xff08;超文本传输协议&#xff1a;Hypertext Transfer Protocol&#xff09;是一种用于在Web上传输数据的协议&#xff0c;它是互联网上最重要的应用层协议之一。从诞生至今&#xff0c;HTTP一直扮演着连接世界的通信桥梁的角色&#xff0c;在互联网的发展和普及中发…

数组练习题,数组的动态初始化

数组的遍历 定义一个数组&#xff0c;求和 int[] arr {1,2,3,4,5,6,7};int sum 0;for (int i 0; i <arr.length ; i) {sum sum arr[i];}System.out.println(sum);定义一个数组&#xff0c;统计数组里面一共有多少能够被3 整除的数字&#xff1a; int[] arr1 {4,62,8…

JavaScript快速入门:ComPDFKit PDF SDK 快速构建 Web端 PDF阅读器

JavaScript快速入门&#xff1a;ComPDFKit PDF SDK 快速构建 Web端 PDF阅读器 在当今丰富的网络环境中&#xff0c;处理 PDF 文档已成为企业和开发人员的必需品。ComPDFKit 是一款支持 Web 平台并且功能强大的 PDF SDK&#xff0c;开发人员可以利用它创建 PDF 查看器和编辑器&…

了解Unity编辑器之组件篇Playables和Rendering(十)

Playables 一、Playable Director&#xff1a;是一种用于控制和管理剧情、动画和音频的工具。它作为一个中央控制器&#xff0c;可以管理播放动画剧情、视频剧情和音频剧情&#xff0c;以及它们之间的时间、顺序和交互。 Playable Director组件具有以下作用&#xff1a; 剧情控…

数据结构初阶--栈和队列

目录 一.栈 1.栈的定义 2.顺序栈的功能实现 2.1.顺序栈的定义 2.2.顺序栈的初始化 2.3.顺序栈的判空 2.4.顺序栈的入栈 2.5.顺序栈的出栈 2.6.顺序栈的取栈顶元素 2.7.顺序栈的求栈的大小 2.8.顺序栈的销毁 2.9.完整程序 Stack.h Stack.c test.c 二.队列 1.队…

S475支持 ModbusRTU 转 MQTT协议采集网关

6路模拟量输入和2路RS485串口是一种功能强大的通信接口&#xff0c;可以接入多种设备和系统&#xff0c;支持4-20mA输出的传感器以及开关量输入输出。本文将详细介绍6路模拟量输入和2路RS485串口的应用场景和功能&#xff0c;重点介绍其在SCADA、HMI、远程数据监控以及采集控制…

机器学习——样本不均衡学习

1、样本不均衡定义 一般在分类机器学习中&#xff0c;每种类别的样本是均衡的&#xff0c;也就是不同目标值的样本总量是接近的&#xff0c;但是在很多场景下的样本没有办法做到理想情况&#xff0c;甚至部分情况本身就是不均衡情况&#xff1a; &#xff08;1&#xff09;很多…

[洛谷]P2052 [NOI2011] 道路修建(dfs)

在递归过程中也把子节点的贡献&#xff08;以及左右国家数记录下来了&#xff09;。 void dfs(int u,int fa) {d[u]1;//当前节点也算一个 for(int ih[u]; i; ine[i]) {int toe[i];//子节点if(tofa) continue;//防止重复搜索&#xff0c;即防止从下往上搜dfs(to,u);//子节点 //…