自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Kubernetes集群搭建全攻略:從零到Hero

云計(jì)算 云原生
本文將帶你一步步了解如何準(zhǔn)備環(huán)境、配置服務(wù)器以及最終創(chuàng)建一個(gè)功能齊全的Kubernetes集群。

最近想學(xué)學(xué)k8s,但是網(wǎng)上的資料一言難盡,各種互抄錯(cuò)誤的文章,只在第一步——安裝,就遇到了很大問(wèn)題,讓人望而卻步。本文將帶你一步步了解如何準(zhǔn)備環(huán)境、配置服務(wù)器以及最終創(chuàng)建一個(gè)功能齊全的Kubernetes集群。

1. 準(zhǔn)備工作

環(huán)境要求

推薦準(zhǔn)備3臺(tái)服務(wù)器(or 虛擬機(jī)),搭建一主兩從架構(gòu)

  • 服務(wù)器要求(Master/Node 節(jié)點(diǎn)):

最低 2 核 CPU

2GB 以上內(nèi)存(最好4GB)

20GB 以上磁盤空間(建議最少40GB,20GB只夠k8s本身的基礎(chǔ)服務(wù))

服務(wù)器環(huán)境配置

?? 注意:下方操作必須在所有節(jié)點(diǎn)都執(zhí)行一遍

修改主機(jī)名(建議)

每個(gè)節(jié)點(diǎn)執(zhí)行一個(gè)

hostnamectl set-hostname master

hostnamectl set-hostname node1

hostnamectl set-hostname node2

關(guān)閉 swap(必須)

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

Kubernetes 需要確保調(diào)度的 Pod 運(yùn)行在資源可預(yù)測(cè)的環(huán)境下,而 swap(交換空間)可能導(dǎo)致內(nèi)存分配不穩(wěn)定。因此,Kubernetes 要求禁用 swap,保證節(jié)點(diǎn)上的內(nèi)存管理更加穩(wěn)定。

關(guān)閉防火墻(可選)

建議關(guān)閉以避免端口問(wèn)題

systemctl stop firewalld && systemctl disable firewalld

配置內(nèi)核參數(shù)(必須)

cat <<EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

modprobe overlay
modprobe br_netfilter

cat <<EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

sysctl --system

br_netfilter必須配置,否則 Kubernetes 的網(wǎng)絡(luò)流量管理可能無(wú)法正常工作。

作用

  1. br_netfilter 讓 Linux 處理橋接網(wǎng)絡(luò)流量時(shí)應(yīng)用 iptables 規(guī)則
  • Kubernetes 依賴 iptables 進(jìn)行網(wǎng)絡(luò)策略、NAT 和轉(zhuǎn)發(fā)規(guī)則的管理。默認(rèn)情況下,Linux 不會(huì)對(duì)網(wǎng)橋流量(bridge traffic)應(yīng)用 iptables 規(guī)則,因此需要手動(dòng)啟用。
  1. 啟用 IPv4 轉(zhuǎn)發(fā)
  • 默認(rèn)情況下,Linux 可能不允許 IPv4 轉(zhuǎn)發(fā)(net.ipv4.ip_forward=1)。但 Kubernetes 依賴 IP 轉(zhuǎn)發(fā)功能,確保 Pod 網(wǎng)絡(luò)可以跨節(jié)點(diǎn)通信。

配置containerd(建議)

?? 注意:如果用containerd作為k8s的容器,必須配置

  • 確保主機(jī)已經(jīng)安裝了containerd,并確保 containerd 正在運(yùn)行
systemctl status containerd

如果沒(méi)有安裝,可以參考如下文章,安裝完docker之后,會(huì)自帶containerd,并且服務(wù)器使用Docker的情況較多,推薦直接安裝docker

  • 修改 containerd 配置文件

生成默認(rèn)配置

containerd config default | tee /etc/containerd/config.toml

**編輯 /etc/containerd/config.toml**:

vi /etc/containerd/config.toml
  1. 找到并修改如下內(nèi)容:
  • sandbox_image = "k8s.gcr.io/pause:3.8"修改成 sandbox_image = "registry.k8s.io/pause:3.10"
  • k8s 版本為1.32.2,對(duì)應(yīng)  pause:3.10
  • 啟用 CRI 插件(確保 [plugins."io.containerd.grpc.v1.cri"] 沒(méi)有被注釋)
  • 修改 SystemdCgroup = true(重要!否則 K8s 可能不兼容)
  • 修改 sandbox_image
  • 在如下位置
[plugins."io.containerd.grpc.v1.cri"]
  ...
  sandbox_image = "registry.k8s.io/pause:3.10"
  [plugins."io.containerd.grpc.v1.cri".containerd]
    default_runtime_name = "runc"
    [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
      runtime_type = "io.containerd.runc.v2"
      [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
        SystemdCgroup = true

重啟 containerd

systemctl restart containerd

配置 crictl.yaml(必須)

需要手動(dòng)指定 containerd 的 CRI socket,配置 containerd 連接k8s

創(chuàng)建或編輯 /etc/crictl.yaml 文件:

cat <<EOF | tee /etc/crictl.yaml
runtime-endpoint: "unix:///run/containerd/containerd.sock"
EOF

重啟 containerd

systemctl restart containerd

2.安裝kubeadm

Master 節(jié)點(diǎn)需要安裝 kubeadmkubelet、kubectl

Node 節(jié)點(diǎn),需要安裝 kubeadm、kubelet

安裝 kubeadmkubelet、kubectl(確保版本一致):

以下指令適用于 Kubernetes 1.32

  • 更新 apt 包索引并安裝使用 Kubernetes apt 倉(cāng)庫(kù)所需要的包
# 更新軟件包索引
sudo apt-get update
# apt-transport-https 可能是一個(gè)虛擬包(dummy package);如果是的話,你可以跳過(guò)安裝這個(gè)包
sudo apt-get install -y apt-transport-https ca-certificates curl gpg
  • 下載用于 Kubernetes 軟件包倉(cāng)庫(kù)的公共簽名密鑰。所有倉(cāng)庫(kù)都使用相同的簽名密鑰,因此你可以忽略URL中的版本:
# 如果 `/etc/apt/keyrings` 目錄不存在,則應(yīng)在 curl 命令之前創(chuàng)建它
# sudo mkdir -p -m 755 /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
  • 添加 Kubernetes apt 倉(cāng)庫(kù)。請(qǐng)注意,此倉(cāng)庫(kù)僅包含適用于 Kubernetes 1.32 的軟件包;對(duì)于其他 Kubernetes 次要版本,則需要更改 URL 中的 Kubernetes 次要版本以匹配你所需的次要版本
# 此操作會(huì)覆蓋 /etc/apt/sources.list.d/kubernetes.list 中現(xiàn)存的所有配置。
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
  • 更新 apt 包索引,安裝 kubelet、kubeadm 和 kubectl,并鎖定其版本:

Master節(jié)點(diǎn)需要安裝 kubectl

# Master節(jié)點(diǎn)
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl

# 鎖定版本
sudo apt-mark hold kubelet kubeadm kubectl

node節(jié)點(diǎn)不需要安裝 kubectl

sudo apt-get update
sudo apt-get install -y kubelet kubeadm

# 鎖定版本
sudo apt-mark hold kubelet kubeadm

3. 使用 kubeadm 創(chuàng)建集群

 注意:此操作只需要在Master節(jié)點(diǎn)執(zhí)行

一、創(chuàng)建kubeadm-config.yaml 配置文件,寫入如下內(nèi)容:

# k8s 集群配置
apiVersion:kubeadm.k8s.io/v1beta4
kind:ClusterConfiguration
# 安裝的 Kubernetes 版本
kubernetesVersion:1.32.0
# 單主節(jié)點(diǎn)可修改為主節(jié)點(diǎn)的 IP,端口不要修改
# 多主節(jié)點(diǎn) 應(yīng)設(shè)置為 VIP 或負(fù)載均衡地址
controlPlaneEndpoint:192.168.204.128:6443
networking:
# 指定pod網(wǎng)段
podSubnet:10.244.0.0/16
# 指定Service網(wǎng)段
serviceSubnet:10.96.0.0/12

etcd:
local:
    dataDir:"/var/lib/etcd"

controllerManager:{}
scheduler:{}

---
# kubeadm 初始化配置
apiVersion:kubeadm.k8s.io/v1beta4
kind:InitConfiguration
#  控制當(dāng)前 master 節(jié)點(diǎn)上的 kube-apiserver 監(jiān)聽 IP 和端口,只影響當(dāng)前節(jié)點(diǎn)。
localAPIEndpoint:
# 設(shè)為當(dāng)前master節(jié)點(diǎn)ip地址
advertiseAddress:192.168.204.128
bindPort:6443
nodeRegistration:
# 你的主節(jié)點(diǎn)名稱
name:"master"
# containerd 的默認(rèn) socket
criSocket:"unix:///run/containerd/containerd.sock"
taints:null

---
apiVersion:kubelet.config.k8s.io/v1beta1
kind:KubeletConfiguration
cgroupDriver:"systemd"

---
# kube-proxy 配置
apiVersion:kubeproxy.config.k8s.io/v1alpha1
kind:KubeProxyConfiguration
# 采用 IPVS 模式(更高效)
mode:"ipvs"

二、使用配置文件,初始化集群

初始化集群之前,可以先執(zhí)行預(yù)檢,檢驗(yàn)環(huán)境是否還有其他問(wèn)題。

kubeadm init phase preflight --config kubeadm-config.yaml

會(huì)提示你可以先將k8s需要的鏡像拉取下來(lái)

kubeadm config images pull

如果沒(méi)有問(wèn)題了,就可以執(zhí)行初始化命令,初始化集群

kubeadm init --config=kubeadm-config.yaml --upload-certs

之后就可以看到執(zhí)行成功的命令

而且他還提示你接下來(lái)需要執(zhí)行的操作

圖片圖片

圖片圖片

4. 完成k8s集群搭建

接下來(lái),你需要完成 幾個(gè)關(guān)鍵步驟 來(lái)讓 Kubernetes 集群正常工作:

1)配置 kubectl 訪問(wèn)集群

配置kubectl的配置文件,相當(dāng)于對(duì)kubectl進(jìn)行授權(quán),這樣kubectl命令可以使用此證書對(duì)k8s集群進(jìn)行管理 所有控制節(jié)點(diǎn)創(chuàng)建成功后 均執(zhí)行此命令

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

然后測(cè)試 kubectl 是否能正常連接集群:

kubectl get nodes

如果輸出 NotReady,表示還需要部署 網(wǎng)絡(luò)插件。

例:

root@master:~# export KUBECONFIG=/etc/kubernetes/admin.conf
root@master:~# kubectl get nodes
NAME     STATUS     ROLES           AGE     VERSION
master   NotReady   control-plane   6m10s   v1.32.2

2)部署 Pod 網(wǎng)絡(luò)插件

Kubernetes 默認(rèn)不包含 CNI(容器網(wǎng)絡(luò)接口)插件,你需要選擇一個(gè)來(lái)管理 Pod 網(wǎng)絡(luò)。

選擇使用 Calico 網(wǎng)絡(luò)插件,相比于 Flannel 更高效

這里k8s 集群的版本是 v1.32.2,對(duì)應(yīng) Calico 的版本是 v3.29.2

其他版本對(duì)照參照:System requirements | Calico Documentation

文件地址是 https://raw.githubusercontent.com/projectcalico/calico/<版本號(hào)>/manifests/calico.yaml

wget -O calico.yaml https://raw.githubusercontent.com/projectcalico/calico/v3.29.2/manifests/calico.yaml

kubectl apply -f calico.yaml

之后,檢查網(wǎng)絡(luò)插件是否正常運(yùn)行:

kubectl get pods -n kube-system

等待 calico-node 的 Pod 變?yōu)?nbsp;Running 狀態(tài)。

狀態(tài)變化:Pending --> Init:0/3 --> Running ;這個(gè)過(guò)程可能需要數(shù)分鐘時(shí)間

3) 添加Node節(jié)點(diǎn)

確保已經(jīng)在 Node 節(jié)點(diǎn)上安裝了 kubelet 和 kubeadm,并且 kubelet 是自啟動(dòng)的

sudo systemctl enable --now kubelet

在 192.168.204.129 和 192.168.204.130 分別執(zhí)行如下命令,就是在Master節(jié)點(diǎn)安裝完成之后提示的命令

kubeadm join 192.168.204.128:6443 --token emjun9.wvgusblbismxmczb \
      --discovery-token-ca-cert-hash sha256:93811b04fda229a7560da0473bae1515d4f54f3f6ac9c074177e90b249ab46be

如果沒(méi)有保存命令,可以在master節(jié)點(diǎn)執(zhí)行命令,重新生成

kubeadm token create --print-join-command

4. 驗(yàn)證集群是否正常運(yùn)行

執(zhí)行以下命令,確認(rèn)所有節(jié)點(diǎn)和組件都 Ready

kubectl get nodes
kubectl get pods -n kube-system

如果所有 Node 變成 Ready,并且 kube-system 里的 Pod 狀態(tài)都變?yōu)?nbsp;Running,說(shuō)明 Kubernetes 集群已經(jīng)完全運(yùn)行 ??!

剛加入集群時(shí),可能會(huì)有 calico-node 在初始化狀態(tài)中,等待即可

完成后,你的 Kubernetes 集群就有 1 Master + 2 Node,正式可用了! 

可選

root@master:~# kubectl get nodes
NAME     STATUS   ROLES           AGE     VERSION
master   Ready    control-plane   33m     v1.32.2
node1    Ready    <none>          12s     v1.32.2
node2    Ready    <none>          2m58s   v1.32.2

node1 和 node2 在 kubectl get nodes 輸出中,ROLES 顯示為空,這是正常的,只是它們還沒(méi)有被賦予特定的角色。

默認(rèn)情況下,kubeadm join 只是將它們加入集群為 Worker 節(jié)點(diǎn),并不會(huì)自動(dòng)分配角色。節(jié)點(diǎn)可以正常運(yùn)行 Pod,不會(huì)影響集群功能。

如果你希望 kubectl get nodes 結(jié)果中顯示 worker,可以給 node1 和 node2 添加 worker 角色:

kubectl label node node1 node-role.kubernetes.io/worker=
kubectl label node node2 node-role.kubernetes.io/worker=

然后再運(yùn)行:

kubectl get nodes

現(xiàn)在 ROLES 列會(huì)顯示 worker。

責(zé)任編輯:武曉燕 來(lái)源: Java技術(shù)指北
相關(guān)推薦

2025-04-02 09:33:01

2024-10-25 15:25:42

2023-12-18 09:32:08

ES集群遷移上云oss插件

2013-06-08 11:13:00

Android開發(fā)XML解析

2013-04-15 10:48:16

Xcode ARC詳解iOS ARC使用

2024-05-07 09:01:21

Queue 模塊Python線程安全隊(duì)列

2010-04-23 14:04:23

Oracle日期操作

2020-03-05 09:53:59

ElasticSearLuceneJava

2014-03-19 17:22:33

2009-10-19 15:20:01

家庭綜合布線

2009-12-14 14:32:38

動(dòng)態(tài)路由配置

2009-02-20 11:43:22

UNIXfish全攻略

2018-11-12 11:09:24

2009-12-17 16:15:00

CCNA640-810

2010-08-25 14:36:02

DHCP服務(wù)器

2019-06-27 11:47:21

Wordpress容器化HTTPS

2020-11-23 15:21:12

Linux環(huán)境變量

2009-11-10 12:08:15

2009-02-12 10:12:00

NAT配置

2009-07-17 17:43:49

Jruby開發(fā)Web
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)