記錄一次k8s環境嘗試過程(初始方案,如今已經作過不少完善,例如普羅米修斯)

記錄一次Team k8s環境搭建過程(初始方案,如今已經作過不少完善,例如普羅米修斯)javascript

Host:
hostname  OS  purpose ip
ub2-citst001.abc.com ubuntu16.04 docker registry 10.239.220.38
centos-k8s001.abc.com centos7.3 haproxy+keepalived+etcd(leader) 10.239.219.154
centos-k8s002.abc.com centos7.3 haproxy+keepalived+etcd 10.239.219.153
centos-k8s003.abc.com centos7.3 etcd+nginx+ELK(elasticsearch,logstash,kibana) 10.239.219.206
centos-k8s004.abc.com centos7.3 k8s master (kube-apiserver、kube-controller-manager、kube-scheduler) 10.239.219.207
centos-k8s005.abc.com centos7.3
k8s slave( kubeproxy,kubelet,docker,flanneld )+OSS service+ELK(elasticsearch+filebeat)
10.239.219.208
centos-k8s006.abc.com centos7.3 k8s slave(kubeproxy,kubelet,docker,flanneld)+mysql master+OSS service+ELK(elasticsearch+filebeat) 10.239.219.210
centos-k8s007.abc.com centos7.3 k8s slave(kubeproxy,kubelet,docker,flanneld)+mysql slave+OSS service+ELK(elasticsearch+filebeat) 10.239.219.209
 
集羣搭建的過程大體可分爲:
        1、docker 私有倉庫的搭建
        2、etcd集羣
        3、k8s集羣的部署(1master 3slave)
        四 、mysql (mycat)主從(k8s+docker 實現)
          五 、webservice image build
         6、 haproxy+keeplived(主主模式) 負載均衡
        7、mysql 自動備份
        8、ELK 日誌管理
 
網絡環境準備:
    1. 若是所在網絡須要代理:
 
 
 
 
 
 
 
 
 
 
 
1
vi /etc/profile
 
 
    追加以下內容:
 
 
 
 
 
 
 
 
 
 
 
1
export http_proxy=http://ip or realm :port
2
export https_proxy=http://ip or realm :port
 
 
 
     ubuntu 和 從centos 的默認軟件源很慢 咱們改成國內網易163的源:
     ubuntu:

1.備份原來的源

 
 
 
 
 
 
 
 
 
 
 
1
sudo cp /etc/apt/sources.list /etc/apt/sources_init.list
 
 

將之前的源備份一下,以防之後能夠用的。php

2.更換源

 
 
 
 
 
 
 
 
 
 
 
1
sudo vi /etc/apt/sources.list
 
 
使用如下內容替換原內容   :wq 保存並退出

 
 
 
 
 
 
 
 
 
 
 
1
deb http://mirrors.163.com/ubuntu/ wily main restricted universe multiverse
2
deb http://mirrors.163.com/ubuntu/ wily-security main restricted universe multiverse
3
deb http://mirrors.163.com/ubuntu/ wily-updates main restricted universe multiverse
4
deb http://mirrors.163.com/ubuntu/ wily-proposed main restricted universe multiverse
5
deb http://mirrors.163.com/ubuntu/ wily-backports main restricted universe multiverse
6
deb-src http://mirrors.163.com/ubuntu/ wily main restricted universe multiverse
7
deb-src http://mirrors.163.com/ubuntu/ wily-security main restricted universe multiverse
8
deb-src http://mirrors.163.com/ubuntu/ wily-updates main restricted universe multiverse
9
deb-src http://mirrors.163.com/ubuntu/ wily-proposed main restricted universe multiverse
10
deb-src http://mirrors.163.com/ubuntu/ wily-backports main restricted universe multiverse
 
 

3.更新

更新源css

 
 
 
 
 
 
 
 
 
 
 
1
sudo apt-get update
 
 
Centos:
     mv /etc/yum .repos .d /CentOS-Base .repo /etc/yum .repos .d /CentOS-Base .repo .backup
    cd /etc/yum.repos.d/
     wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
     yum clean all  
     yum makecache
     yum -y update
 
1、docker 私有倉庫的搭
  1.     Ubuntu & centos docker 安裝:
    2.     若是在sh的域,能夠修改docker源加速:
            vim /etc/docker/daemon.json(沒有則建立),寫入:
 
 
 
 
 
 
 
 
 
 
 
1
{
2
    "registry-mirrors": ["http://hub-mirror.c.163.com"]
3
}
 
 
     3.     重啓docker:    
 
 
 
 
 
 
 
 
 
 
 
1
systemctl restart docker
 
 
    4.    測試docker環境是否可用:  
 
 
 
 
 
 
 
 
 
 
 
1
docker pull hello-world   
 
 
        
               若是出現 「Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)」,須要docker 代理:
            1).建立docker.service.d目錄:          
 
 
 
 
 
 
 
 
 
 
 
1
sudo mkdir -p /etc/systemd/system/docker.service.d
 
 
            2).建立代理文件:          
 
 
 
 
 
 
 
 
 
 
 
1
vim /etc/systemd/system/docker.service.d/http-proxy.conf
 
 
            3).向http-proxy.conf添加內容:
 
 
 
 
 
 
 
 
 
 
 
1
[Service]
2
Environment="HTTP_PROXY=xxx.xxx.xxx.xxx:port"
3
Environment="HTTPS_PROXY=xxx.xxx.xxx.xxx:port"
 
 
            4)systemctl daemon-reload
               service docker restart
            5).再次測試:  docker pull hello-world  ,若是獲得相似以下結果,說明鏡像已經下載
 
 
 
 
 
 
 
 
 
 
 
1
Using default tag: latest
2
latest: Pulling from library/hello-world
3
d1725b59e92d: Pull complete
4
Digest: sha256:0add3ace90ecb4adbf7777e9aacf18357296e799f81cabc9fde470971e499788
5
Status: Downloaded newer image for hello-world:latest
 
 
            6). 查看已有鏡像:
 
 
 
 
 
 
 
 
 
 
 
1
docker images
 
 
                發現hello-world在鏡像列表 第一個docker 鏡像就已經pull成功了!  
    5.    私有倉庫搭建:
            爲了方便保存並進行統一管理 咱們的須要有一個私有的鏡像倉庫保存咱們的鏡像  以 ub2-citst001做爲docker鏡像管理機器&私有倉庫,集羣內的機器所須要的鏡像都從這臺機器pull.
            1)  下載registry鏡像:  
 
 
 
 
 
 
 
 
 
 
 
1
 docker pull index.tenxcloud.com/docker_library/registry
 
 
            2)   重命名registry鏡像: 
 
 
 
 
 
 
 
 
 
 
 
1
docker tag daocloud.io/library/registry:latest registry
 
 
            3)  查看鏡像: 
 
 
 
 
 
 
 
 
 
 
 
1
docker images
 
 
 
  

 

     4)  鏡像倉庫的存儲地址在容器的/var/lib/registry 目錄,咱們須要在宿主機上建立一個文件夾來存放(映射)容器內/varlib/registry/的數據        
 
 
 
 
 
 
 
 
 
 
 
 
1
makedir -p  /docker/registry/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
docker run -d -p 5000:5000 --name registry --restart=always --privileged=true -v /docker/registry:/var/lib/registry registry
 
 
                    參數說明:
                        -p 5000:5000  將宿主機的5000端口映射到容器5000端口
 
docker 
                        -restart=always  只要容器被關閉(任何狀況下), docker 都會重啓此容器
                        --privileged=true 給容器加權限&給與啓動倉庫的權限
                        -v 將宿主機目錄映射到容器上 
         5) docker ps

 

           6)    設置鏡像倉庫的地址
                         vim /etc/docker/daemon.json,替換爲:

 
 
 
 
 
 
 
 
 
 
 
1
{
2
"registry-mirrors": ["http://hub-mirror.c.163.com"],"insecure-registries":["宿主機的ip或域名:5000"]
3
}
 
 
          7)    重啓docker  

 
 
 
 
 
 
 
 
 
 
 
1
systemctl restart docker
 
 
          8)   測試:
                   要講hello-world 上傳到私有倉庫:  先要重命名鏡像:
                   docker tag hello-world ub2-citst001.abc.com:5000/hello-world
                  上傳:  docker push ub2-citst001.abc.com:5000/hello-world
                  下載:   docker pull ub2-citst001.abc.com :5000/hello-world
                   在其餘機器上測試:
                       編輯 /etc/docker/daemon.json (沒有就建立)

 
 
 
 
 
 
 
 
 
 
 
1
{
2
"registry-mirrors": ["http://hub-mirror.c.163.com"],"insecure-registries":["私有倉庫ip或者域名 :5000"]
3
}
 
 

 
 
 
 
 
 
 
 
 
 
 
1
systemctl daemon-reload
2
service docker restart
 
 
二. etcd 集羣搭建

etcd簡介

etcd是一個高可用的分佈式鍵值(key-value)數據庫。etcd內部採用raft協議做爲一致性算法,etcd基於Go語言實現。 html

etcd是一個服務發現系統,具有如下的特色: java

簡單:安裝配置簡單,並且提供了HTTP API進行交互,使用也很簡單 node

安全:支持SSL證書驗證 python

快速:根據官方提供的benchmark數據,單實例支持每秒2k+讀操做 mysql

可靠:採用raft算法,實現分佈式系統數據的可用性和一致性linux

