kubeadm安裝kubernetes

来源:https://www.cnblogs.com/zhuxiaoyi412826/archive/2023/04/04/17286798.html
-Advertisement-
Play Games

kubeadm安裝kubernetes kubeadm 是官方社區推出的一個用於快速部署 kubernetes 集群的工具。 這個工具能通過兩條指令完成一個 kubernetes 集群的部署: $ kubeadm init 創建一個master節點 $ kubeadm join 將一個 Node 節 ...


kubeadm安裝kubernetes

kubeadm 是官方社區推出的一個用於快速部署 kubernetes 集群的工具。 這個工具能通過兩條指令完成一個 kubernetes 集群的部署:

$ kubeadm init 創建一個master節點

$ kubeadm join 將一個 Node 節點加入到當前集群中

試驗背景

在學習k8s搭建中,網上大部分教程都是用虛擬機做集群,只有極少數是使用伺服器搭建教程,用雲伺服器的更少。

試驗環境

這裡準備了三台伺服器進行測試

110.42.149.60 master 阿裡雲 2H4G CentOS7.6

42.193.254.253 node1 阿裡雲 2H4G CentOS7.6

69.165.74.251 node2 阿裡雲 2H4G CentOS7.6

是乾凈的系統剛開通的環境

安裝集群版本 1.23.1

1 前置

1 所有節點上安裝 docker kubeadman kubelet、kubectl 而且這三個版本要統一

docker 運行時容器 kubeadman 快速安裝k8s的工具

kubectl 命令行操作節點 kubelet node節點的代理 來進行幹活創建pod 管理網路

2 修改主機名 hosts配置 master節點 就用master node節點 就用node

hostnamectl 檢測主機名
vim /etc/hosts
本機內網ip的名字改為master/node

3 關於防火牆如果使用的雲伺服器就不用管他

2 安裝 前置軟體

docker

touch docker.sh

