k8s插件管理(coredns,dashboard)


一、部署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、內存等統計數據和圖表。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM