K8S概念理解

Master 負責管理集羣 負責協調集羣中的全部活動,例如調度應用程序,維護應用程序的狀態,擴展和更新應用程序。

Worker節點是VM(虛擬機)或物理計算機,充當k8s集羣中的工做計算機。 
每一個Worker節點都有一個Kubelet,它管理一個Worker節點並與負責與Master節點通訊。該Worker節點還應具備用於處理容器操做的工具,例如Docker。


執行命令 kubectl get namespaces 能夠查看名稱空間

執行 kubectl 命令時,可使用 --namespace 參數指定名稱空間,例如:

kubectl run nginx --image=nginx --namespace=<您的名稱空間>
kubectl get pods --namespace=<您的名稱空間>

能夠經過 set-context 命令改變當前 kubectl 上下文 的名稱空間,後續全部命令都默認在此名稱空間下執行。

kubectl config set-context --current --namespace=<您的名稱空間>
# 驗證結果
kubectl config view --minify | grep namespace:

執行一下命令可查看哪些 Kubernetes 對象在名稱空間裏,哪些不在:

# 在名稱空間裏
kubectl api-resources --namespaced=true

# 不在名稱空間裏
kubectl api-resources --namespaced=false




kubectl 是 k8s 的客戶端工具,可使用命令行管理集羣

Deployment 譯名爲 部署。在k8s中,經過發佈 Deployment,能夠建立應用程序 (docker image) 的實例 (docker container),這個實例會被包含在稱爲 Pod 的概念中,Pod 是 k8s 中最小單元的可管理單元。

在 k8s 集羣中發佈 Deployment 後,Deployment 將指示 k8s 如何建立和更新應用程序的實例,master 節點將應用程序實例調度到集羣中的具體的節點上。

建立應用程序實例後,Kubernetes Deployment Controller 會持續監控這些實例。若是運行實例的 worker 節點關機或被刪除,則 Kubernetes Deployment Controller 將在羣集中資源最優的另外一個 worker 節點上從新建立一個新的實例。這提供了一種自我修復機制來解決機器故障或維護問題。

Deployment 處於 master 節點上,經過發佈 Deployment,master 節點會選擇合適的 worker 節點建立 Container,Container 會被包含在 Pod 裏。

建立 Deployment 後,k8s建立了一個 Pod(容器組) 來放置應用程序實例(container 容器)

Kubernetes Pods(容器組)

Pod 容器組 是一個k8s中一個抽象的概念,用於存放一組 container(可包含一個或多個 container 容器),以及這些 container (容器)的一些共享資源
這些資源包括:
	共享存儲,稱爲卷(Volumes)
	網絡,每一個 Pod(容器組)在集羣中有個惟一的 IP,pod(容器組)中的 container(容器)共享該IP地址
	container(容器)的基本信息,例如容器的鏡像版本,對外暴露的端口等

Pod(容器組)是 k8s 集羣上的最基本的單元。當咱們在 k8s 上建立 Deployment 時,會在集羣上建立包含容器的 Pod (而不是直接建立容器)。每一個Pod都與運行它的 worker 點(Node)綁定,並保持在那裏直到終止或被刪除。若是節點(Node)發生故障,則會在羣集中的其餘可用節點(Node)上運行相同的 Pod(從一樣的鏡像建立 Container,使用一樣的配置,IP 地址不一樣,Pod 名字不一樣)。

Pod 是一組容器(可包含一個或多個應用程序容器),以及共享存儲(卷 Volumes)、IP 地址和有關如何運行容器的信息。
若是多個容器緊密耦合而且須要共享磁盤等資源,則他們應該被部署在同一個Pod(容器組)中。


Kubernetes Nodes(節點)

執行如下命令可查看全部節點的列表:

kubectl get nodes -o wide

執行如下命令可查看節點狀態以及節點的其餘詳細信息:

kubectl describe node <your-node-name>




Pod(容器組)老是在 Node(節點) 上運行。Node(節點)是 kubernetes 集羣中的計算機,能夠是虛擬機或物理機。每一個 Node(節點)都由 master 管理。一個 Node(節點)能夠有多個Pod(容器組),kubernetes master 會根據每一個 Node(節點)上可用資源的狀況,自動調度 Pod(容器組)到最佳的 Node(節點)上。

每一個 Kubernetes Node(節點)至少運行:
    Kubelet,負責 master 節點和 worker 節點之間通訊的進程;管理 Pod(容器組)和 Pod(容器組)內運行的 Container(容器)。
    容器運行環境(如Docker)負責下載鏡像、建立和運行容器等。



Kubernetes 中的 Service(服務) 提供了這樣的一個抽象層,它選擇具有某些特徵的 Pod(容器組)併爲它們定義一個訪問方式。Service(服務)使 Pod(容器組)之間的相互依賴解耦(本來從一個 Pod 中訪問另一個 Pod,須要知道對方的 IP 地址)。一個 Service(服務)選定哪些 Pod(容器組) 一般由 LabelSelector(標籤選擇器) 來決定。

在建立Service的時候,經過設置配置文件中的 spec.type 字段的值,能夠以不一樣方式向外部暴露應用程序:

    ClusterIP(默認)
    在羣集中的內部IP上公佈服務,這種方式的 Service(服務)只在集羣內部能夠訪問到

    NodePort
    使用 NAT 在集羣中每一個的同一端口上公佈服務。這種方式下,能夠經過訪問集羣中任意節點+端口號的方式訪問服務 <NodeIP>:<NodePort>。此時 ClusterIP 的訪問方式仍然可用。

    LoadBalancer
    在雲環境中(須要雲供應商能夠支持)建立一個集羣外部的負載均衡器,併爲使用該負載均衡器的 IP 地址做爲服務的訪問地址。此時 ClusterIP 和 NodePort 的訪問方式仍然可用。


