摘要:負(fù)載均衡一組副本分配一個(gè)私有的集群地址,負(fù)載均衡轉(zhuǎn)發(fā)請(qǐng)求到后端容器。在節(jié)點(diǎn)上實(shí)現(xiàn)網(wǎng)絡(luò)代理,維護(hù)網(wǎng)絡(luò)規(guī)則和四層負(fù)載均衡工作。
一、Kubernetes介紹
?Kubernetes是Google在2014年6月開源的一個(gè)容器集群管理系統(tǒng),使用Go語言開發(fā),Kubernetes也叫K8S。K8S是Google內(nèi)部一個(gè)叫Borg的容器集群管理系統(tǒng)衍生出來的,Borg已經(jīng)在Google大規(guī)模生產(chǎn)運(yùn)行十年之久。K8S主要用于自動(dòng)化部署、擴(kuò)展和管理容器應(yīng)用,提供了資源調(diào)度、部署管理、服務(wù)發(fā)現(xiàn)、擴(kuò)容縮容、監(jiān)控等一整套功能。2015年7月,Kubernetes v1.0正式發(fā)布,截止到2017年9月29日最新穩(wěn)定版本是v1.8.0 Kubernetes目標(biāo)是讓部署容器化應(yīng)用簡(jiǎn)單高效。
官方網(wǎng)站:www.kubernetes.io
??Pod中容器之間共享數(shù)據(jù),可以使用數(shù)據(jù)卷。
2、應(yīng)用程序健康檢查??容器內(nèi)服務(wù)可能進(jìn)程堵塞無法處理請(qǐng)求,可以設(shè)置監(jiān)控檢查策略保證應(yīng)用健壯性。
3、復(fù)制應(yīng)用程序?qū)嵗?/b>??控制器維護(hù)著Pod副本數(shù)量,保證一個(gè)Pod或一組同類的Pod數(shù)量始終可用。
4、彈性伸縮??根據(jù)設(shè)定的指標(biāo)(CPU利用率)自動(dòng)縮放Pod副本數(shù)。
5、服務(wù)發(fā)現(xiàn)??使用環(huán)境變量或DNS服務(wù)插件保證容器中程序發(fā)現(xiàn)Pod入口訪問地址。
6、負(fù)載均衡??一組Pod副本分配一個(gè)私有的集群IP地址,負(fù)載均衡轉(zhuǎn)發(fā)請(qǐng)求到后端容器。在集群內(nèi)部其他Pod可通過這個(gè)ClusterIP訪問應(yīng)用。
7、滾動(dòng)更新??更新服務(wù)不中斷,一次更新一個(gè)Pod,而不是同時(shí)刪除整個(gè)服務(wù)。
8、服務(wù)編排??通過文件描述部署服務(wù),使得應(yīng)用程序部署變得更高效。
9、資源監(jiān)控??Node節(jié)點(diǎn)組件集成cAdvisor資源收集工具,可通過Heapster匯總整個(gè)集群節(jié)點(diǎn)資源數(shù)據(jù),然后存儲(chǔ)到InfluxDB時(shí)序數(shù)據(jù)庫(kù),再由Grafana展示。
10、提供認(rèn)證和授權(quán)??支持屬性訪問控制(ABAC)、角色訪問控制(RBAC)認(rèn)證授權(quán)策略。
基本對(duì)象概念 基本對(duì)象: 1、Pod??Pod是最小部署單元,一個(gè)Pod有一個(gè)或多個(gè)容器組成,Pod中容器共享存儲(chǔ)和網(wǎng)絡(luò),在同一臺(tái)Docker主機(jī)上運(yùn)行。
2、Service??Service一個(gè)應(yīng)用服務(wù)抽象,定義了Pod邏輯集合和訪問這個(gè)Pod集合的策略。
??Service代理Pod集合對(duì)外表現(xiàn)是為一個(gè)訪問入口,分配一個(gè)集群IP地址,來自這個(gè)IP的請(qǐng)求將負(fù)載均衡轉(zhuǎn)發(fā)后端Pod中的容器。
??Service通過LableSelector選擇一組Pod提供服務(wù)。
3、Volume??數(shù)據(jù)卷,共享Pod中容器使用的數(shù)據(jù)。
4、Namespace??命名空間將對(duì)象邏輯上分配到不同Namespace,可以是不同的項(xiàng)目、用戶等區(qū)分管理,并設(shè)定控制策略,從而實(shí)現(xiàn)多租戶。
??命名空間也稱為虛擬集群。
5、Lable??標(biāo)簽用于區(qū)分對(duì)象(比如Pod、Service),鍵/值對(duì)存在;每個(gè)對(duì)象可以有多個(gè)標(biāo)簽,通過標(biāo)簽關(guān)聯(lián)對(duì)象。
基于基本對(duì)象更高層次抽象: 1、ReplicaSet??下一代ReplicationController。確保任何給定時(shí)間指定的Pod副本數(shù)量,并提供聲明式更新等功能。
??RC與RS唯一區(qū)別就是lableselector支持不同,RS支持新的基于集合的標(biāo)簽,RC僅支持基于等式的標(biāo)簽。
2、Deployment??Deployment是一個(gè)更高層次的API對(duì)象,它管理ReplicaSets和Pod,并提供聲明式更新等功能。
??官方建議使用Deployment管理ReplicaSets,而不是直接使用ReplicaSets,這就意味著可能永遠(yuǎn)不需要直接操作ReplicaSet對(duì)象。
3、StatefulSet??StatefulSet適合持久性的應(yīng)用程序,有唯一的網(wǎng)絡(luò)標(biāo)識(shí)符(IP),持久存儲(chǔ),有序的部署、擴(kuò)展、刪除和滾動(dòng)更新。
4、DaemonSet??aemonSet確保所有(或一些)節(jié)點(diǎn)運(yùn)行同一個(gè)Pod。當(dāng)節(jié)點(diǎn)加入Kubernetes集群中,Pod會(huì)被調(diào)度到該節(jié)點(diǎn)上運(yùn)行,當(dāng)節(jié)點(diǎn)從集群中移除時(shí),DaemonSet的Pod會(huì)被刪除。刪除DaemonSet會(huì)清理它所有創(chuàng)建的Pod。
5、Job??一次性任務(wù),運(yùn)行完成后Pod銷毀,不再重新啟動(dòng)新容器。還可以任務(wù)定時(shí)運(yùn)行。
二、k8s架構(gòu)Kubernetes API,集群的統(tǒng)一入口,各組件協(xié)調(diào)者,以HTTPAPI提供接口服務(wù),所有對(duì)象資源的增刪改查和監(jiān)聽操作都交給APIServer處理后再提交給Etcd存儲(chǔ)。
2、kube-controller-manager處理集群中常規(guī)后臺(tái)任務(wù),一個(gè)資源對(duì)應(yīng)一個(gè)控制器,而ControllerManager就是負(fù)責(zé)管理這些控制器的。
3、kube-scheduler根據(jù)調(diào)度算法為新創(chuàng)建的Pod選擇一個(gè)Node節(jié)點(diǎn)。
Node組件: 1、kubeletkubelet是Master在Node節(jié)點(diǎn)上的Agent,管理本機(jī)運(yùn)行容器的生命周期,比如創(chuàng)建容器、Pod掛載數(shù)據(jù)卷、下載secret、獲取容器和節(jié)點(diǎn)狀態(tài)等工作。kubelet將每個(gè)Pod轉(zhuǎn)換成一組容器。
2、kube-proxy在Node節(jié)點(diǎn)上實(shí)現(xiàn)Pod網(wǎng)絡(luò)代理,維護(hù)網(wǎng)絡(luò)規(guī)則和四層負(fù)載均衡工作。
3、docker或rocket(rkt)運(yùn)行容器。
第三方服務(wù): 1、etcd分布式鍵值存儲(chǔ)系統(tǒng)。用于保持集群狀態(tài),比如Pod、Service等對(duì)象信息。
三、K8S常用命令 查看node-o wide以yaml格式顯示詳細(xì)信息 [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創(chuàng)建deployments6d v1.10.8 CentOS Linux 7 (Core) 3.10.0-514.el7.x86_64 docker://18.6.1 192.168.56.13 Ready 6d v1.10.8 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查看deployments詳情
[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:刪除deploymentsHost Port: Args: sleep 360000 Environment: Mounts: Volumes: Conditions: Type Status Reason ---- ------ ------ Available True MinimumReplicasAvailable Progressing True NewReplicaSetAvailable OldReplicaSets: 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查看pod
[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的詳細(xì)信息 kubectl get pod查看pod的詳情-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: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: Host Port: Args: sleep 360000 State: Running Started: Fri, 28 Sep 2018 05:25:56 -0400 Ready: True Restart Count: 0 Environment: 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: Tolerations: 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:創(chuàng)建和刪除 https://blog.csdn.net/qq_32828145/article/details/81429232 k8s之Deployment與service
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/33084.html
摘要:下面我想介紹另一種學(xué)習(xí)思路,自頂向下的學(xué)習(xí)。是通過虛擬機(jī)創(chuàng)建集群,支持多種虛擬機(jī),我這里用的。對(duì)內(nèi)或?qū)ν獗┞斗?wù)。和的控制器,通過配置的規(guī)則來管理。三個(gè)主要的命令行程序用了啟動(dòng)集群。需要在所以節(jié)點(diǎn)上運(yùn)行,處理集群內(nèi)部通訊,類似。 之前就玩過docker,但是一直不知道怎么把容器運(yùn)用到生產(chǎn)上。構(gòu)建一個(gè)docker鏡像,把他run起來很簡(jiǎn)單;難的是容器的部署(CICD),容器的網(wǎng)絡(luò),數(shù)據(jù)持...
摘要:下面我想介紹另一種學(xué)習(xí)思路,自頂向下的學(xué)習(xí)。是通過虛擬機(jī)創(chuàng)建集群,支持多種虛擬機(jī),我這里用的。對(duì)內(nèi)或?qū)ν獗┞斗?wù)。和的控制器,通過配置的規(guī)則來管理。三個(gè)主要的命令行程序用了啟動(dòng)集群。需要在所以節(jié)點(diǎn)上運(yùn)行,處理集群內(nèi)部通訊,類似。 之前就玩過docker,但是一直不知道怎么把容器運(yùn)用到生產(chǎn)上。構(gòu)建一個(gè)docker鏡像,把他run起來很簡(jiǎn)單;難的是容器的部署(CICD),容器的網(wǎng)絡(luò),數(shù)據(jù)持...
摘要:下面我想介紹另一種學(xué)習(xí)思路,自頂向下的學(xué)習(xí)。是通過虛擬機(jī)創(chuàng)建集群,支持多種虛擬機(jī),我這里用的。對(duì)內(nèi)或?qū)ν獗┞斗?wù)。和的控制器,通過配置的規(guī)則來管理。三個(gè)主要的命令行程序用了啟動(dòng)集群。需要在所以節(jié)點(diǎn)上運(yùn)行,處理集群內(nèi)部通訊,類似。 之前就玩過docker,但是一直不知道怎么把容器運(yùn)用到生產(chǎn)上。構(gòu)建一個(gè)docker鏡像,把他run起來很簡(jiǎn)單;難的是容器的部署(CICD),容器的網(wǎng)絡(luò),數(shù)據(jù)持...
摘要:將用戶命令通過接口傳送給,從而進(jìn)行資源的增刪改等操作。要使用編寫應(yīng)用程序,當(dāng)下大多語言都可以很方便地去實(shí)現(xiàn)請(qǐng)求來操作的接口從而控制和查詢資源,但本文主要是利用已有的客戶端來更加優(yōu)雅地實(shí)現(xiàn)的資源控制。 showImg(https://segmentfault.com/img/remote/1460000013517345); 【利用K8S技術(shù)棧打造個(gè)人私有云系列文章目錄】 利用K8S...
摘要:將用戶命令通過接口傳送給,從而進(jìn)行資源的增刪改等操作。要使用編寫應(yīng)用程序,當(dāng)下大多語言都可以很方便地去實(shí)現(xiàn)請(qǐng)求來操作的接口從而控制和查詢資源,但本文主要是利用已有的客戶端來更加優(yōu)雅地實(shí)現(xiàn)的資源控制。 showImg(https://segmentfault.com/img/remote/1460000013517345); 【利用K8S技術(shù)棧打造個(gè)人私有云系列文章目錄】 利用K8S...
閱讀 3495·2021-11-24 11:17
閱讀 2281·2021-11-15 11:38
閱讀 3367·2021-10-14 09:42
閱讀 2930·2019-08-30 15:54
閱讀 2024·2019-08-28 18:09
閱讀 539·2019-08-26 11:48
閱讀 1633·2019-08-26 10:48
閱讀 2147·2019-08-26 10:45