etcd應用場景

用於服務發現,服務發現(ServiceDiscovery)要解決的是分佈式系統中最多見的問題之一,即在同一個分佈式集羣中的進程或服務如何才能找到對方並創建鏈接。nginx

要解決服務發現的問題,須要具有下面三種必備屬性。 

- 一個強一致性、高可用的服務存儲目錄。 

基於Ralf算法的etcd天生就是這樣一個強一致性、高可用的服務存儲目錄。 

一種註冊服務和健康服務健康情況的機制。

etcd安裝

分別在k8s001,k8s002,k8s003上安裝etcd,組成etcd集羣
能夠直接在主機上安裝,也能夠經過docker安裝部署
主機安裝:
    1. 分別在三臺機器上運行: yum install etcd -y
    2.  yum安裝的etcd默認配置文件在/etc/etcd/etcd.conf,修改這個文件
        centos-k8s001:

 
 
 
 
 
 
 
 
 
 
 
1
# [member]
2
# 節點名稱
3
ETCD_NAME=centos-k8s001
4
# 數據存放位置
5
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
6
#ETCD_WAL_DIR=""
7
#ETCD_SNAPSHOT_COUNT="10000"
8
#ETCD_HEARTBEAT_INTERVAL="100"
9
#ETCD_ELECTION_TIMEOUT="1000"
10
# 監聽其餘 Etcd 實例的地址
11
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
12
# 監聽客戶端地址
13
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"
14
#ETCD_MAX_SNAPSHOTS="5"
15
#ETCD_MAX_WALS="5"
16
#ETCD_CORS=""
17
#
18
#[cluster]
19
# 通知其餘 Etcd 實例地址
20
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://centos-k8s001:2380"
21
# if you use different ETCD_NAME (e.g. test), set ETCD_INITIAL_CLUSTER value for this name, i.e. "test=http://..."
22
# 初始化集羣內節點地址
23
ETCD_INITIAL_CLUSTER="centos-k8s001=http://centos-k8s001:2380,centos-k8s002=http://centos-k8s002:2380,centos-k8s003=http://centos-k8s003:2380"
24
# 初始化集羣狀態,new 表示新建
25
ETCD_INITIAL_CLUSTER_STATE="new"
26
# 初始化集羣 token
27
ETCD_INITIAL_CLUSTER_TOKEN="mritd-etcd-cluster"
28
# 通知 客戶端地址
29
ETCD_ADVERTISE_CLIENT_URLS="http://centos-k8s001:2379,http://centos-k8s001:4001"
 
 
centos-k8s002:

 
 
 
 
 
 
 
 
 
 
 
1
# [member]
2
ETCD_NAME=centos-k8s002
3
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
4
#ETCD_WAL_DIR=""
5
#ETCD_SNAPSHOT_COUNT="10000"
6
#ETCD_HEARTBEAT_INTERVAL="100"
7
#ETCD_ELECTION_TIMEOUT="1000"
8
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
9
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"
10
#ETCD_MAX_SNAPSHOTS="5"
11
#ETCD_MAX_WALS="5"
12
#ETCD_CORS=""
13
#
14
#[cluster]
15
 
        
16
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://centos-k8s002:2380"
17
# if you use different ETCD_NAME (e.g. test), set ETCD_INITIAL_CLUSTER value for this name, i.e. "test=http://..."
18
ETCD_INITIAL_CLUSTER="centos-k8s001=http://centos-k8s001:2380,centos-k8s002=http://centos-k8s002:2380,centos-k8s003=http://centos-k8s003:2380"
19
ETCD_INITIAL_CLUSTER_STATE="new"
20
ETCD_INITIAL_CLUSTER_TOKEN="mritd-etcd-cluster"
21
ETCD_ADVERTISE_CLIENT_URLS="http://centos-k8s002:2379,http://centos-k8s002:4001"
 
 
 

centos-k8s003:


 
 
 
 
 
 
 
 
 
 
 
1
# [member]
2
ETCD_NAME=centos-k8s003
3
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
4
#ETCD_WAL_DIR=""
5
#ETCD_SNAPSHOT_COUNT="10000"
6
#ETCD_HEARTBEAT_INTERVAL="100"
7
#ETCD_ELECTION_TIMEOUT="1000"
8
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
9
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"
10
#ETCD_MAX_SNAPSHOTS="5"
11
#ETCD_MAX_WALS="5"
12
#ETCD_CORS=""
13
#
14
#[cluster]
15
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://centos-k8s003:2380"
16
# if you use different ETCD_NAME (e.g. test), set ETCD_INITIAL_CLUSTER value for this name, i.e. "test=http://..."
17
ETCD_INITIAL_CLUSTER="centos-k8s001=http://centos-k8s001:2380,centos-k8s002=http://centos-k8s002:2380,centos-k8s003=http://centos-k8s003:2380"
18
ETCD_INITIAL_CLUSTER_STATE="new"
19
ETCD_INITIAL_CLUSTER_TOKEN="mritd-etcd-cluster"
20
ETCD_ADVERTISE_CLIENT_URLS="http://centos-k8s003:2379,http://centos-k8s003:4001"
 
 

 

3. 在各節點上重啓etcd服務:

 
 
 
 
 
 
 
 
 
 
 
1
systemctl restart etcd
 
 

4.查看集羣是否成功:

 
 
 
 
 
 
 
 
 
 
 
1
etcdctl member list
 
 
        若是看到以下輸出,表示成功:

 
 
 
 
 
 
 
 
 
 
 
1
4cb07e7292111d83: name=etcd1 peerURLs=http://centos-k8s001:2380 clientURLs=http://centos-k8s001:2379,http://centos-k8s001:4001 isLeader=true
2
713da186acaefc5b: name=etcd2 peerURLs=http://centos-k8s002:2380 clientURLs=http://centos-k8s002:2379,http://centos-k8s002:4001 isLeader=false
3
fabaedd18a2da8a7: name=etcd3 peerURLs=http://centos-k8s003:2380 clientURLs=http://centos-k8s003:2379,http://centos-k8s003:4001 isLeader=false
 
 
    docker安裝部署:
          1.確保三臺機器都安裝了docker,並可從私有鏡像倉庫pull鏡像:
            在 ub2-citst001上拉取etcd的鏡像:

 
 
 
 
 
 
 
 
 
 
 
1
docker pull quay.io/coreos/etcd 
 
 
       2. 將鏡像重命名後放到私有倉庫:

 
 
 
 
 
x
 
 
 
 
1
docker tag quay.io/coreos/etcd ub2-citst001.abc.com:5000/quay.io/coreos/etcd
2
docker push ub2-citst001.abc.com:5000/quay.io/coreos/etcd
 
 
       3.分別再centos-k8s001---centos-k8s003上運行如下命令,拉取etcd鏡像:

 
 
 
 
 
x
 
 
 
 
 
1
docker pull ub2-citst001.abc.com:5000/quay.io/coreos/etcd
 
 
       4.啓動並配置etcd images

 
 
 
 
 
x
 
 
 
 
 
1
// centos-k8s001啓動
2
docker run -d --name etcd    -p 2379:2379     -p 2380:2380   -p 4001:4001 --restart=always  --volume=etcd-data:/etcd-data ub2-citst001.abc.com:5000/quay.io/coreos/etcd   /usr/local/bin/etcd     --data-dir=/etcd-data --name etcd1 --initial-advertise-peer-urls http://centos-k8s001:2380 --listen-peer-urls http://0.0.0.0:2380 --advertise-client-urls http://centos-k8s001:2379,http://centos-k8s001:4001 --listen-client-urls http://0.0.0.0:2379 --initial-cluster-state new --initial-cluster-token docker-etcd --initial-cluster etcd1=http://centos-k8s001:2380,etcd2=http://centos-k8s002:2380,etcd3=http://centos-k8s003:2380
 
 

 
 
 
 
 
x
 
 
 
 
 
1
//centos-k8s002啓動
2
docker run -d --name etcd    -p 2379:2379     -p 2380:2380   -p 4001:4001 --restart=always  --volume=etcd-data:/etcd-data ub2-citst001.abc.com:5000/quay.io/coreos/etcd   /usr/local/bin/etcd     --data-dir=/etcd-data --name etcd2 --initial-advertise-peer-urls http://centos-k8s002:2380 --listen-peer-urls http://0.0.0.0:2380 --advertise-client-urls http://centos-k8s002:2379,http://centos-k8s002:4001 --listen-client-urls http://0.0.0.0:2379 --initial-cluster-state new --initial-cluster-token docker-etcd --initial-cluster etcd1=http://centos-k8s001:2380,etcd2=http://centos-k8s002:2380,etcd3=http://centos-k8s003:2380
 
 

 
 
 
 
 
x
 
 
 
 
 
1
// centos-k8s003啓動
2
docker run -d --name etcd    -p 2379:2379     -p 2380:2380   -p 4001:4001 --restart=always --volume=etcd-data:/etcd-data ub2-citst001.abc.com:5000/quay.io/coreos/etcd   /usr/local/bin/etcd     --data-dir=/etcd-data --name etcd3 --initial-advertise-peer-urls http://centos-k8s003:2380 --listen-peer-urls http://0.0.0.0:2380 --advertise-client-urls http://centos-k8s003:2379,http://centos-k8s003:4001 --listen-client-urls http://0.0.0.0:2379 --initial-cluster-state new --initial-cluster-token docker-etcd --initial-cluster etcd1=http://centos-k8s001:2380,etcd2=http://centos-k8s002:2380,etcd3=http://centos-k8s003:2380
 
 
       5.進入任意一個etcd container,查看etcd集羣狀態

 
 
 
 
 
 
 
 
 
 
 
