【Kubernetes】集群啟動nginx,觀察端口映射,work節點使用kubectl配置

參考b站叩丁狼總結:完整版Kubernetes(K8S)全套入門+微服務實戰項目,帶你一站式深入掌握K8S核心能力

在master節點執行

kubectl create deployment nginx --image=nginxkubectl expose deployment nginx --port=80 --type=NodePort

1. kubectl create deployment nginx --image=nginx

命令解析
kubectl create deployment nginx --image=nginx
  • kubectl:Kubernetes 的命令行工具,用于管理 Kubernetes 集群。
  • create:創建一個新的資源。
  • deployment:指定要創建的資源類型為 DeploymentDeployment 是 Kubernetes 中的一種控制器,用于管理無狀態應用的 Pod 的生命周期,確保指定數量的 Pod 始終處于運行狀態。
  • nginx:這是 Deployment 的名稱,你可以根據需要自定義。
  • --image=nginx:指定 Pod 中容器使用的鏡像。這里使用的是官方的 nginx 鏡像。
具體行為
  1. 創建一個 Deployment

    • Kubernetes 會創建一個名為 nginxDeployment
    • 這個 Deployment 會啟動一個 Pod,該 Pod 中運行一個容器,使用 nginx 鏡像。
    • 默認情況下,Deployment 會確保始終有一個 Pod 在運行。
  2. Pod 的配置

    • Pod 的名稱會自動生成,類似于 nginx-<隨機字符串>
    • Pod 中的容器會監聽默認的 nginx 端口(通常是 80)。
  3. 結果

    • 你可以通過以下命令查看創建的 Deployment 和 Pod:
      kubectl get deployment
      kubectl get pods
      

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

命令解析
kubectl expose deployment nginx --port=80 --type=NodePort
  • kubectl:Kubernetes 的命令行工具。
  • expose:將現有的資源(如 DeploymentPod)暴露為一個服務。
  • deployment nginx:指定要暴露的資源是名為 nginxDeployment
  • --port=80:指定 Pod 內部容器監聽的端口。這里指定為 80,因為 nginx 容器默認監聽 80 端口。
  • --type=NodePort:指定服務的類型為 NodePortNodePort 類型的服務會在集群的每個節點上開放一個端口(通常是高端口,如 30000-32767),并將請求轉發到 Pod 的指定端口。
具體行為
  1. 創建一個 Service

    • Kubernetes 會創建一個名為 nginxService,類型為 NodePort
    • 這個 Service 會將集群中某個節點的某個端口(NodePort)映射到 Pod 的 80 端口。
  2. 端口映射

    • Kubernetes 會自動分配一個 NodePort(通常是 30000-32767 范圍內的端口)。
    • 你可以通過以下命令查看分配的 NodePort
      kubectl get service nginx
      
    • 輸出示例:
      NAME      TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
      nginx     NodePort   10.106.223.10   <none>        80:31570/TCP   11m
      
      在這個例子中,NodePort 被分配為 31570
  3. 訪問服務

    • 你可以通過集群中任何一個節點的 IP 地址加上 NodePort 來訪問服務。例如:
      curl <節點IP>:31570
      
    • Kubernetes 的網絡代理(如 kube-proxy)會捕獲這個請求,并將其轉發到某個運行 nginx 的 Pod 的 80 端口。

總結

  1. kubectl create deployment nginx --image=nginx

    • 創建一個名為 nginxDeployment,啟動一個 Pod,Pod 中運行一個使用 nginx 鏡像的容器。
  2. kubectl expose deployment nginx --port=80 --type=NodePort

    • nginx Deployment 暴露為一個 NodePort 類型的服務。
    • 創建一個 Service,將集群中某個節點的某個端口(NodePort)映射到 Pod 的 80 端口。
    • 你可以通過集群中任何一個節點的 IP 地址加上 NodePort 來訪問服務。

驗證