Rolling Update滾動更新 經過使用新版本的 Pod 逐步替代舊版本的 Pod 來實現 Deployment 的更新,從而實現零停機。新的 Pod 將在具備可用資源的 Node(節點)上進行調度。

Kubernetes 更新多副本的 Deployment 的版本時,會逐步的建立新版本的 Pod,逐步的中止舊版本的 Pod,以便使應用一直處於可用狀態。這個過程當中,Service 可以監視 Pod 的狀態,將流量始終轉發到可用的 Pod 上。

默認狀況下,Rolling Update 滾動更新 過程當中,Kubernetes 逐個使用新版本 Pod 替換舊版本 Pod(最大不可用 Pod 數爲 一、最大新建 Pod 數也爲 1)。這兩個參數能夠配置爲數字或百分比。在Kubernetes 中,更新是版本化的,任何部署更新均可以恢復爲之前的(穩定)版本。

滾動更新容許如下操做:

    將應用程序從準上線環境升級到生產環境(經過更新容器鏡像)
    回滾到之前的版本
    持續集成和持續交付應用程序,無需停機


查看名稱空間:kubectl get namespace


建立名稱空間:kubectl create namespace test_hkd
查看詳細信息:kubectl describe namespace test_hkd



使用 kubectl api-versions 便可查看當前集羣支持的版本

應用 YAML 文件: kubectl apply -f nginx-deployment.yaml

kubectl get - 顯示資源列表

# kubectl get 資源類型

#獲取類型爲Deployment的資源列表
kubectl get deployments

#獲取類型爲Pod的資源列表
kubectl get pods

#獲取類型爲Node的資源列表
kubectl get nodes

kubectl describe - 顯示有關資源的詳細信息

# kubectl describe 資源類型 資源名稱

#查看名稱爲nginx-XXXXXX的Pod的信息
kubectl describe pod nginx-XXXXXX	

#查看名稱爲nginx的Deployment的信息
kubectl describe deployment nginx	

kubectl logs - 查看pod中的容器的打印日誌(和命令docker logs 相似)

# kubectl logs Pod名稱

#查看名稱爲nginx-pod-XXXXXXX的Pod內的容器打印的日誌
#本案例中的 nginx-pod 沒有輸出日誌,因此您看到的結果是空的
kubectl logs -f nginx-pod-XXXXXXX

kubectl exec - 在pod中的容器環境內執行命令(和命令docker exec 相似)

# kubectl exec Pod名稱 操做命令

# 在名稱爲nginx-pod-xxxxxx的Pod中運行bash
kubectl exec -it nginx-pod-xxxxxx /bin/bash


####
kubectl controls the Kubernetes cluster manager.

 Find more information at: https://kubernetes.io/docs/reference/kubectl/overview/

Basic Commands (Beginner):
  create         Create a resource from a file or from stdin.
  expose         Take a replication controller, service, deployment or pod and expose it as a new Kubernetes Service
  run            Run a particular image on the cluster
  set            Set specific features on objects

Basic Commands (Intermediate):
  explain        Documentation of resources
  get            Display one or many resources
  edit           Edit a resource on the server
  delete         Delete resources by filenames, stdin, resources and names, or by resources and label selector

Deploy Commands:
  rollout        Manage the rollout of a resource
  scale          Set a new size for a Deployment, ReplicaSet, Replication Controller, or Job
  autoscale      Auto-scale a Deployment, ReplicaSet, or ReplicationController

Cluster Management Commands:
  certificate    Modify certificate resources.
  cluster-info   Display cluster info
  top            Display Resource (CPU/Memory/Storage) usage.
  cordon         Mark node as unschedulable
  uncordon       Mark node as schedulable
  drain          Drain node in preparation for maintenance
  taint          Update the taints on one or more nodes

Troubleshooting and Debugging Commands:
  describe       Show details of a specific resource or group of resources
  logs           Print the logs for a container in a pod
  attach         Attach to a running container
  exec           Execute a command in a container
  port-forward   Forward one or more local ports to a pod
  proxy          Run a proxy to the Kubernetes API server
  cp             Copy files and directories to and from containers.
  auth           Inspect authorization

Advanced Commands:
  diff           Diff live version against would-be applied version
  apply          Apply a configuration to a resource by filename or stdin
  patch          Update field(s) of a resource using strategic merge patch
  replace        Replace a resource by filename or stdin
  wait           Experimental: Wait for a specific condition on one or many resources.
  convert        Convert config files between different API versions
  kustomize      Build a kustomization target from a directory or a remote url.

Settings Commands:
  label          Update the labels on a resource
  annotate       Update the annotations on a resource
  completion     Output shell completion code for the specified shell (bash or zsh)

Other Commands:
  api-resources  Print the supported API resources on the server
  api-versions   Print the supported API versions on the server, in the form of "group/version"
  config         Modify kubeconfig files
  plugin         Provides utilities for interacting with plugins.
  version        Print the client and server version information

Usage:
  kubectl [flags] [options]

Use "kubectl <command> --help" for more information about a given command.
Use "kubectl options" for a list of global command-line options (applies to all commands).

####
相關文章
相關標籤/搜索