K8S單Master集群安裝(Containerd)

来源:https://www.cnblogs.com/Pigs-Will-Fly/archive/2023/05/15/17403407.html
-Advertisement-
Play Games

原創文檔編寫不易,未經許可請勿轉載。文檔中有疑問的可以郵件聯繫我。 郵箱:[email protected] 文章基於CentOS 7.8系統使用Containerdr作為容器運行時通過kubeadm指導搭建k8s單機master集群,使用calico作為k8s集群的網路插件。K8S官方在1.24版本 ...


原創文檔編寫不易,未經許可請勿轉載。文檔中有疑問的可以郵件聯繫我。 郵箱:[email protected]

文章基於CentOS 7.8系統使用Containerdr作為容器運行時通過kubeadm指導搭建k8s單機master集群,使用calico作為k8s集群的網路插件。K8S官方在1.24版本徹底棄用docker。

需要伺服器可以聯網。

環境

節點說明

主機名 IP地址 操作系統
c_master01.lvan 192.168.100.200 CentOS Linux release 7.8
c_node01.lvan 192.168.100.201 CentOS Linux release 7.8
c_node02.lvan 192.168.100.202 CentOS Linux release 7.8

軟體環境

軟體名 軟體版本 作用
CentOS Linux release 7.8 操作系統
containerd.io 1.6.14-3.1 容器運行時
cri-tools 1.25.0-0 containerd客戶端
nerdctl 1.1.0 containerd客戶端
cni-plugins v1.1.1 cni插件
metrics-server v0.6.2 k8s集群性能監控插件
kubectl 1.26.0-0 k8s控制工具
kubeadm 1.26.0-0 k8s服務端
kubelet 1.26.0-0 k8s客戶端
calico v3.24.5 K8S網路插件
pause 3.7 編車容器
表 1 軟體環境

ip地址規劃

ip地址 作用
192.168.100.200 k8s主節點
192.168.100.201 k8s子節點1
192.168.100.202 k8s子節點2
10.244.0.0/16 Pod網段地址

表 2 ip地址規劃

 

步驟預覽

  1. 操作系統配置:配置IP地址、配置主機名、關閉防火牆、關閉selinux、關閉swap、修改/etc/hosts文件、配置yum源
  2. 安裝配置docker
  3. 修改系統內核參數
  4. 安裝kubelet軟體
  5. 初始化K8S集群
  6. 子節點加入k8s集群
  7. 安裝網路插件
  8. 安裝metrics-server監控集群性能數據

 

操作過程

一、操作系統配置

該章節的所有操作所有節點上均要執行。

設置主機名

按照規劃文件中的名稱依次設置每個節點的主機名。

# hostnamectl set-hostname   規劃的主機名

IP地址配置

按照規劃文件中的IP地址依次配置每個節點的IP地址。

# systemctl stop NetworkManager;systemctl disabled NetworkManager;systemctl mask NetworkManager
# cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-修改為你的網卡名
TYPE=Ethernet
BOOTPROTO=none
NAME=修改為你的網卡名
DEVICE=修改為你的網卡名
ONBOOT=yes
IPADDR=修改為你需要設置的ip地址
NETMASK=255.255.255.0
GATEWAY=修改為你需要設置的ip地址網關
DNS1=修改為你需要設置的ip地址DNS
EOF
# systemctl restart network
# ip a

關閉selinux

在/etc/selinux/config中設置SELINUX=為disabled

# sed  -i 's/SELINUX=.*/SELINUX=disabled/g'  /etc/selinux/config
# setenforce  0

關閉swap

在/etc/fstab文件中刪除swap的掛載信息行,系統中執行swaoff -a臨時關閉swap。

# swapoff  -a
# sed -i '/swap/d'  /etc/fstab

關閉防火牆

關閉防火牆,並設置防火牆為開機不啟動

# systemctl stop firewalld;systemctl disable firewalld;systemctl mask firewalld
# systemctl status firewalld 

設置/etc/hosts文件

在/etc/hosts文件中添加所有節點的信息。

# cat >> /etc/hosts <<EOF
192.168.100.200 cmaster01.lvan  master01
192.168.100.201 cnode01.lvan    node01
192.168.100.202 cnode02.lvan    node02
EOF

配置yum源

備份當前的yun配置文件,並創建新的yum源文件。

