義烏公司網(wǎng)站制作經(jīng)典軟文范例大全
文章目錄
- 介紹
- Kubernetes 核心組件
- k8s安裝
- 環(huán)境
- 安裝組件
- 常用命令
- 測試
- 1. 創(chuàng)建一個(gè)測試應(yīng)用程序
- 2. 檢查 Pod 是否運(yùn)行
- 3. 暴露應(yīng)用讓外部訪問
- 4. 查看服務(wù)的暴露端口
- 5. 訪問 nginx 服務(wù)
- 6. 驗(yàn)證節(jié)點(diǎn)調(diào)度
- 如有錯(cuò)誤,敬請指針,謝謝!
介紹
Kubernetes,是一個(gè)由Google開源的容器集群管理系統(tǒng),旨在自動(dòng)化部署、擴(kuò)展和管理容器化應(yīng)用程序。
Kubernetes 核心組件
● Pod:Kubernetes 中最小的可部署單位, 表示一個(gè)或多個(gè)緊密相關(guān)的容器的集合。Pod 中的容器共享網(wǎng)絡(luò)和存儲(chǔ)資源,并且總是一起部署、調(diào)度和管理
● Node:Kubernetes 集群中的一臺(tái)物理或虛擬機(jī)器,用于運(yùn)行 Pod。一個(gè)集群由多個(gè)節(jié)點(diǎn)組成。
● 容器: 實(shí)際運(yùn)行應(yīng)用程序的單位
● Service:為一組 Pod 提供穩(wěn)定的網(wǎng)絡(luò)服務(wù)。通過 Service,Pod 可以動(dòng)態(tài)擴(kuò)展,而不影響客戶端的訪問。
● Namespace:用于對(duì)資源進(jìn)行邏輯隔離,可以用于區(qū)分不同的環(huán)境或團(tuán)隊(duì)。
● Deployment:管理 Pod 的聲明性更新,負(fù)責(zé)管理應(yīng)用的版本、擴(kuò)展和滾動(dòng)更新。確保指定數(shù)量的 Pod 副本始終在運(yùn)行。這意味著如果某個(gè) Pod 出現(xiàn)故障或被刪除,Deployment 會(huì)自動(dòng)創(chuàng)建新的 Pod 來替代它。 持滾動(dòng)更新功能,允許你逐步升級(jí)應(yīng)用程序的版本 。 ,
● YAML 文件是用來定義和創(chuàng)建 Deployment 的配置文件,而 Deployment 本身是 Kubernetes 中負(fù)責(zé)實(shí)際管理應(yīng)用程序的控制器。 包括要部署的應(yīng)用鏡像、Pod 副本數(shù)量、資源限制、調(diào)度策略等。
● 通過 YAML 文件創(chuàng)建 Deployment:你使用 kubectl apply -f .yaml 命令將 YAML 文件提交給 Kubernetes,Kubernetes 會(huì)根據(jù) YAML 文件的定義創(chuàng)建并管理相應(yīng)的 Deployment 對(duì)象。
● Deployment 管理 Pod:Kubernetes 中的 Deployment 負(fù)責(zé)管理 Pod 的生命周期,包括創(chuàng)建、刪除和更新 Pod。
節(jié)點(diǎn)與 Pod 的關(guān)系類似于服務(wù)器與應(yīng)用程序的關(guān)系:一個(gè)服務(wù)器(節(jié)點(diǎn))可以運(yùn)行多個(gè)應(yīng)用程序(Pod),而每個(gè)應(yīng)用程序(Pod)可以包含多個(gè)進(jìn)程(容器)。
k8s安裝
環(huán)境
我們需要準(zhǔn)備一臺(tái) Ubuntu 20.04 服務(wù)器作為主節(jié)點(diǎn)(控制平面),并準(zhǔn)備多臺(tái) Ubuntu 20.04 服務(wù)器作為工作節(jié)點(diǎn)(Worker Nodes)。確保服務(wù)器已經(jīng)安裝了 Ubuntu 20.04 操作系統(tǒng),并更新到了最新版本。
1.1更新系統(tǒng)
首先,確保系統(tǒng)是最新的。
sudo apt update
sudo apt upgrade -y
1.2 關(guān)閉 Swap
Kubernetes 需要關(guān)閉 Swap 以正常工作。
sudo swapoff -a
#修改/etc/fstab,注釋掉swap那行,持久化生效
sudo vi /etc/fstab
1.3確保每個(gè)節(jié)點(diǎn)有唯一的主機(jī)名,并且可以通過主機(jī)名解析彼此。
在宿主機(jī)分別設(shè)置主機(jī)名:k8s-master,k8s-node01
sudo vim /etc/hostname
hosts設(shè)置
sudovim /etc/hosts
#添加內(nèi)容
192.168.47.138 k8s-master
192.168.47.137 k8s-node01
1.4確保時(shí)區(qū)和時(shí)間正確
時(shí)區(qū)設(shè)置
sudo timedatectl set-timezone Asia/Shanghai
#同時(shí)使系統(tǒng)日志時(shí)間戳也立即生效
sudo systemctl restart rsyslog
安裝組件
1,更改docker默認(rèn)驅(qū)動(dòng)為systemd
為防止初始化出現(xiàn)一系列的錯(cuò)誤,請檢查docker和kubectl驅(qū)動(dòng)是否一致,否則kubectl沒法啟動(dòng)造成報(bào)錯(cuò)。版本不一樣,docker有些為cgroupfs,而kubectl默認(rèn)驅(qū)動(dòng)為systemd,所以需要更改docker驅(qū)動(dòng)。
可查看自己docker驅(qū)動(dòng)命令
sudo docker info|grep Driver
更改docker驅(qū)動(dòng),編輯 /etc/docker/daemon.json (沒有就新建一個(gè)),添加如下啟動(dòng)項(xiàng)參數(shù)即可:
#編輯創(chuàng)建文件
sudo vim /etc/docker/daemon.json
#添加內(nèi)容
{"exec-opts": ["native.cgroupdriver=systemd"]
}
重啟docker
sudo systemctl restart docker.service
2,更新 apt 包索引并安裝使用 Kubernetes apt 倉庫所需要的包
安裝軟件包以允許apt通過HTTPS使用存儲(chǔ)庫,已安裝軟件的可以忽略:
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
執(zhí)行第一條命令時(shí)候報(bào)錯(cuò):
執(zhí)行以下:
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc# Add the repository to Apt sources:
echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
發(fā)現(xiàn)docker報(bào)錯(cuò)解決了,還有這報(bào)錯(cuò):
錯(cuò)誤:6 https://packages.cloud.google.com/apt kubernetes-xenial InRelease
無法發(fā)起與 packages.cloud.google.com:443 (2404:6800:4012:4::200e) 的連接 - connect (101: 網(wǎng)絡(luò)不可達(dá)) 無法連接上 packages.cloud.google.com:443 (142.250.217.110)。 - connect (111: 拒絕連接)
正在讀取軟件包列表… 完成
W: 無法下載 https://apt.kubernetes.io/dists/kubernetes-xenial/InRelease 無法發(fā)起與 packages.cloud.google.com:443 (2404:6800:4012:4::200e) 的連接 - connect (101: 網(wǎng)絡(luò)不可達(dá)) 無法連接上 packages.cloud.google.com:443 (142.250.217.110)。 - connect (111: 拒絕連接)
從阿里云的 Kubernetes 鏡像源安裝 Kubernetes 組件。這包括設(shè)置必要的軟件源、添加簽名密鑰、更新索引,并最終安裝 kubelet、kubeadm 和 kubectl,以便你可以設(shè)置和管理 Kubernetes 集群。
apt-get update && apt-get install -y apt-transport-https
curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/deb/Release.key |gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/deb/ /" |tee /etc/apt/sources.list.d/kubernetes.list
apt-get update
apt-get install -y kubelet kubeadm kubectl
常用命令
kubectl get node 是用來查看 Kubernetes 集群中所有節(jié)點(diǎn)的狀態(tài)信息
kubectl get pods 驗(yàn)證 Pod 狀態(tài):
kubectl get deployments 查看所有的deployments
kubectl get deployments --all-namespaces
kubectl delete pod <pod-name> 刪除指定pod
kubectl delete pods --all 刪除所有pod
kubectl delete pods --all -n <namespace> 刪除命名空間的所有pod
kubectl delete po pod名稱 --force --grace-period=0 -n 名稱空間 強(qiáng)制刪除pod,速度比較快
kubectl delete pods --all --grace-period=0 --forcekubectl logs d10001 查看pod日志
kubectl describe pod <pod-name> 查看 Kubernetes Pod 的詳細(xì)信息 kubectl create deployment nginx --image=nginx 創(chuàng)建一個(gè)新的 Deployment,讓 Kubernetes 部署一個(gè)基于 nginx 鏡像的應(yīng)用程序,這個(gè)應(yīng)用會(huì)被分配到集群中的工作節(jié)點(diǎn)運(yùn)行
kubectl get services 查看 Kubernetes 集群中所有 Service 的命令
kubectl apply -f your-pod-definition.yaml 應(yīng)用 YAML 配置:
kubectl exec -it d10001 -- /bin/sh 進(jìn)入k8s管理的docker
測試
1. 創(chuàng)建一個(gè)測試應(yīng)用程序
部署一個(gè)簡單的 nginx 應(yīng)用程序,Kubernetes 會(huì)把它調(diào)度到工作節(jié)點(diǎn)上運(yùn)行
執(zhí)行以下命令創(chuàng)建 nginx 部署:
kubectl create deployment nginx --image=nginx
創(chuàng)建一個(gè)新的 Deployment,讓 Kubernetes 部署一個(gè)基于 nginx 鏡像的應(yīng)用程序,這個(gè)應(yīng)用會(huì)被分配到集群中的工作節(jié)點(diǎn)運(yùn)行。 nginx 是 Deployment 的名稱 ,–image=nginx 是 Docker Hub 上的 nginx 官方鏡像 .
該行命令執(zhí)行后 Deployment 會(huì)根據(jù)指定的鏡像(nginx)創(chuàng)建一個(gè)或多個(gè) Pod。這些 Pod 將運(yùn)行 nginx 容器,并綁定到集群中的節(jié)點(diǎn)上。
使用 kubectl create deployment 命令創(chuàng)建 Deployment 時(shí), 即使你沒有手動(dòng)編寫 YAML 文件,Kubernetes 仍然會(huì)根據(jù)默認(rèn)參數(shù)來配置和管理資源。類似下 :
apiVersion: apps/v1 # API 版本,指定使用 apps/v1 API 版本來創(chuàng)建 Deployment 對(duì)象
kind: Deployment # 資源類型,Deployment 控制器用于管理應(yīng)用程序的副本
metadata:name: nginx # Deployment 的名稱,這里是 nginx
spec:replicas: 1 # 希望運(yùn)行的 Pod 副本數(shù)量,這里指定 1 個(gè)副本,一個(gè)pod類似于一個(gè)應(yīng)用程序selector:matchLabels:app: nginx # 標(biāo)簽選擇器,用于匹配 Pod 的標(biāo)簽,確保 Deployment 管理正確的 Podstemplate:metadata:labels:app: nginx # Pod 的標(biāo)簽,用于標(biāo)識(shí) Pods,使其與 Deployment 匹配spec:containers:- name: nginx # 容器的名稱,這里是 nginximage: nginx:latest # 使用的容器鏡像,這里是 nginx:latestports:- containerPort: 80 # 容器監(jiān)聽的端口號(hào),這里是 80
2. 檢查 Pod 是否運(yùn)行
部署完 nginx 之后,你需要確認(rèn) Pod(運(yùn)行中的應(yīng)用實(shí)例)是否正常啟動(dòng)。
kubectl get pods
如果一切正常,你應(yīng)該看到類似下面的輸出,顯示 Pod 處于 Running 狀態(tài):
這說明 nginx 應(yīng)用()已經(jīng)成功運(yùn)行在集群的某個(gè)節(jié)點(diǎn)上。
3. 暴露應(yīng)用讓外部訪問
創(chuàng)建一個(gè) Kubernetes Service 來暴露這個(gè) nginx 應(yīng)用,讓你能夠從外部訪問它。
執(zhí)行以下命令創(chuàng)建一個(gè) NodePort 類型的服務(wù):
kubectl expose deployment nginx --type=NodePort --port=80
這條命令會(huì)創(chuàng)建一個(gè) NodePort 服務(wù),使得集群外部的用戶可以通過 Kubernetes 節(jié)點(diǎn)(worker節(jié)點(diǎn))的 IP 和一個(gè)隨機(jī)分配的端口來訪問 nginx。
4. 查看服務(wù)的暴露端口
執(zhí)行以下命令查看服務(wù)的詳細(xì)信息:
kubectl get services
會(huì)看到類似下面的輸出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx NodePort 10.104.142.159 <none> 80:32481/TCP 2m
5. 訪問 nginx 服務(wù)
現(xiàn)在,可以從命令行通過 curl 訪問 nginx。假設(shè)節(jié)點(diǎn)的 IP 地址是 192.168.74.129,可以通過如下命令訪問:
curl http://192.168.74.129:32481
如果一切正常,你會(huì)看到 nginx 默認(rèn)的歡迎頁面的 HTML 內(nèi)容。
6. 驗(yàn)證節(jié)點(diǎn)調(diào)度
通過以下命令,查看 Pod 被調(diào)度到哪個(gè)節(jié)點(diǎn)上
kubectl get pods -o wide