1
docker extc -it <container name or id> /bin/bash
2
// 此時已經進入容器 執行:
3
etcdctl member list
4
// 看到一下信息,表示etcd container 集羣部署成功
5
4cb07e7292111d83: name=etcd1 peerURLs=http://centos-k8s001:2380 clientURLs=http://centos-k8s001:2379,http://centos-k8s001:4001 isLeader=true
6
713da186acaefc5b: name=etcd2 peerURLs=http://centos-k8s002:2380 clientURLs=http://centos-k8s002:2379,http://centos-k8s002:4001 isLeader=false
7
fabaedd18a2da8a7: name=etcd3 peerURLs=http://centos-k8s003:2380 clientURLs=http://centos-k8s003:2379,http://centos-k8s003:4001 isLeader=false
 
 
三. k8s集羣的部署
      ETCD集羣部署完成後,開始部署k8s集羣,集羣由 1master + 3slave組成。
      master : centos-k8s004
      slave:  centos-k8s005, centos-k8s006, centos-k8s007
      集羣所需組件:
        flannel 實現誇主機的容器網絡的通訊
  kube-apiserver 提供kubernetes集羣的API調用
  kube-controller-manager 確保集羣服務
  kube-scheduler 調度容器,分配到Node
  kubelet 在Node節點上按照配置文件中定義的容器規格啓動容器
  kube-proxy 提供網絡代理服務
       

•先決條件

以下操做在上圖4臺機器執行

1.確保系統已經安裝epel-release源

# yum -y install epel-release

2.關閉防火牆服務和selinx,避免與docker容器的防火牆規則衝突。

# systemctl stop firewalld
# systemctl disable firewalld
# setenforce 0

 

•安裝配置Kubernetes Master

以下操做在master上執行

1.使用yum安裝etcd和kubernetes-master

# yum -y install kubernetes-master

2.編輯/etc/kubernetes/apiserver文件


 
 
 
 
 
 
 
 
 
 
 
1
# The address on the local server to listen to.
2
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
3
# The port on the local server to listen on.
4
#KUBE_API_PORT="--port=8080"
5
# Port minions listen on
6
KUBELET_PORT="--kubelet-port=10250"
7
# Comma separated list of nodes in the etcd cluster
8
KUBE_ETCD_SERVERS="--etcd-servers=http://centos-k8s001:2379,http://centos-k8s002:2379,http://centos-k8s003:2379"
9
# Address range to use for services
10
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
11
# default admission control policies
12
#KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"
13
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota"
14
# Add your own!
15
KUBE_API_ARGS=""
 
 

            3.啓動etcd、kube-apiserver、kube-controller-manager、kube-scheduler等服務,並設置開機啓動。

 

 
 
 
 
 
 
 
 
 
 
 
1
for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do systemctl restart $SERVICES;systemctl enable $SERVICES;systemctl status $SERVICES ; done
2
//查看服務運行狀態 使用 systemctl status ,例:
3
systemctl status kube-apiserver
 
 

            4.在 centos-k8s001 的etcd中定義flannel網絡


 
 
 
 
 
 
 
 
 
 
 
1
//若是是容器的方式部署etcd,先執行:
2
docker ps      //找到etcd容器id
3
docker exec -it <容器id> /bin/sh  //進入容器,而後執行下面命令
4
// 若直接在宿主機部署etcd,則直接執行:
5
etcdctl mk /atomic.io/network/config '{"Network":"172.17.0.0/16"}'   //etcd中定義flannel
6
 
        
7
// 在其餘etcd 節點查看flannel 網絡配置:
8
// 如在cento-k8s002上查看:
9
 etcdctl get /atomic.io/network/config
10
// 正確輸出:
11
{"Network":"172.17.0.0/16"} //配置成功
 
 

•安裝配置Kubernetes Node

以下操做在centos-k8s005,6,7上執行

1.使用yum安裝flannel和kubernetes-node

# yum -y install flannel kubernetes-node

2.爲flannel網絡指定etcd服務,修改/etc/sysconfig/flanneld文件

FLANNEL_ETCD="http://centos-k8s001:2379"
FLANNEL_ETCD_KEY="/atomic.io/network"

3.修改/etc/kubernetes/config文件

KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://centos-k8s004:8080"

4.按照以下內容修改對應node的配置文件/etc/kubernetes/kubelet

centos-k8s005:

KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_PORT="--port=10250"
KUBELET_HOSTNAME="--hostname-override=centos-k8s005" #修改爲對應Node的IP
KUBELET_API_SERVER="--api-servers=http://centos-k8s004:8080" #指定Master節點的API Server
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
KUBELET_ARGS=""

centos-k8s006:

KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_PORT="--port=10250"
KUBELET_HOSTNAME="--hostname-override=centos-k8s006" 
KUBELET_API_SERVER="--api-servers=http://centos-k8s004:8080"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
KUBELET_ARGS=""

centos-k8s007:

KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_PORT="--port=10250"
KUBELET_HOSTNAME="--hostname-override=centos-k8s007"
KUBELET_API_SERVER="--api-servers=http://centos-k8s004:8080"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
KUBELET_ARGS=""

5.在全部Node節點上啓動kube-proxy,kubelet,docker,flanneld等服務,並設置開機啓動。

# for SERVICES in kube-proxy kubelet docker flanneld;do systemctl restart $SERVICES;systemctl enable $SERVICES;systemctl status $SERVICES; done

 

•驗證集羣是否安裝成功

在master centos-k8s004上執行以下命令

[root@centos-k8s004 ~]# kubectl get node
NAME            STATUS    AGE
centos-k8s005   Ready     38d
centos-k8s006   Ready     38d
centos-k8s007   Ready     37d
    mysql 主從(k8s+docker 實現)   
      咱們首先須要build mysql master鏡像和slave鏡像:
       1.在ub2-citst001(全部的鏡像都在此處build,pull和管理)的根目錄下建立一個文件夾:mysql-build-file,並建立以下文件,構成一下形式:
        

 
 
 
 
 
x
 
 
 
 
1
`-- mysql-build_file
2
 |-- master
3
 | |-- docker-entrypoint.sh
4
 | |-- Dockerfile
5
 | `-- my.cnf
6
    `-- slave
7
 |-- docker-entrypoint.sh
8
 |-- Dockerfile
9
 `-- my.cnf
10
 
        
11
# master/docker-entrypoint.sh:
12
#!/bin/bash
13
MYSQL="mysql -uroot -proot"
14
sql="CREATE USER '$MYSQL_REPLICATION_USER'@'%' IDENTIFIED BY '$MYSQL_REPLICATION_PASSWORD'"
15
$MYSQL -e "$sql"
16
sql="GRANT REPLICATION SLAVE ON *.* TO '$MYSQL_REPLICATION_USER'@'%' IDENTIFIED BY '$MYSQL_REPLICATION_PASSWORD'"
17
$MYSQL -e "$sql"
18
sql="FLUSH PRIVILEGES"
19
$MYSQL -e "$sql"
20
 
        
21
# master/my.cnf :
22
[mysqld]
23
log-bin = mysql-bin
24
server-id = 1
25
character_set_server=utf8
26
log_bin_trust_function_creators=1
27
skip-name-resolve
28
binlog_format = mixed
29
relay-log = relay-bin
30
relay-log-index = slave-relay-bin.index
31
auto-increment-increment = 2
32
auto-increment-offset = 1
33
 
        
34
# master/Dockerfile:
35
FROM mysql:5.6
36
ENV http_proxy http://child-prc.abc.com:913
37
ENV https_proxy https://child-prc.abc.com:913
38
COPY my.cnf /etc/mysql/mysql.cnf
39
COPY docker-entrypoint.sh /docker-entrypoint-initdb.d/
40
 
        
41
#slave/docker-entrypoint.sh:
42
#!/bin/bash
43
MYSQL="mysql -uroot -proot"
44
MYSQL_MASTER="mysql -uroot -proot -h$MYSQL_MASTER_SERVICE_HOST -P$MASTER_PORT"
45
sql="stop slave"
46
$MYSQL -e "$sql"
47
sql="SHOW MASTER STATUS"
48
result="$($MYSQL_MASTER -e "$sql")"
49
dump_data=/master-condition.log
50
echo -e "$result" > $dump_data
51
var=$(cat /master-condition.log | grep mysql-bin)
52
MASTER_LOG_FILE=$(echo $var | awk '{split($0,arr," ");print arr[1]}')
53
MASTER_LOG_POS=$(echo $var | awk '{split($0,arr," ");print arr[2]}')
54
sql="reset slave"
55
$MYSQL -e "$sql"
56
sql="CHANGE MASTER TO master_host='$MYSQL_MASTER_SERVICE_HOST', master_user='$MYSQL_REPLICATION_USER', master_password='$MYSQL_REPLICATION_PASSWORD', master_log_file='$MASTER_LOG_FILE', master_log_pos=$MASTER_LOG_POS, master_port=$MASTER_PORT"
57
$MYSQL -e "$sql"
58
sql="start slave"
59
$MYSQL -e "$sql"
60
 
        
61
#slave/my.cnf:
62
[mysqld]
63
log-bin = mysql-bin 
64
#server-id 不能必須保證惟一,不能和其餘mysql images衝突
65
server-id = 2
66
character_set_server=utf8
67
log_bin_trust_function_creators=1
68
 
        
69
#slave/Dockerfile:
70
FROM mysql:5.6
71
ENV http_proxy http://child-prc.abc.com:913
72
ENV https_proxy https://child-prc.abc.com:913
73
COPY my.cnf /etc/mysql/mysql.cnf
74
COPY docker-entrypoint.sh /docker-entrypoint-initdb.d/
75
RUN touch master-condition.log && chown -R mysql:mysql /master-condition.log
 
 
    2.build images of Dockerfile

 
 
 
 
 
