服務原理:
所有服務都是根據這個服務衍生或者變化出來,根服務----
服務感知后端靠標簽? slelector 標簽選擇器
kubectl label pods web1 app=web
kubectl cluter-info dump | grep -i service-cluster-ip-range????? 服務ip取值范圍
Service 管理:
創建服務:
---
kind: Service
apiVersion: v1
metadata:name: mysvc
spec:type: ClusterIPselector:app: webports:- protocol: TCPport: 80targetPort: 80
解析域名:
創建后端應用:
[root@master ~]# vim myweb.yaml
---
kind: Pod
apiVersion: v1
metadata:name: web1labels:app: web # 服務靠標簽尋找后端
spec:containers:- name: apacheimage: myos:httpd[root@master ~]# kubectl apply -f myweb.yaml
pod/web1 created[root@master ~]# curl http://10.245.5.18
Welcome to The Apache.
負載均衡:
固定IP服務:
---
kind: Service
apiVersion: v1
metadata:name: mysvc
spec:type: ClusterIPclusterIP: 10.245.1.80 # 可以設置 ClusterIPselector:app: webports:- protocol: TCPport: 80targetPort: 80
# vim mysvc.yaml---
kind: Service
apiVersion: v1
metadata:name: mysvc
spec:type: ClusterIPclusterIP: 10.245.1.80 # 可以設置 ClusterIPselector:app: webports:- protocol: TCPport: 80targetPort: 80
端口別名:
[root@master ~]# vim mysvc.yaml
---
kind: Service
apiVersion: v1
metadata:name: mysvc
spec:type: ClusterIPclusterIP: 10.245.1.80selector:app: webports:- protocol: TCPport: 80targetPort: myhttp # 使用別名查找后端服務端口[root@master ~]# kubectl apply -f mysvc.yaml
service/mysvc configured[root@master ~]# vim myweb.yaml
---
kind: Pod
apiVersion: v1
metadata:name: web1labels:app: web
spec:containers:- name: apacheimage: myos:httpdports: # 配置端口規范- name: myhttp # 端口別名protocol: TCP # 協議containerPort: 80 # 端口號
NodePort:對外發布
云容器引擎:CCE?? 華為云搭建的K8S
端口范圍:30000-32767之間
Ingress:
七層可以基于域名區分,把請求轉發給服務,本身不提供服務,ingress只是一個路由,不提供服務.
# 資源對象模板
kubectl create ingress mying --class=nginx --rule=nsd.tedu.cn/*=mysvc:80 --dry-run=client -o yaml
自定義請求頭
循環上傳鏡像到harbor
[root@master dashboard]# docker images|while read i t _;do[[ "${t}" == "TAG" ]] && continue[[ "${i}" =~ ^"harbor:443/".+ ]] && continuedocker tag ${i}:${t} harbor:443/plugins/${i##*/}:${t}docker push harbor:443/plugins/${i##*/}:${t}docker rmi ${i}:${t} harbor:443/plugins/${i##*/}:${t}
done
這段腳本在 Docker 環境中執行,主要做了以下幾件事:
-
列出所有的 Docker 鏡像 (
docker images
)。 -
對于每一個鏡像,讀取其 REPOSITORY(倉庫名)和 TAG(標簽)。
-
跳過所有 TAG 為 "TAG" 的鏡像。
-
跳過所有 REPOSITORY 以 "harbor:443/" 開頭的鏡像。
-
對于剩余的鏡像,執行以下操作:
- 給該鏡像添加一個新的標簽(
docker tag
),新的標簽格式為 "harbor:443/plugins/原鏡像名:原標簽"。 - 將新標簽的鏡像推送到 harbor:443 這個 Docker 倉庫(
docker push
)。 - 刪除本地存儲的原標簽和新標簽的鏡像(
docker rmi
)。
- 給該鏡像添加一個新的標簽(
這個腳本的主要目的是將本地的一些 Docker 鏡像推送到另一個 Docker 倉庫(harbor:443),并且在推送之后刪除本地的這些鏡像。注意,這個腳本可能會刪除本地的一些重要鏡像,所以在執行之前需要確保這些鏡像不再需要,或者已經做好了備份。
此外,這個腳本假設 "harbor:443" 這個倉庫已經配置好,并且 Docker 客戶端有權限向其中推送鏡像。如果沒有配置好,或者沒有權限,docker push
命令將會失敗。
另外,docker rmi
命令在刪除鏡像時并不會詢問確認,所以如果誤刪除了重要的鏡像,可能會導致數據丟失。因此,在執行這個腳本之前,一定要確保你了解它的作用,并且已經做好了必要的準備。
Web管理插件:
發布服務:
---kin: Service
apiVersion: v1
metaata:labels:k8s-app: kubernetes-ashboardname: kubernetes-ashboardnamespace: kubernetes-ashboard
spec:type: NoePort ports:- port: 443noePort: 30443targetPort: 8443selector:k8s-app: kubernetes-ashboard
服務賬戶與權限:
創建服務賬號:
---
kind: ServiceAccount
apiVersion: v1
metadata:name: kube-adminnamespace: kubernetes-dashboard
獲取taoken:
角色與鑒權:
獲取列表:多個資源對象?????????????? 單一資源對象,屬性
補丁:局部更新?? 更新是全部更新