天天看點

K8S常用指令一、Kubernetes介紹二、k8s架構三、K8S常用指令

一、Kubernetes介紹

 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.io

Kubernetes主要功能:

1、資料卷

  Pod中容器之間共享資料,可以使用資料卷。

2、應用程式健康檢查

  容器内服務可能程序堵塞無法處理請求,可以設定監控檢查政策保證應用健壯性。

3、複制應用程式執行個體

  控制器維護着Pod副本數量,保證一個Pod或一組同類的Pod數量始終可用。

4、彈性伸縮

  根據設定的名額(CPU使用率)自動縮放Pod副本數。

5、服務發現

  使用環境變量或DNS服務插件保證容器中程式發現Pod入口通路位址。

6、負載均衡

  一組Pod副本配置設定一個私有的叢集IP位址,負載均衡轉發請求到後端容器。在叢集内部其他Pod可通過這個ClusterIP通路應用。

7、滾動更新

  更新服務不中斷,一次更新一個Pod,而不是同時删除整個服務。

8、服務編排

  通過檔案描述部署服務,使得應用程式部署變得更高效。

9、資源監控

  Node節點元件內建cAdvisor資源收集工具,可通過Heapster彙總整個叢集節點資源資料,然後存儲到InfluxDB時序資料庫,再由Grafana展示。

10、提供認證和授權

  支援屬性通路控制(ABAC)、角色通路控制(RBAC)認證授權政策。

基本對象概念

基本對象:

1、Pod

  Pod是最小部署單元,一個Pod有一個或多個容器組成,Pod中容器共享存儲和網絡,在同一台Docker主機上運作。

2、Service

  Service一個應用服務抽象,定義了Pod邏輯集合和通路這個Pod集合的政策。

  Service代理Pod集合對外表現是為一個通路入口,配置設定一個叢集IP位址,來自這個IP的請求将負載均衡轉發後端Pod中的容器。

  Service通過LableSelector選擇一組Pod提供服務。

3、Volume

  資料卷,共享Pod中容器使用的資料。

4、Namespace

  命名空間将對象邏輯上配置設定到不同Namespace,可以是不同的項目、使用者等區分管理,并設定控制政策,進而實作多租戶。

  命名空間也稱為虛拟叢集。

5、Lable

  标簽用于區分對象(比如Pod、Service),鍵/值對存在;每個對象可以有多個标簽,通過标簽關聯對象。

基于基本對象更高層次抽象:

1、ReplicaSet

  下一代ReplicationController。確定任何給定時間指定的Pod副本數量,并提供聲明式更新等功能。

  RC與RS唯一差別就是lableselector支援不同,RS支援新的基于集合的标簽,RC僅支援基于等式的标簽。

2、Deployment

  Deployment是一個更高層次的API對象,它管理ReplicaSets和Pod,并提供聲明式更新等功能。

  官方建議使用Deployment管理ReplicaSets,而不是直接使用ReplicaSets,這就意味着可能永遠不需要直接操作ReplicaSet對象。

3、StatefulSet

  StatefulSet适合持久性的應用程式,有唯一的網絡辨別符(IP),持久存儲,有序的部署、擴充、删除和滾動更新。

4、DaemonSet

  aemonSet確定所有(或一些)節點運作同一個Pod。當節點加入Kubernetes叢集中,Pod會被排程到該節點上運作,當節點從叢集中移除時,DaemonSet的Pod會被删除。删除DaemonSet會清理它所有建立的Pod。

5、Job

  一次性任務,運作完成後Pod銷毀,不再重新啟動新容器。還可以任務定時運作。

二、k8s架構

K8S常用指令一、Kubernetes介紹二、k8s架構三、K8S常用指令

系統元件

Master元件:

1、kube-apiserver

Kubernetes API,叢集的統一入口,各元件協調者,以HTTPAPI提供接口服務,所有對象資源的增删改查和監聽操作都交給APIServer處理後再送出給Etcd存儲。

2、kube-controller-manager

處理叢集中正常背景任務,一個資源對應一個控制器,而ControllerManager就是負責管理這些控制器的。

3、kube-scheduler

根據排程算法為新建立的Pod選擇一個Node節點。

Node元件:

1、kubelet

kubelet是Master在Node節點上的Agent,管理本機運作容器的生命周期,比如建立容器、Pod挂載資料卷、下載下傳secret、擷取容器和節點狀态等工作。kubelet将每個Pod轉換成一組容器。

2、kube-proxy

在Node節點上實作Pod網絡代理,維護網絡規則和四層負載均衡工作。

3、docker或rocket(rkt)

運作容器。

第三方服務:

1、etcd

分布式鍵值存儲系統。用于保持叢集狀态,比如Pod、Service等對象資訊。

三、K8S常用指令

檢視node

-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           

建立deployments

[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: <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           

删除deployments

[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的詳細資訊
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           

檢視pod的詳情

[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           

本文轉自中文社群-

K8S常用指令