如何部署一個 Kubernetes 集羣

來源 | 無敵碼農

責編 | 寇雪芹

在本篇文章中,我以在 Mac 筆記本中安裝兩臺 Ubantu 系統的方式,演示如何部署一套具備一個控制節點 (Master) 和一個計算節點 (Worker) 的 Kubernetes 學習集羣。

系統環境準備

要安裝部署 Kubernetes 集羣,首先需要準備機器,最直接的辦法可以到公有云(如阿里雲等)申請幾臺虛擬機。而如果條件允許,拿幾臺本地物理服務器來組建集羣自然是最好不過了。但是這些機器需要滿足以下幾個條件:

在本次實驗中由於條件有限,我是在 Mac 筆記本上通過虛擬軟件準備了兩臺虛擬機,其具體配置如下:

Kubeadm 一鍵部署工具簡介

作爲典型的分佈式系統,Kubernetes 的部署一直是困擾初學者進入 Kubernetes 世界的一大障礙。在發佈早期 Kubernetes 的部署主要依賴於社區維護的各種腳本,但這其中會涉及二進制編譯、配置文件以及 kube-apiserver 授權配置文件等諸多運維工作。目前各大雲服務廠商常用的 Kubernetes 部署方式是使用 SaltStack、Ansible 等運維工具自動化地執行這些繁瑣的步驟,但即使這樣,這個部署的過程對於初學者來說依然是非常繁瑣的。

正是基於這樣的痛點,在志願者的推動下 Kubernetes 社區終於發起了 kubeadm 這一獨立的一鍵部署工具,使用 kubeadm 我們可以通過幾條簡單的指令來快速地部署一個 kubernetes 集羣。後面的內容,就將具體演示如何使用 kubeadm 來部署一個 Kubernetes 集羣。

安裝 Kubeadm 及 Docker 環境

在準備的兩臺虛擬機中,分別安裝 Kubeadm 部署工具及 Docker 環境。步驟如下:

1)、編輯操作系統安裝源配置文件,添加 kubernetes 鏡像源,命令如下:

#添加Kubernetes官方鏡像源apt-key
root@kubenetesnode01:~#curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
#添加Kubernetes官方鏡像源地址
root@kubernetesnode01:~# vim /etc/apt/sources.list
#add kubernetes source
deb http://apt.kubernetes.io/ kubernetes-xenial main

上述操作添加的是 kubernetes 的官方鏡像源,如果 apt.kubernetes.io 因爲網絡原因訪問不到,也可以換成國內 Ubantu 鏡像源,如阿里雲鏡像源地址:

#添加阿里雲Kubernetes鏡像源apt-key
root@kubenetesnode01:~# curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
#添加阿里雲Kubernetes鏡像源地址
root@kubernetesnode01:~# vim /etc/apt/sources.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main

2)、鏡像源添加後更新 apt 資源列表,命令如下:

root@kubernetesnode01:~# apt-get update
Hit:1 http://cn.archive.ubuntu.com/ubuntu focal InRelease
Hit:2 http://cn.archive.ubuntu.com/ubuntu focal-updates InRelease
Hit:3 http://cn.archive.ubuntu.com/ubuntu focal-backports InRelease
Hit:4 http://cn.archive.ubuntu.com/ubuntu focal-security InRelease
Get:5 https://packages.cloud.google.com/apt kubernetes-xenial InRelease [8,993 B]
Get:6 https://packages.cloud.google.com/apt kubernetes-xenial/main amd64 Packages [37.7 kB]
Fetched 46.7 kB in 7s (6,586 B/s)
Reading package lists... Done

3)、完成上述 2 步後就可以通過 apt-get 命令安裝 kubeadm 了,如下:

root@kubernetesnode01:~# apt-get install -y docker.io kubeadm
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
bridge-utils cgroupfs-mount conntrack containerd cri-tools dns-root-data dnsmasq-base ebtables kubectl kubelet kubernetes-cni libidn11 pigz runc socat ubuntu-fan
....

這裏直接使用 Ubantu 的 docker.io 安裝源。在上述安裝 kubeadm 的過程中,kubeadm 和 kubelet、kubectl、kubernetes-cni 這幾個 kubernetes 核心組件的二進制文件都會被自動安裝好。

4)、Docker 服務啓動及限制修改

完成上述步驟側操作後,系統中會自動安裝 Docker 引擎,但是在具體運行 kubernetes 部署之前需要對 Docker 的配置信息進行一些調整。

首先,編輯系統 / etc/default/grub 文件,在配置項 GRUB_CMDLINE_LINUX 中添加如下參數:

GRUB_CMDLINE_LINUX=" cgroup_enable=memory swapaccount=1"

完成編輯後保存執行如下命令,並重啓服務器,命令如下:

root@kubernetesnode01:/opt/kubernetes-config# update-grub
root@kubernetesnode01:/opt/kubernetes-config# reboot

上述修改主要解決的是可能出現的 “docker 警告 WARNING: No swap limit support” 問題。

其次,編輯創建 / etc/docker/daemon.json 文件,添加如下內容:

{
  "exec-opts"["native.cgroupdriver=systemd"]
}

完成保存後執行重啓 Docker 命令,如下:

root@kubernetesnode01:/opt/kubernetes-config# systemctl restart docker

此時可以查看 Docker 的 Cgroup 信息,如下:

root@kubernetesnode01:/opt/kubernetes-config# docker info | grep Cgroup
 Cgroup Driver: systemd

上述修改主要解決的是 “Dockercgroup driver. The recommended driver is "systemd"” 的問題。需要強調的是以上修改只是作者在具體安裝操作是遇到的具體問題的解決整理,如在實踐過程中遇到其他問題還需要自行查閱相關資料!

最後,需要注意由於 kubernetes 禁用虛擬內存,所以要先關閉掉 swap 否則就會在 kubeadm 初始化 kubernetes 的時候報錯,具體如下:

root@kubernetesnode01:/opt/kubernetes-config# swapoff -a

該命令只是臨時禁用 swap,如要保證系統重啓後仍然生效則需要 “edit /etc/fstab” 文件,並註釋掉 swap 那一行。

完成以上操作後啓動系統 Docker 服務,命令如下:

root@kubenetesnode02:~# systemctl enable docker.service

部署 Kubernetes 的 Master 節點

在 Kubernetes 中 Master 節點是集羣的控制節點,它是由三個緊密協作的獨立組件組合而成,分別是負責 API 服務的 kube-apiserver、負責調度的 kube-scheduler 以及負責容器編排的 kube-controller-manager,其中整個集羣的持久化數據由 kube-apiserver 處理後保存在 Etcd 中。

要部署 Master 節點可以直接通過 kubeadm 進行一鍵部署,但這裏我們希望能夠部署一個相對完整的 Kubernetes 集羣,可以通過配置文件來開啓一些實驗性的功能。具體在系統中新建 / opt/kubernetes-config / 目錄,並創建一個給 kubeadm 用的 YAML 文件(kubeadm.yaml),具體內容如下:

apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
controllerManager:
 extraArgs:
     horizontal-pod-autoscaler-use-rest-clients: "true"
     horizontal-pod-autoscaler-sync-period: "10s"
     node-monitor-grace-period: "10s"
apiServer:
  extraArgs:
     runtime-config: "api/all=true"
kubernetesVersion: "v1.18.1"

在上述 yaml 配置文件中 “horizontal-pod-autoscaler-use-rest-clients: "true"” 這個配置,表示將來部署的 kuber-controller-manager 能夠使用自定義資源(CustomMetrics)進行自動水平擴展,感興趣的讀者可以自行查閱相關資料!而 “v1.18.1” 就是要 kubeadm 幫我們部署的 Kubernetes 版本號。

