在k8s上運行實例Guestbook

在k8s上運行實例Guestbook

解決拉取不到谷歌k8s.gcr.io倉庫鏡像的問題
  之前,已經搭建好k8s集羣,爲方便使用在ali CES服務器搭建了k8s solo.此次,在
k8s上運行實例Guestbook.
  • 創建rc&service文件

    • redis-master-controller.yaml

      apiVersion: v1
      kind: ReplicationController
      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: kubeguide/redis-master
              ports:
              - containerPort: 6379
      
    • redis-master-service.yaml

      apiVersion: v1
      kind: Service
      metadata:
       name: redis-master
       labels:
         name: redis-master
      spec:
        ports:
        - port: 6379
          targetPort: 6379
        selector:
          name: redis-master
      • redis-slave-controller.yaml
      apiVersion: v1
      kind: ReplicationController
      metadata:
        name: redis-slave
      spec:
        replicas: 2
        selector:
          name: redis-slave
        template:
          metadata:
            name: redis-slave
            labels:
              name: redis-slave
          spec:
            containers:
           - name: redis-slave
             image: kubeguide/guestbook-redis-slave
             env:
           - name: GET_HOSTS_FROM
             value: env
           ports:
           - containerPort: 6379
      • redis-slave-service.yaml
      apiVersion: v1
      kind: Service
      metadata:
        name: redis-slave
        labels:
          name: redis-slave
      spec:
        ports:
        - port: 6379
        selector: 
          name: redis-slave
      • frontend-controller.yaml
      apiVersion: v1
      kind: ReplicationController
      metadata:
        name: frontend
        labels:
          name: frontend
      spec:
        replicas: 3
        selector:
          name: frontend
        template:
          metadata:
            labels:
              name: frontend
          spec:
            containers:
            - name: frontend
              image: kubeguide/guestbook-php-frontend
              env:
              - name: GET_HOSTS_FROM
                value: env
              ports:
              - containerPort: 80
      
      
      • frontend-service.yaml
      apiVersion: v1
      kind: Service
      metadata:
        name: frontend
        labels:
          name: frontend
      spec:
        type: NodePort
        ports:
        - port: 80
          nodePort: 30001
        selector:
          name: frontend
  • 創建、刪除rc&service

    
    #創建rc&service
    
    kubectl create -f redis-master-controller.yaml
    kubectl create -f redis-master-service.yaml
    kubectl create -f redis-slave-controller.yaml
    kubectl create -f redis-slave-service.yaml
    kubectl create -f frontend-controller.yaml
    kubectl create -f frontend-service.yaml
    
    
    #刪除rc&service
    
    kubectl delete -f redis-slave-controller.yaml 
    kubectl delete -f redis-slave-service.yaml 
    kubectl delete -f redis-master-controller.yaml 
    kubectl delete -f redis-master-service.yaml 
    kubectl delete -f frontend-controller.yaml 
    kubectl delete -f frontend-service.yaml 
    
    #或者
    
    kubectl delete rc --all
    kubectl delete service --all
  • 查看rs&service

    root@liu:~/demo# kubectl get rc
    NAME           DESIRED   CURRENT   READY     AGE
    frontend       3         3         3         4h
    redis-master   1         1         1         5h
    redis-slave    2         2         2         4h
    
    root@liu:~/demo# kubectl get service
    NAME           TYPE        CLUSTER-IP        EXTERNAL-IP   PORT(S)        AGE
    frontend       NodePort    169.169.10.4      <none>        80:30001/TCP   4h
    kubernetes     ClusterIP   169.169.0.1       <none>        443/TCP        5h
    redis-master   ClusterIP   169.169.224.109   <none>        6379/TCP       4h
    redis-slave    ClusterIP   169.169.38.248    <none>        6379/TCP       4h
  • 查看pod

    root@liu:~# kubectl get pods
    NAME                 READY     STATUS              RESTARTS   AGE
    frontend-5n2p2       0/1       ContainerCreating   0          31s
    frontend-hrxbc       0/1       ContainerCreating   0          31s
    frontend-l67mj       0/1       ContainerCreating   0          31s
    redis-master-dnck9   0/1       ContainerCreating   0          31s
    redis-slave-4sw5p    0/1       ContainerCreating   0          31s
    redis-slave-sc6bd    0/1       ContainerCreating   0          31s
  • Q:拉取不到k8s.gcr.io/pause,pod一直處於創建狀態

      創建好rc,查看pod,發現pod處於創建狀態,查看日誌發現沒有配置clusterDNS,  
    啓動了default配置,但是要下載pause:3.1鏡像.由於GFW,拉取不到pause:3.1.  
    更煩的是,無論採用代理還是阿里雲容器加速,都拉取不到該鏡像.
    
    • 查看pod日誌

      kubectl describe pod redis-master
  • A:拉取別人克隆的鏡像,並要修改成谷歌鏡像的容器名

    
    #這是國內,別人建的倉庫
    
    docker pull anjia0532/pause:3.1
    
    #k8s監測鏡像k8s.gcr.io/pause:3.1,不存在會拉取
    
    
    #修改後,查看pod狀態,逐漸變爲running
    
    docker docker tag da86e6ba6ca1 k8s.gcr.io/pause:3.1
    

    running
    done

  • 測試用例

      由於實例在阿里雲上,要添加安全組,才能從外部網訪問,這裏分析GuestBook,  
    通過curl的方式實現與服務的交互.
    
    • Guestbook頁面的處理邏輯

        redis中的存儲着一個key-value,key=massages,value=留言1,留言2,  
      訪問頁面,查redis key=massages,得到value以","分隔的留言串.控制器  
      分割字符串,得到一個個留言,顯示到頁面
        在頁面上填寫留言,並提交.控制器,將留言追加到留言串上,寫入redis.
      並得到"updated"響應.
      
    • Guestbook頁面
      guest
    • curl方式留言

      
      #獲取留言信息
      
      root@liu:~/demo# curl "127.0.0.1:30001/guestbook.php?cmd=get&key=messages"
      {"data": "hello,hi"}
      
      
      #填寫留言
      
      root@liu:~/demo# curl "127.0.0.1:30001/guestbook.php?cmd=set&key=messages&value=hello,hi,test"
      {"message": "Updated"}
      
      
      #更新後的留言
      
      root@liu:~/demo# curl "127.0.0.1:30001/guestbook.php?cmd=get&key=messages"
      {"data": "hello,hi,test"}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章