Kubernetes集群架构部署解析

文章目录

  • 前言
  • 一 Kubernetes概述
    • 1.1 Kubernetes是什么
    • 1.2 Kubernetes特性
      • 1.2.1 自我修复
      • 1.2.2 弹性伸缩
      • 1.2.3 自动部署和回滚
      • 1.2.4 服务发现和负载均衡
      • 1.2.5 机密和配置管理
      • 1.2.6 存储编排
      • 1.2.7 批处理
    • 1.3 Kubernetes集群架构与组件
      • 1.3.1 Master组件
      • 1.3.2 Node组件
    • 1.4 Kubernetes核心概念
      • 1.4.1 Pod
      • 1.4.2 Controllers
      • 1.4.2 Service
  • 二 Kubernetes集群部署
    • 2.1 官方提供的三种部署方式
    • 2.2 Kubernetes平台环境规划
    • 2.3 自签SSL证书
    • 2.4 Flannel容器集群网络部署
    • 2.5 Flannel容器集群网络部署
  • 三 Kubernetes二进制部署
    • 3.1 部署准备
    • 3.2 部署流程
      • 3.2.1 创建文件目录
      • 3.2.2 下载证书制作工具
        • 3.2.2.1 下载cfssl官方包
      • 3.2.3 开始制作证书
        • 3.2.3.1 定义ca证书
        • 3.2.3.2 实现证书签名
        • 3.2.3.3 生产证书,生成ca-key.pem ca.pem
        • 3.2.3.4 指定etcd三个节点之间的通信验证
        • 3.2.3.5 生成ETCD证书 server-key.pem server.pem
      • 3.2.4 ETCD 二进制包地址
      • 3.2.5 创建目录文件
      • 3.2.6 编辑启动集群脚本
        • 3.2.6.1 查看etcd状态
      • 3.2.7 拷贝证书,启动脚本到其他节点,
        • 3.2.7.1 此时再次在master01上启动脚本
      • 3.2.8 检查群集状态
    • 3.3 docker引擎部署
      • 3.3.1 安装依赖包
      • 3.3.2 测试docker
      • 3.3.3 网络优化
    • 3.4 flannel网络配置
      • 3.4.1 在master上
      • 3.4.2 在node01,02上
      • 3.4.3 安装解压缩flannel
      • 3.4.4 编写脚本
      • 3.4.5 启动flannel网络功能
    • 3.5 docker支持fannel服务
      • 3.5.1 查看地址
      • 3.5.2 查看变量文件
      • 3.5.3 使docker可以应用flannel地址
      • 3.5.4 测试ping通对方docker0网卡 证明flannel起到路由作用
      • 3.5.5 查看容器ip地址
    • 3.6 部署master组件
      • 3.6.1 api-server生成证书
      • 3.6.2 编写k8s证书
      • 3.6.3 解压kubernetes压缩包
      • 3.6.4 查看当前位置
      • 3.6.5 随机生成序列号,配置认证令牌
      • 3.6.6 二进制文件,token,证书都准备好,开启apiserver
      • 3.6.7 启动scheduler服务
      • 3.6.8 查看master 节点状态
    • 3.7 node节点部署
      • 3.7.1 把 kubelet、kube-proxy拷贝到node节点上去
      • 3.7.2 添加node.zip
      • 3.7.3 添加kubeconfig.sh脚本
      • 3.7.4 设置环境变量(可以写入到/etc/profile中)
      • 3.7.5 生成配置文件
      • 3.7.6 拷贝配置文件到node节点
      • 3.7.7 启动kubelet服务
      • 3.7.8 查看节点状态
      • 3.7.9 启动proxy服务
    • 3.8 node02节点部署
      • 3.8.1 把现成的/opt/kubernetes目录复制到其他节点进行修改即可
      • 3.8.2 首先删除复制过来的证书,等会node02会自行申请证书
      • 3.8.3 修改配置文件kubelet kubelet.config kube-proxy(三个配置文件)
      • 3.8.4 启动服务
      • 3.8.5 查看请求
    • 3.9 多节点部署
      • 3.9.1 添加环境变量
      • 3.9.2 复制kubernetes目录到master02
      • 3.9.3 修改配置文件kube-apiserver中的IP
      • 3.9.4 需要拷贝master01上已有的etcd证书给master02使用
      • 3.9.5 启动master02中的三个组件服务
      • 3.9.6 增加环境变量
    • 3.10 负载均衡
      • 3.10.1 yum源配置文件
      • 3.10.2 安装nginx(反向代理)
      • 3.10.3 部署keepalived服务(双机热备)
      • 3.10.4 编辑配置文件
      • 3.10.5 查看是否存在vip地址
      • 3.10.6 验证地址漂移
      • 3.10.7 恢复操作(在nginx01中先启动nginx服务,再启动keepalived服务)
      • 3.10.8 开始修改node节点配置文件统一指向VIP(bootstrap.kubeconfig,kubelet.kubeconfig)
      • 3.10.9 重启服务
      • 3.10.10 在nginx01上查看nginx的k8s日志
      • 3.10.11 测试创建pod
    • 3.11 dashborad搭建(图形化界面,管理k8s)
      • 3.11.1 查看节点状态
      • 3.11.2 重启keepalived服务
      • 3.11.3 创建dashborad工作目录
        • 3.11.3.1 dashboard-rbac.yaml :安全框架(控制用户的权限)
        • 3.11.3.2 dashboard-secret.yaml :网站的身份验证(网站用户登录的凭据)
        • 3.11.3.3 dashboard-configmap.yaml :配置文件资源(网站配置文件)
        • 3.11.3.4 dashboard-controller.yaml :控制器资源(定义网站有无状态化)
        • 3.11.3.5 dashboard-service.yaml:提供网站服务(暴露服务)
      • 3.11.4 解决谷歌浏览器无法访问的问题
        • 3.11.4.1 添加两个自签证书
        • 3.11.4.2 重新部署
        • 3.111.4.3 生成令牌
        • 3.11.4.4 读取令牌进行登录
  • 总结


前言

Kubernetes是一个开源的容器集群管理系统,简称K8S。在容器化应用程序的部署,扩展和管理方面有着十分权威,重要的地位,本文就其相关特性与部署流程进行了简单解析。


一 Kubernetes概述

1.1 Kubernetes是什么

1.Kubernetes是Google在2014年开源的一个容器集群管理系统,Kubernetes简称K8S。
(轻量级Kubernetes,k3s是经CNCF一致性认证的Kubernetes发行版,专为物联网及边缘计算设计。仅需30秒,即可启动k3s)

2.K8S用于容器化应用程序的部署,扩展和管理

3.K8S提供了容器编排,资源调度,弹性伸缩,部署管理,服务发现等一系列功能(自我修复)

4.Kubernetes目标是让部署容器化应用简单高效

1.2 Kubernetes特性

1.2.1 自我修复

在节点故障时重新启动失败的容器,替换和重新部署,保证预期的副本数量,杀死健康检查失败的容器并且在未准备好之前不会处理客户端请求,确保线上服务不中断

