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

k8s安装kubeadm

使用kubeadm安装部署k8s集群

目前生产部署Kubernetes 集群主要有两种方式:

kubeadm

Kubeadm 是一个K8s 部署工具,提供kubeadm init 和kubeadm join,用于快速部署Kubernetes 集群。

官方地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/

二进制包

从github 下载发行版的二进制包,手动部署每个组件,组成Kubernetes 集群。

Kubeadm 降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。如果想更容易可控,推荐使用二进制包部署Kubernetes 集群,虽然手动部署麻烦点,期间可以学习很多工作原理,也利于后期维护。

本篇介绍使用kubaadm安装部署集群,本篇安装是k8s:1.32.17版本的,之前升级内核也是为了安装版本,(之前内核太低的时候也安装过,但是集群出现问题,出现连接不上命令行的问题,因此进行内核升级处理),本篇会介绍安装时候,遇到的问题,恳请各位大佬批评指正。下面进行安装部署

k8s是基于docker为底层的逻辑在运行,安装的是1.32.17因此docker的版本也不能偏低(否测会出现不兼容等等的一些问题),下面开始安装部署以及环境准备

一、环境介绍

角色ip组件
master192.168.10.10docker、kubeadm、kubectl、kubelet
node1192.168.10.20docker、kubeadm、kubectl、kubelet
node2192.168.10.30docker、kubeadm、kubectl、kubelet

1.1节点准备

(所有节点升级内核)https://blog.csdn.net/mfq0622/article/details/147167939?spm=1001.2014.3001.5502

hostnamectl #确保所有节点的内核版本要进行升级,不低于这个版本

在这里插入图片描述

1.2主机名解析

vim /etc/hosts

在这里插入图片描述

1.3 时间同步

systemctl  start chonyd
systemctl enable chronyd
date

要确保时间是一致的

在这里插入图片描述

1.4禁用iptables和firewalld服务

kubernetes和docker 在运行的中会产生大量的iptables规则,为了不让系统规则跟它们混淆,直接关闭系统的规则

systemctl stop firewalld
systemctl disable firewalld
#关闭iptables服务
systemctl stop iptables
systemctl disable iptables

1.5 禁用selinux

selinux是liunx系统下面的一个安全服务,如果不关闭它,会在集群安装中出现问题

#编辑 /etc/selinux/config 文件,修改selinux的值为disable
#注意修改完毕之后需要重启linux服务
SELINUX=disable

1.6 禁用swap分区

swap分区指的是虚拟内存分区,他的作用是物理内存使用完,之后将磁盘空间虚拟成内存来使用,启用swap设备会对系统的性能产生非常负面的影响,因此kubernets要求每个节点都要禁用swap设备,但是如果因为某些原因不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明

# 编辑分区配置文件/etc/fstab,注释掉swap分区一行
# 注意修改完毕之后需要重启linux服务
vim /etc/fstab
注释掉 /dev/mapper/centos-swap swap
# /dev/mapper/centos-swap swap

1.7修改linux内核参数

//调整内核参数
cat > /etc/sysctl.d/kubernetes.conf << EOF
#开启网桥模式,可将网桥的流量传递给iptables链
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
#关闭ipv6协议
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOF//生效参数
sysctl --system 

1.8添加内核参数

vim /etc/security/limits.conf  内核限制配置
尾部添加
*  soft  nofile  65536
*  hard  nofile  65536
*  soft  nproc   65536
*  hard  nproc   65536
*  soft  memlock  unlimited
*  hard  memlock  unlimited

二、安装docker

#1、切换镜像源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo 
# 2、查看当前镜像源中支持的docker版本
[root@master ~]# yum list docker-ce --showduplicates# 3、安装特定版本的docker-ce
# 必须制定--setopt=obsoletes=0,否则yum会自动安装更高版本
[root@master ~]# yum install docker-ce-20.10.24 docker-ce-cli-20.10.24 containerd.io
添加镜像地址
cat > /etc/docker/daemon.json <<EOF
{"registry-mirrors": ["https://hub-mirror.c.163.com","https://docker.m.daocloud.io","https://ghcr.io","https://mirror.baidubce.com","https://docker.nju.edu.cn","https://uy760d98.mirror.aliyuncs.com","https://docker.hpcloud.cloud","https://docker.unsee.tech","https://docker.1panel.live","http://mirrors.ustc.edu.cn","https://docker.chenby.cn","http://mirror.azure.cn","https://dockerpull.org","https://dockerhub.icu","https://hub.rat.dev"],"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"}
}EOF
#使用Systemd管理的Cgroup来进行资源控制与管理,因为相对Cgroupfs而言,Systemd限制CPU、内存等资源更加简单和成熟稳定。
#日志使用json-file格式类型存储,大小为500M,保存在/var/log/containers目录下,方便ELK等日志系统收集和管理日志。
4、重启加载并启动docker
systemctl daemon-reload
systemctl restart docker

在这里插入图片描述

现在docker安装好了我们安装k8s

三、安装k8s

1.1由于k8s镜像站在国外,我们换成国内的镜像源


