一.简介
Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。
1.1 Kubernetes不是什么
-  
Kubernetes 不是传统的、包罗万象的 PaaS(平台即服务)系统。
 -  
Kubernetes 在容器级别而不是在硬件级别运行
 -  
它提供了 PaaS 产品共有的一些普遍适用的功能, 例如部署、扩展、负载均衡、日志记录和监视。
 -  
但是,Kubernetes 不是单体系统,默认解决方案都是可选和可插拔的。 Kubernetes 提供了构建开发人员平台的基础,但是在重要的地方保留了用户的选择和灵活性。
 
Kubernetes:
-  
不限制支持的应用程序类型。 Kubernetes 旨在支持极其多种多样的工作负载,包括无状态、有状态和数据处理工作负载。 如果应用程序可以在容器中运行,那么它应该可以在 Kubernetes 上很好地运行。
 -  
不部署源代码,也不构建你的应用程序。 持续集成(CI)、交付和部署(CI/CD)工作流取决于组织的文化和偏好以及技术要求。
 -  
不提供应用程序级别的服务作为内置服务,例如中间件(例如,消息中间件)、 数据处理框架(例如,Spark)、数据库(例如,mysql)、缓存、集群存储系统 (例如,Ceph)。这样的组件可以在 Kubernetes 上运行,并且/或者可以由运行在 Kubernetes 上的应用程序通过可移植机制(例如, 开放服务代理)来访问。
 -  
不要求日志记录、监视或警报解决方案。 它提供了一些集成作为概念证明,并提供了收集和导出指标的机制。
 -  
不提供或不要求配置语言/系统(例如 jsonnet),它提供了声明性 API, 该声明性 API 可以由任意形式的声明性规范所构成。RESTful;写yaml文件
 -  
不提供也不采用任何全面的机器配置、维护、管理或自我修复系统。
 -  
此外,Kubernetes 不仅仅是一个编排系统,实际上它消除了编排的需要。 编排的技术定义是执行已定义的工作流程:首先执行 A,然后执行 B,再执行 C。 相比之下,Kubernetes 包含一组独立的、可组合的控制过程, 这些过程连续地将当前状态驱动到所提供的所需状态。 如何从 A 到 C 的方式无关紧要,也不需要集中控制,这使得系统更易于使用 且功能更强大、系统更健壮、更为弹性和可扩展。
 
二. Kubernetes安装
2.1 集群安装规划
node-1:2c 4g,安装master节点
node-2:4c 8g,安装worker节点
node-3:4c 8g,安装worker节点
| Master | worker | worker | |
|---|---|---|---|
| node-1 | ✓ | ||
| node-2 | ✓ | ||
| node-3 | ✓ | 
2.2 集群原理
2.2.1 集群架构图

2.2.2 工作原理

master节点(Control Plane【控制面板】):master节点控制整个集群
master节点上有一些核心组件:
-  
Controller Manager:控制管理器
 -  
etcd:键值数据库(redis)【记账本,记事本】
 -  
scheduler:调度器
 -  
api server:api网关(所有的控制都需要通过api-server)
 
node节点(worker工作节点):
-  
kubelet(监工):每一个node节点上必须安装的组件。
 -  
kube-proxy:代理。代理网络
 
部署一个应用?
程序员:调用CLI告诉master,我们现在要部署一个tomcat应用
-  
程序员的所有调用都先去master节点的网关api-server。这是matser的唯一入口(mvc模式中的c层)
 -  
收到的请求先交给master的api-server。由api-server交给controller-mannager进行控制
 -  
controller-mannager 进行 应用部署
 -  
controller-mannager 会生成一次部署信息。 tomcat --image:tomcat6 --port 8080 ,真正不部署应用
 -  
部署信息被记录在etcd中
 -  
scheduler调度器从etcd数据库中,拿到要部署的应用,开始调度。看哪个节点合适,
 -  
scheduler把算出来的调度信息再放到etcd中
 -  
每一个node节点的监控kubelet,随时和master保持联系的(给api-server发送请求不断获取最新数据),所有节点的kubelet就会从master
 -  