x
 
 
 
 
 
1
cd /mysql-build_file/master
2
docker build -t ub2-citst001.abc.com:5000/mysql-master .
3
# output 輸出以下說明成功build:
4
#Sending build context to Docker daemon 4.096kB
5
#Step 1/5 : FROM mysql:5.6
6
# ---> a46c2a2722b9
7
#Step 2/5 : ENV http_proxy http://child-prc.abc.com:913
8
# ---> Using cache
9
# ---> 873859820af7
10
#Step 3/5 : ENV https_proxy https://child-prc.abc.com:913
11
# ---> Using cache
12
# ---> b5391bed1bda
13
#Step 4/5 : COPY my.cnf /etc/mysql/mysql.cnf
14
# ---> Using cache
15
# ---> ccbdced047a3
16
#Step 5/5 : COPY docker-entrypoint.sh /docker-entrypoint-initdb.d/
17
# ---> Using cache
18
# ---> 81cfad9f0268
19
#Successfully built 81cfad9f0268
20
#Successfully tagged ub2-citst001.sh.abc.com:5000/mysql-master
21
cd /mysql-build_file/slave
22
docker build -t ub2-citst001.abc.com:5000/mysql-slave .
23
 
        
24
# 查看images
25
docker images
26
 
        
27
# 將images放到私有鏡像倉庫:
28
docker push ub2-citst001.abc.com:5000/mysql-slave
29
docker push ub2-citst001.abc.com:5000/mysql-master
 
 
    3. 在centos-k8s006 centos-k8s007上部署mysql cat

 
 
 
 
 
x
 
 
 
 
1
# centos-k8s004(k8s master)上操做:
2
#根目錄建立一個文件夾:file_for_k8s 用於存放yaml文件或
3
mkdir -p /file_for_k8s/MyCat
4
cd /file_for_k8s/MyCat/
5
mkdir master slave
6
cd master
7
#建立配置mysql-master.yaml文件
8
touch mysql-master.yaml
9
 
        
10
#內容以下:
11
apiVersion: extensions/v1beta1
12
kind: Deployment
13
metadata:
14
 name: mysql-master
15
spec:
16
 replicas: 1
17
 selector:
18
 matchLabels:
19
 app: mysql-master
20
 release: stabel
21
 template:
22
 metadata:
23
 labels:
24
 name: mysql-master
25
 app: mysql-master
26
 release: stabel
27
 spec:
28
 containers:
29
 - name: mysql-master
30
 image: ub2-citst001.abc.com:5000/mysql-master
31
 volumeMounts:
32
 - name: mysql-config
33
 mountPath: /usr/data
34
 env:
35
 - name: MYSQL_ROOT_PASSWORD
36
 value: "root"
37
 - name: MYSQL_REPLICATION_USER
38
 value: "slave"
39
 - name: MYSQL_REPLICATION_PASSWORD
40
 value: "slave"
41
 ports:
42
 - containerPort: 3306
43
          #hostPort: 4000
44
 name: mysql-master
45
 volumes:
46
 - name: mysql-config
47
 hostPath:
48
 path: /localdisk/NFS/mysqlData/master/
49
 nodeSelector:
50
 kubernetes.io/hostname: centos-k8s006
51
 
        
52
 
        
53
----------------------------------------------------------end-----------------------------------------------------------------
54
 
        
55
#建立mysql-slave-service.yaml
56
touch mysql-slave-service.yaml
57
#內容以下:
58
apiVersion: v1
59
kind: Service
60
metadata:
61
 name: mysql-master
62
 namespace: default
63
spec:
64
 type: NodePort
65
 selector:
66
 app: mysql-master
67
 release: stabel
68
 ports:
69
 - name: http
70
 port: 3306
71
 nodePort: 31306
72
 targetPort: 3306
73
--------------------------------------------------------------end---------------------------------------------------------------------
74
 
        
75
cd ../slave/
76
#建立配置mysql-slave.yaml文件
77
touch mysql-slave.yaml
78
#內容以下:
79
apiVersion: extensions/v1beta1
80
kind: Deployment
81
metadata:
82
 name: mysql-slave
83
spec:
84
 replicas: 1
85
 selector:
86
 matchLabels:
87
 app: mysql-slave
88
 release: stabel
89
 template:
90
 metadata:
91
 labels:
92
 app: mysql-slave
93
 name: mysql-slave
94
 release: stabel
95
 spec:
96
 containers:
97
 - name: mysql-slave
98
 image: ub2-citst001.abc.com:5000/mysql-slave
99
 volumeMounts:
100
 - name: mysql-config
101
 mountPath: /usr/data
102
 env:
103
 - name: MYSQL_ROOT_PASSWORD
104
 value: "root"
105
 - name: MYSQL_REPLICATION_USER
106
 value: "slave"
107
 - name: MYSQL_REPLICATION_PASSWORD
108
 value: "slave"
109
 - name: MYSQL_MASTER_SERVICE_HOST
110
 value: "mysql-master"
111
 - name: MASTER_PORT
112
 value: "3306"
113
 ports:
114
 - containerPort: 3306
115
 name: mysql-slave
116
 volumes:
117
 - name: mysql-config
118
 hostPath:
119
 path: /localdisk/NFS/mysqlData/slave/
120
 nodeSelector:
121
 kubernetes.io/hostname: centos-k8s007
122
 
        
123
-----------------------------------------------------------------------end-------------------------------------------------------------------
124
#建立mysql-slave-service.yaml
125
touch mysql-slave-service.yaml
126
#內容以下:
127
apiVersion: v1
128
kind: Service
129
metadata:
130
 name: mysql-slave
131
 namespace: default
132
spec:
133
 type: NodePort
134
 selector:
135
 app: mysql-slave
136
 release: stabel
137
 ports:
138
 - name: http
139
 port: 3306
140
 nodePort: 31307
141
 targetPort: 3306
142
-----------------------------------------------------------------------end-----------------------------------------------------------------
143
 
        
144
#建立mycay實例:
145
cd ../master/
146
kubectl create -f mysql-master.yaml
147
kubectl create -f mysql-master-service.yaml
148
cd ../slave/
149
kubectl create -f mysql-slave.yaml
150
kubectl create -f mysql-slave-service.yaml
151
 
        
152
# 查看deployment建立狀態,centos-k8s004上執行
153
[root@centos-k8s004 slave]# kubectl get deployment
154
NAME           DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
155
mysql-master   1         1         1            1           39d3
156
mysql-slave    1         1         1            1           39d
157
# 查看service建立狀態:
158
[root@centos-k8s004 slave]# kubectl get svc
159
NAME           CLUSTER-IP        EXTERNAL-IP   PORT(S)          AGE
160
kubernetes     192.168.0.1       <none>        443/TCP          5d
161
mysql-master   192.168.45.209    <nodes>       3306:31306/TCP   5h
162
mysql-slave    192.168.230.192   <nodes>       3306:31307/TCP   5h
163
# AVAILABLE的值可能須要2~15s的時間才能與DESIRED的值同步,啓動pod須要時間。若是長時間仍是不一樣步或爲0,可用一下命令查看詳細狀態:
164
[root@centos-k8s004 master]# kubectl describe pod
165
Name: mysql-master-4291032429-0fzsr
166
Namespace: default
167
Node: centos-k8s006/10.239.219.210
168
Start Time: Wed, 31 Oct 2018 18:56:06 +0800
169
Labels: name=mysql-master
170
                pod-template-hash=4291032429
171
Status: Running
172
IP: 172.17.44.2
173
Controllers: ReplicaSet/mysql-master-4291032429
174
Containers:
175
 master:
176
 Container ID: docker://674de0971fe2aa16c7926f345d8e8b2386278b14dedd826653e7347559737e28
177
 Image: ub2-citst001.abc.com:5000/mysql-master
178
 Image ID: docker-pullable://ub2-citst001.abc.com:5000/mysql-master@sha256:bc286c1374a3a5f18ae56bd785a771ffe0fad15567d56f8f67a615c606fb4e0d
179
 Port: 3306/TCP
180
 State: Running
181
 Started: Wed, 31 Oct 2018 18:56:07 +0800
182
 Ready: True
183
 Restart Count: 0
184
 Volume Mounts:
185
      /usr/data from mysql-config (rw)
186
 Environment Variables:
187
 MYSQL_ROOT_PASSWORD: root
188
 MYSQL_REPLICATION_USER: slave
189
 MYSQL_REPLICATION_PASSWORD: slave
190
Conditions:
191
  Type          Status
192
  Initialized   True
193
  Ready         True
194
  PodScheduled  True
195
Volumes:
196
 mysql-config:
197
 Type: HostPath (bare host directory volume)
198
 Path: /localdisk/NFS/mysqlData/master/
