基于 debian 12 利用 kubeadm 部署 k8s 1.29 版本

基于 debian 12 利用 kubeadm 部署 k8s 1.29 版本

预先准备

  1. 准备三台debian 12的虚拟机,配置如下:

    HostnameIP配置
    k8s-master1192.168.31.604vCPU、8GiB 内存、50GiB 硬盘
    k8s-worker1192.168.31.614vCPU、8GiB 内存、50GiB 硬盘
    k8s-worker2192.168.31.624vCPU、8GiB 内存、50GiB 硬盘
  2. 开放root账户允许其远程ssh登录

    • 打开 /etc/ssh/sshd_config 文件,并找到以下行:

      #PermitRootLogin prohibit-password
      
    • no 修改为 yes,以允许 root 用户远程登录。修改后的行应该如下所示:

      PermitRootLogin yes
      
    • 保存修改后,关闭编辑器,并重新启动 SSH 服务以应用更改:

      sudo systemctl restart ssh
      
  3. 执行如下指令安装必备软件

    apt-get install -y vim curl sudo net-tools telnet chrony ipvsadm
    
  4. 关闭三台机器的 swap

    swapoff -a
    sed -i 's/.*swap.*/#&/' /etc/fstab
    
  5. 关闭防火墙

    iptables -F
    systemctl stop iptables nftables
    systemctl disable iptables nftables
    
  6. 三台主机之间设置免密登录

    • 先在三台主机上执行 ssh-keygen指令,然后一直回车直至结束

    • 再在三台虚拟机上/etc/hosts文件末尾加入如下三行解析

      192.168.31.60 k8s-master1
      192.168.31.61 k8s-worker1
      192.168.31.62 k8s-worker2
      
    • 最后在三台主机上分别执行如下指令

    ssh-copy-id k8s-master1
    ssh-copy-id k8s-worker1
    ssh-copy-id k8s-worker2
    
  7. 修改三台主机内核参数,分别在三台机器上执行如下指令

    # 加载 br_netfilter 模块
    modprobe 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
    
  8. 三台主机安装 docker 、containerd 和 crictl

    # 删除残留包,防止安装冲突
    for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done# 安装前更新相关配置
    # Add Docker's official GPG key:
    sudo apt-get update
    sudo apt-get install ca-certificates curl
    sudo install -m 0755 -d /etc/apt/keyrings
    sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
    sudo chmod a+r /etc/apt/keyrings/docker.asc# Add the repository to Apt sources:
    echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    sudo apt-get update# 安装容器相关软件
    sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin# 安装crictl 
    VERSION="v1.29.0"
    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
    rm -f crictl-$VERSION-linux-amd64.tar.gz
    
  9. 修改 containerd 相关配置

    • 执行containerd config default > /etc/containerd/config.toml,打开/etc/containerd/config.toml,把SystemdCgroup = false修改成SystemdCgroup = true,最后执行systemctl enable containerd --now && systemctl restart containerd

    • 生成/etc/crictl.yaml配置文件如下

      cat > /etc/crictl.yaml <<EOF
      runtime-endpoint: unix:///run/containerd/containerd.sock
      image-endpoint: unix:///run/containerd/containerd.sock
      timeout: 10
      debug: false
      EOF
      
  10. 三台主机配置时间同步服务器,执行如下指令

    echo 'server ntp.aliyun.com iburst' > /etc/chrony/sources.d/local-ntp-server.source
    chronyc reload sources# 查看时钟状态
    chronyc tracking
    

安装 kubeadm, kubelet 和 kubectl

sudo apt-get update
# apt-transport-https may be a dummy package; if so, you can skip that package
sudo apt-get install -y apt-transport-https ca-certificates curl gpg# If the directory `/etc/apt/keyrings` does not exist, it should be created before the curl command, read the note below.
# sudo mkdir -p -m 755 /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg# This overwrites any existing configuration in /etc/apt/sources.list.d/kubernetes.list
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.listsudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectlsudo systemctl enable --now kubelet