假设node2的kubelet最终收到了命令,要部署。
 -  
kubelet就自己run一个应用在当前机器上,随时给master汇报当前应用的状态信息,分配ip
 -  
node和master是通过master的api-server联系的
 -  
每一个机器上的kube-proxy能知道集群的所有网络。只要node访问别人或者别人访问node,node上的kube-proxy网络代理自动计算进行流量转发
 
2.2.3 原理分析
主节点(master)

快速介绍:
-  
master也要装kubelet和kubeproxy
 -  
前端访问(UI\CLI):
 -  
kube-apiserver:
 -  
scheduler:
 -  
controller manager:
 -  
etcd
 -  
kubelet+kubeproxy每一个节点的必备+docker(容器运行时环境)
 
工作节点(node)

快速介绍:
-  
Pod:
-  
docker run 启动的是一个container(容器),容器是docker的基本单位,一个应用是一个容器
 -  
kubelet run 启动的一个应用称为一个Pod;Pod是k8s的基本单位。
-  
Pod是容器的一个再封装
 -  
atguigu(永远不变) ==slf4j= log4j(类)
 -  
应用 ===== ==Pod== ======= docker的容器
 -  
一个容器往往代表不了一个基本应用。博客(php+mysql合起来完成)
 -  
准备一个Pod 可以包含多个 container;一个Pod代表一个基本的应用。
 -  
IPod(看电影、听音乐、玩游戏)【一个基本产品,原子】;
 -  
Pod(music container、movie container)【一个基本产品,原子的】
 
 -  
 
 -  
 -  
Kubelet:监工,负责交互master的api-server以及当前机器的应用启停等,在master机器就是master的小助手。每一台机器真正干活的都是这个 Kubele
 
组件交互原理

想让k8s部署一个tomcat?
0、开机默认所有节点的kubelet、master节点的scheduler(调度器)、controller-manager(控制管理器)一直监听master的api-server发来的事件变化(for ::)
1、程序员使用命令行工具: kubectl ; kubectl create deploy tomcat --image=tomcat8(告诉master让集群使用tomcat8镜像,部署一个tomcat应用)
2、kubectl命令行内容发给api-server,api-server保存此次创建信息到etcd
3、etcd给api-server上报事件,说刚才有人给我里面保存一个信息。(部署Tomcat[deploy])
4、controller-manager监听到api-server的事件,是 (部署Tomcat[deploy])
5、controller-manager 处理这个 (部署Tomcat[deploy])的事件。controller-manager会生成Pod的部署信息【pod信息】
6、controller-manager 把Pod的信息交给api-server,再保存到etcd
7、etcd上报事件【pod信息】给api-server。
8、scheduler专门监听 【pod信息】 ,拿到 【pod信息】的内容,计算,看哪个节点合适部署这个Pod【pod调度过后的信息(node: node-02)】,
9、scheduler把 【pod调度过后的信息(node: node-02)】交给api-server保存给etcd
10、etcd上报事件【pod调度过后的信息(node: node-02)】,给api-server
11、其他节点的kubelet专门监听 【pod调度过后的信息(node: node-02)】 事件,集群所有节点kubelet从api-server就拿到了 【pod调度过后的信息(node: node-02)】 事件
12、每个节点的kubelet判断是否属于自己的事情;node-02的kubelet发现是他的事情
13、node-02的kubelet启动这个pod。汇报给master当前启动好的所有信息
2.3 集群安装
本次安装采用kubeadm方式安装。
大致流程
-  
准备N台服务器,内网互通,
 -  
安装Docker容器化环境【k8s放弃dockershim】
 -  
安装Kubernetes
-  
三台机器安装核心组件(kubeadm(创建集群的引导工具), kubelet,kubectl(程序员用的命令行) )
 -  
kubelet可以直接通过容器化的方式创建出之前的核心组件(api-server)【官方把核心组件做成镜像】
 -  
由kubeadm引导创建集群
 
 -  
 