199
QoS Class: BestEffort
200
Tolerations: <none>
201
No events.
202
 
        
203
 
        
204
Name: mysql-slave-3654103728-0sxsm
205
Namespace: default
206
Node: centos-k8s007/10.239.219.209
207
Start Time: Wed, 31 Oct 2018 18:56:19 +0800
208
Labels: name=mysql-slave
209
                pod-template-hash=3654103728
210
Status: Running
211
IP: 172.17.16.2
212
Controllers: ReplicaSet/mysql-slave-3654103728
213
Containers:
214
 slave:
215
 Container ID: docker://d52f4f1e57d6fa6a7c04f1a9ba63fa3f0af778df69a3190c4f35f755f225fb50
216
 Image: ub2-citst001.abc.com:5000/mysql-slave
217
 Image ID: docker-pullable://ub2-citst001.abc.com:5000/mysql-slave@sha256:6a1c7cbb27184b966d2557bf53860daa439b7afda3d4aa5498844d4e66f38f47
218
 Port: 3306/TCP
219
 State: Running
220
 Started: Fri, 02 Nov 2018 13:49:48 +0800
221
 Last State: Terminated
222
 Reason: Completed
223
 Exit Code: 0
224
 Started: Wed, 31 Oct 2018 18:56:20 +0800
225
 Finished: Fri, 02 Nov 2018 13:49:47 +0800
226
 Ready: True
227
 Restart Count: 1
228
 Volume Mounts:
229
      /usr/data from mysql-config (rw)
230
 Environment Variables:
231
 MYSQL_ROOT_PASSWORD: root
232
 MYSQL_REPLICATION_USER: slave
233
 MYSQL_REPLICATION_PASSWORD: slave
234
 MYSQL_MASTER_SERVICE_HOST: centos-k8s006
235
 MASTER_PORT: 4000
236
Conditions:
237
  Type          Status
238
  Initialized   True
239
  Ready         True
240
  PodScheduled  True
241
Volumes:
242
 mysql-config:
243
 Type: HostPath (bare host directory volume)
244
 Path: /localdisk/NFS/mysqlData/slave/
245
QoS Class: BestEffort
246
Tolerations: <none>
247
No events.
248
 
        
249
# 若是出現以下錯誤,請按照下面方法解決:
250
Error syncing pod, skipping: failed to "StartContainer" for "POD" with ErrImagePull: "image pull failede:latest, this may be because there are no credentials on this request. details: (open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory)"
251
#解決方法
252
問題是比較明顯的,就是沒有/etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt文件,用ls -l查看以後發現是一個軟連接,連接到/etc/rhsm/ca/redhat-uep.pem,可是這個文件不存在,使用yum search *rhsm*命令:
253
安裝python-rhsm-certificates包:
254
[root@centos-k8s004 master]# yum install python-rhsm-certificates -y
255
這裏又出現問題了:
256
python-rhsm-certificates <= 1.20.3-1 被 (已安裝) subscription-manager-rhsm-certificates-1.20.11-1.el7.centos.x86_64 取代
257
那麼怎麼辦呢,咱們直接卸載掉subscription-manager-rhsm-certificates包,使用yum remove subscription-manager-rhsm-certificates -y命令,而後下載python-rhsm-certificates包:
258
# wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm
259
而後手動安裝該rpm包:
260
# rpm -ivh python-rhsm-certificates
261
這時發現/etc/rhsm/ca/redhat-uep.pem文件已存在
262
在node執行:
263
yum install *rhsm* -y
264
這時將/etc/docker/seccomp.json刪除,再次重啓便可,並執行:
265
#docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest
266
這時將以前建立的rc、svc和pod所有刪除從新建立,過一會就會發現pod啓動成功
267
 
        
268
# 在centos-k8s006查看docker container,說明成功建立mysql-master實例,查看mysql-slave狀態同理
269
[root@centos-k8s006 master]# docker ps
270
674de0971fe2        ub2-citst001.abc.com:5000/mysql-master                   "docker-entrypoint..."   5 weeks ago         Up 5 weeks                                   k8s_master.1fa78e47_mysql-master-4291032429-0fzsr_default_914f7535-dcfb-11e8-9eb8-005056a654f2_3462901b
271
220e4d37915d        registry.access.redhat.com/rhel7/pod-infrastructure:latest    "/usr/bin/pod"           5 weeks ago         Up 5 weeks          0.0.0.0:4000->3306/tcp   k8s_POD.62220e6f_mysql-master-4291032429-0fzsr_default_914f7535-dcfb-11e8-9eb8-005056a654f2_d0d62756
272
 
        
273
# 此時經過kubectl就可管理contianer
274
[root@centos-k8s006 master]# kubectl exec -it mysql-master-4291032429-0fzsr /bin/bash
275
root@mysql-master-4291032429-0fzsr:/#
276
# 在master建立一個數據庫,看是否會同步到slave
277
root@mysql-master-4291032429-0fzsr:/# mysql -u root -p root
278
mysql>create database test_database charsetr='utf8';
279
mysql>show databases;
280
+--------------------+
281
| Database           |
282
+--------------------+
283
| information_schema |
284
| test_database             |
285
| mysql              |
286
| performance_schema |
287
+--------------------+
288
# 退出容器:
289
Ctrl + p && Ctrl + q
290
# 進入mysql-slave查看數據庫:
291
[root@centos-k8s006 master]# kubectl exec -it mysql-slave-3654103728-0sxsm /bin/bash
292
root@mysql-slave-3654103728-0sxsm:/#mysql -u root -p root
293
mysql> show databases;
294
+--------------------+
295
| Database           |
296
+--------------------+
297
| information_schema |           |
298
| mysql              |
299
| performance_schema |
300
| test_database      |
301
+--------------------+
302
# 能夠看出,同步成功!
 
 
五. webservice部署.
       1.在有docker環境的機器上新建一個文件夾,進入後分別建立 :
               requirements.txt (環境依賴的python包列表) :

 
 
 
 
 
 
 
 ~~~~~~~~~~~~~
django
 
 
 
42
uWSGI
~~~~~~~~~~~~~~~~
 
 
                pip.conf(第三方pip源,用來網絡加速)

 
 
 
 
 
 
 
 
 
 
 
1
[global]
2
timeout = 60
3
index-url = http://pypi.douban.com/simple
4
trusted-host = pypi.douban.com
 
 
start_script.sh(啓動文件)

 
 
 
 
 
 
 
 
 
 
 
1
#!/bin/bash
2
touch /root/www2/oss2/log/touchforlogrotate
3
4
uwsgi --ini /root/uwsgi.ini
5
tail -f /dev/null
 
 
uwsgi.ini(uwsgi配置)

 
 
 
 
 
 
 
 
 
 
 
1
[uwsgi]
2
socket=0.0.0.0:8001
3
chdir=/root/www2/oss2/
4
master=true
5
processes=4
6
threads=2
7
module=oss2.wsgi
8
touch-logreopen = /root/www2/oss2/log/touchforlogrotate
9
daemonize = /root/www2/oss2/log/log.log
10
wsgi-file =/root/www2/oss2/website/wsgi.py
11
py-autoreload=1
 
 
  Dockerfile

 
 
 
 
 
x
 
 
 
 
 
1
FROM centos
2
 
        
3
MAINTAINER by miaohenx
4
 
        
5
ENV http_proxy http://child-prc.abc.com:913/
6
ENV https_proxy https://child-prc.abc.com:913/
7
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup && curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo && yum makecache && yum -y install epel-release zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make openldap-devel && curl -O https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tar.xz && tar -xvJf  Python-3.6.6.tar.xz && cd Python-3.6.6 && ./configure prefix=/usr/local/python3 && make && make install && ln -s /usr/local/python3/bin/python3 /usr/bin/python3.6 && ln -s /usr/local/python3/bin/python3 /usr/bin/python3 && cd .. &&  rm -rf Python-3.6.*
8
RUN yum -y install python36-devel python36-setuptools && easy_install-3.6 pip && mkdir /root/.pip
9
COPY 1.txt /root/
10
COPY uwsgi.ini /root/
11
COPY www2 /root/www2/
12
COPY start_script.sh /root/
13
COPY pip.conf /root/.pip/
14
RUN pip3 install -r /root/1.txt && chmod +x /root/start_script.sh
15
EXPOSE 8000
16
ENTRYPOINT ["/root/start_script.sh"]
 
 
在當前目錄建立文件夾:www2,進入後將oss2 code放入www2下
回到Dockerfile文件所在目錄,執行:
<wiz_code_mirror>
 
 
 
 
 
 
 
 
 
 
 
1
docker build -t oss-server .          #注意末尾的.
 
 
 等待幾分鐘,image便會build成功,查看images:
<wiz_code_mirror>
 
 
 
 
 
 
 
 
 
 
 
1
docker images
 
 
6、haproxy+keepalived部署
        Nginx、LVS、HAProxy 負載均衡軟件的優缺點:
<wiz_code_mirror>
 
 
 
 
 
 
 
 
 
 
 
