系列1:基于Centos-8.6部署Kubernetes (1.24-1.30)

每日禪語

“木末芙蓉花,山中發紅萼,澗戶寂無人,紛紛開自落。?”這是王維的一首詩,名叫《辛夷塢》?。這首詩寫的是在辛夷塢這個幽深的山谷里,辛夷花自開自落,平淡得很,既沒有生的喜悅,也沒有死的悲哀。無情有性,辛夷花得之于自然,又回歸自然。它不需要贊美,也不需要人們對它的凋謝灑同情之淚,它把自己生命的美麗發揮到了極致。在佛家眼中,眾生平等,沒有高低貴賤,每個個體都自在自足,自性自然圓滿。?《占察善惡業報經》有云:?“如來法身自性不空,有真實體,具足無量清凈功業,從無始世來自然圓滿,非修非作,乃至一切眾生身中亦皆具足,不變不異,無增無減。?”一個人如果能體察到自身不增不減的天賦,就能在世間擁有精彩和圓滿。我們常常會有這樣的感覺,遠處的風景都被籠罩在薄霧或塵埃之下,越是走近就越是朦朧;心里的念頭被圍困在重巒疊嶂之中,越是急于走出迷陣就越是辨不清方向。這是因為我們過多地執著于思維,而忽視了自性。

寫作初衷

網絡上關于k8s的部署文檔紛繁復雜,而且k8s的入門難度也比docker要高,我學習k8s的時候為了部署一套完整的k8s集群環境,尋找網上各種各樣的文檔信息,終究不得其中奧秘,所以光是部署這一步導致很多人退而缺步,最終而放棄學習,所以寫了這篇文章讓更多的k8s學習愛好者一起學習,讓大家可以更好的部署集群環境。

注:未標明具體節點的操作需要在所有節點上都執行。?

部署模式:兩主一從

市面上大部分的部署教程都是一個主節點,兩個從節點這種方式,很少有人寫這種高可用的部署方法,筆者開始的部署模式也是一主兩從,但是真正在使用的時候會發現主節點不是太穩定,經常會導致集群宕機。所以本文是采用兩主一從的方式部署

服務器節點名稱k8s節點角色
192.168.11.85k8s-mastercontrol-plane
192.168.11.86k8s-master1control-plane
192.168.11.87k8s-nodeworker

1.部署機器初始化操作

1.1 關閉selinux

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

1.2配置主機名稱

  • 控制節點(主節點)其他的控制節點也如下命令添加
# hostnamectl set-hostname k8s-master
  • 子節點設置服務器名稱也是一樣操作
# hostnamectl set-hostname k8s-node
# hostnamectl set-hostname k8s-node1
# hostnamectl set-hostname k8s-node2

1.3關閉交換分區swap

vim /etc/fstab   //注釋swap掛載,給swap這行開頭加一下注釋。# /dev/mapper/centos-swap swap  swap  defaults  0  0
# 重啟服務器讓其生效
reboot now

1.4修改機器內核參數