需要注意的是,如果執行過程中由於國內網絡限制問題導致無法下載相應的 Docker 鏡像,可以根據報錯信息在國內網站(如阿里雲)上找到相關鏡像,然後再將這些鏡像重新 tag 之後再進行安裝。具體如下:

#從阿里雲Docker倉庫拉取Kubernetes組件鏡像
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver-amd64:v1.18.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager-amd64:v1.18.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler-amd64:v1.18.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:v1.18.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd-amd64:3.4.3-0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.7

下載完成後再將這些 Docker 鏡像重新 tag 下,具體命令如下:

#重新tag鏡像
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.7 k8s.gcr.io/coredns:1.6.7
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd-amd64:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler-amd64:v1.18.1 k8s.gcr.io/kube-scheduler:v1.18.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager-amd64:v1.18.1 k8s.gcr.io/kube-controller-manager:v1.18.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver-amd64:v1.18.1 k8s.gcr.io/kube-apiserver:v1.18.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:v1.18.1 k8s.gcr.io/kube-proxy:v1.18.1

此時通過 Docker 命令就可以查看到這些 Docker 鏡像信息了,命令如下:

root@kubernetesnode01:/opt/kubernetes-config# docker images
REPOSITORY                                                                          TAG                 IMAGE ID            CREATED             SIZE
k8s.gcr.io/kube-proxy                                                               v1.18.1             4e68534e24f6        2 months ago        117MB
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64                v1.18.1             4e68534e24f6        2 months ago        117MB
k8s.gcr.io/kube-controller-manager                                                  v1.18.1             d1ccdd18e6ed        2 months ago        162MB
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager-amd64   v1.18.1             d1ccdd18e6ed        2 months ago        162MB
k8s.gcr.io/kube-apiserver                                                           v1.18.1             a595af0107f9        2 months ago        173MB
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver-amd64            v1.18.1             a595af0107f9        2 months ago        173MB
k8s.gcr.io/kube-scheduler                                                           v1.18.1             6c9320041a7b        2 months ago        95.3MB
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler-amd64            v1.18.1             6c9320041a7b        2 months ago        95.3MB
k8s.gcr.io/pause                                                                    3.2                 80d28bedfe5d        4 months ago        683kB
registry.cn-hangzhou.aliyuncs.com/google_containers/pause                           3.2                 80d28bedfe5d        4 months ago        683kB
k8s.gcr.io/coredns                                                                  1.6.7               67da37a9a360        4 months ago        43.8MB
registry.cn-hangzhou.aliyuncs.com/google_containers/coredns                         1.6.7               67da37a9a360        4 months ago        43.8MB
k8s.gcr.io/etcd                                                                     3.4.3-0             303ce5db0e90        8 months ago        288MB
registry.cn-hangzhou.aliyuncs.com/google_containers/etcd-amd64                      3.4.3-0             303ce5db0e90        8 months ago        288MB

解決鏡像拉取問題後再次執行 kubeadm 部署命令就可以完成 Kubernetes Master 控制節點的部署了,具體命令及執行結果如下:

root@kubernetesnode01:/opt/kubernetes-config# kubeadm init --config kubeadm.yaml --v=5
...
Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 10.211.55.6:6443 --token jfulwi.so2rj5lukgsej2o6 \
    --discovery-token-ca-cert-hash sha256:d895d512f0df6cb7f010204193a9b240e8a394606090608daee11b988fc7fea6

從上面部署執行結果中可以看到,部署成功後 kubeadm 會生成如下指令:

kubeadm join 10.211.55.6:6443 --token d35pz0.f50zacvbdarqn2vi \
    --discovery-token-ca-cert-hash sha256:58958a3bf4ccf4a4c19b0d1e934e77bf5b5561988c2274364aaadc9b1747141d

