欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Kubernetes和Docke實(shí)現(xiàn)留言簿案例

 更新時(shí)間:2016年10月21日 14:22:27   作者:opensure  
這篇文章主要介紹了基于Kubernetes和Docke實(shí)現(xiàn)留言簿案例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

一、介紹

本案例基于Kubernetes和Docker,其中包括
1、web前端
2、redis master
3、redis slave
其中web前端通過(guò)javascript redis api和redis master交互

kubernetes體系架構(gòu)

二、配置

0、先決條件
Kubernetes 集群

1、啟動(dòng)redis master
使用replication controller確保只有一個(gè)pod在運(yùn)行(當(dāng)某個(gè)節(jié)點(diǎn)down了,rc會(huì)在另一個(gè)健康的node啟動(dòng)redis master),但可能會(huì)有數(shù)據(jù)丟失。

[root@centos1 example]# kubectl create -f redis-master-controller.json 
replicationcontrollers/redis-master
[root@centos1 example]# kubectl get rc
CONTROLLER   CONTAINER(S)  IMAGE(S)  SELECTOR      REPLICAS
redis-master  master     redis   name=redis-master  1

驗(yàn)證master運(yùn)行成功,如下展示了pod運(yùn)行在centos2/192.168.1.112這臺(tái)機(jī)器上   

[root@centos1 example]# kubectl get pods
POD         IP      CONTAINER(S)  IMAGE(S)  HOST          LABELS       STATUS  CREATED   MESSAGE
redis-master-svar7  172.17.0.9               centos2/192.168.1.112  name=redis-master  Running  55 seconds  
                 master     redis                         Running  55 seconds  

SSH到centos2/192.168.1.112查看docker狀態(tài)

[root@centos2 yum.repos.d]# docker ps
CONTAINER ID    IMAGE                 COMMAND        CREATED       STATUS       PORTS        NAMES
91689ce56668    redis:latest              "/entrypoint.sh redi  3 minutes ago    Up 3 minutes              k8s_master.52732b08_redis-master-svar7_default_5b6d5485-1894-11e5-b3ad-000c293c8c19_97e79b7b  
38c3180813c3    gcr.io/google_containers/pause:0.8.0  "/pause"        3 minutes ago    Up 3 minutes              k8s_POD.49eee8c2_redis-master-svar7_default_5b6d5485-1894-11e5-b3ad-000c293c8c19_298e038f   

注意:kubectl create執(zhí)行后,如果鏡像不存在,會(huì)執(zhí)行docker pull,根據(jù)網(wǎng)絡(luò)情況,下載中的pods 在kubertnetes UI上會(huì)顯示pending狀態(tài)

2、啟動(dòng)master service
一個(gè)kubernetes service會(huì)對(duì)一個(gè)或多個(gè)container進(jìn)行負(fù)載均衡,這是通過(guò)我們上面redis-master中定義的labels元數(shù)據(jù)實(shí)現(xiàn)的,值得注意的是,在redis中只有一個(gè)master,但是我們依然為它創(chuàng)建一個(gè)service,這是因?yàn)檫@樣我們就能使用一個(gè)elastic IP來(lái)路由到具體某一個(gè)master。
kubernetes集群中的service是通過(guò)container中的環(huán)境變量實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)的,service基于pod label實(shí)現(xiàn)container的負(fù)載均衡。
在第一步中創(chuàng)建的pod包含了一個(gè)label“name=redis-master”,service的selector字段決定了service將流量轉(zhuǎn)發(fā)給哪個(gè)pod,port和targetPort信息定義了service proxy運(yùn)行在什么端口。

[root@centos1 example]# kubectl create -f redis-master-service.json 
services/redis-master
[root@centos1 example]# kubectl get services
NAME      LABELS                  SELECTOR      IP(S)      PORT(S)
redis-master  name=redis-master             name=redis-master  10.254.154.90  6379/TCP