本次集群安装准备三台裸机就可以,不用安装任何环境。
2.3.1 修改节点hostname
node01
  
   - 
    
     
    
    
     
      # 修改 hostname; k8s-01要变为自己的hostname
     
    
 
   - 
    
     
    
    
     
      hostnamectl 
      set-hostname k8s-01
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      # 设置 hostname 解析
     
    
 
   - 
    
     
    
    
     
      echo 
      "127.0.0.1 $(hostname)" >> /etc/hosts
     
    
 
  
 
node02
  
   - 
    
     
    
    
     
      # 修改 hostname; k8s-01要变为自己的hostname
     
    
 
   - 
    
     
    
    
     
      hostnamectl 
      set-hostname k8s-02
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      # 设置 hostname 解析
     
    
 
   - 
    
     
    
    
     
      echo 
      "127.0.0.1 $(hostname)" >> /etc/hosts
     
    
 
  
 
node03
  
   - 
    
     
    
    
     
      # 修改 hostname; k8s-01要变为自己的hostname
     
    
 
   - 
    
     
    
    
     
      hostnamectl 
      set-hostname k8s-03
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      # 设置 hostname 解析
     
    
 
   - 
    
     
    
    
     
      echo 
      "127.0.0.1 $(hostname)" >> /etc/hosts
     
    
 
  
 
2.3.2 三台机器执行脚本
  
   - 
    
     
    
    
     
      #先在所有机器执行 vi k8s.sh
     
    
 
   - 
    
     
    
    
     
      # 进入编辑模式(输入i),把如下脚本复制
     
    
 
   - 
    
     
    
    
     
      # 所有机器给脚本权限 chmod +x k8s.sh
     
    
 
   - 
    
     
    
    
     
      #执行脚本 ./k8s.sh
     
    
 
  
 
