Kubernetes(k8s) 集群的快速部署

實驗目的

本實驗旨在通過?Kubeadm?工具快速部署一個?Kubernetes 1.28.2?集群,包含?1 個 Master 節點和 2 個 Worker 節點,并驗證集群的基本功能。實驗涉及以下關鍵步驟:

  1. 環境準備:配置主機名、關閉防火墻、禁用 SELinux、設置時區、關閉 Swap 等。

  2. 安裝 Docker:使用高版本 Docker(27.3.1)并配置鏡像加速。

  3. 安裝 CRI-Docker:解決 Kubernetes 1.28+ 對 Docker 的支持問題。

  4. 部署 Kubernetes:通過?kubeadm?初始化 Master 節點并加入 Worker 節點。

  5. 安裝網絡插件:使用 Flannel 提供 Pod 網絡通信。

拓撲圖

主機名

ip

硬件最低要求

master

10.1.1.85

2核,2G

node1

10.1.1.86

1核,1G

node2

10.1.1.79

1核,1G

配置步驟

前期準備(三臺機子都需要,所以可以克隆)

(1)修改主機名

hostnamectl set-hostname ?xxx

exec bash

為了避免做dns,在/etc/hosts 文件中記錄主機名

(2)關閉防火墻,安裝iptables

?systemctl stop firewalld

?systemctl disable firewalld

(3)安裝iptables

?yum -y install iptables-services

各節點啟動

systemctl start iptables

清空規則

iptables -F

開機啟動

systemctl enable iptables

?(4)禁用selinux

?setenforce 0

?sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

?(5) 設置時區

timedatectl set-timezone Asia/Shanghai

?(6)關閉 swap 分區

swapoff -a

sed -i 's:/dev/mapper/rl-swap:#/dev/mapper/rl-swap:g' /etc/fstab

?(7) 安裝 ipvs

?yum install -y ipvsadm ipset

?(8)加載 bridge

?yum install -y epel-release

yum install -y bridge-utils

?modprobe br_netfilter

?echo 'br_netfilter' >> /etc/modules-load.d/bridge.conf

?echo 'net.bridge.bridge-nf-call-iptables=1' >> /etc/sysctl.conf

?echo 'net.bridge.bridge-nf-call-ip6tables=1' >> /etc/sysctl.conf

?echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf

?sysctl -p

?(9)添加 docker-ce yum 源

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo?https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

?(10)安裝docker(27.3.1)

yum -y install docker-ce

注:不一定是這個版本,只是提醒一下,我們安裝的docker 是高版本;

如果下面不想使用cri-docker ,安裝的docker 版本不要高于20.10,因為kubeadm-1.23.6 不支持太高的版本;

(11) 配置 daemon.json ?重要的是配置源

?配置docker守護進程,創建docker服務目錄

cat > /etc/docker/daemon.json << EOF

{

??"data-root": "/data/docker",

??"exec-opts": ["native.cgroupdriver=systemd"],

??"log-driver": "json-file",

??"log-opts": {

????"max-size": "100m",

????"max-file": "100"

??},

??"registry-mirrors": [

????"https://docker.m.daocloud.io",

????"https://docker.hcp.cloud",

????"https://docker.unsee.tech",

????"https://docker.ipanel.live",

????"http://mirrors.ustc.edu.cn",

????"https://docker.chenby.cn",

????"http://mirror.azure.cn",

????"https://dockerpull.org",

????"https://dockerhub.icu",

????"https://hub.rat.dev"

??]

}

EOF

mkdir -p /etc/systemd/system/docker.service.d

(12) 重啟docker服務

systemctl daemon-reload && systemctl restart docker && systemctl enable docker

(13)上傳CRI-Docker插件

(或者通過命令下載wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.9/cri dockerd-0.3.9.amd64.tgz)

下面是我的飛書資源下載鏈接

Docs

(14)解壓CRI-Dockerd插件,將解壓后的cri-dockerd可執行文件復制到/usr/bin/目錄,并設置執行權限

tar -xf cri-dockerd-0.3.9.amd64.tgz

cp cri-dockerd/cri-dockerd /usr/bin/

chmod +x /usr/bin/cri-dockerd

(15)配置CRI-Docker服務文件

cat <<"EOF" > /usr/lib/systemd/system/cri-docker.service

[Unit]

Description=CRI Interface for Docker Application Container Engine

Documentation=https://docs.mirantis.com

After=network-online.target firewalld.service docker.service

Wants=network-online.target

Requires=cri-docker.socket

[Service]

Type=notify

ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.8

ExecReload=/bin/kill -s HUP $MAINPID

