Ubuntu 系統上部署 Kubernetes 的完整指南


在這里插入圖片描述


Ubuntu 系統上部署 Kubernetes 的完整指南

  • 一、環境準備(Ubuntu 22.04/24.04)
    • 1. 系統初始化
    • 2. 安裝容器運行時(containerd)
    • 3. 安裝 Kubernetes 組件(kubeadm, kubelet, kubectl)
  • 二、部署 Kubernetes 集群
    • 1. 初始化主節點
    • 2. 添加工作節點
    • 3. 驗證集群狀態
  • 三、部署應用示例
    • 1. 創建 Deployment
    • 2. 創建 Service
    • 3. 部署應用
  • 四、運維管理
    • 1. 資源監控
    • 2. 日志管理
    • 3. 自動擴縮容
  • 五、生產級最佳實踐
    • 1. 高可用控制平面
    • 2. 持久化存儲
  • 3. 安全加固
  • 六、備份與災難恢復
    • 1. 備份 etcd 數據
    • 2. 恢復 etcd 數據
  • 七、常見問題排查
    • 1. Pod 處于 Pending 狀態
    • 2. 服務無法訪問


以下是 在全新安裝的 Ubuntu 系統上部署 Kubernetes 的完整指南,涵蓋環境準備、集群部署、運維管理及生產級最佳實踐,適用于開發和生產場景。


一、環境準備(Ubuntu 22.04/24.04)

1. 系統初始化

# 更新系統并安裝基礎工具
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl gnupg apt-transport-https ca-certificates software-properties-common# 禁用交換分區(Kubernetes 要求)
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab  # 永久禁用# 設置主機名(可選)
sudo hostnamectl set-hostname k8s-master  # 主節點
sudo hostnamectl set-hostname k8s-worker1 # 工作節點

2. 安裝容器運行時(containerd)

# 安裝 containerd
sudo apt install -y containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl enable containerd# 驗證運行時狀態
sudo ctr version

3. 安裝 Kubernetes 組件(kubeadm, kubelet, kubectl)

# 添加 Kubernetes 官方 GPG 密鑰
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg# 添加倉庫源
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list# 安裝指定版本(例如 1.28.x)
sudo apt update && sudo apt install -y kubeadm=1.28.* kubelet=1.28.* kubectl=1.28.*# 設置 kubelet 自動啟動(暫不啟動)
sudo systemctl enable kubelet

二、部署 Kubernetes 集群

1. 初始化主節點

# 主節點執行
sudo kubeadm init \--pod-network-cidr=192.168.0.0/16 \  # 匹配 Calico 默認配置--apiserver-advertise-address=<主節點IP> \--control-plane-endpoint=<主節點IP或負載均衡地址># 成功后按提示操作
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config# 安裝網絡插件(Calico)
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml

2. 添加工作節點

# 在工作節點執行(使用主節點初始化后生成的命令)
sudo kubeadm join <主節點IP>:6443 \--token <token> \--discovery-token-ca-cert-hash sha256:<hash>

3. 驗證集群狀態

kubectl get nodes  # 所有節點狀態應為 Ready
kubectl cluster-info

三、部署應用示例

1. 創建 Deployment

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deployment
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.25ports:- containerPort: 80resources:requests:cpu: "100m"memory: "128Mi"limits:cpu: "200m"memory: "256Mi"

2. 創建 Service

# service.yaml
apiVersion: v1
kind: Service
metadata:name: nginx-service
spec:type: NodePortselector:app: nginxports:- port: 80targetPort: 80nodePort: 30080

3. 部署應用

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml# 驗證
kubectl get pods -o wide
curl http://<節點IP>:30080  # 應返回 Nginx 歡迎頁

四、運維管理

1. 資源監控

# 安裝 Metrics Server
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml# 查看資源使用
kubectl top nodes
kubectl top pods

2. 日志管理

