k8s集群部署

ops/2024/12/21 8:12:19/

一、环境准备

主机名称CPU/内存操作系统版本备注
master4C/8Gcentos 7.9集群主节点
node14C/8Gcentos 7.9集群子节点
node2

4C/8G

centos 7.9集群子节点

 

二、安装docker

步骤一:清理实验环境

清理之前之前安装的docker版本(确保实验环境的整洁)

yum remove docker \
>                   docker-client \
>                   docker-client-latest \
>                   docker-common \
>                   docker-latest \
>                   docker-latest-logrotate \
>                   docker-logrotate \
>                   docker-engine

步骤二:安装相关的组件和依赖

1、安装gcc相关

yum install -y gcc gcc-c++

2、安装需要的软件包

yum install -y yum-utils

步骤三:安装docker镜像,配置yum源

#官方镜像(不推荐,可能受到网络影响导致运行异常或者超时的情况发生)
yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo   ##此地址为官方的仓库地址,在国内建议不要用#推荐阿里云镜像yum-config-manager \--add-repo \http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

/etc/yum.repos.d/docker-ce.repo内容

[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg[docker-ce-stable-debuginfo]
name=Docker CE Stable - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/debug-$basearch/stable
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg[docker-ce-stable-source]
name=Docker CE Stable - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/source/stable
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg[docker-ce-test]
name=Docker CE Test - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg[docker-ce-test-debuginfo]
name=Docker CE Test - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/debug-$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg[docker-ce-test-source]
name=Docker CE Test - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/source/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg[docker-ce-nightly]
name=Docker CE Nightly - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg[docker-ce-nightly-debuginfo]
name=Docker CE Nightly - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/debug-$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg[docker-ce-nightly-source]
name=Docker CE Nightly - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/source/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

步骤四:安装docker相关的引擎

#先更新yum软件包索引

yum makecache fase

docker社区、ee企业版 ce为社区版 官方推荐使用ce版,默认安装最新的docker

版本,也可以指定版本安装

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

步骤五:启动docker

#启动systemctl start docker#查看状态 
systemctl status docker

步骤六:测试docker运行的情况

docker run hello-world docker version

docker run运行思维导图

步骤七:开启镜像加速

阿里云镜像加速地址:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

使用阿里云加速拉取镜像报错,处理方法

解决方法:

vim /etc/docker/daemon.json
{"registry-mirrors": ["https://bsgm1wut.mirror.aliyuncs.com",
"https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc"]
}

重新拉取镜像:

三、安装k8s前环境准备

  • 一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令。
  • 每台机器 2 GB 或更多的 RAM(如果少于这个数字将会影响你应用的运行内存)。
  • CPU 2 核心及以上。
  • 集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)。
  • 节点之中不可以有重复的主机名、MAC 地址或 product_uuid。请参见这里了解更多详细信息。
  • 开启机器上的某些端口。请参见这里了解更多详细信息。
  • 禁用交换分区。为了保证 kubelet 正常工作,你必须禁用交换分区。

 1、修改主机名

hostnamectl set-hostname master
hostnamectl set-hostname node1
hostnamectl set-hostname node2

2、关闭内核防火墙


3、关闭交换分区

#关闭交换分区并检查
swapoff -a && free -h#注释掉开机交换分区自动挂载,并检查
sed -ri 's/.*swap.*/#&/' /etc/fstab && cat /etc/fstab

4、允许iptables检查交接流量

cat << EOF | tee /etc/modules-load.d/k8s.conf
br_netfilter
EOFcat << EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOFsysctl --system

5、配置每台机器的静态IP

vim  /etc/sysconfig/network-scripts/ifcfg-ens33BOOTPROTO="static"
ONBOOT="yes"
IPADDR="192.168.72.130"
PREFIX="24"
GATEWAY="192.168.72.2"
DNS1="114.114.114.114"
NDS2="8.8.8.8"#重启网络
systemctl restart network

6、添加本地解析

四、安装k8s集群相关组件(kubeadm、kubelet和kubectl)

步骤一:安装k8s的yum源

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
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#检查
cat /etc/yum.repos.d/kubernetes.repo

步骤二:安装kubeadm

yum install -y kubelet-1.23.9 kubeadm-1.23.9 kubectl-1.23.9

步骤三:启动kubelet服务

 systemctl enable --now  kubelet.service

启动kubelet之后,kubelet服务的状态一直在loaded和active之间进行切换,原因是在等待kubeadm的信息。

步骤四:拉取相关组件的信息拉取镜