# modprobe br_netfilter# echo "modprobe br_netfilter" >> /etc/profile# cat > /etc/sysctl.d/k8s.conf <<EOFnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1net.ipv4.ip_forward = 1EOF
# sysctl -p /etc/sysctl.d/k8s.conf
# vim /etc/rc.sysinit    //重啟后模塊失效,下面是開機自動加載模塊的腳本,在/etc/新建rc.sysinit 文件#!/bin/bash
for file in /etc/sysconfig/modules/*.modules; do
[ -x $file ] && $file
done# vim /etc/sysconfig/modules/br_netfilter.modules    //在/etc/sysconfig/modules/目錄下新建文件
modprobe br_netfilter# chmod 755 /etc/sysconfig/modules/br_netfilter.modules    //增加權限

1.5關閉防火墻

# systemctl stop firewalld; systemctl disable firewalld

1.6配置yum源

備份基礎repo源# mkdir /root/repo.bak# cd /etc/yum.repos.d/# mv * /root/repo.bak/
# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
# yum makecache
# yum -y install yum-utils# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

1.7安裝基礎軟件包

# yum -y install yum-utils openssh-clients device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack ntpdate telnet ipvsadm

2安裝containerd

2.1安裝containerd

# yum install containerd.io-1.6.6 -y

2.2配置containerd配置

# mkdir -p /etc/containerd# containerd config default > /etc/containerd/config.toml    //生成containerd配置文件# vim /etc/containerd/config.toml    //修改配置文件把SystemdCgroup = false修改成SystemdCgroup = true把sandbox_image = "k8s.gcr.io/pause:3.6"修改成sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.7"

2.3配置 containerd 開機啟動,并啟動 containerd

# systemctl enable containerd  --now

2.3修改/etc/crictl.yaml文件

# cat > /etc/crictl.yaml <<EOFruntime-endpoint: unix:///run/containerd/containerd.sockimage-endpoint: unix:///run/containerd/containerd.socktimeout: 10debug: falseEOF# systemctl restart containerd

2.4配置containerd鏡像加速器

# vim /etc/containerd/config.toml文件將config_path = ""修改成如下目錄:config_path = "/etc/containerd/certs.d"# mkdir /etc/containerd/certs.d/docker.io/ -p# vim /etc/containerd/certs.d/docker.io/hosts.toml[host."https://vh3bm52y.mirror.aliyuncs.com",host."https://registry.docker-cn.com"]capabilities = ["pull"]# systemctl restart containerd

3安裝docker服務

3.1安裝docker

備注:docker也要安裝,docker跟containerd不沖突,安裝docker是為了能基于dockerfile構建鏡像# yum install docker-ce -y# systemctl enable docker --now

3.2配置docker鏡像加速器

# vim /etc/docker/daemon.json    //配置docker鏡像加速器{"registry-mirrors":["https://vh3bm52y.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com"]}# systemctl daemon-reload# systemctl restart docker

4.安裝k8s組件

4.1配置安裝k8s組件需要的阿里云的repo源(不同版本的k8s需要配置不同的repo源)

1.25版本


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=0
EOF

查看不同版本的鏡像源地址:安裝 kubeadm | Kubernetes

  • 1.30版本

# 此操作會覆蓋 /etc/yum.repos.d/kubernetes.repo 中現存的所有配置
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.30/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.30/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
  • 1.29版本
# 此操作會覆蓋 /etc/yum.repos.d/kubernetes.repo 中現存的所有配置
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
  • 其他版本的類似

4.2安裝k8s初始化工具

sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo systemctl enable --now kubelet

4.3設置容器運行時的endpoint

# crictl config runtime-endpoint /run/containerd/containerd.sock

4.4使用kubeadm初始化k8s集群(控制節點執行)

# vim kubeadm.yamlapiVersion: kubeadm.k8s.io/v1beta3...kind: InitConfigurationlocalAPIEndpoint:advertiseAddress: 172.17.11.85#控制節點的ipbindPort: 6443nodeRegistration:criSocket: unix:///run/containerd/containerd.sock   #指定containerd容器運行時的endpointimagePullPolicy: IfNotPresentname:  k8s-master #控制節點主機名taints: null---apiVersion: kubeadm.k8s.io/v1beta3certificatesDir: /etc/kubernetes/pkiclusterName: kubernetescontrollerManager: {}dns: {}etcd:local:dataDir: /var/lib/etcdimageRepository: registry.aliyuncs.com/google_containers    #指定從阿里云倉庫拉取鏡像kind: ClusterConfigurationkubernetesVersion: 1.30.0   #k8s版本networking:dnsDomain: cluster.localpodSubnet: 10.244.0.0/16    #指定pod網段serviceSubnet: 10.96.0.0/12 #指定Service網段scheduler: {}#在文件最后,插入以下內容,(復制時,要帶著---)---apiVersion: kubeproxy.config.k8s.io/v1alpha1kind: KubeProxyConfigurationmode: ipvs---apiVersion: kubelet.config.k8s.io/v1beta1kind: KubeletConfigurationcgroupDriver: systemd

4.4 修改/etc/sysconfig/kubelet

# vi /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--fail-swap-on=false"

4.5 基于kubeadm.yaml文件初始化k8s (控制節點執行)

kubeadm init --config=kubeadm.yaml --ignore-preflight-errors=SystemVerification

4.6配置kubectl的配置文件(配置kubectl的配置文件config,相當于對kubectl進行授權,這樣kubectl命令可以使用此證書對k8s集群進行管理)(控制節點執行)

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes

5.安裝kubernetes網絡組件-Calico(控制節點執行)

上傳calico.yaml到master1上,使用yaml文件安裝calico 網絡插件(這里需要等幾分鐘才能ready)。kubectl apply -f calico.yaml注:在線下載配置文件地址是:https://docs.projectcalico.org/manifests/calico.yaml

6.控制節點部署成功以后,添加node節點

注:未標明具體節點的操作需要在node節點上都執行。?執行完成以后在進行下面步驟的操作

6.1上述的所有操作都已經操作成功,除控制節點的操作

在看k8s-master上查看加入節點的命令:[root@k8s-master ~]# kubeadm token create --print-join-commandkubeadm join 192.168.11.85:6443 --token ol7rnk.473w56z16o24u3qs --discovery-token-ca-cert-hash sha256:98d33a741dd35172891d54ea625beb552acf6e75e66edf47e64f0f78365351c6把k8s-node加入k8s集群:[root@k8s-node ~]# kubeadm join 192.168.11.85:6443 --token ol7rnk.473w56z16o24u3qs --discovery-token-ca-cert-hash sha256:98d33a741dd35172891d54ea625beb552acf6e75e66edf47e64f0f78365351c6

6.2可以把node的ROLES變成work,按照如下方法

[root@k8s-master ~]# kubectl label node k8s-node node-role.kubernetes.io/worker=worker

6.3查看節點情況

kubectl get nodes    //在master上查看集群節點狀況

7.添加master1控制節點

?注:未標明具體節點的操作需要在看s-master1節點上都執行。?執行完成以后在進行下面步驟的操作

7.1在當前唯一的master節點上運行如下命令,獲取key

1 # kubeadm init phase upload-certs --upload-certs
2 I1109 14:34:00.836965    5988 version.go:255] remote version is much newer: v1.25.3; falling back to: stable-1.22
3 [upload-certs] Storing the certificates in Secret "kubeadm-certs" in the "kube-system" Namespace
4 [upload-certs] Using certificate key:
5 ecf2abbfdf3a7bc45ddb2de75152ec12889971098d69939b98e4451b53aa3033

?7.2在當前唯一的master節點上運行如下命令,獲取token

在看k8s-master上查看加入節點的命令:[root@k8s-master ~]# kubeadm token create --print-join-commandkubeadm join 192.168.11.85:6443 --token ol7rnk.473w56z16o24u3qs --discovery-token-ca-cert-hash sha256:98d33a741dd35172891d54ea625beb552acf6e75e66edf47e64f0f78365351c6

7.3將獲取的key和token進行拼接

kubeadm join 192.168.11.85:6443 --token xxxxxxxxx --discovery-token-ca-cert-hash xxxxxxx --control-plane --certificate-key xxxxxxx

注意事項:

  1. 不要使用 --experimental-control-plane,會報錯
  2. 要加上--control-plane --certificate-key ,不然就會添加為node節點而不是master
  3. join的時候節點上不要部署,如果部署了kubeadm reset后再join

7.4將7.3步驟拼接好的join命令,在master1節點執行,執行成功以后顯示如下信息

This node has joined the cluster and a new control plane instance was created:* Certificate signing request was sent to apiserver and approval was received.
* The Kubelet was informed of the new secure connection details.
* Control plane (master) label and taint were applied to the new node.
* The Kubernetes control plane instances scaled up.
* A new etcd member was added to the local/stacked etcd cluster.To start administering your cluster from this node, you need to run the following as a regular user:mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configRun 'kubectl get nodes' to see this node join the cluster.

7.5報錯處理

7.5.1?第一次加入集群的時候會有以下報錯:

[preflight] Running pre-flight checks
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
error execution phase preflight:
One or more conditions for hosting a new control plane instance is not satisfied.unable to add a new control plane instance a cluster that doesn't have a stable controlPlaneEndpoint addressPlease ensure that:
* The cluster has a stable controlPlaneEndpoint address.
* The certificates that must be shared among control plane instances are provided.To see the stack trace of this error execute with --v=5 or higher

7.5.2解決辦法

查看kubeadm-config.yaml
kubectl -n kube-system get cm kubeadm-config -oyaml
發現沒有controlPlaneEndpoint
添加controlPlaneEndpoint
kubectl -n kube-system edit cm kubeadm-config
大概在這么個位置:
kind: ClusterConfiguration
kubernetesVersion: v1.25.3
controlPlaneEndpoint: 192.168.11.86 #當前需要添加為master節點的ip地址
然后再在準備添加為master的節點(k8s-master1)上執行kubeadm join的命令

7.6添加成功以后可以看見2個master節點和1個worker節點

?后記

k8s的部署確實很復雜,有可能不同的系統版本,依賴版本都可能導致問題的出現,筆者這里是根據當前操作系統部署,如果你在安裝過程中可能遇到一些奇奇怪怪的問題,歡迎下方留言,我們一起探討。文中可能也有一些漏洞,歡迎指出問題,萬分感謝。

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

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

相關文章

Y20030004基于asp.net+Sql的環保網站的設計與實現(附源碼 調試 文檔)

環保網站的設計與實現 1.摘要要2. 系統功能3.功能結構圖4.界面展示5.源碼獲取 1.摘要要 近幾年國家對于環境管理是高度重視&#xff0c;尤其是對于環境生態的破壞與環境污染&#xff0c;已經嚴重影響到人類的生存和發展。為了使生態環境能夠得到保護和改善&#xff0c;持續發展…

安全計算環境-(一)路由器-1

安全計算環境-網絡設備 安全管理中心針對整個系統提出了安全管理方面的技術控制要求&#xff0c;通過技術手段實現集中管理&#xff1b;涉及的安全控制點包括系統管理、審計管理、安全管理和集中管控。以下以三級等級保護對象為例&#xff0c;描述安全管理中心各個控制要求項的…

D9741是一塊脈寬調制方三用于也收路像機和筆記本電的等設備上的直流轉換器。在便攜式的儀器設備上。

概述&#xff1a; D9741是一塊脈寬調制方三用于也收路像機和筆記本電的等設備上的直流轉換器。在便攜式的儀器設備上。 主要特點&#xff1a; ● 高精度基準電路 ● 定時閂鎖、短路保護電路 ● 低電壓輸入時誤操作保護電路 ● 輸出基準電壓(2.5V) ● 超過工作范圍能進行自動校…

數據挖掘之聚類分析

聚類分析&#xff08;Clustering Analysis&#xff09; 是數據挖掘中的一項重要技術&#xff0c;旨在根據對象間的相似性或差異性&#xff0c;將對象分為若干組&#xff08;簇&#xff09;。同一簇內的對象相似性較高&#xff0c;而不同簇間的對象差異性較大。聚類分析廣泛應用…

Qt 圖形框架下圖形拖動后位置跳動問題

在使用Qt 的圖形框架QGraphicsScene&#xff0c;QGraphicsView實現圖形顯示時。遇到一個很棘手的BUG。 使用的圖形是自定義的QGraphicsObject的子類。 現象是將圖形添加到畫布上之后&#xff0c;用鼠標拖動圖形&#xff0c;圖形能正常改變位置&#xff0c;當再次用鼠標點擊圖…

Vue技術中參數傳遞:Props與事件的實踐指南

在Vue.js中&#xff0c;組件間的參數傳遞是構建動態和交互式應用的核心。本文將深入探討如何通過Props和事件&#xff08;$emit&#xff09;在Vue組件間進行參數傳遞&#xff0c;并提供代碼示例。 Props傳遞數據 Props是Vue中組件間傳遞數據的一種方式&#xff0c;它允許父組…

一、LRU緩存

LRU緩存 1.LRU緩存介紹2.LRU緩存實現3.LRU緩存總結3.1 LRU 緩存的應用3.2 LRU 緩存的優缺點 1.LRU緩存介紹 LRU是Least Recently Used 的縮寫&#xff0c;意為“最近最少使用”。它是一種常見的緩存淘汰策略&#xff0c;用于在緩存容量有限時&#xff0c;決定哪些數據需要被刪…

LabVIEW光柵衍射虛擬仿真系統

隨著現代教育技術的快速發展&#xff0c;虛擬仿真實驗平臺逐漸成為物理實驗教學的重要輔助工具。基于LabVIEW的平面透射光柵虛擬仿真系統幫助學生更好地理解和分析光柵衍射現象&#xff0c;提高教學質量和學生的學習興趣。 項目背景 在波動光學的教學中&#xff0c;光柵衍射實…

241211 selenium問題記錄

The process started from chrome location /usr/bin/chromedriver is no longer running, so ChromeDriver is assuming that Chrome has crashed. 聲明option類 chrome_option.add_argument(--headless) 后臺啟動webdriver NoSuchDriverException(msg) from err selenium.c…

前端核心知識總結

?前端架構知識總結?主要包括以下幾個方面&#xff1a; ?HTML?&#xff1a;HTML是構建網頁的基礎&#xff0c;使用各種標簽定義網頁的結構&#xff0c;如<html>、<head>、<body>等。HTML5引入了新的語義化標簽&#xff0c;如<article>、<section…

libcublas.so.11: cannot open shared object file: no such file or di

問題&#xff1a;在linux系統安裝tensorrt后import tensorrt時出現 libcublas.so.11: cannot open shared object file: no such file or directory 或者 libcublasLt.so.11&#xff1a;cannot open shared object file: no such file or directory 或者 libcudnn.so.8&…

Linux編譯Kernel時的文件zImage、文件dtb(dtbs)、核心模塊分別是什么東西?

zImage文件的介紹 在編譯Linux內核時&#xff0c;zImage 是一種內核映像文件&#xff0c;它是內核的壓縮版本&#xff0c;通常用于引導嵌入式設備或其他資源有限的環境。 zImage 的具體含義 zImage 是 “Compressed Kernel Image” 的縮寫。它是通過壓縮原始的內核映像&…

Spring Boot 3.x嵌入MongoDB 進行測試

在現代應用開發中&#xff0c;數據庫是不可或缺的一部分。對于使用 MongoDB 的 Java 應用&#xff0c;進行單元測試時&#xff0c;通常需要一個輕量級的數據庫實例。de.flapdoodle.embed.mongo 是一個非常有用的庫&#xff0c;它允許開發者在測試中嵌入 MongoDB 實例&#xff0…

scala隱式類

1 定義 隱式類指的是用implicit關鍵字修飾的類。在對應的作用域內&#xff0c;帶有這個關鍵字的類的主構造函數可用于隱式轉換。 2示例 現在有一個需求&#xff1a;有一個 Person 類&#xff0c;含有work&#xff08;&#xff09;方法&#xff0c;有一個 Student 類&#xff0…

Swin Transformer:用Transformer實現CNN多尺度操作

文本是關于Swin Transformer基礎知識的了解 論文&#xff1a;https://arxiv.org/pdf/2103.14030 項目&#xff1a;https://github. com/microsoft/Swin-Transformer. 實現一個Swin Transformer&#xff1a;Swin Transformer模型具體代碼實現-CSDN博客 Swin Transformer mlp…

系列2:基于Centos-8.6Kubernetes 集成GPU資源信息

每日禪語 自省&#xff0c;就是自我反省、自我檢查&#xff0c;自知己短&#xff0c;從而彌補短處、糾正過失。佛陀強調自覺覺他&#xff0c;強調以達到覺行圓滿為修行的最高境界。要改正錯誤&#xff0c;除了虛心接受他人意見之外&#xff0c;還要不忘時時觀照己身。自省自悟之…

flutter控件buildDragTargetWidget詳解

文章目錄 1. DragTarget 的核心概念基本屬性 2. 基本用法3. 使用 buildDragTargetWidget4. 常見場景5. 注意事項 buildDragTargetWidget 不是 Flutter 中的內置 API 或方法&#xff0c;但根據命名習慣&#xff0c;它很可能是您正在實現或使用的一個方法&#xff0c;用于在 Flut…

MySQL遷移SQLite

將 MySQL 的表結構和數據遷移到 SQLite&#xff0c;可以通過以下步驟實現。這個過程主要包括導出 MySQL 數據庫到 SQL 文件&#xff0c;然后將其導入到 SQLite 數據庫中。 步驟 1: 導出 MySQL 數據庫 首先&#xff0c;需要將 MySQL 數據庫導出為一個 SQL 文件。可以使用 mysq…

【數據結構——內排序】二路歸并排序(頭歌實踐教學平臺習題)【合集】

目錄&#x1f60b; 任務描述 測試說明 我的通關代碼: 測試結果&#xff1a; 任務描述 本關任務&#xff1a;實現二路歸并算法。 測試說明 平臺會對你編寫的代碼進行測試&#xff1a; 測試輸入示例&#xff1a; 11 18 2 20 34 12 32 6 16 5 8 1 (說明&#xff1a;第一行是元…

近期數據安全事件通報處罰案例分析與建議

近期典型事件案例 案例一&#xff1a;北京某公司未建立數據安全管理制度和操作規程&#xff0c;造成大量公民個人信息泄露 北京某公司的數據管理人員&#xff0c;某天發現公司的客戶數據疑似泄露在境外非法網站上隨后報警。經檢查&#xff0c;該公司的技術人員在數據庫系統測試…