//定义kubernetes源
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
#开始安装yum install --setopt=obsoletes=0 kubeadm-1.23.17-0 kubelet-1.23.17-0 kubectl-1.23.17-0 -y
#设置开机自启
systemctl enable kubelet.service

1.2下面在进行集群初始化

kubeadm init \--apiserver-advertise-address=192.168.10.10 \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version=v1.23.17 \--service-cidr=10.96.0.0/12 \--pod-network-cidr=10.244.0.0/16# 创建必要文件
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/conf

在这里插入图片描述

1.3下面的操作在node节点进行操作

kubeadm join 192.168.10.10:6443 --token 6u9k6k.i5u81qay5i1a03o5 \--discovery-token-ca-cert-hash sha256:3b26da02aa942983d08f3c0e7cf2b65d551ff6e367b3a2c4aade023f1fc5b722

1.4然后在主节点查看会出现NotReady的信息

kubectl get nodes

在这里插入图片描述

1.5下面需要安装网络插件,在主节点操作即可

kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/v0.17.0/Documentation/kube-flannel.yml

这个外网不好访问,可以将yaml文件下载下来

https://github.com/flannel-io/flannel/tree/master/Documentation/kube-flannel.yml

手动拉取

也可手动拉取指定版本
docker pull quay.io/coreos/flannel:v0.14.0 #拉取flannel网络,三台主机
docker images #查看仓库是否拉去下来

四、集群测试

#查看集群状态
kubectl get nodes
创建nginx服务
kubectl create deployment nginx  --image=nginx:1.14-alpine
暴露端口
kubectl expose deploy nginx  --port=80 --target-port=80  --type=NodePort
查看服务
kubectl get pod,svc

在这里插入图片描述

1.1验证服务

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、命令补全

1.1这个集群安装好了,但是使用tab补全不了命令这里需要进行安装设置

yum -y install bash-completion
source /usr/share/bash-completion/bash_completion
echo "source <(kubectl completion bash)" >> ~/.bashrc

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

六、故障排查和处理

故障1

安装k8s的时候遇见一个https的问题,(忘记截图了)这里面找了一个证书,放上去了加权限,并且运行了,发现还是没有效果,然后进行了重置集群的操作就正常了(根因没找出来,希望大佬指点一二)

kubeadm reset

故障2

在安装flannel插件的时候遇见一个pod起不来,然后本地有镜像,kubectl describe的时候发现还是去远程拉取

解决方法,在从节点都将镜像下载下来了,后面正常启动了

在这里插入图片描述

故障3

在进行验证服务的时候也出现了本地有这个nginx1.14版本的镜像还是回去远程拉取镜像(从节点也下载了)

解决办法:通过询问ai,说是nginx:1.14和nginx1.14是两个版本

然后去修改了pod需要的镜像版本就好了

kubectl edit deploy -n default

在这里插入图片描述

escribe的时候发现还是去远程拉取

解决方法,在从节点都将镜像下载下来了,后面正常启动了

[外链图片转存中…(img-PpqtBH03-1745074383624)]

故障3

在进行验证服务的时候也出现了本地有这个nginx1.14版本的镜像还是回去远程拉取镜像(从节点也下载了)

解决办法:通过询问ai,说是nginx:1.14和nginx1.14是两个版本

然后去修改了pod需要的镜像版本就好了

kubectl edit deploy -n default

在这里插入图片描述

相关文章:

  • 自由学习记录(56)
  • 算法期末复习
  • 任意文字+即梦3.0的海报设计Prompt
  • No package docker-ce available问题的解决
  • Python requests代理(Proxy)使用教程
  • 【ESP32】ESP-IDF开发 | 低功耗蓝牙开发 | GAP协议 + 设备扫描例程
  • 【PyTorch】colab上跑VGG(深度学习)数据集是 CIFAR10
  • Python 一等函数( 把函数视作对象)
  • AtCoder ABC402 A~D 题解
  • 五分钟学会如何基本使用JJWT!!!
  • Linux系统编程 day6 进程间通信mmap
  • 借助LlamaIndex实现简单Agent
  • Day2—3:前端项目uniapp壁纸实战
  • 深入理解 MCP 协议:开启 AI 交互新时代
  • 【人工智能】再谈探索AI幻觉及其解决方案(进一步整理)
  • 信创开发:开启信息自主创新、国产替代新时代
  • [Java微服务组件]注册中心P3-Nacos中的设计模式1-观察者模式
  • mysql控制单表数据存储及单实例表创建
  • 生物化学笔记:医学免疫学原理23 免疫检查点分子与肿瘤免疫治疗(PD-1抑制剂黑色素瘤)
  • 【进程信号】五、信号集操作接口详解
  • 德国男中音马蒂亚斯·格内:古典音乐的未来在亚洲
  • 韩国一战机飞行训练中掉落机炮吊舱和空油箱
  • 纪念沈渭滨︱初五沈大大  浓浓师生情
  • 14岁男孩膀胱内现52颗磁力珠,专家呼吁关注青春期少年心理健康
  • 东南亚三国行第四日|中柬“老朋友”密集会见,携手构建新时代全天候中柬命运共同体
  • 长三角议事厅|解码中国产业转移新范式:特征识别与韧性构建