#查看各个组件镜像版本信息(默认的是k8s官网的地址)
kubeadm config images list##查看阿里云上k8s所在的路径
kubeadm config images list --image-repository registry.aliyuncs.com/google_containers         ##查看相关拉取命令的帮助
kubeadm config images  --help#拉取阿里云上相关组件的镜像   
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers   

步骤五:初始化主节点

1、添加本地解析

      之前步骤已经进行

2、节点初始化

kubeadm init \
--apiserver-advertise-address=192.168.72.130 \                  #IP为master节点的IP
--control-plane-endpoint=cluster-endpoint \                     #这个为master节点的域名解析
--image-repository registry.aliyuncs.com/google_containers \    #镜像仓库使用阿里云
--kubernetes-version v1.23.9 \	                                #填写安装k8s版本号
--service-cidr=10.96.0.0/16 \                        			#k8s内部进行集群负载均衡的时候时使用IP,service-cidr= 不能和--pod-network-cidr=网络重叠也不能和机器的网络重叠。
--pod-network-cidr=192.168.0.0/16#快捷粘贴
kubeadm init --apiserver-advertise-address=192.168.72.130 --control-plane-endpoint=cluster-endpoint --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.23.9 --service-cidr=10.96.0.0/16 --pod-network-cidr=192.168.0.0/16

 3、初始化常见问题处理

3.1、修改docker cgroup

参考文档:https://blog.csdn.net/qq_35916454/article/details/123481996

#解决方法:
vim /etc/docker/daemon.json
{...],
"exec-opts": ["native.cgroupdriver=systemd"]
}

出现上述失败后,重新初始化,发现端口已经被占用,此时已经不用再重新初始化了,需要reset重新初始化。

此时不需要再重新初始化了,需要reset

#先reset
kubeadm reset#再重新初始化
kubeadm init --apiserver-advertise-address=192.168.72.130 --control-plane-endpoint=cluster-endpoint --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.23.9 --service-cidr=10.96.0.0/16 --pod-network-cidr=192.168.0.0/16

再重新初始化

4、初始化完成后安装提示信息进行操作

4.1、按照下图中提示的操作步骤进行操作

记住以下信息,将来可以加入主机点和worker节点

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/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configAlternatively, if you are the root user, you can run:export KUBECONFIG=/etc/kubernetes/admin.confYou 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/You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:kubeadm join cluster-endpoint:6443 --token xvb9a7.gmgv5u3g5wj3cjzd \--discovery-token-ca-cert-hash sha256:e108d86045d3d1b7fa248c07ad156cd63f365b477216cfb8a2b0c758c83efc92 \--control-planeThen you can join any number of worker nodes by running the following on each as root:kubeadm join cluster-endpoint:6443 --token xvb9a7.gmgv5u3g5wj3cjzd \--discovery-token-ca-cert-hash sha256:e108d86045d3d1b7fa248c07ad156cd63f365b477216cfb8a2b0c758c83efc92

4.2、按照上图的操作步骤创建一个普通用户使用k8s的部署操作实验,

#创建用户
useradd kubeadm#授予sudo权限
visudo
kubeadm       ALL=(ALL)       NOPASSWD: ALL

4.3、创建目录

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

4.4、查看集群节点信息

kubectl get node

4.5、部署集群串联使用的网络插件下载calico.yaml配置文件,再利用kubectl apply -f 命令下载calico.yaml里的相关插件信息。

#将calico.yaml配置文件下载到本地
curl https://calico-v3-25.netlify.app/archive/v3.25/manifests/calico.yaml -O#安装calico.yaml配置文件里的内容
kubectl apply -f calico.yaml 

注意:如果初始化中的--pod-network-cidr=不是192.168.0.0/16则需要修改calico.yaml文件中的地址和初始化中的一样

calico.yml

vim calico.yaml...#   value: "192.168.0.0/16"     #改成初始化的IP
...

步骤六:集群中加入worker节点

kubeadm join cluster-endpoint:6443 --token xvb9a7.gmgv5u3g5wj3cjzd \--discovery-token-ca-cert-hash sha256:e108d86045d3d1b7fa248c07ad156cd63f365b477216cfb8a2b0c758c83efc92

发现calico安装的组件报错,因为配置的是官网的镜像地址多以无法正常拉取,导致nci拉取报错

解决方法:

在csdn上下载calico-image-v3.25.0.zip安装包链接:https://download.csdn.net/download/paish87/88360784

calico-image-v3.25.0.zip解压之后会生成calico-image-v3.25.0.tar和calico.yaml文件

