k8s集群搭建(ubuntu 20.04 + k8s 1.28.3 + calico + containerd1.7.8)

news2024/12/23 17:08:29

环境&需求

服务器:

10.235.165.21 k8s-master
10.235.165.22 k8s-slave1
10.235.165.23 k8s-slave2

OS版本:

root@vms131:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:  Ubuntu 20.04.5 LTS
Release:    20.04
Codename:    focal

需求

​ 在 Ubuntu 20.04上搭建k8s1.28.3,并使用containerd作为容器运行时,使用calico作为cni插件。

安装步骤

特别注意

以下操作,除特别标注外,都是在所有节点上执行

环境准备

  • 服务器:linux发行版,最低配置2C2G

  • 各节点网络互通

  • 节点之中不可以有重复的主机名、MAC 地址

    • 你可以使用命令 ip linkifconfig -a 来获取网络接口的 MAC 地址
    • 可以使用 sudo cat /sys/class/dmi/id/product_uuid 命令对 product_uuid 校验
  • 开放必要的端口(cni插件的端口要求以cni插件文档说明为准)
    在这里插入图片描述
    在这里插入图片描述

  • 配置节点主机名

    hostnamectl set-hostname k8s-master
    hostnamectl set-hostname k8s-slave1
    hostnamectl set-hostname k8s-slave2
    
    
  • 配置hostname解析

    cat>>/etc/hosts<<-eof
    10.235.165.21 k8s-master
    10.235.165.22 k8s-slave1
    10.235.165.23 k8s-slave2
    eof
    
  • 关闭selinux

    echo "SELINUX=disabled" >> /etc/selinux/config
    
  • 关闭swap

    swapoff -a && sed -i '/swap/ s/^\(.*\)$/#\1/' /etc/fstab
    
  • 关闭防火墙并禁止开机自启

    ufw disable
    
  • 转发 IPv4 并让 iptables 看到桥接流量

    cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
    overlay
    br_netfilter
    EOF
    
    sudo modprobe overlay
    sudo modprobe br_netfilter
    
    # 设置所需的 sysctl 参数,参数在重新启动后保持不变
    cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
    net.bridge.bridge-nf-call-iptables  = 1
    net.bridge.bridge-nf-call-ip6tables = 1
    net.ipv4.ip_forward                 = 1
    EOF
    
    # 应用 sysctl 参数而不重新启动
    sudo sysctl --system
    

安装容器运行时(containerd)

安装containerd

1)安装containerd 1.7.8

# 下载二进制文件
root@k8s-master:~# wget https://github.com/containerd/containerd/releases/download/v1.7.8/containerd-1.7.8-linux-amd64.tar.gz

# 解压
root@k8s-master:/zpdata/packages# tar Cxzvf /usr/local containerd-1.7.8-linux-amd64.tar.gz
bin/
bin/containerd-shim-runc-v1
bin/containerd-stress
bin/containerd-shim-runc-v2
bin/containerd
bin/containerd-shim
bin/ctr

FAQ: For Kubernetes, do I need to download cri-containerd-(cni-)<VERSION>-<OS-<ARCH>.tar.gz too?

Answer: No.

As the Kubernetes CRI feature has been already included in containerd-<VERSION>-<OS>-<ARCH>.tar.gz, you do not need to download the cri-containerd-.... archives to use CRI.

2)【可选】将containerd配置成systemd服务,方便使用systemctl命令管理

root@k8s-master:/zpdata/packages# mkdir -p /usr/local/lib/systemd/system/ ; cd /usr/local/lib/systemd/system/
root@k8s-master:/usr/local/lib/systemd/system# curl -s -o containerd.service http://raw.githubusercontent.com/containerd/containerd/main/containerd.service

# 加载配置文件
systemctl daemon-reload
# 设置开启自启并立即启动
systemctl enable --now containerd

配置containerd的config.toml