TimeoutSec=0

RestartSec=2

Restart=always

StartLimitBurst=3

StartLimitInterval=60s

LimitNOFILE=infinity

LimitNPROC=infinity

LimitCORE=infinity

TasksMax=infinity

Delegate=yes

KillMode=process

[Install]

WantedBy=multi-user.target

EOF

(16)添加 cri-docker 套接字,創建CRI-Docker socket文件

cat <<"EOF" > /usr/lib/systemd/system/cri-docker.socket

[Unit]

Description=CRI Docker Socket for the API

PartOf=cri-docker.service

[Socket]

ListenStream=%t/cri-dockerd.sock

SocketMode=0660

SocketUser=root

SocketGroup=docker

[Install]

WantedBy=sockets.target

EOF

(17)重新加載systemd守護進程,啟用CRI-Docker服務,啟動該服務,并檢查服務是否處于活動狀態。

systemctl daemon-reload

systemctl enable cri-docker

systemctl start cri-docker

systemctl is-active cri-docker

(18)添加 kubeadm yum 源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo

[kubernetes]

name=Kubernetes

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/

enabled=1

gpgcheck=1

repo_gpgcheck=1

gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

EOF

(19)安裝kubernetes 1.28.2

yum install -y kubelet-1.28.2 kubectl-1.28.2 kubeadm-1.28.2 ???這個只是告知怎么在安裝的過程中選擇版本

yum -y install kubelet kubeadm kubeadm

systemctl enable kubelet.service

kubelet 剛安裝完成后,通過 systemctl start kubelet 方式是無法啟動的,需要加入節點 或初始化為 master 后才可啟動成功。

以上的內容三臺都要做;所以偷懶的辦法就是,做好一臺克隆2個,改ip,改主機名就行。

在master節點的操作

(1)生成默認的初始化配置文件init-config.yaml

kubeadm config print init-defaults > init-config.yaml

(2)編輯配置文件

vi init-config.yaml

apiVersion: kubeadm.k8s.io/v1beta3

bootstrapTokens:

- groups:

??- system:bootstrappers:kubeadm:default-node-token

??token: abcdef.0123456789abcdef

??ttl: 24h0m0s

??usages:

??- signing

??- authentication

kind: InitConfiguration

localAPIEndpoint:

??advertiseAddress: 10.1.1.85

??bindPort: 6443

nodeRegistration:

??criSocket: unix:///var/run/cri-dockerd.sock

??imagePullPolicy: IfNotPresent

??name: master

??taints: null

---

apiServer:

??timeoutForControlPlane: 4m0s

apiVersion: kubeadm.k8s.io/v1beta3

certificatesDir: /etc/kubernetes/pki

clusterName: kubernetes

controllerManager: {}

dns: {}

etcd:

??local:

????dataDir: /var/lib/etcd

imageRepository: registry.aliyuncs.com/google_containers

kind: ClusterConfiguration

kubernetesVersion: 1.28.2

networking:

??dnsDomain: cluster.local

??serviceSubnet: 10.96.0.0/12

??podSubnet: 10.244.0.0/16

scheduler: {}

(3)列出初始化集群所需的鏡像并拉取

kubeadm config images list --config=init-config.yaml

kubeadm config images pull --config=init-config.yaml

注:如果下載鏡像失敗,嘗試手動下載;舉例如下:

ctr -n k8s.io images pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.23.0

(4)初始化K8S集群

kubeadm init --config=init-config.yaml

(5)創建.kube目錄,復制管理員配置文件,修改文件權限

mkdir -p ?$HOME/.kube

cp ?-i /etc/kubernetes/admin.conf ?$HOME/.kube/config

chown ?$(id?-u):$(id?-g) ?$HOME/.kube/config

(6)將各節點加入到集群(注意要修改成自己的節點信息,初始化集群時可以看到)

kubeadm join 10.1.1.85:6443 \

??--token abcdef.0123456789abcdef \

??--discovery-token-ca-cert-hash sha256:15612baa3473388167c8ff2ca2ff06474909c9f1329d84e68f2966299347a62c \

??--cri-socket unix:///var/run/cri-dockerd.sock

(7)查看集群中的節點狀態

kubectl get nodes

(8)上傳flannel網絡插件(也可以用下面的命令下載)

Docs

(9)部署Pod網絡

wget -L?https://github.com/flannel-io/flannel/releases/latest/download/kube flannel.yml

kubectl apply -f kube-flannel.yml

使用kubectl get nodes查看集群中的節點狀態,確認所有節點都已加入并處于Ready狀態。使用kubectl get pods -n kube-system查看kube-system命名空間下的Pod狀態,確認所有Pod都在運行