1.2.2 弹性伸缩

使用命令,UI或者基于CPU使用情况自动快速扩容和缩容应用程序实例,保证应用业务高峰并发时的高可用性;业务低峰时回收资源,以最小成本运行服务(避免资源浪费)

1.2.3 自动部署和回滚

K8S采用滚动更新策略更新应用,一次更新一个Pod,而不是同时删除所有Pod,(先创建后删除)如果更新过程中出现问题,将回滚更改,确保升级不受影响业务。(回到更新之前的状态)

1.2.4 服务发现和负载均衡

K8S为多个容器提供一个统一访问入口(内部ip地址和一个DNS名称)并且负载均衡关联的所有实验,使得用户无需考虑容器IP问题。

1.2.5 机密和配置管理

管理机密数据和应用程序配置,而不需要把敏感数据暴露在镜像里,提高敏感数据安全性。并可以将一些常用的配置存储在K8S中,方便应用程序使用。

1.2.6 存储编排

挂载外部存储系统,无论是来本地存储,公有云(如AWS亚马逊),还是网络存储(如NFS,GlusterFS,Ceph)都作为集群资源的一部分使用,极大提高存储使用灵活性。

1.2.7 批处理

提供一次性任务(数据一次性分析,筛选),定时任务(crontab周期性,巡检);满足批量数据处理和分析的场景。

1.3 Kubernetes集群架构与组件

Kubernetes集群架构部署解析_第1张图片

1.3.1 Master组件

kube-api server

Kubernetes API,集群的统一入口,各组件协调者(中央枢纽),以RESTful API提供接口服务,所有对象资源的增删改查和监听操作都交给API server处理后再提交给Etcd存储

kube-controller-manager

处理集群中常规互通任务,一个资源对应一个控制器,而Controller Manager就是负责管理这些控制器的

kube-scheduler

根据调度器算法为创建的Pod选择一个Node节点,可以在任意部署,可以部署在同一个节点上,也可以部署在不同的节点上

etcd

分布式键值存储系统,(服务发现)用于保存集群状态数据,比如Pod,Service等对象信息

1.3.2 Node组件

kubelet

kubelet是Master在Node节点上的Agent(代理),管理本机运行容器的生命周期,比如创建容器,Pod挂载数据卷,下载secret,获取容器和节点状态等工作,kubelet将每个Pod转换成一组容器

kube-proxy

在Node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作

docker或rocket

容器引擎,运行容器

1.4 Kubernetes核心概念

Kubernetes集群架构部署解析_第2张图片

1.4.1 Pod

最小部署单元
一组容器的集合
一个Pod中的容器共享网络命名空间
Pod是短暂的(不具备重启功能)

1.4.2 Controllers

ReplicaSet:确保预期的Pod副本数量(限定Pod数量)
Depolyment:无状态应用部署(无身份信息,可随意取代)
StatefulSet:有状态应用部署
DaemonSet:确保所有Node运行同一个Pod(日志搜集,监控)
Job:一次性任务
Cronjob:定时任务
更高级层次对象,部署和管理Pod

1.4.2 Service

防止Pod失联(并对外暴露服务)
定义一组Pod的访问策略
Label:标签,附加到某个资源上,用于关联对象,查询和筛选
Namespaces:命名空间,将对象逻辑上隔离(逻辑划分)
Annotations:注释

二 Kubernetes集群部署

2.1 官方提供的三种部署方式

minikube

Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,仅用于尝试Kubernetes或日常开发的用户使用

kubeadm

kubeadm也是一个工具,通过kubeadm init和kubeadm join,用于快速部署Kubernetes集群

二进制包

推荐,从官方下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群

2.2 Kubernetes平台环境规划

Kubernetes集群架构部署解析_第3张图片
Kubernetes集群架构部署解析_第4张图片

2.3 自签SSL证书

Kubernetes集群架构部署解析_第5张图片

2.4 Flannel容器集群网络部署

Overlay Network:覆盖网络,在基础网络上叠加的一种虚拟网络技术模式,该网络中的主机通过虚拟链路连接起来。(逻辑网络)

VXLAN:将源数据包封装到UDP中,并使用基础的IP/MAC(物理网络,节点ip)作为外层报文头进行封装,然后在以太网上传输(内层封装容器ip)到达目的地后由隧道端点解封装并将数据发送给目标地址。

Flannel:是Overlay网络的一种,也是将源数据包封装在另一种网络包里面进行路由转发和通信,目前已经支持UDP,VXLAN,AWS VPC和GCE路由等数据转发方式。

Kubernetes集群架构部署解析_第6张图片

跨节点通信:内层ip(容器ip)作为应用层数据进行封装,传递给外部,外部进行正常的封装之后通过隧道传递,如果接收方发现目标地址是自己,就接收,并脱去外部封装,将内部数据暴露出来,传递给对应容器ip上

2.5 Flannel容器集群网络部署

Kubernetes集群架构部署解析_第7张图片

访问目标地址同自己在同一节点(直接通过docker 0进行交互)

如果Pod访问的ip在不同位置。
将内部ip封装成数据有效数据通过Flannel,网络传递给(ens33,eth0)物理网卡。进行正常传统MAC地址封装,通过Flannel隧道发给目标地址,最后进行解封装实现通信

三 Kubernetes二进制部署

3.1 部署准备

重命名

[root@server1 ~]# hostnamectl set-hostname master01
[root@server1 ~]# su
[root@server2 ~]# hostnamectl set-hostname node01
[root@server2 ~]# su
[root@client1 ~]# hostnamectl set-hostname node02
[root@client1 ~]# su

关闭防火墙

[root@master01 ~]# systemctl stop firewalld
[root@master01 ~]# setenforce 0

设备K8S部署

master01 :20.0.0.10  kube-apiserver kube-controller-manager kube-scheduler etcd
node01:20.0.0.11  kubelet kube-proxy docker flannel etcd
node02:20.0.0.12  kubelet kube-proxy docker flannel etcd

3.2 部署流程

在master01上

3.2.1 创建文件目录

[root@master01 ~]# vi /etc/selinux/config 
[root@master01 ~]# mkdir k8s
[root@master01 ~]# ls
[root@master01 ~]# cd k8s/
[root@master01 k8s]# ls
[root@master01 k8s]# mkdir etcd-cert
[root@master01 k8s]# ls

3.2.2 下载证书制作工具

[root@master01 k8s]# vim cfssl.sh
curl -L https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -o /usr/local/bin/cfssl
curl -L https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -o /usr/local/bin/cfssljson
curl -L https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -o /usr/local/bin/cfssl-certinfo
chmod +x /usr/local/bin/cfssl /usr/local/bin/cfssljson /usr/local/bin/cfssl-certinfo

3.2.2.1 下载cfssl官方包

[root@master01 k8s]# bash cfssl.sh
[root@master01 k8s]# cd /usr/local/bin/
[root@master01 bin]# ls
[root@master01 bin]# chmod +x *
[root@master01 bin]# ls

Kubernetes集群架构部署解析_第8张图片

