Kubernetes (一般稱爲K8s,K8s是將8個字母「ubernete」替換爲「8」的縮寫) 是用於自動部署、擴展和管理容器化(containerized)應用程序的開源系統。Google設計並捐贈給Cloud Native Computing Foundation(今屬Linux基金會)來使用的。html
它旨在提供「跨主機集羣的自動部署、擴展以及運行應用程序容器的平臺」。它支持一系列容器工具, 包括Docker等。CNCF於2017年宣佈首批Kubernetes認證服務提供商(KCSPs),包含IBM、MIRANTIS、華爲、inwinSTACK迎棧科技等服務商。前端
Kubernetes (希臘語"舵手" 或 "飛行員") 由Joe Beda,Brendan Burns和Craig McLuckie創立,並由其餘谷歌工程師,包括Brian Grant和Tim Hockin進行加盟創做,並由谷歌在2014年首次對外宣佈 。它的開發和設計都深受谷歌的Borg系統的影響,它的許多頂級貢獻者以前也是Borg系統的開發者。在谷歌內部,Kubernetes的原始代號曾經是Seven,即星際迷航中友好的Borg(博格人)角色。Kubernetes標識中舵輪有七個輪輻就是對該項目代號的致意。node
Kubernetes v1.0於2015年7月21日發佈。隨着v1.0版本發佈,谷歌與Linux 基金會合做組建了Cloud Native Computing Foundation (CNCF)並把Kubernetes做爲種子技術來提供。python
Rancher Labs在其Rancher容器管理平臺中包含了Kubernetes的發佈版。Kubernetes也在不少其餘公司的產品中被使用,好比Red Hat在OpenShift產品中,CoreOS的Tectonic產品中, 以及IBM的IBM雲私有產品中。mysql
一、可移植: 支持公有云,私有云,混合雲,多重雲(multi-cloud)nginx
二、可擴展: 模塊化, 插件化, 可掛載, 可組合git
三、自動化: 自動部署,自動重啓,自動複製,自動伸縮/擴展github
四、快速部署應用,快速擴展應用web
五、無縫對接新的應用功能sql
六、節省資源,優化硬件資源的使用
參考文檔:http://docs.kubernetes.org.cn/249.html
Kubernetes定義了一組構建塊,它們能夠共同提供部署、維護和擴展應用程序的機制。組成Kubernetes的組件設計爲鬆耦合和可擴展的,這樣能夠知足多種不一樣的工做負載。可擴展性在很大程度上由Kubernetes API提供——它被做爲擴展的內部組件以及Kubernetes上運行的容器等使用。
Pod
Kubernetes的基本調度單元稱爲「pod」。它能夠把更高級別的抽象內容增長到容器化組件。一個pod通常包含一個或多個容器,這樣能夠保證它們一直位於主機上,而且能夠共享資源。Kubernetes中的每一個pod都被分配一個惟一的(在集羣內的)IP地址這樣就能夠容許應用程序使用端口,而不會有衝突的風險。
Pod能夠定義一個卷,例如本地磁盤目錄或網絡磁盤,並將其暴露在pod中的一個容器之中。pod能夠經過Kubernetes API手動管理,也能夠委託給控制器來管理。
標籤和選擇器
Kubernetes使客戶端(用戶或內部組件)將稱爲「標籤」的鍵值對附加到系統中的任何API對象,如pod和節點。相應地,「標籤選擇器」是針對匹配對象的標籤的查詢。
標籤和選擇器是Kubernetes中的主要分組機制,用於肯定操做適用的組件。
例如,若是應用程序的Pods具備系統的標籤 tier ("front-end", "back-end", for example) 和一個 release_track ("canary", "production", for example),那麼對全部"back-end" 和 "canary" 節點的操做可使用以下所示的標籤選擇器:
tier=back-end AND release_track=canary
控制器
控制器是將實際集羣狀態轉移到所需集羣狀態的對賬循環。它經過管理一組pod來實現。一種控制器是一個「複製控制器」,它經過在集羣中運行指定數量的pod副原本處理複製和縮放。若是基礎節點出現故障,它還能夠處理建立替換pod。
其它控制器,是核心Kubernetes系統的一部分包括一個「DaemonSet控制器」爲每一臺機器(或機器的一些子集)上運行的剛好一個pod,和一個「做業控制器」用於運行pod運行到完成,例如做爲批處理做業的一部分。控制器管理的一組pod由做爲控制器定義的一部分的標籤選擇器肯定。
服務
Kubernetes服務是一組協同工做的pod,就像多層架構應用中的一層。構成服務的pod組經過標籤選擇器來定義。
Kubernetes經過給服務分配靜態IP地址和域名來提供服務發現機制,而且以輪詢調度的方式將流量負載均衡到能與選擇器匹配的pod的IP地址的網絡鏈接上(即便是故障致使pod從一臺機器移動到另外一臺機器)。默認狀況下,一個服務會暴露在集羣中(例如,多個後端pod可能被分組成一個服務,前端pod的請求在它們之間負載平衡);可是,一個服務也能夠暴露在集羣外部(例如,從客戶端訪問前端pod)。
Kubernetes遵循master-slave architecture。Kubernetes的組件能夠分爲管理單個的 node 組件和控制平面的一部分的組件。
Kubernetes Master是集羣的主要控制單元,用於管理其工做負載並指導整個系統的通訊。Kubernetes控制平面由各自的進程組成,每一個組件均可以在單個主節點上運行,也能夠在支持high-availability clusters的多個主節點上運行。
Kubernetes主要由如下幾個核心組件組成:
組件名稱 |
說明 |
etcd |
保存了整個集羣的狀態; |
apiserver |
提供了資源操做的惟一入口,並提供認證、受權、訪問控制、API註冊和發現等機制; |
controller manager |
負責維護集羣的狀態,好比故障檢測、自動擴展、滾動更新等; |
scheduler |
負責資源的調度,按照預約的調度策略將Pod調度到相應的機器上; |
kubelet |
負責維護容器的生命週期,同時也負責Volume(CVI)和網絡(CNI)的管理; |
Container runtime |
負責鏡像管理以及Pod和容器的真正運行(CRI); |
kube-proxy |
負責爲Service提供cluster內部的服務發現和負載均衡; |
核心組件結構圖
除了核心組件,還有一些推薦的Add-ons:
組件名稱 |
說明 |
kube-dns |
負責爲整個集羣提供DNS服務 |
Ingress Controller |
爲服務提供外網入口 |
Heapster |
提供資源監控 |
Dashboard |
提供GUI |
Federation |
提供跨可用區的集羣 |
Fluentd-elasticsearch |
提供集羣日誌採集、存儲與查詢 |
Kubernetes設計理念和功能其實就是一個相似Linux的分層架構,以下圖所示:
分層說明:
分層結構 |
說明 |
|
核心層 |
Kubernetes最核心的功能,對外提供API構建高層的應用,對內提供插件式應用執行環境 |
|
應用層 |
部署(無狀態應用、有狀態應用、批處理任務、集羣應用等)和路由(服務發現、DNS解析等) |
|
管理層 |
系統度量(如基礎設施、容器和網絡的度量),自動化(如自動擴展、動態Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等) |
|
接口層 |
kubectl命令行工具、客戶端SDK以及集羣聯邦 |
|
生態系統 |
在接口層之上的龐大容器集羣管理調度的生態系統,能夠劃分爲兩個範疇 |
|
Kubernetes外部 |
日誌、監控、配置管理、CI、CD、Workflow、FaaS、OTS應用、ChatOps等 |
|
Kubernetes內部 |
CRI、CNI、CVI、鏡像倉庫、Cloud Provider、集羣自身的配置和管理等 |
系統版本說明
[root@k8s-master ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [root@k8s-master ~]# uname -r 3.10.0-327.el7.x86_64 [root@k8s-master ~]# getenforce Disabled [root@k8s-master ~]# systemctl status firewalld.service ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead)
主機IP規劃
主機名 |
IP |
功能 |
k8s-master |
10.0.0.11/172.16.1.11 |
Master、etcd、registry |
k8s-node-1 |
10.0.0.12/172.16.1.12 |
node1 |
k8s-node-2 |
10.0.0.13/172.16.1.13 |
node2 |
設置hosts解析
[root@k8s-master ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 10.0.0.11 k8s-master 10.0.0.12 k8s-node-1 10.0.0.13 k8s-node-2
在三個節點上分別操做
[root@k8s-master ~]# yum install etcd docker kubernetes flannel -y [root@k8s-node-1 ~]# yum install docker kubernetes flannel -y [root@k8s-node-2 ~]# yum install docker kubernetes flannel -y
安裝的軟件版本說明
[root@k8s-master ~]# rpm -qa etcd docker kubernetes flannel flannel-0.7.1-2.el7.x86_64 docker-1.12.6-71.git3e8e77d.el7.centos.1.x86_64 kubernetes-1.5.2-0.7.git269f928.el7.x86_64 etcd-3.2.11-1.el7.x86_64
yum安裝的etcd默認配置文件在/etc/etcd/etcd.conf。
最終配置文件
[root@k8s-master ~]# grep -Ev '^$|#' /etc/etcd/etcd.conf ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379" ETCD_NAME="default" ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.11:2379"
啓動etcd
[root@k8s-master ~]# systemctl enable etcd [root@k8s-master ~]# systemctl start etcd
測試etcd
etcdctl set testdir/testkey0 0 etcdctl set testdir/testkey0 0 [root@k8s-master ~]# etcdctl -C http://10.0.0.11:2379 cluster-health member 8e9e05c52164694d is healthy: got healthy result from http://10.0.0.11:2379 cluster is healthy
/etc/kubernetes/apiserver配置文件內容
[root@k8s-master ~]# grep -Ev '^$|#' /etc/kubernetes/apiserver KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0" KUBE_API_PORT="--port=8080" KUBE_ETCD_SERVERS="--etcd-servers=http://10.0.0.11:2379" KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16" KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota" KUBE_API_ARGS=""
/etc/kubernetes/config配置文件
[root@k8s-master ~]# grep -Ev '^$|#' /etc/kubernetes/config KUBE_LOGTOSTDERR="--logtostderr=true" KUBE_LOG_LEVEL="--v=0" KUBE_ALLOW_PRIV="--allow-privileged=false" KUBE_MASTER="--master=http://10.0.0.11:8080"
啓動服務
systemctl enable kube-apiserver.service systemctl start kube-apiserver.service systemctl enable kube-controller-manager.service systemctl start kube-controller-manager.service systemctl enable kube-scheduler.service systemctl start kube-scheduler.service
/etc/kubernetes/config配置文件
[root@k8s-node-1 ~]# grep -Ev '^$|#' /etc/kubernetes/config KUBE_LOGTOSTDERR="--logtostderr=true" KUBE_LOG_LEVEL="--v=0" KUBE_ALLOW_PRIV="--allow-privileged=false" KUBE_MASTER="--master=http://10.0.0.11:8080" [root@k8s-node-1 ~]# grep -Ev '^$|#' /etc/kubernetes/kubelet KUBELET_ADDRESS="--address=0.0.0.0" KUBELET_HOSTNAME="--hostname-override=10.0.0.12" KUBELET_API_SERVER="--api-servers=http://10.0.0.11:8080" KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest" KUBELET_ARGS=""
/etc/kubernetes/config配置文件
[root@k8s-node-2 ~]# grep -Ev '^$|#' /etc/kubernetes/config KUBE_LOGTOSTDERR="--logtostderr=true" KUBE_LOG_LEVEL="--v=0" KUBE_ALLOW_PRIV="--allow-privileged=false" KUBE_MASTER="--master=http://10.0.0.11:8080" [root@k8s-node-2 ~]# grep -Ev '^$|#' /etc/kubernetes/kubelet KUBELET_ADDRESS="--address=0.0.0.0" KUBELET_HOSTNAME="--hostname-override=10.0.0.13" KUBELET_API_SERVER="--api-servers=http://10.0.0.11:8080" KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest" KUBELET_ARGS=""
啓動
systemctl enable kubelet.service systemctl start kubelet.service systemctl enable kube-proxy.service systemctl start kube-proxy.service
在master上查看集羣中節點及節點狀態
# kubectl -s http://10.0.0.11:8080 get node [root@k8s-master ~]# kubectl -s http://10.0.0.11:8080 get node NAME STATUS AGE 10.0.0.12 Ready 49s 10.0.0.13 Ready 56s [root@k8s-master ~]# kubectl get nodes NAME STATUS AGE 10.0.0.12 Ready 1m 10.0.0.13 Ready 1m
至此Kubernetes基礎部署完成
二進制安裝
kubuadm 安裝
minikube 安裝
ansible部署:https://github.com/gjmzj/kubeasz
安裝軟件包
yum install flannel -y
修改配置文件
[root@k8s-master ~]# grep "^[a-Z]" /etc/sysconfig/flanneld FLANNEL_ETCD_ENDPOINTS="http://10.0.0.11:2379" FLANNEL_ETCD_PREFIX="/atomic.io/network"
Flannel使用Etcd進行配置,來保證多個Flannel實例之間的配置一致性,因此須要在etcd上進行以下配置:(‘/atomic.io/network/config’這個key與上文/etc/sysconfig/flannel中的配置項FLANNEL_ETCD_PREFIX是相對應的,錯誤的話啓動就會出錯)
配置網絡範圍
etcdctl mk /atomic.io/network/config '{ "Network": "172.16.0.0/16" }'
操做建立網絡
[root@k8s-master ~]# etcdctl mk /atomic.io/network/config '{ "Network": "172.16.0.0/16" }' { "Network": "172.16.0.0/16" }
master節點操做
systemctl enable flanneld.service systemctl start flanneld.service service docker restart systemctl restart kube-apiserver.service systemctl restart kube-controller-manager.service systemctl restart kube-scheduler.service
node節點操做
systemctl enable flanneld.service systemctl start flanneld.service service docker restart systemctl restart kubelet.service systemctl restart kube-proxy.service
修改配置文件
[root@k8s-master ~]# cat /etc/kubernetes/apiserver KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0" KUBE_API_PORT="--port=8080" KUBE_ETCD_SERVERS="--etcd-servers=http://10.0.0.11:2379" KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16" KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota" KUBE_API_ARGS=""
至此Flannel網絡配置完成
Pod是K8s集羣中全部業務類型的基礎
Pod是在K8s集羣中運行部署應用或服務的最小單元,它是能夠支持多容器的。
Pod的設計理念是支持多個容器在一個Pod中共享網絡地址和文件系統。
POD控制器Deployment、Job、DaemonSet和PetSet
kubenetes裏面的建立service、rc、pod都是這種形式(另一種是json)
關於yaml參考:http://t.cn/RK0Jlwu
[root@k8s-master ~]# cat /etc/kubernetes/apiserver KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0" KUBE_API_PORT="--port=8080" KUBE_ETCD_SERVERS="--etcd-servers=http://10.0.0.11:2379" KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16" KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota" KUBE_API_ARGS=""
[root@k8s-master ~]# kubectl create -f hello.yaml pod "hello-world" created
查看默認namespace下的pods
[root@k8s-master ~]# kubectl get pods NAME READY STATUS RESTARTS AGE hello-world 0/1 ContainerCreating 0 8s
查看pod的詳細信息
[root@k8s-master ~]# kubectl describe pod hello-world Events: FirstSeen LastSeen Count From SubObjectPath Type Reason Message --------- -------- ----- ---- ------------- -------- ------ ------- 4m 4m 1 {default-scheduler} Normal Scheduled Successfully assigned hello-world to 10.0.0.13 4m 1m 5 {kubelet 10.0.0.13} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "POD" with ErrImagePull: "image pull failed for registry.access.redhat.com/rhel7/pod-infrastructure:latest, this may be because there are no credentials on this request. details: (open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory)" 3m 14s 13 {kubelet 10.0.0.13} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "POD" with ImagePullBackOff: "Back-off pulling image \"registry.access.redhat.com/rhel7/pod-infrastructure:latest\""
該錯誤的解決方法: yum install python-rhsm* -y
獲取指定pods詳細信息
kubectl describe pods yourpodname
獲取已運行pod狀態
kubectl get pods -o wide
下載pod-infrastructure鏡像包
docker tag docker.io/tianyebj/pod-infrastructure:latest registry.access.redhat.com/rhel7/pod-infrastructure:lates
刪除pod,從新建立
[root@k8s-master ~]# kubectl delete -f hello.yaml pod "hello-world" deleted [root@k8s-master ~]# kubectl create -f hello.yaml pod "hello-world" created
查看狀態
[root@k8s-master ~]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE nginx-web 1/1 ImagePullBackOff 0 1m 172.16.53.2 10.0.0.13
RC是K8s集羣中最先的保證Pod高可用的API對象。經過監控運行中的Pod來保證集羣中運行指定數目的Pod副本。指定的數目能夠是多個也能夠是1個;少於指定數目,RC就會啓動運行新的Pod副本;多於指定數目,RC就會殺死多餘的Pod副本。
即便在指定數目爲1的狀況下,經過RC運行Pod也比直接運行Pod更明智,由於RC也能夠發揮它高可用的能力,保證永遠有1個Pod在運行。
[root@k8s-master ~]# kubectl get rc
始終保證有一個在活着
更新rc文件
[root@k8s-master ~]# kubectl replace -f nginx.yml
nginx.yml文件信息
[root@k8s-master ~]# vim nginx.yml apiVersion: v1 kind: Pod metadata: name: nginx-2 spec: restartPolicy: Never containers: - name: nginx image: "docker.io/nginx:latest"
對現有已建立資源直進行修改
[root@k8s-master ~]# kubectl edit rc nginx
能夠調整數量即便生效
RS是新一代RC,提供一樣的高可用能力,區別主要在於RS後來居上,能支持更多中的匹配模式。副本集對象通常不單獨使用,而是做爲部署的理想狀態參數使用。
是K8S 1.2中出現的概念,是RC的升級。通常和Deployment共同使用。
部署表示用戶對K8s集羣的一次更新操做。部署是一個比RS應用模式更廣的API對象,能夠是建立一個新的服務,更新一個新的服務,也能夠是滾動升級一個服務。滾動升級一個服務,實際是建立一個新的RS,而後逐漸將新RS中副本數增長到理想狀態,將舊RS中的副本數減少到0的複合操做;
這樣一個複合操做用一個RS是不太好描述的,因此用一個更通用的Deployment來描述。
以K8s的發展方向,將來對全部長期伺服型的的業務的管理,都會經過Deployment來管理。
Deployment是對RC的升級,與RC的類似度超過90%。
web-rc.yaml文件內容
[root@k8s-master ~]# cat web-rc.yaml apiVersion: v1 kind: ReplicationController metadata: name: myweb spec: replicas: 3 selector: app: myweb template: metadata: labels: app: myweb spec: containers: - name: myweb image: kubeguide/tomcat-app:v1 ports: - containerPort: 8080 env: - name: MYSQL_SERVICE_HOST value: 'mysql' - name: MYSQL_SERVICE_PORT value: '3306'
建立集羣
[root@k8s-master ~]# kubectl create -f web-rc.yaml
對集羣進行升級操做
將集羣內容器自動升級到新版本的容器
[root@k8s-master ~]# kubectl rolling-update myweb -f web-rc2.yaml
web-rc2.yaml配置文件內容
[root@k8s-master ~]# cat web-rc2.yaml apiVersion: v1 kind: ReplicationController metadata: name: myweb-2 spec: replicas: 3 selector: app: myweb-2 template: metadata: labels: app: myweb-2 spec: containers: - name: myweb-2 image: kubeguide/tomcat-app:v2 ports: - containerPort: 8080 env: - name: MYSQL_SERVICE_HOST value: 'mysql' - name: MYSQL_SERVICE_PORT value: '3306'
升級後的回滾
使用新的文件,進行升級操做可達到回滾的目的,參考:https://github.com/kubeguide/samplecode
[root@k8s-master ~]# kubectl rolling-update myweb-2 -f web-rc.yaml
🍢 RC裏包括完整的POD定義模板
🍢 RC經過Label Selector機制實現對POD副本的自動控制。
🍢 經過改變RC裏的POD副本以實現POD的擴容和縮容
🍢 經過改變RC裏POD模塊中的鏡像版本,能夠實現POD的滾動升級。
RC、RS和Deployment只是保證了支撐服務的POD的數量,可是沒有解決如何訪問這些服務的問題。一個Pod只是一個運行服務的實例,隨時可能在一個節點上中止,在另外一個節點以一個新的IP啓動一個新的Pod,所以不能以肯定的IP和端口號提供服務。
要穩定地提供服務須要服務發現和負載均衡能力。服務發現完成的工做,是針對客戶端訪問的服務,找到對應的的後端服務實例。
在K8集羣中,客戶端須要訪問的服務就是Service對象。每一個Service會對應一個集羣內部有效的虛擬IP,集羣內部經過虛擬IP訪問一個服務。
在K8s集羣中微服務的負載均衡是由Kube-proxy實現的。Kube-proxy是K8s集羣內部的負載均衡器。它是一個分佈式代理服務器,在K8s的每一個節點上都有一個;這一設計體現了它的伸縮性優點,須要訪問服務的節點越多,提供負載均衡能力的Kube-proxy就越多,高可用節點也隨之增多。
[root@k8s-master ~]# vim myweb-svc.yaml apiVersion: v1 kind: Service metadata: name: myweb spec: type: NodePort ports: - port: 8080 nodePort: 30001 selector: app: myweb
啓動集羣
[root@k8s-master ~]# kubectl create -f myweb-svc.yaml service "myweb" created [root@k8s-master ~]# kubectl get svc NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes 10.254.0.1 <none> 443/TCP 6h myweb 10.254.247.21 <nodes> 8080:30001/TCP 12s
瀏覽器訪問測試
網訪問node ip 轉到cluster ip上 在進行pod 分發 rr輪詢
kubectl create -f web-svc.yaml [root@k8s-master ~]# kubectl get service NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes 10.254.0.1 <none> 443/TCP 4h myweb 10.254.168.71 <nodes> 8080:30001/TCP 15s
類型 |
說明 |
Node IP |
節點設備的IP,如物理機,虛擬機等容器宿主的實際IP。 |
Pod IP |
Pod 的IP地址,是根據docker0網格IP段進行分配的。 |
Cluster IP |
Service的IP,是一個虛擬IP,僅做用於service對象,由k8s管理和分配,須要結合service port才能使用,單獨的IP沒有通訊功能,集羣外訪問須要一些修改。 |
參考文檔:http://www.cnblogs.com/zhenyuyaodidiao/p/6500897.html
編輯dashboard.yaml,注意或更改如下部分:
image: index.tenxcloud.com/google_containers/kubernetes-dashboard-amd64:v1.4.1 args: - --apiserver-host=http://10.0.0.11:8080
編輯dashboardsvc.yaml文件:
apiVersion: v1 kind: Service metadata: name: kubernetes-dashboard namespace: kube-system labels: k8s-app: kubernetes-dashboard kubernetes.io/cluster-service: "true" spec: selector: k8s-app: kubernetes-dashboard ports: - port: 80 targetPort: 9090
在dashboard.yaml中定義了dashboard所用的鏡像
gcr.io/google_containers/kubernetes-dashboard-amd64:v1.5.1(固然你能夠選擇其餘的版本)
下載地址
docker pull registry.cn-hangzhou.aliyuncs.com/google-containers/kubernetes-dashboard-amd64:v1.4.1
在master執行以下命令:
kubectl create -f dashboard.yaml kubectl create -f dashboardsvc.yaml
到此dashboard搭建完成
命令驗證,master上執行以下命令:
[root@k8s-master ~]# kubectl get deployment --all-namespaces NAMESPACE NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE kube-system kubernetes-dashboard-latest 1 1 1 1 42m [root@k8s-master ~]# kubectl get svc --all-namespaces NAMESPACE NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE default kubernetes 10.254.0.1 <none> 443/TCP 5h default myweb 10.254.168.71 <nodes> 8080:30001/TCP 1h kube-system kubernetes-dashboard 10.254.90.78 <none> 80/TCP 41m [root@k8s-master ~]# kubectl get pod -o wide --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE default myweb-c2dfj 1/1 Running 0 1h 172.16.57.2 10.0.0.13 default myweb-h7rkb 1/1 Running 0 1h 172.16.76.2 10.0.0.12 default myweb-l48b3 1/1 Running 0 1h 172.16.57.3 10.0.0.13 kube-system kubernetes-dashboard-latest-1395490986-1t37v 1/1 Running 0 43m 172.16.76.3 10.0.0.12
在master上執行:
kubectl delete deployment kubernetes-dashboard-latest --namespace=kube-system kubectl delete svc kubernetes-dashboard --namespace=kube-system