kubectl get nodes -o wide

kubectl get pod -n kube-system

至此,通過Kubeadm快速安裝Kubernetes集群已經完成。

實驗結論

本實驗通過標準化流程完成了 Kubernetes 集群的快速部署,驗證了集群的基本功能(節點管理、網絡通信)。實驗過程中遇到的典型問題(如運行時兼容性、鏡像拉取)通過替換組件和配置鏡像源解決,為后續深入學習 Kubernetes 運維和開發奠定了基礎。

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

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

相關文章

7年經驗的Java程序員的技術知識概覽(及分階段學習計劃、資源推薦、職業發展建議)

&#x1f91f;致敬讀者 &#x1f7e9;感謝閱讀&#x1f7e6;笑口常開&#x1f7ea;生日快樂?早點睡覺 &#x1f4d8;博主相關 &#x1f7e7;博主信息&#x1f7e8;博客首頁&#x1f7eb;專欄推薦&#x1f7e5;活動信息 文章目錄 **一、技術棧全景與深度要求****1. 核心Java…

28、.NET 中元數據是什么?

在.NET中&#xff0c;元數據&#xff08;Metadata&#xff09;是描述程序結構和類型信息的二進制數據集合&#xff0c;它是.NET運行時&#xff08;CLR&#xff09;的核心基礎組件之一&#xff0c;用于支持程序加載、類型解析、反射、安全校驗等關鍵功能。以下是其核心特性和作用…

Idea中實用設置和插件

目錄 一、Idea使用插件 1.Fitten Code智能提示 2.MyBatisCodeHelperPro 3.HighlightBracketPair? 4.Rainbow Brackets Lite 5.GitToolBox(存在付費) 6.MavenHelperPro 7.Search In Repository 8.VisualGC(存在付費) 9.vo2dto 10.Key Promoter X 11.CodeGlance…

Linux新手快速入門指南

Linux新手快速入門指南&#xff1a;從零到熟練的簡明路線圖 對于剛接觸Linux的新手而言&#xff0c;這個開源世界既充滿機遇又令人望而生畏。本文將通過系統化的學習路徑和實戰技巧&#xff0c;幫助您快速突破入門難關&#xff0c;掌握Linux核心技能。 一、突破認知誤區&#x…

交叉編譯paho.mqtt.c和paho.mqtt.cpp(MQTT客戶端)

一、參考資料 【MQTT】paho.mqtt.cpp 庫的 介紹、下載、交叉編譯、MQTT客戶端例子源碼-CSDN博客 【MQTT】paho.mqtt.c 庫的“介紹、下載、交叉編譯” 詳解&#xff0c;以及編寫MQTT客戶端例子源碼-CSDN博客 二、準備工作 1. 重要說明 paho.mqtt.cpp與paho.mqtt.c&#xff…

Flink 源碼編譯

打包命令 打包整個項目 mvn clean package -DskipTests -Drat.skiptrue打包單個模塊 mvn clean package -DskipTests -Drat.skiptrue -pl flink-dist如果該模塊依賴其他模塊&#xff0c;可能需要先將其他模塊 install 到本地&#xff0c;如果依賴的模塊的源代碼有修改&#…

【Agent實戰】從0到1開發一個Python 解釋器 MCP SSE Server

寫在前面 想象一個場景:LLM Agent(如 AutoGPT、MetaGPT 或我們自己構建的 Agent)在規劃任務后,決定需要運行一段 Python 代碼來處理數據或調用某個 API。它不能直接在自己的環境中執行(通常不具備這個能力,也不安全),而是需要將這段代碼發送給一個專門的外部服務來執行…

HTML word屬性

介紹 CSS word-spacing 屬性&#xff0c;用于指定段字之間的空間&#xff0c;例如&#xff1a; p {word-spacing:30px; }word-spacing屬性增加或減少字與字之間的空白。 注意&#xff1a; 負值是允許的。 瀏覽器支持 表格中的數字表示支持該屬性的第一個瀏覽器版本號。 屬…

assertEquals()

assertEquals() 是 JUnit 框架中用于進行斷言操作的一個非常常用的方法&#xff0c;其主要目的是驗證兩個值是否相等。如果兩個值不相等&#xff0c;測試就會失敗&#xff0c;JUnit 會給出相應的錯誤信息&#xff0c;提示開發者測試未通過。下面為你詳細介紹&#xff1a; 方法…

Nginx 反向代理,啥是“反向代理“啊,為啥叫“反向“代理?而不叫“正向”代理?它能干哈?