#!/bin/bash
yum install -y yum-utils
yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
mkdir -p /etc/docker && touch /etc/docker/daemon.json
cat > /etc/docker/daemon.json <<END
{
  "registry-mirrors": ["https://3sf1ht53.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}                                                                                    
END
yum install docker-ce docker-ce-cli containerd.io
systemctl start docker

chmod +x docker.yml && ./docker.yml

kubeadman kubelet、kubectl

kubeadman kubelet kubectl 指定版本 最好版本統一和kubernetes的版本統一

1 添加yum 源

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

2 安裝

yum install -y kubelet-1.23.1-0 kubeadm-1.23.1-0 kubectl-1.23.1-0

3 查看是否安裝成功

kubectl version
kubelet --version
kubeadm version

4 設置開機自啟

systemctl restart kubelet

3 master主節點

1 修改hosts文件

這裡的ip 都要可以ping通 最好用這個內網ip 要和etho的那個保持一致

vim /etc/hosts 
110.42.149.60 master
42.193.254.253 node
169.165.74.251 node

2 下載鏡像

如果網路不好 下載鏡像可能就下載不下來,提前把鏡像下載下來

編寫一個腳本文件 自己先下載

  vim  master_images.sh
#!/bin/bash
images=(
	kube-apiserver:v1.17.3
    kube-proxy:v1.17.3
	kube-controller-manager:v1.17.3
	kube-scheduler:v1.17.3
	coredns:1.6.5
	etcd:3.4.3-0
    pause:3.1
)
for imageName in ${images[@]} ; do
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
#   docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName  k8s.gcr.io/$imageName
done

chmod 700 master_images.sh   賦予許可權 
./master_images.sh  開始執行

下載好的鏡像

3 開始初始化master節點

kubeadm init \
  --apiserver-advertise-address=120.77.82.244 \
  --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
  --kubernetes-version v1.23.1-0 \
  --service-cidr=10.96.0.0/16 \
  --pod-network-cidr=192.168.0.0/16 
kubeadm init \   設置主節點  的ip就是你的公網ip需要寫的hosts文件里 
--kubernetes-version=1.23.1  指定k8s的版本
--apiserver-advertise-address=自己的ip     因為k8s的所有操作命令都要經過 apiserver   並設置主節點的地址 
如果是使用雲伺服器 這個參數就去掉  
--kubernetes-version 指定版本
--image-repository  預設是從k8s.io  現在改成阿裡雲的
service-cidr=10.96.0.0/16 \    對不同節點  pod 之間網路的訪問 ,集群內部虛擬網路,Pod統一訪問入口
--pod-network-cidr=10.244.0.0/1   所在的ip pod和 pod 之間  與下麵部署的CNI網路組件yaml中保持一致

4 使用阿裡雲搭建k8s時,在主節點執行kubeadm init時候卡在

Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0

這是因為kubeadm init 指定了"--apiserver-advertise-address"為公網ip,但是阿裡雲的機器是vpc網路,使用ifconfig時候,可以看到網卡上顯示的是內網ip,並沒有公網ip,這就會導致etcd無法啟動,etcd 啟動不了 kubelet也就啟動不了 解決辦法為去掉--apiserver-advertise-address參數。

如果初始化失敗

echo "1" > /proc/sys/net/ipv4/ip_forward
nmcli c reload
https://www.cnblogs.com/fufengyuan/p/16382182.html

5 初始化成功

6 跟著步驟進行操作 需要先複製 最後一行的 kubeadm的join 這是別的節點加入你的集群的token 有效時間2h

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
vim /etc/profile
export KUBECONFIG="/etc/kubernetes/admin.conf"
source /etc/profile

7 如果忘記token了,在主節點使用kubeadm token list命令查看。如果token過期了

8 K8s集群創建的時候,在主節點使用kubeadm init命令,如果第一次失敗了,再次執行此命令發現提示埠已占用,文件已存在,怎麼辦?使用kubeadm reset 命令清空,然後重新init

9 設置網路插件

用fanl

kubectl apply -f \ https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

2 如果fanl下載不了

3 用手動方式進行下載

4 配置fanl

kubectl apply -f kube-flannel.yml

如果此時報錯

The connection to the server localhost:8080 was refused - did you specify the right host or port?

解決方法

具體根據情況,此處記錄linux設置該環境變數
方式一:編輯文件設置
	   vim /etc/profile
	   在底部增加新的環境變數 export KUBECONFIG=/etc/kubernetes/admin.conf
方式二:直接追加文件內容
	echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile

在次運行 kubectl apply -f kube-flannel.yml

4 node 節點

1 node節點加入 master節點

這是我自己的tokn 你要加入你自己的就是之前生成的tokn

 kubeadm join 120.78.214.226:6443 --token fdw4nd.e1vakp1bxzut6gyk \--discovery-token-ca-cert-hash sha256:9b4f9c9c1c94dd77a1d331ddd19b80e10e4a25c5f439922b7aac9e9bf2949cee 

加入成功

2 如果token過期了 需要自己在master節點上重新生成一個

1.通過下麵的命令可以創建一個不過期的token
# kubeadm token create --ttl 0
p4rynu.uj4jaxnzk2s0y9vi						#這個值就是Token
把這個tokn進行替換即可
2.查看可用的token列表
# kubeadm token list
TOKEN                     TTL         EXPIRES   USAGES   

檢測是否加入集群成功

3 如果我想在node節點上操作k8s該怎麼操作

如果直接使用kubectl 會報錯

 出現這個問題的原因是kubectl命令需要使用kubernetes-admin的身份來運行,在“kubeadm int”啟動集群的步驟中就生成了“/etc/kubernetes/admin.conf”。
因此,解決方法如下,將主節點中的【/etc/kubernetes/admin.conf】文件拷貝到工作節點相同目錄下:
用ssh登錄或者用xftp 進行文件傳輸  
然後分別在工作節點上配置環境變數:
#設置kubeconfig文件
export KUBECONFIG=/etc/kubernetes/admin.conf
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
刷新環境變數  source/etc/profile
然後輸入密碼即可

任意一臺機器只要安裝了kubelet 都可以 按照上述操作即可進行遠程操控我的k8s集群

5 遠程連接

win上遠程操作kubernetes集群

1、在Windows上安裝kubectl
打開CMD工具,並創建kubectl文件夾,進入創建的文件夾中 在C:\Program Files目錄下創建Kubectl目錄,併進入Kubectl目錄

用curl命令安裝kubectl 執行命名安裝kubectl 這裡安裝的是1.19.0,如果要安裝其他版本只需在url中修改版本號即可

curl -LO "https://dl.k8s.io/release/v1.19.0/bin/windows/amd64/kubectl.exe"

2、下載K8S集群的配置文件
聯接K8S集群主節點,找到$HOME/.kube/config文件並下載 連接master節點,進入.kube目錄找到config文件,並下載到本地

cd $HOME/.kube/

在本地win系統C:\Users\XXX目錄下創建.kube文件夾

將步驟(1)下載的config文件拷貝到步驟(2)創建的.kube文件夾中

3、配置環境變數
將kubectl所在目錄添加到win系統環境變數中

說明: Windows 版的 Docker Desktop 將其自帶版本的 kubectl 添加到 PATH。 如果你之前安裝過 Docker Desktop,可能需要把此 PATH 條目置於 Docker Desktop 安裝的條目之前, 或者直接刪掉 Docker Desktop 的 kubectl。

4、驗證 kubectl 配置
執行下列命令查看結果
kubectl cluster-info

如果命令 kubectl cluster-info 返回了 url,但你還不能訪問集群,那可以用以下命令來檢查配置是否妥當
kubectl cluster-info dump
執行kubectl get nodes查看結果


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 搭建微服務基礎環境02 3.創建使用會員微服務模塊-service consumer 3.1需求分析 瀏覽器向service consumer請求某個數據,service consumer會去向service provider請求數據,然後將service provider返回的數據返回給瀏覽器。 ...
  • 之前學習時候,是使用老師的自定義的一個SpringMVC模式,今天突然好奇,官方的SpringMVC架構咋弄,於是帶著好奇的心去實現完成它 其實這個模式也比較簡單 1:首先,我們創建一個maven,web的網頁項目,JDK選擇1.8版本 2:在創建完之後,滑鼠右鍵點擊main目錄,同時選擇java和 ...
  • 1. 踩坑經歷 最近做了個需求,需要往公司微信公眾號推送一個模板消息,並且點擊該消息需要跳轉到公司小程式的某個頁面。 1.1 拿到模板id 既然是發送模板消息,第一步就需要登錄微信公眾號後臺新建模板消息,拿到模板id。 登錄地址:https://mp.weixin.qq.com 新建模板消息的方法如 ...
  • 勤學如春起之苗,不見其增日有所長;輟學如磨刀之石,不見其損日有所虧。 本文的重點:逃逸分析、延遲語句、散列表、通道、介面。 1.逃逸分析 逃逸分析是Go語言中的一項重要優化技術,可以幫助程式減少記憶體分配和垃圾回收的開銷,從而提高程式的性能。下麵是一道涉及逃逸分析的面試題及其詳解。 問題描述: 有如下 ...
  • Week0 Functions Indoor Voice 題目描述: 將輸入的字元串轉化為全部小寫的字元串; 思路: lower():轉換字元串中所有大寫字元為小寫。 題解: print(input().lower()) Playback Speed 題目描述: 將輸入的字元串中間空格部分替換為“. ...
  • 摘要:保證線程安全是 Java 併發編程必須要解決的重要問題,本文和大家聊聊Java中的併發原子類,看它如何確保多線程的數據一致性。 本文分享自華為雲社區《學了這麼久的高併發編程,連Java中的併發原子類都不知道?這也太Low了吧》,作者:冰 河。 今天我們一起來聊聊Java中的併發原子類。在 ja ...
  • 前言: https://www.cnblogs.com/LoveBB/p/17277662.html 什麼是枚舉 枚:量詞。一般用於較小的片狀物,相當於“個”。 舉:提出:列舉。舉一反三。舉個例子。 所以,枚舉就是一個個列舉出來 枚舉的作用 魔功的作用,就不過多描述了,主打的就是一個優雅。 枚舉的使 ...
  • 配置文件 # 1. 複製my-default.ini文件 # 2. 命名為my.ini # 3. 修改完配置文件只會,一定別忘重啟服務端 存儲引擎(面試用) # 理論部分 '''存儲引擎其實就是資料庫存儲數據的方式!!!''' '''你們這個階段,最好自己寫一寫,後面熟悉了在複製''' # MySQ ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...