当前位置: 首页 > news >正文

从零开始的云计算生活——第四十一天,勇攀高峰,Kubernetes模块之单Master集群部署

目录

一.背景故事

二. 服务器环境及初始化

1、架构分析

2、初始化

2.1、清空Iptales默认规则及关闭防火墙

2.2、关闭SELINUX

2.3、关闭Swap交换空间

2.4、设置主机名

2.5、编写hosts文件(三台服务器都写)

2.6、设置内核参数

​编辑

三.安装Docker环境

1、安装Docker

1.1、配置阿里源

1.2、安装docker

1.3、启动docker

2、安装cri-docker

四.安装kubeadm和kubectl

1、配置yum源

2、安装

3、设置kubectl开机自启动

4、启动kubeadm和kubectl命令补齐功能(新版本有补齐功能)

五.部署Master节点

六.部署node节点

七.部署网络插件

八.总结


一.背景故事

在完成前面的dockers学习后,也是来到最重要也是最那拿下的k8模块了,本节内容先从最简单的单master部署,实验使用三台服务器。

二. 服务器环境及初始化

1、架构分析

集群角色主机名操作系统IP地址
masterk8s-masterOpenEuler24.03192.168.71.128
nodek8s-node1OpenEuler24.03192.168.71.129
nodek8s-node2OpenEuler24.03192.168.71.130

2、初始化

所有节点都需要初始化!

2.1、清空Iptales默认规则及关闭防火墙

iptables -t nat -F
iptables -t filter -F
systemctl disable --now firewalld

2.2、关闭SELINUX

setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config 

2.3、关闭Swap交换空间

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

2.4、设置主机名

hostnamectl set-hostname k8s-master

hostnamectl set-hostname k8s-node1

hostnamectl set-hostname k8s-node2

2.5、编写hosts文件(三台服务器都写)

vim /etc/hosts 
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.71.128    k8s-master
192.168.71.129    k8s-node1
192.168.71.130    k8s-node2

2.6、设置内核参数

注意:安装完成docker-ce并启动之后方可设置!

vim /etc/sysctl.conf

net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

modprobe br_netfilter
sysctl net.bridge.bridge-nf-call-ip6tables=1
sysctl net.bridge.bridge-nf-call-iptables=1

sysctl -p

三.安装Docker环境

所有节点都需要安装!

1、安装Docker

1.1、配置阿里源

[root@localhost yum.repos.d]# cat docker-ce.repo 
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com//docker-ce/linux/centos/9/x86_64/stable/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

1.2、安装docker

yum install -y docker-ce

1.3、启动docker

systemctl enable --now docker

2、安装cri-docker

yum install -y libcgroup
rpm -ivh cri-dockerd-0.3.8-3.el8.x86_64.rpm

修改CRI启动脚本

vim /usr/lib/systemd/system/cri-docker.service ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9

启动cri

systemctl daemon-reload
systemctl enable --now cri-docker

四.安装kubeadm和kubectl

所有节点都需要安装!

1、配置yum源

cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/repodata/repomd.xml.key
EOF

2、安装

yum install -y kubelet kubeadm kubectl

3、设置kubectl开机自启动

systemctl enable kubelet && systemctl start kubelet

4、启动kubeadm和kubectl命令补齐功能(新版本有补齐功能)

source <(kubeadm completion bash)
source <(kubectl completion bash)

echo -e "source <(kubeadm completion bash)\nsource <(kubectl completion bash)" >>  /root/.bashrc 
source /root/.bashrc

(重启失效)

五.部署Master节点

在k8s-master节点执行下述命令:

kubeadm init --apiserver-advertise-address=192.168.71.128 --image-repository=registry.aliyuncs.com/google_containers --kubernetes-version=v1.28.15 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --cri-socket=unix:///var/run/cri-dockerd.sock

命令解析:

--apiserver-advertise-address:指定 API Server 监听的 IP 地址。如果没有设置,则将使用默认的网络接口。

--image-repository:指定镜像仓库地址。默认值为“registry.k8s.io”,但该仓库在中国无法访问,因此这里指定阿里云仓库。

--kubernetes-version:指定 Kubernetes 版本。

--pod-network-cidr:指定 Pod 网络的 CIDR 地址范围。

--service-cidr:指定 Service 网络的 CIDR 地址范围。

--cri-socket:指定 kubelet 连接容器运行时的 UNIX 套接字文件。

执行命令后,kubeadm 会执行一系列任务,具体如下:

[preflight]:该阶段执行一系列检查,验证当前系统环境是否满足 Kubernetes 的安装要求,包括:CPU 和内存是否满足最低要求。网络是否正常。操作系统版本是否满足要求。容器运行时是否可以连接。内核参数是否正确配置。下载所需的容器镜像。[certs]:生成 Kubernetes 组件所需的 HTTPS 证书和密钥,并将其存储到“/etc/ kubernetes/pki”目录中。[kubeconfig]:生成 kubeconfig 文件,其中包含 API Server 地址、客户端证书等信息,并将其存储在“/etc/kubernetes”目录中。[kubelet-start]:生成 kubelet 配置文件“/var/lib/kubelet/config.yaml”并启动 kubelet服务。[control-plane]:为 kube-apiserver、kube-controller-manager 和 kube-scheduler 创建静态 Pod 资源文件,并将其存储到“/etc/kubernetes/manifests”目录中。[etcd]:为 etcd 创建静态 Pod 资源文件,并将其存储在“/etc/kubernetes/manifests”目录中。[wait-control-plane]:等待 kubelet 从目录“/etc/kubernetes/manifest”中以静态 Pod的形式启动 Master 组件。[apiclient]:检查 Master 组件是否健康。[upload-config]:将 kubeadm 配置存储在 ConfigMap 对象中。[kubelet]:将 kubelet 配置存储在 ConfigMap 对象中。[upload-certs]:提示用户跳过证书上传。[mark-control-plane]:给 Master 节点添加标签和污点。[bootstrap-token]:生成引导令牌,供 Node 节点在加入集群时使用。[kubelet-finalize]:更新 kubelet 配置文件(/etc/kubernetes/kubelet.conf)。[addons]:安装 CoreDNS 和 kube-proxy 插件。