可以通過以下命令驗證整個過程:

  1. 查看 Deployment 和 Pod

    kubectl get deployment
    kubectl get pods
    
  2. 查看 Service

    kubectl get service nginx
    
  3. 訪問服務

    curl <節點IP>:<NodePort>
    

  • 可以通過kubectl get svc,pod觀察nginx狀態:
chenaws@k8smaster:~$ kubectl get svc,pod
NAME                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/kubernetes    ClusterIP   10.96.0.1       <none>        443/TCP        15d
service/myhello-svc   NodePort    10.110.50.145   <none>        80:30000/TCP   15d
service/nginx         NodePort    10.106.223.10   <none>        80:31570/TCP   49mNAME                        READY   STATUS    RESTARTS      AGE
pod/myhello-rc-5j2l5        1/1     Running   5 (72m ago)   15d
pod/myhello-rc-989q7        1/1     Running   5 (72m ago)   15d
pod/myhello-rc-bc8pz        1/1     Running   5 (72m ago)   15d
pod/myhello-rc-cv58k        1/1     Running   5 (72m ago)   15d
pod/myhello-rc-r8lgx        1/1     Running   5 (72m ago)   15d
pod/nginx-8f458dc5b-vt2sd   1/1     Running   0             50m
chenaws@k8smaster:~$ 

實際使用時如果發現nginx節點服務遲遲沒有running,可以通過describe觀察pod狀態

  • 使用:kubectl describe pod nginx-8f458dc5b-vt2sd
    在這里插入圖片描述
    主要查看Events是否有報錯,如果卡在pulling,可以嘗試到對應節點重新docker pull nginx

  • 如何查看pod被分配到哪個節點?
    在這里插入圖片描述


后續可以在集群任意節點訪問集群內任意節點ip的31570端口來訪問133這個節點的nginx服務

為什么是31570端口?

在這里插入圖片描述
在這里插入圖片描述

1. 端口映射關系

在 Kubernetes 中,NodePort 類型的服務會將集群中的某個端口(通常是高端口,如 30000-32767)映射到 Pod 的內部端口。具體來說:

  • nginx 服務
    • ClusterIP10.106.223.10(僅在集群內部可訪問)
    • NodePort31570(在集群的每個節點上都可以通過這個端口訪問服務)
    • 目標端口80(Pod 內部的 Nginx 服務監聽的端口)

這意味著,無論你訪問集群中哪個節點的 31570 端口,Kubernetes 都會將請求轉發到某個運行 Nginx 的 Pod 的 80 端口。

2. 為什么可以訪問三個 IP 地址

我的 Kubernetes 集群有三個節點(192.168.132.131192.168.132.132192.168.132.133)。因為 nginx 服務的類型是 NodePort,所以可以通過任何一個節點的 31570 端口訪問 Nginx 服務。

3. 訪問這個端口時發生了什么

當通過 curl 192.168.132.131:31570 發起請求時:

  1. 請求到達節點:請求發送到集群中的一個節點(比如 192.168.132.131)的 31570 端口。
  2. Kubernetes 服務代理:Kubernetes 的網絡代理(如 kube-proxy)會捕獲這個請求,并根據服務的定義(nginx 服務)將請求轉發到192.168.132.133這個運行 Nginx 的 Pod。
  3. Pod 處理請求:請求被轉發到 Nginx Pod 的 80 端口,由 Nginx 服務器處理。
  4. 返回響應:Nginx 服務器處理完請求后,將響應返回給 kube-proxy,kube-proxy 再將響應返回給客戶端。

4. 驗證和總結

  • 端口映射31570 端口是 Kubernetes 為 nginx 服務分配的外部訪問端口,它會將請求轉發到 Pod 的 80 端口。
  • 多節點訪問:因為 NodePort 服務在集群的每個節點上都暴露了相同的端口,所以你可以通過任何一個節點的 IP 地址加上 31570 端口來訪問服務。
  • 負載均衡:Kubernetes 會自動選擇一個運行 Nginx 的 Pod 來處理請求,實現了簡單的負載均衡。

如何實現work節點使用kubectl

  • 剛配置完k8s時,如果在work節點執行,會報錯
    在這里插入圖片描述
  • 我們可以通過執行以下命令實現work使用kubectl
# 1.將master節點中/etc/kubernetes/admin.conf拷貝到要運行的work節點服務器,/etc/kubernetes目錄中,使用:
# 注意 chenaws是要拷貝的機器的用戶名,@后是主機名
scp /etc/kubernetes/admin.conf chenaws@k8snode2:/etc/kubernetes# 2.在對應拷貝到的服務器上配置環境變量:
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
  • 使用scp /etc/kubernetes/admin.conf chenaws@k8snode2:/etc/kubernetes傳輸時,要求要在root模式,

  • 也可以用下面這條可以傳到不受限制的用戶目錄

  • sudo scp /etc/kubernetes/admin.conf chenaws@k8snode2:~

  • 當然后續也要把這個文件移到work的/etc/kubernetes/

  • sudo mv ~/admin.conf /etc/kubernetes/
    在這里插入圖片描述
    出現這個直接yes
    在這里插入圖片描述

  • 然后繼續配置環境變量即可
    在這里插入圖片描述

  • 成功!


為什么需要拷貝 admin.conf
  • 默認情況下,work節點使用kubectl 會查找 ~/.kube/config 文件作為配置文件。
  • 我們可以通過比較一開始的 master 節點和 worker 節點的 ~/.kube/config文件配置來找到答案:
    在這里插入圖片描述
    在這里插入圖片描述
  • 可以看到,worker節點根本就沒有指明配置,所以使用不了 kubectl,那么我們的解決方案就是把master的配置直接復制到work上去
為什么需要配置環境變量?
  • 如果你將 admin.conf 拷貝到了 /etc/kubernetes 目錄下,需要通過設置環境變量 KUBECONFIG 來告訴 kubectl 使用這個新的配置文件路徑。
  • 配置環境變量后,kubectl 就可以正確加載 admin.conf 文件,從而訪問 Kubernetes 集群。
為什么不用 cp
  • cp 是本地拷貝命令,只能在同一臺主機上使用。
  • scp 是跨主機拷貝命令,用于在不同主機之間傳輸文件。因為 admin.conf 文件在 master 節點上,而你需要將它拷貝到工作節點上,所以必須使用 scp
命令解析
scp /etc/kubernetes/admin.conf root@k8snode2:/etc/kubernetes
  • scp:這是一個安全拷貝命令,用于在不同主機之間拷貝文件。它基于 SSH 協議,因此傳輸過程是加密的。
  • /etc/kubernetes/admin.conf:這是 Kubernetes 集群的管理員配置文件,包含了訪問集群所需的認證信息(如證書、令牌等)。
  • root@k8snode2:目標主機的用戶名和主機名。這里假設目標主機的用戶名是 root,主機名是 k8snode2
  • /etc/kubernetes:目標路徑,將文件拷貝到目標主機的 /etc/kubernetes 目錄下。
命令解析
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
  • echo:用于輸出字符串。
  • export KUBECONFIG=/etc/kubernetes/admin.conf:設置環境變量 KUBECONFIG,指定 kubectl 使用的配置文件路徑。
  • >> ~/.bash_profile:將輸出追加到 ~/.bash_profile 文件中。~/.bash_profile 是用戶登錄時加載的配置文件之一,用于設置環境變量。
  • source ~/.bash_profile:重新加載 ~/.bash_profile 文件,使剛剛設置的環境變量生效。

總結

  1. 拷貝 admin.conf

    • 使用 scpadmin.conf 從 master 節點拷貝到工作節點的 /etc/kubernetes 目錄。
    • 這樣可以讓工作節點上的 kubectl 使用這個配置文件訪問集群。
  2. 配置環境變量

    • 設置 KUBECONFIG 環境變量,指定 kubectl 使用的配置文件路徑。
    • 通過 source ~/.bash_profile 使環境變量生效。

https://github.com/0voice

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

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

相關文章

20250704-基于強化學習在云計算環境中的虛擬機資源調度研究

基于強化學習在云計算環境中的虛擬機資源調度研究 隨著云計算規模的持續擴大&#xff0c;數據中心虛擬機資源調度面臨動態負載、異構資源適配及多目標優化等挑戰。傳統啟發式算法在復雜場景下易陷入局部最優&#xff0c;而深度強化學習&#xff08;DRL&#xff09;憑借序貫決策…

day 33打卡

day 21 常見的降維算法 # 先運行之前預處理好的代碼 import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns import warnings warnings.filterwarnings(ignore)# 設置中文字體 plt.rcParams[font.sans-serif] [SimHei] plt.rcParam…

sec(x)積分推導

在MATLAB中繪制 sec?(x)、cos(x) 和 ln?∣sec?(x)tan?(x)∣的函數圖像&#xff0c;需要特別注意 sec?(x) 在 cos?(x)0&#xff08;即 xπ/2kπ&#xff09;處的奇點。&#xff08;deepseek生成代碼&#xff09;% 定義x范圍&#xff08;-2π到2π&#xff09;&#xff0c;…

gpt面試題

vue面試題 &#x1f4a1; 一、響應式系統相關 ?1. Vue 3 的響應式系統是如何實現的&#xff1f;和 Vue 2 有何本質區別&#xff1f; 答案&#xff1a; Vue 3 使用 Proxy 實現響應式&#xff08;位于 vue/reactivity 模塊&#xff09;&#xff0c;替代 Vue 2 的 Object.defineP…

【基于OpenCV的圖像處理】圖像預處理之圖像色彩空間轉換以及圖像灰度化處理

目錄 零、寫在前面的話 一、圖像色彩空間轉換 1.1 RGB顏色空間 1.1.1 RGB顏色空間概念 1.1.2 RGB顏色模型?編輯 1.1.3 關于顏色加法 1.1.4 顏色加權加法 1.2 HSV顏色空間 1.2.1 HSV顏色空間概念 1.2.2 HSV顏色模型 1.2.3 應用意義 1.3 顏色轉換 1.3.1 轉換方法 …

Java TCP 通信詳解:從基礎到實戰,徹底掌握面向連接的網絡編程

作為一名 Java 開發工程師&#xff0c;你一定在實際開發中遇到過需要建立穩定連接、可靠傳輸、有序通信等場景。這時&#xff0c;TCP&#xff08;Transmission Control Protocol&#xff09; 通信就成為你必須掌握的重要技能之一。TCP 是一種面向連接、可靠、基于字節流的傳輸協…

HTML5 網頁游戲設計開發——1、HTML基礎

前言 互聯網上的應用程序被稱為Web程序&#xff0c;Web引用用程序是用Web文檔&#xff08;網頁&#xff09;累表現用戶界面&#xff0c;而Web文檔都遵守HTML格式。HTML5是最新的HTML標準。之前的版本HTML4.01于1999年發布&#xff0c;小20年過去了&#xff0c;互聯網已經發聲了…

opencv圖片標注

