K8s學習總結

文章目錄

      • 介紹
      • Kubernetes 核心組件
      • k8s安裝
          • 環境
          • 安裝組件
      • 常用命令
      • 測試
          • 1. 創建一個測試應用程序
            • 2. 檢查 Pod 是否運行
          • 3. 暴露應用讓外部訪問
          • 4. 查看服務的暴露端口
          • 5. 訪問 nginx 服務
          • 6. 驗證節點調度
      • 如有錯誤,敬請指針,謝謝!

介紹

Kubernetes,是一個由Google開源的容器集群管理系統,旨在自動化部署、擴展和管理容器化應用程序。

Kubernetes 核心組件

Pod:Kubernetes 中最小的可部署單位, 表示一個或多個緊密相關的容器的集合。Pod 中的容器共享網絡和存儲資源,并且總是一起部署、調度和管理
Node:Kubernetes 集群中的一臺物理或虛擬機器,用于運行 Pod。一個集群由多個節點組成。
容器: 實際運行應用程序的單位
Service:為一組 Pod 提供穩定的網絡服務。通過 Service,Pod 可以動態擴展,而不影響客戶端的訪問。
Namespace:用于對資源進行邏輯隔離,可以用于區分不同的環境或團隊。
Deployment:管理 Pod 的聲明性更新,負責管理應用的版本、擴展和滾動更新。確保指定數量的 Pod 副本始終在運行。這意味著如果某個 Pod 出現故障或被刪除,Deployment 會自動創建新的 Pod 來替代它。 持滾動更新功能,允許你逐步升級應用程序的版本 。 ,
YAML 文件是用來定義和創建 Deployment 的配置文件,而 Deployment 本身是 Kubernetes 中負責實際管理應用程序的控制器。 包括要部署的應用鏡像、Pod 副本數量、資源限制、調度策略等。
● 通過 YAML 文件創建 Deployment:你使用 kubectl apply -f .yaml 命令將 YAML 文件提交給 Kubernetes,Kubernetes 會根據 YAML 文件的定義創建并管理相應的 Deployment 對象。
Deployment 管理 Pod:Kubernetes 中的 Deployment 負責管理 Pod 的生命周期,包括創建、刪除和更新 Pod。

節點與 Pod 的關系類似于服務器與應用程序的關系:一個服務器(節點)可以運行多個應用程序(Pod),而每個應用程序(Pod)可以包含多個進程(容器)。

k8s安裝

環境

我們需要準備一臺 Ubuntu 20.04 服務器作為主節點(控制平面),并準備多臺 Ubuntu 20.04 服務器作為工作節點(Worker Nodes)。確保服務器已經安裝了 Ubuntu 20.04 操作系統,并更新到了最新版本。
1.1更新系統

首先,確保系統是最新的。
sudo apt update
sudo apt upgrade -y

1.2 關閉 Swap

Kubernetes 需要關閉 Swap 以正常工作。
sudo swapoff -a
#修改/etc/fstab,注釋掉swap那行,持久化生效
sudo vi /etc/fstab

1.3確保每個節點有唯一的主機名,并且可以通過主機名解析彼此。

在宿主機分別設置主機名:k8s-master,k8s-node01

sudo vim /etc/hostname

hosts設置

sudovim /etc/hosts
#添加內容
192.168.47.138 k8s-master
192.168.47.137 k8s-node01

1.4確保時區和時間正確
時區設置

sudo timedatectl set-timezone Asia/Shanghai
#同時使系統日志時間戳也立即生效
sudo systemctl restart rsyslog

安裝組件

1,更改docker默認驅動為systemd
為防止初始化出現一系列的錯誤,請檢查docker和kubectl驅動是否一致,否則kubectl沒法啟動造成報錯。版本不一樣,docker有些為cgroupfs,而kubectl默認驅動為systemd,所以需要更改docker驅動。
可查看自己docker驅動命令

sudo docker info|grep Driver

在這里插入圖片描述
更改docker驅動,編輯 /etc/docker/daemon.json (沒有就新建一個),添加如下啟動項參數即可:

#編輯創建文件
sudo vim  /etc/docker/daemon.json
#添加內容
{"exec-opts": ["native.cgroupdriver=systemd"]
}

重啟docker

sudo systemctl restart docker.service 

2,更新 apt 包索引并安裝使用 Kubernetes apt 倉庫所需要的包
安裝軟件包以允許apt通過HTTPS使用存儲庫,已安裝軟件的可以忽略:

sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl

執行第一條命令時候報錯:在這里插入圖片描述
執行以下:

sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/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/ubuntu \$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

發現docker報錯解決了,還有這報錯:

錯誤:6 https://packages.cloud.google.com/apt kubernetes-xenial InRelease
無法發起與 packages.cloud.google.com:443 (2404:6800:4012:4::200e) 的連接 - connect (101: 網絡不可達) 無法連接上 packages.cloud.google.com:443 (142.250.217.110)。 - connect (111: 拒絕連接)
正在讀取軟件包列表… 完成
W: 無法下載 https://apt.kubernetes.io/dists/kubernetes-xenial/InRelease 無法發起與 packages.cloud.google.com:443 (2404:6800:4012:4::200e) 的連接 - connect (101: 網絡不可達) 無法連接上 packages.cloud.google.com:443 (142.250.217.110)。 - connect (111: 拒絕連接)

從阿里云的 Kubernetes 鏡像源安裝 Kubernetes 組件。這包括設置必要的軟件源、添加簽名密鑰、更新索引,并最終安裝 kubelet、kubeadm 和 kubectl,以便你可以設置和管理 Kubernetes 集群。

apt-get update && apt-get install -y apt-transport-https
curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/deb/Release.key |gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/deb/ /" |tee /etc/apt/sources.list.d/kubernetes.list
apt-get update
apt-get install -y kubelet kubeadm kubectl

常用命令

kubectl get node 是用來查看 Kubernetes 集群中所有節點的狀態信息  
kubectl get pods 驗證 Pod 狀態:  
kubectl get deployments 查看所有的deployments
kubectl get deployments --all-namespaces
kubectl delete pod <pod-name>   刪除指定pod
kubectl delete pods --all  刪除所有pod
kubectl delete pods --all -n <namespace> 刪除命名空間的所有pod
kubectl delete po pod名稱 --force --grace-period=0 -n 名稱空間     強制刪除pod,速度比較快
kubectl delete pods --all --grace-period=0 --forcekubectl logs d10001 查看pod日志
kubectl describe pod <pod-name>  查看 Kubernetes Pod 的詳細信息  kubectl create deployment nginx --image=nginx    創建一個新的 Deployment,讓 Kubernetes 部署一個基于 nginx 鏡像的應用程序,這個應用會被分配到集群中的工作節點運行
kubectl get services  查看 Kubernetes 集群中所有 Service 的命令  

在這里插入圖片描述

kubectl apply -f your-pod-definition.yaml  應用 YAML 配置:  
kubectl exec -it d10001 -- /bin/sh 進入k8s管理的docker

測試

1. 創建一個測試應用程序

部署一個簡單的 nginx 應用程序,Kubernetes 會把它調度到工作節點上運行
執行以下命令創建 nginx 部署:

kubectl create deployment nginx --image=nginx

創建一個新的 Deployment,讓 Kubernetes 部署一個基于 nginx 鏡像的應用程序,這個應用會被分配到集群中的工作節點運行。 nginx 是 Deployment 的名稱 ,–image=nginx 是 Docker Hub 上的 nginx 官方鏡像 .
該行命令執行后 Deployment 會根據指定的鏡像(nginx)創建一個或多個 Pod。這些 Pod 將運行 nginx 容器,并綁定到集群中的節點上。
使用 kubectl create deployment 命令創建 Deployment 時, 即使你沒有手動編寫 YAML 文件,Kubernetes 仍然會根據默認參數來配置和管理資源。類似下 :

apiVersion: apps/v1             # API 版本,指定使用 apps/v1 API 版本來創建 Deployment 對象
kind: Deployment               # 資源類型,Deployment 控制器用于管理應用程序的副本
metadata:name: nginx                  # Deployment 的名稱,這里是 nginx
spec:replicas: 1                  # 希望運行的 Pod 副本數量,這里指定 1 個副本,一個pod類似于一個應用程序selector:matchLabels:app: nginx               # 標簽選擇器,用于匹配 Pod 的標簽,確保 Deployment 管理正確的 Podstemplate:metadata:labels:app: nginx             # Pod 的標簽,用于標識 Pods,使其與 Deployment 匹配spec:containers:- name: nginx            # 容器的名稱,這里是 nginximage: nginx:latest    # 使用的容器鏡像,這里是 nginx:latestports:- containerPort: 80    # 容器監聽的端口號,這里是 80
2. 檢查 Pod 是否運行

部署完 nginx 之后,你需要確認 Pod(運行中的應用實例)是否正常啟動。

kubectl get pods

如果一切正常,你應該看到類似下面的輸出,顯示 Pod 處于 Running 狀態:
在這里插入圖片描述
這說明 nginx 應用()已經成功運行在集群的某個節點上。

3. 暴露應用讓外部訪問

創建一個 Kubernetes Service 來暴露這個 nginx 應用,讓你能夠從外部訪問它。
執行以下命令創建一個 NodePort 類型的服務:

kubectl expose deployment nginx --type=NodePort --port=80

這條命令會創建一個 NodePort 服務,使得集群外部的用戶可以通過 Kubernetes 節點(worker節點)的 IP 和一個隨機分配的端口來訪問 nginx。