3.2.3 开始制作证书

cfssl 生成证书工具   cfssljson通过传入json文件生成证书   cfssl-certinfo查看证书信息

3.2.3.1 定义ca证书

[root@master01 bin]# cd /root/k8s/etcd-cert/
[root@master01 etcd-cert]# vim ca-config.json 
[root@master01 etcd-cert]# ls
添加
{
     
  "signing": {
     
    "default": {
     
      "expiry": "87600h"   证书有效期十年
    },
    "profiles": {
     
      "www": {
     
         "expiry": "87600h",
         "usages": [
            "signing",                        签名
            "key encipherment",       非对称密钥
            "server auth",                  服务端验证
            "client auth"                     客户端验证
        ]
      }
    }
  }
}

Kubernetes集群架构部署解析_第9张图片

3.2.3.2 实现证书签名

[root@master01 etcd-cert]# vim ca-csr.json 
添加
{
     
    "CN": "etcd CA",
    "key": {
     
        "algo": "rsa",
        "size": 2048          密钥 长度 
    },
    "names": [
        {
     
            "C": "CN",        地区 中国
            "L": "Beijing",   城市 
            "ST": "Beijing"
        }
    ]
}

Kubernetes集群架构部署解析_第10张图片
Kubernetes集群架构部署解析_第11张图片

3.2.3.3 生产证书,生成ca-key.pem ca.pem

[root@master01 etcd-cert]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca - 初始化   ca签名文件     基本认证
       
[root@master01 etcd-cert]# ls

Kubernetes集群架构部署解析_第12张图片

3.2.3.4 指定etcd三个节点之间的通信验证

[root@master01 etcd-cert]# vim server-csr.json 

添加
{
     
    "CN": "etcd",
    "hosts": [
    "20.0.0.10",    节点ip
    "20.0.0.11",
    "20.0.0.12"
    ],
    "key": {
     
        "algo": "rsa",
        "size": 2048   密钥长度
    },
    "names": [
        {
     
            "C": "CN",     
            "L": "BeiJing",
            "ST": "BeiJing"
        } 
    ]
}   

Kubernetes集群架构部署解析_第13张图片

3.2.3.5 生成ETCD证书 server-key.pem server.pem

                                             ca证书      ca密钥
[root@master01 etcd-cert]# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | 
cfssljson -bare server                        服务签名

[root@master01 etcd-cert]# ls

Kubernetes集群架构部署解析_第14张图片

3.2.4 ETCD 二进制包地址

https://github.com/etcd-io/etcd/releases

下载etcd-v3.3.10-linux-amd64.tar.gz 到当前目录

[root@master01 etcd-cert]# cd ..
[root@master01 k8s]# ls
[root@master01 k8s]# tar zxvf etcd-v3.3.10-linux-amd64.tar.gz 
[root@master01 k8s]# ls
[root@master01 k8s]# cd etcd-v3.3.10-linux-amd64/
[root@master01 etcd-v3.3.10-linux-amd64]# ls

Kubernetes集群架构部署解析_第15张图片

3.2.5 创建目录文件

[root@master01 etcd-v3.3.10-linux-amd64]# mkdir -p /opt/etcd/{
     cfg,bin,ssl}  {
     配置文件,命令文件,证书}
[root@master01 etcd-v3.3.10-linux-amd64]# ls /opt/etcd/
[root@master01 etcd-v3.3.10-linux-amd64]# mv etcd etcdctl /opt/etcd/bin/
[root@master01 etcd-v3.3.10-linux-amd64]# ls
[root@master01 etcd-v3.3.10-linux-amd64]# ls /opt/etcd/bin/
[root@master01 etcd-v3.3.10-linux-amd64]# cd ..
[root@master01 k8s]# ls
[root@master01 k8s]# cd etcd-cert/
[root@master01 etcd-cert]# ls
[root@master01 etcd-cert]# cp *.pem /opt/etcd/ssl/
[root@master01 etcd-cert]# ls
[root@master01 etcd-cert]# cd /opt/etcd/
[root@master01 etcd]# ls
[root@master01 etcd]# cd ssl/
[root@master01 ssl]# ls

Kubernetes集群架构部署解析_第16张图片

Kubernetes集群架构部署解析_第17张图片

3.2.6 编辑启动集群脚本

[root@master01 ~]# cd k8s/
[root@master01 k8s]# ls
[root@master01 k8s]# vim etcd.sh 
[root@master01 k8s]# bash /root/k8s/etcd.sh etcd01 20.0.0.10  etcd02=https://20.0.0.11:2380,etcd03=https://20.0.0.12:2380

Kubernetes集群架构部署解析_第18张图片
Kubernetes集群架构部署解析_第19张图片

Kubernetes集群架构部署解析_第20张图片等待其它节点加入
Kubernetes集群架构部署解析_第21张图片

3.2.6.1 查看etcd状态

[root@master01 k8s]# ps -ef | grep etcd

在这里插入图片描述

3.2.7 拷贝证书,启动脚本到其他节点,

[root@master01 k8s]# scp -r /opt/etcd/ root@20.0.0.11:/opt/
[root@master01 k8s]# scp -r /opt/etcd/ root@20.0.0.12:/opt/
[root@master01 k8s]# scp /usr/lib/systemd/system/etcd.service root@20.0.0.11:/usr/lib/systemd/system/

[root@master01 k8s]# scp /usr/lib/systemd/system/etcd.service root@20.0.0.12:/usr/lib/systemd/system/

Kubernetes集群架构部署解析_第22张图片
Kubernetes集群架构部署解析_第23张图片

在node01,02上

[root@node01 ~]# cd /opt/
[root@node01 opt]# ls
[root@node01 opt]# cd etcd/
[root@node01 etcd]# ls
[root@node01 etcd]# yum -y install tree
[root@node01 etcd]# tree /opt/etcd/
[root@node02 ~]# vim /opt/etcd/cfg/etcd 

Kubernetes集群架构部署解析_第24张图片
Kubernetes集群架构部署解析_第25张图片

Kubernetes集群架构部署解析_第26张图片

3.2.7.1 此时再次在master01上启动脚本

同时node01,02上启动etcd服务

[root@master01 k8s]# bash /root/k8s/etcd.sh etcd01 20.0.0.10  etcd02=https://20.0.0.11:2380,etcd03=https://20.0.0.12:2380
[root@master01 k8s]# systemctl status etcd

[root@node01 etcd]# systemctl start etcd
[root@node01 etcd]# systemctl enable etcd
[root@node01 etcd]# systemctl status etcd

Kubernetes集群架构部署解析_第27张图片
Kubernetes集群架构部署解析_第28张图片

Kubernetes集群架构部署解析_第29张图片

3.2.8 检查群集状态

[root@master01 k8s]# cd /opt/etcd/ssl/
[root@master01 ssl]# ls
[root@master01 ssl]# /opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://20.0.0.10:2379,https://20.0.0.11:2379,https://20.0.0.12:2379" cluster-health

Kubernetes集群架构部署解析_第30张图片

3.3 docker引擎部署

所有node节点部署docker引擎

3.3.1 安装依赖包

[root@node02 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
[root@node02 ~]# cd /etc/yum.repos.d/   设置阿里云镜像源
[root@node02 yum.repos.d]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docke.repo  

如果不是最小化安装环境下,需要安装contain-SElinux包

[root@node02 yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@node02 yum.repos.d]# yum clean all       清除缓存
[root@node02 yum.repos.d]# yum makecache  建立缓存
[root@node02 yum.repos.d]# yum install -y docker-ce    安装Docker-CE(社区版Docker引擎)
[root@node02 yum.repos.d]# systemctl start docker   启动服务
[root@node02 yum.repos.d]# systemctl enable docker  自启动
 添加镜像加速地址
/etc/docker/daemon.json配置文件中

Kubernetes集群架构部署解析_第31张图片

3.3.2 测试docker

[root@node02 yum.repos.d]#  docker run hello-world

Kubernetes集群架构部署解析_第32张图片

3.3.3 网络优化

[root@node01 ~]# vim /etc/sysctl.conf 
[root@node01 ~]# sysctl -p
[root@node01 ~]# service network restart 
[root@node01 ~]# systemctl restart docker
[root@node01 ~]# docker ps -a 
[root@node01 ~]# docker images

Kubernetes集群架构部署解析_第33张图片
在这里插入图片描述

3.4 flannel网络配置

写入分配的子网段到ETCD中,供flannel使用

3.4.1 在master上

[root@master01 ssl]# /opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://20.0.0.10:2379,https://20.0.0.11:2379,https://20.0.0.12:2379" set /coreos.com/network/config '{ "Network": "172.17.0.0/16", "Backend": {"Type": "vxlan"}}'
                                                                                               键名                值                                                                           技术类型
[root@master01 ssl]# /opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://20.0.0.10:2379,https://20.0.0.11:2379,https://20.0.0.12:2379" get /coreos.com/network/config 

Kubernetes集群架构部署解析_第34张图片

3.4.2 在node01,02上

3.4.3 安装解压缩flannel

[root@node01 ~]# ls
[root@node01 ~]# tar zxvf flannel-v0.10.0-linux-amd64.tar.gz 
[root@node01 ~]# mkdir /opt/kubernetes/{
     cfg,bin,ssl} -p   创建工作目录
[root@node01 ~]# ls
[root@node01 ~]# cd /opt/kubernetes/
[root@node01 ~]# mv mk-docker-opts.sh flanneld /opt/kubernetes/bin/
[root@node01 /]# ls /opt/kubernetes/bin/

Kubernetes集群架构部署解析_第35张图片

3.4.4 编写脚本

[root@node01 ~]# vim flannel.sh 

Kubernetes集群架构部署解析_第36张图片
Kubernetes集群架构部署解析_第37张图片

3.4.5 启动flannel网络功能

[root@node01 ~]# bash flannel.sh https://20.0.0.10:2379,https://20.0.0.11:2379,https://20.0.0.12:2379

在这里插入图片描述

3.5 docker支持fannel服务

3.5.1 查看地址

[root@node01 ~]# ifconfig 

Kubernetes集群架构部署解析_第38张图片
Kubernetes集群架构部署解析_第39张图片

3.5.2 查看变量文件

[root@node01 ~]# cat /run/flannel/subnet.env  子网.环境变量
DOCKER_OPT_BIP="--bip=172.17.5.1/24"
DOCKER_OPT_IPMASQ="--ip-masq=false"
DOCKER_OPT_MTU="--mtu=1450"     最大传输单元(默认1500)
DOCKER_NETWORK_OPTIONS=" --bip=172.17.5.1/24 --ip-masq=false --mtu=1450"

Kubernetes集群架构部署解析_第40张图片
Kubernetes集群架构部署解析_第41张图片

3.5.3 使docker可以应用flannel地址

[root@node01 ~]# vim /usr/lib/systemd/system/docker.service 
添加环境变量文件路径,引用变量
EnvironmentFile=/run/flannel/subnet.env
 $DOCKER_NETWORK_OPTIONS 

[root@node01 ~]# systemctl daemon-reload 
[root@node01 ~]# systemctl restart docker
[root@node01 ~]# ifconfig 

Kubernetes集群架构部署解析_第42张图片
Kubernetes集群架构部署解析_第43张图片
Kubernetes集群架构部署解析_第44张图片

3.5.4 测试ping通对方docker0网卡 证明flannel起到路由作用

[root@node01 ~]# docker images
[root@node01 ~]# docker ps -a
[root@node01 ~]# docker run -it centos:7 /bin/bash  
[root@33636c16826a /]# yum -y install net-tools 

Kubernetes集群架构部署解析_第45张图片

3.5.5 查看容器ip地址

[root@33636c16826a /]# ifconfig 
[root@3e3724b0acf1 /]# ifconfig 
[root@3e3724b0acf1 /]# ping 172.17.5.2

Kubernetes集群架构部署解析_第46张图片
Kubernetes集群架构部署解析_第47张图片
完成实现两个不同节点容器之间的通信

3.6 部署master组件

在master上操作

3.6.1 api-server生成证书

生成配置文件,启动脚本

[root@master01 ~]# cd /root/k8s/
[root@master01 k8s]# ls
[root@master01 k8s]# unzip master.zip     
[root@master01 k8s]# cd /opt/
[root@master01 opt]# mkdir /opt/kubernetes/{
     cfg,bin,ssl} -p 
[root@master01 opt]# cd /root/k8s/
[root@master01 k8s]# ls
[root@master01 k8s]# mkdir k8s-cert 
[root@master01 k8s]# cd k8s-cert/
[root@master01 k8s-cert]# ls

3.6.2 编写k8s证书

[root@master01 k8s-cert]# vim k8s-cert.sh 
[root@master01 k8s-cert]# bash k8s-cert.sh 生成k8s证书

Kubernetes集群架构部署解析_第48张图片
Kubernetes集群架构部署解析_第49张图片
Kubernetes集群架构部署解析_第50张图片
Kubernetes集群架构部署解析_第51张图片
Kubernetes集群架构部署解析_第52张图片

[root@master01 k8s-cert]# ls
[root@master01 k8s-cert]# ls *.pem
[root@master01 k8s-cert]# cp ca*.pem server*.pem /opt/kubernetes/ssl
[root@master01 k8s-cert]# ls /opt/kubernetes/ssl/

Kubernetes集群架构部署解析_第53张图片

3.6.3 解压kubernetes压缩包

[root@master01 k8s-cert]# cd ..
[root@master01 k8s]# ls
[root@master01 k8s]# tar zxvf kubernetes-server-linux-amd64.tar.gz 

在这里插入图片描述

[root@master01 k8s]# ls
[root@master01 k8s]# cd kubernetes/
[root@master01 kubernetes]# ls
[root@master01 kubernetes]# cd server/
[root@master01 server]# cd bin/
[root@master01 bin]# ls
[root@master01 bin]# pwd

Kubernetes集群架构部署解析_第54张图片