kubeadm 初始化集群

  1. 三台虚拟机设置crictl的运行环境为containerd

    crictl config runtime-endpoint unix:///run/containerd/containerd.sock
    
  2. kubeadm生成初始化配置文件并进行修改

    • 生成配置文件kubeadm.yaml

      kubeadm config print init-defaults > kubeadm.yaml
      
    • 修改advertiseAddress为主节点 IP,并将控制节点主机名name修改为k8s-master1

    • 新增 podSubnet字段

      kind: ClusterConfiguration
      kubernetesVersion: 1.29.0
      networking:dnsDomain: cluster.localpodSubnet: 10.244.0.0/16 #指定pod网段, 需要新增加这个serviceSubnet: 10.96.0.0/12
      scheduler: {}
      
    • 新增 kubeproxykubelet 配置,---不能省略

      ---
      apiVersion: kubeproxy.config.k8s.io/v1alpha1
      kind: KubeProxyConfiguration
      mode: ipvs
      ---
      apiVersion: kubelet.config.k8s.io/v1beta1
      kind: KubeletConfiguration
      cgroupDriver: systemd
      
  3. 执行初始化kubeadm init --config=kubeadm.yaml

  4. 授权kubectl指令,使其可以管理集群

    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config# 将访问权限拷贝到工作节点
    scp -r /root/.kube k8s-worker1:/root
    scp -r /root/.kube k8s-worker2:/root
    
  5. 测试kubectl指令

    kubectl get nodes
    
  6. 如果出现错误,请执行如下指令重置,并排查错误

    kubeadm reset
    
  7. k8s-worker1k8s-worker2加入集群

    # 生成加入指令
    kubeadm token create --print-join-command# 执行指令加入集群
    kubeadm join 192.168.31.60:6443 --token k1biqb.7vbcgtguh54ju81c --discovery-token-ca-cert-hash sha256:82b02d429821cc106a540a9507d1066a3fe8103d7b79a6581adfdd405744079d
    
  8. 安装 calico打通集群网络

    • 下载 v3.27配置模板,在https://github.com/projectcalico/calico/tree/release-v3.27/manifests下载tigera-operator.yamlcustom-resources.yaml两个配置文件

    • 执行kubectl create -f tigera-operator.yaml安装calico相关镜像和基础配置

    • 修改custom-resources.yaml配置文件,将cidr修改为10.244.0.0/16并新增nodeAddressAutodetectionV4字段

      # This section includes base Calico installation configuration.
      # For more information, see: https://docs.tigera.io/calico/latest/reference/installation/api#operator.tigera.io/v1.Installation
      apiVersion: operator.tigera.io/v1
      kind: Installation
      metadata:name: default
      spec:# Configures Calico networking.calicoNetwork:# Note: The ipPools section cannot be modified post-install.ipPools:- blockSize: 26
      # 填写自己 pod 的 IP 信息cidr: 10.244.0.0/16encapsulation: VXLANCrossSubnetnatOutgoing: EnablednodeSelector: all()
      # 绑定自己的网卡信息,默认绑定第一个网卡nodeAddressAutodetectionV4:interface: ens* 
      ---# This section configures the Calico API server.
      # For more information, see: https://docs.tigera.io/calico/latest/reference/installation/api#operator.tigera.io/v1.APIServer
      apiVersion: operator.tigera.io/v1
      kind: APIServer
      metadata:name: default
      spec: {}
      
    • 执行 watch kubectl get pods -n calico-system等待网络构建完成

    • 执行 kubectl get nodes确认网络打通

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

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

相关文章

python从0开始学习(九)

前言 上一篇文章我们介绍了python中的序列类型和元组类型&#xff0c;本篇文章将接着往下将。 1、字典类型 字典类型是根据一个信息查找另一个信息的方式所构成的“键值对”&#xff0c;它表示索引用的键和对应的值构成的成对关系。它是一个可变数据类型&#xff0c;也就是说它…

Leetcode 3154. Find Number of Ways to Reach the K-th Stair

Leetcode 3154. Find Number of Ways to Reach the K-th Stair 1. 解题思路2. 代码实现 题目链接&#xff1a;3154. Find Number of Ways to Reach the K-th Stair 1. 解题思路 这一题思路上就是一个动态规划&#xff0c;我们只需要确定一下运行的终止条件&#xff0c;然后写…

React中显示数据

SX 会让你把标签放到 JavaScript 中。而大括号会让你 “回到” JavaScript 中&#xff0c;这样你就可以从你的代码中嵌入一些变量并展示给用户。例如&#xff0c;这将显示 user.name&#xff1a; return (<h1>{user.name}</h1> ); 你还可以将 JSX 属性 “转义到 …

《web应用技术》第9次课后作业

一、将前面的代码继续完善功能 1、采用XML映射文件的形式来映射sql语句&#xff1b; 2、采用动态sql语句的方式&#xff0c;实现条件查询的分页。 二、学习git的使用。 1、每个小组将自己的项目上传到gitee&#xff0c;学会协作开发&#xff1b; 2、学会从gitee上拉取项目…

【Text2SQL 经典模型】TypeSQL

论文&#xff1a;TypeSQL: Knowledge-Based Type-Aware Neural Text-to-SQL Generation ⭐⭐⭐ Code: TypeSQL | GitHub 一、论文速读 本论文是在 SQLNet 网络上做的改进&#xff0c;其思路也是先预先构建一个 SQL sketch&#xff0c;然后再填充 slots 从而生成 SQL。 论文发…

C++函数指针,键值对集合的学习

这段代码使用了 std::unordered_map 来存储 std::wstring 作为键&#xff08;key&#xff09;&#xff0c;而对应的值&#xff08;value&#xff09;是一个 std::function<void(std::array<int, 5>, SomeClass&, int)> 类型的函数指针。这个结构使得根据字符串…

C++ 时间处理-日期时间类

