国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【云原生-K8s-1實例】通過yaml 文件編排一個web-MySQL小項目

這篇具有很好參考價值的文章主要介紹了【云原生-K8s-1實例】通過yaml 文件編排一個web-MySQL小項目。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

??博主簡介

????云計算領(lǐng)域優(yōu)質(zhì)創(chuàng)作者
????華為云開發(fā)者社區(qū)專家博主
????阿里云開發(fā)者社區(qū)專家博主
??交流社區(qū):運維交流社區(qū) 歡迎大家的加入!

1、啟動 mysql 項目

1-1 創(chuàng)建 mysql-rc.yaml

RC(ReplicationController)是Kubernetes系統(tǒng)中的核心概念之一,簡單來說,它其實定義了一個期望的場景,即聲明某種Pod的副本數(shù)量在任意時刻都符合某個預(yù)期值,所以RC的定義包括如下幾個部分。
◎ Pod期待的副本數(shù)量。
◎ 用于篩選目標Pod的Label Selector。
◎ 當Pod的副本數(shù)量小于預(yù)期數(shù)量時,用于創(chuàng)建新Pod的Pod模板(template)。

首先先編排一個關(guān)于mysql的RC(ReplicationController)yaml文件。

cat > mysql-rc.yaml <<EOF
apiVersion: v1
kind: ReplicationController             # 類型是副本控制器
metadata:                               
  name: mysql                           # RC的名稱全局是唯一的,這里name是mysql
spec:
  replicas: 1                           # 副本數(shù)量1
  selector:                             # RC管理 擁有l(wèi)abel={app:mysql}這個標簽的 pod
    app: mysql
  template:                             # template代表下面開始定義一個pod
    metadata:
      labels:
        app: mysql                      # 這個pod擁有{app:mysql}這樣一個標簽
    spec:                               
      containers:                       # pod中的容器定義部分
      - name: mysql 
        image: mysql:5.7
        ports:
        - containerPort: 3306           # 容器監(jiān)聽的端口
        env:                            # 注入容器里面的環(huán)境變量
        - name: MYSQL_ROOT_PASSWORD
          value: "123456"
EOF

以上YAML定義文件中

  • kind屬性用來表明此資源對象的類型,比如這里的值為ReplicationController,表示這是一個RC
  • spec一節(jié)中是RC的相關(guān)屬性定義,比如spec.selector是RC的Pod標簽選擇器,即監(jiān)控和管理擁有這些標簽的Pod實例,確保在當前集群中始終有且僅有replicas個Pod實例在運行,這里設(shè)置replicas=1,表示只能運行一個MySQL Pod實例。
  • 當在集群中運行的Pod數(shù)量少于replicas時,RC會根據(jù)在spec.template一節(jié)中定義的Pod模板來生成一個新的Pod實例,spec.template.metadata.labels指定了該Pod的標簽,需要特別注意的是:這里的labels必須匹配之前的spec.selector,否則此RC每創(chuàng)建一個無法匹配Label的Pod,就會不停地嘗試創(chuàng)建新的Pod,陷入惡性循環(huán)中。

1-1-1 將RC發(fā)布到k8s集群里面去

kubectl apply -f mysql-rc.yaml

1-1-2 查看集群中的pods

[root@k8s-master ~]# kubectl get pods
NAME          READY   STATUS    RESTARTS   AGE
mysql-hk852   1/1     Running   0          8s

1-1-3 負載均衡 副本實例(數(shù)據(jù)庫不需要開多個副本)這里只舉例如何多開副本

  • 我們可以看到只有一個,我們?nèi)绻枰撦d均衡的話可以多加幾個rc副本,但是這里面只要一個數(shù)據(jù)庫就好了,數(shù)據(jù)庫一般不會做負載均衡,就算做負載均衡,就要做其他操作,比如同步數(shù)據(jù),不同步數(shù)據(jù)的話數(shù)據(jù)就會亂。這里創(chuàng)建多個副本只是講一下。
kubectl scale rc mysql --replicas=5
  • 再次查看pod
kubectl get pods

