K8S經常使用命令

1、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.ionode

Kubernetes主要功能:

一、數據卷

  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有一個或多個容器組成,Pod中容器共享存儲和網絡,在同一臺Docker主機上運行。

二、Service

  Service一個應用服務抽象,定義了Pod邏輯集合和訪問這個Pod集合的策略。

  Service代理Pod集合對外表現是爲一個訪問入口,分配一個集羣IP地址,來自這個IP的請求將負載均衡轉發後端Pod中的容器。

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

三、Volume

  數據卷,共享Pod中容器使用的數據。

四、Namespace

  命名空間將對象邏輯上分配到不一樣Namespace,能夠是不一樣的項目、用戶等區分管理,並設定控制策略,從而實現多租戶。

  命名空間也稱爲虛擬集羣。

五、Lable

  標籤用於區分對象(好比Pod、Service),鍵/值對存在;每一個對象能夠有多個標籤,經過標籤關聯對象。

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

一、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。

五、Job

  一次性任務,運行完成後Pod銷燬,再也不從新啓動新容器。還能夠任務定時運行。

2、k8s架構

圖片描述
圖片描述

系統組件

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等對象信息。

3、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
相關文章
相關標籤/搜索