一、部署coredns 插件
注意:
1. 如果沒有特殊指明,本文檔的所有操作均在 zhangjun-k8s01 節點上執行;
2. kuberntes 自帶插件的 manifests yaml 文件使用 gcr.io 的 docker registry,國內被牆,需要手動替換為其它 registry 地址(本文檔未替換);
3. 可以從微軟中國提供的 [gcr.io 免費代理](http://mirror.azure.cn/help/gcr-proxy-cache.html)下載被牆的鏡像;
cd /opt/k8s/work source /opt/k8s/bin/environment.sh for node_ip in ${NODE_IPS[@]} do scp coredns-1.3.1.tar root@$node_ip:/opt/k8s/work ssh root@$node_ip "docker load -i /opt/k8s/work/coredns-1.3.1.tar" done
1、修改配置文件
將下載的 kubernetes-server-linux-amd64.tar.gz 解壓后,再解壓其中的 kubernetes-src.tar.gz 文件。
cd /opt/k8s/work/kubernetes/
tar -xzvf kubernetes-src.tar.gz
coredns 目錄是 `cluster/addons/dns
cd /opt/k8s/work/kubernetes/cluster/addons/dns/coredns cp coredns.yaml.base coredns.yaml source /opt/k8s/bin/environment.sh sed -i -e "s/__PILLAR__DNS__DOMAIN__/${CLUSTER_DNS_DOMAIN}/" -e "s/__PILLAR__DNS__SERVER__/${CLUSTER_DNS_SVC_IP}/" coredns.yaml
2、創建 coredns
kubectl create -f coredns.yaml
3、檢查 coredns 功能
[root@master-k8s01 coredns]# kubectl get all -n kube-system NAME READY STATUS RESTARTS AGE pod/coredns-5b969f4c88-m6t4r 1/1 Running 0 25s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kube-dns ClusterIP 10.254.0.2 <none> 53/UDP,53/TCP,9153/TCP 26s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/coredns 1/1 1 1 26s NAME DESIRED CURRENT READY AGE replicaset.apps/coredns-5b969f4c88 1 1 1 25s
二、部署 dashboard 插件
注意:
1. 如果沒有特殊指明,本文檔的所有操作均在 zhangjun-k8s01 節點上執行;
2. kuberntes 自帶插件的 manifests yaml 文件使用 gcr.io 的 docker registry,國內被牆,需要手動替換為其它 registry 地址(本文檔未替換);
3. 可以從微軟中國提供的 [gcr.io 免費代理](http://mirror.azure.cn/help/gcr-proxy-cache.html)下載被牆的鏡像;
cd /opt/k8s/work source /opt/k8s/bin/environment.sh for node_ip in ${NODE_IPS[@]} do scp kubernetes-dashboard-amd64-v1.10.1.tar root@$node_ip:/opt/k8s/work ssh root@$node_ip "docker load -i /opt/k8s/work/kubernetes-dashboard-amd64-v1.10.1.tar" done
1、修改配置文件
將下載的 kubernetes-server-linux-amd64.tar.gz 解壓后,再解壓其中的 kubernetes-src.tar.gz 文件。
cd /opt/k8s/work/kubernetes/
tar -xzvf kubernetes-src.tar.gz
dashboard 對應的目錄是:`cluster/addons/dashboard`:
cd /opt/k8s/work/kubernetes/cluster/addons/dashboard
修改 service 定義,指定端口類型為 NodePort,這樣外界可以通過地址 NodeIP:NodePort 訪問 dashboard;
$ cat dashboard-service.yaml apiVersion: v1 kind: Service metadata: name: kubernetes-dashboard namespace: kube-system labels: k8s-app: kubernetes-dashboard kubernetes.io/cluster-service: "true" addonmanager.kubernetes.io/mode: Reconcile spec: type: NodePort # 增加這一行 selector: k8s-app: kubernetes-dashboard ports: - port: 443 targetPort: 8443
2、執行所有定義文件
cd /opt/k8s/work/kubernetes/cluster/addons/dashboard $ ls *.yaml dashboard-configmap.yaml dashboard-controller.yaml dashboard-rbac.yaml dashboard-secret.yaml dashboard-service.yaml $ kubectl apply -f .

3、查看運行狀態
1)查看分配的 NodePort
[root@master-k8s01 dashboard]# kubectl get deployment kubernetes-dashboard -n kube-system NAME READY UP-TO-DATE AVAILABLE AGE kubernetes-dashboard 1/1 1 1 44s [root@master-k8s01 dashboard]# kubectl --namespace kube-system get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES coredns-5b969f4c88-m6t4r 1/1 Running 0 11m 172.30.48.2 node-k8s02 <none> <none> kubernetes-dashboard-85bcf5dbf8-zvsns 1/1 Running 0 55s 172.30.48.3 node-k8s02 <none> <none> [root@master-k8s01 dashboard]# kubectl get services kubernetes-dashboard -n kube-system NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes-dashboard NodePort 10.254.79.202 <none> 443:30380/TCP 61s
- + NodePort 30380 映射到 dashboard pod 443 端口;
4、訪問 dashboard
從 1.7 開始,dashboard 只允許通過 https 訪問,如果使用 kube proxy 則必須監聽 localhost 或 127.0.0.1。對於 NodePort 沒有這個限制,但是僅建議在開發環境中使用。
對於不滿足這些條件的登錄訪問,在登錄成功后**瀏覽器不跳轉,始終停在登錄界面**。
- 1. kubernetes-dashboard 服務暴露了 NodePort,可以使用 `https://NodeIP:NodePort` 地址訪問 dashboard;
- 2. 通過 kube-apiserver 訪問 dashboard;
- 3. 通過 kubectl proxy 訪問 dashboard:
如果使用了 VirtualBox,需要啟用 VirtualBox 的 ForworadPort 功能將虛機監聽的端口和 Host 的本地端口綁定。
可以在 Vagrant 的配置中指定這些端口轉發規則,對於正在運行的虛機,也可以通過 VirtualBox 的界面進行配置:
1)通過 kubectl proxy 訪問 dashboard
kubectl proxy --address='localhost' --port=8086 --accept-hosts='^*$'
- + --address 必須為 localhost 或 127.0.0.1;
- + 需要指定 `--accept-hosts` 選項,否則瀏覽器訪問 dashboard 頁面時提示 “Unauthorized”;
瀏覽器訪問 URL:`http://127.0.0.1:8086/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy`
2)通過 kube-apiserver 訪問 dashboard
獲取集群服務地址列表:
[root@master-k8s01 dashboard]# kubectl cluster-info Kubernetes master is running at https://127.0.0.1:8443 CoreDNS is running at https://127.0.0.1:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy kubernetes-dashboard is running at https://127.0.0.1:8443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
- + 由於 apiserver 通過本地的 kube-nginx 做了代理,所以上面顯示的 127.0.0.1:8443 為本地的 kube-nginx 的 IP 和 Port,瀏覽器訪問時需要替換為 kube-apiserver 實際監聽的 IP 和端口,如 172.27.137.240:6443;
- + 必須通過 kube-apiserver 的安全端口(https)訪問 dashbaord,訪問時瀏覽器需要使用**自定義證書**,否則會被 kube-apiserver 拒絕訪問。
- + 創建和導入自定義證書的步驟,參考瀏覽器訪問 kube-apiserver 安全端口:https://www.cnblogs.com/deny/p/12264757.html
瀏覽器訪問 URL:https://192.168.1.201:6443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy

3)創建登錄 Dashboard 的 token 和 kubeconfig 配置文件
dashboard 默認只支持 token 認證(不支持 client 證書認證),所以如果使用 Kubeconfig 文件,需要將 token 寫入到該文件。
創建登錄 token
kubectl create sa dashboard-admin -n kube-system kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin ADMIN_SECRET=$(kubectl get secrets -n kube-system | grep dashboard-admin | awk '{print $1}') DASHBOARD_LOGIN_TOKEN=$(kubectl describe secret -n kube-system ${ADMIN_SECRET} | grep -E '^token' | awk '{print $2}') echo ${DASHBOARD_LOGIN_TOKEN}

使用輸出的 token 登錄 Dashboard。

創建使用 token 的 KubeConfig 文件
source /opt/k8s/bin/environment.sh # 設置集群參數 kubectl config set-cluster kubernetes \ --certificate-authority=/etc/kubernetes/cert/ca.pem \ --embed-certs=true \ --server=${KUBE_APISERVER} \ --kubeconfig=dashboard.kubeconfig # 設置客戶端認證參數,使用上面創建的 Token kubectl config set-credentials dashboard_user \ --token=${DASHBOARD_LOGIN_TOKEN} \ --kubeconfig=dashboard.kubeconfig # 設置上下文參數 kubectl config set-context default \ --cluster=kubernetes \ --user=dashboard_user \ --kubeconfig=dashboard.kubeconfig # 設置默認上下文 kubectl config use-context default --kubeconfig=dashboard.kubeconfig
用生成的 dashboard.kubeconfig 登錄 Dashboard。
由於缺少 Heapster 插件,當前 dashboard 不能展示 Pod、Nodes 的 CPU、內存等統計數據和圖表。