# 查看 Pod 日志
kubectl logs <pod-name> -f  # 實時日志# 安裝 EFK 日志系統(生產環境)
kubectl apply -f https://raw.githubusercontent.com/elastic/cloud-on-k8s/main/config/recipes/elasticsearch/elasticsearch.yaml

3. 自動擴縮容

# 設置 Horizontal Pod Autoscaler
kubectl autoscale deployment nginx-deployment --cpu-percent=50 --min=2 --max=5

五、生產級最佳實踐

1. 高可用控制平面

  • 使用 kubeadm 部署多主節點:

    # 第一個主節點初始化后,其他主節點執行:
    sudo kubeadm join <負載均衡IP>:6443 --token <token> \--discovery-token-ca-cert-hash sha256:<hash> \--control-plane
    

2. 持久化存儲

	# 創建 PersistentVolume(示例使用本地存儲)apiVersion: v1kind: PersistentVolumemetadata:name: local-pvspec:capacity:storage: 10GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: local-storagelocal:path: /mnt/datanodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- <特定節點主機名>

3. 安全加固

  • 啟用 RBAC:

        # 創建 Role 和 RoleBindingapiVersion: rbac.authorization.k8s.io/v1kind: Rolemetadata:name: pod-readerrules:- apiGroups: [""]resources: ["pods"]verbs: ["get", "list"]---apiVersion: rbac.authorization.k8s.io/v1kind: RoleBindingmetadata:name: read-podssubjects:- kind: Username: dev-userroleRef:kind: Rolename: pod-readerapiGroup: rbac.authorization.k8s.io
    
  • 網絡策略:

        # 限制 Pod 入站流量apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:name: deny-all-ingressspec:podSelector: {}policyTypes:- Ingress
    

六、備份與災難恢復

1. 備份 etcd 數據

	# 在主節點執行sudo ETCDCTL_API=3 etcdctl \--endpoints=https://127.0.0.1:2379 \--cacert=/etc/kubernetes/pki/etcd/ca.crt \--cert=/etc/kubernetes/pki/etcd/server.crt \--key=/etc/kubernetes/pki/etcd/server.key \snapshot save /backup/etcd-snapshot.db

2. 恢復 etcd 數據

	# 停止 kube-apiserver 和 etcdsudo systemctl stop kube-apiserver etcd# 恢復快照sudo ETCDCTL_API=3 etcdctl snapshot restore /backup/etcd-snapshot.db \--data-dir=/var/lib/etcd-restored# 重啟服務sudo systemctl start etcd kube-apiserver

七、常見問題排查

1. Pod 處于 Pending 狀態

  • 可能原因:

    • 資源不足(CPU/內存)。

    • 沒有可用節點匹配調度規則。

  • 解決:

    kubectl describe pod <pod-name> | grep Events  # 查看事件
    kubectl get nodes -o wide                     # 檢查節點資源
    

2. 服務無法訪問

  • 可能原因:

    • Service 的 selector 與 Pod 標簽不匹配。

    • 網絡策略阻止流量。

  • 解決:

    kubectl describe service <service-name>  # 檢查 Endpoints
    kubectl get networkpolicy                # 查看網絡策略
    

通過以上步驟,您可以在 Ubuntu 系統上完成 Kubernetes 集群的部署、應用管理及生產級運維。建議結合監控、日志和備份策略,確保集群的穩定性和可靠性。


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

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

相關文章

partition_pdf 和chunk_by_title 的區別

from unstructured.partition.pdf import partition_pdf from unstructured.chunking.title import chunk_by_titlepartition_pdf 和 chunk_by_title 初看有點像&#xff0c;都在"分塊"&#xff0c;但是它們的本質完全不一樣。 先看它們核心區別 partition_pdfchun…

基于深度學習的醫療診斷輔助系統設計

