如何在虚拟机中安装部署K8S?

教程参考:centos7安装k8s 1.28版本,基于科学-CSDN博客

环境准备:

准备三台机器,都做以下操作,或者只准备一个机器,最后再克隆两台。

  yum:

        换源,这是阿里云的源

sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

        然后清缓存,建立元数据

        yum clean all

        yum makecache

# yum更新

        yum update -y

#这里要按下tab键补全

        yum install -y bash-completio

#下载wget

        yum install -y wget

#下载网络工具(不是很清楚这里下这个的目的,可能是为了后面k8s之间网络通信使用

        yum install -y net-tools

#下载GCC

        yum install -y gcc

虚拟机配置:

关闭防火墙:

systemctl stop firewalld
systemctl disable firewalld
systemctl is-enabled firewalld

同步时间:(这里我报错了,但是在三个虚拟机设置的时候,特意调的一样的时间,所以这三个虚拟机时间是同步的)

sudo yum -y install ntpdate
sudo ntpdate ntp1.aliyun.com
sudo systemctl status ntpdate
sudo systemctl start ntpdate
sudo systemctl status ntpdate
sudo systemctl enable ntpdate

关闭swap:

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

关闭selinux

getenforce
cat /etc/selinux/config
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
cat /etc/selinux/config

安装containerd和K8S

配置K8S环境

内核参数:

cat > /etc/sysctl.d/Kubernetes.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1   #当通过桥接网络接收到IPV6时,通过ip6tables的规则转发
net.bridge.bridge-nf-call-iptables = 1 #当通过桥接网络接收到IPV4时,通过iptables的规则转发
net.ipv4.ip_forward = 1#允许ipv4转发,即使目标机不是本机
vm.swappiness = 0#尽可能地少使用swap
EOF

# 使配置生效
sysctl --system

yum -y install conntrack ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git
# 相关内核模块
cat > /etc/modules-load.d/ipvs.conf <<EOF
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
EOF
# 启动服务
systemctl enable --now systemd-modules-load

ip_vs,ip_vs_rr,ip_vs_wrr,ip_vs_sh 是IPVS相关的内核模块。它们提供了不同的负载均衡算法(round-robin,加权轮询,最短任务优先)。
nf_conntrack 和 nf_conntrack_ipv4 是用于网络连接跟踪的内核模块,这在防火墙和NAT中非常重要。
linux kernel 4.19版本已经将nf_conntrack_ipv4 更新为 nf_conntrack

(看不是很懂,但是这里原帖子也有,希望别人能看懂)

安装containerd

这里开始使用科学上网,如果在下面的步骤你发现。

yum -y install yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 配置 containerd
cat >>/etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
# 立刻加载 overlay模块
modprobe overlay
# 立刻加载 br_netfilter模块
modprobe br_netfilter
# 安装containerd
yum install containerd.io -y

mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
# 使用systemd管理cgroups
sed -i '/SystemdCgroup/s/false/true/g' /etc/containerd/config.toml

# 启动containerd

systemctl enable containerd

systemctl start containerd

安装K8S

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/repodata/repomd.xml.key
EOF

#查看一下有没有进去

cat /etc/yum.repos.d/kubernetes.repo

安装k8s并启动

yum list kubelet --showduplicates |grep 1.28

# 开始安装   这篇文档原作者写下时,最新版本为1.28.2  ,我也是安装的该版本
yum -y install kubectl-1.28.2 kubelet-1.28.2 kubeadm-1.28.2

# 启动
systemctl enable kubelet
systemctl start kubelet

#查看有没有启动

systemctl status kubelet

下面就是对于虚拟机的一些额外的配置:

修改名称:

# 查看主机名
hostnamectl
# 修改主机名
hostnamectl set-hostname xxxx    这里我有三台节点,一个master,两个worker,主机叫k8s-master,两个worker就叫worker1 worker2

给虚拟机固定了IP:

#找到ens33文件,做以下配置:

 vi /etc/sysconfig/network-scripts/ifcfg-ens33

#静态IP

BOOTPROTO=static   

#允许上网

ONBOOT=yes   

#固定IP,一台机器一个IP,我一个是128,一个是129,一个是130

IPADDR=192.168.157.128 

