成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

初識Kubernetes(K8s):從一個(gè)單機(jī)部署實(shí)現(xiàn)JavaWeb應(yīng)用例子開始

本文是通過yum方式安裝Kubernetes,并部署tomcat+MySQL實(shí)現(xiàn)Jave Web應(yīng)用。此應(yīng)用是JSP頁面通過JDBC訪問Mysql數(shù)據(jù)庫,只要程序正確連接到數(shù)據(jù)庫上,就會自動完成對應(yīng)的Table的創(chuàng)建與初始化數(shù)據(jù)的準(zhǔn)備工作。當(dāng)我們通過瀏覽器訪問此應(yīng)用時(shí),就會顯示一個(gè)表格的頁面,數(shù)據(jù)則來自數(shù)據(jù)庫。
初識Kubernetes(K8s):從一個(gè)單機(jī)部署實(shí)現(xiàn)Java Web應(yīng)用例子開始
此應(yīng)用需要啟動兩個(gè)容器:Web App容器和MySQL容器,并且Web App容器需要訪問MySQL容器。現(xiàn)在我們就來看看通過Kubernetes是如何實(shí)現(xiàn)Java Web應(yīng)用的。
在繼續(xù)閱讀之前,我們需要對Kubernetes有一個(gè)基本的認(rèn)識,需要了解它的原理、核心架構(gòu)、核心組件和對象、以及各組件之間的聯(lián)系等基礎(chǔ)概念,可以參考我的上一篇博文《初識Kubernetes(K8s):理論基礎(chǔ)》,https://blog.51cto.com/andyxu/2308937
系統(tǒng)環(huán)境
操作系統(tǒng):Centos 7.5 64位
IP地址:192.168.2.238

我們提供的服務(wù)有:網(wǎng)站建設(shè)、做網(wǎng)站、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、牧野ssl等。為上千多家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的牧野網(wǎng)站制作公司

一、安裝部署Kubernetes(K8s)

1、關(guān)閉Centos自帶的防火墻服務(wù)
注:Kubernetes集群之間會有大量的網(wǎng)絡(luò)通信,在一個(gè)安全的內(nèi)部網(wǎng)絡(luò)環(huán)境中建議關(guān)閉防火墻服務(wù)

[root@andyxu-test ~]# systemctl disable firewalld
[root@andyxu-test ~]# systemctl stop firewalld

2、安裝etcd和Kubernetes軟件(會自動安裝Docker軟件)

[root@andyxu-test ~]# yum -y install etcd kubernetes

注:yum方式安裝的kubernetes的版本是1.5.2
初識Kubernetes(K8s):從一個(gè)單機(jī)部署實(shí)現(xiàn)Java Web應(yīng)用例子開始
3、生成rhsm證書文件

[root@andyxu-test ~]# wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm
[root@andyxu-test ~]# rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem

注:創(chuàng)建容器時(shí)需要從redhat站點(diǎn)下載pod-infrastructure:latest鏡像,如果沒有此證書文件會報(bào)錯(cuò),Pod會一直顯示ContainerCreating狀態(tài)。
4、修改docker和kube-apiserver的配置文件
docker配置文件為/etc/sysconfig/docker,將OPTIONS的內(nèi)容修改為

OPTIONS='--selinux-enabled=false --insecure-registry gcr.io'

kube-apiserver配置文件為/etc/kubernetes/apiserver,修改KUBE_ADMISSION_CONTROL的內(nèi)容,將--admission-control參數(shù)中的ServiceAccount刪除。

KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"

5、按順序啟動所有服務(wù)

[root@andyxu-test ~]# systemctl start etcd
[root@andyxu-test ~]# systemctl start docker
[root@andyxu-test ~]# systemctl start kube-apiserver
[root@andyxu-test ~]# systemctl start kube-controller-manager
[root@andyxu-test ~]# systemctl start kube-scheduler
[root@andyxu-test ~]# systemctl start kubelet
[root@andyxu-test ~]# systemctl start kube-proxy

二、創(chuàng)建并配置mysql容器

1、創(chuàng)建mysql的Deployment定義文件
mysql-dep.yaml文件內(nèi)容如下:

apiVersion: extensions/v1beta1                  #apiserver的版本
kind: Deployment                                      #副本控制器deployment,管理pod和RS
metadata:
  name: mysql                                            #deployment的名稱,全局唯一
