1.本文概念解析
ConfigMap:yaml中引用的配置檔案。(如同springboot中能夠全局常量)
Service:暴露容器的網絡使得外部端口得以通路内部容器的資訊。
Deployment:監控和管理pod。(如同tomcat,管理多個項目)
Pod:可以擁有多容器,最小排程機關。(docker容器)
namespace:用于實作多租戶的資源隔離。(不同的Deployment存放于不同位置,友善操作)
2.安裝私服
請參考上文harbor安裝與使用
3.上傳鏡像到私服
4.建立namespace
apiVersion: v1
kind: Namespace
metadata:
name: eureka #空間名稱
labels:
name: eureka
複制代碼
在3處執行以下代碼,注意空間名稱自行修改。
5.開放端口号
k8s預設的端口号範圍為30000-32767,如果需要使用其他端口,需要重新配置,請執行以下指令。
vi /etc/kubernetes/manifests/kube-apiserver.yaml
複制代碼
添加需要使用的端口号範圍。
--service-node-port-range=2-65535
複制代碼
如果修改配置檔案,需要重新啟動!
systemctl daemon-reload
systemctl restart kubelet
複制代碼
6.在工作空間中建立springboot項目
此操作也可以稱為在namespace中添加pod。
向3處複制以下配置。
apiVersion: v1 #于k8s叢集版本有關,使用kubectl api-servrsions 即可檢視目前叢集支援的版本
kind: Service
metadata:
name: eureka
namespace: eureka
labels:
app: eureka
spec: #這是關于該 Service 的定義,描述了 Service 如何選擇 Pod,如何被通路
type: NodePort
ports:
- port: 5001
nodePort: 31666
selector:
app: eureka
---
apiVersion: apps/v1
kind: Deployment #對象類型 #該配置的類型,我們使用的是deployment
metadata: #譯名為中繼資料,即deployment的一些基本屬性和資訊
name: eureka #deployment的名稱
labels: #标簽,可以靈活定位一個或多個資源,其中key和value均可自定義,可以定義多組
app: eureka #為該deployment設定key為app value為nginx的标簽
spec: #這是關于該deployment的描述,可以了解為你期待該deployment再k8s中如何使用
replicas: 1 #運作容器的副本數,修改這裡可以快速修改分布式節點數量
selector: #标簽選擇器,與上面的标簽共同作用
matchLabels: #選擇包含标簽app:nginx的資源
app: eureka
template: #這是選擇或建立pod的模闆
metadata: #pod的中繼資料
labels: #pod的标簽,上面的selector即選擇包含标簽app:nginx的pod
app: eureka
spec: #期待pod實作的功能(即在pod中部署)
containers: #生成container,與docker中的container是同一種
- name: eureka #container的名稱
image: 192.168.41.44:9000/eureka/eureka:latest #私服鏡像
imagePullPolicy: IfNotPresent #pull鏡像時機
ports:
- containerPort: 5001 #容器對外開放端口
nodeName: eureka #執行釋出的node
複制代碼
請根據個人配置,按照上文備注自行修改。
7.重新釋出pod
直接删除pod即可,k8s會直接按照已經添加的配置拉取新的鏡像重新釋出項目。
8.删除pod
1.主控端操作
如果想删除pod,請使用主控端指令行執行以下指令,删除deployment。
kubectl get deployment -n eureka
kubectl delete deployment eureka -n eureka
複制代碼
2.dashboard面闆操作
也可以使用dashboard直接操作,分别删除deployment和pod,詳情見下圖。
請保證上述删除順序。
9.異常解析
1.failed to set bridge addr: "cni0" already has an IP address different from
如果出現此報錯,可能是nodes多次加入master照成網絡沖突,在nodes執行下面指令,重新加入。
kubeadm reset
systemctl stop kubelet
systemctl stop docker
rm -rf /var/lib/cni/
rm -rf /var/lib/kubelet/*
rm -rf /etc/cni/
ifconfig cni0 down
ifconfig flannel.1 down
ifconfig docker0 down
ip link delete cni0
ip link delete flannel.1
systemctl start docker
systemctl start kubelet
kubeadm join xxxxxxxxxxxxxxxxxx
複制代碼
2.found a tab character that violates indentation/found character that cannot staart any token
如果出現以下報錯,請檢查以上yaml是否格式錯誤 如:tab代替空格 需要空格等