??明明跟你說過:個(gè)人主頁
??個(gè)人專欄:《Kubernetes航線圖:從船長(zhǎng)到K8s掌舵者》???
??行路有良友,便是天堂??
目錄
一、前言
1、k8s概述
2、NFS簡(jiǎn)介
二、NFS服務(wù)器搭建
1、準(zhǔn)備NFS 服務(wù)器
2、搭建NFS服務(wù)
三、安裝k8s集群
1、環(huán)境準(zhǔn)備
2、禁用防火墻和SELinux
3、設(shè)置時(shí)間同步?
4、關(guān)閉swap交換分區(qū)?
5、修改hosts文件
6、修改機(jī)器內(nèi)核參數(shù)
7、配置阿里repo源
8、安裝container
9、修改containerd配置文件
10、設(shè)置container開機(jī)自啟動(dòng)
11、設(shè)置服務(wù)的端點(diǎn)地址
12、安裝docker
13、添加docker鏡像加速器
14、配置軟件源
15、安裝kubeadm、kubelet、kubectl
16、設(shè)置kubelet開機(jī)自啟動(dòng)
17、上傳離線鏡像包
18、導(dǎo)入鏡像
19、設(shè)置容器運(yùn)行時(shí)
20、初始化Master節(jié)點(diǎn)
21、設(shè)置容器運(yùn)行時(shí)
22、導(dǎo)入鏡像
23、將Work節(jié)點(diǎn)加入到集群
24、查看集群狀態(tài)?
25、為Work節(jié)點(diǎn)設(shè)置標(biāo)簽
26、安裝網(wǎng)絡(luò)插件calico
27、安裝calico
28、查看Pod狀態(tài)
四、在k8s集群中使用nfs
1、安裝nfs驅(qū)動(dòng)
2、編寫yaml文件
3、創(chuàng)建Pod
五、測(cè)試數(shù)據(jù)持久化
1、創(chuàng)建首頁文件
2、訪問測(cè)試
一、前言
1、k8s概述
?Kubernetes單詞起源于希臘語, 是“舵手”或者“領(lǐng)航員、飛行員”的意思。
Kubernetes(簡(jiǎn)稱K8s)的前世今生可以追溯到谷歌(Google)內(nèi)部的一個(gè)項(xiàng)目,它起源于2003年,當(dāng)時(shí)谷歌正面臨著不斷增長(zhǎng)的應(yīng)用程序和服務(wù)的管理挑戰(zhàn)。這個(gè)項(xiàng)目最初被稱為"Borg",是一個(gè)早期的容器編排系統(tǒng)。Borg 的成功經(jīng)驗(yàn)成為 Kubernetes 開發(fā)的契機(jī)。
?有關(guān)k8s起源的介紹,請(qǐng)參考《初識(shí)K8s之前世今生、架構(gòu)、組件、前景》這篇文章
?
Kubernetes的優(yōu)點(diǎn)包括可移植性、可伸縮性和擴(kuò)展性。它使用輕型的YAML清單文件實(shí)現(xiàn)聲明性部署方法,對(duì)于應(yīng)用程序更新,無需重新構(gòu)建基礎(chǔ)結(jié)構(gòu)。管理員可以計(jì)劃和部署容器,根據(jù)需要擴(kuò)展容器并管理其生命周期。借助Kubernetes的開放源代碼API,用戶可以通過首選編程語言、操作系統(tǒng)、庫(kù)和消息傳遞總線來構(gòu)建應(yīng)用程序,還可以將現(xiàn)有持續(xù)集成和持續(xù)交付(CI/CD)工具集成。
2、NFS簡(jiǎn)介
NFS,即網(wǎng)絡(luò)文件系統(tǒng)(Network File System),是一種用于在計(jì)算機(jī)系統(tǒng)之間共享文件和目錄的協(xié)議。NFS最初由Sun公司開發(fā),目前已經(jīng)成為全球廣泛使用的網(wǎng)絡(luò)文件系統(tǒng)之一,無論是在企業(yè)內(nèi)部網(wǎng)絡(luò)還是在云計(jì)算環(huán)境中。
NFS允許遠(yuǎn)程計(jì)算機(jī)像訪問本地文件一樣訪問和操作遠(yuǎn)程文件,從而方便了多臺(tái)計(jì)算機(jī)之間的文件共享和協(xié)作。在NFS的應(yīng)用中,本地NFS的客戶端應(yīng)用可以透明地讀寫位于遠(yuǎn)端NFS服務(wù)器上的文件,就像訪問本地文件一樣。NFS不僅適用于Linux與Unix之間實(shí)現(xiàn)文件共享,也能實(shí)現(xiàn)Linux與Windows間的文件共享功能。
NFS服務(wù)器可以讓PC將網(wǎng)絡(luò)中的NFS服務(wù)器共享的目錄掛載到本地端的文件系統(tǒng)中,這樣,從本地端的系統(tǒng)來看,那個(gè)遠(yuǎn)程主機(jī)的目錄就好像是自己的一個(gè)磁盤分區(qū)一樣,使用上相當(dāng)便利。
NFS的應(yīng)用場(chǎng)景非常廣泛,它可以用于辦公環(huán)境,實(shí)現(xiàn)文件服務(wù)器的高可用性,保證數(shù)據(jù)的可靠傳輸和處理,提高工作效率;對(duì)于大型企業(yè)來說,NFS可以提供集中式的文件存儲(chǔ)和管理,簡(jiǎn)化文件管理流程,降低運(yùn)營(yíng)成本。
二、NFS服務(wù)器搭建
1、準(zhǔn)備NFS 服務(wù)器
準(zhǔn)備一臺(tái)Linux服務(wù)器,虛擬機(jī)或物理機(jī)都可以,操作系統(tǒng)Ubuntu或centos,這里選擇Centos
2、搭建NFS服務(wù)
安裝 nfs-utils 軟件包。
[root@nfsserver ~]# yum install nfs-utils -y
創(chuàng)建共享目錄
[root@nfsserver ~]# mkdir /data/nfs-k8s -p
配置nfs權(quán)限
[root@nfsserver ~]# vim /etc/exports
?添加如下內(nèi)容
/data/nfs-k8s *(rw,no_root_squash)
關(guān)閉防火墻并禁用SELinux
[root@nfsserver ~]# systemctl stop firewalld && setenforce 0
?啟動(dòng)nfs服務(wù)
[root@nfsserver ~]# systemctl start nfs
為數(shù)據(jù)目錄添加讀寫權(quán)限
[root@nfsserver ~]# chmod 666 /data/ -R
使nfs配置生效
[root@nfsserver ~]# exportfs -arv
至此,nfs服務(wù)器已搭建完成
三、安裝k8s集群
這里我們安裝的k8s只有一臺(tái)master一臺(tái)node,而在實(shí)際生產(chǎn)環(huán)境中,master節(jié)點(diǎn)和node節(jié)點(diǎn)必須要有多臺(tái)組成高可用,這里為了節(jié)省資源,我們每個(gè)角色只用了一臺(tái)
1、環(huán)境準(zhǔn)備
準(zhǔn)備至少2臺(tái)服務(wù)器,虛擬機(jī)或服務(wù)器都可以,資源配置如下
2、禁用防火墻和SELinux
在兩臺(tái)機(jī)器上都要執(zhí)行
關(guān)閉防火墻并禁止開機(jī)自啟動(dòng)
[root@master ~]# systemctl stop firewalld && systemctl disable firewalld
[root@node ~]# systemctl stop firewalld && systemctl disable firewalld?
?關(guān)閉SELinux
[root@master ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@master ~]# setenforce 0
[root@master ~]# getenforce
Permissive
[root@node ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@node ~]# setenforce 0
[root@node ~]# getenforce
Permissive?
3、設(shè)置時(shí)間同步?
[root@master ~]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime?
[root@master ~]# date
Tue Mar 19 14:10:22 CST 2024
[root@node ~]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime?
[root@node ~]# date
Tue Mar 19 14:10:22 CST 2024?
4、關(guān)閉swap交換分區(qū)?
[root@master ~]# swapoff -a
[root@node?~]# swapoff -a?
5、修改hosts文件
[root@master ~]# vi /etc/hosts
# 添加如下兩行內(nèi)容
192.168.40.110 master
192.168.40.111 node
[root@node ~]# vi /etc/hosts
# 添加如下兩行內(nèi)容
192.168.40.110 master
192.168.40.111 node
6、修改機(jī)器內(nèi)核參數(shù)
[root@master ~]# modprobe br_netfilter
[root@master ~]# cat > /etc/sysctl.d/k8s.conf <<EOF
> net.bridge.bridge-nf-call-ip6tables = 1
> net.bridge.bridge-nf-call-iptables = 1
> net.ipv4.ip_forward = 1
> EOF
[root@master ~]# sysctl -p /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
[root@node ~]# modprobe br_netfilter
[root@node ~]# cat > /etc/sysctl.d/k8s.conf <<EOF
> net.bridge.bridge-nf-call-ip6tables = 1
> net.bridge.bridge-nf-call-iptables = 1
> net.ipv4.ip_forward = 1
> EOF
[root@node ~]# sysctl -p /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1?
7、配置阿里repo源
[root@master ~]# yum install yum-utils?device-mapper-persistent-data lvm2 ?-y
[root@master ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@node?~]# yum install yum-utils?device-mapper-persistent-data lvm2 -y?
[root@node?~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
8、安裝container
[root@master ~]# yum install ?containerd.io -y
?[root@node?~]# yum install ?containerd.io -y
9、修改containerd配置文件
[root@master ~]# mkdir -p /etc/containerd
[root@master ~]# containerd config default > /etc/containerd/config.toml
[root@master ~]# vim /etc/containerd/config.toml#將SystemdCgroup = false修改為SystemdCgroup = true
[root@node ~]# mkdir -p /etc/containerd
[root@node?~]# containerd config default > /etc/containerd/config.toml
[root@node?~]# vim /etc/containerd/config.toml#將SystemdCgroup = false修改為SystemdCgroup = true
10、設(shè)置container開機(jī)自啟動(dòng)
[root@master ~]# systemctl enable containerd ?--now
[root@node?~]# systemctl enable containerd ?--now?
11、設(shè)置服務(wù)的端點(diǎn)地址
[root@master ~]# cat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF
[root@node?~]# cat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF?
12、安裝docker
[root@master?~]# yum install ?docker-ce ?-y
[root@master?~]# systemctl enable docker --now
[root@node ~]# yum install ?docker-ce ?-y
[root@node ~]# systemctl enable docker --now
13、添加docker鏡像加速器
[root@master docker]# tee /etc/docker/daemon.json <<-'EOF'
> {
> ? "registry-mirrors": ["https://ofcqsr1y.mirror.aliyuncs.com"]
> }
> EOF[root@master docker]# sudo systemctl daemon-reload
[root@master docker]# sudo systemctl restart docker
[root@node?docker]# tee /etc/docker/daemon.json <<-'EOF'
> {
> ? "registry-mirrors": ["https://ofcqsr1y.mirror.aliyuncs.com"]
> }
> EOF[root@node?docker]# sudo systemctl daemon-reload
[root@node?docker]# sudo systemctl restart docke??
14、配置軟件源
[root@master ~]# vim /etc/yum.repos.d/kubernetes.repo
# 添加如下內(nèi)容[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
[root@node?~]# vim /etc/yum.repos.d/kubernetes.repo
# 添加如下內(nèi)容[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
15、安裝kubeadm、kubelet、kubectl
[root@master ~]# yum install kubelet-1.28.2 kubeadm-1.28.2 kubectl-1.28.2 -y
[root@node?~]# yum install kubelet-1.28.2 kubeadm-1.28.2 kubectl-1.28.2 -y?
16、設(shè)置kubelet開機(jī)自啟動(dòng)
[root@master ~]# systemctl enable kubelet
?[root@node?~]# systemctl enable kubelet
17、上傳離線鏡像包
離線鏡像包我已經(jīng)放到個(gè)人主頁的資源中,大家可以自行下載
18、導(dǎo)入鏡像
[root@master ~]# ctr -n=k8s.io images import k8s-1-28.tar.gz
[root@master ~]# ctr -n=k8s.io images import k8s-1-28-etcd.tar.gz
19、設(shè)置容器運(yùn)行時(shí)
[root@master ~]# crictl config runtime-endpoint /run/containerd/containerd.sock
20、初始化Master節(jié)點(diǎn)
[root@master ~]# kubeadm init --kubernetes-version=1.28.2 ?--apiserver-advertise-address=192.168.40.110 ?--image-repository registry.aliyuncs.com/google_containers ?--pod-network-cidr=10.244.0.0/16
[root@master ~]# ? mkdir -p $HOME/.kube
[root@master ~]# ? sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# ? sudo chown $(id -u):$(id -g) $HOME/.kube/config?
查看節(jié)點(diǎn)狀態(tài)
[root@master ~]# kubectl get node
NAME ? ? STATUS ? ? ROLES ? ? ? ? ? AGE ? VERSION
master ? NotReady ? control-plane ? 66s ? v1.28.2?
21、設(shè)置容器運(yùn)行時(shí)
[root@node ~]# crictl config runtime-endpoint /run/containerd/containerd.sock
22、導(dǎo)入鏡像
[root@node ~]# ctr -n=k8s.io images import k8s-1-28-etcd.tar.gz
[root@node ~]# ctr -n=k8s.io images import k8s-1-28.tar.gz?
23、將Work節(jié)點(diǎn)加入到集群
在Master節(jié)點(diǎn)上生成token
[root@master ~]# kubeadm token create --print-join-command
將生成的密鑰考到node節(jié)點(diǎn)執(zhí)行
[root@node ~]# kubeadm join 192.168.40.110:6443 --token 8zx14z.br9wctj9shxb08sq --discovery-token-ca-cert-hash sha256:6559345665c6beb70a9da42c2de6b85fc41f61d3dc3c527be3f7cc4629c503ab?
24、查看集群狀態(tài)?
[root@master ~]# kubectl get node
NAME ? ? STATUS ? ? ROLES ? ? ? ? ? AGE ? VERSION
master ? NotReady ? control-plane ? 10m ? v1.28.2
node ? ? NotReady ? <none> ? ? ? ? ?5s ? ?v1.28.2
25、為Work節(jié)點(diǎn)設(shè)置標(biāo)簽
?[root@master ~]# kubectl label nodes node node-role.kubernetes.io/work=work
#再次查看
[root@master ~]# kubectl get node
NAME ? ? STATUS ? ? ROLES ? ? ? ? ? AGE ? VERSION
master ? NotReady ? control-plane ? 10m ? v1.28.2
node ? ? NotReady? ? work? ? ? ?? ? ? ? ? 5s ? ?v1.28.2
26、安裝網(wǎng)絡(luò)插件calico
calico介紹
- Calico是一個(gè)開源的網(wǎng)絡(luò)和網(wǎng)絡(luò)安全解決方案,專為容器化環(huán)境設(shè)計(jì),旨在提供網(wǎng)絡(luò)連接和安全策略管理功能。它基于BGP協(xié)議,實(shí)現(xiàn)了一個(gè)純?nèi)龑泳W(wǎng)絡(luò)方案,能夠與Kubernetes、AWS、OpenStack等云平臺(tái)良好地集成。
- Calico的核心功能包括網(wǎng)絡(luò)連接、網(wǎng)絡(luò)策略和安全性。通過使用BGP路由協(xié)議,Calico能夠在所有節(jié)點(diǎn)上通過Linux Kernel實(shí)現(xiàn)高效的vRouter進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā)。每個(gè)vRouter都會(huì)將在本節(jié)點(diǎn)上運(yùn)行的容器的路由信息廣播到整個(gè)Calico網(wǎng)絡(luò),并自動(dòng)設(shè)置到達(dá)其他節(jié)點(diǎn)的路由轉(zhuǎn)發(fā)規(guī)則。這種設(shè)計(jì)確保了所有容器之間的數(shù)據(jù)流量都是通過IP路由的方式完成互聯(lián)互通的。
27、安裝calico
[root@master ~]# curl -L -O https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml?
[root@master ~]# kubectl ?apply -f calico.yaml
28、查看Pod狀態(tài)
[root@master ~]# kubectl get pod -A?
NAMESPACE ? ? NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? READY ? STATUS ? ?RESTARTS ? AGE
kube-system ? calico-kube-controllers-658d97c59c-fbrgn ? 1/1 ? ? Running ? 0 ? ? ? ? ?5m31s
kube-system ? calico-node-qd6v2 ? ? ? ? ? ? ? ? ? ? ? ? ?1/1 ? ? Running ? 0 ? ? ? ? ?5m31s
kube-system ? calico-node-s9khc ? ? ? ? ? ? ? ? ? ? ? ? ?1/1 ? ? Running ? 0 ? ? ? ? ?5m31s
kube-system ? coredns-66f779496c-l6nqx ? ? ? ? ? ? ? ? ? 1/1 ? ? Running ? 0 ? ? ? ? ?19m
kube-system ? coredns-66f779496c-n7jn6 ? ? ? ? ? ? ? ? ? 1/1 ? ? Running ? 0 ? ? ? ? ?19m
kube-system ? etcd-master ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1/1 ? ? Running ? 0 ? ? ? ? ?19m
kube-system ? kube-apiserver-master ? ? ? ? ? ? ? ? ? ? ?1/1 ? ? Running ? 0 ? ? ? ? ?19m
kube-system ? kube-controller-manager-master ? ? ? ? ? ? 1/1 ? ? Running ? 5 ? ? ? ? ?19m
kube-system ? kube-proxy-7wbhh ? ? ? ? ? ? ? ? ? ? ? ? ? 1/1 ? ? Running ? 0 ? ? ? ? ?9m15s
kube-system ? kube-proxy-bb47r ? ? ? ? ? ? ? ? ? ? ? ? ? 1/1 ? ? Running ? 0 ? ? ? ? ?19m
kube-system ? kube-scheduler-master ? ? ? ? ? ? ? ? ? ? ?1/1 ? ? Running ? 5 ? ? ? ? ?19m
四、在k8s集群中使用nfs
1、安裝nfs驅(qū)動(dòng)
在集群的兩個(gè)節(jié)點(diǎn)上分別執(zhí)行
yum install nfs-utils -y
systemctl enable nfs --now
2、編寫yaml文件
[root@master ~]# vim nfs.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-nfs-volume
spec:
containers:
- name: test-nfs
image: nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
protocol: TCP
volumeMounts:
- name: nfs-volumes
mountPath: /usr/share/nginx/html
volumes:
- name: nfs-volumes
nfs:
path: /data/nfs-k8s
server: 192.168.40.132
這段配置文件的解釋如下:?
apiVersion 和 kind
apiVersion: v1 ?
kind: Pod
- apiVersion: v1 表示使用的是 Kubernetes API 的第一個(gè)版本。
- kind: Pod 表示這個(gè)資源對(duì)象是一個(gè) Pod。
metadata
metadata: ?
? name: test-nfs-volume
- metadata 包含了關(guān)于這個(gè) Pod 的元數(shù)據(jù)。
- name: test-nfs-volume 給這個(gè) Pod 設(shè)置了一個(gè)唯一的名稱。
spec
spec 字段定義了 Pod 的期望狀態(tài)。
containers
containers: ?
- name: test-nfs ?
? image: nginx ?
? imagePullPolicy: IfNotPresent ?
? ports: ?
? - containerPort: 80 ?
? ? protocol: TCP ?
? volumeMounts: ?
? - name: nfs-volumes ?
? ? mountPath: /usr/share/nginx/html
- containers 字段定義了 Pod 中運(yùn)行的容器列表。
- name: test-nfs 是容器的名稱。
- image: nginx 指定了容器使用的鏡像。
- imagePullPolicy: IfNotPresent 表示如果本地沒有鏡像,則嘗試從鏡像倉(cāng)庫(kù)拉取。
- ports 字段定義了容器監(jiān)聽的端口。
- containerPort: 80 指定容器監(jiān)聽的端口為 80。
- protocol: TCP 表示使用 TCP 協(xié)議。
- volumeMounts 字段定義了容器內(nèi)部掛載卷的路徑。
- name: nfs-volumes 引用下面定義的卷的名稱。
- mountPath: /usr/share/nginx/html 指定了卷在容器內(nèi)的掛載路徑。
volumes
volumes: ?
- name: nfs-volumes ?
? nfs: ?
? ? path: /data/nfs-k8s
? ? server: 192.168.40.132
- volumes 字段定義了 Pod 中可以使用的卷列表。
- name: nfs-volumes 給卷設(shè)置了一個(gè)名稱。
- nfs 字段定義了 NFS 卷的屬性。
- path: /data/nfs-k8s 指定了 NFS 服務(wù)器上共享的路徑。
- server: 192.168.40.132 指定了 NFS 服務(wù)器的 IP 地址。
3、創(chuàng)建Pod
在master節(jié)點(diǎn)上執(zhí)行
[root@master ~]# kubectl apply -f nfs.yaml
五、測(cè)試數(shù)據(jù)持久化
1、創(chuàng)建首頁文件
在nfs服務(wù)器上,cd到 /data/nfs-k8s 目錄
[root@nfsserver nfs-k8s]# echo "hello nfs" > index.html
添加權(quán)限
[root@nfsserver nfs-k8s]# chmod 644 index.html
2、訪問測(cè)試
在k8s master節(jié)點(diǎn)上執(zhí)行
查看pod IP
[root@master ~]# kubectl get pod -owide
訪問測(cè)試
[root@master ~]# curl 10.244.167.134
此處可以看到我們剛剛創(chuàng)建的文件的內(nèi)容,證明k8s調(diào)用nfs作為持久化存儲(chǔ)成功
至此,NFS服務(wù)器的搭建與k8s中的使用測(cè)試完成?
??????每一次的分享都是一次成長(zhǎng)的旅程,感謝您的陪伴和關(guān)注。希望這些關(guān)于Kubernetes的文章能陪伴您走過技術(shù)的一段旅程,共同見證成長(zhǎng)和進(jìn)步!??????文章來源:http://www.zghlxwxcb.cn/news/detail-849629.html
??????讓我們一起在技術(shù)的海洋中探索前行,共同書寫美好的未來!?。???文章來源地址http://www.zghlxwxcb.cn/news/detail-849629.html
到了這里,關(guān)于搭建NFS服務(wù)器,部署k8s集群,并在k8s中使用NFS作為持久化儲(chǔ)存的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!