【云原生-K8s-1實例】通過yaml 文件編排一個web-MySQL小項目

現(xiàn)在啟動了5個mysql,負載均衡完成。

1-2 創(chuàng)建 mysql-svc.yaml

最后,我們創(chuàng)建一個與之關(guān)聯(lián)的kubenetes Service-MYSQL 的定義文件(文件名為:mysql-svc.yaml),完整的內(nèi)容和解析如下;

cat > mysql-svc.yaml << EOF
apiVersion: v1
kind: Service              # 類型是service
metadata:                  
  name: mysql              # 這個service的全局唯一名稱
spec:
  ports:
    - port: 3306           # service提供服務(wù)的端口號
  selector:
    app: mysql             # 把擁有{app:label}這個標簽的pod應(yīng)用到這個服務(wù)里面
EOF

其中metadata.name 是Service的服務(wù)名(ServiceName);port屬性則定義了Service的端口;sepc.selector確定了那些Pod副本(實例)對應(yīng)到本服務(wù)。類似地,我們通過kubectl apply 命令創(chuàng)建Service對象。

1-2-1 將services應(yīng)用到集群中

光有RC是不行的,RC不會提供服務(wù)的,需要一個Service。將它應(yīng)用到集群里面去。

kubectl apply -f mysql-svc.yaml

1-2-2 查看services

kubectl get svc

【云原生-K8s-1實例】通過yaml 文件編排一個web-MySQL小項目

??注意到,MySQL服務(wù)被分配了一個值為 10.100.130.176 的Cluster IP地址。隨后,Kubernetes集群中其他新創(chuàng)建的Pod就可以通過Service的Cluster IP+端口號3306來連接和訪問它了。但是要注意,外部是無法去訪問這個Mysql的,3306只是對其他pod開放的端口號?;貞浺幌?,之前的pod,node架構(gòu)圖就知道了。
?
??通常,Cluster IP是在Service創(chuàng)建后由Kubernetes系統(tǒng)自動分配的,其他Pod無法預(yù)先知道某個Service的Cluster IP地址,因此需要一個服務(wù)發(fā)現(xiàn)機制來找到這個服務(wù)。為此,最初時,Kubernetes巧妙地使用了Linux環(huán)境變量(Environment Variable)來解決這個問題,后面會詳細說明其機制?,F(xiàn)在只需知道,根據(jù)Service的唯一名稱,容器可以從環(huán)境變量中獲取Service對應(yīng)的Cluster IP地址和端口,從而發(fā)起TCP/IP連接請求。這個地方挺像Nacos里面一樣的,只要應(yīng)用名稱就可以自動訪問到。不用配置什么具體的ip什么的。

1-3 附加:如何找到并進入mysql數(shù)據(jù)庫中?

如果需要查看mysql的表或者數(shù)據(jù)的話,可以這樣來看;

  • 首先:查看mysql在哪個集群中,當然單機架構(gòu)就沒事了;
kubectl get pods -o wide

【云原生-K8s-1實例】通過yaml 文件編排一個web-MySQL小項目

可以看到mysql在node2節(jié)點上,我們就可以去node2集群中去找到mysql-4fxv6這個容器;

  • 切換到node2節(jié)點
[root@k8s-node2 ~]# docker ps -a | grep mysql-4fxv6

【云原生-K8s-1實例】通過yaml 文件編排一個web-MySQL小項目

過濾出來了兩個容器,選第一個就行,因為第二個是屬于一個控制器,容器名為:k8s_mysql_mysql-4fxv6_default_a6be3c5d-72ef-40d9-b6b7-83e31c4f5d86_0

  • 進入該容器
[root@k8s-node1 ~]# docker exec -it k8s_mysql_mysql-4fxv6_default_a6be3c5d-72ef-40d9-b6b7-83e31c4f5d86_0 bash
  • 進入數(shù)據(jù)庫
mysql -uroot -p123456