# mkdir -p /etc/yum.repos.d/bak/
# mv /etc/yum.repos.d/CentOS* /etc/yum.repos.d/bak/
# 在/etc/yum.repos.d/目錄中創建k8s.repo、epel.repo、docker.repo、CentOS-Base.repo 四個repo源文件,具體內容如下所示。
# yum clean all
# yum repolist 

k8s.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
View Code

epel.repo

[epel]
name=Extra Packages for Enterprise Linux 7 – $basearch
baseurl=http://mirrors.aliyun.com/epel/7/$basearch
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
View Code

docker.repo

[docker-ce-stable]
name=Docker CE Stable – $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
View Code

CentOS-Base.repo

[base]
name=CentOS-$releasever – Base – mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

#released updates
[updates]
name=CentOS-$releasever – Updates – mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

#additional packages that may be useful
[extras]
name=CentOS-$releasever – Extras – mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
View Code

安裝常用工具

安裝vim、net-tools、bash-completion、wget常用的工具軟體。

# yum install vim net-tools bash-completion  wget -y 
# source  /etc/profile.d/bash_completion.sh
# echo 'set paste'  >> ~/.vimrc

 

二、安裝配置containerd

該章節的所有操作所有節點上均要執行。

安裝containerd

# yum install containerd.io-1.6.14 cri-tools -y
# crictl config runtime-endpoint unix:///var/run/containerd/containerd.sock
# systemctl restart containerd ; systemctl enable containerd

設置containerd鏡像加速