k8s.sh脚本
  
   - 
    
     
    
    
     
      #/bin/sh
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      #######################开始设置环境##################################### \n
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      printf 
      "##################正在配置所有基础环境信息################## \n"
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      printf 
      "##################关闭selinux################## \n"
     
    
 
   - 
    
     
    
    
     
      sed -i 
      's/enforcing/disabled/' /etc/selinux/config
     
    
 
   - 
    
     
    
    
     
      setenforce 0
     
    
 
   - 
    
     
    
    
     
      printf 
      "##################关闭swap################## \n"
     
    
 
   - 
    
     
    
    
     
      swapoff -a  
     
    
 
   - 
    
     
    
    
     
      sed -ri 
      's/.*swap.*/#&/' /etc/fstab 
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      printf 
      "##################配置路由转发################## \n"
     
    
 
   - 
    
     
    
    
     
      cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
     
    
 
   - 
    
     
    
    
     
      br_netfilter
     
    
 
   - 
    
     
    
    
     
      EOF
     
    
 
   - 
    
     
    
    
     
      echo 
      'net.ipv4.ip_forward = 1' >> /etc/sysctl.d/k8s.conf
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      ## 必须 ipv6流量桥接
     
    
 
   - 
    
     
    
    
     
      echo 
      'net.bridge.bridge-nf-call-ip6tables = 1' >> /etc/sysctl.d/k8s.conf
     
    
 
   - 
    
     
    
    
     
      ## 必须 ipv4流量桥接
     
    
 
   - 
    
     
    
    
     
      echo 
      'net.bridge.bridge-nf-call-iptables = 1' >> /etc/sysctl.d/k8s.conf
     
    
 
   - 
    
     
    
    
     
      echo 
      "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.d/k8s.conf
     
    
 
   - 
    
     
    
    
     
      echo 
      "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.d/k8s.conf
     
    
 
   - 
    
     
    
    
     
      echo 
      "net.ipv6.conf.lo.disable_ipv6 = 1" >> /etc/sysctl.d/k8s.conf
     
    
 
   - 
    
     
    
    
     
      echo 
      "net.ipv6.conf.all.forwarding = 1"  >> /etc/sysctl.d/k8s.conf
     
    
 
   - 
    
     
    
    
     
      modprobe br_netfilter
     
    
 
   - 
    
     
    
    
     
      sudo sysctl --system
     
    
 
   - 
    
     
    
    
     	
     
    
 
   - 
    
     
    
    
     	
     
    
 
   - 
    
     
    
    
     
      printf 
      "##################配置ipvs################## \n"
     
    
 
   - 
    
     
    
    
     
      cat <<EOF | sudo tee /etc/sysconfig/modules/ipvs.modules
     
    
 
   - 
    
     
    
    
     
      #!/bin/bash
     
    
 
   - 
    
     
    
    
     
      modprobe -- ip_vs
     
    
 
   - 
    
     
    
    
     
      modprobe -- ip_vs_rr
     
    
 
   - 
    
     
    
    
     
      modprobe -- ip_vs_wrr
     
    
 
   - 
    
     
    
    
     
      modprobe -- ip_vs_sh
     
    
 
   - 
    
     
    
    
     
      modprobe -- nf_conntrack_ipv4
     
    
 
   - 
    
     
    
    
     
      EOF
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      chmod 755 /etc/sysconfig/modules/ipvs.modules 
     
    
 
   - 
    
     
    
    
     
      sh /etc/sysconfig/modules/ipvs.modules
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      printf 
      "##################安装ipvsadm相关软件################## \n"
     
    
 
   - 
    
     
    
    
     
      yum install -y ipset ipvsadm
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      printf 
      "##################安装docker容器环境################## \n"
     
    
 
   - 
    
     
    
    
     
      sudo yum remove docker*
     
    
 
   - 
    
     
    
    
     
      sudo yum install -y yum-utils
     
    
 
   - 
    
     
    
    
     
      sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
     
    
 
   - 
    
     
    
    
     
      yum install -y docker-ce-19.03.9  docker-ce-cli-19.03.9 containerd.io
     
    
 
   - 
    
     
    
    
     
      systemctl 
      enable docker
     
    
 
   - 
    
     
    
    
     
      systemctl start docker
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      sudo mkdir -p /etc/docker
     
    
 
   - 
    
     
    
    
     
      sudo tee /etc/docker/daemon.json <<-
      'EOF'
     
    
 
   - 
    
     
    
    
     
      {
     
    
 
   - 
    
     
    
    
       
      "registry-mirrors": [
      "https://061jagel.mirror.aliyuncs.com"]
     
    
 
   - 
    
     
    
    
     
      }
     
    
 
   - 
    
     
    
    
     
      EOF
     
    
 
   - 
    
     
    
    
     
      sudo systemctl daemon-reload
     
    
 
   - 
    
     
    
    
     
      sudo systemctl restart docker
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      printf 
      "##################安装k8s核心包 kubeadm kubelet kubectl################## \n"
     
    
 
   - 
    
     
    
    
     
      cat <<EOF > /etc/yum.repos.d/kubernetes.repo
     
    
 
   - 
    
     
    
    
     
      [kubernetes]
     
    
 
   - 
    
     
    
    
     
      name=Kubernetes
     
    
 
   - 
    
     
    
    
     
      baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
     
    
 
   - 
    
     
    
    
     
      enabled=1
     
    
 
   - 
    
     
    
    
     
      gpgcheck=0
     
    
 
   - 
    
     
    
    
     
      repo_gpgcheck=0
     
    
 
   - 
    
     
    
    
     
      gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
     
    
 
   - 
    
     
    
    
     
         http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
     
    
 
   - 
    
     
    
    
     
      EOF
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      ###指定k8s安装版本
     
    
 
   - 
    
     
    
    
     
      yum install -y kubelet-1.21.0 kubeadm-1.21.0 kubectl-1.21.0
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      ###要把kubelet立即启动。
     
    
 
   - 
    
     
    
    
     
      systemctl 
      enable kubelet
     
    
 
   - 
    
     
    
    
     
      systemctl start kubelet
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      printf 
      "##################下载api-server等核心镜像################## \n"
     
    
 
   - 
    
     
    
    
     
      sudo tee ./images.sh <<-
      'EOF'
     
    
 
   - 
    
     
    
    
     
      #!/bin/bash
     
    
 
   - 
    
     
    
    
     
      images=(
     
    
 
   - 
    
     
    
    
     
      kube-apiserver:v1.21.0
     
    
 
   - 
    
     
    
    
     
      kube-proxy:v1.21.0
     
    
 
   - 
    
     
    
    
     
      kube-controller-manager:v1.21.0
     
    
 
   - 
    
     
    
    
     
      kube-scheduler:v1.21.0
     
    
 
   - 
    
     
    
    
     
      coredns:v1.8.0
     
    
 
   - 
    
     
    
    
     
      etcd:3.4.13-0
     
    
 
   - 
    
     
    
    
     
      pause:3.4.1
     
    
 
   - 
    
     
    
    
     
      )
     
    
 
   - 
    
     
    
    
     
      for imageName 
      in 
      ${images[@]} ; 
      do
     
    
 
   - 
    
     
    
    
     
      docker pull registry.cn-wulanchabu.aliyuncs.com/ajw_k8s_images/
      $imageName
     
    
 
   - 
    
     
    
    
     
      done
     
    
 
   - 
    
     
    
    
     
      ## 全部完成后重新修改coredns镜像
     
    
 
   - 
    
     
    
    
     
      docker tag registry.cn-wulanchabu.aliyuncs.com/ajw_k8s_images/coredns:v1.8.0 registry.cn-wulanchabu.aliyuncs.com/ajw_k8s_images/coredns/coredns:v1.8.0
     
    
 
   - 
    
     
    
    
     
      EOF
     
    
 
   - 
    
     
    
    
        
     
    
 
   - 
    
     
    
    
     
      chmod +x ./images.sh && ./images.sh
     
    
 
   - 
    
     
    
    
        
     
    
 
   - 
    
     
    
    
     
      ### k8s的所有基本环境全部完成
     
    
 
  
 
