zoukankan      html  css  js  c++  java
  • 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、内存等统计数据和图表。

  • 相关阅读:
    更好的处理 Python 多工程 import 依赖
    Django 前后台的数据传递
    Django传递数据给JS
    nodejs 设置跨域访问
    Node.js + Express
    前端用户输入校验--基于JQ
    git统计当前分支提交次数
    gitlab相关
    CentOS7使用firewalld打开关闭防火墙与端口
    puppeteer安装/爬取数据
  • 原文地址:https://www.cnblogs.com/deny/p/12272683.html
Copyright © 2011-2022 走看看