Ks8概念总结

KS8概念总结

模型图

技术迭代

1565591075478部署大规模集群

1565591221738

模型

1565591281369

架构

1565591525113

1565591833794

实现高可用架构

三大指标

  • 高可用、高性能、高并发

Zookeeper

  1. 负载均衡:实现轮询机制。防止阻塞
  2. 集群:必须实现数据同步,Redis
  3. 高可用:一直可用,实现崩溃恢复 A(down & resume) B(up) C

ks8高可用集群搭建

节点配置

1565592314612

步骤:

  1. 关闭交换空间

  2. 避免开机启动交换空间

  3. 关闭防火墙

  4. 配置 DNS

  5. 安装 Docke

  6. 配置 Docker 加速器

  7. 安装 kubeadm,kubelet,kubectl

  8. 同步时间:时间要统一

  9. 配置 IPVS

  10. 配置内核参数\

  11. 修改 cloud.cfg 是修改hostname

单独节点

  1. 配置 IP

  2. 配置主机名

  3. 安装 HAProxy (高可用)+ Keepalived(负载均衡)

    1. Keepalived概述

      ks8 Master阶段运行组件

    • kube-apiserver:提供资源操作的唯一入口(提供认证、授权、访问控制、api注册和发现)

    • kube-scheduler:负责资源调度 ,将pod调度到相应机器上。

    • kube-controller-manager:负责维护集群状态(故障检测、自动扩展。。。)

      Keepalived

      当master挂了,将其他slaver接上去

      实现图解

      1565593821985

  1. 部署 Kubernetes 集群

    1. 初始化 Master

    2. 加入 Master 节点

    3. 加入 Node 节点

    4. 验证集群状态

    5. 验证高可用

      注意 重启之后ipvs要重新执行一哈

      1565595057809

问题

解决Node无法加入集群

替换 Calico(网络插件) 网段为我们虚拟机不重叠的网段(这里用的是 Flannel 默认网段)

如果Calico网段与master、slaver网段重叠就会导致Node无法加入集群。

  1. ks8重置
  2. 删除kubectl配置
  3. 启动ipvs
  4. 导出并修改配置文件 改calico网段
  5. kubeadm初始化
  6. 配置kubectl
  7. 下载Calico 配置文件并修改 611 行 /name: CALICO_IPV$POOL_CIDR 的value
  8. 直接应用本地Calico
  9. 加入Master结点(最后 配置mkdir babbalala~~ dubectl get node)

通过资源配置运行容器(部署容器)测试

启动顺序

  1. Pod

  2. Deployment 内部访问

  3. Service 外部访问机制

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    kubectl get node #结点状态
    master01: vi /kubernetes/yml/nginx-deployment.yml #设置deployment
    kubectl create -f nginx-deployment.yml
    kubectl get pod #查看pod
    kubectl get deployment #看看deployment 开两个实例
    master01: vi /kubernetes/yml/ nginx-service.yml #设置service
    kubectl get service #查看service
    端口: 80:30066 (30066指的是node 的pod暴露30066端口,再由pod映射到nginx 的80端口)
    kubectl describe service nginx-http #下面
    NodePort: 30066/TCP
    #使用LoadBalancer master slaver 端口都暴露
    master01:30066
    master02:30066
    slaver01:30066
    slaver02: 30066
    kubectl delete -f nginx-service.yml #停掉
    #想要把30066改成80端口
    vi /kubernetes/yml/ nginx-service.yml
    prots:
    -prot: 80 #Service 端口
    targetPort: 80 #Pod 端口 将Service暴露端口转发到Pod端口上
    nodePort: 80 # 本来是30066 但是报错 他的范围30000-32767
    kubectl create -f nginx-service.yml #重开
    #解决办法
    vi /etc/kubernetes/manitestls/kube-apiserver.yml
    #增加配置
    --service-node-prot-range=2-65545
    #ks8重启 或者 他自动重启
    #验证
    kubectl create -f nginx-service.yml
    kubectl describe service nginx-http

Ingress统一访问入口

ClusterIP服务

内部访问方式:外部proxy模式访问内部

1565611874845

1
2
3
kubectl get service
type
ClusterIP

三种外部访问方式

NodePort

在所有节点(虚拟机)上开放一个特定端口

  • 每个端口一种服务
  • 默认模式(官方不推荐)
  • 调试的时候用

1565612144152

LoadBalancer

在NodePort加了负载均衡

Ingress

扮演智能路由 或 集

群入口 (类似API网关)

1565612349113

例如:部署Tomcat只允许在内网访问,需要Ingress提供反向代理功能路由到Tomcat上

  1. 部署Tomcat tomcat.yml(Devlopment+Service)

    ClusterIP设置

    watch kubectl get pods # 查看运行状态

    kubectl get deployment

    kubectl get service

    kubectl describe service tomcat-http 没有nodeport 限制外网访问

    1565613146789

  2. 下载Nginx Ingress Controller 配置文件 & 修改

    hostNetwork: true

    kubectl get pods -all -namespaces

    多了 ingress-nginx

  3. 部署ingress -> ingress.yml

  4. kubectl get pods -n ingress-nginx -o wide

    ip: 192.168.141.161

  5. SwitchHosts : 192.168.141.161 域名

数据持久化

NFS+PV/PVC

NFS

RPC通信,分布式文件系统

部署

  1. 安装NFS服务端
  2. 安装NFS客户端
  3. 验证NFS服务

PV和PVC

持久卷提供者 持久卷消费者 NFS网络方案

pv:规格集群资源

pvc:分配集群资源

1565624573158

  1. create pv.yml pvc.yml

  2. 部署mysql 8 连接pv pvc

    出现问题:没有个性化配置

ConfigMap

用来存储配置文件的ks8资源对象,放在etcd内,一种外挂配置。解耦

即:可是用ConfigMap配置MYSQL

Dashboard

运行界面

CI/CD

环境:

  • java
  • git
  • mvn
0%