2.3.3 使用kubeadm引导集群
这步操作只在master节点操作
  
   - 
    
     
    
    
     
      #### --apiserver-advertise-address 的地址一定写成自己master机器的ip地址
     
    
 
   - 
    
     
    
    
     
      #### 虚拟机或者其他云厂商给你的机器ip 10.96 192.168
     
    
 
   - 
    
     
    
    
     
      #### 以下的只在master节点执行
     
    
 
   - 
    
     
    
    
     
      kubeadm init \
     
    
 
   - 
    
     
    
    
     
      --apiserver-advertise-address=10.170.2.42 \
     
    
 
   - 
    
     
    
    
     
      --image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \
     
    
 
   - 
    
     
    
    
     
      --kubernetes-version v1.21.0 \
     
    
 
   - 
    
     
    
    
     
      --service-cidr=10.96.0.0/16 \
     
    
 
   - 
    
     
    
    
     
      --pod-network-cidr=192.168.0.0/16
     
    
 
   - 
    
     
    
    
      
     
    
 
  
 
这个执行之后,控制台会打印初相对应的日志
2.3.4 master结束以后,按照控制台引导继续往下
  
   - 
    
     
    
    
     
      ## 第一步
     
    
 
   - 
    
     
    
    
     
      mkdir -p 
      $HOME/.kube
     
    
 
   - 
    
     
    
    
     
      sudo cp -i /etc/kubernetes/admin.conf 
      $HOME/.kube/config
     
    
 
   - 
    
     
    
    
     
      sudo chown $(id -u):$(id -g) 
      $HOME/.kube/config
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      ##第二步
     
    
 
   - 
    
     
    
    
     
      export KUBECONFIG=/etc/kubernetes/admin.conf
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      ##第三步 部署网络插件
     
    
 
   - 
    
     
    
    
     
      kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      ##第四步,在其他节点join操作。用控制台打印的kubeadm join 去其他node节点执行
     
    
 
   - 
    
     
    
    
     
      kubeadm join 10.170.11.8:6443 --token cnb7x2.lzgz7mfzcjutn0nk \
     
    
 
   - 
    
     
    
    
     
      	--discovery-token-ca-cert-hash sha256:00c9e977ee52632098aadb515c90076603daee94a167728110ef8086d0d5b37d
     
    
 
  
 
