Centos7 k8s部署dahsboard

一、k8s部署dahsboard

  1、pull镜像到本地,并上传至私有仓库

[root@k8s-master ~]# docker pull docker.io/siriuszg/kubernetes-dashboard-amd64:v1.5.1
[root@k8s-master ~]# docker tag docker.io/siriuszg/kubernetes-dashboard-amd64:v1.5.1 192.168.125.130:5000/kubernetes-dashboard:v1.5.1
[root@k8s-master ~]# docker push 192.168.125.130:5000/kubernetes-dashboard:v1.5.1

  2、修改配置文件,并创建dashboard

[root@k8s-master ~]# vim kubernetes-dashboard.yaml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  labels:
    app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kubernetes-dashboard
  template:
    metadata:
      labels:
        app: kubernetes-dashboard
      # Comment the following annotation if Dashboard must not be deployed on master
      annotations:
        scheduler.alpha.kubernetes.io/tolerations: |
          [
            {
              "key": "dedicated",
              "operator": "Equal",
              "value": "master",
              "effect": "NoSchedule"
            }
          ]
    spec:
      containers:
      - name: kubernetes-dashboard
        image: 192.168.125.130:5000/kubernetes-dashboard:v1.5.1                                            修改地址为私有仓库得地址
        imagePullPolicy: Always
        ports:
        - containerPort: 9090
          protocol: TCP
        args:
          # Uncomment the following line to manually specify Kubernetes API server Host 
          # If not specified, Dashboard will attempt to auto discover the API server and connect 
          # to it. Uncomment only if the default does not work. 
          - --apiserver-host=http://192.168.125.130:8080                                                   修改为api,主节点的IP地址
        livenessProbe:
          httpGet:
            path: /
            port: 9090
          initialDelaySeconds: 30
          timeoutSeconds: 30
---
kind: Service
apiVersion: v1
metadata:
  labels:
    app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 9090
  selector:
    app: kubernetes-dashboard
[root@k8s-master ~]# kubectl create -f kubernetes-dashboard.yaml

  3、node节点安装服务

[root@k8s-node1 ~]#yum install *rhsm* -y
[root@k8s-node1 ~]# systemctl restart kubelet.service
[root@k8s-node1 ~]# systemctl restart kube-proxy.service

  4、查看容器

[root@k8s-master ~]# kubectl get deployment --namespace=kube-system                    这个是系统功能,需要加上命名空间才能看到
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
kubernetes-dashboard 1 1 1 1 19m
[root@k8s
-master opt]# kubectl get pods --namespace=kube-system NAME READY STATUS RESTARTS AGE kubernetes-dashboard-2518785241-gj838 1/1 Running 0 20m
[root@k8s-master opt]# kubectl get pods --all-namespaces 查看所有容器

  5、启动成功之后,访问web页面(输入http://192.168.125.130:8080 )

   6、看到如下界面,再输入(http://192.168.125.130:8080 /ui/,即可跳转页面),如果未能跳转页面,则需执行如下步骤

    错误现象:

    当我们创建完k8s dashboard,试图访问web ui界面的时候如:

    dashboard访问地址;http://192.168.125.130:8080/ui

    抛出如下错误:

Error: 'dial tcp 192.168.125.130:9090: getsockopt: connection timed out'
Trying to reach: 'http://192.168.125.130:9090/'

    原因分析:

      为什么访问的是8080端口被重定向到了不同的ip和不同的端口呢?

    这是因为:

      我们首先是通过在 master节点ip:8080/ui  (apiserver restful api外部交互总入口)端口去访问dashboard,然后具体的dashboard pod却是在minion/node节点上通过kubelet创建部署的,所以不同的ip和端口就是你实际在Minion/Node节点所创建的ip地址和

    端口即其访问端点endpoint。9090应该是你创建dashboard的yaml中自己配置pod的访问端口。

    可以通过在master节点使用命令,查看dashboard pod的ip地址。

kubectl describe pod kubernetes-dashboard-2518785241-gj838 --namespace kube-system
Name: kubernetes-dashboard-2518785241-gj838
Namespace:    kube-system
Node:    k8s-node2/192.168.125.132
Start Time:    Sat, 20 Jun 2020 10:41:03 +0800
Labels:    app=kubernetes-dashboard
pod-template-hash=2518785241
Status:    Running
IP:    172.16.100.2
Controllers:    ReplicaSet/kubernetes-dashboard-2518785241

    因此,问题就明确了,是因为从Master节点无法访问Node节点pod ip+端口而导致的错误。

      解决方法:

      关闭iptables防火墙 (如果是防火墙原因导致的master节点无法ping通node之上的Pod节点)

systemctl stop iptables
systemctl disable iptables     

      即使关闭了防火墙跨主机间容器、pod始终无法ping通

      这是由于linux还有底层的iptables,所以在node上分别执行:

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F
iptables -L -n

      如果从主节点ping Node节点Pod ip地址可以ping通,则查看web ui应该没有问题了。

   7、再次访问:http://192.168.125.130:8080/ui,即可自动跳转,得到如下界面

   即安装部署成功!!!

二、功能介绍 

  1、web页面创建pods,选中新副本控制器,点击右上角的创建。

   2、填好信息,点击创建容器

   3、可以看到已经创建成功了。

  4、命名空间,点击Namespace,选择命名空间

   12、Workloads介绍

    deamon set:一个node节点只能启动一个,适合跑监控pod,日志收集pod

    pet sets(1.4后改为stathfull):宠物应用,有状态的,有数据的应用

    deployment:畜生应用,随便杀死,没有数据,无状态应用

      Job:一次性的任务,合适周期性的执行备份任务。

                cronjob:定时任务,k8s里面的

     5、其他介绍

 三、容器访问方式

  1、拓扑图

 

     定义了targetPOrt参数

    敲回车,可以访问,后面的都是参数。

  2、自定义一个

[root@k8s-master opt]# kubectl get deployment
[root@k8s-master opt]# kubectl delete deployment nginx-web
[root@k8s-master opt]# kubectl edit deployment nginx-deployment

   3、创建svc

[root@k8s-master opt]# vim nginx-svcv2.yaml
apiVersion: v1
kind: Service
metadata:
  name: web
spec:
  selector:
    app: web                                       刚才得标签名字
  ports:
    - port: 80
      targetPort: 80

  4、创建svc

kubectl create -f nginx-svcv2.yaml

  5、查看详情,看到已经关联了几个pods

   6、访问地址

http://192.168.125.130:8080/api/v1/proxy/namespaces/default/services/web/             
命名空间使用默认,后面svc=web

 访问成功!!!

用nodePOrt,和api代理,都可以访问,对比配置文件

 k8s pod访问方式另外还有一种,LoadBalancer,访问效率最高,但是现在都用云主机,就慢慢没有怎么用了。

原文地址:https://www.cnblogs.com/aqicheng/p/13113567.html