如何部署一個Kubernetes集群

2020-12-16 TechWeb

 

原文連結:https://mp.weixin.qq.com/s/MFSvDWtue4YruFV3jyLQVw

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

1、系統環境準備

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

要求64位Linux作業系統,且內核版本要求3.10及以上,能滿足安裝Docker項目所需的要求; 機器之間要保持網絡互通,這是未來容器之間網絡互通的前提條件; 要有外網訪問權限,因為部署的過程中需要拉取相應的鏡像,要求能夠訪問到gcr.io、quay.io這兩個dockerregistry,因為有小部分鏡像需要從這裡拉取; 單機可用資源建議2核CPU、8G內存或以上,如果小一點也可以但是能調度的Pod數量就比較有限了; 磁碟空間要求在30GB以上,主要用於存儲Docker鏡像及相關日誌文件;

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

2核CPU、2GB內存,30GB的磁碟空間; Unbantu 20.04 LTS的Sever版本,其Linux內核為5.4.0; 內網互通,外網訪問權限不受控制;

2、Kubeadm一鍵部署工具簡介

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

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

3、安裝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 

4、部署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    

解決鏡像拉取問題後再次執行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節點的網絡尚未部署就緒。

5、部署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 ' ') 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的,需要通過額外的操作進行調整,感興趣的朋友可以自己查閱下其他資料。

6、部署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      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       7h52m   v1.18.4 kubernetesnode01   Ready    master   37h     v1.18.4 

可以看到此時Worker節點的狀態已經變成「Ready」,不過細心的讀者可能會發現Worker節點的ROLES並不像Master節點那樣顯示「master」而是顯示了,這是因為新安裝的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集群功能!

7、部署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            8000/TCP   13h kubernetes-dashboard        ClusterIP   10.111.30.214           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容器編排技術有所幫助!

 

相關焦點

  • 如何在 Kubernetes 上配置 Jenkins?
    作為一款被廣泛使用的開源CI伺服器,Jenkins提供了數百個插件,能夠為我們項目的構建、部署和自動化提供有力支持。接下來,我們將:1.使用minikube創建一個Kubernetes集群(這步不是必須的,如果你已經有Kubernetes集群了的話,可以跳過這一步)。2.為Jenkins創建命名空間和持久卷。
  • Kind + Docker 一鍵部署K8s集群
    docker學習和實踐都很容易,但是K8S的由於集群化,部署需要較多的機器,環境搭建學習實踐比較費勁這一度影響了K8S技術的普及。所以業界也除了一些簡易版的K8s集群環境,比如K3S(5 less than k8s),本文蟲蟲給大家介紹也是這樣一個項目Kind,一鍵部署的單機K8S環境,可以用於學習、本地開發和CI環境。
  • 如何利用Kubernetes部署並管理XSKY SDS?
    我們來詳細說明下如何利用Kubernetes來定義XSKY SDS集群,讓部署對接變得更簡單。 下面我們來看一個簡單的CRD實例, 下面代碼塊是一個CRD的定義:
  • 春眠不覺曉,Kubernetes知多少
    眾所周知,容器本身也是貨櫃的意思,而輪船運輸貨櫃需要舵手來操作,所以也可以認為Kubernetes它本身定位於容器的一個調度者。不過我們也常常看到很多從業者將kubernetes叫做k8s,據說是因為Kubernetes這個單詞太長,不容易記,而首字母和尾字母中間正好有8個字母,所以也就簡寫成了K8s。
  • 2020版Kubernetes快速上手指南,讓你所見即所得
    提醒:安裝過程中遇到問題時,可參考文末「常見問題」章節網絡配置kubernetes 網絡模型核心為三點每個 Pod 都擁有一個獨立 IP 地址;(注意:需要域名訪問)應用部署如果一切沒問題,接下來就可以用搭建的群集進行應用部署啦!
  • 每天5分鐘|輕鬆掌握開發工作中必會的k8s-k8s安裝與部署
    上一章我們介紹了k8s的核心組件,了解了這些,我們就可以開始k8s的安裝和部署了。來吧,動手吧!準備好兩伺服器(系統是centos7.3),分別作為matser和node,如下:要讓k8s能夠管理我們的集群,需要在所有的節點上面分別安裝k8s的組件。在安裝之前,需要在兩臺節點上做如下的操作。
  • 親測好用的Kubernetes&DevOps工具!
    Amazon Elastic Container Service是一個Kubernetes DevOps工具,它允許用戶管理和擴展他們的容器化應用程式,並使用Kubernetes簡化部署。 2、Kubespray KubeSpray是一個集群生命周期管理器,可以幫助部署可用於生產的Kubernetes集群。它使用ansible-playbook來自動化Kubernetes集群配置。
  • 《蹲坑學kubernetes》之四:了解Kubernetes安裝部署方式
    常見的安裝部署方式有很多,在這裡主要了解以下三種:一、安裝 MinikubeMinikube是由Kubernetes社區維護的單機版的Kubernetes集群,支持MacOS, Linux, and Windows等多種作業系統平臺,使用最新的官方stable版本,並支持Kubernetes的大部分功能
  • Kubernetes 應用程式部署工具概覽
    在應用程式部署中,一個流行的方式是持續部署和GitOps的組合:每次更改原始碼後自動部署資源。為了使你能夠使用 GitOps 將應用程式部署到 Kubernetes,你需要做幾件事: 容器鏡像構建,用於將原始碼和本地依賴項構建到容器鏡像中。 資源模板,為你的環境自定義部署資源。
  • Kubernetes的Local Persistent Volumes使用小記
    Persistent Volumes文中將Local Persistent Volumes簡稱為Local PV;Kubernetes的Local PV自1.7版本進行alpha發布,在1.10版本beta發布,最終的正式發布(General Availability)是在1.14版本;一個
  • 幾張圖解釋明白 Kubernetes Ingress
    同樣本文我們希望用一個簡單清晰的概述,讓你來了解 Kubernetes Ingress 背後的東西,讓你更容易理解使用的 Ingress。 我們可以使用 Ingress 來使內部服務暴露到集群外部去,它為你節省了寶貴的靜態 IP,因為你不需要聲明多個 LoadBalancer 服務了,此次,它還可以進行更多的額外配置。
  • Kubernetes 將棄用 Docker - OSCHINA - 中文開源技術交流社區
    但 Docker 作為容器鏡像構建工具的作用將不受影響,用其構建的容器鏡像將一如既往地在集群中與所有容器運行時正常運轉。官方解釋稱,Docker 作為一個完整的容器技術堆棧,在其創建之初就不是為了將其嵌入 Kubernetes 而設計的。
  • 《蹲坑學K8S》之22-2:Kubernetes授權機制
    Kubernetes授權主要是用於對集群資源的訪問控制,通過檢查請求包含的相關屬性值,與相對應的訪問策略相比較,API請求必須滿足某些策略才能被處理。跟認證類似,Kubernetes 也支持多種授權機制,並支持同時開啟多個授權插件(只要有一個驗證通過即可)。
  • 簡化公有雲K3s部署體驗,Rancher開源自動化工具AutoK3s
    2020年10月26日,業界應用最為廣泛的Kubernetes管理平臺創建者Rancher Labs(以下簡稱Rancher)正式發布並開源K3s自動化工具項目AutoK3s, 一款用於幫助用戶在多個雲供應商上快速創建和管理K8S集群的輕量級工具,可以極大地簡化並提升公有雲用戶的部署體驗
  • 教你一次性成功安裝K8S集群(基於一主兩從模式)
    這不,這次,我總結了如何一次性成功安裝K8S集群的方法。我們今天先來說說如何基於一主兩從模式搭建K8S集群。後面,我們再上如何完全無坑搭建K8S高可用集群的方案。1.查看伺服器作業系統版本cat /etc/redhat-release 安裝Docker和K8S集群的伺服器作業系統版本需要在CentOS 7以上。2.查看伺服器的主機名hostname 注意:集群中伺服器的主機名不能是localhost。
  • 用於Kubernetes的Linux作業系統指南
    你已經了解過Kubernetes了(或正在考慮探索一些Kubernetes部署)。了解它有很多很好的理由,你可能已經很清楚,Kubernetes是負責管理容器,將工作負載調度到集群上,處理可伸縮性和冗餘,自動執行滾動(更新)和回滾。
  • 機器學習平臺在Kubernetes上的實踐
    現將物理機集中起來,並構建成一個Kubernetes集群。通過分析算法同事以往的工作方式,機器學習平臺(GoblinLab)決定嘗試基於Kubernetes提供在線的開發調試容器環境以及任務的容器化調度兩種方案,其分別針對任務開發和任務調度兩種場景。
  • 使用Kubernetes 和 Jenkins 創建一個 CI/CD 流水線
    代碼中的每次改動一旦推送至版本控制系統,進行測試,然後在部署到用戶使用的生產環境之前部署至預生產/UAT 環境進行進一步的測試。自動化確保了整體流程的快速,可信賴,可重複,以及不容易出錯。所以,什麼是 CI/CD 呢?關於這個主題已經有著作撰寫完畢。如何,為什麼,以及什麼時候在你的架構中使用。