1. 程式人生 > 其它 >mysql-DQL查詢語句優先順序: and>or=in

mysql-DQL查詢語句優先順序: and>or=in

Kubernetes基本概念

Container

Container(容器)是一種行動式、輕量級的作業系統級虛擬化技術。它使用namespace隔離不同的軟體執行環境,並通過映象自包含軟體的執行環境,從而使得容器可以很方便的在任何地方執行。

由於容器體積小且啟動快,因此可以在每個容器映象中打包一個應用程式。這種一對一的應用映象關係有很多好處。使用容器,不需要與外部的基礎架構環境繫結,因為每一個應用程式都不需要外部依賴,更不需要與外部的基礎架構環境依賴。完美解決了從開發到生產環境的一致性問題。

容器同樣比虛擬機器更加透明,這有助於監測和管理。尤其是容器程序的宣告週期由基礎設施管理,而不是被程序管理器隱藏在容器內部。最後,每個應用程式用容器封裝,管理容器部署就等同於管理應用程式部署。

其他容器的優點還包括

  • 敏捷的應用程式建立和部署:與虛擬機器映象相比,容器映象更易用、更高效

  • 持續開發、整合和部署:提供可靠與頻繁的容器映象構建、部署和快速簡便的回滾(映象是不可變的)

  • 開發與運維鵝關注分離:在構建/釋出時即建立容器映象,從而將應用於基礎架構分離

  • 開發、測試與生產環境一致性:在膝上型電腦上執行和雲中一樣

  • 可觀測:不僅顯示作業系統的資訊和度量,還顯示應用自身的資訊和度量

  • 雲和作業系統的分發可移植性:可執行在Ubuntu、Centos、CoreOS、物理機以及其他任何地方

  • 以應用為中心的管理:從傳統的硬體上部署作業系統提升到作業系統中部署應用程式

  • 鬆耦合、分散式、彈性伸縮、微服務:應用程式被分成更小、更獨立的模組,並可以動態管理和部署-而不是執行在專用裝置上的大型單體程式

  • 資源隔離:可預測的應用程式效能

  • 資源利用:高效率和高密度

Pod

Kubernetes使用Pod來管理容器,每個Pod可以包含一個或多個緊密關聯的容器。

Pod是一組緊密關聯的容器集合,它們共享PID、IPC、Network和UTS namespace,是Kubernetes排程的基本單位。Pod內的多個容器共享網路和檔案系統,可以通過程序間通訊和檔案共享這種簡單高效的方式組合完成服務。

在Kubernetes中,所有物件都使用manifest(yaml或json)來定義,比如一個簡單的nginx服務可以定義為nginx.yaml,它包含一個映象為nginx的容器:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80

Node

Node是Pod真正執行的主機,可以是物理機,也可以是虛擬機器。為了管理Pod,每個Node節點上至少要執行container runtime(如docker)、kubelet和kube-proxy服務。

Namespace

Namespace是對一組資源和物件的抽象集合,比如可以用來將系統內部的物件劃分為不同的專案組或使用者組。常見的pods、services、replication controller和deployment等都是屬於某一個namespace的(預設是default),而node、persistentVolumes等則不屬於任何namespace。

Service

Service是應用服務的抽象,通過labels為應用提供負載均衡和服務發現。匹配labels的Pod IP和埠列表組成endpoints,由kube-proxy負責將服務IP負載均衡到這些endpoints上。

每個Service都會自動分配一個cluster IP(僅在叢集內部可訪問的虛擬地址)和DNS名,其他容器可以通過該地址或DNS來訪問服務,而不需要了解後端容器的執行。

示例:

apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  ports:
  - port: 8078
    name: http
    targetPort: 80
    protocol: tomcat-pod
  selector:
    app: nginx

Label

Label是識別Kubernetes物件的標籤,以key/value的方式附加到物件上(key最長不能超過63位元組,value可以為空,也可以是不超過253位元組的字串)。

Label不提供唯一性,並且實際上經常是很多物件(如Pods)都使用相同的label來標誌具體的應用

Label定義好後其他物件可以使用Label Selector來選擇一組相同label的物件(比如ReplicaSet和Service用label來選擇一組Pod)。Label Selector支援以下幾種方式:

  • 等式,如app=nginx和env!=production
  • 集合,如env in (production,qa)
  • 多個label(它們之間是AND關係),如app=nginx,env=test

Annotations

Annotations是key/value形式附加於物件的註解。不同於Labels用於標誌和選擇物件,Annotations是用來記錄一些附加資訊,用來輔助應用部署、安全策略以及排程策略等。比如deployment使用annotations來記錄rolling update的狀態。