本文使用「署名 4.0 國際 (CC BY 4.0)」許可協議,歡迎轉載、或從新修改使用,但須要註明來源。 署名 4.0 國際 (CC BY 4.0)html
本文做者: 蘇洋node
建立時間: 2018年10月03日 統計字數: 28480字 閱讀時間: 57分鐘閱讀 本文連接: soulteary.com/2018/10/03/…linux
一直以來由於機器資源捉襟見肘,使用 GitLab CI
配合 compose
完成了多數自動化構建和部署的事情,可是隨着運行服務愈來愈多,管理一大堆 docker-compose.yml
和服務的成本也變的愈來愈高。git
做爲一個懶人,購置了一臺頂配的 ELite Desk G4 800
來做爲資源,計劃搭建 K8S
配合 GitLab 的 Auto DevOps
做爲接下來使用的方案。github
網上關於 K8S
的搭建使用有不少,可是多數都是基於 CentOS
、二進制包的教程,太過陳舊和麻煩。docker
並且在操做過程當中,基本都是一路 Next
,缺乏調試驗證,本篇以一個 K8S
新手視角,介紹如何快速搭建一套開發可用的 mini 集羣。編程
我這裏計劃建立一個單 Master 雙子節點的集羣。json
Kubeadm
做爲官方推出的 K8S
工具箱,旨在協助開發者可以快速 搭建
和 使用
Kubernetes 的各類核心功能,包括:bootstrap
master
節點worker
節點,並加入 master
節點,組成集羣token
想要了解更多,能夠查看官方文檔 。ubuntu
爲了簡化操做和維護成本,本次集羣的搭建就使用它來進行。不過相比較手動配置的靈活,kubeadm
目前存在一些限制,好比它僅支持部分版本的操做系統,參考官方文檔:開始安裝 kubeadm 以前。
並且每臺主機或者虛擬機至少要分配 2核心
和 2GB
的內存。
我這裏使用的資源是三臺 2核心4GB
的虛擬機,操做系統爲 ubuntu
,爲了使用 docker
官方的軟件包,我將系統版本選擇爲 16.04
。
我在這裏對這三臺機器分別進行了命名和固定IP分配:
在開始搭建集羣以前,咱們須要先進行一些基礎環境的配置。
接下來的操做,包含大量的 ssh 操做,爲了不麻煩,能夠將你的用戶祕鑰添加到遠程主機中。
ssh-copy-id -i ~/.ssh/YOUR_KEY.pub YOUR_HOST_NAME_OR_HOST_IP
複製代碼
網上的教程通常都只會引導用戶使用 swapoff
命令進行分區關閉,可是一旦主機重啓,這個命令的做用就「失效」了,因此這裏建議使用我下面提供的命令一勞永逸的徹底關閉 swap
分區。
sudo swapoff -a
cat /etc/fstab | grep -v '^#' | grep -v 'swap' | sudo tee /etc/fstab
複製代碼
在建設集羣以前,咱們須要確保節點之間的如下要素不一樣:
product_id
MAC
地址咱們先設置主機名,好比設置主機名爲 potato
:
sudo hostnamectl set-hostname potato
複製代碼
設置完主機名稱以後,咱們須要將主機名稱對應的基礎解析指向本地。
echo "127.0.0.1 `hostname`" | sudo tee -a /etc/hosts
複製代碼
至於 MAC
地址,你能夠直接使用 ifconfig
進行設置,也能夠修改 /etc/network/interfaces
進行設置。若是你也是虛擬機用戶,我建議直接在硬件層面進行設置,一勞永逸,另外,若是你在硬件層面設置了 MAC
地址,product_id
也會隨之變化。
提了這麼屢次 product_id
,那麼該如何查看它的內容呢,很簡單:
sudo cat /sys/class/dmi/id/product_uuid
複製代碼
在安裝 K8S
和各類 K8S TOOLBOX
以前,咱們須要先對系統進行一些基礎配置,在以前的文章中,我有介紹過如何更優雅的安裝 docker
。
可是這裏稍稍有一些不一樣:這裏必須使用指定版本的 docker-ce
,目前 18.0x 的 docker-ce
暫時未經過 K8S
測試驗證,不能被直接使用。
以前的安裝命令 apt install docker-ce
須要被替換爲下面的命令來進行指定版本的軟件安裝:
apt-get update && apt-get install -y docker-ce=$(apt-cache madison docker-ce | grep 17.03 | head -1 | awk '{print $3}')
複製代碼
爲了不軟件在後續維護系統的過程當中被誤升級,咱們能夠鎖定它的版本:
apt-mark docker-ce
複製代碼
若是你以爲從官方下載 docker-ce
比較慢,能夠在添加了 gpg
祕鑰後,將添加軟件倉庫地址從官方源改成其餘鏡像源,好比使用下面的命令添加一個新的軟件源:
add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
複製代碼
而後執行前面說到的安裝命令,進行更快速的安裝。
這裏參考了部分官方文檔 Creating a single master cluster with kubeadm ,可是請注意,目前官方已經關閉了 v1
版本的 docker
倉庫的接口,因此若是你準備掛代理直接下載軟件鏡像包,須要修改 /etc/docker/daemon.json
,強制停用 v1
版本的 API:
{
"disable-legacy-registry": true
}
複製代碼
因爲 K8S
搭建以後,升級不是很頻繁,能夠直接使用導入離線的軟件包,進行快速的服務搭建和升級,而對機器上的 docker
配置作到使用默認配置不進行改動。
咱們這裏使用到的軟件包鏡像名稱列表以下:
k8s.gcr.io/kube-apiserver-amd64:v1.11.3
k8s.gcr.io/kube-controller-manager-amd64:v1.11.3
k8s.gcr.io/kube-scheduler-amd64:v1.11.3
k8s.gcr.io/kube-proxy-amd64:v1.11.3
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd-amd64:3.2.18
k8s.gcr.io/coredns:1.1.3
k8s.gcr.io/kubernetes-dashboard-amd64:v0.10.0
quay.io/coreos/flannel:v0.10.0-amd64
複製代碼
將列表保存爲文件,在能夠獲取鏡像的雲機器上,使用下面的命令能夠自動將鏡像下載並進行導出。
PACKAGES=`cat ./images/11.txt`;
for package in $PACKAGES; do docker pull "$package"; done
docker images | tail -n +2 | grep -v "<none>" | awk '{printf("%s:%s\n", $1, $2)}' | while read IMAGE; do
echo "find image: $IMAGE"
filename="$(echo $IMAGE| tr ':' '-' | tr '/' '-').tar"
echo "save as $filename"
docker save ${IMAGE} -o $filename
done
複製代碼
而後將下載並導出的 *.tar
鏡像包下載到要搭建集羣的機器上,使用下面的命令便可批量導入鏡像到系統,避免了要爲集羣機器配置代理等操做。
ls *.tar | xargs -I {} docker load -i {}
複製代碼
上面的腳本,我保存在了 GitHub : soulteary/k8s-images-trans-helper 。
爲了不 IPVS
內核模塊沒有加載,而報 RequiredIPVSKernelModulesAvailable
的錯誤,咱們使用下面的命令加載全部支持的 IPVS
模塊。
lsmod | grep ^ip_vs | awk '{print $1}' | xargs -I {} modprobe {}
複製代碼
安裝依賴工具、添加 GPG
祕鑰、添加軟件倉庫,進行軟件下載:
apt-get update && apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
複製代碼
上面的命令是官方文檔提供的,實際上你可能會遇到添加 GPG
祕鑰出錯的狀況,而且使用官方源進行下載失敗的狀況,爲此我爲你準備了一套適合國內環境使用的命令。
apt-get update && apt-get install -y apt-transport-https curl
cat google-apt-key.gpg | apt-key add -
add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-$(lsb_release -cs) main"
apt update && apt install -y kubelet kubeadm kubectl
複製代碼
這裏的 GPG
祕鑰能夠和離線鏡像包同樣,使用雲主機下載下來,放置於你執行命令的目錄,而後使用 cat
命令讀取內容,再使用 apt-key
進行添加操做。
和配置 docker
同樣,咱們須要鎖定軟件版本,避免「意外」的出現。
apt-mark hold kubelet kubeadm kubectl
複製代碼
若是你網速夠快,1分鐘以內,你的 K8S
軟件包就都就緒了,接下來就可以進行集羣的搭建了。
登陸服務器,使用 kubeadm init
命令進行 master
節點的初始化,由於我選擇使用 flannel
做爲組網工具,因此我在初始化命令後面添加了 CIDR
參數。
kubeadm init --apiserver-advertise-address=10.11.12.180 --pod-network-cidr=10.244.0.0/16
複製代碼
這裏偷個懶,直接使用 root
用戶啓動程序:
root@potato:~# kubeadm init --apiserver-advertise-address=10.11.12.180 --pod-network-cidr=10.244.0.0/16
[init] using Kubernetes version: v1.11.3
[preflight] running pre-flight checks
I0926 04:05:02.988136 1074 kernel_validator.go:81] Validating kernel version
I0926 04:05:02.988343 1074 kernel_validator.go:96] Validating kernel config
[preflight/images] Pulling images required for setting up a Kubernetes cluster
[preflight/images] This might take a minute or two, depending on the speed of your internet connection
[preflight/images] You can also perform this action in beforehand using 'kubeadm config images pull'
[kubelet] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[preflight] Activating the kubelet service
[certificates] Generated ca certificate and key.
[certificates] Generated apiserver certificate and key.
[certificates] apiserver serving cert is signed for DNS names [potato kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 10.11.12.180]
[certificates] Generated apiserver-kubelet-client certificate and key.
[certificates] Generated sa key and public key.
[certificates] Generated front-proxy-ca certificate and key.
[certificates] Generated front-proxy-client certificate and key.
[certificates] Generated etcd/ca certificate and key.
[certificates] Generated etcd/server certificate and key.
[certificates] etcd/server serving cert is signed for DNS names [potato localhost] and IPs [127.0.0.1 ::1]
[certificates] Generated etcd/peer certificate and key.
[certificates] etcd/peer serving cert is signed for DNS names [potato localhost] and IPs [10.11.12.180 127.0.0.1 ::1]
[certificates] Generated etcd/healthcheck-client certificate and key.
[certificates] Generated apiserver-etcd-client certificate and key.
[certificates] valid certificates and keys now exist in "/etc/kubernetes/pki"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/admin.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/controller-manager.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/scheduler.conf"
[controlplane] wrote Static Pod manifest for component kube-apiserver to "/etc/kubernetes/manifests/kube-apiserver.yaml"
[controlplane] wrote Static Pod manifest for component kube-controller-manager to "/etc/kubernetes/manifests/kube-controller-manager.yaml"
[controlplane] wrote Static Pod manifest for component kube-scheduler to "/etc/kubernetes/manifests/kube-scheduler.yaml"
[etcd] Wrote Static Pod manifest for a local etcd instance to "/etc/kubernetes/manifests/etcd.yaml"
[init] waiting for the kubelet to boot up the control plane as Static Pods from directory "/etc/kubernetes/manifests"
[init] this might take a minute or longer if the control plane images have to be pulled
[apiclient] All control plane components are healthy after 38.500989 seconds
[uploadconfig] storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace
[kubelet] Creating a ConfigMap "kubelet-config-1.11" in namespace kube-system with the configuration for the kubelets in the cluster
[markmaster] Marking the node potato as master by adding the label "node-role.kubernetes.io/master=''"
[markmaster] Marking the node potato as master by adding the taints [node-role.kubernetes.io/master:NoSchedule]
[patchnode] Uploading the CRI Socket information "/var/run/dockershim.sock" to the Node API object "potato" as an annotation
[bootstraptoken] using token: d2y2to.znsihh37rk5calbm
[bootstraptoken] configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
[bootstraptoken] configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
[bootstraptoken] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
[bootstraptoken] creating the "cluster-info" ConfigMap in the "kube-public" namespace
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy
Your Kubernetes master 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/
You can now join any number of machines by running the following on each node
as root:
kubeadm join 10.11.12.180:6443 --token d2y2to.znsihh37rk5calbm --discovery-token-ca-cert-hash sha256:ae980b5c80af45b987b2f3e1d343265f3cce7ef66876cf6a6cabaaa4467868d1
root@potato:~#
複製代碼
這裏若是使用 kubectl get nodes
,會出現下面的錯誤,除非你使用上面輸出日誌中的命令,對於當前用戶進行了配置獨立的處理。
root@potato:~# kubectl get nodes
The connection to the server localhost:8080 was refused - did you specify the right host or port?
複製代碼
可是做爲一個懶人,我這裏直接使用默認配置,執行:
export KUBECONFIG=/etc/kubernetes/admin.conf
複製代碼
而後再次執行剛剛獲取 node
節點的命令:
root@potato:~# kubectl get nodes
NAME STATUS ROLES AGE VERSION
potato Ready master 1m v1.11.3
複製代碼
接着,我能夠經過 kubectl get pods
來看看各個組件是否運行正常:
kubectl get pods --namespace=kube-system
複製代碼
root@potato:~# kubectl get pods --namespace=kube-system
NAME READY STATUS RESTARTS AGE
coredns-78fcdf6894-2lbvg 0/1 Pending 0 1m
coredns-78fcdf6894-vztcw 0/1 Pending 0 1m
etcd-potato 1/1 Running 0 26s
kube-apiserver-potato 1/1 Running 0 28s
kube-controller-manager-potato 1/1 Running 0 14s
kube-proxy-qmmwg 1/1 Running 0 1m
kube-scheduler-potato 1/1 Running 0 11s
複製代碼
所有都是 Running
,一切就緒,咱們開始進行組網,以及附加集羣子節點。
如今 master
節點幾乎就緒,咱們來配置網絡組件:flannel
。
剛纔有提到,我這裏使用官方推薦的工具之一: flannel
來進行網絡組建。
這裏須要先設置 /proc/sys/net/bridge/bridge-nf-call-iptables
爲 1
,讓虛擬網橋上的數據包能夠被 iptable
處理。
sysctl net.bridge.bridge-nf-call-iptables=1
複製代碼
至於配置,使用官方推薦的便可,很簡單一條命令:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml`
複製代碼
執行完畢,你會看到各類 created
的信息。
kubectl apply -f kube-flannel.yml
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.extensions/kube-flannel-ds created
複製代碼
再次查看組件運行狀態,咱們能夠看到,flannel
已經運行起來了:
root@potato:~# kubectl get pods --namespace=kube-system
NAME READY STATUS RESTARTS AGE
kube-flannel-ds-7gx48 1/1 Running 0 7s
複製代碼
好了,master
節點如今就就緒了,接下來咱們來操做其餘的 worker
節點。
下面的操做能夠執行無數多遍,我以一臺 worker
爲例。
在剛剛建立 master
時,命令行輸出告訴咱們要執行下面的命令,來組建一個集羣:
kubeadm join 10.11.12.180:6443 --token d2y2to.znsihh37rk5calbm --discovery-token-ca-cert-hash sha256:ae980b5c80af45b987b2f3e1d343265f3cce7ef66876cf6a6cabaaa4467868d1
複製代碼
若是你的準備工做一項不拉的都執行過了,那麼你將會獲得下面的輸出日誌。
[preflight] running pre-flight checks
I0926 04:23:44.001001 4993 kernel_validator.go:81] Validating kernel version
I0926 04:23:44.001206 4993 kernel_validator.go:96] Validating kernel config
[discovery] Trying to connect to API Server "10.11.12.180:6443"
[discovery] Created cluster-info discovery client, requesting info from "https://10.11.12.180:6443"
[discovery] Requesting info from "https://10.11.12.180:6443" again to validate TLS against the pinned public key
[discovery] Cluster info signature and contents are valid and TLS certificate validates against pinned roots, will use API Server "10.11.12.180:6443"
[discovery] Successfully established connection with API Server "10.11.12.180:6443"
[kubelet] Downloading configuration for the kubelet from the "kubelet-config-1.11" ConfigMap in the kube-system namespace
[kubelet] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[preflight] Activating the kubelet service
[tlsbootstrap] Waiting for the kubelet to perform the TLS Bootstrap...
[patchnode] Uploading the CRI Socket information "/var/run/dockershim.sock" to the Node API object "potato-chips" as an annotation
This node has joined the cluster:
* Certificate signing request was sent to master and a response
was received.
* The Kubelet was informed of the new secure connection details.
Run 'kubectl get nodes' on the master to see this node join the cluster.
複製代碼
嗯,沒錯,你已經組建了一個最小的集羣,一臺 master
、一臺 worker
。
爲了讓咱們的集羣更像樣子,你能夠把上面的命令,在其餘的機器上繼續執行,來給這個集羣添加更多的計算資源。
當你在全部節點執行完畢以後,返回 master
節點,仍是經過 kubectl get nodes
命令,能夠查看到當前集羣的信息。
root@potato:~# kubectl get nodes
NAME STATUS ROLES AGE VERSION
potato Ready master 10m v1.11.3
potato-chips Ready <none> 1m v1.11.3
potato-salad Ready <none> 1m v1.11.3
複製代碼
好了,集羣搭建就搞定了。
老是使用命令行太不「環保」了,做爲懶人,咱們可使用官方的 dashboard
插件來進行一些圖形化的交互。
和配置 flannel
同樣,配置 dashboard
也可使用官方推薦的配置,一條命令完成操做。
kubectl apply -f https://github.com/kubernetes/dashboard/blob/master/src/deploy/recommended/kubernetes-dashboard.yaml
複製代碼
一樣的,若是你上面的集羣是就緒的,那麼在執行完命令後,也會獲得一堆 created
的信息。
root@potato:~# kubectl apply -f kubernetes-dashboard.yaml
secret/kubernetes-dashboard-certs created
serviceaccount/kubernetes-dashboard created
role.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
deployment.apps/kubernetes-dashboard created
service/kubernetes-dashboard created
複製代碼
使用 kubectl get pods
查看當前 pod
的情況。
root@potato:~# kubectl get pods --namespace=kube-system
NAME READY STATUS RESTARTS AGE
kubernetes-dashboard-767dc7d4d-mw6pv 1/1 Running 0 1m
複製代碼
嗯,同樣是就緒狀態。
可是因爲咱們沒有安裝負載均衡的組件,因此咱們暫時沒法直接訪問 dashboard
以及其餘的部署的應用,除了系統組件的應用都被分配了 K8S
的虛擬內網。
咱們能夠經過 -o wide
參數來查看全部的 pod
分佈狀況:
root@potato:~# kubectl get pods --namespace=kube-system -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
coredns-78fcdf6894-2lbvg 1/1 Running 1 5m 10.244.0.9 potato <none>
coredns-78fcdf6894-vztcw 1/1 Running 1 5m 10.244.0.10 potato <none>
etcd-potato 1/1 Running 1 5m 10.11.12.180 potato <none>
kube-apiserver-potato 1/1 Running 1 5m 10.11.12.180 potato <none>
kube-controller-manager-potato 1/1 Running 1 5m 10.11.12.180 potato <none>
kube-flannel-ds-7gx48 1/1 Running 1 5m 10.11.12.180 potato <none>
kube-flannel-ds-njjrp 1/1 Running 0 5m 10.11.12.181 potato-chips <none>
kube-flannel-ds-v4btm 1/1 Running 0 5m 10.11.12.182 potato-salad <none>
kube-proxy-bcvx6 1/1 Running 0 5m 10.11.12.182 potato-salad <none>
kube-proxy-qmmwg 1/1 Running 1 5m 10.11.12.180 potato <none>
kube-proxy-xc5j9 1/1 Running 0 5m 10.11.12.181 potato-chips <none>
kube-scheduler-potato 1/1 Running 1 5m 10.11.12.180 potato <none>
kubernetes-dashboard-767dc7d4d-mw6pv 1/1 Running 0 5m 10.244.2.10 potato-salad <none>
複製代碼
網上有不少教程是寫在本地如何訪問 dashboard
的,因此他們直接使用 kubectl proxy
是有效的,可是若是你是真的搭建一個集羣,這時這個命令將會失效,由於它監聽的地址是 127.0.0.1
。
這時,命令須要修改成:
kubectl proxy --address='0.0.0.0' --accept-hosts='^* 而後瀏覽器中訪問: 複製代碼
http://10.11.12.180:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
便可打開你的 `K8S` 集羣控制檯。
![](https://user-gold-cdn.xitu.io/2018/10/3/166388d007b66908?w=610&h=463&f=png&s=50504 "默認驗證界面")
若是你和我同樣,對 固定IP 進行了域名解析,能夠這樣使用:
複製代碼
kubectl proxy --address='0.0.0.0' --accept-hosts='^*.lab.com
對應的訪問地址也就變成了:
http://potato.lab.com:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login
複製代碼
可是這時,你訪問這個控制檯,會遇到要求輸入 KubeConfig
或者 Token
的要求,若是你是相對正式的環境使用,那麼不妨閱讀 權限控制 相關文檔。
固然,若是你真的要使用權限控制方案進行控制檯登陸,當前版本可能會遇到和社區老兄反饋的同樣的問題:
kubectl proxy
對 HTTPS 支持不佳,致使沒法登陸 dashboard
:原文地址。
我我的沒有遇到這個問題,由於我使用 Traefik 配合 K8S
,來對外提供域名訪問服務,dashboard 我直接使用下面的方案免除了登陸權限的認證。
做爲一個懶人用的開發環境,我這裏直接使用官方文檔中的 給控制檯帳號賦予超級用戶權限 ,免於配置一大堆內容。
將下面的內容保存爲 dashboard-admin.yaml
(僅適用於正式發佈的版本)
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: kubernetes-dashboard
labels:
k8s-app: kubernetes-dashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard
namespace: kube-system
複製代碼
而後和配置 flannel
和 dashboard
同樣,使用 kubectl apply
命令執行啓動。
root@potato:~# kubectl apply -f dashboard-admin.yaml
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
複製代碼
再次執行剛剛的 proxy
命令,刷新你瀏覽器中的控制檯登陸頁面,點擊「跳過」,你便得到了擁有所有權限的控制檯。
基礎的搭建部分就是這樣,是否是很簡單。接下來我會寫一篇文章介紹如何集成自建 GitLab ,完成開發、構建、發佈等常規 Pipeline
。
—EOF
可是這時,你訪問這個控制檯,會遇到要求輸入 `KubeConfig` 或者 `Token` 的要求,若是你是相對正式的環境使用,那麼不妨閱讀 [權限控制](https://github.com/kubernetes/dashboard/wiki/Access-control) 相關文檔。
固然,若是你真的要使用權限控制方案進行控制檯登陸,當前版本可能會遇到和社區老兄反饋的同樣的問題:
`kubectl proxy` 對 HTTPS 支持不佳,致使沒法登陸 `dashboard`:[原文地址](https://github.com/kubernetes/dashboard/issues/3260#issuecomment-421834585)。
我我的沒有遇到這個問題,由於我使用 Traefik 配合 `K8S` ,來對外提供域名訪問服務,dashboard 我直接使用下面的方案免除了登陸權限的認證。
### 爲控制檯免除權限認證
做爲一個懶人用的開發環境,我這裏直接使用官方文檔中的 [給控制檯帳號賦予超級用戶權限](https://github.com/kubernetes/dashboard/wiki/Access-control#admin-privileges) ,免於配置一大堆內容。
將下面的內容保存爲 `dashboard-admin.yaml`(僅適用於正式發佈的版本)
複製代碼
apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: kubernetes-dashboard labels: k8s-app: kubernetes-dashboard roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects:
而後和配置 `flannel` 和 `dashboard` 同樣,使用 `kubectl apply` 命令執行啓動。
複製代碼
root@potato:~# kubectl apply -f dashboard-admin.yaml clusterrolebinding.rbac.authorization.k8s.io/kubernetes-… created
再次執行剛剛的 `proxy` 命令,刷新你瀏覽器中的控制檯登陸頁面,點擊「跳過」,你便得到了擁有所有權限的控制檯。
![](https://user-gold-cdn.xitu.io/2018/10/3/166388d0c4566cf4?w=1109&h=703&f=png&s=82335 "默認驗證界面")
![](https://user-gold-cdn.xitu.io/2018/10/3/166388d09d586f47?w=1117&h=537&f=png&s=90351 "默認驗證界面")
## 最後
基礎的搭建部分就是這樣,是否是很簡單。接下來我會寫一篇文章介紹如何集成自建 GitLab ,完成開發、構建、發佈等常規 `Pipeline` 。
—EOF
</span></div></div></td></tr></table></div></div>
{{</crayonCode>}}
對應的訪問地址也就變成了:
複製代碼
potato.lab.com:8001/api/v1/name…
可是這時,你訪問這個控制檯,會遇到要求輸入 `KubeConfig` 或者 `Token` 的要求,若是你是相對正式的環境使用,那麼不妨閱讀 [權限控制](https://github.com/kubernetes/dashboard/wiki/Access-control) 相關文檔。
固然,若是你真的要使用權限控制方案進行控制檯登陸,當前版本可能會遇到和社區老兄反饋的同樣的問題:
`kubectl proxy` 對 HTTPS 支持不佳,致使沒法登陸 `dashboard`:[原文地址](https://github.com/kubernetes/dashboard/issues/3260#issuecomment-421834585)。
我我的沒有遇到這個問題,由於我使用 Traefik 配合 `K8S` ,來對外提供域名訪問服務,dashboard 我直接使用下面的方案免除了登陸權限的認證。
### 爲控制檯免除權限認證
做爲一個懶人用的開發環境,我這裏直接使用官方文檔中的 [給控制檯帳號賦予超級用戶權限](https://github.com/kubernetes/dashboard/wiki/Access-control#admin-privileges) ,免於配置一大堆內容。
將下面的內容保存爲 `dashboard-admin.yaml`(僅適用於正式發佈的版本)
複製代碼
apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: kubernetes-dashboard labels: k8s-app: kubernetes-dashboard roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects:
而後和配置 `flannel` 和 `dashboard` 同樣,使用 `kubectl apply` 命令執行啓動。
複製代碼
root@potato:~# kubectl apply -f dashboard-admin.yaml clusterrolebinding.rbac.authorization.k8s.io/kubernetes-… created
再次執行剛剛的 `proxy` 命令,刷新你瀏覽器中的控制檯登陸頁面,點擊「跳過」,你便得到了擁有所有權限的控制檯。
![](https://user-gold-cdn.xitu.io/2018/10/3/166388d0c4566cf4?w=1109&h=703&f=png&s=82335 "默認驗證界面")
![](https://user-gold-cdn.xitu.io/2018/10/3/166388d09d586f47?w=1117&h=537&f=png&s=90351 "默認驗證界面")
## 最後
基礎的搭建部分就是這樣,是否是很簡單。接下來我會寫一篇文章介紹如何集成自建 GitLab ,完成開發、構建、發佈等常規 `Pipeline` 。
—EOF
複製代碼
便可打開你的 K8S
集羣控制檯。
若是你和我同樣,對 固定IP 進行了域名解析,能夠這樣使用:
kubectl proxy --address='0.0.0.0' --accept-hosts='^*.lab.com 對應的訪問地址也就變成了: 複製代碼
potato.lab.com:8001/api/v1/name…
可是這時,你訪問這個控制檯,會遇到要求輸入 `KubeConfig` 或者 `Token` 的要求,若是你是相對正式的環境使用,那麼不妨閱讀 [權限控制](https://github.com/kubernetes/dashboard/wiki/Access-control) 相關文檔。
固然,若是你真的要使用權限控制方案進行控制檯登陸,當前版本可能會遇到和社區老兄反饋的同樣的問題:
`kubectl proxy` 對 HTTPS 支持不佳,致使沒法登陸 `dashboard`:[原文地址](https://github.com/kubernetes/dashboard/issues/3260#issuecomment-421834585)。
我我的沒有遇到這個問題,由於我使用 Traefik 配合 `K8S` ,來對外提供域名訪問服務,dashboard 我直接使用下面的方案免除了登陸權限的認證。
### 爲控制檯免除權限認證
做爲一個懶人用的開發環境,我這裏直接使用官方文檔中的 [給控制檯帳號賦予超級用戶權限](https://github.com/kubernetes/dashboard/wiki/Access-control#admin-privileges) ,免於配置一大堆內容。
將下面的內容保存爲 `dashboard-admin.yaml`(僅適用於正式發佈的版本)
複製代碼
apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: kubernetes-dashboard labels: k8s-app: kubernetes-dashboard roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects:
而後和配置 `flannel` 和 `dashboard` 同樣,使用 `kubectl apply` 命令執行啓動。
複製代碼
root@potato:~# kubectl apply -f dashboard-admin.yaml clusterrolebinding.rbac.authorization.k8s.io/kubernetes-… created
再次執行剛剛的 `proxy` 命令,刷新你瀏覽器中的控制檯登陸頁面,點擊「跳過」,你便得到了擁有所有權限的控制檯。
![](https://user-gold-cdn.xitu.io/2018/10/3/166388d0c4566cf4?w=1109&h=703&f=png&s=82335 "默認驗證界面")
![](https://user-gold-cdn.xitu.io/2018/10/3/166388d09d586f47?w=1117&h=537&f=png&s=90351 "默認驗證界面")
## 最後
基礎的搭建部分就是這樣,是否是很簡單。接下來我會寫一篇文章介紹如何集成自建 GitLab ,完成開發、構建、發佈等常規 `Pipeline` 。
—EOF
複製代碼
可是這時,你訪問這個控制檯,會遇到要求輸入 KubeConfig
或者 Token
的要求,若是你是相對正式的環境使用,那麼不妨閱讀 權限控制 相關文檔。
固然,若是你真的要使用權限控制方案進行控制檯登陸,當前版本可能會遇到和社區老兄反饋的同樣的問題:
kubectl proxy
對 HTTPS 支持不佳,致使沒法登陸 dashboard
:原文地址。
我我的沒有遇到這個問題,由於我使用 Traefik 配合 K8S
,來對外提供域名訪問服務,dashboard 我直接使用下面的方案免除了登陸權限的認證。
做爲一個懶人用的開發環境,我這裏直接使用官方文檔中的 給控制檯帳號賦予超級用戶權限 ,免於配置一大堆內容。
將下面的內容保存爲 dashboard-admin.yaml
(僅適用於正式發佈的版本)
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: kubernetes-dashboard
labels:
k8s-app: kubernetes-dashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard
namespace: kube-system
複製代碼
而後和配置 flannel
和 dashboard
同樣,使用 kubectl apply
命令執行啓動。
root@potato:~# kubectl apply -f dashboard-admin.yaml
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
複製代碼
再次執行剛剛的 proxy
命令,刷新你瀏覽器中的控制檯登陸頁面,點擊「跳過」,你便得到了擁有所有權限的控制檯。
基礎的搭建部分就是這樣,是否是很簡單。接下來我會寫一篇文章介紹如何集成自建 GitLab ,完成開發、構建、發佈等常規 Pipeline
。
—EOF
{{}}
對應的訪問地址也就變成了:
http://potato.lab.com:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login
複製代碼
可是這時,你訪問這個控制檯,會遇到要求輸入 KubeConfig
或者 Token
的要求,若是你是相對正式的環境使用,那麼不妨閱讀 權限控制 相關文檔。
固然,若是你真的要使用權限控制方案進行控制檯登陸,當前版本可能會遇到和社區老兄反饋的同樣的問題:
kubectl proxy
對 HTTPS 支持不佳,致使沒法登陸 dashboard
:原文地址。
我我的沒有遇到這個問題,由於我使用 Traefik 配合 K8S
,來對外提供域名訪問服務,dashboard 我直接使用下面的方案免除了登陸權限的認證。
做爲一個懶人用的開發環境,我這裏直接使用官方文檔中的 給控制檯帳號賦予超級用戶權限 ,免於配置一大堆內容。
將下面的內容保存爲 dashboard-admin.yaml
(僅適用於正式發佈的版本)
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: kubernetes-dashboard
labels:
k8s-app: kubernetes-dashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard
namespace: kube-system
複製代碼
而後和配置 flannel
和 dashboard
同樣,使用 kubectl apply
命令執行啓動。
root@potato:~# kubectl apply -f dashboard-admin.yaml
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
複製代碼
再次執行剛剛的 proxy
命令,刷新你瀏覽器中的控制檯登陸頁面,點擊「跳過」,你便得到了擁有所有權限的控制檯。
基礎的搭建部分就是這樣,是否是很簡單。接下來我會寫一篇文章介紹如何集成自建 GitLab ,完成開發、構建、發佈等常規 Pipeline
。
—EOF
{{}}
而後瀏覽器中訪問:
http://10.11.12.180:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
複製代碼
便可打開你的 K8S
集羣控制檯。
若是你和我同樣,對 固定IP 進行了域名解析,能夠這樣使用:
kubectl proxy --address='0.0.0.0' --accept-hosts='^*.lab.com 對應的訪問地址也就變成了: 複製代碼
potato.lab.com:8001/api/v1/name…
可是這時,你訪問這個控制檯,會遇到要求輸入 `KubeConfig` 或者 `Token` 的要求,若是你是相對正式的環境使用,那麼不妨閱讀 [權限控制](https://github.com/kubernetes/dashboard/wiki/Access-control) 相關文檔。
固然,若是你真的要使用權限控制方案進行控制檯登陸,當前版本可能會遇到和社區老兄反饋的同樣的問題:
`kubectl proxy` 對 HTTPS 支持不佳,致使沒法登陸 `dashboard`:[原文地址](https://github.com/kubernetes/dashboard/issues/3260#issuecomment-421834585)。
我我的沒有遇到這個問題,由於我使用 Traefik 配合 `K8S` ,來對外提供域名訪問服務,dashboard 我直接使用下面的方案免除了登陸權限的認證。
### 爲控制檯免除權限認證
做爲一個懶人用的開發環境,我這裏直接使用官方文檔中的 [給控制檯帳號賦予超級用戶權限](https://github.com/kubernetes/dashboard/wiki/Access-control#admin-privileges) ,免於配置一大堆內容。
將下面的內容保存爲 `dashboard-admin.yaml`(僅適用於正式發佈的版本)
複製代碼
apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: kubernetes-dashboard labels: k8s-app: kubernetes-dashboard roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects:
而後和配置 `flannel` 和 `dashboard` 同樣,使用 `kubectl apply` 命令執行啓動。
複製代碼
root@potato:~# kubectl apply -f dashboard-admin.yaml clusterrolebinding.rbac.authorization.k8s.io/kubernetes-… created
再次執行剛剛的 `proxy` 命令,刷新你瀏覽器中的控制檯登陸頁面,點擊「跳過」,你便得到了擁有所有權限的控制檯。
![](https://user-gold-cdn.xitu.io/2018/10/3/166388d0c4566cf4?w=1109&h=703&f=png&s=82335 "默認驗證界面")
![](https://user-gold-cdn.xitu.io/2018/10/3/166388d09d586f47?w=1117&h=537&f=png&s=90351 "默認驗證界面")
## 最後
基礎的搭建部分就是這樣,是否是很簡單。接下來我會寫一篇文章介紹如何集成自建 GitLab ,完成開發、構建、發佈等常規 `Pipeline` 。
—EOF
複製代碼
可是這時,你訪問這個控制檯,會遇到要求輸入 KubeConfig
或者 Token
的要求,若是你是相對正式的環境使用,那麼不妨閱讀 權限控制 相關文檔。
固然,若是你真的要使用權限控制方案進行控制檯登陸,當前版本可能會遇到和社區老兄反饋的同樣的問題:
kubectl proxy
對 HTTPS 支持不佳,致使沒法登陸 dashboard
:原文地址。
我我的沒有遇到這個問題,由於我使用 Traefik 配合 K8S
,來對外提供域名訪問服務,dashboard 我直接使用下面的方案免除了登陸權限的認證。
做爲一個懶人用的開發環境,我這裏直接使用官方文檔中的 給控制檯帳號賦予超級用戶權限 ,免於配置一大堆內容。
將下面的內容保存爲 dashboard-admin.yaml
(僅適用於正式發佈的版本)
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: kubernetes-dashboard
labels:
k8s-app: kubernetes-dashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard
namespace: kube-system
複製代碼
而後和配置 flannel
和 dashboard
同樣,使用 kubectl apply
命令執行啓動。
root@potato:~# kubectl apply -f dashboard-admin.yaml
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
複製代碼
再次執行剛剛的 proxy
命令,刷新你瀏覽器中的控制檯登陸頁面,點擊「跳過」,你便得到了擁有所有權限的控制檯。
基礎的搭建部分就是這樣,是否是很簡單。接下來我會寫一篇文章介紹如何集成自建 GitLab ,完成開發、構建、發佈等常規 Pipeline
。
—EOF
{{}}
對應的訪問地址也就變成了:
http://potato.lab.com:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login
複製代碼
可是這時,你訪問這個控制檯,會遇到要求輸入 KubeConfig
或者 Token
的要求,若是你是相對正式的環境使用,那麼不妨閱讀 權限控制 相關文檔。
固然,若是你真的要使用權限控制方案進行控制檯登陸,當前版本可能會遇到和社區老兄反饋的同樣的問題:
kubectl proxy
對 HTTPS 支持不佳,致使沒法登陸 dashboard
:原文地址。
我我的沒有遇到這個問題,由於我使用 Traefik 配合 K8S
,來對外提供域名訪問服務,dashboard 我直接使用下面的方案免除了登陸權限的認證。
做爲一個懶人用的開發環境,我這裏直接使用官方文檔中的 給控制檯帳號賦予超級用戶權限 ,免於配置一大堆內容。
將下面的內容保存爲 dashboard-admin.yaml
(僅適用於正式發佈的版本)
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: kubernetes-dashboard
labels:
k8s-app: kubernetes-dashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard
namespace: kube-system
複製代碼
而後和配置 flannel
和 dashboard
同樣,使用 kubectl apply
命令執行啓動。
root@potato:~# kubectl apply -f dashboard-admin.yaml
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
複製代碼
再次執行剛剛的 proxy
命令,刷新你瀏覽器中的控制檯登陸頁面,點擊「跳過」,你便得到了擁有所有權限的控制檯。
基礎的搭建部分就是這樣,是否是很簡單。接下來我會寫一篇文章介紹如何集成自建 GitLab ,完成開發、構建、發佈等常規 Pipeline
。
—EOF
我如今有一個小小的折騰羣,裏面彙集了一些喜歡折騰的小夥伴。
在不發廣告的狀況下,咱們在裏面會一塊兒聊聊軟件、HomeLab、編程上的一些問題,也會在羣裏不按期的分享一些技術沙龍的資料。
喜歡折騰的小夥伴歡迎掃碼添加好友。(請註明來源和目的,不然不會經過審覈) 關於折騰羣入羣的那些事