1
1、Nginx的優勢是:
2
1)工做在網絡的7層之上,能夠針對 http 應用作一些分流的策略,好比針對域名、目錄結構,它的正則規則比 HAProxy 更爲強大和靈活,這也是它目前普遍流
3
行的主要緣由之一, Nginx 單憑這點可利用的場合就遠多於 LVS 了。
4
2 Nginx 對網絡穩定性的依賴很是小,理論上能 ping 通就就能進行負載功能,這個也是它的優點之一;相反 LVS 對網絡穩定性依賴比較大;
5
3 Nginx 安裝和配置比較簡單,測試起來比較方便,它基本能把錯誤用日誌打印出來。 LVS 的配置、測試就要花比較長的時間了, LVS 對網絡依賴比較大。
6
4)能夠承擔高負載壓力且穩定,在硬件不差的狀況下通常能支撐幾萬次的併發量,負載度比 LVS 相對小些。
7
5 Nginx 能夠經過端口檢測到服務器內部的故障,好比根據服務器處理網頁返回的狀態碼、超時等等,而且會把返回錯誤的請求從新提交到另外一個節點,不過其中缺點就是不支持url來檢測。
8
好比用戶正在上傳一個文件,而處理該上傳的節點恰好在上傳過程當中出現故障, Nginx 會把上傳切到另外一臺服務器從新處 理,而LVS就直接斷掉了,若是是上傳一個很大的文件或者很重要的文
9
件的話,用戶可能會所以而不滿。
10
6)Nginx 不只僅是一款優秀的負載均衡器/反向代理軟件,它同時也是功能強大的 Web 應用服務器。 LNMP 也是近幾年很是流行的 web 架構,在高流量的環境中穩定性也很好。
11
7)Nginx 如今做爲 Web 反向加速緩存愈來愈成熟了,速度比傳統的 Squid 服務器更快,能夠考慮用其做爲反向代理加速器。
12
8)Nginx 可做爲中層反向代理使用,這一層面 Nginx 基本上無對手,惟一能夠對比 Nginx 的就只有 lighttpd 了,不過 lighttpd 目前尚未作到 Nginx 徹底的功能,配置也不那麼清晰易讀,
13
社區資料也遠遠沒 Nginx 活躍。
14
9 Nginx 也可做爲靜態網頁和圖片服務器,這方面的性能也無對手。還有 Nginx社區很是活躍,第三方模塊也不少。
15
 
        
16
Nginx 的缺點是:
17
1)Nginx 僅能支持 http、 https  Email 協議,這樣就在適用範圍上面小些,這個是它的缺點。
18
2)對後端服務器的健康檢查,只支持經過端口來檢測,不支持經過 url 來檢測。不支持 Session 的直接保持,但能經過 ip_hash 來解決。
19
 
        
20
2、LVS:使用 Linux 內核集羣實現一個高性能、 高可用的負載均衡服務器,它具備很好的可伸縮性( Scalability)、可靠性( Reliability)和可管理性(Manageability)
21
LVS 的優勢是:
22
1)抗負載能力強、是工做在網絡 4 層之上僅做分發之用, 沒有流量的產生,這個特色也決定了它在負載均衡軟件裏的性能最強的,對內存和 cpu 資源消耗比較低。
23
2)配置性比較低,這是一個缺點也是一個優勢,由於沒有可太多配置的東西,因此並不須要太多接觸,大大減小了人爲出錯的概率。
24
3)工做穩定,由於其自己抗負載能力很強,自身有完整的雙機熱備方案,如LVS+Keepalived,不過咱們在項目實施中用得最多的仍是 LVS/DR+Keepalived。
25
4)無流量, LVS 只分發請求,而流量並不從它自己出去,這點保證了均衡器 IO的性能不會收到大流量的影響。
26
5)應用範圍比較廣,由於 LVS 工做在 4 層,因此它幾乎能夠對全部應用作負載均衡,包括 http、數據庫、在線聊天室等等。
27
 
        
28
LVS 的缺點是:
29
1)軟件自己不支持正則表達式處理,不能作動靜分離;而如今許多網站在這方面都有較強的需求,這個是 Nginx/HAProxy+Keepalived 的優點所在。
30
2)若是是網站應用比較龐大的話, LVS/DR+Keepalived 實施起來就比較複雜了,特別後面有 Windows Server 的機器的話,若是實施及配置還有維護過程就比較複雜了,相對而言,
31
Nginx/HAProxy+Keepalived 就簡單多了。
32
 
        
33
3、HAProxy 的特色是:
34
1)HAProxy 也是支持虛擬主機的。
35
2)HAProxy 的優勢可以補充 Nginx 的一些缺點,好比支持 Session 的保持,Cookie的引導;同時支持經過獲取指定的 url 來檢測後端服務器的狀態。
36
3)HAProxy  LVS 相似,自己就只是一款負載均衡軟件;單純從效率上來說HAProxy 會比 Nginx 有更出色的負載均衡速度,在併發處理上也是優於 Nginx 的。
37
4)HAProxy 支持 TCP 協議的負載均衡轉發,能夠對 MySQL 讀進行負載均衡,對後端的 MySQL 節點進行檢測和負載均衡,你們能夠用 LVS+Keepalived  MySQL主從作負載均衡。
38
5)HAProxy 負載均衡策略很是多, HAProxy 的負載均衡算法如今具體有以下8種:
39
1> roundrobin,表示簡單的輪詢,這個很少說,這個是負載均衡基本都具有的;
40
2> static-rr,表示根據權重,建議關注;
41
3> leastconn,表示最少鏈接者先處理,建議關注;
42
4> source,表示根據請求源 IP,這個跟 Nginx  IP_hash 機制相似,咱們用其做爲解決 session 問題的一種方法,建議關注;
43
5> ri,表示根據請求的 URI;
44
6> rl_param,表示根據請求的 URl 參數’balance url_param’ requires an URLparameter name;
45
7> hdr(name),表示根據 HTTP 請求頭來鎖定每一次 HTTP 請求;
46
8> rdp-cookie(name),表示根據據 cookie(name)來鎖定並哈希每一次 TCP 請求。
 
 
keepalived主主模式部署:
       在centos-k8s001上進行以下操做:
<wiz_code_mirror>
 
 
 
 
 
 
 
 
 
 
 
1
yum install -y haproxy keepalived     # 安裝haproxy keepalived
2
vim /etc/keepalived/keepalived.conf   # 配置keepalived,替換爲如下內容
3
 
        
4
 
        
5
! Configuration File for keepalived
6
 
        
7
global_defs {
8
   notification_email {         #定義收件人郵箱
9
     root@localhost
10
   }
11
   notification_email_from root@localhost      #定義發件人郵箱
12
   smtp_server 127.0.0.1                              #定義郵件服務器地址
13
   smtp_connect_timeout 30                         #定有郵件服務器鏈接超時時長爲30秒
14
   router_id LVS_DEVEL                                 #運行keepalive的機器的標識
15
}
16
 
        
17
vrrp_instance VI_1 {                      #定義VRRP實例,實例名自定義
18
    state MASTER                             #指定當前節點的角色,master爲主,backup爲從
19
    interface ens160                             #直接HA監測的接口
20
    virtual_router_id 51                    #虛擬路由標識,在同一VRRP實例中,主備服務器ID必須同樣
21
    priority 100                                 #定義節點優先級,數字越大越優先,主服務器優先級高於從服務器
22
    advert_int 1                                #設置主備之間永不檢查時間間隔,單位爲秒
23
    authentication {                          #設置主從之間驗證類型和密碼
24
        auth_type PASS
25
        auth_pass a23c7f32dfb519d6a5dc67a4b2ff8f5e
26
 
        
27
    }
28
    virtual_ipaddress {
29
        10.239.219.157                      #定義虛擬ip地址
30
    }
31
}
32
 
        
33
vrrp_instance VI_2 {
34
    state BACKUP
35
    interface ens160
36
    virtual_router_id 52
37
    priority 99
38
    advert_int 1
39
    authentication {
40
        auth_type PASS
41
        auth_pass 56f7663077966379d4106e8ee30eb1a5
42
 
        
43
    }
44
    virtual_ipaddress {
45
        10.239.219.156
46
    }
47
}
48
 
        
 
 
    將keepalived.conf同步到centos-k8s002,並修改成如下內容
<wiz_code_mirror>
 
 
 
 
 
 
 
 
 
 
 
1
! Configuration File for keepalived
2
global_defs {
3
   notification_email {        #定義收件人郵箱
4
     root@localhost
5
   }
6
   notification_email_from root@localhost     #定義發件人郵箱
7
   smtp_server 127.0.0.1                      #定義郵件服務器地址
8
   smtp_connect_timeout 30                    #定有郵件服務器鏈接超時時長爲30秒
9
   router_id LVS_DEVEL                        #運行keepalive的機器的標識
10
}
11
 
        
12
vrrp_instance VI_1 {                          #定義VRRP實例,實例名自定義
13
    state BACKUP                                #指定當前節點的角色,master爲主,backup爲從
14
    interface ens160                             #直接HA監測的接口
15
    virtual_router_id 51                            #虛擬路由標識,在同一VRRP實例中,主備服務器ID必須同樣
16
    priority 99                                        #定義節點優先級,數字越大越優先,主服務器優先級高於從服務器
17
    advert_int 1                                           #設置主備之間永不檢查時間間隔,單位爲秒
18
    authentication {                                        #設置主從之間驗證類型和密碼
19
        auth_type PASS
20
        auth_pass a23c7f32dfb519d6a5dc67a4b2ff8f5e
21
 
        
22
    }
23
    virtual_ipaddress {
24
        10.239.219.157                            #定義虛擬ip地址
25
    }
26
}
27
 
        
28
vrrp_instance VI_2 {
29
    state MASTER
30
    interface ens160
31
    virtual_router_id 52
32
    priority 100
33
    advert_int 1
34
    authentication {
35
        auth_type PASS
36
        auth_pass 56f7663077966379d4106e8ee30eb1a5
37
 
        
38
    }
39
    virtual_ipaddress {
40
        10.239.219.156
41
    }
42
}
 
 
 
        在cento-k8s002&centos-k8s001修改/etc/haproxy/haproxy.cfg,替換爲如下內容:
<wiz_code_mirror>
 
 
 
 
 
x
 
 
 
 
1
global                   #定義全局配置段
2
    # to have these messages end up in /var/log/haproxy.log you will
3
    # need to:
4
    #
5
    # 1) configure syslog to accept network log events. This is done
6
    # by adding the '-r' option to the SYSLOGD_OPTIONS in
7
    # /etc/sysconfig/syslog
8
    #
9
    # 2) configure local2 events to go to the /var/log/haproxy.log
10
    # file. A line like the following can be added to
11
    # /etc/sysconfig/syslog
12
    #
13
    # local2.* /var/log/haproxy.log
14
    #
15
    log         127.0.0.1 local2          #經過rsyslog將日誌進行歸檔記錄,在/etc/rsyslog.conf配置文件中,添加‘local2.* /var/log/haproxy',而且啓用$ModLoad imudp,$UDPServerRun 514,$ModLoad imtcp,$InputTCPServerRun 514 此四項功能,最後重啓rsyslog進程。
16
    chroot      /var/lib/haproxy          #指定haproxy進程工做的目錄
17
    pidfile     /var/run/haproxy.pid      #指定pid文件
18
    maxconn     4000                      #最大併發鏈接數
19
    user        haproxy                   #運行haproxy的用戶
20
    group       haproxy                   #運行haproxy的組
21
    daemon                                #以守護進程的形式運行,即後臺運行
22
 
        
23
    # turn on stats unix socket
24
    stats socket /var/lib/haproxy/stats
25
 
        
26
#---------------------------------------------------------------------
27
# common defaults that all the 'listen' and 'backend' sections will
28
# use if not designated in their block
29
#---------------------------------------------------------------------
30
defaults                                                #默認配置端
31
    mode                   http                         #工做模式,源碼包編譯默認爲tcp
32
    log                       global                    #記錄全局日誌
33
    option                  httplog                     #詳細記錄http日誌
34
    option                  dontlognull                 #不記錄健康檢測的日誌信息
35
    option http-server-close                            #啓用服務器端主動關閉功能
36
    option forwardfor       except 127.0.0.0/8          #傳遞client端IP至後端real server
37
    option                  redispatch                  #基於cookie作會話保持時,後端對應存放session的服務器出現故障時,會話會被重定向至別的服務器
38
    retries                 3                           #請求重傳次數
39
    timeout http-request    10s                         #斷開客戶端鏈接的時長
40
    timeout queue           1m                          #一個請求在隊列裏的超時時長
41
    timeout connect         10s                         #設定在haproxy轉發至後端upstream server時等待的超時時長
42
    timeout client          1m                          #client的一次非活動狀態的超時時長
43
    timeout server          1m                          #等待服務器端的非活動的超時時長
44
    timeout http-keep-alive 10s                         #持久鏈接超時時長
45
    timeout check           10s                         #檢查請求鏈接的超時時長
46
    maxconn                 3000                        #最大鏈接數
47
 
        
48
#---------------------------------------------------------------------
49
# main frontend which proxys to the backends
50
#---------------------------------------------------------------------
51
frontend  webserver *:8000                    # OSS server
52
    acl url_static       path_beg       -i /static /images /javascript /stylesheets       #匹配path以/static,/images開始的,且不區分大小寫
53
    acl url_static       path_end       -i .jpg .gif .png .css .js .html
54
    acl url_static       hdr_beg(host)  -i img. video. download. ftp. imgs. image.
55
 
        
56
    acl url_dynamic      path_end       .php .jsp
57
 
        
58
    use_backend static          if url_static           #知足名爲url_static這條acl規則,則將請求轉發至後端名爲static的real server組中去
59
    use_backend dynamic         if url_dynamic
60
    default_backend             dynamic                  #若是上面全部acl規則都不知足,將請求轉發到dynamic組中
61
 
        
62
#---------------------------------------------------------------------
63
# static backend for serving up images, stylesheets and such
64
#---------------------------------------------------------------------
65
backend static                              #定義後端real server組,組名爲static
66
    balance     roundrobin                  #支持動態權重修改,支持慢啓動
67
    server      static_1 centos-k8s005:8000 check inter 3000 fall 3 rise 1 maxconn 30000
68
    server      static_2 centos-k8s006:8000 check inter 3000 fall 3 rise 1 maxconn 30000
69
    server      static_3 centos-k8s007:8000 check inter 3000 fall 3 rise 1 maxconn 30000
70
# server static_Error :8080 backup check #當此組中的全部server所有不能提供服務,纔將請求調度至此server上
71
#---------------------------------------------------------------------
72
# round robin balancing between the various backends
73
#---------------------------------------------------------------------
74
 
        
75
 
        
76
backend dynamic
77
    cookie cookie_name insert nocache   #使用cookie實現session綁定,且不記錄緩存
78
    balance     roundrobin
79
    server  dynamic1 centos-k8s005:8000 check inter 3000 fall 3 rise 1 maxconn 1000 cookie dynamic1
80
    server  dynamic2 centos-k8s006:8000 check inter 3000 fall 3 rise 1 maxconn 1000 cookie dynamic2
81
    server  dynamic3 centos-k8s007:8000 check inter 3000 fall 3 rise 1 maxconn 1000 cookie dynamic3 #定義dynamic組中的server,將此server命名爲dynamic2,每隔3000ms檢測一個健康狀態,若是檢測3次都失敗,將此server剔除。在離線的狀態下,只要檢測1次成功,就讓其上線,此server支持最大的併發鏈接數爲1000,cookie的值爲dynamic2
82
 
        
83
frontend  kibana *:5602                 #Kibana
84
    acl url_static       path_beg       -i /static /images /javascript /stylesheets       #匹配path以/static,/images開始的,且不區分大小寫
85
    acl url_static       path_end       -i .jpg .gif .png .css .js .html
86
    acl url_static       hdr_beg(host)  -i img. video. download. ftp. imgs. image.
87
 
        
88
    acl url_dynamic      path_end       .php .jsp
89
 
        
90
    use_backend static2          if url_static           #知足名爲url_static這條acl規則,則將請求轉發至後端名爲static的real server組中去
91
    use_backend dynamic2         if url_dynamic
92
    default_backend             dynamic2                  #若是上面全部acl規則都不知足,將請求轉發到dynamic組中
93
 
        
94
#---------------------------------------------------------------------
95
# static backend for serving up images, stylesheets and such
96
#---------------------------------------------------------------------
97
backend static2                              #定義後端real server組,組名爲static
98
    balance     roundrobin                  #支持動態權重修改,支持慢啓動
99
    server      static_1 centos-k8s003:5602 check inter 3000 fall 3 rise 1 maxconn 30000
100
#---------------------------------------------------------------------
101
# round robin balancing between the various backends
102
#---------------------------------------------------------------------
103
 
        
104
 
        
105
backend dynamic2
106
    cookie cookie_name insert nocache   #使用cookie實現session綁定,且不記錄緩存
107
    balance     roundrobin
108
    server  dynamic1 centos-k8s003:5602 check inter 3000 fall 3 rise 1 maxconn 1000 cookie dynamic1
109
 
        
110
 
        
111
frontend  kibana *:8080               # kubernetes-dashboard
112
    acl url_static       path_beg       -i /static /images /javascript /stylesheets       #匹配path以/static,/images開始的,且不區分大小寫
113
    acl url_static       path_end       -i .jpg .gif .png .css .js .html
114
    acl url_static       hdr_beg(host)  -i img. video. download. ftp. imgs. image.
115
 
        
116
    acl url_dynamic      path_end       .php .jsp
117
 
        
118
    use_backend static3          if url_static           #知足名爲url_static這條acl規則,則將請求轉發至後端名爲static的real server組中去
119
    use_backend dynamic3         if url_dynamic
120
    default_backend             dynamic3                  #若是上面全部acl規則都不知足,將請求轉發到dynamic組中
121
 
        
122
#---------------------------------------------------------------------
123
# static backend for serving up images, stylesheets and such
124
#---------------------------------------------------------------------
125
backend static3                              #定義後端real server組,組名爲static
126
    balance     roundrobin                  #支持動態權重修改,支持慢啓動
127
    server      static_1 centos-k8s004:8080 check inter 3000 fall 3 rise 1 maxconn 30000
128
#---------------------------------------------------------------------
129
# round robin balancing between the various backends
130
#---------------------------------------------------------------------
131
 
        
132
 
        
133
backend dynamic3
134
    cookie cookie_name insert nocache   #使用cookie實現session綁定,且不記錄緩存
135
    balance     roundrobin
136
    server  dynamic1 centos-k8s004:8080 check inter 3000 fall 3 rise 1 maxconn 1000 cookie dynamic1
137
 
        
138
 
        
139
 
        
140
listen state                                            # 使用單獨輸出,不須要frontedn調用:定義haproxy的狀態統計頁面
141
    bind *:8001                                         # 監聽的地址
142
    mode http                                           # http 7層工做模式:對應用層數據作深刻分析,所以支持7層的過濾、處理、轉換等機制