上面的運(yùn)行成功后,所有pods都能發(fā)現(xiàn)redis master運(yùn)行在6379端口,從salve到master流量走向會(huì)有以下兩步:
1、一個(gè)redis slave會(huì)連接到redis master service的port上
2、流量會(huì)從service節(jié)點(diǎn)上的port到targetPort
如果targetPort未指定,默認(rèn)和port一致

3、啟動(dòng)replicated slave pod
雖然redis master是一個(gè)單獨(dú)的pod,redis slaves是一個(gè)replicated pod,在Kubernetes中,一個(gè)Replication Controller負(fù)責(zé)管理一個(gè)replicated pod的多個(gè)實(shí)例,RC會(huì)自動(dòng)拉起down掉的replica(可以通過(guò)殺死docker 進(jìn)程方式簡(jiǎn)單測(cè)試)

[root@centos1 example]# kubectl create -f redis-slave-controller.json 
replicationcontrollers/redis-slave
[root@centos1 example]# kubectl get rc
CONTROLLER   CONTAINER(S)  IMAGE(S)          SELECTOR      REPLICAS
redis-master  master     redis            name=redis-master  1
redis-slave  slave     kubernetes/redis-slave:v2  name=redis-slave  2
[root@centos1 example]# kubectl get pods
POD         IP      CONTAINER(S)  IMAGE(S)          HOST          LABELS       STATUS  CREATED   MESSAGE
redis-master-svar7  172.17.0.9                        centos2/192.168.1.112  name=redis-master  Running  41 minutes  
                  master     redis                                  Running  41 minutes  
redis-slave-31tkb  172.17.0.10                       centos2/192.168.1.112  name=redis-slave  Running  29 seconds  
                  slave     kubernetes/redis-slave:v2                        Running  28 seconds  
redis-slave-uk8nu  172.17.0.11                       centos2/192.168.1.112  name=redis-slave  Running  29 seconds  
                  slave     kubernetes/redis-slave:v2                        Running  28 seconds  

可以看到一個(gè)master pod和兩個(gè)slave pod

4、啟動(dòng)slave service
和master一樣,我們希望有一個(gè)代理服務(wù)連接到redis slave,除了服務(wù)發(fā)現(xiàn)之外,slave service還為web app client提供了透明代理。
這次service 的selector是name=redis-slave,我們可以方便的使用kubectl get services -l "label=value"命令來(lái)定位這些服務(wù)

[root@centos1 example]# kubectl create -f redis-slave-service.json 
services/redis-slave
[root@centos1 example]# kubectl get services
NAME      LABELS                  SELECTOR      IP(S)      PORT(S)
redis-master  name=redis-master             name=redis-master  10.254.154.90  6379/TCP
redis-slave   name=redis-slave             name=redis-slave  10.254.159.145  6379/TCP

5、創(chuàng)建frontend pod
這是一個(gè)簡(jiǎn)單的PHP 服務(wù),用來(lái)和master service(寫(xiě)請(qǐng)求)或slave service(讀請(qǐng)求)交互

[root@centos1 example]# kubectl create -f frontend-controller.json 
replicationcontrollers/frontend
[root@centos1 example]# kubectl get rc
CONTROLLER   CONTAINER(S)  IMAGE(S)                  SELECTOR      REPLICAS
frontend    php-redis   kubernetes/example-guestbook-php-redis:v2  name=frontend    3
redis-master  master     redis                    name=redis-master  1
redis-slave  slave     kubernetes/redis-slave:v2          name=redis-slave  2

運(yùn)行成功后,查看當(dāng)前pod運(yùn)行狀態(tài)

[root@centos1 example]# kubectl get pods
POD         IP      CONTAINER(S)  IMAGE(S)                  HOST          LABELS       STATUS  CREATED   MESSAGE
frontend-fr5z1    172.17.0.13                               centos2/192.168.1.112  name=frontend    Running  2 minutes  
                  php-redis   kubernetes/example-guestbook-php-redis:v2                        Running  2 minutes  
frontend-gjx3t    172.17.0.14                               centos2/192.168.1.112  name=frontend    Running  2 minutes  
                  php-redis   kubernetes/example-guestbook-php-redis:v2                        Running  2 minutes  
