Kubernetes,通??s寫為K8s,是一個(gè)開源的容器編排平臺(tái),旨在自動(dòng)化容器化應(yīng)用的部署、擴(kuò)展和管理。有了Kubernetes,您可以輕松地部署、更新和擴(kuò)展應(yīng)用,而無需擔(dān)心底層基礎(chǔ)設(shè)施。
一個(gè)Kubernetes集群由控制平面節(jié)點(diǎn)(master節(jié)點(diǎn))和工作節(jié)點(diǎn)(worker節(jié)點(diǎn))組成。確保集群的高效運(yùn)行和管理的順暢進(jìn)行。我們通常在工作節(jié)點(diǎn)上運(yùn)行應(yīng)用工作負(fù)載,而控制平面節(jié)點(diǎn)作為控制平面,用于管理集群中的工作節(jié)點(diǎn)和Pod。
前提條件
首先我們需要準(zhǔn)備一臺(tái)云服務(wù)器,我是在PetaExpress領(lǐng)了一臺(tái)免費(fèi)的云服務(wù)器,https://cn.petaexpress.com,文章結(jié)尾告訴你申請(qǐng)步驟。
在本指南中,我們使用一臺(tái)控制平面節(jié)點(diǎn)和兩臺(tái)工作節(jié)點(diǎn)。以下是每個(gè)節(jié)點(diǎn)的系統(tǒng)要求:
· 安裝了最小化的Ubuntu 22.04
· 最少2GB內(nèi)存或更多
· 至少2個(gè)CPU核心或2個(gè)vCPU
· /var上至少有20GB的可用磁盤空間
· 具有管理員權(quán)限的Sudo用戶
· 每個(gè)節(jié)點(diǎn)都有可以互通
·
實(shí)驗(yàn)設(shè)置
· 控制平面節(jié)點(diǎn):172.20.0.2– k8smaster.example.net
· 第一工作節(jié)點(diǎn):172.20.0.3 – k8sworker1.example.net
· 第二工作節(jié)點(diǎn):172.20.0.4 – k8sworker2.example.net
1)設(shè)置每個(gè)節(jié)點(diǎn)的主機(jī)名
登錄到PetaExpress控制平面節(jié)點(diǎn)并通過hostnamectl命令設(shè)置主機(jī)名:
$ sudo hostnamectl set-hostname "k8smaster.example.net"
$ exec bash
在工作節(jié)點(diǎn)上,運(yùn)行:
$ sudo hostnamectl set-hostname "k8sworker1.example.net" // 第一工作節(jié)點(diǎn)
$ sudo hostnamectl set-hostname "k8sworker2.example.net" // 第二工作節(jié)點(diǎn)
$ exec bash
在每個(gè)節(jié)點(diǎn)的 /etc/hosts 文件中添加以下行:
172.20.0.2 k8smaster.example.net k8smaster
172.20.0.3 k8sworker1.example.net k8sworker1
172.20.0.4 k8sworker2.example.net k8sworker2
2)禁用交換分區(qū)并添加內(nèi)核參數(shù)
執(zhí)行以下swapoff和sed命令以禁用交換分區(qū)。確保在所有節(jié)點(diǎn)上運(yùn)行以下命令:
$ sudo swapoff -a
$ sudo sed -i '/ swap / s/^.?.?$/#1/g' /etc/fstab
在所有節(jié)點(diǎn)上加載以下內(nèi)核模塊:
$ sudo tee /etc/modules-load.d/containerd.conf <
overlay
br_netfilter
EOF
$ sudo modprobe overlay
$ sudo modprobe br_netfilter
為Kubernetes設(shè)置以下內(nèi)核參數(shù),運(yùn)行以下tee命令:
$ sudo tee /etc/sysctl.d/kubernetes.conf <
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOT
重新加載上述更改,運(yùn)行:
$ sudo sysctl --system
3)安裝Containerd run time
在本指南中,我們使用Containerd作為Kubernetes集群的run time。因此,要安裝Containerd,首先安裝其依賴項(xiàng):
$ sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates
啟用Docker倉庫:
$ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/docker.gpg
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
現(xiàn)在,運(yùn)行以下apt命令以安裝Containerd:
$ sudo apt update
$ sudo apt install -y containerd.io
配置Containerd以便其使用systemd作為cgroup:
$ containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
$ sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
重啟并啟用Containerd服務(wù):
$ sudo systemctl restart containerd
$ sudo systemctl enable containerd
4)添加Kubernetes的Apt倉庫
Kubernetes包在默認(rèn)的Ubuntu 20.04包倉庫中不可用。因此,我們需要添加Kubernetes倉庫。運(yùn)行以下命令以下載公共簽名密鑰:
$ curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
接下來,運(yùn)行以下echo命令以添加Kubernetes apt倉庫:
$ echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
5)安裝Kubectl、Kubeadm和Kubelet
添加倉庫后,在所有節(jié)點(diǎn)上安裝Kubernetes組件,如kubectl、kubelet和kubeadm工具。執(zhí)行以下命令:
$ sudo apt update $ sudo apt install -y kubelet kubeadm kubectl $ sudo apt-mark hold kubelet kubeadm kubectl
6)在Ubuntu 22.04上安裝Kubernetes集群
現(xiàn)在,我們已經(jīng)準(zhǔn)備好初始化Kubernetes集群。僅在控制平面節(jié)點(diǎn)上運(yùn)行以下kubeadm命令:
$ sudo apt update
$ sudo apt install -y kubelet kubeadm kubectl
$ sudo apt-mark hold kubelet kubeadm kubectl
上述命令的輸出:
初始化完成后,您將看到一條包含如何將工作節(jié)點(diǎn)加入集群的指令的信息。請(qǐng)記錄下kubeadm join命令以供將來參考。
因此,要開始與集群交互,請(qǐng)?jiān)诳刂破矫婀?jié)點(diǎn)上運(yùn)行以下命令:
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
接下來,嘗試運(yùn)行以下kubectl命令以查看集群和節(jié)點(diǎn)狀態(tài):
$ kubectl cluster-info
$ kubectl get nodes
輸出:
7)將工作節(jié)點(diǎn)加入集群
在每個(gè)工作節(jié)點(diǎn)上,使用您在第6步中初始化控制平面節(jié)點(diǎn)后記下的kubeadm join命令。命令應(yīng)類似于:
kubeadm join k8smaster.example.net:6443 --token af4qe1.4mn5nt3v5vk0oai5
--discovery-token-ca-cert-hash sha256:c62c1826f8188f0fab5b4de07c76c41b46b5ed51cd369bdd998788ed0ade957d
來自兩個(gè)工作節(jié)點(diǎn)的輸出:
上述工作節(jié)點(diǎn)的輸出確認(rèn)了這兩個(gè)節(jié)點(diǎn)已加入集群。使用kubectl命令從控制平面節(jié)點(diǎn)檢查節(jié)點(diǎn)狀態(tài):
$ kubectl get nodes
命令在工作節(jié)點(diǎn)加入后的輸出:
正如我們所見,節(jié)點(diǎn)狀態(tài)是'NotReady',因此為了使其激活,我們必須安裝CNI(容器網(wǎng)絡(luò)接口)或網(wǎng)絡(luò)插件,如Calico、Flannel和Weave-net。
8)安裝Calico網(wǎng)絡(luò)插件
需要一個(gè)網(wǎng)絡(luò)插件來啟用集群中Pod之間的通信。在控制平面節(jié)點(diǎn)上運(yùn)行以下kubectl命令以安裝Calico網(wǎng)絡(luò)插件:
$ kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.0/manifests/calico.yaml
上述命令的輸出如下所示:
驗(yàn)證kube-system命名空間中Pod的狀態(tài):
$ kubectl get pods -n kube-system
輸出:
完美,檢查節(jié)點(diǎn)狀態(tài):
$ kubectl get nodes
Calico安裝后節(jié)點(diǎn)的狀態(tài):
現(xiàn)在,我們可以說我們的Kubernetes集群是功能正常的。
憑此文章可以去PetaExpress發(fā)工單可以搞一臺(tái)2核2G的免費(fèi)云服務(wù)器/月
PetaExpress 獎(jiǎng)品的申領(lǐng)步驟:注冊→登錄→發(fā)工單 回復(fù)“文章網(wǎng)址+文章標(biāo)題+申請(qǐng)獎(jiǎng)勵(lì)”
審核編輯 黃宇
-
Ubuntu
關(guān)注
5文章
590瀏覽量
31042 -
云服務(wù)器
+關(guān)注
關(guān)注
0文章
805瀏覽量
13799 -
kubernetes
+關(guān)注
關(guān)注
0文章
243瀏覽量
9017
發(fā)布評(píng)論請(qǐng)先 登錄
阿里云上Kubernetes集群聯(lián)邦
如何在Arm上利用Istio搭建一個(gè)基于Kubernetes的Service Mesh平臺(tái)
如何部署基于Mesos的Kubernetes集群

在Kubernetes集群發(fā)生網(wǎng)絡(luò)異常時(shí)如何排查
Kubernetes集群的關(guān)閉與重啟
Kubernetes的集群部署
在Ubuntu上編譯安裝pcl教程
K8S學(xué)習(xí)教程一:使用PetaExpress云服務(wù)器安裝Minikube 集群

K8S學(xué)習(xí)教程(二):在 PetaExpress KubeSphere容器平臺(tái)部署高可用 Redis 集群

評(píng)論