• Centos7部署Kubernetes集群(单工作节点)+配置dashboard可视化UI


    目标:docker+kubernetes+cadvosor+dashboard


    一:物理硬件

      两台虚拟机(centos7):一台做为主节点(master),一台做为工作节点(node)

    [root@MyCentos7 ~]# uname -a
    Linux MyCentos7 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
    [root@MyCentos7 ~]# cat /etc/redhat-release 
    CentOS Linux release 7.4.1708 (Core) 

    二:安装说明

      两台服务器: 

        MyCentos7    192.168.126.130

        MyCentos7-1      192.168.126.131 

    • MyCentos7  做为主节点(master),为控制节点,运行 kube-apiserver , kube-controller-manager , kube-scheduler 和 etcd 四个服务,外加flanneld,dashboard
    • MyCentos7-1  做为工作节点(node),实际运行容器的地方,运行 kubelet , proxy,  docker,cadvisor,flanneld

      服务说明:

    • etcd 是一个高可用的 Key/Value 存储系统,主要用于分享配置和服务发现。
    • kubelet是主节点代理,负责每个节点的运行状态,确保节点中的所有容器正常运行。
    • cAdvisor 是谷歌公司用来分析运行中的 Docker 容器的资源占用以及性能特性的工具。
    • docker是容器
    • dashboard,kubernetes的可视化Web监控和操作界面,可以处理所有的工作负载资源(指 Service、Pod 等这些 k8s 中的资源)。注:在master和node上都需要安装flannel
    • flanneld,管理Containers网络

    三:安装步骤

      1.准备

        在MyCentos7(master)和MyCentos7-1(node)上均进行以下操作

    •    设置hosts

        在/etc/hosts中添加

    192.168.126.130   MyCentos7
    192.168.126.131   MyCentos7-1
    •   关闭防火墙
    systemctl disable firewalld.service   #禁止firewall开机启动
    systemctl stop firewalld.service      #停止firewall
    或
    service iptables stop     #临时关闭
    chkconfig iptables off    #禁止开机启动

       

      2.安装

    2.1:master节点上部署etcd

      k8s运行依赖etcd,需要先部署,此处采用yum方式安装

    [root@MyCentos7 ~]# yum install etcd -y

      yum安装的etcd默认配置文件在/etc/etcd/etcd.conf。编辑配置文件,更改以下带颜色部分信息:

    [root@MyCentos7 ~]# vim /etc/etcd/etcd.conf 

    #[Member]
    #ETCD_CORS=""
    ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
    #ETCD_WAL_DIR=""
    ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
    ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"   ## 监听地址端口

    #ETCD_MAX_SNAPSHOTS="5"
    #ETCD_MAX_WALS="5"
    ETCD_NAME=MyCentos7
    #ETCD_SNAPSHOT_COUNT="100000"
    #ETCD_HEARTBEAT_INTERVAL="100"
    #ETCD_ELECTION_TIMEOUT="1000"
    #ETCD_QUOTA_BACKEND_BYTES="0"
    #ETCD_MAX_REQUEST_BYTES="1572864"
    #ETCD_GRPC_KEEPALIVE_MIN_TIME="5s"
    #ETCD_GRPC_KEEPALIVE_INTERVAL="2h0m0s"
    #ETCD_GRPC_KEEPALIVE_TIMEOUT="20s"
    #
    #[Clustering]
    #ETCD_INITIAL_ADVERTISE_PEER_URLS="http://localhost:2380"
    ETCD_ADVERTISE_CLIENT_URLS="http://MyCentos7:2379,http://MyCentos7:4001"   ## etcd集群配置;多个etcd服务器,直接在后面加url

    #ETCD_DISCOVERY=""
    #ETCD_DISCOVERY_FALLBACK="proxy"
    #ETCD_DISCOVERY_PROXY=""
    #ETCD_DISCOVERY_SRV=""
    #ETCD_INITIAL_CLUSTER="MyCentos7=localhost:2380"
    #ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
    #ETCD_INITIAL_CLUSTER_STATE="new"
    #ETCD_STRICT_RECONFIG_CHECK="true"
    #ETCD_ENABLE_V2="true"
    #
    #[Proxy]
    #ETCD_PROXY="off"
    #ETCD_PROXY_FAILURE_WAIT="5000"
    #ETCD_PROXY_REFRESH_INTERVAL="30000"
    #ETCD_PROXY_DIAL_TIMEOUT="1000"
    #ETCD_PROXY_WRITE_TIMEOUT="5000"
    #ETCD_PROXY_READ_TIMEOUT="0"
    #
    #[Security]
    #ETCD_CERT_FILE=""
    #ETCD_KEY_FILE=""
    #ETCD_CLIENT_CERT_AUTH="false"
    #ETCD_TRUSTED_CA_FILE=""
    #ETCD_AUTO_TLS="false"
    #ETCD_PEER_CERT_FILE=""
    #ETCD_PEER_KEY_FILE=""
    #ETCD_PEER_CLIENT_CERT_AUTH="false"
    #ETCD_PEER_TRUSTED_CA_FILE=""
    #ETCD_PEER_AUTO_TLS="false"

      启动etcd,设置开机自启动,并进行验证

    [root@MyCentos7 ~]# systemctl start etcd
    [root@MyCentos7 ~]# systemctl enable etcd [root@MyCentos7 ~]# etcdctl set test/test0 0 0 [root@MyCentos7 ~]# etcdctl get test/test0
    0

    [root@MyCentos7 ~]# etcdctl -C http://MyCentos7:4001 cluster-health
    member 8e9e05c52164694d is healthy: got healthy result from http://MyCentos7:2379
    cluster is healthy
    [root@MyCentos7 ~]# etcdctl -C http://MyCentos7:2379 cluster-health
    member 8e9e05c52164694d is healthy: got healthy result from http://MyCentos7:2379
    cluster is healthy

    至此,etcd安装及配置完成 

    2.2安装docker(master和node均安装)

    修改镜像拉取地址,见:https://www.cnblogs.com/guyeshanrenshiwoshifu/p/9025104.html

    1:安装  
        yum install docker
    2:启动docker并设置开机自启动  
        systemctl start docker.service
        systemctl enable docker.service 

    至此,docker安装及镜像配置完成 

    2.3安装kubernetes(master和node均安装)

    yum install kubernetes

    yum安装的kubernetes默认配置文件在/etc/kubernetes

    [root@MyCentos7 ~]# cd /etc/kubernetes/
    [root@MyCentos7 kubernetes]# ll
    -rw-r--r--. 1 root root 943 6月 6 10:57 apiserve  (kubernetes api配置文件)
    -rw-r--r--. 1 root root 702 6月 5 16:14 config  (kubernetes主配置文件)
    -rw-r--r--. 1 root root 189 7月 3 2017 controller-manager  (集群管理配置文件)
    -rw-r--r--. 1 root root 615 7月 3 2017 kubelet  (kubelet node配置文件)
    -rw-r--r--. 1 root root 103 7月 3 2017 proxy  (kubernetes proxy配置文件)
    -rw-r--r--. 1 root root 111 7月 3 2017 scheduler  (kubernetes scheduler配置文件)

    其中:

    kubernetes在master上需要运行以下组件:
        Kubernets API Server
        Kubernets Controller Manager
        Kubernets Scheduler

    -------master上要修改:(红色字体为改动部分

    apiserver和config两个文件,controller-manager和scheduler这两个文件采用默认配置即可,其余没用到
    • 修改apiserver

    [root@MyCentos7 kubernetes]# vim /etc/kubernetes/apiserver 
    
    ###
    # kubernetes system config
    #
    # The following values are used to configure the kube-apiserver
    #
    
    # The address on the local server to listen to.
    #KUBE_API_ADDRESS="--insecure-bind-address=127.0.0.1"
    KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"      ## kube启动时绑定的地址
    
    
    # The port on the local server to listen on.
    KUBE_API_PORT="--port=8080"
    
    # Port minions listen on
    KUBELET_PORT="--kubelet-port=10250"
    
    # Comma separated list of nodes in the etcd cluster
    KUBE_ETCD_SERVERS="--etcd-servers=http://MyCentos7:2379"  ## kube调用etcd的url
    
    # Address range to use for services
    KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"  ## 此地址是docker容器的地址段,也是Kubernetes可分配的IP范围,Kubernetes启动的每一个pod和service都会从这个范围中为其分配一个IP地址。  配置flanneld时会用到,需将其写入etcd中!!!!
    # default admission control policies 
    # KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"
    KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota" ##移除ServiceAccount 项目,否则在后期中会报出没有认证错误
    # Add your own! KUBE_API_ARGS=""
    • 修改config

    [root@MyCentos7 kubernetes]# vim /etc/kubernetes/config
    
    ###
    # kubernetes system config
    #
    # The following values are used to configure various aspects of all
    # kubernetes services, including
    #
    #   kube-apiserver.service
    #   kube-controller-manager.service
    #   kube-scheduler.service
    #   kubelet.service
    #   kube-proxy.service
    # logging to stderr means we get it in the systemd journal
    KUBE_LOGTOSTDERR="--logtostderr=true"
    
    # journal message level, 0 is debug
    KUBE_LOG_LEVEL="--v=0"
    
    # Should this cluster be allowed to run privileged docker containers
    KUBE_ALLOW_PRIV="--allow-privileged=false"
    
    # How the controller-manager, scheduler, and proxy find the apiserver
    #KUBE_MASTER="--master=http://127.0.0.1:8080"
    KUBE_MASTER="--master=http://MyCentos7:8080"

    -------node上要修改:(红色字体为改动部分

    kubelet和config两个文件,其余没用到
    • 修改kubelet

    [root@MyCentos7-1 kubernetes]# vim /etc/kubernetes/kubelet
    
    ###
    # kubernetes kubelet (minion) config
    
    # The address for the info server to serve on (set to 0.0.0.0 or "" for all interfaces)
    #KUBELET_ADDRESS="--address=127.0.0.1"
    KUBELET_ADDRESS="--address=0.0.0.0"
    
    # The port for the info server to serve on
    #KUBELET_PORT="--port=10250"
    
    # You may leave this blank to use the actual hostname
    #KUBELET_HOSTNAME="--hostname-override=127.0.0.1"
    KUBELET_HOSTNAME="--hostname-override=MyCentos7-1"
    
    # location of the api-server
    #KUBELET_API_SERVER="--api-servers=http://127.0.0.1:8080"
    KUBELET_API_SERVER="--api-servers=http://MyCentos7:8080"
    
    # pod infrastructure container
    KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
    
    # Add your own!
    KUBELET_ARGS=""
    • 修改config

    [root@MyCentos7-1 kubernetes]# vim /etc/kubernetes/config
    
    ###
    # kubernetes system config
    #
    # The following values are used to configure various aspects of all
    # kubernetes services, including
    #
    #   kube-apiserver.service
    #   kube-controller-manager.service
    #   kube-scheduler.service
    #   kubelet.service
    #   kube-proxy.service
    # logging to stderr means we get it in the systemd journal
    KUBE_LOGTOSTDERR="--logtostderr=true"
    
    # journal message level, 0 is debug
    KUBE_LOG_LEVEL="--v=0"
    
    # Should this cluster be allowed to run privileged docker containers
    KUBE_ALLOW_PRIV="--allow-privileged=false"
    
    # How the controller-manager, scheduler, and proxy find the apiserver
    KUBE_MASTER="--master=http://MyCentos7:8080"

    至此,kubernetes集群安装及配置完成

    2.4安装Fanneld并配置,创建覆盖网络

     在master和node上均执行以下命令进行安装

    yum install flannel

    且都对配置文件/etc/sysconfig/flanneld做如下修改(红色字体为改动部分

    [root@MyCentos7 ~]# vim /etc/sysconfig/flanneld
    
    # Flanneld configuration options  
    
    # etcd url location.  Point this to the server where etcd runs
    #FLANNEL_ETCD_ENDPOINTS="http://127.0.0.1:2379"
    FLANNEL_ETCD_ENDPOINTS="http://MyCentos7:2379"
    
    # etcd config key.  This is the configuration key that flannel queries
    # For address range assignment
    FLANNEL_ETCD_PREFIX="/atomic.io/network"
    
    # Any additional options that you want to pass
    #FLANNEL_OPTIONS=""

    在master上配置etcd中关于flannel的key

    Flannel使用etcd来配置,以确保多个flannel实例直接的配置一致性

    使用命令:

    [root@MyCentos7 ~]# etcdctl mk /atomic.io/network/config '{ "Network": "10.254.0.0/16" }'
    { "Network": "10.254.0.0/16" }

    其中:

    ‘/atomic.io/network/config’这个key与上文/etc/sysconfig/flannel中的配置项FLANNEL_ETCD_PREFIX是相对应的,错误的话启动就会出错;

    ip和上文中出现的/etc/kubernetes/apiserver中的配置项KUBE_SERVICE_ADDRESSES中的ip地址保持一致;

    分别在master和node上启动flanneld服务,并设置开机自启动

    systemctl enable flanneld.service 
    
    systemctl start flanneld.service 

    Flannel启动之后,docker需要重启

    service docker restart  ##master和node上都重启

    使用ifconfig查看Flannel状态,flannel的网段必须一致

    master节点

    [root@MyCentos7 ~]# ifconfig
    docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1472
            inet 10.254.79.1  netmask 255.255.255.0  broadcast 0.0.0.0
            inet6 fe80::42:9aff:fe17:f633  prefixlen 64  scopeid 0x20<link>
            ether 02:42:9a:17:f6:33  txqueuelen 0  (Ethernet)
            RX packets 32  bytes 2144 (2.0 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 31  bytes 6088 (5.9 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.126.130  netmask 255.255.255.0  broadcast 192.168.126.255
            inet6 fe80::20c:29ff:fedb:8621  prefixlen 64  scopeid 0x20<link>
            ether 00:0c:29:db:86:21  txqueuelen 1000  (Ethernet)
            RX packets 708254  bytes 141038357 (134.5 MiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 538862  bytes 210767398 (201.0 MiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    flannel0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1472
            inet 10.254.79.0  netmask 255.255.0.0  destination 10.254.79.0
            inet6 fe80::d331:f10c:e8d8:4015  prefixlen 64  scopeid 0x20<link>
            unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 500  (UNSPEC)
            RX packets 3467  bytes 2491574 (2.3 MiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 3690  bytes 755714 (738.0 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            inet6 ::1  prefixlen 128  scopeid 0x10<host>
            loop  txqueuelen 1  (Local Loopback)
            RX packets 3493464  bytes 1530884404 (1.4 GiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 3493464  bytes 1530884404 (1.4 GiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    veth857ce98: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1472
            inet6 fe80::b09b:faff:fe53:25d4  prefixlen 64  scopeid 0x20<link>
            ether b2:9b:fa:53:25:d4  txqueuelen 0  (Ethernet)
            RX packets 8  bytes 648 (648.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 8  bytes 648 (648.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
            inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
            ether 52:54:00:a5:ef:23  txqueuelen 1000  (Ethernet)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 0  bytes 0 (0.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

    node节点

    [root@MyCentos7-1 kubernetes]# ifconfig
    docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1472
            inet 10.254.40.1  netmask 255.255.255.0  broadcast 0.0.0.0
            inet6 fe80::42:64ff:fe10:7e79  prefixlen 64  scopeid 0x20<link>
            ether 02:42:64:10:7e:79  txqueuelen 0  (Ethernet)
            RX packets 71758  bytes 13564840 (12.9 MiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 62513  bytes 18941202 (18.0 MiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.126.131  netmask 255.255.255.0  broadcast 192.168.126.255
            inet6 fe80::20c:29ff:fe62:4928  prefixlen 64  scopeid 0x20<link>
            ether 00:0c:29:62:49:28  txqueuelen 1000  (Ethernet)
            RX packets 665714  bytes 364751429 (347.8 MiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 713961  bytes 112909944 (107.6 MiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    flannel0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1472
            inet 10.254.40.0  netmask 255.255.0.0  destination 10.254.40.0
            inet6 fe80::4db5:581:930d:4945  prefixlen 64  scopeid 0x20<link>
            unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 500  (UNSPEC)
            RX packets 366  bytes 56830 (55.4 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 311  bytes 45570 (44.5 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            inet6 ::1  prefixlen 128  scopeid 0x10<host>
            loop  txqueuelen 1  (Local Loopback)
            RX packets 128  bytes 8178 (7.9 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 128  bytes 8178 (7.9 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    veth24cfe15: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1472
            inet6 fe80::7023:6ff:fe24:927d  prefixlen 64  scopeid 0x20<link>
            ether 72:23:06:24:92:7d  txqueuelen 0  (Ethernet)
            RX packets 8  bytes 648 (648.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 23  bytes 1818 (1.7 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    vethedeed63: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1472
            inet6 fe80::4cbd:12ff:fe71:9158  prefixlen 64  scopeid 0x20<link>
            ether 4e:bd:12:71:91:58  txqueuelen 0  (Ethernet)
            RX packets 13545  bytes 2859970 (2.7 MiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 12829  bytes 1760034 (1.6 MiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
            inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
            ether 52:54:00:a5:ef:23  txqueuelen 1000  (Ethernet)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 0  bytes 0 (0.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

    倘若不一致,在访问bashboard时会出现如下问题

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

    问题详情及解决办法,见:https://www.cnblogs.com/guyeshanrenshiwoshifu/p/9146915.html

    至此,Fanneld安装及配置完成

    2.5启动kubernetes集群

    配置完成之后,启动kubernetes集群并设置开机自启动

    在master上执行(注意启动顺序)


    [root@MyCentos7 ~]# systemctl enable kube-apiserver.service [root@MyCentos7 ~]# systemctl enable kube-controller-manager.service [root@MyCentos7 ~]# systemctl enable kube-scheduler.service
    [root@MyCentos7 ~]# systemctl start kube-apiserver.service [root@MyCentos7 ~]# systemctl start kube-controller-manager.service [root@MyCentos7 ~]# systemctl start kube-scheduler.service

    在node上执行

    [root@MyCentos7-1 ~]# systemctl enable kubelet.service
    [root@MyCentos7-1 ~]# systemctl enable kube-proxy.service
    
    [root@MyCentos7-1 ~]# systemctl start kubelet.service
    [root@MyCentos7-1 ~]# systemctl start kube-proxy.service

    启动集群之后,在master上查看集群中节点及节点状态

    [root@MyCentos7 kubernetes]# kubectl -s http://MyCentos7:8080 get node
    NAME          STATUS    AGE
    mycentos7-1   Ready     1d
    [root@MyCentos7 kubernetes]# kubectl get nodes
    NAME          STATUS    AGE
    mycentos7-1   Ready     1d

    正常

    2.6安装cadvosor

    注:在新版的kubernetes中,cAdvisor被集成到kubelet中。通过netstat可以查看到kubelet新开了一个4194的端口,这就是cAdvisor监听的端口,现在我们然后可以通过http://<node-ip>:4194的方式访问到cAdvisor。 

    故cadvosor可以不用安装。。。

    使用如下命令安装

    docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --privileged=true --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --publish=9994:8088 --detach=true --name=cadvisor --restart=always google/cadvisor:v0.24.1

    访问地址:http://ip_address:9994

     

    至此,cadvosor安装及配置完成

    2.7安装bashboard

     首先要确认是否有kube-system命名空间。

    [root@MyCentos7 ~]# kubectl get namespace 
    NAME          STATUS    AGE
    default       Active    2d
    kube-system   Active    2d

    若没有,则新建

    在master指定位置新建kube-dashboard.yaml文件,我的建到了/service/docker/k8s目录下

    wget http://docs.minunix.com/docker/kubernetes-dashboard.yaml -O /service/docker/k8s/kube-dashboard.yaml

    对kube-dashboard.yaml做如下修改(红色字体为改动部分

    [root@MyCentos7 k8s]# vim kube-dashboard.yaml

    # Copyright 2015 Google Inc. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Configuration to deploy release version of the Dashboard UI. # # Example usage: kubectl create -f
    <this_file> kind: Deployment # Example usage: kubectl create -f <this_file> kind: Deployment apiVersion: extensions/v1beta1 metadata: labels: app: kubernetes-dashboard version: v1.1.1 name: kubernetes-dashboard namespace: kube-system spec: replicas: 1 selector: matchLabels: app: kubernetes-dashboard template: metadata: labels: app: kubernetes-dashboard spec: containers: - name: kubernetes-dashboard image: daocloud.io/megvii/kubernetes-dashboard-amd64:v1.8.0 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.126.130:8080 ## 请修改为自己的kebu-apiserver 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

    根据此yaml文件创建pods,命令如下:

    [root@MyCentos7 k8s]# kubectl create -f kube-dashboard.yaml

    查看是否创建成功,命令如下:

    [root@MyCentos7 k8s]# kubectl get pods --namespace=kube-system
    NAME READY STATUS RESTARTS AGE
    kubernetes-dashboard-2094756401-k09kb 1/1 Running 2 22h

    如果创建过程中有错误,也可以通过以下的方式查看错误原因:

    [root@MyCentos7 k8s]# kubectl describe pods kubernetes-dashboard-2094756401-k09kb --namespace=kube-system

    说明:在创建的过程中遇到了如下错误,且pod一直处于ContainerCreating状态

     FirstSeen    LastSeen    Count    From            SubObjectPath    Type        Reason        Message
      ---------    --------    -----    ----            -------------    --------    ------        -------
      1m        1m        1    {default-scheduler }            Normal        Scheduled    Successfully assigned kubernetes-dashboard-2094756401-kzhnx to mycentos7-1
      1m        27s        3    {kubelet mycentos7-1}            Warning        FailedSync    Error syncing pod, skipping: failed to "StartContainer" for "POD" with ErrImagePull: "image pull failed for registry.access.redhat.com/rhel7/pod-infrastructure:latest, this may be because there are no credentials on this request.  details: (open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory)"
    
      40s    14s    2    {kubelet mycentos7-1}        Warning    FailedSync    Error syncing pod, skipping: failed to "StartContainer" for "POD" with ImagePullBackOff: "Back-off pulling image \"registry.access.redhat.com/rhel7/pod-infrastructure:latest\""

    问题及解决方法详情见:https://www.cnblogs.com/guyeshanrenshiwoshifu/p/9147238.html

    至此,bashboard安装及配置完成

    四:访问dashboard ui查看集群状态

    浏览器访问http://192.168.126.130:8080/ui

     至此,全部完成

     由于缺少 Heapster 插件,当前 dashboard 不能展示 Pod、Nodes 的 CPU、内存等 metric 图形

    访问dashboard UI可能出现的问题:

    getsockopt: connection timed out’问题

    如果安装的docker版本为1.13及以上,并且网络畅通,flanneletcd都正常,但还是会出现getsockopt: connection timed out'的错误,则可能是iptables配置问题。具体问题:

    Error: 'dial tcp 10.233.50.3:8443: getsockopt: connection timed out

    docker1.13版本开始,可能将iptables FORWARD chain的默认策略设置为DROP,从而导致ping其他Node上Pod IP失败,遇到这种问题时,需要手动设置策略为ACCEPT

    sudo iptables -P FORWARD ACCEPT

    使用iptables -nL命令查看,发现Forward的策略还是drop,可是我们明明执行了iptables -P FORWARD ACCEPT。原来,docker是在这句话执行之后启动的,需要每次在docker之后再执行这句话。。。这么做有点太麻烦了,所以我们修改下docker的启动脚本:

    vim /usr/lib/systemd/system/docker.service
    
    [Service]
    Type=notify
    NotifyAccess=all
    EnvironmentFile=-/run/containers/registries.conf
    EnvironmentFile=-/etc/sysconfig/docker
    EnvironmentFile=-/etc/sysconfig/docker-storage
    EnvironmentFile=-/etc/sysconfig/docker-network
    Environment=GOTRACEBACK=crash
    Environment=DOCKER_HTTP_HOST_COMPAT=1
    Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbin
    ExecStart=/usr/bin/dockerd-current \
              --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \
              --default-runtime=docker-runc \
              --exec-opt native.cgroupdriver=systemd \
              --userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
              --seccomp-profile=/etc/docker/seccomp.json \
              $OPTIONS \
              $DOCKER_STORAGE_OPTIONS \
              $DOCKER_NETWORK_OPTIONS \
              $ADD_REGISTRY \
              $BLOCK_REGISTRY \
              $INSECURE_REGISTRY \
              $REGISTRIES
    ExecStartPost=/sbin/iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPT     ## 添加这行操作,在每次重启docker之前都会设置iptables策略为ACCEPT
    ExecReload=/bin/kill -s HUP $MAINPID
    LimitNOFILE=1048576
    LimitNPROC=1048576
    LimitCORE=infinity
    TimeoutStartSec=0
    Restart=on-abnormal
    MountFlags=slave
    KillMode=process

    在启动文件中的 [Service] 下添加一行配置,即上面代码中的配置即可。

    然后重启docker,再次查看dashboard网页。

    dashboard集成heapster详见另一篇博客:

    https://www.cnblogs.com/guyeshanrenshiwoshifu/p/9155939.html

  • 相关阅读:
    Matlab曲面拟合和插值
    插值(scipy.interpolate)
    坐标系旋转后的点坐标、坐标点旋转后的点坐标
    halcon相机标定及图像矫正
    别再问我们用什么画图的了!问就是excalidraw
    Windows下如何玩转火热的go-zero
    我用go-zero开发了第一个线上项目
    Java基础差,需要怎么补
    2019-给你六个建议
    简说Java线程的那几个启动方式
  • 原文地址:https://www.cnblogs.com/guyeshanrenshiwoshifu/p/9135413.html
Copyright © 2020-2023  润新知