containerd的一些默认参数可能不兼容,需要针对性的调整

root@k8s-master:/zpdata/packages# mkdir /etc/containerd
root@k8s-master:/zpdata/packages# containerd config default > /etc/containerd/config.toml

做如下修改

  1. 修改“sandbox_image”
[plugins."io.containerd.grpc.v1.cri"]
……
sandbox_image = "registry.k8s.io/pause:3.8"  #修改为   sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.8"
  1. 修改"SystemdCgroup"【重要,需要与kubelet的cGroupDriver匹配】
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
……
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
……
SystemdCgroup = false    # 改为  SystemdCgroup = true

然后重启containerd

sudo systemctl restart containerd

安装runc

root@k8s-master:/zpdata/packages# wget http://github.com/opencontainers/runc/releases/download/v1.1.10/runc.amd64
root@k8s-master:/zpdata/packages# install -m 755 runc.amd64 /usr/local/sbin/runc

安装cni

root@k8s-slave1:/zpdata/packages# wget http://github.com/containernetworking/plugins/releases/download/v1.3.0/cni-plugins-linux-amd64-v1.3.0.tgz 
root@k8s-master:/zpdata/packages# mkdir -p /opt/cni/bin
root@k8s-master:/zpdata/packages# tar Cxzvf /opt/cni/bin/ cni-plugins-linux-amd64-v1.3.0.tgz 

安装容器操作的客户端工具(crictl,nerdctl)

crictl --For debugging only

VERSION="v1.28.0" # check latest version in https://github.com/kubernetes-sigs/cri-tools/releases page
wget https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-$VERSION-linux-amd64.tar.gz
sudo tar zxvf crictl-$VERSION-linux-amd64.tar.gz -C /usr/local/bin

# 检查
root@k8s-master:/zpdata/packages# crictl -v
crictl version v1.28.0

nerdctl– General-purpose

root@k8s-master:/zpdata/packages# wget https://github.com/containerd/nerdctl/releases/download/v1.7.0/nerdctl-1.7.0-linux-amd64.tar.gz
root@k8s-master:/zpdata/packages# tar Cxzvvf /usr/local/bin nerdctl-1.7.0-linux-amd64.tar.gz
# 检查
root@k8s-master:/usr/local/bin# nerdctl -v
nerdctl version 1.7.0

安装 kubeadm、kubelet 和 kubectl

执行安装脚本install_kubeadm_kubelet_kubectl.sh:

#!/usr/bin/sh
# 1.更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包
echo "###step1#####
apt-get update
mkdir -p -m 755  /etc/apt/keyrings


# 2.下载用于 Kubernetes 软件包仓库的公共签名密钥
echo "###step2#####
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

# 3. 添加 Kubernetes apt 仓库。 请注意,此仓库仅包含适用于 Kubernetes 1.28 的软件包; 对于其他 Kubernetes 次要版本,则需要更改 URL 中的 Kubernetes 次要版本以匹配你所需的次要版本 (你还应该检查正在阅读的安装文档是否为你计划安装的 Kubernetes 版本的文档)。
echo "###step3#####
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

# 4. 更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本
echo "###step4#####
apt-get update
apt-get install -y kubelet kubeadm kubectl
#”apt-mark hold“用于避免执行apt upgrade命令时,将未锁定的包误更新。
apt-mark hold kubelet kubeadm kubectl

kubelet 配置 cgroup 驱动程序

警告

需要确保容器运行时和 kubelet 所使用的是相同的 cgroup 驱动,否则 kubelet 进程会失败。

前述步骤中containerd使用的systemd 作为cgroup驱动,所以kubelet也需要使用systemd作为cgroup驱动。

相关细节可参见配置 cgroup 驱动。

kubeadm 支持在执行 kubeadm init 时,传递一个 KubeletConfiguration 结构体,形如kubeadm init --config kubeadm-config.yamlKubeletConfiguration 包含 cgroupDriver 字段,可用于控制 kubelet 的 cgroup 驱动。