spec:
  replicas: 1                                                #Pod副本期待數(shù)量
  selector:
    matchLabels:                                         #定義RS的標(biāo)簽
      app: mysql                                          #符合目標(biāo)的Pod擁有此標(biāo)簽
  strategy:                                                  #定義升級的策略
    type: RollingUpdate                               #滾動升級,逐步替換的策略
  template:                                                #根據(jù)此模板創(chuàng)建Pod的副本(實(shí)例)
    metadata:
      labels:
        app: mysql                                        #Pod副本的標(biāo)簽,對應(yīng)RS的Selector
    spec:
      containers:                                          #Pod里容器的定義部分
      - name: mysql                                     #容器的名稱
        image: mysql:5.7                               #容器對應(yīng)的docker鏡像
        volumeMounts:                                #容器內(nèi)掛載點(diǎn)的定義部分
        - name: time-zone                            #容器內(nèi)掛載點(diǎn)名稱
          mountPath: /etc/localtime              #容器內(nèi)掛載點(diǎn)路徑,可以是文件或目錄
        - name: mysql-data
          mountPath: /var/lib/mysql               #容器內(nèi)mysql的數(shù)據(jù)目錄
        - name: mysql-logs
          mountPath: /var/log/mysql              #容器內(nèi)mysql的日志目錄
        ports:
        - containerPort: 3306                         #容器暴露的端口號
        env:                                                   #寫入到容器內(nèi)的環(huán)境容量
        - name: MYSQL_ROOT_PASSWORD   #定義了一個(gè)mysql的root密碼的變量
          value: "123456"
      volumes:                                             #本地需要掛載到容器里的數(shù)據(jù)卷定義部分
      - name: time-zone                              #數(shù)據(jù)卷名稱,需要與容器內(nèi)掛載點(diǎn)名稱一致
        hostPath:
          path: /etc/localtime                        #掛載到容器里的路徑,將localtime文件掛載到容器里,可讓容器使用本地的時(shí)區(qū)
      - name: mysql-data
        hostPath:
          path: /data/mysql/data                   #本地存放mysql數(shù)據(jù)的目錄
      - name: mysql-logs
        hostPath:
          path: /data/mysql/logs                    #本地存入mysql日志的目錄
  • apiVersion:定義使用apiserver的哪個(gè)版本,可通過kubectl api-versions命令查看apiserver有哪些版本;
  • kind:用來表明此資源對象的類型,比如這里的值為“Deployment”,表示這是一個(gè)deployment;
  • spec:RS相關(guān)屬性定義,spec.selector是RS的Pod標(biāo)簽(Label)選擇器,即監(jiān)控和管理擁有這些標(biāo)簽的Pod實(shí)例,確保當(dāng)前集群上始終有且僅有replicas個(gè)Pod實(shí)例在運(yùn)行,這里設(shè)置replicas=1表示只能運(yùn)行一個(gè)Mysql Pod實(shí)例。
  • spec.strategy:定義Pod的升級方案,Recreate表示刪除所有已存在的Pod,重新創(chuàng)建新的;RollingUpdate表示滾動升級,逐步替換的策略,滾動升級時(shí)支持更多的附加參數(shù),例如設(shè)置最大不可用Pod數(shù)量,最小升級間隔時(shí)間等等。
  • spec.template:當(dāng)集群中運(yùn)行的Pod數(shù)量小于replicas時(shí),RS會根據(jù)spec.template中定義的Pod模板來生成一個(gè)新的Pod實(shí)例,spec.template.metadata.labels指定了該P(yáng)od的標(biāo)簽,需要特別注意的是,這里的labels必須匹配之前的spec.selector。
  • spec.template.spec.containers:容器的定義部分,包括容器的名稱、使用的docker鏡像、掛載數(shù)據(jù)卷、服務(wù)的端口號、變量等內(nèi)容。
  • spec.template.spec.volumes:需要掛載到容器里的本地?cái)?shù)據(jù)卷的定義部分,數(shù)據(jù)卷的名稱要與容器內(nèi)掛載點(diǎn)的名稱一致,path定義本地的數(shù)據(jù)卷路徑。

2、創(chuàng)建deployment、RS、Pod和容器
創(chuàng)建過程需要先下載鏡像,時(shí)間會比較久,可喝杯茶撩撩旁邊的妹子,哈哈,請耐心等待

