1、Kubernetes主要功能:
一、數據卷
Pod中容器之間共享數據,可使用數據卷。
二、應用程序健康檢查
容器內服務可能進程堵塞沒法處理請求,能夠設置監控檢查策略保證應用健壯性。
三、複製應用程序實例
控制器維護着Pod副本數量,保證一個Pod或一組同類的Pod數量始終可用。
四、彈性伸縮
根據設定的指標(CPU利用率)自動縮放Pod副本數。
五、服務發現
使用環境變量或DNS服務插件保證容器中程序發現Pod入口訪問地址。
六、負載均衡
一組Pod副本分配一個私有的集羣IP地址,負載均衡轉發請求到後端容器。在集羣內部其餘Pod可經過這個ClusterIP訪問應用。
七、滾動更新
更新服務不中斷,一次更新一個Pod,而不是同時刪除整個服務。
八、服務編排
經過文件描述部署服務,使得應用程序部署變得更高效。
九、資源監控
Node節點組件集成cAdvisor資源收集工具,可經過Heapster彙總整個集羣節點資源數據,而後存儲到InfluxDB時序數據庫,再由Grafana展現。
十、提供認證和受權
支持屬性訪問控制(ABAC)、角色訪問控制(RBAC)認證受權策略。node
2、基本對象:
一、Pod
Pod是最小部署單元,一個Pod有一個或多個容器組成,Pod中容器共享存儲和網絡,在同一臺Docker主機上運行。
二、Service
Service一個應用服務抽象,定義了Pod邏輯集合和訪問這個Pod集合的策略。
Service代理Pod集合對外表現是爲一個訪問入口,分配一個集羣IP地址,來自這個IP的請求將負載均衡轉發後端Pod中的容器。
Service經過LableSelector選擇一組Pod提供服務。
三、Volume
數據卷,共享Pod中容器使用的數據。
四、Namespace
命名空間將對象邏輯上分配到不一樣Namespace,能夠是不一樣的項目、用戶等區分管理,並設定控制策略,從而實現多租戶。
命名空間也稱爲虛擬集羣。
五、Lable
標籤用於區分對象(好比Pod、Service),鍵/值對存在;每一個對象能夠有多個標籤,經過標籤關聯對象。算法
3、基於基本對象更高層次抽象:
一、ReplicaSet
下一代ReplicationController。確保任何給定時間指定的Pod副本數量,並提供聲明式更新等功能。
RC與RS惟一區別就是lableselector支持不一樣,RS支持新的基於集合的標籤,RC僅支持基於等式的標籤。
二、Deployment
Deployment是一個更高層次的API對象,它管理ReplicaSets和Pod,並提供聲明式更新等功能。
官方建議使用Deployment管理ReplicaSets,而不是直接使用ReplicaSets,這就意味着可能永遠不須要直接操做ReplicaSet對象。
三、StatefulSet
StatefulSet適合持久性的應用程序,有惟一的網絡標識符(IP),持久存儲,有序的部署、擴展、刪除和滾動更新。
四、DaemonSet 都用於管理服務類容器
aemonSet確保全部(或一些)節點運行同一個Pod。當節點加入Kubernetes集羣中,Pod會被調度到該節點上運行,當節點從集羣中移除時,DaemonSet的Pod會被刪除。
刪除DaemonSet會清理它全部建立的Pod。
kubectl get daemonset --namespace=kube-system
DaemonSet確保集羣中每一個(部分)node運行一份pod副本
運行集羣存儲守護進程,如glusterd、ceph。
運行集羣日誌收集守護進程,如fluentd、logstash。
運行節點監控守護進程,如Prometheus和 kube-flannel-ds 和 kube-proxy
五、Job
一次性任務,運行完成後Pod銷燬,再也不從新啓動新容器。還能夠任務定時運行。docker
4、系統組件
Master組件:
一、kube-apiserver
Kubernetes API,集羣的統一入口,各組件協調者,以HTTPAPI提供接口服務,全部對象資源的增刪改查和監聽操做都交給APIServer處理後再提交給Etcd存儲。
二、kube-controller-manager
處理集羣中常規後臺任務,一個資源對應一個控制器,而ControllerManager就是負責管理這些控制器的。
三、kube-scheduler
根據調度算法爲新建立的Pod選擇一個Node節點。
Node組件:
一、kubelet
kubelet是Master在Node節點上的Agent,管理本機運行容器的生命週期,好比建立容器、Pod掛載數據卷、下載secret、獲取容器和節點狀態等工做。kubelet將每一個Pod轉換成一組容器。
二、kube-proxy
在Node節點上實現Pod網絡代理,維護網絡規則和四層負載均衡工做。
三、docker或rocket(rkt)
運行容器。
第三方服務:
一、etcd
分佈式鍵值存儲系統。用於保持集羣狀態,好比Pod、Service等對象信息。數據庫
Cluster 集羣網絡 計算、存儲
Master 主要負責調度 API Server,scheduler,Controller-Manager
Node 主要職責是運行容器應用,負責監控並彙報容器的狀態 kubelet,容器引擎(docker)後端
k8s相關運維指令
1、查看node資源對象
# kubectl get nodes #查看k8s集羣全部節點節點信息
# kubectl get nodes -o wide #查看k8s集羣全部節點詳細信息
# kubectl describe node <node_name> #查看k8s集羣全部節點詳細描述信息api
用label控制 Pod的位置,設置節點label
# kubectl get nodes --show-lables #查看k8s集羣全部節點標籤
# kubectl label node <node_name> <tagName>=<tagValue> #設置節點標籤
# kubectl label node <node_name> <tagName>- #刪除節點標籤網絡
若是但願將 k8s-master 也看成 Node 使用,能夠執行以下命令
# kubectl taint node <node_name> <key>=<value>:NoSchedule #設置節點不能夠調度
# kubectl taint node <node_name> <key>:NoSchedule- #設置節點可調度負載均衡
2、查看deployment資源對象
# kubectl get deployment --all-namespaces #查看全部命名空間的deployment資源對象
# kubectl get deployment -n <namespaece> #查看指定命名空間的deployment資源對象
# kubectl edit deployment -n <namespaece> #編輯指定命名空間的deployment資源對象
3、查看service資源對象
# kubectl get svc --all-namespaces #查看全部命名空間的service資源對象
# kubectl get svc -n <namespaece> #查看指定命名空間的service資源對象
# kubectl edit svc -n <namespaece> #編輯指定命名空間的service資源對象
4、查看pod資源對象
# kubectl get pod --all-namespaces #查看全部命名空間的pod對象
# kubectl get pod --all-namespaces -o wide #wide格式查看全部命名空間的pod對象
# kubectl get pod --all-namespaces -o yaml #yaml格式查看全部命名空間的pod對象
# kubectl describe pod <pod_name> -n <namespace> #指定命名空間的pod對象
# kubectl logs <pod_name> -c <container_name> -n <namespace> #查看指定命名空間下指定pod中的容器日誌
# kubectl logs <pod_name> -n <namespace> #查看容器日誌(pod中只有一個容器)運維