部署好了k8s以后 部署參考https://www.cnblogs.com/minseo/p/12055731.html
怎么在k8s部署應用
項目遷移到k8s平台是怎樣的流程
1,制作鏡像
2,控制器管理Pod
3,暴露應用
4,對外發布應用
5,日志/監控
k8s基本概念
Cluster
Cluster 是計算、存儲和網絡資源的集合,Kubernetes 利用這些資源運行各種基於容器的應用。
Master
Master 是 Cluster 的大腦,它的主要職責是調度,即決定將應用放在哪里運行。Master 運行 Linux 操作系統,可以是物理機或者虛擬機。為了實現高可用,可以運行多個 Master。
Node
Node 的職責是運行容器應用。Node 由 Master 管理,Node 負責監控並匯報容器的狀態,並根據 Master 的要求管理容器的生命周期。Node 運行在 Linux 操作系統,可以是物理機或者是虛擬機。
Pod
Pod 是 Kubernetes 的最小工作單元。每個 Pod 包含一個或多個容器。Pod 中的容器會作為一個整體被 Master 調度到一個 Node 上運行,一個Pod里的所有容器共用一個namespaces
Controller
管理Pod的工具,kubernetes通過它來管理集群中的Pod
Deployment
Deployment 是最常用的 Controller,比如前面在線教程中就是通過創建 Deployment 來部署應用的。Deployment 可以管理 Pod 的多個副本,並確保 Pod 按照期望的狀態運行。
ReplicaSet
ReplicaSet 實現了 Pod 的多副本管理。使用 Deployment 時會自動創建 ReplicaSet,也就是說 Deployment 是通過 ReplicaSet 來管理 Pod 的多個副本,我們通常不需要直接使用 ReplicaSet。
DaemonSet
DaemonSet 用於每個 Node 最多只運行一個 Pod 副本的場景。正如其名稱所揭示的,DaemonSet 通常用於運行 daemon。
StatefuleSet
StatefuleSet 能夠保證 Pod 的每個副本在整個生命周期中名稱是不變的。而其他 Controller 不提供這個功能,當某個 Pod 發生故障需要刪除並重新啟動時,Pod 的名稱會發生變化。同時 StatefuleSet 會保證副本按照固定的順序啟動、更新或者刪除。
Job
Job 用於運行結束就刪除的應用。而其他 Controller 中的 Pod 通常是長期持續運行。
Service
Kubernetes Service 定義了外界訪問一組特定 Pod 的方式。Service 有自己的 IP 和端口,並把這個IP和后端的Pod所跑的服務的關聯起來。Service 為 Pod 提供了負載均衡。
namespace
Namespace 可以將一個物理的 Cluster 邏輯上划分成多個虛擬 Cluster,每個 Cluster 就是一個 Namespace。不同 Namespace 里的資源是完全隔離的。
Kubernetes 默認創建了兩個 Namespace,default和kube-system
在k8s中部署一個java應用
下載demo
wget https://codeload.github.com/lizhenliang/tomcat-java-demo/zip/master
解壓
tomcat-java-demo-master.zip.zip
目錄db下有mysql初始sql tables_ly_tomcat.sql新建一台主機192.168.1.14用作數據庫安裝mariadb
yum -y install mariadb yum -y install mariadb-server
創建數據庫test導入表
use test; source /root/tables_ly_tomcat.sql
查看導入的表
授權保證master和node可以正常訪問該數據庫
grant all on test.* to 'test'@'%' identified by '123.com';
其他主機使用test用戶可以正常訪問即可
mysql -utest -p123.com -h 192.168.1.14
安裝jdk和maven
yum -y install maven java-1.8.0-openjdk.x86_64
修改數據庫鏈接地址
src/main/resources/application.yml
編譯構建
mvn clean install -Dmaven.test.skip=true
第一次構建時間稍長
會在文件夾target下面生成一下文件
查看解壓文件夾下的Dockerfile
FROM lizhenliang/tomcat LABEL maintainer www.ctnrs.com RUN rm -rf /usr/local/tomcat/webapps/* ADD target/*.war /usr/local/tomcat/webapps/ROOT.war
引用tomcat 刪除默認的根目錄,增加剛剛構建的war包至根目錄
使用Dockerfile構建鏡像 需要使用docker hub的注冊用戶名yueming33990否則推送會失敗提示為requested access to the resource is denied
docker build -t yueming33990/java-demo .
注意最后有.符號
推送到鏡像倉庫其他節點也可以訪問
登錄
docker login
需要輸入用戶名和密碼可以去網站https://hub.docker.com注冊或者是搭建私有鏡像倉庫
推送至docker hub
docker push yueming33990/java-demo
推送成功在hub.docker.com會生成一個公共的鏡像
已經推送至公共的鏡像倉庫了其他主機可以直接下載
docker pull yueming33990/java-demo
k8s使用鏡像
kubectl create deployment java-demo --image=yueming33990/java-demo --dry-run -o yaml
--dry-run測試不在k8s運行
-o yaml 生成yaml格式
執行輸出yaml格式
輸出重定向至deploy.yaml
kubectl create deployment java-demo --image=yueming33990/java-demo --dry-run -o yaml > deploy.yaml
修改
運行
kubectl apply -f deploy.yaml
查看啟動的pods
kubectl get pods
通過日志查看tomcat是否啟動
kubectl logs java-demo-b76fc7876-5qjgn
暴露應用
創建一個service
kubectl expose deployment java-demo --port=80 --target-port=8080 --type=NodePort -o yaml --dry-run
java-demo指定名稱
--port指定集群內部訪問的端口
--target-port指定容器內跑服務的端口
--type=NodePort 指定類型 集群外部訪問
重定向到文件
kubectl expose deployment java-demo --port=80 --target-port=8080 --type=NodePort -o yaml --dry-run > svc.yaml
運行
kubectl apply -f svc.yaml
查看pods和svc
kubectl get pods,svc
web頁面訪問
http://192.168.1.12:30457/
查看pods分布的節點
kubectl get pods -o wide
使用k8s部署java應用完成