kubernetes 基礎知識

1. kubernetes 包含幾個組件

  Kubernetes是什麼:針對容器編排的一種分佈式架構,是自動化容器操做的開源平臺。node

  服務發現、內建負載均衡、強大的故障發現和自我修復機制、服務滾動升級和在線擴容縮容、資源自動調度機制、多粒度的資源配額管理能力,包括開發、測試、部署、運維監控,一站式的完備的分佈式系統開發和支撐平臺.python

  

   (1) Master 控制節點  apache

1.Api Server:爲集羣的核心組件,主要負責集羣各功能模塊之間的通訊,集羣內的功能模塊經過Api server將信息存入到分佈式文件系統etcd中與其餘節點進行信息交互。 
2.Scheduler:負責集羣的資源調度,跟蹤集羣中全部Node的資源利用狀況,對新建立的pod,採起合適的調度策略,進行均衡的調度到合適的節點上。 
3.Controller Manager:主要負責集羣的故障檢測和恢復的自動化,它內部的組件以下: 
  a.endpointController:按期關聯service和pod,關聯信息由endpoint負責建立和更新。 
  b.ReplicationController:完成pod的複製或移除,以確保ReplicationController定義的複本數量與實際運行pod的數量一致性

   (2) Node 節點api

  集羣中的工做主機,Node能夠是物理主機,也能夠是虛擬機,包含如下組件: 
1.kubelet:運行在每一個Node節點上,kubelet會經過api service 註冊節點自身信息,用於master發現節點,它會按期從etcd獲取分配到本機的pod,並根據pod信息啓動或中止相應的容器,並按期向master節點彙報節點資源的使用狀況,內部集成cadvise來監控容器和節點資源。 
2.Kube Proxy:負責爲pod提供代理。它會按期從etcd獲取全部的service,並根據service信息建立代理。當某個客戶pod要訪問其餘pod時,訪問請求會通過本機proxy作轉發。

2.基礎概念

  (1) pod概念tomcat

Pod是一個邏輯概念,它是Kubernetes資源調度的單元,通常會把一組功能強相關的容器邏輯上稱之爲一個pod,Pod就是所說的實例。做爲一個邏輯概念,pod自己沒有資源,pod中的容器具備資源,建立pod,能夠經過定義pod模塊。

  [pod狀態]bash

 

 

Pending 
容器還沒有啓動成功,它包括從pod被建立到調度、而後到拉鏡像開始部署這個過程 
Running 
容器啓動成功 
Succeeded 
容器退出,返回碼是0,而且容器不會再被從新啓動 
Failed 
容器異常退出 
Unknown 
狀態未知,獲取不到容器的狀態,當出現異常時會有這種狀態,例如pod所在的機器故障,或者pod所在的機器上

 

{
    "kind": "Pod",(資源類型)
    "apiVersion": "v1",  (資源版本)
    "metadata": {
        "name": "app-tomcat", (名字,惟一)
        "namespace": "default", (命名空間默認default)
        "labels": {
            "name": "app-tomcat" (label作爲標識,能夠跟RC,Service關聯對應)
        }
    },
    "spec": {
        "containers": [
            {
                "name": "app-tomcat", (自定義鏡像名稱)
                "image": "tomcat", (要拉取的鏡像)
                "command": [   (運行容器時,要運行的命令)
                    "/bin/bash",
                    "/opt/apache-tomcat-7.0.57/bin/catalina.sh",
                    "run"
                ],
                "env": [  (環境變量K,V)
                    {
                        "name": "url_addr",
                        "value": "http://192.168.54.66:8080/paas/jsp/index.jsp"
                    }
                ],
                "resources": { (對容器資源限制)
                    "limits": {
                        "cpu": "1",
                        "memory": "1073741824"
                    },
                    "requests": {
                        "cpu": "100m",
                        "memory": "104857600"
                    }
                },
                "imagePullPolicy": "Always" (獲取鏡像策略Always,Never,IfNotPresent)
            }
        ],
        "restartPolicy": "Always", (pod重啓策略,Always,OnFailure,Never)
        "dnsPolicy": "ClusterFirst",
        "nodeSelector": {  (選擇將該pod調度到包含這些label的Node上)
            "group": "node1"
        }
    }
}

  

  (2) ReplicationControllersession

ReplicationController(簡稱rc)是pod的複製抽象,用於解決pod的擴容縮容問題。一般,分佈式應用爲了性能或高可用性的考慮,須要複製多份資源,而且根據負載狀況動態伸縮。
經過replicationController,咱們能夠指定一個應用須要幾份複製,Kubernetes將爲每份複製建立一個pod,而且保證明際運行pod數量老是與該複製數量相等(例如,當前某個pod宕機時,自動建立新的pod來替換)。

 

 

 

RC中selector設置一個label,去關聯pod的label,selector的label與pod的label相同,那麼該pod就是該rc的一個實例;RC中Replicas設置副本數大小,系統根據該值維護pod的副本數

 

{
    "kind": "ReplicationController",
    "apiVersion": "v1",
    "metadata": {
        "name": "app-tomcat",
        "namespace": "default",
        "labels": {
            "name": "app-tomcat"
        }
    },
    "spec": {
        "replicas": 2(副本數),
        "selector": {
            "name": "app-tomcat(選擇的pod的label)"
        },
        "template": {
            "metadata": {
                "labels": {
                    "name": "app-tomcat(pod的label)"
                }
            },
            "spec": {
                "containers": [
                    {
                        "name": "kaifa2-group-tomcat",
                        "image": "192.168.54.64:5000/tomcat-248:V1.0",
                        "command": [
                            "/bin/bash",
                            "/opt/apache-tomcat-7.0.57/bin/catalina.sh",
                            "run"
                        ],
                        "env": [
                            {
                                "name": "url_addr",
                                "value": "http://192.168.54.64:8080/paas/jsp/index.jsp"
                            }
                        ],
                        "resources": {
                            "limits": {
                                "cpu": "1",
                                "memory": "1073741824"
                            },
                            "requests": {
                                "cpu": "100m",
                                "memory": "104857600"
                            }
                        },
                        "imagePullPolicy": "Always"
                    }
                ],
                "restartPolicy": "Always",
                "nodeSelector": {
                    "group": "node1"
                }
            }
        }
    }
}

  (3) Service架構

  service是pod的路由代理抽象,用於解決pod之間的服務發現問題,即上下游pod之間使用的問題。傳統部署方式中,實例所在的主機ip(或者dns名字)通常是不會改變的,可是pod的運行狀態可動態變化(好比容器重啓、切換機器了、縮容過程當中被終止了等),
因此訪問端不能以寫死IP的方式去訪問該pod提供的服務。service的引入旨在保證pod的動態變化對訪問端透明,訪問端只須要知道service的地址,由service來提供代理。

 

 

 

{
    "kind": "Service",
    "apiVersion": "v1",
    "metadata": {
        "name": "tomcat-yefp",
        "namespace": "default",
        "labels": {
            "name": "tomcat-yefp"
        }
    },
    "spec": {
        "ports": [
            {
                "protocol": "TCP",
                "port": 8080(訪問端口),
                "targetPort": 8080
            }
        ],
        "selector": {
            "name": "app-tomcat(選擇的pod的label)"
        },
        "type": "ClusterIP",
        "sessionAffinity": "None"
    }
}

  

  (4) EndPoint

app

Endpoint是可被訪問的服務端點,即一個狀態爲running的pod,它是service訪問的落點,只有service關聯的pod纔可能成爲endpoint。 
Endpoint、service和pod的關係:

  

相關文章
相關標籤/搜索