Nginx 反向代理的理解與配置 User 我打包了我的前端vue項目&#xff0c;上傳到服務器&#xff0c;在寶塔面板安裝了nginx服務&#xff0c;配置了文件 nginx.txt .運行了項目。 我想清楚&#xff0c;什么是nginx反向代理&#xff1f;是nginx作為一個中介&#xff1f;中間件來集…

用 Python 打造打籃球字符動畫!控制臺彩色炫酷輸出,抖音搞怪視頻靈感還原

一、引言&#xff1a;從抖音搞怪視頻到 Python 字符動畫的奇妙之旅 刷抖音時刷到一個神級操作 —— 博主用 01 數字矩陣還原了明星打籃球的經典畫面&#xff0c;字符在控制臺隨動作節奏炫彩跳動&#xff0c;瞬間點燃了技術宅的 DNA&#xff01;作為 Python 圖像處理愛好者&…

《逐夢九天:中國航天編年史》

《逐夢九天:中國航天編年史》 新華社酒泉2025年4月24日電(記者李國利、黃一宸)神舟二十號載人飛船發射4月24日取得圓滿成功,中國載人航天在“東方紅一號”發射55載之際開啟第20次神舟問天之旅。 當日17時17分,搭載神舟二十號載人飛船的長征二號F遙二十運載火箭在酒泉衛星…

IDEA搭建環境的五種方式

一、普通的java項目 File--New--Project 選擇Java&#xff0c;jdk選擇1.8版本&#xff0c;然后點next 輸入項目名和路徑名&#xff0c;點擊Finish 創建包結構&#xff0c;編寫Class類 編寫主方法&#xff0c;輸出Hello標志完成 二、普通的javaWeb項目 Java Enterprise-- 勾選…

【黑馬 微服務面試篇】

分布式事務 cap定理-Availability CAP定理-Partition tolerance BASE理論 BASE理論是對CAP的一種解決思路&#xff0c;包含三個思想&#xff1a; BasicallyAvailable&#xff08;基本可用&#xff09;&#xff1a;分布式系統在出現故障時&#xff0c;允許損失部分可用性&#…

實時數倉體系概覽與架構演進

? 引言&#xff1a;為什么我們離不開“實時” 曾經的你可能會認為“數據分析一天一更&#xff0c;夠用了”。但當你所在的公司遇上這些情況&#xff1a; 用戶在投放廣告后5分鐘內就想知道轉化效果 風控平臺必須秒級判斷是否攔截訂單 新產品上線后一小時就需調整推薦算法策略…

基于Matlab的車牌識別系統

1.程序簡介 本模型基于MATLAB,通過編程創建GUI界面&#xff0c;基于Matlab的數字圖像處理&#xff0c;對靜止的車牌圖像進行分割并識別&#xff0c;通過編寫matlab程序對圖像進行灰度處理、二值化、腐蝕膨脹和邊緣化處理等&#xff0c;并定位車牌的文字&#xff0c;實現字符的…

JAVA---面向對象(下)

重生之我開始補知識第三集 1.標準 JavaBean 要求&#xff1a; 1&#xff09;類名需要見名知意 2&#xff09;成員變量使用private修飾 3&#xff09;至少提供兩個構造方法 a.無參構造方法 b.帶全部參數的構造方法 4&#xff09;成員方法 a.提供每一個成員變量對應的 …

信奧賽CSP-J復賽集訓(DP專題)(24):P1977 出租車拼車

信奧賽CSP-J復賽集訓&#xff08;DP專題&#xff09;&#xff08;24&#xff09;&#xff1a;P1977 出租車拼車 題目背景 話說小 x 有一次去參加比賽&#xff0c;雖然學校離比賽地點不太遠&#xff0c;但小 x 還是想坐出租車去。大學城的出租車總是比較另類&#xff0c;有“拼…

Windows申請蘋果開發者測試證書Uniapp使用

注意事項 蘋果設備,最好是iPhone XS以上,要不然下載不了Apple DeveloperopenSSL 要是V1版本的來生成證書,要不然HBuilder報錯按步驟來,生成證書,生成標識符,添加測試設備,生成描述性文件注冊蘋果開發者賬號 (如果有蘋果賬號直接登錄) 蘋果開發者官網 開通付費 點擊右上…

dockercompose文件倉庫

mysql version: 3 # 使用docker-compose的版本&#xff0c;根據需要可以調整# 創建數據目錄 # mkdir -p /home/docker/mysql/mysql_data # mkdir -p /home/docker/mysql/mysql_logs # 給予適當的權限&#xff08;確保MySQL容器可以讀寫這些目錄&#xff09; # chmod 777 /ho…