如下是KubeletConfiguration的最小样例:

# kubeadm-config.yaml
kind: ClusterConfiguration
apiVersion: kubeadm.k8s.io/v1beta3
kubernetesVersion: v1.21.0
---
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
cgroupDriver: systemd

注意:

在版本 1.22 及更高版本中,如果用户没有在 KubeletConfiguration 中设置 cgroupDriver 字段, kubeadm 会将它设置为默认值 systemd

使用 kubeadm init 创建集群

默认情况下,kubeadm 会从 registry.k8s.io 仓库拉取镜像,在没有互联网连接的情况下运行 kubeadm,

kubeadm config images list  #查看kubeadm init需要的镜像
kubeadm config images pull  # 提前拉取这些镜像

#查看kubeadm init的默认值
kubeadm config print init-defaults
#查看kubeadm join的默认值
kubeadm config print join-defaults

【master节点】

kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.28.3

出现这个提示说明init成功

Your Kubernetes control-plane has initialized successfully!

注意到kubectl get no发现状态为NotReady,是因为没有网络插件

root@k8s-master:/etc/apt/sources.list.d# kubectl get no
NAME         STATUS     ROLES           AGE     VERSION
k8s-master   NotReady   control-plane   2m32s   v1.28.3

安装网络插件(Calico)

k8s中网络插件有很中,比如:Calico,Flannel等,calico作为k8s的中的一种资源,只需要在master上执行即可。

以下以安装Calico为例

# 1)下载calico.yaml文件
wget https://github.com/projectcalico/calico/raw/2f38bd7adc4771a1de28bd2545e28d888c017a00/manifests/calico.yaml

# 2)做如下修改 calico.yaml.default为修改前,calico.yaml为修改后
root@k8s-master:/zpdata/packages# diff calico.yaml.default  calico.yaml
4931,4932c4931,4932
<             # - name: CALICO_IPV4POOL_CIDR
<             #   value: "192.168.0.0/16"
---
>             - name: CALICO_IPV4POOL_CIDR
>               value: "10.96.0.0/12"


# 10.96.0.0/12  值来源于kubeadm init时指定的 --pod-network-cidr 参数,默认是:10.96.0.0/12
root@k8s-master:/zpdata/packages# kubectl get cm -n kube-system kubeadm-config -o yaml | grep serviceSubnet
      serviceSubnet: 10.96.0.0/12

使用kubeadm join将node加入k8s集群

【slave1,slave2节点执行】

kubeadm join 10.235.165.21:6443 --token aziikp.bm2cdaqa19jh3o74 \
        --discovery-token-ca-cert-hash sha256:c93e7c0eb331a663783f5526322a1ceb231338f06c61647adb082395e3a5c1f7

ps:

若令牌过期,或丢失上述指令可在控制平面节点使用如下指令重新获取:kubeadm token create --print-join-command

验证

【master节点执行】

root@k8s-master:/zpdata/packages# kubectl get no -o wide
NAME         STATUS   ROLES           AGE   VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
k8s-master   Ready    control-plane   55m   v1.28.3   10.235.165.21   <none>        Ubuntu 20.04.5 LTS   5.4.0-137-generic   containerd://1.7.8
k8s-slave1   Ready    <none>          28m   v1.28.3   10.235.165.22   <none>        Ubuntu 20.04.5 LTS   5.4.0-137-generic   containerd://1.7.8
k8s-slave2   Ready    <none>          28m   v1.28.3   10.235.165.23   <none>        Ubuntu 20.04.5 LTS   5.4.0-137-generic   containerd://1.7.8
root@k8s-master:/zpdata/packages# kubectl cluster-info
Kubernetes control plane is running at https://10.235.165.21:6443
CoreDNS is running at https://10.235.165.21:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

如上,k8s 1.28.3 集群搭建完成

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

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