4. 查看服務的暴露端口

執行以下命令查看服務的詳細信息:

kubectl get services

會看到類似下面的輸出:

NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
nginx        NodePort    10.104.142.159   <none>        80:32481/TCP     2m
5. 訪問 nginx 服務

現在,可以從命令行通過 curl 訪問 nginx。假設節點的 IP 地址是 192.168.74.129,可以通過如下命令訪問:

curl http://192.168.74.129:32481

如果一切正常,你會看到 nginx 默認的歡迎頁面的 HTML 內容。

6. 驗證節點調度

通過以下命令,查看 Pod 被調度到哪個節點上

kubectl get pods -o wide

如有錯誤,敬請指針,謝謝!

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

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

相關文章

前端為什么要使用new Promise包裹一個函數

在前端開發中&#xff0c;使用 new Promise 包裹一個函數主要是為了將原本不支持 Promise 規范的操作轉化為支持 Promise 規范的操作&#xff0c;從而可以更好地處理異步操作&#xff0c;提升代碼的可讀性和可維護性。下面詳細介紹這么做的常見原因和應用場景&#xff1a; 1. …

說下JVM中一次完整的GC流程?

大家好&#xff0c;我是鋒哥。今天分享關于【說下JVM中一次完整的GC流程?】面試題。希望對大家有幫助&#xff1b; 說下JVM中一次完整的GC流程? 1000道 互聯網大廠Java工程師 精選面試題-Java資源分享網 JVM中的一次完整的垃圾回收&#xff08;GC&#xff09;流程可以概括為…

dnslog+sqlmap外帶數據

目錄 爆庫 爆表 爆列 爆數據 sqlmapDNSlog 外帶參數 –dns-domain參數注入 –dns-domain參數為dnslog平臺的域名&#xff08;我們也可以使用本地&#xff09; 爆庫 python sqlmap.py -u "http://127.0.0.1/sqli/less-8/index.php/?id1" -techniqueB -dns-dom…

提升顧客轉化率:融合2+1鏈動模式AI智能名片與S2B2C商城小程序的創新策略

摘要&#xff1a;在數字化轉型的背景下&#xff0c;零售商面臨著提升顧客轉化率的巨大挑戰。本文旨在探討如何通過整合顧客行為數據、21鏈動模式、AI智能名片及S2B2C商城小程序等新興技術與商業模式&#xff0c;來精準定位顧客需求&#xff0c;優化營銷策略&#xff0c;從而提高…

以若依移動端版為基礎,實現uniapp的flowable流程管理

1.前言 此代碼是若依移動端版為基礎&#xff0c;實現flowable流程管理&#xff0c;支持H5、APP和微信小程序三端。其中&#xff0c;APP是在安卓在雷電模擬器環境下完成的&#xff0c;其他環境未測試&#xff0c;此文章中所提及的APP均指上述環境。移動端是需要配合若依前后端分…

《全球網絡安全政策法律發展研究報告 (2024) 》

全球視野&#xff0c;深度剖析 報告以全球視野為出發點&#xff0c;深度剖析了2024年各國在網絡安全政策法律方面的最新進展。從局部區域沖突延宕到關鍵信息基礎設施(關基)安全保護規則的持續細化&#xff0c;從數據安全政策立法的蓬勃發展到個人信息保護立法的不斷完善&#…

細說STM32F407單片機RTC的備份寄存器原理及使用方法

目錄 一、備份寄存器的功能 二、示例功能 三、項目設置 1、晶振、DEBUG、CodeGenerator、USART6 2、RTC 3、NVIC 4、GPIO 及KEYLED 四、軟件設計 1、main.h 2、main.c 3、rtc.c 4、keyled.c、keyled.h 五、運行調試 本實例旨在介紹備份寄存器的作用。本實例繼續使…

建筑行業安全技能競賽流程方案

一、比賽時間&#xff1a; 6月23日8&#xff1a;30分準時到場&#xff1b;9&#xff1a;00&#xff0d;10&#xff1a;00理論考試&#xff1b;10&#xff1a;10-12:00現場隱患答疑&#xff1b;12:00-13&#xff1a;30午餐&#xff1b;下午13&#xff1a;30-15&#xff1a;30現場…

解鎖機器學習核心算法 | 線性回歸:機器學習的基石

在機器學習的眾多算法中&#xff0c;線性回歸宛如一塊基石&#xff0c;看似質樸無華&#xff0c;卻穩穩支撐起諸多復雜模型的架構。它是我們初涉機器學習領域時便會邂逅的算法之一&#xff0c;其原理與應用廣泛滲透于各個領域。無論是預測房價走勢、剖析股票市場波動&#xff0…

JAVA生產環境(IDEA)排查死鎖

