ubuntu系统 kubeadm方式搭建k8s集群

服务器环境与要求:

三台服务器

k8s-master01 192.168.26.130     操作系统: Ubuntu20.04

k8s-woker01 192.168.26.140      操作系统: Ubuntu20.04

k8s-woker02 192.168.26.150      操作系统: Ubuntu20.04

最低配置:2核 2G内存 20G硬盘

 1、环境准备:(所有服务器都需要操作

1、时间同步

timedatectl set-timezone Asia/Shanghai

sudo apt install ntpdate

 sudo ntpdate ntp.ubuntu.com

2、固定IP

Ubuntu系统设置静态固定IP保姆级教程_ubuntu 设置固定ip-CSDN博客

可按照本人上面的文档来操作

3、修改主机名

sudo hostnamectl set-hostname k8s-master

sudo reboot

4、 关闭swap分区

就是说ha-1和ha-2不需要安装

临时禁用:

sudo swapoff /swapfile

永久禁用:

vim /etc/fstab               打开文件按照下图注释一行。

使用 free -m 命令来查看确认交换分区已经被禁用

5、关闭防火墙

sudo systemctl disable --now ufw

​6、修改改为国内镜像源地址

备份配置文件

sudo cp -a /etc/apt/sources.list /etc/apt/sources.list.bak

修改镜像源为华为云镜像

sudo sed -i "s@http://.*archive.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list

sudo sed -i "s@http://.*security.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list

7、主机名与IP地址解析配置

cat >> /etc/hosts << EOF
192.168.26.130 k8s-master01
192.168.26.140 k8s-worker01
192.168.26.150 k8s-worker02
EOF

配置内核转发及网桥过滤:

cat > /etc/modules-load.d/k8s.conf << EOF
overlay
br_netfilter
EOF

加载配置:

modprobe overlay

modprobe br_netfilter

查看是否加载:

lsmod |grep overlay

lsmod |grep br_netfilter

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

让配置生效: 

sysctl -p /etc/sysctl.d/k8s.conf

查看是否加载生效

lsmod |grep br_netfilter

8、安装ipset和ipvsadm

apt install ipset ipvsadm

配置 ipvsadm 模块加载方式

cat > /etc/modules-load.d/ipvs.conf << EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF

写成一个脚本文件

cat << EOF | tee ipvs.sh
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF

授权运行检查:

chmod 755 /etc/modules-load.d/ipvs.conf && bash /etc/modules-load.d/ipvs.conf && lsmod | grep -e ip_vs -e nf_conntrack

9、容器运行时containetd

wget https://github.com/containerd/containerd/releases/download/v1.7.15/cri-containerd-1.7.15-linux-amd64.tar.gz

解压并查看

tar xf cri-containerd-1.7.15-linux-amd64.tar.gz -C /

which containerd

10、containerd配置文件生成并修改

创建文件:

mkdir /etc/containerd

生成配置文件:

containerd config default > /etc/containerd/config.toml

修改配置文件将3.8改为3.9

或者改为阿里云:registry.aliyuncs.com/google_containers/pause:3.9

vim /etc/containerd/config.toml

或者改为阿里云镜像和上图二选一即可

配置镜像加速

修改Config.toml文件vim /etc/containerd/config.toml。如下:

创建上图相应的文件目录

mkdir -p /etc/containerd/certs.d/docker.io

配置加速

cat > /etc/containerd/certs.d/docker.io/hosts.toml << EOF
server = "https://docker.io"
[host."https://x46sxvnb.mirror.aliyuncs.com"]
  capabilities = ["pull", "resolve"]
EOF

启动并设置开机自启

systemctl enable --now containerd

查看版本:

containerd --version

2、集群部署(所有服务器都需要操作

1、下载用于kubernetes软件包仓库的公告签名密钥

k8s社区源(和下面的阿里云源二选一即可

创建目录:

sudo mkdir -p /etc/apt/keyrings/

下载密钥

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

阿里云源

创建目录:

sudo mkdir -p /etc/apt/keyrings/

下载密钥

curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

k8s社区(和下面的阿里云源二选一即可

添加kubernetes apt仓库

echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

阿里云

添加kubernetes apt仓库

echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list

更新仓库

apt-get update

查看软件列表:

apt-cache policy kubeadm

安装指定版本:

sudo apt-get install -y kubelet=1.30.0-1.1 kubeadm=1.30.0-1.1 kubectl=1.30.0-1.1

修改kubelet配置

vim /etc/sysconfig/kubelet 

KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"

设置为开机自启

systemctl enable kubelet

锁定版本,防止后期自动更新。

sudo apt-mark hold kubelet kubeadm kubectl

解锁版本,可以执行更新

sudo apt-mark unhold kubelet kubeadm kubectl

3、集群初始化:(k8s-master01节点操作)

查看版本

kubeadm version

生成配置文件:

kubeadm config print init-defaults > kubeadm-config.yaml

按照下图修改配置文件:

vim kubeadm-config.yaml

apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
localAPIEndpoint:
  advertiseAddress: 192.168.26.130
  bindPort: 6443
nodeRegistration:
  criSocket: unix:///var/run/containerd/containerd.sock
  imagePullPolicy: IfNotPresent
  name: k8s-master01
  taints: null

---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
apiServer:
  timeoutForControlPlane: 4m0s
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kubernetesVersion: 1.30.0
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
  podSubnet: 10.244.0.0/16
scheduler: {}

---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd

查看镜像

kubeadm config images list --config kubeadm-config.yaml

下载镜像

kubeadm config images pull --config kubeadm-config.yaml

如果出现报错镜像拉取不下来如下图错误

解决办法(我们在阿里云仓库进行拉取镜像)

kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers

查看镜像

crictl images

初始化集群

kubeadm init --config kubeadm-config.yaml

初始完成后按照反馈的命令执行

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

将下图命令完整复制到我们的k8s-worker节点执行此命令,将节点加入集群

k8s-worker01和k8s-worker02节点执行上图复制的命令

kubeadm join 192.168.26.130:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:ac3967ab782b460fb804e29fdceb84c5226df0b656ff86e434be44fa49152029

k8s-master01节点查看是否有工作节点加入

kubectl get nodes

kubectl get pods -n kube-system

但是从上图我们可以看到集群状态是NotReady是因为我们缺少网络插件所以接下来我们需要安装网络插件

4、网络插件安装部署(k8s-master01节点操作)

访问calico的官网查看

Quickstart for Calico on Kubernetes | Calico Documentation (tigera.io)

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/tigera-operator.yaml

查看是否运行:

 kubectl get pods -n tigera-operator

下载calico文件 建议使用wget 复制官网的链接进行下载,因为官网的命令是直接下载运行的,我们需要对文件先进行修改在运行,

wget https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/custom-resources.yaml

修改文件

注我们在kubeadm-config.yaml文件中添加的pod网段是10.244.0.0/16所以我们要修改为一样的

vim custom-resources.yaml

启动

 kubectl create -f custom-resources.yaml

查看命名空间

kubectl get ns

查看命名空间中运行的pods 如果没有全部起来稍微等一下,应该是在创建中,如果网络慢可能要半个小时。

kubectl get pods -n calico-system

查看命名空间中运行的pods

kubectl get pods -n kube-system

然后再次查看我们的集群状态:

kubectl get nodes

5、创建nginx测试集群可用性(k8s-master操作

vim nginx.yaml

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginxweb
spec:
  selector:
    matchLabels:
      app: nginxweb1
  replicas: 2
  template:
    metadata:
      labels:
        app: nginxweb1
    spec:
      containers:
      - name: nginxwebc
        image: nginx:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80

---
apiVersion: v1
kind: Service
metadata:
  name: nginxweb-service
spec:
  externalTrafficPolicy: Cluster
  selector:
    app: nginxweb1
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 30080
  type: NodePort

启动创建容器

kubectl apply -f nginx.yaml

查看是否创建成功

kubectl get deployment

kubectl get pods

kubectl get svc

在浏览器访问集群中任何一台服务器的IP加30080端口都可以访问到我们的nginx


以上步骤说明我们的k8s集群部署已经完成了

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

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

相关文章

斯坦福 AI 团队被曝抄袭中国大模型开源成果;Zoom 创始人谈视频会议未来丨 RTE 开发者日报 Vol.218

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「…

2.29G大小Win 11系统来了,老爷机也能焕发第二春

Win 11 推出近三年以来微软大搞特搞的份额入侵计划&#xff0c;以目前情况来看算是彻底失败了。 国外知名机构 statcounter 最近公布了 4 月份 Windows 各版本份额调查结果。 其中显示&#xff0c;Win 11 占比 26% 左右&#xff0c;相较 2 月份 28% 反而开起了倒滑车。 来源&…

技术管理革新:三品PLM在电子电气行业的应用

随着科技的不断进步和市场需求的日益增长&#xff0c;电子电气行业正经历着前所未有的变革。产品生命周期的缩短和更新换代的加速&#xff0c;对企业的产品研发管理提出了更高的要求。在这样的背景下&#xff0c;产品生命周期管理PLM解决方案应运而生&#xff0c;旨在帮助电子电…

基于数据帧进行SQL查询

本教程将通过一个具体的案例来演示如何在Spark SQL中基于数据帧进行SQL查询。我们将从创建临时视图开始&#xff0c;然后使用spark对象执行SQL查询&#xff0c;包括投影、选择、统计和排序等操作。 具体步骤如下&#xff1a; 基于数据帧创建临时视图&#xff1a; 命令格式&…

深度学习笔记:1.anaconda安装

Download Anaconda Distribution | Anaconda 双击安装 设置环境变量 anaconda常用命令大全&#xff08;保姆级别建议收藏)-CSDN博客https://blog.csdn.net/m0_64892604/article/details/128806043?ops_request_misc%257B%2522request%255Fid%2522%253A%252217174671831680018…

This Python interpreter is in a conda environment

今天在查看python版本的时候出现警告 Warning: This Python interpreter is in a conda environment, but the environment has not been activated. Libraries may fail to load. To activate this environment please see https://conda.io/activation 这个警告意味着你…

2024年6月4日13:48:07-3.8功能说明1.保存草稿2.支持自定义SKU销售规格3.全网爆款企划支持一键提交

创建产品产品保存草稿、自定义编辑规格功能使用手册 尊敬的淘工厂商家&#xff1a; 淘工厂近两个月收到很多商家对淘工厂发品&#xff08;上品&#xff09;效率提升的改进建议&#xff0c;淘工厂本月将针对产品发布页的发品效率提升上线一系列改进功能&#xff0c;希望能加速…

设计循环队列---力扣622

1、题目 1.1基础设置与讲解 循环队列&#xff0c;即固定长度的队列&#xff0c;可以想象成一个环形队列 就类似于这种队列&#xff0c;队尾指针后会有一个空位&#xff0c;用于控制判断队列为空还是为满&#xff1b; typedef int MyDataType;typedef struct {MyDataType fron…

CTF-Misc学习笔记

这里写目录标题 Misc准备古典密码凯撒密码棋盘密码ADFGX密码培根密码栅栏密码摩斯密码猪圈密码键盘密码QWE编码ook编码BrainFUck密码aaencode密码jsfuckbase全家桶URL编码十六进制二进制 ascii码 2.图片隐写分析LSP 隐写实操图片修改宽高实操 零宽度字符隐写音频隐写分析与实操…

新项目来了,JDK 17和JDK 21 该如何选择?

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

anaconda创建虚拟环境并配置到JupyterNotebook

anaconda创建虚拟环境并配置到JupyterNotebook 一、查看当前环境二、创建虚拟环境三、配置JupyterNotebook内核一、查看当前环境 如上图所示,在开始菜单中扎到Anaconda Prompt(Anaconda)并打开。在命令行窗口中输入命令conda info -e或者conda env list查看已安装的虚拟环境,…

开放式耳机哪个品牌质量比较好?五大热门品牌PK推荐

作为一名热爱音乐的DJ爱好者&#xff0c;我深知一款适合DJ使用的开放式耳机应该具备哪些特点。最近&#xff0c;我深入评测了几款热门开放式耳机&#xff0c;从音质、舒适度、耐用性到混音功能等方面进行了全面评估。今天&#xff0c;我想为大家分享我的评测结果&#xff0c;希…

网易云音乐格式在线转换

应用分享&#xff1a;众所周知网易云下载的格式为 .NCM&#xff0c;只能在网易云音乐里播放。 今天提供在线转换为MP3格式 NCM TO MP3&#xff0c;无需安装&#xff0c;转换后就能在任意播放器使用。 使用地址&#xff1a; https://ncm.worthsee.com/ 网络研究观 数据泄露…

WannaMine4.0病毒应急处置

一、前言 某日&#xff0c;通过流量监测设备和EDR发现挖矿请求告警&#xff0c;并存在长期445端口扫描。 二、病毒排查 上机排查&#xff0c;发现该服务器存在WannaMine4.0病毒&#xff0c;通过网上文章了解&#xff0c;如果请求挖矿域名遭安全设备拦截&#xff0c;会导致挖矿…

618有哪些好物值得入手?618四款必囤好物清单分享!

对于钟情于科技新品和数码产品的朋友们而言&#xff0c;每次大型购物节都是一个值得把握的机会&#xff0c;而即将来临的618购物节&#xff0c;更是让众多数码爱好者满怀期待。在此&#xff0c;我细心挑选了几款数码商品&#xff0c;希望能为您的购物清单增添几分灵感。让我们一…

系统架构设计师【第18章】: 安全架构设计理论与实践 (核心总结)

文章目录 18.1 安全架构概述18.1.1 信息安全面临的威胁18.1.2 安全架构的定义和范围18.1.3 与信息安全相关的国内外标准及组织 18.2 安全模型18.2.1 状态机模型18.2.2 Bell-LaPadula模型18.2.3 Biba模型18.2.4 Clark-Wilson模型18.2.5 Chinese Wall模型 18.3 系统安…

OpenCv之简单的人脸识别项目(登录页面)

人脸识别 一、项目准备二、登录页面1.导入所需的包2.设置窗口2.1定义窗口外观和大小2.2设置窗口背景2.2.1设置背景图片2.2.2创建label控件 3.运行脚本3.1定义识别脚本3.2定义提取脚本3.3定义标注脚本3.4定义人脸比对脚本3.5定义动态处理脚本3.6定义属性判断脚本 4.创建一个退出…

智汇云舟与芯瞳完成兼容适配,共建国产化生态体系

近日&#xff0c;智汇云舟的视频孪生系列产品和时空大数据系列产品已完成与芯瞳半导体技术&#xff08;山东&#xff09;有限公司GPU产品GB2062/GB2064/CQ2040/CQ2040 MXM/CQ2040 MD的相互兼容性测试认证。双方产品经过严格测试&#xff0c;已完成兼容适配&#xff0c;具备良好…

【设计模式深度剖析】【6】【结构型】【外观模式】| 以电脑开关按钮为例,并结合微服务架构的API网关加深理解

&#x1f448;️上一篇:桥接模式 | 下一篇:享元模式&#x1f449;️ 设计模式-专栏&#x1f448;️ 目 录 外观模式&#xff08;Facade Pattern&#xff09;定义英文原文直译如何理解呢&#xff1f;字面理解代码实现中的理解生活案例&#xff1a;操作多功能料理机典型案例…

ARM32开发——串口输入

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 需求串口数据接收中断函数IDLE中断串口接收流程&#xff08;了解&#xff09;完整示例 需求 串口接收PC机发送的数据。 串口数据接…