【Kubernetes】ubuntu20.04通過kubeadm + Docker安裝k8s

Kubernetes v1.24集群安裝配置步驟總結

一、環境準備

(一)系統要求

  • 運行兼容deb/rpm的Linux操作系統(如Ubuntu或CentOS)的計算機,1臺或多臺。
  • 每臺機器內存2GB以上,內存不足會限制應用運行。
  • 控制平面節點的計算機至少有2個CPU。
  • 集群中所有計算機之間有完全的網絡連接,可使用公共網絡或專用網絡。

(二)主機環境配置(以Ubuntu 20.04為例)

  1. 系統安裝
    • 下載Ubuntu 20.04.4鏡像:https://mirrors.aliyun.com/ubuntu-releases/20.04.4/ubuntu-20.04.4-live-server-amd64.iso。
  2. 修改鏡像源
    • 將默認鏡像源http://cn.archive.ubuntu.com/ubuntu修改為清華大學鏡像源https://mirrors.tuna.tsinghua.edu.cn/ubuntu
    • 修改方式
      • 安裝虛擬機時直接修改鏡像地址。
      • 已安裝系統時,修改/etc/apt/sources.list文件,替換地址后執行sudo apt-get update(修改前先備份文件)。
  3. 安裝Docker 20.10.17

二、安裝cri-dockerd容器運行時

(一)方式一:二進制文件下載安裝

  1. 查看內核信息
    cat /proc/version
    
  2. 下載對應版本
    • 根據內核信息從GitHub Release頁面選擇文件,例如:https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.1/cri-dockerd-0.3.1.amd64.tgz。
    • 下載并解壓:
    wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.1/cri-dockerd-0.3.1.amd64.tgz
    tar -zxvf cri-dockerd-0.3.1.amd64.tgz -C /tmp
    sudo cp /tmp/cri-dockerd/cri-dockerd /usr/bin/
    

(二)方式二:通過Docker構建

  1. 下載源碼并編譯
    git clone https://github.com/Mirantis/cri-dockerd.git
    cd cri-dockerd
    git tag  # 查看可用tag
    git checkout v0.3.1  # 切換到目標版本
    
  2. 創建Dockerfile并構建
    FROM golang:1.18
    ADD ./ /go/src/cri-dockerd
    WORKDIR /go/src/cri-dockerd
    RUN go env -w GOPROXY=https://proxy.golang.com.cn,https://goproxy.cn,direct
    RUN go build -o cri-dockerd
    
    docker build -t cri-dockerd:latest .
    docker run --rm -d -it --name cri-dockerd cri-dockerd:latest bash
    docker cp cri-dockerd:/go/src/cri-dockerd/cri-dockerd ./
    sudo cp cri-dockerd /usr/bin/
    