使用 IntelliJ IDEA 排查死鎖 IntelliJ IDEA 提供了強大的工具來幫助開發者排查死鎖問題。以下是具體的排查步驟&#xff1a; 1. 編寫并運行代碼 首先&#xff0c;我們編寫一個可能導致死鎖的示例代碼&#xff1a; public class DeadlockExample {private static final Obj…

解決DeepSeek服務器繁忙問題

目錄 解決DeepSeek服務器繁忙問題 一、用戶端即時優化方案 二、高級技術方案 三、替代方案與平替工具&#xff08;最推薦簡單好用&#xff09; 四、系統層建議與官方動態 用加速器本地部署DeepSeek 使用加速器本地部署DeepSeek的完整指南 一、核心原理與工具選擇 二、…

機器學習 - 大數定律、可能近似正確學習理論

一、大數定律&#xff1a; 大數定律是概率論中的一個基本定理&#xff0c;其核心思想是&#xff1a;當獨立重復的隨機試驗次數足夠大時&#xff0c;樣本的平均值會趨近于該隨機變量的期望值。下面從直觀和數學兩個角度來說明這一概念&#xff1a; 1. 直觀理解 重復試驗的穩定…

【觸想智能】工業顯示器和普通顯示器的區別以及工業顯示器的主要應用領域分析

在現代工業中&#xff0c;工業顯示器被廣泛應用于各種場景&#xff0c;從監控系統到生產控制&#xff0c;它們在實時數據顯示、操作界面和信息傳遞方面發揮著重要作用。與普通顯示器相比&#xff0c;工業顯示器在耐用性、可靠性和適應特殊環境的能力上有著顯著的差異。 觸想工業…

PyCharm2024使用Python3.12在Debug時,F8步進時如同死機狀態

在使用時PyCharm2024&#xff0b;Python3.12&#xff0c;在程序進行調試時&#xff0c;按F8步進時如同死機狀態。 1、相同的程序在PyCharm2023&#xff0b;Python3.9時是沒有問題的&#xff0c;因此決定重裝PyCharm2023&#xff0b;Python3.9&#xff0c;進行調試——調試OK。 …

LLaMA-Factory DeepSeek-R1 模型 微調基礎教程

LLaMA-Factory 模型 微調基礎教程 LLaMA-FactoryLLaMA-Factory 下載 AnacondaAnaconda 環境創建軟硬件依賴 詳情LLaMA-Factory 依賴安裝CUDA 安裝量化 BitsAndBytes 安裝可視化微調啟動 數據集準備所需工具下載使用教程所需數據合并數據集預處理 DeepSeek-R1 可視化微調數據集處…

STM32 如何使用DMA和獲取ADC

目錄 背景 ?搖桿的原理 程序 端口配置 ADC 配置 DMA配置 背景 DMA是一種計算機技術&#xff0c;允許某些硬件子系統直接訪問系統內存&#xff0c;而不需要中央處理器&#xff08;CPU&#xff09;的介入&#xff0c;從而減輕CPU的負擔。我們可以通過DMA來從外設&#xf…

【ISO 14229-1:2023 UDS診斷全量測試用例清單系列:第十六節】

ISO 14229-1:2023 UDS診斷服務測試用例全解析&#xff08;LinkControl_0x87服務&#xff09; 作者&#xff1a;車端域控測試工程師 更新日期&#xff1a;2025年02月14日 關鍵詞&#xff1a;UDS協議、0x87服務、鏈路控制、ISO 14229-1:2023、ECU測試 一、服務功能概述 0x87服務…

DeepSeek與醫院電子病歷的深度融合路徑:本地化和上云差異化分析

一、引言 1.1 研究背景與意義 在醫療信息化快速發展的當下,電子病歷系統已成為醫院信息管理的核心構成。電子病歷(EMR)系統,是指醫務人員在醫療活動過程中,使用醫療機構信息系統生成的文字、符號、圖標、圖形、數據、影像等數字化信息,并能實現存儲、管理、傳輸和重現的…

Django中實現簡單易用的分頁工具

如何在Django中實現簡單易用的分頁工具&#xff1f;&#x1f4da; 嗨&#xff0c;小伙伴們&#xff01;今天我們來看看如何在 Django 中實現一個超簡單的分頁工具。無論你是在處理博客文章、產品列表&#xff0c;還是用戶評論&#xff0c;當數據量一大時&#xff0c;分頁顯得尤…

【kafka系列】生產者

目錄 發送流程 1. 流程邏輯分析 階段一&#xff1a;主線程處理 階段二&#xff1a;Sender 線程異步發送 核心設計思想 2. 流程 關鍵點總結 重要參數 一、核心必填參數 二、可靠性相關參數 三、性能優化參數 四、高級配置 五、安全性配置&#xff08;可選&#xff0…