標題:基于深度學習的醫療診斷輔助系統設計 內容:1.摘要 隨著醫療數據的爆炸式增長和深度學習技術的飛速發展&#xff0c;開發基于深度學習的醫療診斷輔助系統具有重要的現實意義。本研究的目的在于設計一個高效、準確的醫療診斷輔助系統&#xff0c;以輔助醫生進行更精準的診斷…

Matlab/Simulink - BLDC直流無刷電機仿真基礎教程(四) - PWM調制模擬

Matlab/Simulink - BLDC直流無刷電機仿真基礎教程&#xff08;四&#xff09; - PWM調制模擬 前言一、PWM調制技術基本原理二、仿真模型中加入PWM調制三、逆變電路MOS管添加體二極管四、模擬添加機械負載五、仿真模型與控制框圖文章相關模型文件下載鏈接參考鏈接 前言 本系列文…

Curl 全面使用指南

Curl&#xff08;Client URL&#xff09;是一個跨平臺命令行工具&#xff0c;支持多種協議&#xff08;HTTP/HTTPS/FTP/SFTP等&#xff09;&#xff0c;用于數據傳輸、API調試、文件上傳/下載等場景。以下從 核心功能、用戶疑問解答、高級技巧 三方面系統總結&#xff0c;并整合…

PyTorch中“原地”賦值的思考

在開發一個PyTorch模塊時&#xff0c;遇到了一個詭異的現象&#xff0c;將他描述出來就是下面這樣&#xff1a; f[..., :p_index - 1] f[..., 1:p_index] 這個操作將f張量的部分數值進行左移&#xff0c;我在模型訓練的時候還能正常跑&#xff0c;但是當我將模型部署到項目中…

什么是:云邊端一體化架構

什么是云邊端一體化架構 文章目錄 什么是云邊端一體化架構云、邊、端云計算邊緣計算終端設備 云邊端一體化協同云邊端一體化架構協同的流程云邊端一體化架構協同的應用云邊端一體化架構協同的價值云邊端一體化架構協同未來發展趨勢 云、邊、端 云&#xff08;Cloud&#xff09…

gephi繪圖

參考&#xff1a; 如何在Gephi中正確的顯示中文&#xff1f; Gephi繪制網絡圖初步探索 gephi 節點標簽 調節_圖分析與可視化-從Gephi開始

馬克·雷伯特:用算法讓機器人飛奔的人