【云原生-K8s-1實例】通過yaml 文件編排一個web-MySQL小項目
這樣就進入到數(shù)據(jù)庫中了,可以自行查看表結(jié)構(gòu)或者增刪改查數(shù)據(jù)之類的了。

  • 還有一種進入數(shù)據(jù)庫容器的方法;

使用方法:

 kubectl exec -it pod名字 -n名稱空間 bash

實例:

kubectl exec -it mysql-4fxv6 bash

為什么這樣進入數(shù)據(jù)庫,用工具連接不好嗎?
?
??答:因為mysql端口沒有對外,使用navicat等工具并不能連接上。

2、啟動 tomcat 項目

這個tomcat是書里面特定的,所以說我們要先去拉取一下這個鏡像,這個鏡像是作者已經(jīng)制定好了的。

2-1 拉取特定的tomcat鏡像

docker pull kubeguide/tomcat-app:v1

拉取完成之后,寫yaml文件。

2-2 創(chuàng)建 tomcat-rc.yaml

cat > tomcat-rc.yaml << EOF
apiVersion: v1
kind: ReplicationController
metadata:
  name: myweb
spec:
  replicas: 5
  selector:
    app: myweb
  template:
    metadata:
      labels:
        app: myweb
    spec:
      containers:
      - name: myweb
        image: kubeguide/tomcat-app:v1
        ports:
        - containerPort: 8080
        env:
        - name: MYSQL_SERVICE_HOST
          value: 'mysql'
        - name: MYSQL_SERVICE_PORT
          value: '3306'
EOF

注意:Tomcat 容器內(nèi),應(yīng)用將使用環(huán)境變量 MYSQL_ SERVICE_ HOST 的值連接 MYSQL 務(wù)。更安全可靠的用法是使用服務(wù)的名稱“mysql”。

2-2-1 將RC發(fā)布到k8s集群里面去

kubectl apply -f tomcat-rc.yaml

這里面有5個副本就不用在多創(chuàng)建了,5個就夠了,當然自己想要更多可以根據(jù)自己的情況創(chuàng)建。

2-2-2 查看集群中的pods

[root@k8s-master ~]# kubectl get pods | grep myweb
myweb-56tzt   1/1     Running   0          7m37s
myweb-7h9t8   1/1     Running   0          7m37s
myweb-kzq69   1/1     Running   0          7m37s
myweb-tncrc   1/1     Running   0          7m37s
myweb-wprk4   1/1     Running   0          7m37s

可以看到已經(jīng)創(chuàng)建了5個pod,接下來就該創(chuàng)建對外開放的端口也就是services了。

2-3 創(chuàng)建 tomcat-svc.yaml

cat > tomcat-svc.yaml << EOF
apiVersion: v1
kind: Service
metadata:
  name: myweb
spec:
  type: NodePort
  ports:
    - port: 8080
      nodePort: 30001  # 對外暴露端口,使得k8s之外的人可以訪問到這個服務(wù)
  selector:
    app: myweb
EOF

type=NodePort和nodePort=30001的兩個屬性表明此Service開啟了NodePort方式的外網(wǎng)訪問模式。在Kubernetes集群之外,比如在本機的瀏覽器里,可以通過30001這個端口訪問myweb(對應(yīng)到8080的虛端口上)。

2-3-1 將services應(yīng)用到集群中

光有RC是不行的,RC不會提供服務(wù)的,需要一個Service。將它應(yīng)用到集群里面去。

kubectl apply -f tomcat-svc.yaml

2-3-2 查看services

kubectl get svc

【云原生-K8s-1實例】通過yaml 文件編排一個web-MySQL小項目

30001為映射的端口,是可以對外訪問的。

3、通過瀏覽器訪問

 #ip填你的master或者node的地址
http://172.16.11.221:30001

【云原生-K8s-1實例】通過yaml 文件編排一個web-MySQL小項目

如果看不到這個網(wǎng)頁,那么可能有幾個原因:比如防火墻的問題,無法訪問 30001 端口,或者因為你是通過代理上網(wǎng)的,瀏覽器錯把虛擬機的IP地址當成遠程地址了。可以在虛擬機上直接運行 curl 127.0.0.1:30001 來驗證此端口是否能被訪問,如果還是不能訪問,那么這肯定不是機器的問題…

#ip填你的master或者node的地址
http://172.16.11.221:30001/demo/ 

【云原生-K8s-1實例】通過yaml 文件編排一個web-MySQL小項目

接下來可以嘗試單擊 “Add…” 按鈕添加一條記錄并提交,如下圖所示,提交以后,數(shù)據(jù)就被寫入 MySQL 數(shù)據(jù)庫中了。

【云原生-K8s-1實例】通過yaml 文件編排一個web-MySQL小項目

提交為submit,提交成功會顯示如下圖;

【云原生-K8s-1實例】通過yaml 文件編排一個web-MySQL小項目

如果失敗,既有可能是因為數(shù)據(jù)庫副本開的太多,導(dǎo)致數(shù)據(jù)寫入不知道該往哪個數(shù)據(jù)庫中寫了。

點擊return即可返回查看到剛剛添加的數(shù)據(jù)。

【云原生-K8s-1實例】通過yaml 文件編排一個web-MySQL小項目

??至此,我們終于完成了 Kuberetes 上的 Tomcat 例子,這個例子并不是很復(fù)雜。我們也看到,相對于傳統(tǒng)的分布式應(yīng)用的部署方式,在Kuberetes 之上我們僅僅通過一些很容易理解的配置文件和相關(guān)的簡單命令就完成了對整個集群的部署,這讓我們驚詫于 Kuberetes 的創(chuàng)新和強大。 下一節(jié),我們將開始對 Kubernetes 中的基本概念和術(shù)語進行全面學(xué)習(xí),在這之前,讀者可以繼續(xù)研究下這個例子里的一些拓展內(nèi)容,如下所述。 研究 RC、Service 等配置文件的格式。文章來源地址http://www.zghlxwxcb.cn/news/detail-497158.html

