新建rc(replication controller)
以下操作在master1做
rc是一套程序部署的配置,k8s會根據配置自動運行和管理程序,例如自動啟動程序,程序掛了自動重啟等等
rc配置一般都是寫到配置文件(擴展名yaml),然后指定yaml文件來新建rc,k8s很多“東西”都是這種方式配置
在任意目錄(最好是存放文件資料的地方),新建文件springboot-helloworld-rc.yaml,內容如下:
PS:部分項有注釋
apiVersion: v1
kind: ReplicationController#對象類型,這里是rc(全稱ReplicationController)
metadata:
name: helloworld#名稱
labels:
name: helloworld#標注
spec:
replicas: 3#運行容器的副本數,修改這里可以快速修改分布式節點數量
selector:
name: helloworld
template:
metadata:
labels:
name: helloworld
spec:
containers:#docker容器的配置
- name: helloworld
image: 192.168.31.141:5000/springio/ewater:0.0.1#pull鏡像的地址
imagePullPolicy: IfNotPresent#pull鏡像時機,
ports:
- containerPort: 20801#容器對方開放端口
cd到yaml的目錄,運行:kubectl create -f springboot-helloworld-rc.yaml,根據yaml的配置創建rc(創建什么類型對象是在yaml里面指定,所有類型對象創建命令都是kubectl create)
運行:kubectl get rc,可查看rc列表
運行:kubectl get pods,可查看運行的pod列表
Pod啟動比較容易出錯,以下詳細說明:
首先pod可以理解為docker容器,例如本文rc配置了運行副本(容器)數是3,所以就創建了3個pod(容器)
Pod的狀態(status)是running(運行中)是正常的,如果是其他值說明啟動未成功
未成功有可能是pull鏡像比較慢,這只能等
未成功也有可能是啟動失敗,可以用命令kubectl describe pod helloworld-7jpm5(helloworld-7jpm5代表pod名稱),通過查看某個pod的啟動日志來調試
例如下圖就說明pull鏡像時出問題
另外可以用命令kubectl logs helloworld-7jpm5(helloworld-7jpm5代表pod名稱)查看pod的命令行日志,相當於在cmd運行jar包的命令行輸出
rc和pod成功創建和運行,相當於java程序在k8s已運行成功,但外網還不能訪問,接下來要創建service
新建service
以下操作在master1做
Service在k8s體系總負責溝通k8s內外網絡配置(注意內外只是指k8s網絡的內外,而不是局域網和互聯網)
在任意目錄(最好是存放文件資料的地方),新建文件springboot-helloworld-svc.yaml,內容如下:
apiVersion: v1
kind: Service #對象類型,這里是service
metadata:
name: helloworld #名稱
labels:
name: helloworld #標注
spec:
type: NodePort
ports:
- port: 20801 #service(對內)的端口
targetPort: 20801 #pod的端口
nodePort: 32008 #service對外的端口
selector:
name: helloworld
cd到yaml文件所在目錄,運行:kubectl create -f springboot-helloworld-svc.yaml,根據yaml文件創建service
可以運行kubectl get services查看到新的service
PS:20801是內部端口,32008是對外端口
此時可以在瀏覽器訪問測試是否部署成功,注意ip是master1的,端口是service的對外端口