containerd 運行時配置加速:在[plugins.”io.containerd.grpc.v1.cri”.registry.mirrors]行下添加內容:[plugins.”io.containerd.grpc.v1.cri”.registry.mirrors.”docker.io”] 換行再添加 endpoint = [“https://frz7i079.mirror.aliyuncs.com”]。藍色字體及為需要添加的內容。

# containerd config default > /etc/containerd/config.toml
# vim /etc/containerd/config.toml
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
        endpoint = ["https://sdmy9bft.mirror.aliyuncs.com"]

設置cgroup驅動及sandbox_image地址

在/etc/containerd/config.toml文件修改runc.options選項SystemdCgroup = true。設置sandbox_image鏡像下載地址為阿裡雲的地址。

# sed   -i    's/SystemdCgroup.*/SystemdCgroup\ =\ true/g' /etc/containerd/config.toml 
# sed   -i    's#sandbox_image.*#sandbox_image\ =\ \"registry.aliyuncs.com/google_containers/pause:3.7\"#g'   /etc/containerd/config.toml
# systemctl restart containerd

 

三、安裝容器工具

該章節的所有操作所有節點上均要執行。

安裝cni插件

在網址:https://github.com/containernetworking/plugins/releases/ 中下載軟體包。

# wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz
# mkdir -p /opt/cni/bin/  
# tar -zxf   cni-plugins-linux-amd64-v1.1.1.tgz  -C  /opt/cni/bin/

安裝nerdctl工具

nerdctl工具是操作containerd的客戶端,可以實現操作containerd和docker一樣命令集操作。

在網址:https://github.com/containerd/nerdctl/releases 中下載軟體包只需下載精簡包即可(不帶full字樣的)。

# wget https://github.com/containerd/nerdctl/releases/download/v1.1.0/nerdctl-1.1.0-linux-amd64.tar.gz
# tar -zxvf nerdctl-1.1.0-linux-amd64.tar.gz
# mv nerdctl /bin/
# echo 'source <(nerdctl completion bash)' >> /etc/profile
# echo 'export CONTAINERD_NAMESPACE=k8s.io' >> /etc/profile
# source /etc/profile
# nerdctl images 

 

四、修改系統內核配置

該章節的所有操作所有節點上均要執行。

設置系統允許轉發,載入k8s所需的內核模塊。

# cat > /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
# modprobe overlay
# modprobe br_netfilter
# cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
# sysctl -p  /etc/sysctl.d/k8s.conf

五、安裝kubelet軟體

該章節的所有操作所有節點上均要執行。

# yum install -y kubelet-1.26.0-0 kubeadm-1.26.0-0 kubectl-1.26.0-0 --disableexcludes=kubernetes
# systemctl restart kubelet ; systemctl enable kubelet

六、初始化K8S集群

初始化k8s環境

該操作只在master節點上執行。命令執行完成過後記錄下結果。

# kubeadm init --apiserver-advertise-address=192.168.100.200 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.26.0 --pod-network-cidr=10.244.0.0/16

環境初始完成過後根據提示執行命令
# mkdir -p $HOME/.kube
# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# sudo chown $(id -u):$(id -g) $HOME/.kube/config
# kubectl get nodes 

命令執行完成過後會有如下輸出,最好複製出來保存。

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

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

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.100.200:6443 --token lskbcb.y1d3ch2a2in75y8x \
        --discovery-token-ca-cert-hash sha256:0894894ba4f405f44499b71002c762bebfd9533be6a7d17fc6d56d77db645f84

配置kubectl命令自動補齊

該操作所有節點上均要執行。

# echo 'source <(kubectl completion bash)' >>  /etc/profile
# source /etc/profile

 

六、子節點加入k8s集群

獲取加入集群的命令

該操作只在master節點上執行。

master節點環境初始化過後會自動生成一個命令。使用這個命令直接複製到子節點上實現子節點加入集群。

如果忘記了使用命令如下獲取。

 # kubeadm token create --print-join-command

加入集群

該操作只在子節點上執行。

通過之前記錄的命令或者上一步獲取的命令,在子節點中複製執行。

# kubeadm join 192.168.100.200:6443 --token q6qmz0.wq7l7iavpqr6rd5b --discovery-token-ca-cert-hash sha256:0894894ba4f405f44499b71002c762bebfd9533be6a7d17fc6d56d77db645f84

 

七、安裝網路插件calico

該章節操作只在master節點上執行。

下載calico配置文件

執行wget命令下載calico的yaml文件。

# wget https://docs.projectcalico.org/manifests/calico.yaml --no-check-certificate

修改calico配置文件

把calico.yaml文件中的CALICO_IPV4POOL_CIDR行和其下一行前的#刪除掉,並CALICO_IPV4POOL_CIDR其下行的IP地址段改為規劃文件中的網段。併在calico.yaml文件中增加藍色字體內容,指定ens33為通信網卡(多網卡環境中必須要使用,請根據自己實際情況選擇正確的網卡),格式要和CALICO_IPV4POOL_CIDR對齊。

# vim calico.yaml
 - name: CALICO_IPV4POOL_CIDR
   value: "10.244.0.0/16"
- name: IP_AUTODETECTION_METHOD
   value: "interface=ens33"

下載caclio所需鏡像(可選)

該操作只在master節點上執行。

手動下載calico所需鏡像並上傳到所有節點中,執行了kubectl apply -f calico.yaml命令後系統會自東下載,但是會有點慢。我們可以提前下載好傳到所有節點中。

# grep image calico.yaml  | grep -i calico | awk -F'/' '{print $2"/"$3 }' | uniq
# docker pull  calico/cni:v3.24.5
# docker pull  calico/node:v3.24.5
# docker pull  calico/kube-controllers:v3.24.5
# docker save -o calico_image_3_24_5.tar.gz   calico/cni:v3.24.5   calico/node:v3.24.5  calico/kube-controllers:v3.24.5
# scp calico_image_3_24_5.tar.gz  root@node01:/root/
# scp calico_image_3_24_5.tar.gz  root@node02:/root/

該操作所有節點上均要執行。

載入docker鏡像到系統中。

# docker load -i /root/calico_image_3_24_5.tar.gz

安裝calico插件

# kubectl apply -f calico.yaml
# kubectl get nodes -o wide -A
# kubectl get pod -o wide -A

圖 1-1 最終結果

八、安裝metrics-server

metrics-server可用於k8s集群資源使用監控。

訪問網址:https://github.com/kubernetes-sigs/metrics-server 在頁面中下拉找到 Installation 章節,找到如下的信息: kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml ,截取藍色高亮部分內容,在Master節點上執行命令下載conponents.yaml文件。

下載metrics-server軟體

# wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.6.1/components.yaml
# #查看components.yaml所需要鏡像及版本,提前下載
# grep  image components.yaml
        image: k8s.gcr.io/metrics-server/metrics-server:v0.6.2
        imagePullPolicy: IfNotPresent
# #該k8s.gcr.io/metrics-server/metrics-server:v0.6.2鏡像由於不可描述的原因下載起來有點麻煩。在https://hub.docker.com/中去下載。
# nerdctl pull k8simage/metrics-server:v0.6.2
# nerdctl tag  k8simage/metrics-server:v0.6.2   k8s.gcr.io/metrics-server/metrics-server:v0.6.2
# #把metrics-server鏡像打包並複製到所有節點上去。
# nerdctl save -o metrics-server.tar.gz   k8s.gcr.io/metrics-server/metrics-server:v0.6.2
# scp metrics-server.tar.gz  [email protected]:/root/
# #在其他節點上讀取載入metrics-server鏡像包。
# nerdctl load -i metrics-server.tar.gz
# #確認鏡像包導入正常。
# nerdctl images

修改metrics-server.yaml文件

在下載metrics-server的配置文件中修改添加藍色字體內容。

# sed  -i -e  's/kubelet-preferred-address-types.*/kubelet-preferred-address-types=InternalIP/g' -e 's/metric-resolution.*/metric-resolution=30s/g'  -e '/metric-resolution/a\        - --kubelet-insecure-tls' components.yaml

創建metrics-server pod

執行命令創建pod,並確認metrics-server pod運行正常,可以正常獲取到k8s資源性能數據。

# kubectl apply -f components.yaml
# kubectl get pods -A
# kubectl top nodes

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

-Advertisement-
Play Games
更多相關文章
  • 1、什麼是Spring Cloud ? Spring cloud 流應用程式啟動器是基於 Spring Boot 的 Spring 集成應用程式,提供與外部系統的集成。Spring cloud Task,一個生命周期短暫的微服務框架,用於快速構建執行有限數據處理的應用程式。 Spring Cloud ...
  • 線程阻塞概述 在生活中,最常見的阻塞現象是公路上汽車的堵塞。汽車在公路上快速行駛,如果前方交通受阻,就只好停下來等待,等到公路順暢,才能恢復行駛。 線程在運行中也會因為某些原因而阻塞。所有處於阻塞狀態的線程的共同特征:放棄 CPU,暫停運行,只有等到導致阻塞的原因消除,才能恢復運行,或者被其他線程中 ...
  • 介紹線程 線程是系統調度的最小單元,一個進程可以包含多個線程,線程是負責執行二進位指令的。 每個線程有自己的程式計數器、棧(Stack)、寄存器(Register)、本地存儲(Thread Local)等,但是會和進程內其他線程共用文件描述符、虛擬地址空間等。 對於任何一個進程來講,即便我們沒有主動 ...
  • pandas進行數據整理的意義在於,它是數據分析、數據科學和機器學習的前置步驟。 通過數據整理可以提前瞭解數據的概要,缺失值、重覆值等情況,為後續的分析和建模提供更為可靠的數據基礎。 本篇主要介紹利用pandas進行數據整理的各種方法。 1. 數據概要 獲取數據概要信息可以幫助我們瞭解數據的基本情況 ...
  • 偶數分頻:無論是通過D觸發器還是計數器實現,這類分頻都是最容易得到的,並且占空比容易控制在50%。對於D觸發器實現偶數分頻來說,分頻數只能得2^n,其餘分頻數只能由計數器法等其他方法實現。除此以外,隨著分頻的數目不斷增大,通過D觸發器實現觸發器數目會增多,在電路設計的過程中應當考慮面積因素。對於計數... ...
  • EF命令行工具 migrate.exe 進行Code First更新資料庫,6.3+使用ef6.exe 使用EF的Code First遷移可以用於從Visual Studio內部更新資料庫,但也可通過命令行工具 migrate.exe 進行執行。 如果項目已經更新到伺服器,後面的更新資料庫分為兩種辦 ...
  • ABP框架 ABP是用於創建現代化Web應用程式的完整體繫結構和強大的基礎架構,以模塊化的方式進行開發,所有模塊以nuget包的方式提供,開箱即用,遵循最佳實踐和約定,提供SOLID開發經驗。 | 縮寫 | 英文 | 中文 | |--|--|--| | SRP | The Single Respon ...
  • 以沁恆的FreeRTOS示例項目為例, 說明如何在 CH32V208 評估上運行 FreeRTOS, 以及運行 FreeRTOS 涉及的庫文件改動. ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...