(三)配置和啟動cri-dockerd服務

  1. 獲取systemd配置文件
    git clone https://github.com/Mirantis/cri-dockerd.git
    sudo cp cri-dockerd/packaging/systemd/* /etc/systemd/system/
    
  2. 修改服務配置
    • /etc/systemd/system/cri-docker.serviceExecStart字段中添加:
    --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.7
    
  3. 啟動服務
    sudo systemctl daemon-reload
    sudo systemctl enable cri-docker
    sudo systemctl start cri-docker
    sudo systemctl status cri-docker  # 檢查狀態
    

三、安裝kubeadm、kubelet、kubectl

  1. 更新包管理器并安裝依賴
    sudo apt-get update
    sudo apt-get install -y apt-transport-https ca-certificates curl
    
  2. 下載gpg密鑰
    curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/kubernetes-archive-keyring.gpg
    
  3. 設置Kubernetes鏡像源
    echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
    
  4. 安裝指定版本(示例:1.24.1)
    sudo apt-get update
    sudo apt-get install -y kubelet=1.24.1-00 kubeadm=1.24.1-00 kubectl=1.24.1-00
    
  5. 鎖定版本(防止自動升級)
    sudo apt-mark hold kubelet kubeadm kubectl
    
  6. 檢查kubelet狀態
    systemctl status kubelet
    

四、主機環境調整

  1. 修改Docker的cgroup driver為systemd
    • 創建或修改/etc/docker/daemon.json,添加:
    {"exec-opts": ["native.cgroupdriver=systemd"]
    }
    
    • 重啟Docker:
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
  2. 關閉防火墻
    sudo systemctl stop firewalld
    sudo systemctl disable firewalld
    
  3. 禁用SELinux
    sudo apt install selinux-utils
    getenforce  # 查看狀態
    sudo setenforce 0  # 臨時禁用
    
  4. 禁用swap
    free  # 查看交換區
    sudo swapoff -a  # 臨時關閉
    # 修改/etc/fstab,注釋掉swap相關行
    
  5. 修改主機名(以k8s-master1為例)
    • 添加IP映射到/etc/hosts
    127.0.1.1 k8s-master1
    
    • 修改系統主機名:
    sudo hostnamectl set-hostname k8s-master1
    hostname  # 查看主機名
    

五、初始化Master節點(只在master節點做)

  1. 生成默認配置文件
    kubeadm config print init-defaults > init.default.yaml
    
  2. 修改配置文件init.default.yaml
    • 添加或修改以下內容:
    localAPIEndpoint:advertiseAddress: 192.168.88.133  # 替換為實際IP
    nodeRegistration:criSocket: unix:///var/run/cri-dockerd.sockname: k8smaster  # 替換為主機名
    imageRepository: registry.aliyuncs.com/google_containers  # 國內鏡像源
    kubernetesVersion: 1.24.1
    networking:podSubnet: 10.244.0.0/16  # flannel默認網絡段
    
  3. 拉取鏡像
    sudo kubeadm config images pull --config=init.default.yaml
    
  4. 初始化集群
    sudo kubeadm init --config=init.default.yaml
    # 或通過參數初始化
    kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.24.1 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.239.146 --cri-socket unix:///var/run/cri-dockerd.sock
    
  5. 配置kubectl
    • 普通用戶執行:
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    • root用戶執行:
    export KUBECONFIG=/etc/kubernetes/admin.conf
    source /etc/profile  # 立即生效
    

六、添加網絡組件(以flannel為例)

  1. 下載或應用配置文件
    • 方法一:下載到本地后應用
    wget https://github.com/flannel-io/flannel/blob/master/Documentation/kube-flannel.yml
    kubectl apply -f kube-flannel.yml
    
    • 方法二:直接應用遠程文件(若域名可解析)
    kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
    
  2. 解決域名解析異常(若出現)
    • 查詢raw.githubusercontent.com的IP地址(如185.199.108.133),添加到/etc/hosts
    185.199.108.133 raw.githubusercontent.com
    
  3. 開啟kube-proxy的ipvs模式
    kubectl edit -n kube-system cm kube-proxy
    # 修改mode: "ipvs"
    kubectl rollout restart -n kube-system daemonset kube-proxy
    
  4. 查看集群狀態
    kubectl get pod --all-namespaces
    kubectl get node
    kubectl get cs
    

七、Node節點初始化與加入集群

(一)環境安裝(同Master節點)

  1. 安裝Docker和cri-dockerd并啟動服務。
  2. 安裝kubeadm、kubelet、kubectl。

(二)節點環境修改(同Master節點)

  1. 修改Docker的cgroup driver。
  2. 關閉防火墻、禁用SELinux和swap。

(三)加入集群

  1. 在Master節點獲取加入命令
    sudo kubeadm token create --print-join-command
    
  2. 在Node節點執行加入命令(附加cri-socket參數)
    kubeadm join 192.168.239.146:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:bac9b53b18b0bfcb3b923f970771e48d489ed7c77625c8fa3785608c6f191a79 --cri-socket unix:///var/run/cri-dockerd.sock
    

八、重置節點(可選)

sudo kubeadm reset --cri-socket unix:///var/run/cri-dockerd.sock
sudo rm -rf /var/lib/kubelet /var/lib/dockershim /var/run/kubernetes /var/lib/cni /etc/cni/net.d $HOME/.kube/config
sudo ipvsadm --clear
sudo ifconfig cni0 down
sudo ip link delete cni0

https://github.com/0voice

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/83337.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/83337.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/83337.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機視覺NeRF

NeRF與3DGS學習 NeRF計算機視覺的問題NeRF定義神經輻射場場景表示基于輻射場的體渲染分層采樣優化神經輻射場 基礎知識初始化SFM基礎矩陣 & 本質矩陣 & 單應矩陣從已經估得的本質矩陣E,恢復出相機的運動R,tSVD 分解 NeRF NeRF資源 計算機視覺的問題 計算…

工業手持PDA終端,有哪些作用?

工業手持PDA終端(便攜式數據采集終端),是專為工業場景設計的智能化工具,擁有強大的數據采集和處理能力。通過內置的條碼掃描功能,PDA能夠快速準確地獲取信息,避免了人工錄入可能出現的錯誤,大大…

Spark-TTS: AI語音合成的“變聲大師“

嘿,各位AI愛好者!還記得那些機器人般毫無感情的合成語音嗎?或者那些只能完全模仿但無法創造的語音克隆?今天我要介紹的Spark-TTS模型,可能會讓這些問題成為歷史。想象一下,你可以讓AI不僅說出任何文字&…

C++鏈式調用與Builder模式

在C++中實現鏈式調用(如 a.b().c().d())的關鍵是讓每個成員函數返回對象的引用(通常是 *this),從而允許連續調用其他成員函數。這種模式常見于方法鏈(Method Chaining)或流式接口(Fluent Interface)。下面是實現鏈式調用的具體方法和示例: 實現原理 返回對象引用:每…

SQL的查詢優化

1. 查詢優化器 1.1. SQL語句執行需要經歷的環節 解析階段:語法分析和語義檢查,確保語句正確;優化階段:通過優化器生成查詢計劃;執行階段:由執行器根據查詢計劃實際執行操作。 1.2. 查詢優化器 查詢優化器…

結構型設計模式之橋接模式

文章目錄 1. 橋接模式概述2. 模式結構3. 橋接模式的優缺點優點缺點 4. 橋接模式的應用場景5. C#代碼示例5.1 簡單示例 - 形狀與顏色5.2 更復雜的示例 - 跨平臺消息發送系統 6. 橋接模式與其他模式的比較7. 真實世界中的橋接模式應用7.1 數據庫驅動7.2 UI框架中的渲染機制 8. 橋…

SolidWorks建模(U盤)- 多實體建模拆圖案例

這個U盤模型并不是一個多裝配體,它是一個多實體零件,它是在零件模式下創建的這些多實體的零部件。按右鍵解除爆炸就可以裝配到一起,再按右鍵爆炸,就能按照之前移動的位置進行炸開 爆炸視圖直接展示 模型案例和素材或取&#xff08…

計算機組成原理核心剖析:CPU、存儲、I/O 與總線系統全解

引言 在當今數字化時代,計算機已經滲透到我們生活的方方面面,從智能手機到超級計算機,從智能家居到自動駕駛汽車。然而,你是否曾好奇過,這些功能強大的設備內部究竟是如何工作的?是什么讓計算機能夠執行各種…

SystemVerilog—Interface語法(二)

在SystemVerilog中,接口(interface)是一種封裝信號集合、協議邏輯和通信行為的復合結構。其核心定義內容可分為以下十類: 1. 信號聲明 基礎信號:可定義邏輯(logic)、線網(wire&…

DAY43打卡

浙大疏錦行 kaggle找到一個圖像數據集,用cnn網絡進行訓練并且用grad-cam做可視化 進階:并拆分成多個文件 fruit_cnn_project/ ├─ data/ # 存放數據集(需手動創建,后續放入圖片) │ ├─ train/ …

[藍橋杯C++ 2024 國 B ] 立定跳遠(二分)

題目描述 在運動會上,小明從數軸的原點開始向正方向立定跳遠。項目設置了 n n n 個檢查點 a 1 , a 2 , ? , a n a_1, a_2, \cdots , a_n a1?,a2?,?,an? 且 a i ≥ a i ? 1 > 0 a_i \ge a_{i?1} > 0 ai?≥ai?1?>0。小明必須先后跳躍到每個檢查…

LINUX530 rsync定時同步 環境配置

rsync定時代碼同步 環境配置 關閉防火墻 selinux systemctl stop firewalld systemctl disable firewalld setenforce 0 vim /etc/selinux/config SELINUXdisable設置主機名 hostnamectl set-hostname code hostnamectl set-hostname backup設置靜態地址 cd /etc/sysconfi…

鴻蒙OSUniApp結合機器學習打造智能圖像分類應用:HarmonyOS實踐指南#三方框架 #Uniapp

UniApp結合機器學習打造智能圖像分類應用:HarmonyOS實踐指南 引言 在移動應用開發領域,圖像分類是一個既經典又充滿挑戰的任務。隨著機器學習技術的發展,我們現在可以在移動端實現高效的圖像分類功能。本文將詳細介紹如何使用UniApp結合Ten…

【Redis】大key問題詳解

目錄 1、什么是大key2、大key的危害【1】阻塞風險【2】網絡阻塞【3】內存不均【4】持久化問題 3、如何發現大key【1】使用內置命令【2】使用memory命令(Redis 4.0)【3】使用scan命令【4】監控工具 4、解決方案【1】拆分大key【2】使用合適的數據結構【3】…

redis核心知識點

Redis是一種基于內存的數據庫,對數據的讀寫操作都是在內存中完成,因此讀寫速度非常快,常用于緩存,消息隊列、分布式鎖等場景。 Redis 提供了多種數據類型來支持不同的業務場景,比如 String(字符串)、Hash(哈希)、 Lis…

vscode不滿足先決條件問題的解決——vscode的老版本安裝與禁止更新(附安裝包)

目錄 起因 vscode更新設置的關閉 安裝包 結語 起因 由于主包用的系統是centos的,且版本有點老了,再加上vscode現在不支持老版本的,這對主包來說更是雪上加霜啊 但是主包看了網上很多教程,眼花繚亂,好多配置要改&…

如何成為一名優秀的產品經理(自動駕駛)

一、 夯實核心基礎 深入理解智能駕駛技術棧: 感知: 攝像頭、雷達(毫米波、激光雷達)、超聲波傳感器的工作原理、優缺點、融合策略。了解目標檢測、跟蹤、SLAM等基礎算法概念。 定位: GNSS、IMU、高精地圖、輪速計等定…

【ISAQB大綱解讀】信息隱藏指的是什么

在軟件架構中,信息隱藏(Information Hiding) 是核心設計原則之一,由 David Parnas 在 1972 年提出。它強調通過限制對模塊內部實現細節的訪問,來降低系統復雜度、提高可維護性和可擴展性。在 ISAQB 的學習目標&#xf…

網頁前端開發(基礎進階2--JS)

前面學習了html與css,接下來學習JS(JavaScript與Java無關)。 web標準(網頁標準)分為3個部分: 1.html主要負責網頁的結構(頁面的元素和內容) 2.css主要負責網頁的表現(…

完全移除內聯腳本

說明 日期&#xff1a;2025年5月9日。 內聯腳本給跨站腳本攻擊&#xff08;XSS&#xff09;留了條路。 示例 日期&#xff1a;2025年5月9日。 如下網頁文件a.html&#xff1a; <!-- 內聯腳本塊 --> <script> function handleClick{ alert("Hello")…