出问题后,集群还原

kubeadm reset --cri-socket=unix:///var/run/cri-dockerd.sock

注意保存证书文件

每个人的证书是不一致的,注意查看自己的证书。

kubeadm join 192.168.71.128:6443 --token 302rqk.3td0o57d14bcuzso \--discovery-token-ca-cert-hash sha256:e30c353d8c712de6fb239aca93e74ccdde96d053bbe352b705d792355f9e5301 

配置管理集群文件

mkdir -p $HOME/.kube
cd /root/.kube
cp /etc/kubernetes/admin.conf ./config

六.部署node节点

分别在k8s-node1和k8s-node2中执行:

kubeadm join 192.168.71.128:6443 --token 302rqk.3td0o57d14bcuzso --discovery-token-ca-cert-hash sha256:e30c353d8c712de6fb239aca93e74ccdde96d053bbe352b705d792355f9e5301   --cri-socket=unix:///var/run/cri-dockerd.sock

查看集群状态:

目前看到的是NotReady状态,是由于没有安装网络插件的原因。ROLES角色一栏显示“none”,可以通过一下命令修改角色名称:

kubectl label node k8s-master node-role.kubernetes.io/master=master
kubectl label node k8s-node1 node-role.kubernetes.io/worker=worker
kubectl label node k8s-node2 node-role.kubernetes.io/worker=worker

七.部署网络插件

calico组件的相关镜像,目前在国内无法下载。需要在master主机先创建calico的相关资源,然后查看所需镜像,最后通过外网服务器进行下载。具体的操作流程如下:

提交资源清单:

编辑网络信息:

vim custom-resources.yaml 
apiVersion: operator.tigera.io/v1 
kind: Installation 
metadata: name: default 
spec: calicoNetwork: ipPools: - blockSize: 26 cidr: 10.244.0.0/16 # 修改此值,与“kubeadm init”命令中指定的 Pod 网络CIDR 地址范围保持一致encapsulation: VXLANCrossSubnet natOutgoing: Enabled nodeSelector: all() 
... 

kubectl create -f custom-resources.yaml

资源提交后,使用下述命令列出所需的镜像文件:

八.总结

本节内容初步介绍了部署单master集群的步骤,为之后的操作奠定环境基础,在部署过程中出现了一些问题导致无法启动,最后排查原因主要是版本问题,由于新版本和旧版本并不兼容,从3.26的包换成3.29版本的包之后,就迎刃而解了。

http://www.dtcms.com/a/325657.html

相关文章:

  • 微美全息(NASDAQ:WIMI)Raft携手节点动态评估:引领联盟链高性能共识新潮流
  • 为 Promethus 配置https访问
  • 机器学习 - Kaggle项目实践(1)Titanic
  • 揭开内容分发网络(CDN)的神秘面纱:互联网的隐形加速器
  • 飞翔的小鸟
  • 【数据结构入门】二叉树(1)
  • day23|前端学习三件套
  • 了解不同电磁仿真类型中的电容报告
  • 数学建模——灰色预测(GM11)
  • YOLO性能评估指标详细总结
  • Linux中DHCP配置指南指南(配实验步骤与注释)
  • 19.Linux DHCP服务
  • 108-基于Python的中国古诗词数据可视化分析系统
  • 第二章:变量与简单数据类型
  • JVM管理数据的方式
  • 深入解析Prompt缓存机制:原理、优化与最佳实践
  • k8s之CSI 卷挂载问题:同一Pod中挂载多个相同远程存储的隐含限制
  • 2025面试题——(12)
  • Vue3从入门到精通:3.1 性能优化策略深度解析
  • 思科交换机的不同级别IOS软件有什么区别?
  • android 换肤框架详解1-换肤逻辑基本
  • R语言机器学习算法实战系列(二十七)LASSO 与 Adaptive LASSO 在特征选择中的比较与应用
  • 为什么TEXT不区分大小写,而BLOB严格区分?
  • 剑桥大学最新研究:基于大语言模型(LLM)的分子动力学模拟框架,是MD的GPT时刻还是概念包装?
  • Selenium竞品价格监控爬虫(代理防封版)
  • C语言模拟 MCU 上电后程序的执行顺序 + 回调函数机制 + 程序计数器(PC)和堆栈的作用
  • PID 控制算法 | stm32 直流电机控制
  • 从零开始的云计算生活——项目实战容器化
  • 当生产环境卡成 PPT:Spring Boot 线程 Dump 捉妖指南 - 第544篇
  • AI入门学习--如何写好prompt?