目錄
EFK安裝部署
一、環(huán)境準(zhǔn)備(所有主機)
1、主機初始化配置
2、配置主機名并綁定hosts,不同主機名稱不同
3、主機配置初始化
4、部署docker環(huán)境
二、部署kubernetes集群
1、組件介紹
2、配置阿里云yum源
3、安裝kubelet kubeadm kubectl
4、配置init-config.yaml
init-config.yaml配置
5、安裝master節(jié)點
6、安裝node節(jié)點
7、安裝flannel
三、部署企業(yè)鏡像倉庫
1、部署Harbor倉庫
訪問測試:
2、重啟harbor,導(dǎo)入EFK鏡像
四、部署EFK業(yè)務(wù)環(huán)境
1、準(zhǔn)備組件Yaml文件
2、部署Elasticsearch
3、部署kibana
4、部署Fluentd
5、驗證容器日志收集,創(chuàng)建測試容器
6、配置 Kibana
EFK安裝部署
一、環(huán)境準(zhǔn)備(所有主機)
IP地址 |
主機名 |
組件 |
192.168.100.131 |
k8s-master |
kubeadm、kubelet、kubectl、docker-ce |
192.168.100.132 |
k8s-node01 |
kubeadm、kubelet、kubectl、docker-ce、elasticsearch、fluentd |
192.168.100.133 |
k8s-node02 |
kubeadm、kubelet、kubectl、docker-ce、kibana、fluentd |
192.168.100.134 |
harbor |
docker-ce、docker-compose、harbor |
????????注意:所有主機配置推薦CPU:2C+ ?Memory:4G+、運行 ??????????Elasticsearch 的節(jié)點要有足夠的內(nèi)存(不低于 4GB)。若 Elasticsearch 容器退出,請檢查宿主機中的/var/log/message 日志,觀察是否因為系統(tǒng) OOM 導(dǎo)致進程被殺掉。
項目拓撲
1、主機初始化配置
所有主機配置禁用防火墻和selinux
[root@localhost ~]# setenforce 0
[root@localhost ~]# iptables -F
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# systemctl stop NetworkManager
[root@localhost ~]# systemctl disable NetworkManager
[root@localhost ~]# sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config
?文章來源:http://www.zghlxwxcb.cn/news/detail-653317.html
2、配置主機名并綁定hosts,不同主機名稱不同
[root@localhost ~]# hostname k8s-master
[root@localhost ~]# bash
[root@k8s-master ~]# cat << EOF >> /etc/hosts
192.168.100.131 k8s-master
192.168.100.132 k8s-node01
192.168.100.133 k8s-node02
EOF
[root@localhost ~]# hostname k8s-node01
[root@k8s-node01 ~]#?cat?/etc/hosts
[root@localhost ~]# hostname k8s-node02
[root@k8s-node02 ~]#cat?/etc/hosts
?
3、主機配置初始化
[root@k8s-master ~]# yum -y install vim wget net-tools lrzsz
[root@k8s-master ~]# swapoff -a
[root@k8s-master ~]# sed -i '/swap/s/^/#/' /etc/fstab
[root@k8s-master ~]# cat << EOF >> /etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
[root@k8s-master ~]# modprobe br_netfilter
[root@k8s-master ~]# sysctl -p
?
4、部署docker環(huán)境
1)三臺主機上分別部署 Docker 環(huán)境,因為 Kubernetes 對容器的編排需要 Docker 的支持。
[root@k8s-master ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@k8s-master ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
2)使用 YUM 方式安裝 Docker 時,推薦使用阿里的 YUM 源。
[root@k8s-master ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3)清除緩存
[root@k8s-master ~]# yum clean all && yum makecache fast
4)啟動docker
[root@k8s-master ~]# yum -y install docker-ce
[root@k8s-master ~]# systemctl start docker
[root@k8s-master ~]# systemctl enable docker
?
5)鏡像加速器(所有主機配置)
[root@k8s-master ~]# cat << END > /etc/docker/daemon.json
{ ????"registry-mirrors":[ "https://nyakyfun.mirror.aliyuncs.com" ]
}
END
6)重啟docker
[root@k8s-master ~]# systemctl daemon-reload
[root@k8s-master ~]# systemctl restart docker
?
二、部署kubernetes集群
1、組件介紹
三個節(jié)點都需要安裝下面三個組件
kubeadm:安裝工具,使所有的組件都會以容器的方式運行
kubectl:客戶端連接K8S API工具
kubelet:運行在node節(jié)點,用來啟動容器的工具
2、配置阿里云yum源
使用 YUM 方式安裝 Kubernetes時,推薦使用阿里的 YUM 源。
[root@k8s-master ~]# ls /etc/yum.repos.d/
[root@k8s-master ~]# cat > /etc/yum.repos.d/kubernetes.repo
?
3、安裝kubelet kubeadm kubectl
所有主機配置
[root@k8s-master ~]# yum install -y kubelet-1.20.0?kubeadm-1.20.0?kubectl-1.20.0
[root@k8s-master ~]# systemctl enable kubelet
[root@k8s-master ~]# kubectl version
????????kubelet 剛安裝完成后,通過 systemctl start kubelet 方式是無法啟動的,需要加入節(jié)點或初始化為 master 后才可啟動成功。
4、配置init-config.yaml
????????Kubeadm 提供了很多配置項,Kubeadm 配置在 Kubernetes 集群中是存儲在ConfigMap 中的,也可將這些配置寫入配置文件,方便管理復(fù)雜的配置項。Kubeadm 配內(nèi)容是通過 kubeadm config 命令寫入配置文件的。
????????在master節(jié)點安裝,master 定于為192.168.100.131,通過如下指令創(chuàng)建默認的init-config.yaml文件:
[root@k8s-master ~]# kubeadm config print init-defaults > init-config.yaml
?
init-config.yaml配置
[root@k8s-master ~]# cat init-config.yaml
?
5、安裝master節(jié)點
1)拉取所需鏡像
[root@k8s-master ~]# kubeadm config images list --config init-config.yaml
[root@k8s-master ~]# kubeadm config images pull?--config init-config.yaml
?
2)安裝matser節(jié)點
[root@k8s-master ~]# kubeadm init --config=init-config.yaml //初始化安裝K8S
?
3)根據(jù)提示操作
????????kubectl 默認會在執(zhí)行的用戶家目錄下面的.kube 目錄下尋找config 文件。這里是將在初始化時[kubeconfig]步驟生成的admin.conf 拷貝到.kube/config
[root@k8s-master ~]# mkdir -p $HOME/.kube
[root@k8s-master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master ~]# chown $(id -u):$(id -g) $HOME/.kube/config
????????Kubeadm 通過初始化安裝是不包括網(wǎng)絡(luò)插件的,也就是說初始化之后是不具備相關(guān)網(wǎng)絡(luò)功能的,比如 k8s-master 節(jié)點上查看節(jié)點信息都是“Not Ready”狀態(tài)、Pod 的 CoreDNS無法提供服務(wù)等。
6、安裝node節(jié)點
1)根據(jù)master安裝時的提示信息
[root@k8s-node01 ~]# kubeadm join 192.168.100.131:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:78bdd0f01660f4e84355b70aa8807cf1d0d6325b0b28502b29c241563e93b4ae
[root@k8s-master ~]# kubectl get nodes
[root@k8s-node02 ~]# kubeadm join 192.168.100.131:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:78bdd0f01660f4e84355b70aa8807cf1d0d6325b0b28502b29c241563e93b4ae
?
Master操作:
[root@k8s-master ~]# kubectl get nodes
????????前面已經(jīng)提到,在初始化 k8s-master 時并沒有網(wǎng)絡(luò)相關(guān)配置,所以無法跟 node 節(jié)點通信,因此狀態(tài)都是“NotReady”。但是通過 kubeadm join 加入的 node 節(jié)點已經(jīng)在k8s-master 上可以看到。
7、安裝flannel
????????Master 節(jié)點NotReady 的原因就是因為沒有使用任何的網(wǎng)絡(luò)插件,此時Node 和Master的連接還不正常。目前最流行的Kubernetes 網(wǎng)絡(luò)插件有Flannel、Calico、Canal、Weave 這里選擇使用flannel。
所有主機:
master上傳kube-flannel.yml,所有主機上傳flannel_v0.12.0-amd64.tar,cni-plugins-linux-amd64-v0.8.6.tgz
[root@k8s-master ~]# docker load < flannel_v0.12.0-amd64.tar
?
上傳插件:
[root@k8s-master ~]# tar xf cni-plugins-linux-amd64-v0.8.6.tgz
[root@k8s-master ~]# cp flannel /opt/cni/bin/
master上傳kube-flannel.yml
master主機配置:
[root@k8s-master ~]# kubectl apply -f kube-flannel.yml
[root@k8s-master ~]# kubectl get nodes
[root@k8s-master ~]# kubectl get pods -n kube-system
?
已經(jīng)是ready狀態(tài)
三、部署企業(yè)鏡像倉庫
1、部署Harbor倉庫
1)所有主機配置禁用防火墻和selinux
[root@localhost ~]# setenforce 0
[root@localhost ~]# iptables -F
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# systemctl stop NetworkManager
[root@localhost ~]# systemctl disable NetworkManager
[root@localhost ~]# sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config
?
2)配置主機名
[root@localhost ~]# hostname harbor
[root@localhost ~]# bash
[root@harbor ~]#
3)部署docker環(huán)境
Harbor 倉庫需要 Docker 容器支持,所以 Docker 環(huán)境是必不可少的。
[root@k8s-master ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@k8s-master ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
使用 YUM 方式安裝 Docker 時,推薦使用阿里的 YUM 源。
[root@k8s-master ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
清除緩存
[root@k8s-master ~]# yum clean all && yum makecache fast
啟動docker
[root@k8s-master ~]# yum -y install docker-ce
[root@k8s-master ~]# systemctl start docker
[root@k8s-master ~]# systemctl enable docker
鏡像加速器(所有主機配置)
[root@k8s-master ~]# cat << END > /etc/docker/daemon.json
{ ???????"registry-mirrors":[ "https://nyakyfun.mirror.aliyuncs.com" ]
}
END
?
重啟docker
[root@k8s-master ~]# systemctl daemon-reload
[root@k8s-master ~]# systemctl restart docker
?
部署docker-compose
[root@harbor ~]# mv docker-compose /usr/local/bin/
[root@harbor ~]# chmod +x /usr/local/bin/docker-compose
?
部署harbor
Harbor 私有倉庫程序,采用 docker-compose 方式部署,不同的功能和應(yīng)用處于不同的容器,這樣帶來了很好的兼容性,可在眾多支持 Docker 的系統(tǒng)上運行 Harbor。
[root@harbor ~]# tar xf harbor-offline-installer-v1.10.6.tgz -C /usr/local/
?
????????Harbor 的配置文件是/usr/local/harbor/harbor.yml 文件,默認的 hostname 要修改為Harbor 虛擬機節(jié)點的 IP 地址。
[root@harbor ~]# vim /usr/local/harbor/harbor.yml
??5 hostname: 192.168.200.114
13 #https: ??//https 相關(guān)配置都注釋掉,包括 https、port、certificate 和 private_key
?14 ??# https port for harbor, default is 443
?15 ??#port: 443
?16 ??# The path of cert and key files for nginx
?17 ??#certificate: /your/certificate/path
?18 ??#private_key: /your/private/key/path
?
啟動harbor
[root@harbor ~]# cd /usr/local/harbor/
[root@harbor harbor]# sh install.sh
[root@harbor harbor]# docker-compose ps
?
訪問測試:
Harbor 啟動完成后,瀏覽器訪問 http://192.168.100.134,打開 Harbor Web 頁面
修改所有主機docker啟動腳本
[root@harbor ~]# vim /usr/lib/systemd/system/docker.service
[root@harbor ~]# scp /usr/lib/systemd/system/docker.service 192.168.100.131:/usr/lib/systemd/system/
[root@harbor ~]# scp /usr/lib/systemd/system/docker.service 192.168.100.132:/usr/lib/systemd/system/
[root@harbor ~]# scp /usr/lib/systemd/system/docker.service 192.168.100.133:/usr/lib/systemd/system/
所有主機重啟docker服務(wù)
[root@harbor ~]# systemctl daemon-reload
[root@harbor ~]# systemctl restart docker
?
2、重啟harbor,導(dǎo)入EFK鏡像
[root@harbor ~]# sh install.sh
[root@harbor ~]# docker login -u admin -p Harbor12345 http://192.168.100.134
[root@harbor ~]# cd efk
[root@harbor ~]# ls
[root@harbor ~]# docker load < elasticsearch-7.4.2.tar
[root@harbor ~]# docker load < fluentd-es.tar
[root@harbor ~]# docker load < kibana-7.4.2.tar
[root@harbor ~]# docker load < alpine-3.6.tar
[root@harbor ~]# docker tag b1179d 192.168.100.134/efk/elasticsearch:7.4.2
[root@harbor ~]# docker tag 636f3d 192.168.100.134/efk/fluentd-es-root:v2.5.2
[root@harbor ~]# docker tag 43773d 192.168.100.134/efk/alpine:3.6
[root@harbor ~]# docker tag 230d3d 192.168.100.134/efk/kibana:7.4.2
[root@harbor ~]# docker push 192.168.100.134/efk/elasticsearch:7.4.2
[root@harbor ~]# docker push 192.168.100.134/efk/fluentd-es-root:v2.5.2
[root@harbor ~]# docker push 192.168.100.134/efk/kibana:7.4.2
[root@harbor ~]# docker push 192.168.100.134/efk/alpine:3.6
四、部署EFK業(yè)務(wù)環(huán)境
1、準(zhǔn)備組件Yaml文件
Yaml文件中涉及到鏡像地址和 nodeSelector 選擇器地址需要注意修改。
[root@k8s-master ~]# mkdir efk #上傳對應(yīng)的yaml文件
[root@k8s-master ~]# cd efk/
[root@k8s-master efk]# grep "image:" elasticsearch.yaml
????????image: 192.168.100.134/efk/elasticsearch:7.4.2
????????image: 192.168.100.134/efk/alpine:3.6
????????image: 192.168.100.134/efk/alpine:3.6
????????NodeSelector 節(jié)點選擇器的修改,實際作用是決定將 Elasticsearch 服務(wù)部署到哪個節(jié)點。當(dāng)前配置文件內(nèi)是調(diào)度到 k8s-node01 節(jié)點,請根據(jù)實際負載情況進行調(diào)整。節(jié)點名稱可以通過 kubectl get nodes 獲取,在選擇節(jié)點時務(wù)必確保節(jié)點有足夠的資源。
[root@k8s-master efk]# grep -A1 "nodeSelector" elasticsearch.yaml
??????nodeSelector:
????????kubernetes.io/hostname: k8s-node01
?
對kibana.yaml文件鏡像地址和調(diào)度節(jié)點進行修改,將 Kibana 部署到 k8s-node02 節(jié)點。
[root@k8s-master efk]# grep "image:" kibana.yaml
????????image: 192.168.100.134/efk/kibana:7.4.2
[root@k8s-master efk]# grep -A1 "nodeSelector" kibana.yaml
??????nodeSelector:
????????kubernetes.io/hostname: k8s-node02
?
修改 fluentd.yaml的鏡像地址
[root@k8s-master efk]# grep "image:" fluentd.yaml
????????image: 192.168.100.134/efk/fluentd-es-root:v2.5.2
修改 test-pod.yaml的鏡像地址
[root@k8s-master efk]# grep "image:" test-pod.yaml
????image: 192.168.100.134/efk/alpine:3.6
?
2、部署Elasticsearch
1)創(chuàng)建命名空間
創(chuàng)建名為 logging 的命名空間,用于存放 EFK 相關(guān)的服務(wù)。在 k8s-master節(jié)點的/opt/efk 目錄下。
[root@k8s-master efk]# kubectl create -f namespace.yaml
[root@k8s-master efk]# kubectl get namespaces | grep logging
?
2)創(chuàng)建 es 數(shù)據(jù)存儲目錄
Elasticsearch 服務(wù)通??梢院唽憺?es。到 k8s-node01 節(jié)點創(chuàng)建數(shù)據(jù)目錄/esdata。
[root@k8s-node01 ~]# mkdir /esdata
?
3)部署 es 容器
進入 k8s-master節(jié)點的/efk 目錄,部署 es 容器,執(zhí)行如下操作。
[root@k8s-master ~]# cd efk/
[root@k8s-master efk]# kubectl create -f elasticsearch.yaml
等待片刻,即可查看到 es 的 Pod,已經(jīng)部署到 k8s-node01 節(jié)點,狀態(tài)變?yōu)?running。
[root@k8s-master efk]# kubectl -n logging get pods -o wide
[root@k8s-master efk]# kubectl -n logging get svc
?
通過 curl 命令訪問服務(wù),驗證 es 是否部署成功。
[root@k8s-master efk]# curl 10.98.29.202:9200
?
3、部署kibana
進入 k8s-master 的/opt/efk 目錄,執(zhí)行如下命令。
[root@k8s-master efk]# kubectl create -f kibana.yaml
service/kibana created
查看 Pod 的狀態(tài)。
[root@k8s-master efk]# kubectl -n logging get pods
查看對應(yīng)的 Service,得到 NodePort 值為 31732,此端口為隨機端口,不同環(huán)境會不一致,請以實際結(jié)果為準(zhǔn)。
[root@k8s-master efk]# kubectl -n logging get svc |grep
????????通過訪問 192.168.100.131:31591?進入到 kibana 的訪問界面,觀察是否可以正常打開,其中 31591?端口需要替換成實際的端口號。若能正常訪問,說明 Kibana 連接 es 已經(jīng)正常。
?
4、部署Fluentd
1)給集群節(jié)點打標(biāo)簽
????????為了自由控制需要采集集群中節(jié)點上業(yè)務(wù)容器的服務(wù)日志。因此,需要給 k8s-node01和 k8s-node02 節(jié)點打上 fluentd=true 的標(biāo)簽 label。
[root@k8s-master efk]# kubectl label node k8s-node01 fluentd=true
[root@k8s-master efk]# kubectl label node k8s-node02 fluentd=true
????????k8s-node01 和 k8s-node02 已經(jīng)打上了 fluentd=true 的 label,那么 Fluentd 服務(wù)就會啟動到這兩個節(jié)點,也就意味著運行在這兩個節(jié)點的 Pod 日志會被收集起來。
2)啟動 Fluentd 服務(wù)
在 k8s-master節(jié)點的/opt/efk 目錄,啟動 Fluentd 服務(wù)
[root@k8s-master efk]# kubectl create -f fluentd-es-config-main.yaml
[root@k8s-master efk]# kubectl create -f fluentd-configmap.yaml
[root@k8s-master efk]# kubectl create -f fluentd.yaml
?
3)查看 Pod 信息
是否已經(jīng)在 k8s-node01 和 k8s-node02 節(jié)點啟動成功。
[root@k8s-master efk]# kubectl -n logging get pods
?
5、驗證容器日志收集,創(chuàng)建測試容器
進入 k8s-master的/opt/efk 目錄,執(zhí)行如下命令。
[root@k8s-master efk]# kubectl create -f test-pod.yaml
[root@k8s-master efk]# kubectl get pods
?
6、配置 Kibana
?
?
????????索引創(chuàng)建完成后,可以發(fā)現(xiàn)已經(jīng)生成了多個索引域,稍等片刻再次點擊左上角的
discover 圖標(biāo),進入日志檢索頁面。
?
????????然后通過索引鍵去過濾,比如根據(jù)Kubernetes.host、Kubernetes.container_name、 kubernetes.container_image_id等去做過濾。
????????通過其他元數(shù)據(jù)也可以過濾日志數(shù)據(jù),比如單擊任何日志條目以查看其他元數(shù)據(jù),如容器名稱、Kubernetes 節(jié)點、命名空間等。
?
到這里,在 Kubernetes 集群上已經(jīng)成功部署了 EFK。文章來源地址http://www.zghlxwxcb.cn/news/detail-653317.html
到了這里,關(guān)于【云原生】【k8s】Kubernetes+EFK構(gòu)建日志分析安裝部署的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!