功能使用python opencv, 將文字信息標注在圖片中同一張圖片中涉及多次標注文字大小為標注框的0.3倍使用多綫程運行import cv2 import threading import numpy as npdef draw_annotations(item, annotations):"""在圖片上繪制標注框和文本annotations: 標注列表…

矩陣SVD分解計算

對于有數學庫的時候,進行矩陣相關計算還是不復雜,但是沒有數學庫就很麻煩,利用算法實現了矩陣奇異值分解。 void decompose(const std::vector<std::vector<double>>& A, std::vector<std::vector<double>>& U, std::vector<dou…

Flutter基礎(前端教程①⑦-Column豎直-Row水平-Warp包裹-Stack堆疊)

MainAxisAlignment 是一個枚舉類&#xff0c;用于控制主軸&#xff08;Main Axis&#xff09; 方向上子組件的排列和對齊方式。MainAxisAlignment 的常用取值及效果&#xff1a;MainAxisAlignment.start子組件沿主軸的起點對齊&#xff08;Row 左對齊&#xff0c;Column 頂部對…

構建智能視頻中樞--多路RTSP轉RTMP推送模塊在軌道交通與工業應用中的技術方案探究

1?? 行業背景與技術需求&#x1f688; 軌道交通行業對視頻監控的深度依賴在現代城市軌道交通系統中&#xff0c;視頻監控已不僅僅是安防的一部分&#xff0c;更是貫穿于運營管理、車輛調度、應急指揮和安全保障的核心技術手段。列車車載監控 ——列車上普遍部署多路高清攝像頭…

【Android Studio 2025 漢化教程】

廢話不多說&#xff0c;直接上干貨。 前提&#xff1a;JeBrains系列2025版已經集成中文插件&#xff0c;用戶不需下載&#xff0c;只要設置下即可&#xff0c;但Android Studio并不內置也不提供漢化插件。需要工具&#xff1a; 1.IDEA&#xff08;其他JeBrains系列也可以&#…

網絡安全初級(前端頁面的編寫分析)

源代碼index.html<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>登錄頁面</title><!--…

RAG項目實戰:LangChain 0.3集成 Milvus 2.5向量數據庫,構建大模型智能應用

項目背景 最近&#xff0c;有時間&#xff0c;想著動手實戰一下&#xff0c;從0到1搭建一個 RAG 系統&#xff0c;也是想通過實戰的方式來更進一步學習 RAG。因此&#xff0c;就定下了以項目實戰為主&#xff0c;書籍為輔的執行方式。&#xff08;書籍是黃佳老師著的《RAG 實戰…

docker build 和compose 學習筆記

目錄 docker build 筆記 1. 路徑解析 2. 關鍵注意事項 2. docker compose up -d 核心區別對比 常見工作流 補充說明 1. 功能區別 2. 協作關系 場景 1&#xff1a;Compose 自動調用 Build 場景 2&#xff1a;先 Build 后 Compose 3. 關鍵區別 4. 為什么需要協作&…

Java學習第六十六部分——分布式系統架構

目錄 一、前言提要 二、核心目標 三、核心組件與技術 1. 服務拆分與通信 2. 服務注冊與發現 3. 配置中心 4. 負載均衡 5. 熔斷、降級與限流 6. API 網關 7. 分布式數據管理 8. 分布式追蹤與監控 9. 容器化與編排 四、典型Java分布式技術棧組合 五、關鍵…

Pycharm的Terminal打開后默認是python環境

Pycharm的Terminal打開后默認是python環境解決方案Pycharm的Terminal打開后默認是python環境&#xff0c;無法執行pip等命令&#xff0c;也沒辦法退出 解決方案 點擊Settings -> Tools -> Terminal 可以看到當前默認打開的是torch19py38環境中的python.exe&#xff08;…

LVS——nat模式

一、搭建nat模式下LVS的實驗環境1.創建四臺虛擬機client——客戶端&#xff1a;192.168.134.111/24&#xff08;nat模式&#xff09;LVS——調度器【雙網卡】&#xff1a;192.168.134.112/24&#xff08;nat模式&#xff09;、172.25.254.111/24&#xff08;僅主機模式&#xf…

ElasticSearch是什么

ElasticSearch是什么 ElasticSearch 是一個基于 Apache Lucene 的開源分布式搜索引擎&#xff0c;用于全文搜索、日志分析、實時數據分析等場景。它以高性能、分布式架構和易用性著稱&#xff0c;支持 JSON 格式的數據存儲和查詢&#xff0c;廣泛應用于日志監控、搜索服務、企業…

linxu CentOS 配置nginx

1、準備要發布的文件夾sudo mkdir -p /var/www/myfiles # 創建文件夾&#xff08;如果不存在&#xff09; sudo chmod -R 755 /var/www/myfiles # 設置權限&#xff08;確保 Nginx 可以讀取&#xff09; sudo chown -R nginx:nginx /var/www/myfiles # 修改所有者&#xff0…