到了這里,關(guān)于【云原生-K8s-1實例】通過yaml 文件編排一個web-MySQL小項目的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【云原生】Dockerfile制作WordPress鏡像,實現(xiàn)Compose + K8s編排部署

    【云原生】Dockerfile制作WordPress鏡像,實現(xiàn)Compose + K8s編排部署

    大家好,我是秋意零。 ?? CSDN作者主頁 ?? 博客主頁 ?? 簡介 ?? 普通本科生在讀 在校期間參與眾多計算機相關(guān)比賽,如:?? “省賽”、“國賽” ,斬獲多項獎項榮譽證書 ?? 各個平臺, 秋意臨 賬號創(chuàng)作者 ?? 云社區(qū) 創(chuàng)建者 點贊、收藏+關(guān)注下次不迷路! 歡迎加入 云社

    2024年02月03日
    瀏覽(26)
  • [ K8S ] yaml文件講解

    Kubernetes 支持 YAML 和 JSON 格式管理資源對象 JSON 格式:主要用于 api 接口之間消息的傳遞 YAML 格式:用于配置和管理,YAML 是一種簡潔的非標記性語言,內(nèi)容格式人性化,較易讀 YAML 語法格式: ●大小寫敏感 ●使用縮進表示層級關(guān)系 ●不支持Tab鍵制表符縮進,只使用空格縮進

    2024年02月13日
    瀏覽(115)
  • K8S---yaml文件詳解

    K8S---yaml文件詳解

    目錄 一、K8S支持的文件格式 1、yaml和json的主要區(qū)別 2、YAML語言格式 二、YAML 1、查看 API 資源版本標簽 2、編寫資源配置清單 2.1 編寫 nginx-test.yaml 資源配置清單 2.2 創(chuàng)建資源對象 2.3 查看創(chuàng)建的pod資源 3、創(chuàng)建service服務(wù)對外提供訪問并測試 3.1 編寫nginx-svc-test.yaml文件 3.2 創(chuàng)建資

    2024年02月12日
    瀏覽(87)
  • K8S:Yaml文件詳解

    K8S:Yaml文件詳解

    目錄 一.Yaml文件詳解 1.Yaml文件格式 2.YAML 語法格式 二.Yaml文件編寫及相關(guān)概念 1.查看 api 資源版本標簽 2.yaml編寫案例 (2)Deployment類型編寫nginx服務(wù) (3)k8s集群中的port介紹 (5)快速編寫yaml文件 (6)案例:自主式創(chuàng)建service并關(guān)聯(lián)上面的pod (7)Pod yaml文件詳解 (8)deploymen

    2024年02月08日
    瀏覽(91)
  • 云原生之容器編排實踐-在K8S集群中使用Registry2搭建私有鏡像倉庫

    云原生之容器編排實踐-在K8S集群中使用Registry2搭建私有鏡像倉庫

    基于前面搭建的3節(jié)點 Kubernetes 集群,今天我們使用 Registry2 搭建私有鏡像倉庫,這在鏡像安全性以及離線環(huán)境下運維等方面具有重要意義。 Note: 由于是測試環(huán)境,以下創(chuàng)建了一個 local-storage 的 StorageClass ,并使用本地磁盤的方式創(chuàng)建使用 PV ,實際建議使用 NFS 。 共用到了三臺

    2024年02月19日
    瀏覽(22)
  • K8s中yaml文件詳解

    文章目錄 目錄 一、YAML基礎(chǔ) 二、說明 三、使用YAML創(chuàng)建Pod 附上一個具體的yaml解釋文件: YAML是專門用來寫配置文件的語言,非常簡潔和強大,使用比json更方便。它實質(zhì)上是一種通用的數(shù)據(jù)串行化格式。 YAML語法規(guī)則: 1.1 YAML Maps Map顧名思義指的是字典,即一個Key:Value 的鍵值

    2024年02月15日
    瀏覽(107)
  • K8S之yaml文件詳解

    K8S之yaml文件詳解

    文章目錄 一、概述 二、YAML文件優(yōu)點 三、YAML與 JSON 和 XML 的關(guān)系 四、YAML 文件的結(jié)構(gòu) 五、YAML 在 Kubernetes 中的使用 六、YAML文件模板生成/導(dǎo)出 一、概述? Kubernetes只支持YAML和JSON格式創(chuàng)建資源對象 JSON格式用于接口之間消息的傳遞,YAML格式用于配置和管理 YAML是專門用來寫配置

    2024年02月02日
    瀏覽(112)
  • kubernetes(k8s) Yaml 文件詳解

    kubernetes(k8s) Yaml 文件詳解

    YAML格式 :用于配置和管理,YAML是一種簡潔的非標記性語言,內(nèi)容格式人性化,較易讀。 1、查看API 資源版本標簽 kubectl api-versions 2、編寫資源配置清單 2.3 查看創(chuàng)建的pod資源 kubectl get pods -o wide 3、創(chuàng)建service服務(wù)對外提供訪問并測試 3.1、編寫nginx-svc-test.yaml文件 3.2、創(chuàng)建資源

    2024年02月05日
    瀏覽(30)
  • k8s之YAML文件書寫秘笈

    k8s之YAML文件書寫秘笈

    ? ? ? ? ? ? ?在kubernetes的江湖里,一直流傳YAML的傳說,它是Yet Another Markup Language的英文縮寫,用來配置k8s里的各類資源.。通常,你可以選擇YAML或JSON來完成聲明式的配置文件,這種方式便于復(fù)用和保存,但命令式的方式有一定的局限性,僅有部分kubernetes資源可以使用命令

    2024年01月18日
    瀏覽(20)
  • K8S:Yaml文件詳解及編寫示例

    K8S:Yaml文件詳解及編寫示例

    (1)Kubernetes 支持 YAML 和 JSON 格式管理資源對象 (2)JSON 格式:主要用于 api 接口之間消息的傳遞 (3)YAML 格式:用于配置和管理,YAML 是一種簡潔的非標記性語言,內(nèi)容格式人性化,較易讀 (1)大小寫敏感 (2)使用縮進表示層級關(guān)系 (3)不支持Tab鍵制表符縮進,只使用

    2024年02月04日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包