3.6.4 查看当前位置

[root@master01 bin]# pwd
/root/k8s/kubernetes/server/bin
[root@master01 bin]# cp kube-apiserver kube-controller-manager kubectl kube-scheduler /opt/kubernetes/bin  (拷贝到master的kubernetes的bin目录下)
[root@master01 bin]# ls /opt/kubernetes/bin

Kubernetes集群架构部署解析_第55张图片

3.6.5 随机生成序列号,配置认证令牌

[root@master01 bin]#  head -c 16 /dev/urandom | od -An -t x | tr -d ' ' 
0246a531174228b8adfb6ee991861ba6

[root@master01 bin]# vim /opt/kubernetes/cfg/token.csv

添加
0246a531174228b8adfb6ee991861ba6,kubelet-bootstrap,10001,"system:kubelet-bootstrap"
序列号                              用户名            id      角色

Kubernetes集群架构部署解析_第56张图片

在这里插入图片描述

3.6.6 二进制文件,token,证书都准备好,开启apiserver

[root@master01 k8s]# vim apiserver.sh
[root@master01 k8s]# bash apiserver.sh 20.0.0.10  https://20.0.0.10:2379,https://20.0.0.11:2379,https://20.0.0.12:2379
[root@master01 k8s]# systemctl status kube-apiserver.service   查看apiserver服务状态
[root@master01 k8s]# netstat -anpt | grep 6443    监听的https端口
[root@master01 k8s]# netstat -anpt | grep 8080

Kubernetes集群架构部署解析_第57张图片

Kubernetes集群架构部署解析_第58张图片

3.6.7 启动scheduler服务

[root@master01 k8s]# ls
[root@master01 k8s]# vim scheduler.sh   调度器
[root@master01 k8s]# bash scheduler.sh 127.0.0.1
[root@master01 k8s]# systemctl status kube-scheduler.service 
[root@master01 k8s]# ps -aux | grep kube  查看进程信息

Kubernetes集群架构部署解析_第59张图片

Kubernetes集群架构部署解析_第60张图片
Kubernetes集群架构部署解析_第61张图片

[root@master01 k8s]# vim controller-manager.sh   控制管理器
[root@master01 k8s]# bash controller-manager.sh 127.0.0.1
[root@master01 k8s]# systemctl status kube-controller-manager.service 
[root@master01 k8s]# ps -aux | grep kube   检查进程是否启动成功

在这里插入图片描述

Kubernetes集群架构部署解析_第62张图片

Kubernetes集群架构部署解析_第63张图片

3.6.8 查看master 节点状态

[root@master01 k8s]# /opt/kubernetes/bin/kubectl get cs

在这里插入图片描述

3.7 node节点部署

master上操作

3.7.1 把 kubelet、kube-proxy拷贝到node节点上去

[root@master01 k8s]# cd kubernetes/server/bin/
[root@master01 bin]# ls
[root@master01 bin]# scp kubelet kube-proxy root@20.0.0.11:/opt/kubernetes/bin/
[root@master01 bin]# scp kubelet kube-proxy root@20.0.0.12:/opt/kubernetes/bin/

Kubernetes集群架构部署解析_第64张图片
nod01,02节点操作(复制node.zip到/root目录下再解压)

3.7.2 添加node.zip

[root@node01 ~]# cd /root/
[root@node01 ~]# ls
[root@node01 ~]# unzip node.zip    解压node.zip,获得kubelet.sh  proxy.sh 
[root@node01 ~]# ls

Kubernetes集群架构部署解析_第65张图片
在master上操作

3.7.3 添加kubeconfig.sh脚本

[root@master01 ~]# cd /root/k8s
[root@master01 k8s]# ls
[root@master01 k8s]# mkdir kubeconfig
[root@master01 k8s]# cd kubeconfig/
[root@master01 kubeconfig]# ls
[root@master01 kubeconfig]# mv kubeconfig.sh kubeconfig  拷贝kubeconfig.sh文件进行重命名
[root@master01 kubeconfig]# ls
[root@master01 kubeconfig]# vim kubeconfig 
[root@master01 kubeconfig]# cat /opt/kubernetes/cfg/token.csv 获取token信息(验证时使用该令牌认证node节点)
0246a531174228b8adfb6ee991861ba6,kubelet-bootstrap,10001,"system:kubelet-bootstrap"

[root@master01 kubeconfig]# vim kubeconfig 
删除前8行配置
# 创建 TLS Bootstrapping Token
#BOOTSTRAP_TOKEN=$(head -c 16 /dev/urandom | od -An -t x | tr -d ' ')
BOOTSTRAP_TOKEN=0fb61c46f8991b718eb38d27b605b008

cat > token.csv <<EOF
${
     BOOTSTRAP_TOKEN},kubelet-bootstrap,10001,"system:kubelet-bootstrap"
EOF

Kubernetes集群架构部署解析_第66张图片
Kubernetes集群架构部署解析_第67张图片
Kubernetes集群架构部署解析_第68张图片

3.7.4 设置环境变量(可以写入到/etc/profile中)

[root@master01 kubeconfig]# export PATH=$PATH:/opt/kubernetes/bin/
[root@master01 kubeconfig]# echo $PATH
[root@master01 kubeconfig]# kubectl get cs   查看节点状态

Kubernetes集群架构部署解析_第69张图片

3.7.5 生成配置文件

[root@master01 kubeconfig]# bash kubeconfig 20.0.0.10 /root/k8s/k8s-cert/
[root@master01 kubeconfig]# ls  查看是否生成为node节点上服务的环境配置文件

Kubernetes集群架构部署解析_第70张图片

3.7.6 拷贝配置文件到node节点

[root@master01 kubeconfig]# scp bootstrap.kubeconfig kube-proxy.kubeconfig root@20.0.0.11:/opt/kubernetes/cfg/
[root@master01 kubeconfig]# scp bootstrap.kubeconfig kube-proxy.kubeconfig root@20.0.0.12:/opt/kubernetes/cfg/
创建bootstrap角色赋予权限用于连接apiserver请求签名(关键)
                                            集群的用户绑定   角色名
[root@master01 kubeconfig]# kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap
      用户名
clusterrolebinding.rbac.authorization.k8s.io/kubelet-bootstrap created

Kubernetes集群架构部署解析_第71张图片

在node01节点上操作

3.7.7 启动kubelet服务

[root@node01 ~]# cd /opt/kubernetes/cfg/
[root@node01 cfg]# ls
[root@node01 cfg]# cd
[root@node01 ~]# ls
[root@node01 ~]# vim kubelet.sh 
[root@node01 ~]# bash kubelet.sh 20.0.0.11
[root@node01 ~]# systemctl status kubelet.service 

Kubernetes集群架构部署解析_第72张图片
Kubernetes集群架构部署解析_第73张图片
在master上

3.7.8 查看节点状态

查看检查到node01节点的请求

[root@master01 kubeconfig]# kubectl get nodes
[root@master01 kubeconfig]# kubectl get csr

在这里插入图片描述
Pending(等待集群给该节点颁发证书)

[root@master01 kubeconfig]# kubectl certificate approve node-csr-WkcjwO3KckVqSj-2CldkvNZWvx556eyxvEFRnrU7zBc 
[root@master01 kubeconfig]# kubectl get csr  
Approved,Issued(已经被允许加入群集)
[root@master01 kubeconfig]# kubectl get nodes 查看群集节点,成功加入node01节点

Kubernetes集群架构部署解析_第74张图片
Kubernetes集群架构部署解析_第75张图片

Kubernetes集群架构部署解析_第76张图片

在node01上操作

3.7.9 启动proxy服务

[root@node01 ~]#  ls
[root@node01 ~]# vim proxy.sh 
[root@node01 ~]# bash proxy.sh 20.0.0.11
[root@node01 ~]# systemctl status kube-proxy.service 

Kubernetes集群架构部署解析_第77张图片

Kubernetes集群架构部署解析_第78张图片

3.8 node02节点部署

在node01节点操作

3.8.1 把现成的/opt/kubernetes目录复制到其他节点进行修改即可

[root@node01 ~]# scp -r /opt/kubernetes/ root@20.0.0.12:/opt/
[root@node01 ~]# scp /usr/lib/systemd/system/{
     kubelet,kube-proxy}.service root@20.0.0.12:/usr/lib/systemd/system
把kubelet,kube-proxy的service文件拷贝到node2中

Kubernetes集群架构部署解析_第79张图片

在node02上操作,进行修改

3.8.2 首先删除复制过来的证书,等会node02会自行申请证书

[root@node02 ~]# cd /opt/kubernetes/
[root@node02 kubernetes]# ls
bin  cfg  ssl
[root@node02 kubernetes]# cd ssl/
[root@node02 ssl]# ls
[root@node02 ssl]# rm -rf *
[root@node02 ssl]# ls
[root@node02 ssl]# cd ..
[root@node02 kubernetes]# ls
[root@node02 kubernetes]# cd cfg/
[root@node02 cfg]# ls

3.8.3 修改配置文件kubelet kubelet.config kube-proxy(三个配置文件)

[root@node02 cfg]# vim kubelet
[root@node02 cfg]# vim kubelet.config 
[root@node02 cfg]# vim kube-proxy

Kubernetes集群架构部署解析_第80张图片
Kubernetes集群架构部署解析_第81张图片
Kubernetes集群架构部署解析_第82张图片
Kubernetes集群架构部署解析_第83张图片

3.8.4 启动服务

[root@node02 cfg]# systemctl start kubelet.service 
[root@node02 cfg]# systemctl status kubelet.service 
[root@node02 cfg]# ls /opt/kubernetes/ssl
[root@node02 cfg]# systemctl start kube-proxy.service 
[root@node02 cfg]# systemctl status kube-proxy.service 

Kubernetes集群架构部署解析_第84张图片

Kubernetes集群架构部署解析_第85张图片

在master上

3.8.5 查看请求

[root@master01 kubeconfig]# kubectl get csr 
[root@master01 kubeconfig]# kubectl certificate approve node-csr-QfLa64BJE8B97Fu7T6Nf5yQUi1ri2J_Qwy10NxPI2m4 授权许可加入群集
[root@master01 kubeconfig]# kubectl get nodes查看群集中的节点

Kubernetes集群架构部署解析_第86张图片
以上完成k8s单节点部署

3.9 多节点部署

1.master02 构建
2.构建两个nginx负载均衡

先具备单master节点部署环境
添加master02部署

在master01上

3.9.1 添加环境变量

[root@master01 ~]# cd /opt/kubernetes/bin/
[root@master01 bin]# ls
[root@master01 bin]# pwd
[root@master01 bin]# vim /etc/profile
[root@master01 bin]# source /etc/profile
[root@master01 bin]# kubectl get node

添加
export PATH=$PATH:/opt/kubernetes/bin/ 环境变量

Kubernetes集群架构部署解析_第87张图片

3.9.2 复制kubernetes目录到master02

[root@master01 bin]# scp -r /opt/kubernetes/ root@20.0.0.13:/opt/                                                                       
[root@master01 bin]# scp /usr/lib/systemd/system/{
     kube-apiserver,kube-controller-manager,kube-scheduler}.service root@20.0.0.13:/usr/lib/systemd/system/  复制master中的三个组件启动脚本kube-apiserver.service                   kube-controller-manager.service        kube-scheduler.service  

Kubernetes集群架构部署解析_第88张图片
master02上
重命名

[root@localhost ~]# hostnamectl  set-hostname master02
[root@localhost ~]# su

关闭防火墙

[root@master02 ~]# systemctl stop firewalld
[root@master02 ~]# setenforce 0
[root@master02 ~]# systemctl status firewalld.service 

Kubernetes集群架构部署解析_第89张图片

3.9.3 修改配置文件kube-apiserver中的IP

[root@master02 ~]# cd /opt/
[root@master02 opt]# ls
[root@master02 opt]# cd kubernetes/
[root@master02 kubernetes]# ls
[root@master02 kubernetes]# cd cfg/
[root@master02 cfg]# ls
[root@master02 cfg]# vim kube-apiserver 

Kubernetes集群架构部署解析_第90张图片

Kubernetes集群架构部署解析_第91张图片

特别注意:master02一定要有etcd证书
因为master02上有apiserver服务需要与etcd进行数据交互

3.9.4 需要拷贝master01上已有的etcd证书给master02使用

在master01上

[root@master01 bin]# scp -r /opt/etcd/ root@20.0.0.13:/opt/

Kubernetes集群架构部署解析_第92张图片

3.9.5 启动master02中的三个组件服务

[root@master02 cfg]# ls
[root@master02 cfg]# systemctl start kube-apiserver.service 
[root@master02 cfg]# systemctl enable kube-apiserver.service 
[root@master02 cfg]# ps aux | grep kube
[root@master02 cfg]# systemctl start kube-scheduler.service 
[root@master02 cfg]# systemctl enable kube-scheduler.service 
[root@master02 cfg]# ps aux | grep kube
[root@master02 cfg]# systemctl start kube-controller-manager.service 
[root@master02 cfg]# systemctl enable kube-controller-manager.service 

3.9.6 增加环境变量

[root@master02 cfg]# vim /etc/profile
[root@master02 cfg]# source /etc/profile
[root@master02 cfg]# kubectl get node

末尾添加
export PATH=$PATH:/opt/kubernetes/bin/

Kubernetes集群架构部署解析_第93张图片
Kubernetes集群架构部署解析_第94张图片

此时master02上也可以查看到node节点信息,原因是master02可以访问master01的etcd的数据信息,无法真正的控制管理两个node节点。
如果使用kubectl get node查看到节点状态不是Ready,检查load balancer的漂移地址是否存在。

[root@node01 ~]# cd /opt/kubernetes/cfg/
[root@node01 cfg]# ls
[root@node01 cfg]# vim kubelet.kubeconfig 

Kubernetes集群架构部署解析_第95张图片

Kubernetes集群架构部署解析_第96张图片
Kubernetes集群架构部署解析_第97张图片
在nginx01,02上

3.10 负载均衡

重命名

[root@localhost ~]# hostnamectl set-hostname nginx01
[root@localhost ~]# su
[root@server6 ~]# hostnamectl set-hostname nginx02
[root@server6 ~]# su

关闭防火墙

[root@nginx01 ~]# systemctl stop firewalld
[root@nginx01 ~]# setenforce 0
[root@nginx01 ~]# systemctl status NetworkManager

Kubernetes集群架构部署解析_第98张图片

3.10.1 yum源配置文件

[root@nginx01 ~]# vim /etc/yum.repos.d/nginx.repo
[root@nginx01 ~]# yum clean all  清除缓存
[root@nginx01 ~]# yum makecache  建立缓存
[root@nginx01 ~]# yum list      加载仓库列表 

添加
[nginx]  仓库名
name=nginx repo  名称
baseurl=http://nginx.org/packages/centos/7/$basearch/ 官网地址,文件路径
gpgcheck=0   不检查密钥(验证软件版本的序列号,验证软件包是否来自官网)

Kubernetes集群架构部署解析_第99张图片
Kubernetes集群架构部署解析_第100张图片

3.10.2 安装nginx(反向代理)

[root@nginx01 ~]# yum -y install nginx
添加四层转发
[root@nginx01 ~]# vim /etc/nginx/nginx.conf 
[root@nginx01 ~]# nginx -t    语法检测
[root@nginx01 ~]# systemctl start nginx
[root@nginx01 ~]# systemctl status nginx
添加

stream {
     
 
   log_format  main  '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';
    access_log  /var/log/nginx/k8s-access.log  main;   访问的日志路径
 
    upstream k8s-apiserver {
         四层反向代理
        server 20.0.0.10:6443;    指向真实ip地址(https)
        server 20.0.0.13:6443;
    }
    server {
     
                listen 6443;
                proxy_pass k8s-apiserver;   反向代理模块调用模块
    }
    }

Kubernetes集群架构部署解析_第101张图片
Kubernetes集群架构部署解析_第102张图片

Kubernetes集群架构部署解析_第103张图片

Kubernetes集群架构部署解析_第104张图片

[root@nginx01 ~]# netstat -anpt | grep nginx

在这里插入图片描述

6443:反向代理,监听的端口
80:启用nginx服务,默认启用网站,网站提供80端口

3.10.3 部署keepalived服务(双机热备)

[root@nginx01 ~]# yum -y install keepalived
添加 keepalived.conf,nginx.sh 
修改配置文件
[root@nginx01 ~]# cp keepalived.conf /etc/keepalived/keepalived.conf 拷贝配置文件
[root@nginx01 ~]# cd /etc/keepalived/
[root@nginx01 keepalived]# ls

检查脚本(vrrp_script)
保证nginx出现问题宕机时,keepalived也同时关闭,使vip地址实现漂移

Kubernetes集群架构部署解析_第105张图片

Kubernetes集群架构部署解析_第106张图片
删除之后配置
在node02上
Kubernetes集群架构部署解析_第107张图片

3.10.4 编辑配置文件

[root@nginx01 keepalived]# cd /etc/nginx/
[root@nginx01 nginx]# ls
[root@nginx01 nginx]# vim check_nginx.sh
[root@nginx01 nginx]# chmod +x check_nginx.sh 
[root@nginx01 nginx]# ls
[root@nginx01 nginx]# systemctl start keepalived.service   启动服务
[root@nginx01 nginx]# systemctl status keepalived.service 


添加
count=$(ps -ef |grep nginx |egrep -cv "grep|$$")      反向统计过滤出nginx
              查看进程   nginx       v:反向统计  
if [ "$count" -eq 0 ];then      如果nginx数量为0,
    systemctl stop keepalived   则keepalived服务关闭,实现vip地址漂移
fi

Kubernetes集群架构部署解析_第108张图片
Kubernetes集群架构部署解析_第109张图片
在nginx01(主服务器上)

3.10.5 查看是否存在vip地址

[root@nginx01 nginx]# ip a

Kubernetes集群架构部署解析_第110张图片
Kubernetes集群架构部署解析_第111张图片

3.10.6 验证地址漂移

(nginx01中使用pkill nginx,再在nginx02中使用ip a 查看)

[root@nginx01 nginx]# pkill nginx
[root@nginx01 nginx]# ip a

Kubernetes集群架构部署解析_第112张图片

Kubernetes集群架构部署解析_第113张图片

实现vip地址漂移

3.10.7 恢复操作(在nginx01中先启动nginx服务,再启动keepalived服务)

因为有check_nginx.sh脚本的存在

[root@nginx01 nginx]# systemctl start nginx
[root@nginx01 nginx]# systemctl status nginx
[root@nginx01 nginx]# systemctl start keepalived.service 
[root@nginx01 nginx]# systemctl status keepalived.service 

Kubernetes集群架构部署解析_第114张图片

[root@nginx01 nginx]# ip a   (vrrp服务有位置抢占功能,优先级高)

Kubernetes集群架构部署解析_第115张图片
Kubernetes集群架构部署解析_第116张图片

3.10.8 开始修改node节点配置文件统一指向VIP(bootstrap.kubeconfig,kubelet.kubeconfig)

在node01,02上

[root@node01 cfg]# vim bootstrap.kubeconfig 
[root@node01 cfg]# vim kubelet.kubeconfig 
[root@node01 cfg]# vim kube-proxy.kubeconfig 

Kubernetes集群架构部署解析_第117张图片

Kubernetes集群架构部署解析_第118张图片
Kubernetes集群架构部署解析_第119张图片

3.10.9 重启服务

[root@node02 cfg]# systemctl restart kubelet.service 
[root@node02 cfg]# systemctl restart kube-proxy.service 
[root@node02 cfg]# pwd
[root@node02 cfg]# grep 100 *       替换完成直接自检

3.10.10 在nginx01上查看nginx的k8s日志

[root@nginx01 nginx]# tail /var/log/nginx/k8s-access.log 

Kubernetes集群架构部署解析_第120张图片

在master01上操作

3.10.11 测试创建pod

[root@master01 ~]# kubectl run nginx --image=nginx
[root@master01 ~]# kubectl get pods   查看状态
[root@master01 ~]# kubectl get pods -w

Kubernetes集群架构部署解析_第121张图片

ContainerCreating 正在创建中
Running 创建完成,运行中

[root@master01 ~]# kubectl get pods -o wide

Kubernetes集群架构部署解析_第122张图片
在20.0.0.11上(node01)

[root@node01 cfg]# docker ps -a

Kubernetes集群架构部署解析_第123张图片

在master01上

[root@master01 ~]# kubectl describe pod nginx-dbddb74b8-9fbq9   查看创建日志

Kubernetes集群架构部署解析_第124张图片

3.11 dashborad搭建(图形化界面,管理k8s)

在master01上

3.11.1 查看节点状态

[root@master01 ~]# kubectl get node   

在这里插入图片描述