frontend-v608r    172.17.0.12                               centos2/192.168.1.112  name=frontend    Running  2 minutes  
                  php-redis   kubernetes/example-guestbook-php-redis:v2                        Running  2 minutes  
redis-master-svar7  172.17.0.9                                centos2/192.168.1.112  name=redis-master  Running  53 minutes  
                  master     redis                                          Running  53 minutes  
redis-slave-31tkb  172.17.0.10                               centos2/192.168.1.112  name=redis-slave  Running  12 minutes  
                  slave     kubernetes/redis-slave:v2                                Running  12 minutes  
redis-slave-uk8nu  172.17.0.11                               centos2/192.168.1.112  name=redis-slave  Running  12 minutes  
                  slave     kubernetes/redis-slave:v2                                Running  12 minutes  

可以看到一個(gè)redis master,兩個(gè)redis slave和三個(gè)frontend pods

6、創(chuàng)建guestbook service
和其他service一樣,你可以創(chuàng)建一個(gè)service管理frontend pods

[root@centos1 example]# kubectl create -f frontend-service.json 
services/frontend
[root@centos1 example]# kubectl get services
NAME      LABELS                  SELECTOR      IP(S)      PORT(S)
frontend    name=frontend               name=frontend    10.254.154.111  80/TCP
redis-master  name=redis-master             name=redis-master  10.254.154.90  6379/TCP
redis-slave   name=redis-slave             name=redis-slave  10.254.159.145  6379/TCP

我們可以通過(guò)frontend service(10.254.154.111)訪問(wèn)pods,但是這個(gè)IP明顯是無(wú)法在外部訪問(wèn)的,下一節(jié)講解如何在外部網(wǎng)絡(luò)訪問(wèn)guestbook

7、外部網(wǎng)絡(luò)訪問(wèn)guestbook
kubernetes 支持兩種訪問(wèn)暴露一個(gè)服務(wù)到外部IP地址NodePorts 和LoadBalancers,另外可以查看防火墻,找到service對(duì)應(yīng)的端口,如下

[root@centos1 example]# kubectl get pods,services
POD         IP      CONTAINER(S)  IMAGE(S)                  HOST          LABELS       STATUS  CREATED     MESSAGE
frontend-fr5z1    172.17.0.13                               centos2/192.168.1.112  name=frontend    Running  22 minutes   
                  php-redis   kubernetes/example-guestbook-php-redis:v2                        Running  22 minutes   
frontend-gjx3t    172.17.0.14                               centos2/192.168.1.112  name=frontend    Running  22 minutes   
                  php-redis   kubernetes/example-guestbook-php-redis:v2                        Running  22 minutes   
frontend-v608r    172.17.0.12                               centos2/192.168.1.112  name=frontend    Running  22 minutes   
                  php-redis   kubernetes/example-guestbook-php-redis:v2                        Running  22 minutes   
redis-master-svar7  172.17.0.9                                centos2/192.168.1.112  name=redis-master  Running  About an hour  
                  master     redis                                          Running  About an hour  
redis-slave-31tkb  172.17.0.10                               centos2/192.168.1.112  name=redis-slave  Running  32 minutes   
                  slave     kubernetes/redis-slave:v2                                Running  32 minutes   
redis-slave-uk8nu  172.17.0.11                               centos2/192.168.1.112  name=redis-slave  Running  32 minutes   
                  slave     kubernetes/redis-slave:v2                                Running  32 minutes   