#DNS配置

DNS1=114.114.114.114
DNS2=8.8.8.8

#设置网关

GATEWAY=192.168.157.2

修改hosts文件:

#将ip和主机名称对应着写,加到hosts中,三台机器都加(这里IP改为自己的IP):

192.168.157.128 k8s-master
192.168.157.129 worker1
192.168.157.130 worker2

好了,到这里如果只有一台虚拟机的可以进行克隆了,在克隆出来以后,不要一起打开,一个个打开,分别修改一下ens33文件里的ip之后再一起打开,还要修改hostname为hosts文件里的名字。

开始部署master节点

#查看所需要的镜像

kubeadm config images list --kubernetes-version=v1.28.2

#提前下载镜像,不要在init初始化的时候等待太长时间:

kubeadm config images pull

# 初始化(IP改为自己的)

kubeadm init --kubernetes-version=1.28.2 \

--apiserver-advertise-address=192.168.157.128 \

--pod-network-cidr=10.244.0.0/16

这里会返回一个这样的信息

kubeadm join 192.168.157.128:6443 --token mu7mpy.8xxxxxxxxs --discovery-token-ca-cert-hash sha256:1d5b4b3b3493bxxxxxxxf2a1bb8d1250886xxxxxxxxb92

等初始化完了进行认证配置:

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

检查一下是否起来:

kubectl get node
kubectl get pods -A
kubectl get pods -n kube-system

当时在这里时,master是notready的状态,这是正常的,这里需要加入calico插件。

#先获取他的配置文件

wget https://docs.projectcalico.org/manifests/calico.yaml

#将其中的CALICO_IPV4POOL_CIDR修改,这里注意#

            - name: CALICO_IPV4POOL_CIDR
              value: "10.244.0.0/16"

找到下面这个name,并在其下面加入网卡配置

- name: CLUSTER_TYPE

  value: "k8s,bgp"

# 下面添加

- name: IP_AUTODETECTION_METHOD

  value: "interface=ens33"

然后部署calico:

kubectl apply -f calico.yaml
# 检查
kubectl get pods -n kube-system

在worker配置

将刚刚获取到的

kubeadm join 192.168.157.128:6443 --token mu7mpy.8xxxxxxxxs --discovery-token-ca-cert-hash sha256:1d5b4b3b3493bxxxxxxxf2a1bb8d1250886xxxxxxxxb92

这种的数据在两台worker中使用

配置密钥:

mkdir ~/.kube cp /etc/kubernetes/kubelet.conf ~/.kube/config

#查看node

kubectl get nodes

这时候就会出现两个worker

部署一个nginxapiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2 # 告知 Deployment 运行 2 个与该模板匹配的 Pod
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.27.0
        ports:
        - containerPort: 80
#进行测试一下:

kubectl apply -f deployment.yaml

#查看一下:

kubectl get pod

遇到的问题:

签名认证的问题:

有一个在下载的时候说什么公钥签名有问题:

解决办法:

打开相对应的yum源,找到相对应的repo,比如你是在下载kube时出现问题的,就找到kubexxxx.repo,将里面的gpgcheck改为0,就不会出现这个错误。

SSL未连接问题:

解决办法:

科学上网

TCP connection  reset by peer

gitclone时出现这个问题就:git clone错误: TCP connection reset by peer_git clone tcp connection reset by peer-CSDN博客

如果是yum install时:

其他的都可以yum install,就某个不可以时:科学上网,

如果都不可以,请更换yum源。

部署CALICO时,报错error:calico_node  is not empty

calico.yaml文件里的

- name: CALICO_IPV4POOL_CIDR
              value: "10.244.0.0/16"

这里格式要正确,缩进要和其他的保持一致,而且这个CALICO_IPV4POOL_CIDR一开始是注掉的,要将#删掉

POD一直Peding状态:

#查看日志:#(这里xxxx是名称,可以通过 kubectl get pod -n kube-system 查看

kubectl logs  -n kube-system xxxxx

#如果这个命令没有出现任何返回也没有报错,那就使用:

journalctl -xefu kubelet

查看日志,我这里报错一直是cni plugin 出现问题,这里就是calico安装部署有问题,需要重新部署一下:

