Kubernetes(一)--部署dashboard

1,399 阅读4分钟

dashboard的特点主要如下:

1、能够直观的看到rc、deployment、pod、services等k8s组件的运行情况和日志信息。
2、结合heapster和influxdb后,dashboard的监控图表上可以看到pod的cpu和内存消耗情况。 

部署dashboard需要两个费劲的镜像 注:正常来讲只需要配置好yaml文件,不需要事先下载好镜像到节点当中,也就是如果yaml配置文件内所使用的镜像在node中不存在就会自动从docker源下载,但是我们现在使用的镜像是没有国内源的,所以先下载下来导入到每个node内。

准备镜像:国外下载,国内导入

核心操作:从海外的服务器上pull下来对应的镜像,之后通过docker save保存成tar包,将tar包传回国内,在每个node上执行docker load将镜像导入(在master上也要倒入)。

镜像1:

在dashboard.yaml中定义了dashboard所用的镜像:
    daocloud.io/daocloud/google_containers_kubernetes-dashboard-amd64:v1.6.1
    也可以选择其他的版本

注:这个镜像每个节点都下载
    # docker pull daocloud.io/daocloud/google_containers_kubernetes-dashboard-amd64:v1.6.1

镜像2:

启动k8s的pod还需要一个额外的镜像:
    registry.access.redhat.com/rhel7/pod-infrastructure:latest
(node中,/etc/kubernetes/kubelet的配置),由于一些众所周知的原因,这个镜像在国内是下载不下来的

美国服务器:

# yum install docker -y
# systemctl start docker
# docker search  pod-infrastructure  //从找到的结果中下载了一个其他版本的镜像,原装的不能下载
# docker pull docker.io/tianyebj/pod-infrastructure
# docker save -o podinfrastructure.tar  docker.io/tianyebj/pod-infrastructure

本地机器node1:

# scp   美国服务器IP:/podinfrastructure.tar   /
  下载下来之后拷贝给所有node节点,然后导入:
# docker load < podinfrastructure.tar

查看导入之后的镜像
# docker images
REPOSITORY                                               TAG          IMAGE ID            CREATED             SIZE
daocloud.io/daocloud/google_containers_kubernetes-dashboard-amd64   v1.6.1              71dfe833ce74        10 months ago       134 MB
docker.io/tianyebj/pod-infrastructure           latest       34d3450d733b    14 months ago   205 MB

修改配置文件(每个节点都修改):

# vim /etc/kubernetes/kubelet   //修改下行内的镜像名称image=之后的内容
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=docker.io/tianyebj/pod-infrastructure:latest"

重启服务(每个节点都重启):

# systemctl  restart kubelet

master上编辑dashboard.yaml:

任何目录下都可以,注意或更改以下带**部分
[root@k8s-master /]# vim dashboard.yaml 
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
# Keep the name in sync with image version and
# gce/coreos/kube-manifests/addons/dashboard counterparts
  name: kubernetes-dashboard-latest
  namespace: kube-system
spec:
  replicas: 1
  template:
    metadata:
      labels:
        k8s-app: kubernetes-dashboard
        version: latest
        kubernetes.io/cluster-service: "true"
    spec:
      containers:
      - name: kubernetes-dashboard
        **image: daocloud.io/daocloud/google_containers_kubernetes-dashboard-amd64:v1.6.1

        resources:
          # keep request = limit to keep this container in guaranteed class
          limits:
            cpu: 100m
            memory: 50Mi
          requests:
            cpu: 100m
            memory: 50Mi
        ports:
        - containerPort: 9090
        args:
         **-  --apiserver-host=http://192.168.245.250:8080 #注意这里因没部署DNS服务,现在必须写IP
        livenessProbe:
          httpGet:
            path: /
            port: 9090
          initialDelaySeconds: 30
          timeoutSeconds: 30

master上编辑dashboardsvc.yaml文件

任何目录下都可以:
[root@k8s-master /]# vim dashboardsvc.yaml
apiVersion: v1
kind: Service
metadata:
  name: kubernetes-dashboard
  namespace: kube-system
  labels:
    k8s-app: kubernetes-dashboard
    kubernetes.io/cluster-service: "true"
spec:
  selector:
    k8s-app: kubernetes-dashboard
  ports:
  - port: 80
    targetPort: 9090

启动

在master执行如下命令:
# kubectl create -f dashboard.yaml
# kubectl create -f dashboardsvc.yaml&emsp;&emsp;

dashboard搭建完成。

验证

命令验证,master上执行如下命令:

[root@k8s-master /]# kubectl get deployment --all-namespaces
NAMESPACE     NAME                          DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
kube-system   kubernetes-dashboard-latest   1         1         1            1           19s

[root@k8s-master /]# kubectl get svc  --all-namespaces
NAMESPACE     NAME                   CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
default       kubernetes             10.254.0.1      <none>        443/TCP   4d
kube-system   kubernetes-dashboard   10.254.231.52   <none>        80/TCP    32s

[root@k8s-master /]# kubectl get pod  -o wide  --all-namespaces
NAMESPACE     NAME                                           READY     STATUS    RESTARTS   AGE       IP          NODE
kube-system   kubernetes-dashboard-latest-1231782504-t79t7   1/1       Running   0          1m        10.0.27.2   k8s-node-2

界面验证,浏览器访问:http://192.168.245.250:8080/ui

销毁应用(注意不想用的时候才销毁)

在master上执行:

# kubectl delete deployment kubernetes-dashboard-latest --namespace=kube-system
# kubectl delete svc  kubernetes-dashboard --namespace=kube-system

补充

浏览器访问dashboard页面报错如下:

Error: 'dial tcp 172.17.34.2:9090: getsockopt: connection refused'
Trying to reach: 'http://172.17.34.2:9090/'

1.所有节点执行下面命令重置flannel网络

[root@k8s-node1 ~]# systemctl daemon-reload
[root@k8s-node1 ~]# systemctl restart flanneld

2.master上重新创建dashboard应用

[root@k8s-master yaml]# kubectl delete deployment kubernetes-dashboard-latest --namespace=kube-system
deployment "kubernetes-dashboard-latest" deleted

[root@k8s-master yaml]# kubectl delete svc  kubernetes-dashboard --namespace=kube-system
service "kubernetes-dashboard" deleted

[root@k8s-master yaml]# kubectl create -f dashboard.yaml
deployment "kubernetes-dashboard-latest" created

[root@k8s-master yaml]#  kubectl create -f dashboardsvc.yaml
service "kubernetes-dashboard" created

[root@k8s-master yaml]# kubectl get deployment --all-namespaces
NAMESPACE     NAME                          DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
default       mynginx                       2         2         2            2           26d
kube-system   kubernetes-dashboard-latest   1         1         1            1           12s