NAME      LABELS                  SELECTOR      IP(S)      PORT(S)
frontend    name=frontend               name=frontend    10.254.154.111  80/TCP
kubernetes   component=apiserver,provider=kubernetes  <none>       10.254.0.2    443/TCP
kubernetes-ro  component=apiserver,provider=kubernetes  <none>       10.254.0.1    80/TCP
redis-master  name=redis-master             name=redis-master  10.254.154.90  6379/TCP
redis-slave   name=redis-slave             name=redis-slave  10.254.159.145  6379/TCP
[root@centos1 example]# kubectl get services
NAME      LABELS                  SELECTOR      IP(S)      PORT(S)
frontend    name=frontend               name=frontend    10.254.154.111  80/TCP
kubernetes   component=apiserver,provider=kubernetes  <none>       10.254.0.2    443/TCP
kubernetes-ro  component=apiserver,provider=kubernetes  <none>       10.254.0.1    80/TCP
redis-master  name=redis-master             name=redis-master  10.254.154.90  6379/TCP
redis-slave   name=redis-slave             name=redis-slave  10.254.159.145  6379/TCP

發(fā)現(xiàn)redis-master是在10.254.154.90上,登錄到centos2上,執(zhí)行iptables-save,發(fā)現(xiàn)其中有這樣一條規(guī)則

復(fù)制代碼 代碼如下:
-A KUBE-PORTALS-HOST -d 10.254.154.90/32 -p tcp -m comment --comment "default/redis-master:" -m tcp --dport 6379 -j DNAT --to-destination 192.168.1.112:49038

說(shuō)明,centos2本機(jī)的49038端口映射到master container內(nèi)的6379了,當(dāng)然我們就能執(zhí)行在本機(jī)訪問(wèn)redis了

[root@centos2 yum.repos.d]# redis-cli -p 49038
127.0.0.1:49038> set a b
OK
127.0.0.1:49038> get a
"b"

8、使用curl簡(jiǎn)單測(cè)試

提交數(shù)據(jù)

復(fù)制代碼 代碼如下:
curl "localhost:8000/index.php?cmd=set&key=messages&value=jay_sais_hi"

查詢數(shù)據(jù)
復(fù)制代碼 代碼如下:
curl "localhost:8000/index.php?cmd=get&key=messages"

附本案例用到的6個(gè).json文件
1、redis-master-controller.json

{
  "kind":"ReplicationController",
  "apiVersion":"v1beta3",
  "metadata":{
   "name":"redis-master",
   "labels":{
     "name":"redis-master"
   }
  },
  "spec":{
   "replicas":1,
   "selector":{
     "name":"redis-master"
   },
   "template":{
     "metadata":{
      "labels":{
        "name":"redis-master"
      }
     },
     "spec":{
      "containers":[
        {
         "name":"master",
         "image":"redis",
         "ports":[
           {
            "containerPort":6379
           }
         ]
        }
      ]
     }
   }
  }
}

2、redis-master-service.json

{
  "kind":"Service",
  "apiVersion":"v1beta3",
  "metadata":{
   "name":"redis-master",
   "labels":{
     "name":"redis-master"
   }
  },
  "spec":{
   "ports": [
    {
     "port":6379,
     "targetPort":6379
    }
   ],
   "selector":{
     "name":"redis-master"
   }
  }
}

3、redis-slave-controller.json

{
  "kind":"ReplicationController",
  "apiVersion":"v1beta3",
  "metadata":{
   "name":"redis-slave",
   "labels":{
     "name":"redis-slave"
   }
  },
  "spec":{
   "replicas":2,
   "selector":{
     "name":"redis-slave"
   },
   "template":{
     "metadata":{
      "labels":{
        "name":"redis-slave"
      }
     },
     "spec":{
      "containers":[
        {
         "name":"slave",
         "image":"kubernetes/redis-slave:v2",
         "ports":[
           {
            "containerPort":6379
           }
         ]
        }
      ]
     }
   }
  }
}

4、redis-slave-service.json

{
  "kind":"Service",
  "apiVersion":"v1beta3",
  "metadata":{
   "name":"redis-slave",
   "labels":{
     "name":"redis-slave"
   }
  },
  "spec":{
   "ports": [
    {
     "port":6379
    }
   ],
   "selector":{
     "name":"redis-slave"
   }
  }
}

5、frontend-controller.json