kubectl delete -f calico.yaml

按照上面的教程部署好以后再重新部署。

lookup localhost on 114.114.114.114:53: no such host

出现这个lookup localhost on 114.114.114.114:53: no such host或者是8.8.8.8有问题。

解决办法:

查看hosts文件,缺少下面的装上,然后重启电脑

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

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

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

相关文章

详解Asp.Net Core管道模型中的五种过滤器的适用场景与用法

1. 前言 在 ASP.NET Core 中&#xff0c;过滤器是一种用于对请求管道进行前置或后置处理的组件。它们可以在请求处理的不同阶段干预和修改请求和响应&#xff0c;以实现一些通用的处理逻辑或功能增强。 ASP.NET Core 的管道模型由多个中间件组成&#xff0c;而过滤器是这个模…

kafka及异步通知文章上下架

1)自媒体文章上下架 需求分析 2)kafka概述 消息中间件对比 特 性 ActiveMQ RabbitMQ RocketMQ Kafka 开 发 语 言 java erlang java scala 单 机 吞 吐 量 万级 万级 10万级 100万级 时 效 性 ms us ms ms级以内 可 用 性 高&#xff08;主从&#xff0…

如何从 Bak 文件中恢复 SQL数据库?(3种方法)

如何从 .bak 文件恢复 SQL数据库&#xff1f; 在数据库管理和维护过程中&#xff0c;数据的安全性和完整性至关重要。备份文件&#xff08;.bak 文件&#xff09;是 SQL Server 中常用的数据库备份格式&#xff0c;它包含了数据库的完整副本&#xff0c;用于在数据丢失、系统故…

4. 第一个3D案例—创建3D场景

入门Three.js的第一步&#xff0c;就是认识场景Scene、相机Camera、渲染器Renderer三个基本概念&#xff0c;接下来&#xff0c;咱们通过三小节课&#xff0c;大家演示“第一个3D案例”完成实现过程。 学习建议&#xff1a;只要你能把第一个3D案例搞明白&#xff0c;后面学习就…

SEO之网站结构优化(十四-内部链接及权重分配3)

初创企业搭建网站的朋友看1号文章&#xff1b;想学习云计算&#xff0c;怎么入门看2号文章谢谢支持&#xff1a; 1、我给不会敲代码又想搭建网站的人建议 2、“新手上云”能够为你开启探索云世界的第一步 博客&#xff1a;阿幸SEO~探索搜索排名之道 7、锚文字分布及变化 前面…

部署 Web 项目到 Linux,可以使他人也访问项目的方法

目录 一、环境配置 二、建构项目并打包 三、上传Jar包到服务器, 并运行 3.1 上传Jar包 3.2 运行 jar 包 3.3 开放端口号 四、其他问题 4.1 运行异常问题 4.2 杀掉进程 五、总结 一、环境配置 如果本地项目是SpringBoot项目&#xff0c;使用的数据库是MySQL&#xff…

APP 数据抓取 - Charles 抓包工具的使用(Charles 端口配置、CA 证书配置、Charles Android 模拟器配置)

前言说明 此文章是我在学习 Charles APP 抓包时编写&#xff0c;内容都是亲测有效&#xff0c;文章内容也有参考其他人&#xff0c;参考文章如下&#xff1a; Android 手机使用 charles 抓 https 请求&#xff08;保姆级教程&#xff09;网易 mumu 模拟器安装下载 charles 的…

计算机网络(八股文)

这里写目录标题 计算机网络一、网络分层模型1. TCP/IP四层架构和OSI七层架构⭐️⭐️⭐️⭐️⭐️2. 为什么网络要分层&#xff1f;⭐️⭐️⭐️3. 各层都有那些协议&#xff1f;⭐️⭐️⭐️⭐️ 二、HTTP【重要】1. http状态码&#xff1f;⭐️⭐️⭐️2. 从输入URL到页面展示…

2024年9月3日嵌入式学习

数据结构 1定义 一组用来保存一种或者多种特定关系的数据的集合&#xff08;组织和存储数据&#xff09; 程序的设计&#xff1a;将现实中大量而复杂的问题以特定的数据类型和特定的存储结构存储在内存中&#xff0c; 并在此基础上实现某个特定的功能的操作&am…

