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). ####