這個 kubeadm join 命令就是用來給該 Master 節點添加更多 Worker(工作節點) 的命令,後面具體部署 Worker 節點的時候將會使用到它。此外,kubeadm 還會提示我們第一次使用 Kubernetes 集羣所需要配置的命令:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

而需要這些配置命令的原因在於 Kubernetes 集羣默認是需要加密方式訪問的,所以這幾條命令就是將剛纔部署生成的 Kubernetes 集羣的安全配置文件保存到當前用戶的. kube 目錄, 之後 kubectl 會默認使用該目錄下的授權信息訪問 Kubernetes 集羣。如果不這麼做的化,那麼每次通過集羣就都需要設置 “export KUBE CONFIG 環境變量” 來告訴 kubectl 這個安全文件的位置。

執行完上述命令後,現在我們就可以使用 kubectlget 命令來查看當前 Kubernetes 集羣節點的狀態了,執行效果如下:

root@kubernetesnode01:/opt/kubernetes-config# kubectl get nodes
NAME               STATUS     ROLES    AGE   VERSION
kubernetesnode01   NotReady   master   35m   v1.18.4

在以上命令輸出的結果中可以看到 Master 節點的狀態爲 “NotReady”,爲了查找具體原因可以通過“kuberctl describe” 命令來查看下該節點(Node)對象的詳細信息,命令如下:

root@kubernetesnode01:/opt/kubernetes-config# kubectl describe node kubernetesnode01

該命令可以非常詳細地獲取節點對象的狀態、事件等詳情,這種方式也是調試 Kubernetes 集羣時最重要的排查手段。根據顯示的如下信息:

...
Conditions
...
Ready False... KubeletNotReady runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
...

可以看到節點處於 “NodeNotReady” 的原因在於尚未部署任何網絡插件,爲了進一步驗證着一點還可以通過 kubectl 檢查這個節點上各個 Kubernetes 系統 Pod 的狀態,命令及執行效果如下:

root@kubernetesnode01:/opt/kubernetes-config# kubectl get pods -n kube-system
NAME                                       READY   STATUS    RESTARTS   AGE
coredns-66bff467f8-l4wt6                   0/1     Pending   0          64m
coredns-66bff467f8-rcqx6                   0/1     Pending   0          64m
etcd-kubernetesnode01                      1/1     Running   0          64m
kube-apiserver-kubernetesnode01            1/1     Running   0          64m
kube-controller-manager-kubernetesnode01   1/1     Running   0          64m
kube-proxy-wjct7                           1/1     Running   0          64m
kube-scheduler-kubernetesnode01            1/1     Running   0          64m

命令中 “kube-system” 表示的是 Kubernetes 項目預留的系統 Pod 空間(Namespace),需要注意它並不是 Linux Namespace,而是 Kuebernetes 劃分的不同工作空間單位。回到命令輸出結果,可以看到 coredns 等依賴於網絡的 Pod 都處於 Pending(調度失敗)的狀態,這樣說明了該 Master 節點的網絡尚未部署就緒。

部署 Kubernetes 網絡插件

前面部署 Master 節點中由於沒有部署網絡插件,所以節點狀態顯示 “NodeNotReady” 狀態。接下來的內容我們就來具體部署下網絡插件。在 Kubernetes“一切皆容器”的設計理念指導下,網絡插件也會以獨立 Pod 的方式運行在系統中,所以部署起來也很簡單隻需要執行 “kubectl apply” 指令即可,例如以 Weave 網絡插件爲例:

root@kubernetesnode01:/opt/kubernetes-config# kubectl apply -f https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')
serviceaccount/weave-net created
clusterrole.rbac.authorization.k8s.io/weave-net created
clusterrolebinding.rbac.authorization.k8s.io/weave-net created
role.rbac.authorization.k8s.io/weave-net created
rolebinding.rbac.authorization.k8s.io/weave-net created
daemonset.apps/weave-net created

部署完成後通過 “kubectl get” 命令重新檢查 Pod 的狀態:

root@kubernetesnode01:/opt/kubernetes-config# kubectl get pods -n kube-system
NAME                                       READY   STATUS    RESTARTS   AGE
coredns-66bff467f8-l4wt6                   1/1     Running   0          116m
coredns-66bff467f8-rcqx6                   1/1     Running   0          116m
etcd-kubernetesnode01                      1/1     Running   0          116m
kube-apiserver-kubernetesnode01            1/1     Running   0          116m
kube-controller-manager-kubernetesnode01   1/1     Running   0          116m
kube-proxy-wjct7                           1/1     Running   0          116m
kube-scheduler-kubernetesnode01            1/1     Running   0          116m
weave-net-746qj

可以看到,此時所有的系統 Pod 都成功啓動了,而剛纔部署的 Weave 網絡插件則在 kube-system 下面新建了一個名叫 “weave-net-746qj” 的 Pod,而這個 Pod 就是容器網絡插件在每個節點上的控制組件。

到這裏,Kubernetes 的 Master 節點就部署完成了,如果你只需要一個單節點的 Kubernetes,那麼現在就可以使用了。但是在默認情況下,Kubernetes 的 Master 節點是不能運行用戶 Pod 的,需要通過額外的操作進行調整,感興趣的朋友可以自己查閱下其他資料。

部署 Kubernetes 的 Worker 節點

爲了構建一個完整的 Kubernetes 集羣,這裏還需要繼續介紹如何部署 Worker 節點。實際上 Kubernetes 的 Worker 節點和 Master 節點幾乎是相同的,它們都運行着一個 kubelet 組件,主要的區別在於 “kubeadm init” 的過程中,kubelet 啓動後,Master 節點還會自動啓動 kube-apiserver、kube-scheduler 及 kube-controller-manager 這三個系統 Pod。

在具體部署之前與 Master 節點一樣,也需要在所有 Worker 節點上執行前面 “安裝 kubeadm 及 Decker 環境” 小節中的所有步驟。之後在 Worker 節點執行部署 Master 節點時生成的 “kubeadm join” 指令即可,具體如下:

root@kubenetesnode02:~# kubeadm join 10.211.55.6:6443 --token jfulwi.so2rj5lukgsej2o6     --discovery-token-ca-cert-hash sha256:d895d512f0df6cb7f010204193a9b240e8a394606090608daee11b988fc7fea6 --v=5

...
This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

完成集羣加入後爲了便於在 Worker 節點執行 kubectl 相關命令,需要進行如下配置:

#創建配置目錄
root@kubenetesnode02:~# mkdir -p $HOME/.kube
#將Master節點中$/HOME/.kube/目錄中的config文件拷貝至Worker節點對應目錄
root@kubenetesnode02:~# scp root@10.211.55.6:$HOME/.kube/config $HOME/.kube/
#權限配置
root@kubenetesnode02:~# sudo chown $(id -u):$(id -g) $HOME/.kube/config

之後可以在 Worker 或 Master 節點執行節點狀態查看命令 “kubectl get nodes”,具體如下:

root@kubernetesnode02:~# kubectl get nodes
NAME               STATUS     ROLES    AGE   VERSION
kubenetesnode02    NotReady   <none>   33m   v1.18.4
kubernetesnode01   Ready      master   29h   v1.18.4

通過節點狀態顯示此時 Work 節點還處於 NotReady 狀態,具體查看節點描述信息如下:

root@kubernetesnode02:~# kubectl describe node kubenetesnode02
...
Conditions:
...
Ready False ... KubeletNotReady runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
...

根據描述信息,發現 Worker 節點 NotReady 的原因也在於網絡插件沒有部署,繼續執行 “部署 Kubernetes 網絡插件” 小節中的步驟即可。但是要注意部署網絡插件時會同時部署 kube-proxy,其中會涉及從 k8s.gcr.io 倉庫獲取鏡像的動作,如果無法訪問外網可能會導致網絡部署異常,這裏可以參考前面安裝 Master 節點時的做法,通過國內鏡像倉庫下載後通過 tag 的方式進行標記,具體如下:

root@kubenetesnode02:~# docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:v1.18.1
root@kubenetesnode02:~# docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy-amd64:v1.18.1 k8s.gcr.io/kube-proxy:v1.18.1

如若一切正常,則繼續查看節點狀態,命令如下:

root@kubenetesnode02:~# kubectl get node
NAME               STATUS   ROLES    AGE     VERSION
kubenetesnode02    Ready    <none>   7h52m   v1.18.4
kubernetesnode01   Ready    master   37h     v1.18.4

可以看到此時 Worker 節點的狀態已經變成 “Ready”,不過細心的讀者可能會發現 Worker 節點的 ROLES 並不像 Master 節點那樣顯示“master” 而是顯示了 < none>,這是因爲新安裝的 Kubernetes 環境 Node 節點有時候會丟失 ROLES 信息,遇到這種情況可以手工進行添加,具體命令如下:

root@kubenetesnode02:~# kubectl label node kubenetesnode02 node-role.kubernetes.io/worker=worker

再次運行節點狀態命令就能看到正常的顯示了,命令效果如下:

root@kubenetesnode02:~# kubectl get node
NAME               STATUS   ROLES    AGE   VERSION
kubenetesnode02    Ready    worker   8h    v1.18.4
kubernetesnode01   Ready    master   37h   v1.18.4

到這裏就部署完成了具有一個 Master 節點和一個 Worker 節點的 Kubernetes 集羣了,作爲實驗環境它已經具備了基本的 Kubernetes 集羣功能。

部署 Dashboard 可視化插件

在 Kubernetes 社區中,有一個很受歡迎的 Dashboard 項目,它可以給用戶一個可視化的 Web 界面來查看當前集羣中的各種信息。該插件也是以容器化方式進行部署,操作也非常簡單,具體可在 Master、Worker 節點或其他能夠安全訪問 Kubernetes 集羣的 Node 上進行部署,命令如下:

root@kubenetesnode02:~# kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.3/aio/deploy/recommended.yaml

部署完成後就可以查看 Dashboard 對應的 Pod 運行狀態,執行效果如下:

root@kubenetesnode02:~# kubectl get pods -n kubernetes-dashboard
NAME                                         READY   STATUS    RESTARTS   AGE
dashboard-metrics-scraper-6b4884c9d5-xfb8b   1/1     Running   0          12h
kubernetes-dashboard-7f99b75bf4-9lxk8        1/1     Running   0          12h

除此之外還可以查看 Dashboard 的服務(Service)信息,命令如下:

root@kubenetesnode02:~# kubectl get svc -n kubernetes-dashboard
NAME                        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
dashboard-metrics-scraper   ClusterIP   10.97.69.158    <none>        8000/TCP   13h
kubernetes-dashboard        ClusterIP   10.111.30.214   <none>        443/TCP    13h

需要注意的是,由於 Dashboard 是一個 Web 服務,從安全角度出發 Dashboard 默認只能通過 Proxy 的方式在本地訪問。具體方式爲在本地機器安裝 kubectl 管理工具,並將 Master 節點 $HOME/.kube / 目錄中的 config 文件拷貝至本地主機相同目錄,之後運行 “kubectl proxy” 命令,如下:

qiaodeMacBook-Pro-2:.kube qiaojiang$ kubectl proxy
Starting to serve on 127.0.0.1:8001

本地 proxy 代理啓動後,訪問 Kubernetes Dashboard 地址,具體如下:

http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

如果訪問正常,就會看到相應的界面。

上就是 Kubernetes 基本集羣的搭建方式,希望能對你學習 Kubernetes 容器編排技術有所幫助!

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/NpAiYVEiEuQSiDmD7wF5Xg