「Python程序设计」条件控制:if-elif-else语句

我们在进行程序设计的过程中&#xff0c;基本上遵循的过程是&#xff0c;找出变量和常量&#xff0c;通过python编程语言&#xff0c;设置变量和常量&#xff0c;以及考虑是否需要赋予初始值。 设计变量和常量&#xff0c;其实就是为了模拟和计算我们的现实世界中&#xff0c;…

学习笔记--Docker

安装 1.卸载旧版 首先如果系统中已经存在旧的Docker&#xff0c;则先卸载&#xff1a; yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine 2.配置Docker的yum库 首先要安…

IntelliJ IDEA 自定义字体大小

常用编程软件自定义字体大全首页 文章目录 前言具体操作1. 打开设置对话框2. 设置编辑器字体3. 设置编译软件整体字体 前言 IntelliJ IDEA 自定义字体大小&#xff0c;统一设置为 JetBrains Mono 具体操作 【File】>【Settings...】>【Editor】>【Font】 统一设置…

C++:list篇

前言: 观看C的list前需要对链表有一些了解&#xff0c;如C语言的链表结构。本片仅介绍list容器中常用的接口函数概念以及使用。 list的概念&#xff1a; 简而言之&#xff0c;C的list是一个双向带哨兵位的链表容器模板 list的构造&#xff1a; 1.list():默认构造 2.li…

认识git和git的基本使用,本地仓库,远程仓库和克隆远程仓库

本地仓库 #安装git https://git-scm.com/download/win #git是什么&#xff1f;有什么用&#xff1f; git相当于一个版本控制系统&#xff0c;版本控制是一种记录一个或若干文件内容变化&#xff0c;以便将来查阅特定版本修订情况的系统。 作用: 记录&#xff08;项目&#…

物联网(IoT)支持的小型水处理厂实时硬件在环(HIL)仿真

这篇论文的标题是《Real-Time Hardware-In-The-Loop Simulation of IoT-Enabled Mini Water Treatment Plant》&#xff0c;作者是 Mohamad Taib Miskon 等人&#xff0c;发表在 2024 年 IEEE 自动控制与智能系统国际会议&#xff08;I2CACIS&#xff09;上。以下是该论文的主要…

【Agent】Agent Q: Advanced Reasoning and Learning for Autonomous AI Agents

1、问题背景 传统的训练Agent方法是在静态数据集上进行监督预训练&#xff0c;这种方式对于要求Agent能够自主的在动态环境中可进行复杂决策的能力存在不足。例如&#xff0c;要求Agent在web导航等动态设置中执行复杂决策。 现有的方式是用高质量数据进行微调来增强Agent在动…

vector 常见函数

目录 一.vector 构造函数 二 . Iterators 迭代器&#xff08;random access iterator&#xff09; 三.Capacity: 空间 3.1 resize 3.2 reserve 四.Element access: 元素访问 方式 4.1 operator[] 类似于数组的 [] 4.2 front 和back 五.Modifiers: 六.vector 的 二…

18、Gemini-Pentest-v2

难度 中 目标 root权限 一个flag 靶机启动环境为VMware kali 192.168.152.56 靶机 192.168.152.63 信息收集 web测试 访问80端口 上面介绍了一下这个系统是一个内部系统&#xff0c;让员工查看他们的个人资料还可以导出为PDF 页面还有一个链接是UserList可以访问但是页面什…

ES数据写入过程

1. 写入请求 当一个写入请求&#xff08;如 Index、Update 或 Delete 请求&#xff09;通过REST API发送到Elasticsearch时&#xff0c;通常包含一个文档的内容&#xff0c;以及该文档的索引和ID。 2. 请求路由 协调节点&#xff1a;首先&#xff0c;请求会到达一个协调节点…

微服务日常总结

1.当我们在开发中&#xff0c;需要连接多个库时&#xff0c;可以在yml中进行配置。 当在查询的时候&#xff0c;跨库时&#xff0c;需要通过DS 注解来指定&#xff0c;需要yml配置需要保持一致。 2. 当我们想把数据存入到clob类型中&#xff0c;需要再字段 的占位符后面加上j…