[root@andyxu-test ~]# kubectl create -f mysql-dep.yaml
deployment "mysql" created

3、查看創(chuàng)建好的deployment運(yùn)行情況

[root@andyxu-test ~]# kubectl get deployment 
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
mysql     1         1         1            1           8s

注:都是1表示運(yùn)行正常
4、查看ReplicaSet(RS)的運(yùn)行情況

[root@andyxu-test ~]# kubectl get rs
NAME               DESIRED   CURRENT   READY     AGE
mysql-3238461207   1         1         1         6m

注:都是1表示運(yùn)行正常
5、查看Pod的運(yùn)行情況

[root@andyxu-test ~]# kubectl get pod
NAME                     READY     STATUS    RESTARTS   AGE
mysql-3238461207-vvwt8   1/1       Running   0          56m

注:READY的值是1/1,并且STATUS的值是Running,表示運(yùn)行正常
由于Pod的創(chuàng)建需要花費(fèi)一些時(shí)間,在還沒有創(chuàng)建好容器時(shí),STATUS的狀態(tài)會是ContainerCreating,表示正在創(chuàng)建容器,這時(shí)只需要等待。Pod創(chuàng)建好后,STATUS的狀態(tài)會是Running,這時(shí)可以通過docker ps命令查看容器運(yùn)行的情況。
6、查看容器的運(yùn)行情況

[root@andyxu-test ~]# docker ps
CONTAINER ID        IMAGE                                                        COMMAND                  CREATED             STATUS              PORTS               NAMES
5252cd76009a        mysql:5.7                                                    "docker-entrypoint..."   55 minutes ago      Up 55 minutes                           k8s_mysql.23f88726_mysql-3238461207-vvwt8_default_72d7bff7-d81c-11e8-a729-000c29dabb02_6b15dcfc
f026e79ddad9        registry.access.redhat.com/rhel7/pod-infrastructure:latest   "/usr/bin/pod"           55 minutes ago      Up 55 minutes                           k8s_POD.1d520ba5_mysql-3238461207-vvwt8_default_72d7bff7-d81c-11e8-a729-000c29dabb02_668a091e

7、查看Pod里容器的時(shí)間,檢查時(shí)間是否與本地時(shí)間一致

[root@andyxu-test ~]# kubectl exec mysql-3238461207-vvwt8 date
Thu Oct 25 15:06:15 CST 2018

注:exec后面跟pod的名稱
8、創(chuàng)建mysql的service定義文件
mysql-svc.yaml文件內(nèi)容如下:

apiVersion: v1
kind: Service     #表示Kubernetes Service
metadata:
  name: mysql   #Service的名稱
spec:
  ports:
    - port: 3306   #Service提供服務(wù)的端口號
  selector:
    app: mysql    #Service對應(yīng)的Pod的標(biāo)簽
  • metadata.name:Service的服務(wù)名稱
  • spec.ports:Service提供的服務(wù)端口號,對應(yīng)容器的服務(wù)端口號
  • spec.selector:確定哪些Pod副本(實(shí)例)對應(yīng)到此Service

9、創(chuàng)建Service

[root@andyxu-test ~]# kubectl create -f mysql-svc.yaml 
service "mysql" created

10、查看Service的運(yùn)行情況

[root@andyxu-test ~]# kubectl get svc
NAME         CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
kubernetes   10.254.0.1      <none>        443/TCP    4h
mysql        10.254.144.64   <none>        3306/TCP   57s

kubernetes會給Service分配一個(gè)Cluster IP,這是個(gè)虛擬IP地址,此后集群中的其他新創(chuàng)建的Pod就可以通過此Cluster IP+端口號的方式來連接和訪問mysql服務(wù)了。

三、創(chuàng)建并配置tomcat容器

1、創(chuàng)建tomcat的Deployment定義文件
myweb-dep.yaml文件的內(nèi)容如下:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: myweb
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myweb
  strategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: myweb
    spec:
      containers:
      - name: myweb
        image: kubeguide/tomcat-app:v1
        volumeMounts:
        - name: time-zone
          mountPath: /etc/localtime
        - name: tomcat-logs
          mountPath: /usr/local/tomcat/logs
        ports:
        - containerPort: 8080
        env:
        - name: MYSQL_SERVICE_HOST
          value: '10.254.144.64'               #此處為mysql服務(wù)的Cluster IP
        - name: MYSQL_SERVICE_PORT
          value: '3306'
      volumes:
      - name: time-zone
        hostPath:
          path: /etc/localtime
      - name: tomcat-logs
        hostPath:
          path: /data/tomcat/logs

2、創(chuàng)建tomcat的deployment、RS、Pod和容器

[root@andyxu-test ~]# kubectl create -f myweb-dep.yaml 
deployment "myweb" created

創(chuàng)建過程比較久,請耐心等待,pod的STATUS狀態(tài)為Running時(shí)表示創(chuàng)建成功。
3、創(chuàng)建tomcat的Service定義文件
myweb-svc.yaml文件的內(nèi)容如下:

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

此Service開啟了NodePort方式的外網(wǎng)訪問模式,端口為30001,此端口會映射到tomcat容器的8080端口上。
4、創(chuàng)建Service

[root@andyxu-test ~]# kubectl create -f myweb-svc.yaml 
service "myweb" created

5、查看Service的運(yùn)行情況

[root@andyxu-test ~]# kubectl get svc
NAME         CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
kubernetes   10.254.0.1      <none>        443/TCP          5h
mysql        10.254.144.64   <none>        3306/TCP         24m
myweb        10.254.246.56   <nodes>       8080:30001/TCP   39s

6、可使用curl命令測試tomcat服務(wù)是否能正常訪問

[root@andyxu-test ~]# curl http://192.168.2.238:30001

四、通過瀏覽器訪問網(wǎng)頁

1、如果30001端口不通的話,重新啟動、關(guān)閉firewalld防火墻

[root@andyxu-test ~]# systemctl start firewalld
[root@andyxu-test ~]# systemctl stop firewalld

注:因?yàn)閗ubernetes會在iptables里添加一些策略,需要再重新開啟關(guān)閉防火墻才會關(guān)閉掉這些策略。
2、通過瀏覽器訪問http://192.168.2.238:30001/demo/
初識Kubernetes(K8s):從一個(gè)單機(jī)部署實(shí)現(xiàn)Java Web應(yīng)用例子開始
點(diǎn)擊“Add...”,添加一條記錄并提交
初識Kubernetes(K8s):從一個(gè)單機(jī)部署實(shí)現(xiàn)Java Web應(yīng)用例子開始
提交以后,數(shù)據(jù)就被寫入mysql數(shù)據(jù)庫里了。
3、登陸mysql數(shù)據(jù)庫驗(yàn)證

[root@andyxu-test ~]# docker exec -it 5252cd76009a /bin/bash
root@mysql-3238461207-vvwt8:/# mysql -uroot -p123456
mysql> use HPE_APP
mysql> select * from T_USERS;

初識Kubernetes(K8s):從一個(gè)單機(jī)部署實(shí)現(xiàn)Java Web應(yīng)用例子開始
我們可以繼續(xù)研究下這個(gè)例子,比如:

  • 研究RS、Service等文件的格式。
  • 熟悉kubectl的子命令。
  • 手工停止某個(gè)Service對應(yīng)的容器,觀察有什么現(xiàn)象發(fā)生。
  • 修改Deployment文件,改變pod副本的數(shù)量,重新創(chuàng)建,觀察結(jié)果。

此例子來源于《Kubernetes權(quán)威指南(第2版)》,我做了一些修改,以及報(bào)錯(cuò)的處理,并且使用了Deployment來創(chuàng)建。

文章名稱:初識Kubernetes(K8s):從一個(gè)單機(jī)部署實(shí)現(xiàn)JavaWeb應(yīng)用例子開始
鏈接地址:http://jinyejixie.com/article28/jjidcp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、標(biāo)簽優(yōu)化微信小程序、品牌網(wǎng)站建設(shè)、網(wǎng)站營銷、網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
汉阴县| 台南市| 武宁县| 永嘉县| 阿拉善右旗| 奎屯市| 桃园县| 汉中市| 大悟县| 磴口县| 察哈| 安仁县| 海安县| 和平区| 犍为县| 禹城市| 高邑县| 宣恩县| 五家渠市| 兴文县| 静乐县| 十堰市| 昭通市| 洮南市| 广德县| 娄底市| 饶平县| 石屏县| 玉屏| 丰宁| 包头市| 辽阳市| 东光县| 乡宁县| 肃北| 本溪| 琼中| 威远县| 怀化市| 闽清县| 观塘区|