相关文章

(三)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB

一、七种算法&#xff08;DBO、LO、SWO、COA、LSO、KOA、GRO&#xff09;简介 1、蜣螂优化算法DBO 蜣螂优化算法&#xff08;Dung beetle optimizer&#xff0c;DBO&#xff09;由Jiankai Xue和Bo Shen于2022年提出&#xff0c;该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁…

软板当然可以弯折啊,只是容易弯出问题而已

高速先生成员&#xff1a;黄刚 每次在介绍具体案例之前&#xff0c;都还是先铺垫下基础知识吧。今天讲的是一个软板的案例&#xff0c;我们循例先介绍下软板的概念。相信大多数的硬件工程师&#xff0c;PCB设计工程师或者测试工程师都见过&#xff0c;就是像下面的这些了。 它作…

APP攻防-资产收集篇反证书检验XP框架反代理VPN数据转发反模拟器

文章目录 常见问题防护手段 常见问题 没有限制过滤的抓包问题&#xff1a; 1、抓不到-工具证书没配置好 2、抓不到-app走的不是http/s 有限制过滤的抓包问题&#xff1a; 3、抓不到-反模拟器调试 4、抓不到-反代理VPN 5、抓不到-反证书检验 做移动安全测试时&#xff0c;设置…

C++——gcc、clang和cmake以及make

文章目录 1. CMake和make1.1 生成内容区别1.2 CMakeLists.txt和Makefile内容比较2. clang, gcc和make2.1 基本概念2.2 改进历史(gcc,make,cmake,Ninja)1. CMake和make 1.1 生成内容区别 环境CMake生成最终生成WindowsXXX.slnVisual Studio(MSBuild)处理.sln生成.exe可执行二进…

Java自学第11课:电商项目(4)重新建立项目

经过前几节的学习&#xff0c;我们已经找到之前碰到的问题的原因了。那么下面接着做项目学习。 1 新建dynamic web project 建立时把web.xml也生成下&#xff0c;省的右面再添加。 会询问是否改为java ee环境&#xff1f;no就行&#xff0c;其实改过来也是可以的。这个不重要。…

Redhat7查看时区、修改时区

问题&#xff1a; 安装好redhat7之后&#xff0c;发现时间和物理机上面的网络时间不一致&#xff0c;于是查看本着修改时间的目的&#xff0c;却发现原来是时区的问题。 解决步骤&#xff1a; 查看时区状态信息 timedatectl修改时区到亚洲/上海 timedatectl set-timezone A…

数列计算

题目描述 有一列数是 : 请找出这个数列的规律&#xff0c;编写程序计算并输出这个数列的第项&#xff0c;要求是分数形式&#xff0c;并计算这个数列的前项和 ( 结果四舍五入保留两位小数 ) 输入格式 第一行仅有一个正整数 &#xff08;) 。 输出格式 共有 行&#xff0c;第一…

ctfshow sql171-179

mysql 先打开我们本地的mysql&#xff0c;可以看到这些数据库 information_schema information_schema 库: 是信息数据库&#xff0c;其中保存着关于MySQL服务器所维护的所有其他数据库的信息比如数据库名&#xff0c;数据库表&#xff0c; SCHEMATA表: 提供了当前MySQL实例…

Springboot+Dubbo+Nacos 集成 Sentinel(入门)

Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;主要以流量为切入点&#xff0c;从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。Sentinel 官网 1.版本选择 参考 SpringClou…

高级数据分析方法与模型

前言 数据思维练习不仅要熟练地掌握了分析工具&#xff0c;还要掌握大量的数据分析方法和模型。 这样得出的结论不仅具备条理性和逻辑性&#xff0c;而且还更具备结构化和体系化&#xff0c;并保证分析结果的有效性和准确性。今天从以下6个维度36种分析模型和方法逐个简略介绍…

