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'

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM