使用kubeadm手动安装K8s

news2024/12/24 20:28:11

本次教程安装主要基于Ubuntu 22.04, 使用AWS EC2服务器来部署。当然,AWS也有自己的AWS K8s服务,不过需要花费小钱钱。虽然也不是说不行,但手动安装下也能熟悉K8s。

1. 安装Docker      

  • 卸载旧版本:

sudo apt-get remove docker docker-engine docker.io containerd runc
  • 设置仓库

        更新 apt 包索引
sudo apt-get update
        安装apt依赖包
sudo apt-get install \

    apt-transport-https \

    ca-certificates \

    curl \

    gnupg-agent \

    software-properties-common \

    gpg
        添加 Docker 的官方 GPG 密钥
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add –
        设置稳定版仓库
sudo add-apt-repository \

   "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/ \

   $(lsb_release -cs) \

   stable"
  • 安装 Docker Engine-Community

        更新 apt 包索引
sudo apt-get update
        安装最新版本的 Docker Engine-Community 和 containerd
sudo apt-get install docker-ce docker-ce-cli containerd.io
        测试 Docker 是否安装成功,输入以下指令,能够打印出版本信息则安装成功:
sudo docker version
        设置Docker镜像加速器和驱动程序
sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'

{  "exec-opts": ["native.cgroupdriver=systemd"],

   "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]

}

EOF

sudo tee /etc/docker/daemon.json <<-'EOF'

{  "exec-opts": ["native.cgroupdriver=systemd"]

}

EOF
        重启服务
sudo systemctl daemon-reload

sudo systemctl restart docker

2. 前置准备

  • 设置安全组

        在AWS上对每个节点设置同一安全组并在入站规则中进行绑定:

  • 设置主机名

         更改每台服务器的主机名

sudo hostnamectl set-hostname "k8s-master"
sudo hostnamectl set-hostname "k8s-node1"
sudo hostnamectl set-hostname "k8s-node2"
  • 关闭Swap分区

sudo sed -ri 's/.*swap.*/#&/' /etc/fstab

        查看分区是否关闭成功,如果没有输出则说明分区关闭成功

swapon -show

        若要临时关闭分区

swapoff -a
  • 添加主机名

        在每个节点上添加hosts(注意换成你自己服务器的IP地址

sudo nano /etc/hosts

        写入以下信息后退出

172.31.34.249 k8s-master

172.31.37.96 k8s-node1

172.31.47.59 k8s-node2
  • 桥接IPv4流量   

        将桥接的IPv4流量传递到iptables的链接,在每个节点添加如下的命令:

sudo nano /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

net.ipv4.ip_forward = 1

vm.swappiness = 0
        加载br_netfilter模块
sudo modprobe br_netfilter
        查看是否加载
lsmod | grep br_netfilter

        生效

sudo sysctl –system
  • 同步系统时间

        在每个节点添加时间同步

sudo apt -y install ntpdate

sudo ntpdate time.windows.com
  • 开启ipvs 在每个节点安装ipset和ipvsadm

sudo apt -y install ipset ipvsadm

        在每个节点执行如下脚本

sudo cat > /etc/sysconfig/modules/ipvs.modules <<EOF

        打开写入如下内容

#!/bin/bash

modprobe -- ip_vs

modprobe -- ip_vs_rr

modprobe -- ip_vs_wrr

modprobe -- ip_vs_sh

modprobe -- nf_conntrack

EOF

        如果没有该文件夹手动创建:

sudo mkdir -p /etc/sysconfig/modules

sudo chmod 777 /etc/sysconfig/modules/

sudo cat > /etc/sysconfig/modules/ipvs.modules <<EOF

        在ipvs.modules里写入以下内容:

#!/bin/bash

modprobe -- ip_vs

modprobe -- ip_vs_rr

modprobe -- ip_vs_wrr

modprobe -- ip_vs_sh

modprobe -- nf_conntrack

EOF
  • 授权、运行、检查是否加载:

sudo chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack

3. 安装kubeadm、kubelet和kubectl

注意:如果后期想要使用dashboard,请务必确认版本是否兼容,检查地址:

https://github.com/kubernetes/dashboard/releases

  • 下载用于 Kubernetes公共签名密钥-每个节点

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
  • 添加 Kubernetes apt 仓库-每个节点

echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
  • 更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本-每个节点

sudo apt-get update

sudo apt-get install -y kubelet kubeadm kubectl

sudo apt-mark hold kubelet kubeadm kubectl

        保持每个节点cgroup drvier和kubelet使用的cgroup drver一致

sudo nano /etc/sysconfig/kubelet

        添加以下内容

KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"

        设置为开机自启动

systemctl enable kubelet

4. 部署k8s的Master节点

        切换到根用户下执行

sudo su -

        # 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里需要指定阿里云镜像仓库地址

kubeadm init --apiserver-advertise-address=172.31.34.249 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.30.3 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16

如果初始遇到Kubeadm初始化报错:[ERROR CRI]: container runtime is not running:

 执行以下命令

rm -rf /etc/containerd/config.toml
systemctl restart containerd

根据提示信息,在Master节点上使用kubectl工具

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

5. 部署K8s的从(slave)节点

在k8s-node1和k8s-node2上分别执行以下命令:

          切换到根用户下执行

sudo su –
  • 添加主节点的token以及token证书

kubeadm join 172.31.34.249:6443 --token 1umscb.zbq9wf4tef99nxkx --discovery-token-ca-cert-hash sha256:e066e73b927432e599ba7b6634e449900bc6b4858e2979a9a4749f35e1dbf30d

 6.  部署CNI网络插件

 根据提示,在Master节点使用kubectl工具查看节点状态:

kubectl get nodes

如果执行后出现couldn't get current server API group list: Get "https://xxxx /api?timeout=32s":  dial tcp xxxxxxx: connect: connection refused 错误
则没有永久关闭交换分区情况下中途退出了

解决方式:重新执行一遍关闭命令即可

sudo swapoff -a

sudo systemctl restart kubelet
  • Master节点部署CNI网络插件

sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  • 查看部署CNI网络插件进度:

kubectl get pods -n kube-system
  • 再次在Master节点使用kubectl工具查看节点状态:

kubectl get nodes

这里可能会有问题,如果master节点上kube-apiserve监听的6443端口时而正常时而异常

刚部署完正常后面一直出现如下错误

The connection to the server xxxxx:6443 was refused - did you specify the right host or port?

查看CNI插件部署进度也出现CrashLoopBackOff错误的话

 

执行以下命令:

containerd config default | tee /etc/containerd/config.toml

sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml 

service containerd restart

service kubelet restart 

7. 查看集群

查看集群健康状态:

kubectl get cs

kubectl cluster-info

部署成功 !!!(^-^)V

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

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

相关文章

数据结构与算法 第12天(排序)

一、排序方法分类 按照数据存储介质&#xff1a; 内部排序&#xff1a;数据量不大、数据在内存&#xff0c;无需内外存交换数据 外部排序&#xff1a;数据量较大、数据在外存(文件排序) 将数据分批调入内存排序&#xff0c;结果放到外存 按照比较器个数&#xff1a; 串行…

微带结环行器仿真分析+HFSS工程文件

微带结环行器仿真分析HFSS工程文件 工程下载&#xff1a;微带结环行器仿真分析HFSS工程文件 我使用HFSS版本的是HFSS 2024 R2 参考书籍《微波铁氧体器件HFSS设计原理》和视频微带结环行器HFSS仿真 1、环形器简介 环行器是一个有单向传输特性的三端口器件&#xff0c;它表明…

大数据之Flink(六)

17、Flink CEP 17.1、概念 17.1.1、CEP CEP是“复杂事件处理&#xff08;Complex Event Processing&#xff09;”的缩写&#xff1b;而 Flink CEP&#xff0c;就是 Flink 实现的一个用于复杂事件处理的库&#xff08;library&#xff09;。 总结起来&#xff0c;复杂事件处…

IM项目运行说明

注册登录以及消息列表界面&#xff1a; 联系人界面&#xff1a;新的好友/群聊列表/好友列表 界面&#xff1a; 群聊界面&#xff1a;群聊不想支持发视频&#xff0c;因为非技术上的麻烦原因。。。 图片可以下载&#xff1a; 私聊可以发视频&#xff1a; 私聊支持服务器消…

android kotlin 数据类 data class

1、Kotlin中的数据类主要用于保存数据。对于每个数据类&#xff0c;编译器会自动生成其他成员函数&#xff0c;允许您将实例打印到可读输出、比较实例、复制实例等。 中文文档&#xff1a; https://book.kotlincn.net/text/data-classes.html 2、新建文件dataClassTest.kt 3…

vue解决“用户代理样式表“边距问题

一、问题 当我们制作页面的时候&#xff0c;会发现页面会多出边距 打开控制台发现&#xff0c;是使用了“用户代理样式表” 这个无法去除&#xff0c;但是又觉得页面有间隙不好看&#xff0c;那怎么去除间隙&#xff1f;&#xff1f; 二、解决 将要写的东西放在div里&#x…

大模型笔记02--基于fastgpt和oneapi构建大模型应用平台

大模型笔记02--基于fastgpt和oneapi构建大模型应用平台 介绍部署&测试部署fastgptoneapi服务部署向量模型m3e和nomic-embed-text测试大模型 注意事项说明 介绍 随着大模型的快速发展&#xff0c;众多IT科技厂商都开发训练了各自的大模型&#xff0c;并提供了各具特色的AI产…

专题二_滑动窗口_算法专题详细总结

目录 滑动窗口&#xff0c;引入&#xff1a; 滑动窗口&#xff0c;本质&#xff1a;就是同向双指针&#xff1b; 1.⻓度最⼩的⼦数组&#xff08;medium&#xff09; 1.解析&#xff1a;给我们一个数组nums&#xff0c;要我们找出最小子数组的和target&#xff0c;首先想到的…

arduino ide安装详细步骤

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; Arduino IDE 是一个专为编程 Arduino 微控制器设计的集成开发环境&#xff0c;使用起来非常方便。下面将介绍如何在不同平台上安装 Arduino IDE 的详细步骤&#xff0c;包括 Windows、Mac 和 Linux 系统。 …

计算机毕业设计选题推荐-乐器推荐系统-乐器商城-Java/Python项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

《Cloud Native Data Center Networking》(云原生数据中心网络设计)读书笔记 -- 11部署BGP

本章应有助于回答以下问题: 核心的配置概念是什么?如何为 Clos 网络配置 BGP ?无编号的 BGP 如何工作?如何配置 BGP 与主机上的 BGP 发言者 (例如 Kube-router) 建立对等关系?如何配置 BGP 以对网络进行计划维护? 核心的 BGP 配置概念 全局BGP 配置&#xff0c;包含: r…

了解开源消息代理RabbitMQ

1.RabbitMQ 是什么&#xff1f; RabbitMQ是一个消息代理:它接受并转发消息。你可以把它想象成邮局:当你把要寄的邮件放进邮箱时&#xff0c;你可以确定邮递员最终会把邮件送到收件人那里。在这个比喻中&#xff0c;RabbitMQ是一个邮筒、一个邮局和一个邮递员。RabbitMQ和邮局之…

JavaScript 循环分支语句-for循环

先n1,判断n是否<10,满足条件&#xff0c;n1&#xff0c;输出n&#xff0c;再次判断n是否<10&#xff0c;循环.......... <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Comp…

SQL进阶技巧:截止当前批次前的批次量与订单量 | 移动窗口问题

目录 0 场景描述 1 数据准备 2 问题分析 3 小结 0 场景描述 表A有如下字段,user id(用户ID),batch id(批次ID),order id(订单ID),create time(创建时间),同一个用户ID下有多个批次,同一个批次下有多个订单ID,相同批次ID的创建时间是相同的,创建时间精确到了秒。 统计,截…

如何通过ip命令修改网卡名?(ip link set en1p0f0 name eth0)

快速提取 ip link set enp1s0f0 down ip link set enp1s0f0 name eth0 ip link set enp1s0f0 up ifconfig eth0背景 ifconfig命令不支持修改网卡名字。可以使用ip link进行修改。 从Linux 4.9版本开始&#xff0c;ip link 命令支持一个 set 子命令&#xff0c;可以用来修改接…

iPhone16全系采用A18处理器,不再区别对待,市场压力所致

iPhone16即将在3天后发布&#xff0c;外媒基本确定今年的iPhone16将全系采用A18处理器&#xff0c;与此前的基本款采用上一代处理器有很大的差异&#xff0c;这对于苹果用户来说无疑是一大利好&#xff0c;也将有助于推动iPhone16的销售。 此前的iPhone14和iPhone15&#xff0c…

[Redis] Redis基本命令与数据类型+单线程模型

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

【springboot】使用AOP

目录 1. 添加依赖2. 创建切面类1. 创建切面类2. 切点表达式3. 增强方法 3. 开启AOP4. 创建控制类5. 测试 1. 添加依赖 <!-- AOP依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop<…

【iOS】MVC入门

【iOS】MVC模式的学习 文章目录 【iOS】MVC模式的学习前言MVC模式概念MVC的交流模式MVC的一个简单实践Model层View层Controller层 MVC的优点与缺点总结 前言 笔者在暑假的学习中完成了一些小项目&#xff0c;这些小项目中间有时候出现了一个小bug都要寻找很久&#xff0c;而且会…

前端学习笔记-Web APls篇-05

Bom操作 1.Window对象 1.1BOM(浏览器对象模型&#xff09; BOM(Browser Object Model ) 是浏览器对象模型 window对象是一个全局对象&#xff0c;也可以说是JavaScript中的顶级对象像document、alert()、console.log()这些都是window的属性&#xff0c;基本BOM的属性和方法都…