基于 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.pswp.cn/diannao/13771.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/13771.shtml
英文地址,請注明出處:http://en.pswp.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…