名人說:路漫漫其修遠兮,吾將上下而求索。—— 屈原《離騷》 創作者:Code_流蘇(CSDN)(一個喜歡古詩詞和編程的Coder??) 馬克雷伯特:用算法讓機器人飛奔的人 一、天才的起點 在機器人領域,有一個名字如雷貫耳——馬克雷伯特(Marc Raibert)。作為波士頓動力公司(Boston…

三維裝配可視化界面開發筆記

三維裝配可視化界面開發筆記 項目概述 這是一個基于Vue.js和Three.js的三維裝配可視化系統&#xff0c;用于展示機械零部件的裝配和拆解過程。系統支持模型加載、拆解/裝配路徑生成、動畫展示和工藝流程圖生成等功能。 技術棧 前端框架: Vue 3 (使用組合式API)構建工具: Vi…

深?理解指針(8)

1.對上一篇的補充內容 typedef int* ptr_t #define PTR_T int* 這兩種寫法都是可以的 ptr_t p1, p2; //p1, p2 都是指針變量 PTR_T p3, p4; //p3 是指針變量, p4是整型變量 為什么p3 是指針變量, p4是整型變量呢&#xff1f; 因為PTR_T 真的被改為了 int* 在編譯器中…

neo4j暴露公網ip接口——給大模型聯通知識圖譜

特別鳴謝 我的領導&#xff0c;我的腦子&#xff0c;我的學習能力&#xff0c;感動了 1. 搭建知識圖譜數據庫&#xff08;見上一章博客&#xff09; 這里不加贅述了&#xff0c;請參考上一篇博客搭建 2. FastApi包裝接口 這里注意&#xff1a;NEO4J_URI不得寫http:,只能寫…

AI編程新選擇!VSCode + RooCode,超越Cursor?

在當今快節奏的開發環境中&#xff0c;AI編程助手已經成為提升開發效率的關鍵工具。然而&#xff0c;面對眾多選擇&#xff0c;開發者往往陷入糾結&#xff1a;如何在眾多AI編程工具中找到最適合自己的方案&#xff1f;尤其是當VSCode搭配RooCode時&#xff0c;相比Cursor&…

電子病歷高質量語料庫構建方法與架構項目(環境聆聽與自動化文檔生成篇)

電子病歷高質量語料庫的構建是一個復雜而系統的工程,涉及數據收集、清洗、標注、驗證等多個環節。在項目實施過程中,"環境聆聽"和"自動化文檔生成"是兩個關鍵支撐要素,前者確保項目能夠適應不斷變化的技術和業務環境,后者則保障項目過程的可追溯性和知…

Python協程入門指北

一、什么是協程&#xff1f; 協程&#xff08;Coroutine&#xff09;就像可以暫停執行的函數&#xff0c;能夠在執行過程中主動讓出控制權&#xff0c;等準備好后再繼續執行。 生活小例子 想象你在咖啡店排隊&#xff1a; 普通函數&#xff1a;必須一直排到取餐&#xff08…

mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz的下載安裝和使用

資源獲取鏈接&#xff1a; mysql-5.7.24-linux-glibc2.12-x86-64.tar.gz和使用說明資源-CSDN文庫 詳細作用 數據庫服務器的核心文件&#xff1a; 這是一個壓縮包&#xff0c;解壓后包含 MySQL 數據庫服務器的可執行文件、庫文件、配置文件模板等。 它用于在 Linux 系統上安裝…

C++筆記-繼承(下)(包含派生類的默認成員函數,菱形繼承等)

一.派生類的默認成員函數 1.14個常見默認成員函數 默認成員函數&#xff0c;默認的意思就是指我們不寫&#xff0c;編譯器會自動為我們生成一個&#xff0c;那么在派生類中&#xff0c;這幾個成員函數是如何生成的呢&#xff1f; 1.派生類的構造函數必須調用基類的構造函數初…

C++中指針使用詳解(3)數組、指針和函數參數傳遞的底層 ABI實現

要深入理解 數組、指針和函數參數傳遞 的底層 ABI&#xff08;Application Binary Interface&#xff09;實現&#xff0c;需要從以下幾個維度出發進行學習&#xff1a; 一、什么是 ABI&#xff1f; ABI 是編譯器和操作系統之間的協定&#xff0c;規定了&#xff1a; 函數如何…

【RustDesk 】中繼1:壓力測試 Python 版 RustDesk 中繼服務器

測試 Python 版 RustDesk 中繼服務器 測試我們實現的中繼服務器有幾種方法,從簡單到復雜依次如下: 1. 基本連接測試客戶端 創建一個簡單的測試客戶端來驗證中繼服務器的基本功能: 2. 用兩個測試客戶端測試中繼功能 要測試完整的中繼功能,你需要運行兩個客戶端實例來模擬…

Spring Boot集成Spring Cloud 2024(不使用Feign)

本文介紹Spring Boot集成Spring Cloud 2024&#xff0c;且不使用Feign&#xff0c;而是采用Spring 6自帶的HttpExchange方式進行服務調用的詳細步驟&#xff1a; 環境準備 Spring Boot版本&#xff1a;推薦使用Spring Boot 3.4.1及以上版本&#xff0c;以更好地與Spring Clou…

vue中$set原理

Vue 中的 $set 方法&#xff08;Vue.set&#xff09;主要用于 向響應式對象中添加一個新的屬性&#xff0c;并確保這個新屬性是響應式的&#xff0c;能夠觸發視圖更新。 &#x1f4cc; 背景問題&#xff1a;為什么需要 $set&#xff1f; 在 Vue 2 中&#xff0c;直接給對象新增…