解决方式
查看nginx01,02上vip(漂移地址)

3.11.2 重启keepalived服务

[root@nginx01 ~]# systemctl restart keepalived.service 
[root@nginx01 ~]# ip a

Kubernetes集群架构部署解析_第125张图片

Kubernetes集群架构部署解析_第126张图片
在master01上

[root@master01 ~]# kubectl get node

在这里插入图片描述

3.11.3 创建dashborad工作目录

[root@master01 ~]# cd /root/k8s/
[root@master01 k8s]# ls
[root@master01 k8s]# mkdir dashboard   
[root@master01 k8s]# ls

拷贝官方的文件

添加文件

dashboard-configmap.yaml  :配置文件资源(网站配置文件)
dashboard-rbac.yaml  :安全框架(控制用户的权限)
dashboard-service.yaml:提供网站服务(暴露服务)
dashboard-controller.yaml :控制器资源(定义网站有无状态化)
dashboard-secret.yaml  :网站的身份验证(网站用户登录的凭据)
k8s-admin.yaml:管理员身份的定义

Kubernetes集群架构部署解析_第127张图片

3.11.3.1 dashboard-rbac.yaml :安全框架(控制用户的权限)

[root@master01 dashboard]# ls
[root@master01 dashboard]# vim dashboard-rbac.yaml 
[root@master01 dashboard]# kubectl create -f dashboard-rbac.yaml 
[root@master01 dashboard]# kubectl get role -n kube-system
                                     资源类型 名称

Kubernetes集群架构部署解析_第128张图片

Kubernetes集群架构部署解析_第129张图片

3.11.3.2 dashboard-secret.yaml :网站的身份验证(网站用户登录的凭据)

[root@master01 dashboard]# ls
[root@master01 dashboard]# vim dashboard-secret.yaml 
[root@master01 dashboard]# kubectl create -f dashboard-secret.yaml 
[root@master01 dashboard]# kubectl get secret -n kube-system

Kubernetes集群架构部署解析_第130张图片
Kubernetes集群架构部署解析_第131张图片

3.11.3.3 dashboard-configmap.yaml :配置文件资源(网站配置文件)

[root@master01 dashboard]# ls 
[root@master01 dashboard]# vim dashboard-configmap.yaml 
[root@master01 dashboard]# kubectl create -f dashboard-configmap.yaml 
[root@master01 dashboard]# kubectl get configmap -n kube-system

Kubernetes集群架构部署解析_第132张图片

Kubernetes集群架构部署解析_第133张图片

3.11.3.4 dashboard-controller.yaml :控制器资源(定义网站有无状态化)

[root@master01 dashboard]# ls
[root@master01 dashboard]# vim dashboard-controller.yaml 
[root@master01 dashboard]# kubectl create -f dashboard-controller.yaml 
[root@master01 dashboard]# kubectl get ServiceAccount -n kube-system

Kubernetes集群架构部署解析_第134张图片

Kubernetes集群架构部署解析_第135张图片

3.11.3.5 dashboard-service.yaml:提供网站服务(暴露服务)

[root@master01 dashboard]# ls 
[root@master01 dashboard]# vim dashboard-service.yaml 
[root@master01 dashboard]# kubectl apply -f dashboard-service.yaml 
[root@master01 dashboard]# kubectl get Service -n kube-system

Kubernetes集群架构部署解析_第136张图片
Kubernetes集群架构部署解析_第137张图片

[root@master01 dashboard]# kubectl get pods,svc -n kube-system
[root@master01 dashboard]# kubectl get pods -o wide -n kube-system
-o wide pods:查看创建pod的位置

在这里插入图片描述
访问nodeIP就可以访问(火狐浏览器可以直接访问)
https://20.0.0.12:30001

3.11.4 解决谷歌浏览器无法访问的问题

Kubernetes集群架构部署解析_第138张图片
Kubernetes集群架构部署解析_第139张图片
Kubernetes集群架构部署解析_第140张图片

[root@master01 dashboard]# vim dashboard-cert.sh

Kubernetes集群架构部署解析_第141张图片

3.11.4.1 添加两个自签证书

[root@master01 dashboard]# vim dashboard-controller.yaml 
可以识别自签证书

添加两个自签证书
 - --tls-key-file=dashboard-key.pem
 - --tls-cert-file=dashboard.pem

Kubernetes集群架构部署解析_第142张图片

[root@master01 dashboard]# ls
[root@master01 dashboard]# ls /root/k8s/k8s-cert/
[root@master01 dashboard]# bash dashboard-cert.sh /root/k8s/k8s-cert/

Kubernetes集群架构部署解析_第143张图片

3.11.4.2 重新部署

(注意:当apply不生效时,先使用delete清除资源,再apply创建资源)

[root@master01 dashboard]# ls
[root@master01 dashboard]#  kubectl apply -f dashboard-controller.yaml (apply更新)
[root@master01 dashboard]# kubectl get pods -o wide -n kube-system

Kubernetes集群架构部署解析_第144张图片

Kubernetes集群架构部署解析_第145张图片

Kubernetes集群架构部署解析_第146张图片

3.111.4.3 生成令牌

[root@master01 dashboard]# ls
[root@master01 dashboard]# kubectl create -f k8s-admin.yaml 
[root@master01 dashboard]# vim k8s-admin.yaml 
[root@master01 dashboard]# kubectl get ServiceAccount -n kube-system
[root@master01 dashboard]# kubectl get secret -n kube-system

Kubernetes集群架构部署解析_第147张图片Kubernetes集群架构部署解析_第148张图片
Kubernetes集群架构部署解析_第149张图片

Kubernetes集群架构部署解析_第150张图片

3.11.4.4 读取令牌进行登录

Kubernetes集群架构部署解析_第151张图片

Kubernetes集群架构部署解析_第152张图片

到此为止,完成k8s的完整性部署完成


总结

1.若干节点设置为污点,意味此节点不会被创建Pod,列入黑名单

2.指定创建,不需要通过调度器,直接创建在指定的节点上

3.docker支持fannel服务
使docker可以应用flannel地址

vim /usr/lib/systemd/system/docker.service 
添加环境变量文件路径,引用变量
EnvironmentFile=/run/flannel/subnet.env
$DOCKER_NETWORK_OPTIONS 

4.k8s集群中DNS地址为10.0.0.2

5.代理端配置文件
node节点端加k8s集群,要先准备一些材料,身份(配置kubeconfig中),master认证要通过,bootstrap作为访问暴露出去,作为api-server与kubelet之间通信的工具

6.当kubelet启动时会向master发出认证证书请求,master通过,并颁发证书给node节点,node节点才可以加入集群中,由此得出:kubelet决定着node节点是否可以被添加到集群中,如果发送的指令到node,node节点无法执行,说明kubelet出现问题

7.k8s创建资源的方式
1.文件(yaml,json)格式
yaml:pod管理使用(docker-compose编排,适用于自动化管理和编排)
json:k8s开发人员使用开发接口

2.kubectl方式创建

你可能感兴趣的:(k8s)