116.k8s介紹、k8s搭建一個應用(mysql+tomcat)

k8s介紹html

k8s搭建一個應用(mysql+tomcat)node

 

 

kubetnetes介紹python

官網 https://kubernetes.io/mysql

Kubernetes也就是k8slinux

Kubernetes是一個開源系統,它主要用來自動部署、擴容縮容和管理容器應用。web

它將諸多應用的容器分爲若干個邏輯單元以便於管理和發現。Kubernetes擁有着在kubernetes中,service是核心,咱們並不須要太多關注kubernetes裏面是怎麼工做的,咱們只須要關心它給咱們提供什麼service。sql

就像docker容器能夠提供一個mysqld的服務、web服務等。docker

它須要擁有一個惟一的名字、有ip:port對外提供服務。數據庫

提供service的是容器,爲了保證service的高可用,提供service的容器不能只有一個,須要一組。這一組容器咱們把它叫作pod。json

爲了實現service和pod之間的關聯,又有了標籤(label)的概念,咱們把功能相同的pod設定爲同一個標籤,好比,能夠把全部提供mysql服務的pod貼上標籤name=mysql,這樣mysql service要做用於全部包含name=mysql標籤的pod上。

pod運行在Node上,Node能夠是一臺物理機,也能夠是虛擬機,一般一個Node上會運行幾百個pod。每一個pod裏運行着一個特殊的容器,叫作Pause,其餘容器叫作業務容器,業務容器共享Pause容器的網絡棧和Volume掛載卷,所以同一個pod內的業務容器之間的通訊和數據交換更爲高效。

在集羣管理方面,kubernetes將集羣中的機器劃分爲一個master節點和一羣工做節點Node,其中master上運行着kubeapiserver、kube-controller-manager、kube-scheduler,它們實現了資源管理、pod調度、彈性伸縮、安全控制、系統監

控、糾錯等功能。Node是工做節點,運行應用程序,提供服務。Node上的最小單元是pod,Node上運行着kubernetesd的kubelet、kube-proxy服務進程,它們負責pod的建立、啓動、監控、重啓、銷燬,以及實現負載均衡。

經過一組圖瞭解kubernetes各個元素的關係:

 

 

 

Google高負載生產環境的15年經驗,並結合了社區的優秀思想和實踐。

擴容和升級須要一個關鍵的東西,Replication controller(RC),RC須要包含3個關鍵信息:

1)目標pod的定義

2)目標pod須要運行的副本數量(replicas)

3)要監控的目標pod的標籤(Label)

工做過程:RC裏定義好3個指標,kubernetes會根據RC定義的Label帥選出對應的pod,並實時監控其狀態和數量,當實例數量少於定義的副本數(replicas),則會根據RC定義的pod模版來建立新的pod,而後將此pod調度到合適的Node上啓動並運行。

可理解爲pod的高可用,是rc來定義的(調度的)。可調度到其餘正常的node上

該過程徹底自動化,無需人工干涉。

 

 

 

 

 

從一個例子開始:

webapp(tomcat) + mysql

安裝kubernetes #此處只是單機安裝kubernetes,並非安裝集羣

準備一臺centos7.5以上的版本

#cat /etc/redhad-release 來看一下版本。若是不是 yum update升級一下

1) 關閉firewalld 和 selinux

systemctl stop firewalld

systemctl disable firewalld

setenforce 0

2)安裝etcd和kubernetes

yum install -y etcd kubernetes

#etcd是用來存儲kubernetes裏的集羣文件的(存配置文件配置的數據庫)

#安裝的時候報錯,與docker相關的衝突。分別刪除提示的那兩個docker相關的:

yum remove -y docker-ce.x86_64 0:18.03.0.ce-1.el7.centos

yum remove -y docker-ce*

3)修改配置文件

vi /etc/sysconfig/docker

將--selinux-enabled 改成 --selinux-enabled=false --insecure-registry gcr.io

vi /etc/kubernetes/apiserver

把--admission_control參數中的ServiceAccount刪除

4)準備工做

yum install python-rhsm-certificates

若是提示python-rhsm-certificates-1.19.10-1.el7_4.x86_64 被已安裝的 subscription-manager-rhsm-certificates-

1.20.11-1.el7.centos.x86_64 取代,就要執行下面兩步驟:

wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm

rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm |cpio -iv --to-stdout ./etc/rhsm/ca/redhatuep.pem > /etc/rhsm/ca/redhat-uep.pem

配置docker加速器

vi /etc/docker/daemon.json//加入以下內容

{

"registry-mirrors": ["https://dhq9bx4f.mirror.aliyuncs.com"]

}

5)按順序啓動全部服務

for s in etcd docker kube-apiserver kube-controller-manager kube-scheduler kubelet kube-proxy

do

systemctl start $s

done

6)建立一個rc文件

vim mysql-rc.yaml #內容以下 #需注意空格

apiVersion: v1

kind: ReplicationController #副本控制器RC

metadata:

name: mysql #RC的名稱,全局惟一

spec:

replicas: 1 #Pod副本的期待數量,若是這爲10,那麼最終他們造成了一個service

selector:

app: mysql #符合目標的Pod擁有此標籤

template: #根據此模板建立Pod的副本(實例)

metadata:

labels:

app: mysql #Pod副本擁有的標籤,對應RC的Selector

spec:

containers: #Pod內容器的定義部分

- name: mysql #容器的名稱

image: mysql:5.6 #容器對應的Docker image。此處由於這個實驗太老了,因此加了個5.6版本的

ports:

- containerPort: 3306 #容器應用監聽的端口號

env: #注入容器內的環境變量

- name: MYSQL_ROOT_PASSWORD

value: "123456"

·················rc文件內容到此結束·································

docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest #不用執行這兩步會自動拉取鏡像。這兩部若是手動執行,下面一步建立(create)以後,就會直接Running了。就不用等了

docker pull mysql:5.6

kubectl create -f mysql-rc.yaml #上一步定義好rc文件,就能夠去建立rc了

kubectl get rc #可查看rc都有哪些。就是把全部的rc都get出來

[root@dazuoye02-01 ~]# kubectl get rc

NAME DESIRED CURRENT READY AGE

mysql 1 1 1 9m #拉取完以後,get rc的時候會顯示這個

kubectl get pods #經過pod看他的狀態。就是把全部的pod都get出來

[root@dazuoye02-01 ~]# kubectl get pod

NAME READY STATUS RESTARTS AGE

mysql-cqg9w 1/1 Running 0 7m #狀態爲Running的時候就表明能夠了

 

7)建立一個svc文件

vim mysql-svc.yaml #注意空格

apiVersion: v1

kind: Service

metadata:

name: mysql

spec:

ports:

- port: 3306

selector:

app: mysql

·················svc文件內容到此結束·································

kubectl create -f mysql-svc.yaml

kubectl get svc #下面會出現mysql

[root@dazuoye02-01 ~]# kubectl get svc

NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE

kubernetes 10.254.0.1 <none> 443/TCP 22m

mysql 10.254.215.180 <none> 3306/TCP 15s #這個ip就是sercice的ip,經過這個ip和prot就能夠訪問這個mysql了

mysql -uroot -p123456 -h10.254.215.180 #可登錄mysql

8)建立web rc文件

vim web-rc.yaml #注意空格

kind: ReplicationController

metadata:

name: myweb

spec:

replicas: 1

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: '10.254.215.180' #這裏的IP須要經過kubect get svc 查看mysql的cluster ip

- name: MYSQL_SERVICE_PORT

value: '3306'

·················web文件內容到此結束·································

kubectl create -f web-rc.yaml

9)建立web svc文件

vim web-svc.yamly

kind: Service

metadata:

name: myweb

spec:

type: NodePort

ports:

- port: 8080

nodePort: 30001 #意思是在ens33的ip上去訪問mysql服務,因此指定一個監聽端口(由於上面的mysql不是要用哪一個指定的ip去訪問嗎),這個端口最低不能超過30000

selector:

app: myweb

·················web文件內容到此結束·································

kubectl create -f web-svc.yaml #建立以前get pod查看是否已啓動

10)訪問

iptables -P FORWARD ACCEPT #把forward規則打開

curl 本機ip:30001/demo/ 或瀏覽器

以上,能夠點擊add去增長一行數據

去mysql看看有沒有這行數據:

mysql -uroot -p123456 -h10.254.215.180

show databases;

use HPE_APP

show tables;

select from * T_USERS;

+----+-----------+-------+

| ID | USER_NAME | LEVEL |

+----+-----------+-------+

| 1 | me | 100 |

| 2 | our team | 100 |

| 3 | HPE | 100 |

| 4 | teacher | 100 |

| 5 | docker | 100 |

| 6 | google | 100 |

| 7 | axin | 100 | #這就是剛剛在瀏覽器界面加的一行數據

+----+-----------+-------+

 

問題

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

http://www.javashuo.com/article/p-rebchjwf-eq.html

https://blog.csdn.net/d7185540/article/details/80868816

 

 

 

總結:

kebuctl create -f XXX #-f後面跟的是文件名。能夠經過rc文件建立rc,經過service(svc)文件建立一個service(svc)

kebuctl get pod #查看全部的pod

kubectl get svc #查看全部的sercive

kubectl get rc #查看所的rc

相關文章
相關標籤/搜索