• K8S从入门到放弃系列-(8)kube-apiserver 高可用配置


    摘要:

      前面几篇文章,就是整个的master节点各组件的部署,上面我们提到过,k8s组件中,kube-controller-manager、kube-scheduler及etcd这三个服务高可用,都是通过leader选举模式产生,本章节我们着重介绍下kube-apiserver高可用配置

    1、以下操作属于node节点上组件的部署,在master节点上只是进行文件配置,然后发布至各node节点。

    2、若是需要master也作为node节点加入集群,也需要在master节点部署docker、kubelet、kube-proxy。

    1)常用高可用

      keeplaived+HAproxy

      公有云SLB

          Nginx反向代理(本文使用)

    2)docker

    在部署node组件之前,我们需要先在node节点部署docker,因为后续kubelet启动,需要依赖docker服务,并且,k8s部署服务,都是基于docker进行运行。后面遇到时自会明白。
    k8s1.14官方文档中说明 支持docker版本到docker18.09最新版本。
    ## 设置存储库
    [root@k8s-master01 ~]# ansible k8s-node -m shell -a 'yum install -y yum-utils device-mapper-persistent-data lvm2'
    ## 添加yum源
    [root@k8s-master01 ~]# ansible k8s-node -m shell -a 'yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo'
    ## 安装指定版本docker
    [root@k8s-master01 ~]# ansible k8s-node -m shell -a 'yum install docker-ce-18.09.5-3.el7 -y'
    ## 启动
    [root@k8s-master01 ~]# ansible k8s-node -m shell -a 'systemctl enable docker'
    [root@k8s-master01 ~]# ansible k8s-node -m shell -a 'systemctl start docker'

    3)创建nginx.conf配置文件

    原理:为了保证 apiserver 的 HA,需要在每个 node 上部署 nginx 来反向代理(tcp)所有 apiserver;然后 kubelet、kube-proxy 组件连接本地 127.0.0.1:6443 访问 apiserver,以确保任何 master 挂掉以后 node 都不会受到影响;

    ## 创建nginx配置文件目录
    [root@k8s-master01 ~]# ansible k8s-node -m file -a 'path=/etc/nginx state=directory'
    ## 编辑nginx配置文件
    [root@k8s-master01 ~]# vim /opt/k8s/cfg/nginx.conf
    error_log stderr notice;
    
    worker_processes auto;
    events {
          multi_accept on;
          use epoll;
          worker_connections 1024;
    }
    
    stream {
        upstream kube_apiserver {
            least_conn;
            server 10.10.0.18:6443;
            server 10.10.0.19:6443;
            server 10.10.0.20:6443;
        }
    
        server {
            listen        0.0.0.0:6443;
            proxy_pass    kube_apiserver;
            proxy_timeout 10m;
            proxy_connect_timeout 1s;
        }
    }
    ## 分发nginx.conf至node节点
    [root@k8s-master01 ~]# ansible k8s-node -m copy -a 'src=/opt/k8s/cfg/nginx.conf dest=/etc/nginx/'
    2)配置 Nginx 基于 docker 进程,然后配置 systemd 来启动

    [root@k8s-master01 k8s]# vim /opt/k8s/unit/nginx-proxy.service
    [Unit]
    Description=kubernetes apiserver docker wrapper
    Wants=docker.socket
    After=docker.service
    
    [Service]
    User=root
    PermissionsStartOnly=true
    ExecStart=/usr/bin/docker run -p 127.0.0.1:6443:6443 
                                  -v /etc/nginx:/etc/nginx 
                                  --name nginx-proxy 
                                  --net=host 
                                  --restart=on-failure:5 
                                  --memory=512M 
                      nginx:1.14.2-alpine
    ExecStartPre=-/usr/bin/docker rm -f nginx-proxy
    ExecStop=/usr/bin/docker stop nginx-proxy
    Restart=always
    RestartSec=15s
    TimeoutStartSec=30s
    
    [Install]
    WantedBy=multi-user.target
    ## 分发至node节点
    [root@k8s-master01 ~]# ansible k8s-node -m copy -a 'src=/opt/k8s/unit/nginx-proxy.service dest=/usr/lib/systemd/system/'
    ## 启动服务
    [root@k8s-master01 ~]# ansible k8s-node -m shell -a 'systemctl daemon-reload'
    [root@k8s-master01 ~]# ansible k8s-node -m shell -a 'systemctl enable nginx-proxy'
    [root@k8s-master01 ~]# ansible k8s-node -m shell -a 'systemctl start nginx-proxy'

  • 相关阅读:
    python常见的错误异常
    vim命令c编程
    递归函数初步理解---python实现(汉诺塔问题)
    python报错:AttributeError: module 'pdb' has no attribute 'set_trace'
    python程序控制结构
    python函数
    结构体的四种定义方法
    基于一维数组的桶排序入门
    双链表与单链表的比较
    在用free()函数释放指针内存时为何要将其指针置空
  • 原文地址:https://www.cnblogs.com/tchua/p/10768490.html
Copyright © 2020-2023  润新知