1)先将calico-image-v3.25.0.tar导入

docker load -i calico-image-v3.25.0.tar

2)再将calico.yaml内容导入(所有接口上都执行)

docker load -i calico-image-v3.25.0.tar
docker pull calico/cni:v3.25.0
docker pull calico/node:v3.25.0
docker pull calico/kube-controllers:v3.25.0#先将国外的网络源注释掉
sed -i 's#docker.io/##g' calico.yaml#在执行文件部署
kubectl apply -f  calico.yaml

3)检查所有的pod是不是都是runing状态

4) 查看节点信息

常见的命令总结:

#查看集群的节点信息
kucectl get node#根据配置文件,给集群创建资源
kubectl apply -f xxx.yaml#查看k8s部署了哪些应用
kubectl get pods -A  == docker ps#查看pod节点的报错信息
kubectl describe pod calico-node-kjrxz -n kube-system

 

五、关机重启测试集群的稳定性

报错1:

说明6443端口没有开起来说明apiserver端口没有开启,此时需要检查docker的状态是否正常

报错2:

从节点启动异常处理

检查kubelet进程是否开启,启动异常则看系统日志cat /var/log/messages

交换分区开机自动挂载未注释掉

 

问题解决!!


http://www.ppmy.cn/ops/143708.html

相关文章

1、学习大模型总纲

文章目录 学习大模型技术是一个循序渐进的过程&#xff0c;需要理论学习和实践相结合。由于大模型涉及的知识面非常广&#xff0c;建议你根据自己的背景和兴趣选择合适的学习路径。以下是一些全面的学习方法建议&#xff0c;涵盖了不同的学习资源和策略&#xff1a; 一、 打好基…

HourVideo: 1-Hour Video-Language Understanding的解读

HourVideo: 1-Hour Video-Language Understanding 的解读 0 abstract 介绍HourVideo&#xff0c;这是一个用于长达一小时的视频语言理解的基准数据集。我们的数据集包含一个新的任务套件&#xff0c;包括总结、感知&#xff08;回忆、追踪&#xff09;、视觉推理&#xff08;…

Could not connect to SMTP host: smtp.163.com, port: 465, response: -1

Could not connect to SMTP host: smtp.163.com, port: 465, response: -1 1、背景2、解决 1、背景 记录一次非常奇怪的问题。 项目中有一个定时发送邮件的功能&#xff1b;在一个风和丽日的早上&#xff0c;业务咔咔一顿消息&#xff0c;邮件怎么不发了。 额、、、 更奇怪的是…

Arcgis for javascript 开发学习经验

初始化viewer&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; const mapBaseLayer new WebTileLayer({urlTemplate: SystemConfig.dydImgUrl,visible: true,id: DYDImage,});//地图初始化mapconst map new Map({basemap: satellite,ground: world-elevatio…

华为HCIP认证培训多少天?

华为 HCIP 认证&#xff0c;对于那些已经有一定网络技能和经验的人来说&#xff0c;这可是个很权威的认证&#xff01; 它不单单是对个人网络技能和知识的肯定&#xff0c;更是让职业竞争力增强的重要一步呢。要是想顺顺利利拿到这个认证&#xff0c;除了要找一家靠得住又专业…

【数据分析】数据分析流程优化:从数据采集到可视化的全面指南

目录 引言一、数据采集&#xff1a;高质量数据的起点1.1 数据采集的目标1.2 数据采集的常用方法1.3 数据采集的注意事项 二、数据清洗&#xff1a;确保数据质量2.1 数据清洗的重要性2.2 常见的数据清洗步骤 三、数据分析&#xff1a;从数据中挖掘有价值的洞察3.1 数据分析的目的…

.Net Core注册一个定制任务执行类服务

如果我们想要在Web Api服务中创建一个定制任务后台一直刷新执行某些操作&#xff0c;那么我们可以继承abstract抽象类HostedService&#xff0c;具体操作如下&#xff1a; BackgroundService.cs源代码&#xff0c;这个源代码我可以自己写一个也可以直接继承。 /// <summar…

缓存与数据库双写不一致问题的深度剖析与解决方案

在分布式系统中&#xff0c;缓存与数据库双写不一致问题是一个常见且棘手的问题。当我们同时对缓存和数据库进行写入操作时&#xff0c;由于操作的顺序、时间差异、网络延迟等多种因素&#xff0c;可能导致缓存中的数据与数据库中的数据不一致。这种不一致性不仅会影响数据的准…