双11终极战报:全程强势领跑 德施曼连续8年蝉联全渠道第一

截止11月11日24时&#xff0c;2023年双11电商大促落下帷幕&#xff0c;回顾今年的双11&#xff0c;在各种营销玩法、直播带货等形式的刺激下&#xff0c;激发了广大消费者的购物热潮。 也正因此&#xff0c;在双11结束后&#xff0c;各大电商平台、商家都纷纷交出了亮眼的成绩…

如何搞垮一个测试团队?

要想彻底搞垮一个测试团队并非易事&#xff0c;需要多角色通力配合、多方联动、综合施策&#xff0c;才能达到目的。 本文从实践经验出发&#xff0c;为大家总结了搞垮测试团队的18项措施&#xff0c;或许可以给大家带来一些启发。 — 1 — QA QA作为质量管理者&#xff0c;…

Adobe家里那点事儿~~~

今天&#xff0c;我们来谈谈关于Adobe全家桶中Photoshop的故事。 Adobe Photoshop&#xff0c;简称PS。其定位是一款图像处理软件。他主要处理以像素所构成的数字图像。也就是说我们常见的非矢量图片。 Photoshop的专长在于图像处理&#xff0c;而不是图形的创作。他是对已有的…

ZYNQ实验--Petalinux--Linux C 编程入门

Linux C 编程入门 在 Windows 下我们可以使用各种各样的 IDE 进行编程&#xff0c;比如强大的 Visual Studio。Ubuntu 下也有一些可以进行编程的工具&#xff0c;但是大多都只是编辑器&#xff0c;也就是只能进行代码编辑&#xff0c;如果要编译的话就需要用到 GCC 编译器&…

应急响应练习2

目录 1. 请提交攻击者的ip与系统版本 2. 攻击者通过某个组件漏洞获得服务器权限&#xff0c;请提交该组件的名称 3. 请提交攻击者首次攻击成功的时间 4. 请提交攻击者上传的webshell文件绝对路径 5. 请提交攻击者使用的webshell管理工具 6. 攻击者进一步留下的免杀的webs…

数据结构—数组栈的实现

前言&#xff1a;各位小伙伴们我们前面已经学习了带头双向循环链表&#xff0c;数据结构中还有一些特殊的线性表&#xff0c;如栈和队列&#xff0c;那么我们今天就来实现数组栈。 目录&#xff1a; 一、 栈的概念 二、 栈的实现 三、 代码测试 栈的概念&#xff1a; 栈的概念…

互联网医院牌照|互联网医院牌照办理小知识

随着互联网技术的快速发展&#xff0c;互联网医院牌照已经成为医疗行业的一个重要资质&#xff0c;我们致力于为您提供最优质的服务&#xff0c;帮助您的公司或产品顺利获得此牌照。 一、产品特性描述 1、专业性&#xff1a;我们的团队由经验丰富的顾问组成&#xff0c;对互联…

Redis 连接不上 WRONGPASS invalid username-password pair

1.我的RedisDesktopManager 可以连接 但是 Springboot远程使用Redis就是连不上 2.我的密码是 abc123.. 多了英文的 ..符号 在Springboot过不了&#xff0c;所以Redis密码尽量字母数字&#xff0c;不要其他符号

洛谷P1923 【深基9.例4】求第 k 小的数(java)

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.StreamTokenizer; import java.util.Arrays; import java.util.Scanner; //输入n个数字ai&#xff0c;输出这些数字的第k小的数。最小的数是第0小。 public cla…

IP-guard WebServer 命令执行漏洞复现

简介 IP-guard是一款终端安全管理软件&#xff0c;旨在帮助企业保护终端设备安全、数据安全、管理网络使用和简化IT系统管理。在旧版本申请审批的文件预览功能用到了一个开源的插件 flexpaper&#xff0c;使用的这个插件版本存在远程命令执行漏洞&#xff0c;攻击者可利用该漏…