1. 关键词2. 问题3. 设计理念4. 支持的能力5. 代码实现 5.1. datetime.h5.2. timecount.cpp 6. 测试代码7. 运行结果8. 源码地址 1. 关键词 C 时间处理 日期时间类 跨平台 2. 问题 为什么C就没有一个方便好用的表示日期时间的类&#xff1f; 同样是高级语言&#xff0c;Ja…

2024 HGDD 荣耀开发者日·成都站

HGDD 荣耀开发者日成都站 活动时间&#xff1a;2024 年 5 月 27 日 活动地点&#xff1a;成都市双流区 LA CADIERE 蔚蓝湖滨城 期待与大家的见面&#xff01;

ISO 9001认证 要换版了!

ISO TC176/SC2 第50次会议2023年10月8日至13日在卢旺达基加利举行。 会议确定ISO 9001标准的修订从2024年1月开始&#xff0c;将包括WD&#xff08;Working Draft&#xff09;、CD&#xff08; Committee Draft&#xff09;、DIS&#xff08;Draft for International Standard&…

js+vue3+elementplus发送验证码实现(含倒计时重新发送)

<template><el-form :model"formValue" :rules"rules" ref"form"><el-form-item prop"phone"><el-input v-model.number"formValue.phone" class"form-input" placeholder"请输入手机号…

[matlab]yalmip国内源yalmip下载地址所有版本汇总

概述 MATLAB是一个强大的数值计算工具&#xff0c;用于数学建模、算法开发和数据分析。在MATLAB中&#xff0c;有很多工具箱可以帮助用户完成不同类型的任务。本文将介绍如何在MATLAB中安装Yalmip和Cplex&#xff0c;这两个工具箱可以帮助用户解决优化问题。 如果不想看文字描…

【oracle004】oracle内置函数手册总结(已更新)

1.熟悉、梳理、总结下oracle相关知识体系。 2.日常研发过程中使用较少&#xff0c;随着时间的推移&#xff0c;很快就忘得一干二净&#xff0c;所以梳理总结下&#xff0c;以备日常使用参考 3.欢迎批评指正&#xff0c;跪谢一键三连&#xff01; 总结源文件资源下载地址&#x…

RoctetMQ使用(2):在项目中使用

一、导入相关依赖 在项目中引入MQ客户端依赖&#xff0c;依赖版本最好和RocketMQ版本一致。 <!-- rocket客户端--><dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-client</artifactId><version&…

npm常用指令

基础 命令&#xff1a;run 解释&#xff1a;运行脚本 示例&#xff1a;npm run dev 命令&#xff1a;list || ls 解释&#xff1a;查看依赖列表 示例&#xff1a;npm list || npm ls 命令&#xff1a;install || i 解释&#xff1a;安装依赖 示例&#xff1a;npm install ||…

一文掌握python随机数random模块

目录 一、常用函数 1、 random.random() 2、random.uniform(a, b) 3、random.randint(a, b) 4、random.randrange(start, stop[, step]) 5、random.choice(sequence) 6、random.shuffle(x[, random]) 7、random.sample(population, k) 8、random.choices(population, w…

Qml:锚点

import QtQuick import QtQuick.WindowWindow {width: 800height: 600visible: truetitle: qsTr("Test Anchors")///锚点 上下左右Rectangle{id: anchor1width:200height: 150color:"#EEEEEE"Rectangle{id:rect1width:50height:50color: "red"Te…

Ubuntu 20/22 安装 Jenkins

1. 使用 apt 命令安装 Java Jenkins 作为一个 Java 应用程序&#xff0c;要求 Java 8 及更高版本&#xff0c;检查系统上是否安装了 Java。 sudo apt install -y openjdk-17-jre-headless安装完成后&#xff0c;再次验证 Java 是否已安装 java --version2. 通过官方存储库安…

动态地控制kafka的消费速度,从而满足业务要求

kafka是一个分布式流媒体平台&#xff0c;它可以处理大规模的数据流&#xff0c;并允许实时消费该数据流。在实际应用中&#xff0c;我们需要动态控制kafka消费速度&#xff0c;以便处理数据流的速率能够满足系统和业务的需求。本文将介绍如何在kafka中实现动态控制消费速度的方…

APH-Archives of Public Health

文章目录 一、期刊简介二、征稿信息三、期刊表现四、投稿须知五、投稿咨询 一、期刊简介 Archives of Public Health是一份范围广泛的公共卫生杂志&#xff0c;致力于出版公共卫生领域所有可靠的科学。该杂志旨在更好地了解人群的健康。该杂志有助于公共卫生知识&#xff0c;加…

【考研数学】李林《880》是什么难度水平强化够用吗

880是公认的质量高&#xff0c;但要是刷的方法不对&#xff0c;心态直接炸裂&#xff01;&#x1f649; 我24年二战就是用的 880660 的黄金搭档&#xff0c;143分逆袭上岸211&#xff01;&#xff08;为什么说逆袭呢&#xff0c;因为我23年一战数学83&#xff0c;妥妥的菜鸡&am…