{
  "kind":"ReplicationController",
  "apiVersion":"v1beta3",
  "metadata":{
   "name":"frontend",
   "labels":{
     "name":"frontend"
   }
  },
  "spec":{
   "replicas":3,
   "selector":{
     "name":"frontend"
   },
   "template":{
     "metadata":{
      "labels":{
        "name":"frontend"
      }
     },
     "spec":{
      "containers":[
        {
         "name":"php-redis",
         "image":"kubernetes/example-guestbook-php-redis:v2",
         "ports":[
           {
            "containerPort":80
           }
         ]
        }
      ]
     }
   }
  }
}

6、frontend-service.json

{
  "kind":"Service",
  "apiVersion":"v1beta3",
  "metadata":{
   "name":"frontend",
   "labels":{
     "name":"frontend"
   }
  },
  "spec":{
   "ports": [
    {
     "port":80
    }
   ],
   "selector":{
     "name":"frontend"
   }
  }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • docker安裝elasticsearch和kibana的方法步驟

    docker安裝elasticsearch和kibana的方法步驟

    這篇文章主要介紹了docker安裝elasticsearch和kibana的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • pod污點(diǎn)taint?與容忍度tolerations詳解

    pod污點(diǎn)taint?與容忍度tolerations詳解

    這篇文章主要為大家介紹了pod污點(diǎn)taint與容忍度tolerations示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Docker常用命令詳解

    Docker常用命令詳解

    這篇文章主要介紹了Docker常用命令詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Docker安裝配置Redis鏡像的實(shí)現(xiàn)步驟

    Docker安裝配置Redis鏡像的實(shí)現(xiàn)步驟

    Redis是一個(gè)由Salvatore Sanfilippo寫(xiě)的key-value存儲(chǔ)系統(tǒng),是跨平臺(tái)的非關(guān)系型數(shù)據(jù)庫(kù)。Redis 是一個(gè)開(kāi)源的使用 ANSI C 語(yǔ)言編寫(xiě)、遵守 BSD 協(xié)議、支持網(wǎng)絡(luò)、可基于內(nèi)存、分布式、可選持久性的鍵值對(duì)(Key-Value)存儲(chǔ)數(shù)據(jù)庫(kù),并提供多語(yǔ)言API,本文帶你在Docker安裝配置它
    2021-11-11
  • 詳解Windows?利用?WSL2?安裝?Docker?的2種方式

    詳解Windows?利用?WSL2?安裝?Docker?的2種方式

    這篇文章主要介紹了Windows?利用?WSL2?安裝?Docker?的2種方式,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • 用Docker搭建nextcloud個(gè)人網(wǎng)盤(pán)教程

    用Docker搭建nextcloud個(gè)人網(wǎng)盤(pán)教程

    大家好,本篇文章主要講的是用Docker搭建nextcloud個(gè)人網(wǎng)盤(pán)教程,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2021-12-12
  • docker win ping 不通容器 避坑指南

    docker win ping 不通容器 避坑指南

    這篇文章主要介紹了docker win ping 不通容器 避坑指南,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • 常用的Docker基本命令及用法匯總

    常用的Docker基本命令及用法匯總

    Docker是一個(gè)用了一種新穎方式實(shí)現(xiàn)的超輕量虛擬機(jī),在實(shí)現(xiàn)的原理和應(yīng)用上還是和VM有巨大差別,專業(yè)的叫法是應(yīng)用容器(Application Container)。今天給大家匯總介紹15個(gè)常用的docker命令以及用法
    2016-11-11
  • docker修改容器配置文件的3種方法總結(jié)

    docker修改容器配置文件的3種方法總結(jié)

    有時(shí)候可能需要修改運(yùn)行在docker容器中的nginx的配置文件,或者其他一些已經(jīng)運(yùn)行和啟動(dòng)很久的容器中的配置文件,下面這篇文章主要給大家介紹了關(guān)于docker修改容器配置文件的3種方法,需要的朋友可以參考下
    2022-04-04
  • dockerfile echo指定文件多行文本的方法實(shí)現(xiàn)

    dockerfile echo指定文件多行文本的方法實(shí)現(xiàn)

    這篇文章主要介紹了dockerfile echo指定文件多行文本的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評(píng)論