最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于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中Dockerfile指令創(chuàng)建鏡像

    詳解docker中Dockerfile指令創(chuàng)建鏡像

    這篇文章主要介紹了詳解docker中Dockerfile指令創(chuàng)建鏡像,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • docker已啟動(dòng)容器修改添加端口映射的兩種方法

    docker已啟動(dòng)容器修改添加端口映射的兩種方法

    最近工作中遇到一個(gè)問(wèn)題,docker容器啟動(dòng)后怎么修改端口映射?通過(guò)查找相關(guān)資料解決了,這篇文章主要給大家介紹了關(guān)于docker已啟動(dòng)容器修改添加端口映射的兩種方法,需要的朋友可以參考下
    2022-08-08
  • 一些常見(jiàn)的精簡(jiǎn)Docker?file規(guī)則總結(jié)

    一些常見(jiàn)的精簡(jiǎn)Docker?file規(guī)則總結(jié)

    這篇文章主要介紹了一些常見(jiàn)的精簡(jiǎn)Docker?file規(guī)則的相關(guān)資料,這些精簡(jiǎn)規(guī)則有助于優(yōu)化Dockerfile,生成更高效、簡(jiǎn)潔的鏡像,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-11-11
  • Redis快速部署為Docker容器的實(shí)現(xiàn)方法

    Redis快速部署為Docker容器的實(shí)現(xiàn)方法

    本文主要介紹了Redis快速部署為Docker容器的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Docker容器日志占用空間過(guò)大問(wèn)題及解決

    Docker容器日志占用空間過(guò)大問(wèn)題及解決

    這篇文章主要介紹了Docker容器日志占用空間過(guò)大問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 解決docker run后容器出現(xiàn)Exited (0)情況的問(wèn)題

    解決docker run后容器出現(xiàn)Exited (0)情況的問(wèn)題

    這篇文章主要介紹了解決docker run后容器出現(xiàn)Exited (0)情況的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • Docker部署前后端分離項(xiàng)目的三種方式小結(jié)

    Docker部署前后端分離項(xiàng)目的三種方式小結(jié)

    本文主要介紹了Docker部署前后端分離項(xiàng)目的三種方式小結(jié),包含通過(guò)兩個(gè)容器部署,通過(guò)compose編排容器自動(dòng)部署和將前后端項(xiàng)目打成一個(gè)鏡像部署的三種方式,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • docker入門(mén)教程(利用docker部署web應(yīng)用)

    docker入門(mén)教程(利用docker部署web應(yīng)用)

    docker是一個(gè)用來(lái)裝應(yīng)用的容器,就像杯子可以裝水,筆筒可以放筆,書(shū)包可以放書(shū),可以把hello word放在docker中,可以把網(wǎng)站放入docker中,可以把任何想得到的程序放在docker中,這篇文章主要介紹了docker入門(mén)(利用docker部署web應(yīng)用),需要的朋友可以參考下
    2023-02-02
  • Docker中的容器文件拷貝及目錄掛載方式

    Docker中的容器文件拷貝及目錄掛載方式

    這篇文章主要介紹了Docker中的容器文件拷貝及目錄掛載方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 使用Docker搭建Apache Kafka環(huán)境的詳細(xì)過(guò)程

    使用Docker搭建Apache Kafka環(huán)境的詳細(xì)過(guò)程

    這篇文章主要介紹了使用Docker搭建Apache Kafka環(huán)境,本文使用Docker技術(shù)創(chuàng)建單個(gè)Kafka節(jié)點(diǎn)和Kafka集群環(huán)境,并且使用可視化工具連接服務(wù)查看代理服務(wù)器的配置信息,需要的朋友可以參考下
    2022-10-10

最新評(píng)論

鸡东县| 松溪县| 宁夏| 台州市| 沙雅县| 河北区| 全南县| 资源县| 获嘉县| 大埔县| 吉安县| 行唐县| 永平县| 临湘市| 太湖县| 肃宁县| 廉江市| 扎兰屯市| 彭水| 当雄县| 伊春市| 璧山县| 广德县| 江西省| 子洲县| 青州市| 灵寿县| 杨浦区| 崇州市| 治多县| 武邑县| 鹰潭市| 湖南省| 左贡县| 于田县| 南雄市| 仁布县| 阜新| 云阳县| 靖边县| SHOW|