k8s 核心概念 namespace、pod、deployment、service
2024-01-17 19:11 youxin 閱讀(321) 評論(0) 收藏 舉報(bào)1、Namespace
Namespace是kubernetes系統(tǒng)中的一種非常重要資源,它的主要作用是用來實(shí)現(xiàn)多套環(huán)境的資源隔離或者多租戶的資源隔離。
k8s在集群啟動之后,會默認(rèn)創(chuàng)建幾個namespace。
[root@master ~]# kubectl get namespace
NAME STATUS AGE
default Active 45h # 所有未指定Namespace的對象都會被分配在default命名空間
kube-node-lease Active 45h # 集群節(jié)點(diǎn)之間的心跳維護(hù),v1.13開始引入
kube-public Active 45h # 此命名空間下的資源可以被所有人訪問(包括未認(rèn)證用戶)
kube-system Active 45h # 所有由Kubernetes系統(tǒng)創(chuàng)建的資源都處于這個命名空間
namespace資源命令操作
//查看當(dāng)前集群的namespace
kubectl get ns
//查看指定namespace
kubectl get ns default
//k8s支持的格式有很多,比較常見的是wide、json、yaml
kubectl get ns default -o yaml
//查看namespace詳情
kubectl describe ns default
//創(chuàng)建namespace
kubectl create ns dev
//刪除namespace
kubectl delete ns dev
yaml文件方式創(chuàng)建namespace,創(chuàng)建文件ns-dev.yaml寫入下面內(nèi)容。
創(chuàng)建 :kubectl create -f ns-dev.yaml
刪除 :kubectl delete -f ns-dev.yaml
apiVersion: v1
kind: Namespace
metadata:
name: dev
2、Pod
Pod是kubernetes集群進(jìn)行管理的最小單元,程序要運(yùn)行必須部署在容器中,而容器必須存在于Pod中。
Pod可以認(rèn)為是容器的封裝,一個Pod中可以存在一個或者多個容器。
// 查看指定ns下的pod
kubectl get pod -n dev
//查看default命名空間下的pod
kubectl get pod
//查看pod詳細(xì)信息
kubectl describe pod pod名稱
//查看pod部署在哪個集群上IP
kubectl get pod名稱 -n dev -o wide
//刪除pod
kubectl delete pod pod名稱
本次創(chuàng)建pod,只是單純的創(chuàng)建一個pod,并沒有創(chuàng)建deploy。把pod刪除后,不會再次重啟一個pod,因?yàn)闆]有創(chuàng)建deploy。
新建pod-nginx.yaml文件,內(nèi)容如下
apiVersion: v1 kind: Pod metadata: name: nginx namespace: default spec: containers: - image: nginx:1.17.1 name: pod ports: - name: nginx-port containerPort: 80 protocol: TCP
Deployment
在kubernetes中,Pod是最小的控制單元,但是kubernetes很少直接控制Pod,一般都是通過Pod控制器來完成的。Pod控制器用于pod的管理,確保pod資源符合預(yù)期的狀態(tài),當(dāng)pod的資源出現(xiàn)故障時,會嘗試進(jìn)行重啟或重建pod。
在kubernetes中Pod控制器的種類有很多,本文只介紹一種Deployment,也是現(xiàn)在最推薦的一種。
//獲取當(dāng)前deploy
kubectl get deploy
//查看deploy詳細(xì)信息
kubectl describe deploy deploy名稱
//刪除deploy,deploy下的pod也會自動刪除
kubectl delete deploy deploy名稱
如果刪除通過deploy創(chuàng)建的pod,會發(fā)現(xiàn)pod會自動起來,那是因?yàn)閐eploy中配置了起來副本個數(shù),會保證pod的高可用,當(dāng)我們想對pod重啟時,直接刪除對應(yīng)的pod就行。 如果想要徹底刪除pod,直接刪掉對應(yīng)的deploy,pod就會自動刪除并且不會自動起了。
新建deploy-nginx.yaml文件,內(nèi)容如下
apiVersion: apps/v1 kind: Deployment metadata: name: nginx namespace: default spec: replicas: 3 selector: matchLabels: run: nginx template: metadata: labels: run: nginx spec: containers: - image: nginx:1.17.1 name: nginx ports: - containerPort: 80 protocol: TCP
4、Service
通過上面的學(xué)習(xí),已經(jīng)能夠利用Deployment來創(chuàng)建一組Pod來提供具有高可用性的服務(wù)。
雖然每個Pod都會分配一個單獨(dú)的Pod IP,然而卻存在如下兩問題:
Pod IP 會隨著Pod的重建產(chǎn)生變化
Pod IP 僅僅是集群內(nèi)可見的虛擬IP,外部無法訪問。
這樣對于訪問這個服務(wù)帶來了難度。因此,kubernetes設(shè)計(jì)了Service來解決這個問題。
Service可以看作是一組同類Pod對外的訪問接口。借助Service,應(yīng)用可以方便地實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)和負(fù)載均衡。
//查看service
kubectl get svc
//刪除service
kubectl delete svc service名稱
//查看service詳細(xì)信息
kubectl describe svc cmp-monitor-agent
新建svc-nginx.yaml文件,內(nèi)容如下
apiVersion: v1 kind: Service metadata: name: svc-nginx namespace: default spec: clusterIP: 10.109.179.231 #固定svc的內(nèi)網(wǎng)ip ports: - port: 80 protocol: TCP targetPort: 80 selector: run: nginx type: ClusterIP
參考:https://blog.csdn.net/weixin_41919486/article/details/126236928
浙公網(wǎng)安備 33010602011771號