Kubernetes是Google在2014年6月開源的一個容器集羣管理系統,使用Go語言開發,Kubernetes也叫K8S。K8S是Google內部一個叫Borg的容器集羣管理系統衍生出來的,Borg已經在Google大規模生產運行十年之久。K8S主要用於自動化部署、擴展和管理容器應用,提供了資源調度、部署管理、服務發現、擴容縮容、監控等一整套功能。2015年7月,Kubernetes v1.0正式發佈,截止到2017年9月29日最新穩定版本是v1.8.0 Kubernetes目標是讓部署容器化應用簡單高效。
官方網站:www.kubernetes.ionode
Pod中容器之間共享數據,可使用數據卷。linux
容器內服務可能進程堵塞沒法處理請求,能夠設置監控檢查策略保證應用健壯性。算法
控制器維護着Pod副本數量,保證一個Pod或一組同類的Pod數量始終可用。docker
根據設定的指標(CPU利用率)自動縮放Pod副本數。數據庫
使用環境變量或DNS服務插件保證容器中程序發現Pod入口訪問地址。後端
一組Pod副本分配一個私有的集羣IP地址,負載均衡轉發請求到後端容器。在集羣內部其餘Pod可經過這個ClusterIP訪問應用。api
更新服務不中斷,一次更新一個Pod,而不是同時刪除整個服務。網絡
經過文件描述部署服務,使得應用程序部署變得更高效。架構
Node節點組件集成cAdvisor資源收集工具,可經過Heapster彙總整個集羣節點資源數據,而後存儲到InfluxDB時序數據庫,再由Grafana展現。app
支持屬性訪問控制(ABAC)、角色訪問控制(RBAC)認證受權策略。
Pod是最小部署單元,一個Pod有一個或多個容器組成,Pod中容器共享存儲和網絡,在同一臺Docker主機上運行。
Service一個應用服務抽象,定義了Pod邏輯集合和訪問這個Pod集合的策略。
Service代理Pod集合對外表現是爲一個訪問入口,分配一個集羣IP地址,來自這個IP的請求將負載均衡轉發後端Pod中的容器。
Service經過LableSelector選擇一組Pod提供服務。
數據卷,共享Pod中容器使用的數據。
命名空間將對象邏輯上分配到不一樣Namespace,能夠是不一樣的項目、用戶等區分管理,並設定控制策略,從而實現多租戶。
命名空間也稱爲虛擬集羣。
標籤用於區分對象(好比Pod、Service),鍵/值對存在;每一個對象能夠有多個標籤,經過標籤關聯對象。
下一代ReplicationController。確保任何給定時間指定的Pod副本數量,並提供聲明式更新等功能。
RC與RS惟一區別就是lableselector支持不一樣,RS支持新的基於集合的標籤,RC僅支持基於等式的標籤。
Deployment是一個更高層次的API對象,它管理ReplicaSets和Pod,並提供聲明式更新等功能。
官方建議使用Deployment管理ReplicaSets,而不是直接使用ReplicaSets,這就意味着可能永遠不須要直接操做ReplicaSet對象。
StatefulSet適合持久性的應用程序,有惟一的網絡標識符(IP),持久存儲,有序的部署、擴展、刪除和滾動更新。
aemonSet確保全部(或一些)節點運行同一個Pod。當節點加入Kubernetes集羣中,Pod會被調度到該節點上運行,當節點從集羣中移除時,DaemonSet的Pod會被刪除。刪除DaemonSet會清理它全部建立的Pod。
一次性任務,運行完成後Pod銷燬,再也不從新啓動新容器。還能夠任務定時運行。
Kubernetes API,集羣的統一入口,各組件協調者,以HTTPAPI提供接口服務,全部對象資源的增刪改查和監聽操做都交給APIServer處理後再提交給Etcd存儲。
處理集羣中常規後臺任務,一個資源對應一個控制器,而ControllerManager就是負責管理這些控制器的。
根據調度算法爲新建立的Pod選擇一個Node節點。
kubelet是Master在Node節點上的Agent,管理本機運行容器的生命週期,好比建立容器、Pod掛載數據卷、下載secret、獲取容器和節點狀態等工做。kubelet將每一個Pod轉換成一組容器。
在Node節點上實現Pod網絡代理,維護網絡規則和四層負載均衡工做。
運行容器。
分佈式鍵值存儲系統。用於保持集羣狀態,好比Pod、Service等對象信息。
-o wide以yaml格式顯示詳細信息 [root@linux-node1 ~]# kubectl get node -o wide NAME STATUS ROLES AGE VERSION EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME 192.168.56.12 Ready <none> 6d v1.10.8 <none> CentOS Linux 7 (Core) 3.10.0-514.el7.x86_64 docker://18.6.1 192.168.56.13 Ready <none> 6d v1.10.8 <none> CentOS Linux 7 (Core) 3.10.0-514.el7.x86_64 docker://18.6.1
[root@linux-node1 ~]# kubectl run net-test --image=alpine --replicas=2 sleep 360000 deployment.apps "net-test" created ###查看deployments [root@linux-node1 ~]# kubectl get deployments --all-namespaces -o wide NAMESPACE NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR default net-test 2 2 2 2 13s net-test alpine run=net-test
[root@linux-node1 ~]# kubectl describe deployment net-test Name: net-test Namespace: default CreationTimestamp: Fri, 28 Sep 2018 05:25:49 -0400 Labels: run=net-test Annotations: deployment.kubernetes.io/revision=1 Selector: run=net-test Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 1 max unavailable, 1 max surge Pod Template: Labels: run=net-test Containers: net-test: Image: alpine Port: <none> Host Port: <none> Args: sleep 360000 Environment: <none> Mounts: <none> Volumes: <none> Conditions: Type Status Reason ---- ------ ------ Available True MinimumReplicasAvailable Progressing True NewReplicaSetAvailable OldReplicaSets: <none> NewReplicaSet: net-test-5767cb94df (2/2 replicas created) Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ScalingReplicaSet 9m deployment-controller Scaled up replica set net-test-5767cb94df to 2
[root@linux-node1 ~]# kubectl delete deployment net-test -n default deployment.extensions "net-test" deleted
[root@linux-node1 ~]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE net-test-5767cb94df-7lwtq 1/1 Running 0 3m 10.2.96.11 192.168.56.13 net-test-5767cb94df-wcwg5 1/1 Running 0 3m 10.2.96.10 192.168.56.12 -o wide以yaml格式顯示Pod的詳細信息 kubectl get pod <pod-name> -o wide [root@linux-node1 ~]# kubectl get pod net-test-5767cb94df-7lwtq -o wide NAME READY STATUS RESTARTS AGE IP NODE net-test-5767cb94df-7lwtq 1/1 Running 0 2m 10.2.96.11 192.168.56.13
[root@linux-node1 ~]# kubectl describe pod net-test-5767cb94df-7lwtq Name: net-test-5767cb94df-7lwtq Namespace: default Node: 192.168.56.13/192.168.56.13 Start Time: Fri, 28 Sep 2018 05:25:49 -0400 Labels: pod-template-hash=1323765089 run=net-test Annotations: <none> Status: Running IP: 10.2.96.11 Controlled By: ReplicaSet/net-test-5767cb94df Containers: net-test: Container ID: docker://fc0889ca3141cdcd29fc137da45dcb913b7aece71dea76e1508cf34aa93ed0ce Image: alpine Image ID: docker-pullable://alpine@sha256:621c2f39f8133acb8e64023a94dbdf0d5ca81896102b9e57c0dc184cadaf5528 Port: <none> Host Port: <none> Args: sleep 360000 State: Running Started: Fri, 28 Sep 2018 05:25:56 -0400 Ready: True Restart Count: 0 Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from default-token-xr766 (ro) Conditions: Type Status Initialized True Ready True PodScheduled True Volumes: default-token-xr766: Type: Secret (a volume populated by a Secret) SecretName: default-token-xr766 Optional: false QoS Class: BestEffort Node-Selectors: <none> Tolerations: <none> Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 3m default-scheduler Successfully assigned net-test-5767cb94df-7lwtq to 192.168.56.13 Normal SuccessfulMountVolume 3m kubelet, 192.168.56.13 MountVolume.SetUp succeeded for volume "default-token-xr766" Normal Pulling 3m kubelet, 192.168.56.13 pulling image "alpine" Normal Pulled 3m kubelet, 192.168.56.13 Successfully pulled image "alpine" Normal Created 3m kubelet, 192.168.56.13 Created container Normal Started 3m kubelet, 192.168.56.13 Started container
https://blog.csdn.net/liumiaocn/article/details/73913597 Kubernetes之kubectl經常使用命令使用指南:1:建立和刪除 https://blog.csdn.net/qq_32828145/article/details/81429232 k8s之Deployment與service