單機版的K8s環(huán)境搭建及部署Java Web應(yīng)用

      網(wǎng)友投稿 1339 2025-03-31

      寫在前面


      書里看到,這里單獨拿出整理一下

      博文內(nèi)容包括:

      K8s環(huán)境單機版搭建

      Tomcat+mysql 一個簡單的Java Web APP 應(yīng)用實踐

      單機版的K8s環(huán)境搭建及部署Java Web應(yīng)用

      傍晚時分,你坐在屋檐下,看著天慢慢地黑下去,心里寂寞而凄涼,感到自己的生命被剝奪了。當(dāng)時我是個年輕人,但我害怕這樣生活下去,衰老下去。在我看來,這是比死亡更可怕的事。--------王小波

      K8s環(huán)境單機版搭建

      1. 環(huán)境準(zhǔn)備

      # 關(guān)閉CentoS自帶的防火墻服務(wù): systemctl disable firewalld --now sed -i '/swap/d' /etc/fstab # 安裝etcd和Kubernetes軟件(會自動安裝Docker軟件): yum install -y etcd kubernetes #按順序啟動所有的服務(wù): systemctl start etcd systemctl start docker systemctl start kube-apiserver systemctl start kube-controller-manager systemctl start kube-scheduler systemctl start kubelet systemctl start kube-proxy # 查看服務(wù)狀態(tài) systemctl status etcd docker kube-apiserver kube-controller-manager kube-scheduler kubelet kube-proxy

      至此,一個單機版的Kubernetes集群環(huán)境就安裝啟動完成了。接下來,我們可以在這個單機版的Kubernetes集群中上手練習(xí)了。

      鏡像相關(guān)地址: https://hub.docker.com/u/kubeguide/.

      一個簡單的Java Web APP 應(yīng)用實踐

      1. 啟動MySQL服務(wù)

      首先為MySQL服務(wù)創(chuàng)建一個RC定義文件:mysql-rc.yaml,文件的完整內(nèi)容和解釋;

      apiVersion: v1 kind: ReplicationController #副本控制器RC metadata: # RC的名稱,全局唯一 name: mysql # Pod副本期待數(shù)量 spec: replicas: 1 selector: # 符合目標(biāo)的Pod擁有此標(biāo)簽 app: mysql # 根據(jù)此模板創(chuàng)建Pod的副本(實例). template: metadata: #Pod副本擁有的標(biāo)簽,對應(yīng)RC的Selector labels: app: mysql spec: containers: # Pod內(nèi)容器的定義部分 - name: mysql # 容器的名稱,容器對應(yīng)的Docker Image image: mysql ports: #容器應(yīng)用監(jiān)聽的端口號 - containerPort: 3306 env: #注入容器內(nèi)的環(huán)境變量 - name: MYSQL_ROOT_PASSWORD value: "123456"

      yaml定義文件中

      [root@liruilong k8s]# kubectl create -f mysql-rc.yaml replicationcontroller "mysql" created E:\docker>ssh root@39.97.241.18 Last login: Sun Aug 29 13:00:58 2021 from 121.56.4.34 Welcome to Alibaba Cloud Elastic Compute Service ! ^[[AHow would you spend your life?.I don t know, but I will cherish every minute to live. [root@liruilong ~]# kubectl get rc NAME DESIRED CURRENT READY AGE mysql 1 1 1 1d [root@liruilong ~]# kubectl get pods NAME READY STATUS RESTARTS AGE mysql-q7802 1/1 Running 0 1d [root@liruilong ~]#

      嗯,這里剛開始搞得的時候是有問題的,pod一直沒辦法創(chuàng)建成功,第一次啟動容器時,STATUS一直顯示CONTAINERCREATING,我用的是阿里云ESC單核2G+40G云盤,我最開始以為系統(tǒng)核數(shù)的問題,因為看其他的教程寫的需要雙核,但是后來發(fā)現(xiàn)不是,網(wǎng)上找了解決辦法,一頓操作猛如虎,后來不知道怎么就好了。

      有說基礎(chǔ)鏡像外網(wǎng)拉不了,只能用 docker Hub的,有說 ,權(quán)限的問題,還有說少包的問題,反正都試了,這里列出幾個靠譜的解決方案

      https://blog.csdn.net/gezilan/article/details/80011905

      https://www.freesion.com/article/8438814614/

      K8s 根據(jù)mysqlde RC的定義自動創(chuàng)建的Pod。由于Pod的調(diào)度和創(chuàng)建需要花費一定的時間,比如需要一定的時間來確定調(diào)度到哪個節(jié)點上,以及下載Pod里容器的鏡像需要一段時間,所以一開始我們看到Pod的狀態(tài)將顯示為Pending。當(dāng)Pod成功創(chuàng)建完成以后,狀態(tài)最終會被更新為Running我們通過docker ps指令查看正在運行的容器,發(fā)現(xiàn)提供MySQL服務(wù)的Pod容器已經(jīng)創(chuàng)建并正常運行了,此外,你會發(fā)現(xiàn)MySQL Pod對應(yīng)的容器還多創(chuàng)建了一個來自谷歌的pause容器,這就是Pod的“根容器".

      我們創(chuàng)建一個與之關(guān)聯(lián)的Kubernetes Service 的定義文件 mysql-sve.yaml

      apiVersion: v1 kind: Service # 表明是Kubernetes Service metadata: name: mysql # Service的全局唯一名稱 spec: ports: - port: 3306 #service提供服務(wù)的端口號 selector: #Service對應(yīng)的Pod擁有這里定義的標(biāo)簽 app: mysql

      我們通過kubectl create命令創(chuàng)建Service對象。運行kubectl命令:

      [root@liruilong k8s]# kubectl create -f mysql-svc.yaml service "mysql" created [root@liruilong k8s]# kubectl get svc NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE mysql 10.254.155.86 3306/TCP 1m [root@liruilong k8s]#

      注意到MySQL服務(wù)被分配了一個值為10.254.155.86的Cluster IP地址,這是一個虛地址,隨后, Kubernetes集群中其他新創(chuàng)建的Pod就可以通過Service的Cluster IP+端口號3306來連接和訪問它了。

      在通常情況下, Cluster IP是在Service創(chuàng)建后由Kubernetes系統(tǒng)自動分配的,其他Pod無法預(yù)先知道某個Service的Cluster IP地址,因此需要一個服務(wù)發(fā)現(xiàn)機制來找到這個服務(wù)。

      為此,最初時, Kubernetes巧妙地使用了Linux環(huán)境變量(Environment Variable)來解決這個問題,后面會詳細說明其機制。現(xiàn)在我們只需知道,根據(jù)Service的唯一名字,容器可以從環(huán)境變量中獲取到Service對應(yīng)的Cluster IP地址和端口,從而發(fā)起TCP/IP連接請求了。

      2.啟動Tomcat應(yīng)用

      創(chuàng)建對應(yīng)的 RC文件 myweb-rc.yaml

      apiVersion: v1 kind: ReplicationController metadata: name: myweb spec: replicas: 2 selector: app: myweb template: metadata: labels: app: myweb spec: containers: - name: myweb image: kubeguide/tomcat-app:v1 ports: - containerPort: 8080

      replicas: 2: 這里我們用兩個tomcat(Pod)提供服務(wù)

      [root@liruilong k8s]# vim myweb-rc.yaml [root@liruilong k8s]# kubectl create -f myweb-rc.yaml replicationcontroller "myweb" created [root@liruilong k8s]# kubectl get rc NAME DESIRED CURRENT READY AGE mysql 1 1 1 1d myweb 2 2 0 20s [root@liruilong k8s]# kubectl get pods NAME READY STATUS RESTARTS AGE mysql-q7802 1/1 Running 0 1d myweb-53r32 0/1 ContainerCreating 0 28s myweb-609w4 0/1 ContainerCreating 0 28s [root@liruilong k8s]# kubectl get pods NAME READY STATUS RESTARTS AGE mysql-q7802 1/1 Running 0 1d myweb-53r32 1/1 Running 0 1m myweb-609w4 1/1 Running 0 1m [root@liruilong k8s]#

      最后,創(chuàng)建對應(yīng)的 Service 。以下是完整yaml定義文件 myweb-svc.yaml:

      指定端口映射:30001:8080

      apiVersion: v1 kind: Service metadata: name: myweb spec: type: NodePort ports: - port: 8080 nodePort: 30001 selector: app: myweb

      [root@liruilong k8s]# vim myweb-svc.yaml [root@liruilong k8s]# kubectl create -f myweb-svc.yaml service "myweb" created [root@liruilong k8s]# kubectl get services NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes 10.254.0.1 443/TCP 2d mysql 10.254.155.86 3306/TCP 5h myweb 10.254.122.63 8080:30001/TCP 54s [root@liruilong k8s]#

      3.通過瀏覽器訪問網(wǎng)頁

      [root@liruilong k8s]# curl http://127.0.0.1:30001/demo/ HPE University Docker&Kubernetes Learning

      Error:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.

      數(shù)據(jù)庫連接有問題,這里百度發(fā)現(xiàn)是mysql驅(qū)動版本問題

      [root@liruilong k8s]# docker logs a05d16ec69ff [root@liruilong k8s]# vim mysql-rc.yaml

      apiVersion: v1 kind: ReplicationController #副本控制器RC metadata: # RC的名稱,全局唯一 name: mysql # Pod副本期待數(shù)量 spec: replicas: 1 selector: # 符合目標(biāo)的Pod擁有此標(biāo)簽 app: mysql # 根據(jù)此模板創(chuàng)建Pod的副本(實例). template: metadata: #Pod副本擁有的標(biāo)簽,對應(yīng)RC的Selector labels: app: mysql spec: containers: # Pod內(nèi)容器的定義部分 - name: mysql # 容器的名稱,容器對應(yīng)的Docker Image image: mysql:5.7 ports: #容器應(yīng)用監(jiān)聽的端口號 - containerPort: 3306 env: #注入容器內(nèi)的環(huán)境變量 - name: MYSQL_ROOT_PASSWORD value: "123456"

      [root@liruilong k8s]# kubectl delete -f mysql-rc.yaml replicationcontroller "mysql" deleted [root@liruilong k8s]# kubectl create -f mysql-rc.yaml replicationcontroller "mysql" created [root@liruilong k8s]# kubectl get rc NAME DESIRED CURRENT READY AGE mysql 1 1 0 10s myweb 2 2 2 4h [root@liruilong k8s]# kubectl get pods NAME READY STATUS RESTARTS AGE mysql-2cpt9 0/1 ContainerCreating 0 15s myweb-53r32 1/1 Running 0 4h myweb-609w4 1/1 Running 1 4h [root@liruilong k8s]# kubectl get pods NAME READY STATUS RESTARTS AGE mysql-2cpt9 0/1 ContainerCreating 0 32s myweb-53r32 1/1 Running 0 4h myweb-609w4 1/1 Running 1 4h [root@liruilong k8s]#

      我們在上面的SVC中定義了Tomcat的兩個pod。所以這里顯示兩個

      Digest: sha256:7cf2e7d7ff876f93c8601406a5aa17484e6623875e64e7acc71432ad8e0a3d7e Status: Downloaded newer image for docker.io/mysql:5.7 [root@liruilong k8s]# kubectl get pods NAME READY STATUS RESTARTS AGE mysql-2cpt9 1/1 Running 0 31m myweb-53r32 1/1 Running 0 5h myweb-609w4 1/1 Running 1 5h [root@liruilong k8s]# curl http://127.0.0.1:30001/demo/

      測試一下

      HPE University Docker&Kubernetes Learning

      Congratulations!!





      Name Level(Score)
      google 100
      docker 100
      teacher 100
      HPE 100
      our team 100
      me 100

      Docker Java Kubernetes

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:云對制造業(yè)的影響
      下一篇:excel一鍵生成圖表快捷鍵是什么?(自動生成圖表的快捷鍵)
      相關(guān)文章
      亚洲午夜久久久精品电影院| 成人亚洲国产精品久久| 亚洲激情中文字幕| 亚洲黄色免费网站| 国产午夜亚洲精品不卡免下载| 亚洲视频在线免费看| 亚洲AV日韩AV永久无码久久| 亚洲av日韩综合一区久热| 亚洲AV本道一区二区三区四区| 亚洲综合色婷婷七月丁香| 亚洲欧美国产精品专区久久| 国产精品亚洲аv无码播放| 亚洲欧美一区二区三区日产| 亚洲综合一区国产精品| 18亚洲男同志videos网站| 久久精品国产亚洲| 亚洲av不卡一区二区三区| 久久精品国产亚洲AV麻豆王友容 | 色偷偷女男人的天堂亚洲网| 亚洲国产精品一区第二页| 国产V亚洲V天堂无码| 亚洲AV无码成人精品区在线观看| 国产亚洲精品欧洲在线观看| 亚洲成a人在线看天堂无码| 亚洲中文久久精品无码1| 亚洲国产精品人久久| 亚洲天天做日日做天天看| 久久被窝电影亚洲爽爽爽| 亚洲精品成人网站在线观看| 亚洲精品亚洲人成在线观看下载| 四虎必出精品亚洲高清| 亚洲理论片在线中文字幕| 99人中文字幕亚洲区| 亚洲国产电影在线观看| 亚洲AV日韩综合一区尤物| 亚洲精品无码久久久久YW| 中文字幕亚洲综合久久综合| 亚洲成a人片在线观看天堂无码| 亚洲av无码专区在线观看下载| 亚洲成a人在线看天堂无码| 亚洲午夜久久久久久久久久|