143
    stats enable                                        # 開啓統計頁面輸出
144
    stats hide-version                                  # 隱藏狀態頁面版本號
145
    stats uri /haproxyadmin?stats                       # 指定狀態頁的訪問路徑
146
    stats auth admin:root                              # 基於用戶名,密碼驗證。
147
    stats admin if TRUE                                 # 驗證經過時運行登陸。
148
    acl num1 src 10.239.0.0/16                       # 定義源地址爲10.239.0.0/16網段的acl規則,將其命名爲num1
149
    tcp-request content accept if num1                  # 若是知足此規則,則容許訪問
150
    tcp-request content reject                          # 拒絕其餘全部的訪問
 
 
      說明:haproxy監聽3個端口:
                8000 ------  OSS server             5602 ------ kibana              8080 ------  kubernetes-dashboard
     在centos-k8s001,centos-k8s002上分別執行以下命令:
<wiz_code_mirror>
 
 
 
 
 
 
 
 
 
 
 
1
systemctl enabel haproxy keepalived     #haproxy和keepalived開機自啓動
2
systemctl restart haproxy keepaliced    # haproxy和keepalived從新啓動
 
 
7、mysql天天自動備份最近七天數據
        1.centos-k8s007擁有200G SSD,所以將mysql數據備份於此,路徑: /localdisk/mysql_backup
            接下來就是須要一個自動備份的腳本:mysqlbackup.sh,內容以下:
<wiz_code_mirror>
 
 
 
 
 
x
 
 
 
 
 
1
#!/bin/bash
2
#設置mysql備份目錄
3
folder=/localdisk/mysql_backup
4
cd $folder
5
day=`date +%Y%m%d`
6
rm -rf $day
7
mkdir $day
8
cd $day
9
#要備份的數據庫地址
10
host=xxxxxx.abc.com
11
#數據庫端口
12
port=3306
13
#用戶名
14
user=xxxxxxxx
15
#密碼
16
password=xxxxxxxxxx
17
#要備份的數據庫
18
db=oss2_base_test
19
#數據要保留的天數
20
days=7
21
# 備份命令
22
mysqldump -h$host -P$port -u$user -p$password $db>backup.sql
23
# 壓縮備份數據,節省磁盤空間,壓縮後數據大小僅爲壓縮前的5%
24
zip backup.sql.zip backup.sql
25
rm backup.sql
26
cd ..
27
day=`date -d "$days days ago" +%Y%m%d`
28
# 刪除固定天數前的數據
29
rm -rf $day
 
 
       自動備份的腳本有了,須要定時天天固定時間執行,就須要用到linux 定時任務:crontab,在命令行輸入crontab -e,回車後進入定時任務編輯頁面,操做和vi相同:
       寫入如下內容後:wq退出就能夠了:
<wiz_code_mirror>
 
 
 
 
 
 
 
 
 
 
 
1
00 02 * * * sh /root/mysqlbackup.sh      #表示天天凌晨兩點執行備份腳本
 
 
      這裏介紹如下crontab命令:

*           *        *        *        *           command

minute   hour    day   month   week      command

分          時         天      月        星期       命令

 
八.ELK日誌管理系統部署
        k8s集羣環境下service將有多份副本,log的查看若是須要一臺一臺登陸查看的話效率會很低,且難以管理。因此採用ELK搭建一套日誌管理系統.

系統環境

    • System:centos 7(查詢版本語句:lsb_release -a)
    • Java : jdk 1.8.0_144
    • Elasticsearch: 6.4.3
    • Kibana: 6.4.3
    • Logstash: 6.4.3
    • Filebeat: 6.4.3

 

 
「ELK」是三個開源項目的首字母縮寫:Elasticsearch,Logstash和Kibana。 Elasticsearch是一個搜索和分析引擎。 Logstash是一個服務器端數據處理管道,它同時從多個源中提取數據,對其進行轉換,而後將其發送到像Elasticsearch這樣的「存儲」。 Kibana容許用戶使用Elasticsearch中的圖表和圖形來可視化數據。
經過瀏覽器訪問: http://hostshujia01.abc.com:8000/ 能夠拿到以上組件,或訪問elastic官網: https://www.elastic.co/products 獲取組件
先確保centos 有java8環境:

 
 
 
 
 
 
 
 
 
 
 
1
# 查看java版本
2
java -vsersion
3
#output: openjdk version "1.8.0_161" OpenJDK Runtime Environment (build 1.8.0_161-b14) OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)
4
# 查看javac
5
javac -version
6
#output
7
javac 1.8.0_161
 
 
若是輸出以上內容,說明有java環境,不然,安裝下載的提供的rpm包,或從java 官方下載: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

 
 
 
 
 
 
 
 
 
 
 
1
yum -y localinstall jdk-8u73-linux-x64.rpm
 
 
咱們這裏採用源碼方式安裝:
    1.部署 Elasticsearch集羣:
        node節點:centos-k8s00三、centos-k8s005,centos-k8s006,centos-k8s007
        分別建立目錄:

 
 
 
 
 
 
 
 
 
 
 
1
mkdir /elk/
 
 
        將elasticsearch-6.4.3.tar.gz解壓後放入/elk/

 
 
 
 
 
 
 
 
 
 
 
1
tar -zxvf elasticsearch-6.4.3.tar.gz
2
mv elasticsearch-6.4.3 /elk/
 
 
         修改配置文件:

 
 
 
 
 
 
 
 
 
 
 
1
cd /elk/elasticsearch-6.4.3/config
2
vim elasticsearch.yml
3
 
        
4
#修改一下幾個參數:
5
cluster.name: oss-application             #自定義,全部節點cluster.name一致
6
node.name: centos-k8s003                  #自定義,建議用機器名 容易區分
7
network.host: centos-k8s003               #本機機器名
8
http.port: 9200
9
node.master: true   #當前節點是否能夠被選舉爲master節點,能夠不選舉master作保存數
10
11
node.data: true     #當前節點是否存儲數據,也能夠不存儲數據,只作master
12
discovery.zen.ping.unicast.hosts: [centos-k8s003, centos-k8s005, centos-k8s006, centos-k8s007]       #elasticsearch集羣其餘節點
 
 
修改系統參數以確保系統有足夠資源啓動ES
 
設置內核參數 

 
 
 
 
 
 
 
 
 
 
 
1
vi /etc/sysctl.conf 
2
# 增長如下參數 
3
vm.max_map_count=655360 
4
# 執行如下命令,確保生效配置生效: 
5
sysctl -p
 
 
 
設置資源參數 

 
 
 
 
 
 
 
 
 
 
 
1
vi /etc/security/limits.conf 
2
# 修改 
3
* soft nofile 65536 
4
* hard nofile 131072 
5
* soft nproc 65536 
6
* hard nproc 131072 
 
 
添加啓動用戶,設置權限 
啓動ElasticSearch5版本要非root用戶,須要新建一個用戶來啓動ElasticSearch

 
 
 
 
 
 
 
 
 
 
 
1
 useradd elk #建立用戶elk 
2
 groupadd elk #建立組elk useradd
3
 elk -g elk #將用戶添加到組
4
chown -R elk:elk /elk/
 
 
         使用elk帳戶啓動 ElasticSearch

 
 
 
 
 
 
 
 
 
 
 
1
su elk
2
cd /elk/elasticsearch-6.4.3/bin/
3
./elk/elasticsearch -d       #在後臺啓動
 
 
      
  2.部署logstash-6.4.3 在centos-k8s003
     解壓壓縮包並移動到/elk/

 
 
 
 
 
 
 
 
 
 
 
1
unzip -d /elk/ logstash-6.4.3.zip
 
 
      修改配置文件logstash-sample.conf
<wiz_code_mirror>
 
 
 
 
 
 
 
 
 
 
 
1
input {
2
  beats {
3
    type => "oss-server-log"   
4
    port => 5044
5
  }
6
}
7
 
        
8
output {
9
  elasticsearch {
10
    hosts => ["http://centos-k8s003:9200","http://centos-k8s005:9200","http://centos-k8s006:9200","http://centos-k8s007:9200"]      #elasticsearch服務地址
11
    index => "%{[fields][source]}-%{[fields][alilogtype]}-%{+YYYY.MM.dd}"        #索引格式
12
  }
13
}
 
 
        啓動服務:
<wiz_code_mirror>
 
 
 
 
 
 
 
 
 
 
 
1
cd bin/
2
nohup ./logstash -f config/logstash-simple.conf &
 
 
    3.部署kibana 在centos-k8s003  
       解壓壓縮包到/elk/

 
 
 
 
 
 
 
 
 
 
 
1
tar -zxvf kibana-6.4.3-linux-x86_64.tar.gz
2
mv kibana-6.4.3-linux-x86_64 /elk/
 
 
      修改配置:
      /elk/kibana-6.4.3-linux-x86_64/config/kibana.yml
<wiz_code_mirror>
 
 
 
 
 
 
 
 
 
 
 
1
server.port: 5601         # 開啓默認端口5601 
2
server.host: centos-k8s003      #站點地址 
3
elasticsearch.url: "http://centos-k8s003:9200 "         #指向>elasticsearch服務的ip地址 
 
 
      啓動kibana

 
 
 
 
 
 
 
 
 
 
 
1
cd /elk/kibana-6.4.3-linux-x86_64/bin/
2
nohup ./kibana  &
相關文章
相關標籤/搜索