kubernetes中mysql亂碼_在kubernetes中部署tomcat與mysql集群-Go語言中文社區

在kubernetes中部署tomcat與mysql集群之前必須要有以下這些基礎:

1. 已安裝、配置kubernetes

2. 集群中有tomcat與mysql容器鏡像

3. 有docker基礎

具體步驟

部署tomcat

創建tomcat RC對象

我們想要在kubernetes集群中配置tomcat服務器,首先要保證集群中的節點上有tomcat鏡像,鏡像可以從docker Hub中拉取,也可以放在自己的私有倉庫中。這在我之前的博客中講過,這里就不詳述了。

要部署tomcat服務,我們需要做兩件事,一是創建RC(Replication Controller),二是創建Service。RC是kubernetes中的副本控制器,也就是說,RC負責自動部署容器化應用。Service是我們訪問tomcat服務的入口地址,我們是通過Service來對該服務就行訪問的。

創建RC與Service對象,我這里用的是創建yaml文件的方式。yaml文件中的內容是聲明式的。這些聲明讓kubernetes做你想要它做的事情。聲明與命令有所不同,聲明是告訴它你的需要是什么,而不涉及具體的實現的步驟,而命令,如linux中的ls,你是告訴它去做什么。聲明與命令是不同的,請自己體會。話不多說了,上代碼:

此文件名為myweb-rc1.yaml

這里我簡單的說明一下此yaml文件聲明了什么:

1 apiVersion: v1? ? ? //描述RC對象的版本是v1

2 kind: ReplicationController? ? //我現在在聲明RC對象

3 metadata:? ? ?//metadata中的是對此RC對象描述信息

4? ?name: myweb? ? ? //此RC對象在default命名空間中名為myweb,同一個命名空間中的命名一定是不同的

5 spec:? ? ?//spec中是對RC對象的具體描述

6? ?replicas: 5? ? //我要創建5個副本,單位當然是pod

7? ?selector:? ? ? //選擇器,用來選擇對象的

8? ? ?app: myweb? ? //我選擇了標簽為app: myweb的pod

9? ?template:? ? ?//模版,以下用來描述創建的pod的模版

10? ? ?metadata:? ?//對pod模版描述的元數據

11? ? ? ?labels:? ? ? //給以下的東西打上標簽,以讓selector來選擇

12? ? ? ? ?app: myweb? ?//給pod模版打上app: myweb這樣的標簽

13? ? ?spec:? ? ? ? ? ? ?//對pod模版的具體描述

14? ? ? ?containers:? ? ? ? ?//以下就是要放入pod模版中的容器了

15? ? ? ?- image: kubeguide/tomcat-app:v1? ? //選擇鏡像

16? ? ? ? ?name: myweb? ? ? ? ?//容器名

17? ? ? ? ?resources:? ? ? ? ? ?//給該容器分配的資源大小

18? ? ? ? ? ?limits:

19? ? ? ? ? ? ?cpu: "2"

20? ? ? ? ? ? ?memory: 4Gi

21? ? ? ? ?ports:? ? ? ? ?//容器端口號

22? ? ? ? ?- containerPort: 8080

23? ? ? ? ?env:? ? ? ? ? //給該容器設置環境變量,這里就可以將mysql與我們的tomcat連接

24? ? ? ? ?- name: MYSQL_SERVICE_HOST

25? ? ? ? ? ?value: 'mysql'

26? ? ? ? ?- name: MYSQL_SERVICE_PORT

27? ? ? ? ? ?value: '3306'

仔細研究就發現其實yaml文件的規范還是比較嚴謹的。它是通過縮進與對齊的方式來表達了具體的信息的。比如一個metadata,在我這個yaml文件中就有兩個。實際上通過縮進與對齊,我們就可以了解到,第一個metadata是對這個RC對象進行描述的元數據,而第二個metadata因為縮進了,實際上它是對pod模版進行描述的元數據。當然是不一樣的。spec也有兩個,同樣的道理,大家可以自行分析。

創建tomcat RC對象的結果

如下,我截了個屏:

5beae75e3ccb6b73bb0ba2f1bf266f09.png

可以看到,我在創建完了tomcat的RC對象之后,它就立馬自動部署了5個pod,這5個pod已經健康的跑起來了。為什么是創建5個pod?因為我在yaml文件中聲明了我需要5個副本。

創建tomcat Service對象

單單創建了RC對象還不行,雖然RC對象為我們自動部署了5個pod,但是我們還需要一個Service對象來作為入口地址來對創建好的tomcat進行訪問,所以,接下來我們的任務就是創建Service對象。

此文件名為myweb-svc1.yaml。還是直接上代碼:

1 apiVersion: v1

2 kind: Service? ?//對象是Service了哦

3 metadata:

4? ?name: myweb

5 spec:

6? ?ports:

7? ?- name: myweb-svc? ? ? ? ?//端口名稱,Service是必須指定端口名稱的

8? ? ?port: 8080? ? ? ? ? //Service的端口號

9? ? ?targetPort: 8080? ? ? ? //容器暴露的端口號

10? ? ?nodePort: 31111? ? ? ?//node的真實端口號

11? ?selector:

12? ? ?app: myweb? ? ?//Service選擇了標簽為app: myweb的pod

13? ?type: NodePort

重點在于三個端口的區別,容器有端口,Service有端口,node也有真實的端口號,這里我們將這三者關聯起來,在一會訪問的時候會看出門道。所以,我們就拿結果說話吧。

創建tomcat Service對象的結果

0f0c4211f74dab89ee097c982619e76f.png

大家可以看到,我已經創建好了名為myweb的Service。而且這個Service也已經通過selector選擇了剛才創建好的5個pod。所以我可以通過Service來訪問tomcat的服務了。我這里使用命令行來演示。

訪問服務的方式

我們可以通過兩種方式來訪問已經創建好的服務。

1. 集群內部訪問服務

我們可以通過Service IP + Service端口號的方式來從集群內部訪問已經創建好的服務,所以,我們來看看tomcat Service的IP與端口號。

da7271b075ebe6549764b1daf7b28845.png

2. 集群外部訪問服務

從集群的外部我們可以通過node IP + node端口號的方式來對服務進行訪問。pod實際上已經分在了不同的node中了,我們只用找到其中一個pod所在的node就行了。

2b6785c3430316c74226ee2038ba1547.png

部署mysql

如果你能將tomcat部署成功了,那么部署mysql就沒有什么好講的了。照前面做就行了。

創建mysql RC對象

我將此RC對象命名為mysql-rc1.yaml

直接上代碼:

1 apiVersion: v1

2 kind: ReplicationController

3 metadata:

4? ?name: mysql

5 spec:

6? ?replicas: 1

7? ?selector:

8? ? ?app: mysql

9? ?template:

10? ? ?metadata:

11? ? ? ?labels:

12? ? ? ? ?app: mysql

13? ? ?spec:

14? ? ? ? ?containers:

15? ? ? ? ?- image: img.reg.3g:15000/mysql:5.7.13

16? ? ? ? ? ?name: mysql

17? ? ? ? ? ?resources:

18? ? ? ? ? ? ?limits:

19? ? ? ? ? ? ? ?cpu: "2"

20? ? ? ? ? ? ? ?memory: 4Gi

21? ? ? ? ? ?ports:

22? ? ? ? ? ?- containerPort: 3306

23? ? ? ? ? ?env:

24? ? ? ? ? ?- name: MYSQL_ROOT_PASSWORD

25? ? ? ? ? ? ?value: "123456"

不同之處在于創建mysql的RC對象yaml文件時,注入了一個name為MYSQL_ROOT_PASSWORD的環境變量,這個是給mysql數據庫設置密碼,這個環境變量的注入是必須的,如果沒有此環境變量,雖然RC可以被創建成功,但是系統是無法啟動mysql容器的。

創建mysql RC對象的結果

0b47f8c743994a46ceae8981f4ae604c.png

創建mysql Service對象

同樣道理,mysql也需要一個訪問入口地址。創建的Service yaml文件名為mysql-svc1.yaml

還是直接上代碼

1 apiVersion: v1

2 kind: Service

3 metadata:

4? ?name: mysql

5 spec:

6? ?ports:

7? ?- name: mysql-svc

8? ? ?port: 3306

9? ? ?targetPort: 3306

10? ? ?nodePort: 31101

11? ?selector:

12? ? ?app: mysql

13? ?type: NodePort

創建mysql Service對象的結果

3183babf583f750e86e8ebe4514bd15b.png

可以看到,mysql Service對象也已經啟動成功了。

然后就可以自己訪問mysql的服務看看

本文轉自super李導51CTO博客,原文鏈接:?http://blog.51cto.com/superleedo/2050208,如需轉載請自行聯系原作者

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396347.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396347.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396347.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c# 測試運行時間毫秒級

long currentMillis (DateTime.Now.Ticks - (new DateTime(1970, 1, 1, 0, 0, 0, 0)).Ticks) / 10000;/*代碼*/long currentMillis1 (DateTime.Now.Ticks - (new DateTime(1970, 1, 1, 0, 0, 0, 0)).Ticks) / 10000;MessageBox.Show((currentMillis1 - currentMillis).ToStri…

nodejs_NodeJS歷險記

nodejsby Elliott McNary埃利奧特麥克納里(Elliott McNary) NodeJS歷險記 (Adventures in NodeJS) I built an app a couple of weeks ago after going through FreeCodeCamp’s Front-End curriculum and wanted to write an update as I head into NodeJS-land. I was final…

pytdx 獲取板塊指數_能否增加一個通過股票代碼,板塊指數代碼獲得中文名稱的接口?...

T0002/hq_cache/shex.tnfT0002/hq_cache/szex.tnf這個解碼就是。/***************************************************股票代碼列表和股票名稱T0002/hq_cache/shex.tnfT0002/hq_cache/szex.tnf***************************************************/struct TdxSymbolMap {cha…

靈動標簽調用友情鏈接

1、文字形式[e:loop{select * from [!db.pre!]enewslink where checked1 and classid1 order by myorder,20,24,0}] <li><a href"<?$bqr[lurl]?>" title"<?$bqr[lname]?>" target"_blank"><?$bqr[lname]?>&…

4-----Scrapy框架中選擇器的用法

Scrapy提取數據有自己的一套機制&#xff0c;被稱作選擇器&#xff08;selectors&#xff09;,通過特定的Xpath或者CSS表達式來選擇HTML文件的某個部分Xpath是專門在XML文件中選擇節點的語言&#xff0c;也可以用在HTML上。CSS是一門將HTML文檔樣式化語言&#xff0c;選擇器由它…

【原】Jenkins持續集成環境搭建之創建java項目的job【centos6.5 java maven git 項目】...

一、構建一個maven項目在jenkins主頁上&#xff0c;左側&#xff0c;選擇“新建”&#xff0c;然后填寫項目名稱&#xff0c;選擇“構建一個maven項目”二、Git配置保存之后&#xff0c;進入詳細配置頁面&#xff1a;這里的源碼管理&#xff1a;選擇git&#xff0c;輸入代碼的g…

linux修改java內存大小_Linux 和 windows修改java虛擬機內存大小

1、Java內存區域劃分&#xff1a; 運行時的數據區:方法區和堆(各個線程共享的內存區域)&#xff0c;程序計數器、Java虛擬機棧和本地方法棧(線程私有的) 程序計數器&#xff1a;當前線程所執行字節碼的行號指示器&#xff0c;字節碼解釋器就是通過改變計算器的值來選取下一條需…

html制作彩虹_制作彩虹

html制作彩虹by Gil Fewster吉爾弗斯特(Gil Fewster) 制作彩虹 (Making rainbows) This is a story about curiosity. It’s also about what happens when you stick a needle into your eye. If you happen to be eating a handful of grapes right this moment, maybe come…

python3 set_python3.x 基礎三:set集合

| clear(...) 清空一個集合| Remove all elements from this set.>>>set1.clear()>>>set1set()| copy(...) 影子復制&#xff0c;指向同一個內存地址| Return a shallow copy of a set. |>>> list1[3, 2, 1, 1, 2, 3, 4, 5]>>>…

Linux內核分析作業第八周

進程的切換和系統的一般執行過程 一、進程調度的時機 中斷處理過程&#xff08;包括時鐘中斷、I/O中斷、系統調用和異常&#xff09;中&#xff0c;直接調用schedule()&#xff0c;或者返回用戶態時根據need_resched標記調用schedule()&#xff1b; 內核線程可以直接調用sched…

iOS--數據存儲NSUserDefaults

2019獨角獸企業重金招聘Python工程師標準>>> 今天去面試&#xff0c;被問道NSUserDefaults的存取并手寫出來&#xff0c;一時想不起來&#xff0c;回來之后看看之前的筆記&#xff0c;稍作一些整理 NSUserDefaults是一個單例&#xff0c;在整個程序中只有一個實例對…

巨人肩膀_如何站在巨人的肩膀上

巨人肩膀“If I have seen further than others, it is by standing on the shoulders of giants.” — Isaac Newton“如果我能比其他人看到更多&#xff0c;那就是站在巨人的肩膀上。” —艾薩克牛頓 In 1676, Isaac Newton spoke of the great thinkers who came before him…

mysql 觸發器定義變量_MySQL 函數存儲過程觸發器定義簡單示例

1.變量提示NEW 是新值-- OLD 是舊值INSERT 只有NEW ----UPDATE有NEW和OLD ---DELETE只有OLD2.準備測試表(userinfo、userinfolog)use test;create table userinfo(userid int,username varchar(10),userbirthday date);create table userinfolog(logtime datetime,loginfo varc…

[EOJ439] 強制在線

Description 見EOJ439 Solution 先考慮不強制在線怎么做。 按詢問區間右端點排序&#xff0c;從左往右掃&#xff0c;維護所有后綴的答案。 如果掃到 \(a[i]\)&#xff0c;那么讓統計個數的 \(cnt[a[i]]\). 如果\(cnt[a[i]]<a[i]\)&#xff0c;那么在當前的右端點固定的情況…

大數據 就業 缺口_中國AI&大數據就業趨勢報告:平均月薪超2萬,缺口650萬人...

2019世界人工智能大會開幕式上&#xff0c;特斯拉公司聯合創始人兼首席執行官Elon Musk 和中國企業家俱樂部主席、聯合國數字合作高級別小組聯合主席馬云進行了一場“雙馬”對話。談到人工智能話題時&#xff0c;馬斯克認為&#xff0c;“未來的科技發展變化將超越我們的能力”…

Android pm 命令詳解

一、pm命令介紹與包名信息查詢 1.pm命令介紹 pm工具為包管理&#xff08;package manager&#xff09;的簡稱 可以使用pm工具來執行應用的安裝和查詢應用寶的信息、系統權限、控制應用 pm工具是Android開發與測試過程中必不可少的工具&#xff0c;shell命令格式如下&#xff1a…

開源 非開源_開源為善

開源 非開源by Michael D. Johnson邁克爾約翰遜(Michael D.Johnson) 開源為善 (Open Source for Good) We’ve spent two years coding for a cause, one nonprofit at a time. And now Free Code Camp’s pushing ahead to help organizations at scale.我們花了兩年的時間為…

mysql5.6熱升級_Mysql5.6主從熱備配置

數據庫是應用系統的核心&#xff0c;為了保證數據庫的安全采用主從熱備是很常見的方法&#xff0c;也就是主數據庫DDL、DML都將被同步到從數據庫。一、 實驗環境操作系統&#xff1a;windowsserver 2008 R2數據庫&#xff1a;mysql-advanced-5.6.21-winx64二、 準備工作1、…

InfluxDB(官方使用說明)

安裝InfluxDB OSS 此頁面提供有關安裝&#xff0c;啟動和配置InfluxDB的說明。 InfluxDB OSS安裝要求 root為了成功完成&#xff0c;需要安裝InfluxDB軟件包或具有管理員權限。 InfluxDB OSS網絡端口 InfluxDB默認使用以下網絡端口&#xff1a; TCP端口8086用于通過InfluxDB的H…

incc與oracle連接_Oracle 連接和會話的區別

連接并不是會話的同義詞&#xff0c;發現這一點時很多人都很詫異。在大多數人眼里&#xff0c;它們都是一樣的&#xff0c;但事實上并不一定如此。在一條連接上可以建立0個、一個或多個會話。各個會話是單獨而且獨立的&#xff0c;即使它們共享同一條數據庫物理連接也是如此。一…