这个token是有过期时间的,2个小时后就过期了。若过期了
  
   - 
    
     
    
    
     
      ##过期怎么办
     
    
 
   - 
    
     
    
    
     
      kubeadm token create --
      print-join-command
     
    
 
   - 
    
     
    
    
     
      kubeadm token create --ttl 0 --
      print-join-command
     
    
 
   - 
    
     
    
    
     
      kubeadm join --token y1eyw5.ylg568kvohfdsfco --discovery-token-ca-cert-hash sha256: 6c35e4f73f72afd89bf1c8c303ee55677d2cdb1342d67bb23c852aba2efc7c73
     
    
 
  
 
2.3.5 验证集群
  
   - 
    
     
    
    
     
      #等一会,在master节点执行
     
    
 
   - 
    
     
    
    
     
      kubectl get nodes
     
    
 
  
 

2.3.6 设置kube-proxy的ipvs模式
  
   - 
    
     
    
    
     
      ##修改kube-proxy默认的配置
     
    
 
   - 
    
     
    
    
     
      kubectl edit cm kube-proxy -n kube-system
     
    
 
   - 
    
     
    
    
     
      ## 修改mode: "ipvs"
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      ##改完以后重启kube-proxy
     
    
 
   - 
    
     
    
    
     
      ### 查到所有的kube-proxy
     
    
 
   - 
    
     
    
    
     
      kubectl get pod -n kube-system |grep kube-proxy
     
    
 
   - 
    
     
    
    
     
      ### 删除之前的即可
     
    
 
   - 
    
     
    
    
     
      kubectl delete pod 【用自己查出来的kube-proxy-dw5sf kube-proxy-hsrwp kube-proxy-vqv7n】  -n kube-system
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      ###
     
    
 
  
 

所有的pod都running,表示成功。nginx的pod是我自己起的。

三. dashboard部署
https://github.com/kubernetes/dashboard
根据官网提示安装。
3.1 下载yaml
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml 
3.2 修改recommended.yaml
为了外网访问,type改为NodePort

3.3 部署
kubectl apply -f ./recommended.yaml 
 
3.4 查看部署
这两个podrunning状态就可以了。

3.4 登录web
dashboard部署之后,查看service,会有外部暴露的端口。这个端口就是外部访问的端口。https://masterip:30417访问即可。
这里一定要用https访问。用chrom浏览器可能不能进去,进不去的话,推荐用火狐浏览器。

3.5 输入token
找到token,然后输入token。
  
   - 
    
     
    
    
     
      #访问测试
     
    
 
   - 
    
     
    
    
     
      每次访问都需要令牌
     
    
 
   - 
    
     
    
    
     
      kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk 
      '{print $1}')
     
    
 
  
 


3.6 加入权限
进入dashboard之后,可能会报一些错误,是一些权限的问题。
执行以下命令即可。
创建yaml
vim admin.yaml 
admin.yaml内容如下
  
   - 
    
     
    
    
     
      apiVersion: rbac.authorization.k8s.io/v1
     
    
 
   - 
    
     
    
    
     
      kind: ClusterRoleBinding
     
    
 
   - 
    
     
    
    
     
      metadata:
     
    
 
   - 
    
     
    
    
     
        name: kubernetes-dashboard
     
    
 
   - 
    
     
    
    
     
        namespace: kubernetes-dashboard
     
    
 
   - 
    
     
    
    
     
      roleRef:
     
    
 
   - 
    
     
    
    
     
        apiGroup: rbac.authorization.k8s.io
     
    
 
   - 
    
     
    
    
     
        kind: ClusterRole
     
    
 
   - 
    
     
    
    
     
        name: cluster-admin
     
    
 
   - 
    
     
    
    
     
      subjects:
     
    
 
   - 
    
     
    
    
     
        - kind: ServiceAccount
     
    
 
   - 
    
     
    
    
     
          name: kubernetes-dashboard
     
    
 
   - 
    
     
    
    
     
          namespace: kubernetes-dashboard
     
    
 
  
 
执行admin.yaml
kubectl apply -f admin.yml 
若执行出错
则
### 这个要 先kubectl delete -f admin.yaml 再kubectl apply -f admin.yml 
访问页面

转载:https://blog.csdn.net/qq_29963323/article/details/116146947