Kubernetes рдХреЛ kubespray рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ (рд╕реНрдерд╛рдиреАрдп-рднрдВрдбрд╛рд░рдг, Elasticsearch + Fluentd + Kibana, prometheus рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ)

рдЙрдЪреНрдЪ-рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреБрдмреЗрд░рдиреЗрдЯ рдХреНрд▓рд╕реНрдЯрд░ рдХреИрд╕реЗ рдмрдврд╝рд╛рдПрдВ рдФрд░ рдорд╕реНрддрд┐рд╖реНрдХ рдХреЛ рд╡рд┐рд╕реНрдлреЛрдЯ рди рдХрд░реЗрдВ? рдХреБрдмреНрд╕реЗрдкреНрд░рдп рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВред


рдХреБрдмрд╕рдиреЗрддреНрд░ рдХрдВрдЯреЗрдирд░ рдХреЗ рд╕рд╛рде рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпреВрдмреНрд╕рдкреНрд░рд╛рдп, рдЕрдВрд╕рд┐рдмрд▓ рднреВрдорд┐рдХрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИред


рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдПрдХ рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ рдЬрд┐рд╕реЗ рд▓рд┐рдирдХреНрд╕ рдХрдВрдЯреЗрдирд░ рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рд╕рд┐рдВрдЧрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдореЗрдЬрдмрд╛рдиреЛрдВ рдкрд░ рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдФрд░ рд╕рдВрдЪрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреА рд╕рд╣-рдореЗрдЬрдмрд╛рдиреА рдФрд░ рдирдХрд▓ рднреА рдХрд░рддрд╛ рд╣реИред


рд╕рд╛рд╡рдзрд╛рдиреА, рдХреИрдЯрд╕реНрдЯрд┐рдХреНрд╕ рдХреЗ 4 рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдФрд░ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдХреЗ 9 рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреЗ рддрд╣рдд!


рдЯреНрд░реЗрдирд┐рдВрдЧ


8GB рдореЗрдореЛрд░реА рдХреЗ рд╕рд╛рде 3 Centos 7 рдиреЛрдбреНрд╕ рд╣реИрдВред
рдмреЗрд╣рддрд░ рдЙрдкрдпреЛрдЧ 16GB
рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдкрд░, рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░реЗрдВред
рд╣рдо рдбрд┐рд╕реНрдХ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдЖрдХрд╛рд░ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред


рд▓реЛрдЪрджрд╛рд░ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ 30GB (data.persistence.size) рд╕реЗ рдмрдбрд╝реЗ 3 PVs рдФрд░ 4GB (master.persistence.size) рд╕реЗ 2 PV рдмрдбрд╝реЗ рдЪрд╛рд╣рд┐рдПред


рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдкрд░, рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдЖрдХрд╛рд░ рдХреЗ 2 рдбрд┐рд╕реНрдХ рдмрдирд╛рдПрдВред
рдбрд┐рд╕реНрдХ рдЖрдХрд╛рд░ рдЖрдкрдХреЗ рдбреЗрдЯрд╛ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ - рдЖрдкрдХреЛ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


Disk /dev/vdb: 21.5 GB Disk /dev/vdc: 53.7 GB 

Fdisk рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ 1 рд╕реЗрдХреНрд╢рди рдкрд░ рдмрдирд╛рддреЗ рд╣реИрдВ


рдореЗрдВ / mnt / рдбрд┐рд╕реНрдХ рд╣рдорд╛рд░реА рдирдИ рдбрд┐рд╕реНрдХ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рддреЗ рд╣реИрдВ


 mkdir -p /mnt/disks/vdb1 mkdir -p /mnt/disks/vdc1 

рдЗрди рдбреНрд░рд╛рдЗрд╡реНрд╕ рдкрд░ FS рдмрдирд╛рдПрдВ


 mkfs.xfs -f /dev/vdb1 mkfs.xfs -f /dev/vdc1 

рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдорд╛рдЙрдВрдЯ рдбрд┐рд╕реНрдХ


 mount /dev/vdb1 /mnt/disks/vdb1 mount /dev/vdc1 /mnt/disks/vdc1 

рдЪреЗрдХ


 mount | grep mnt /dev/vdb1 on /mnt/disks/vdb1 type xfs (rw,relatime,attr2,inode64,noquota) /dev/vdc1 on /mnt/disks/vdc1 type xfs (rw,relatime,attr2,inode64,noquota) 

рд╕рднреА рдиреЛрдбреНрд╕ рдкрд░ рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдмрдВрдж рдХрд░реЗрдВ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмреИрд╕рд╛рдЦреА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ)


 systemctl stop firewalld iptables -F 

Kubespray рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ kubernetes рдХреА рд╕реНрдерд╛рдкрдирд╛ рдЪрд▓рд╛рдПрдБ


 git clone https://github.com/kubernetes-incubator/kubespray.git cd kubespray git tags -   git checkout ' tag' sudo pip install -r requirements.txt 

рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлреЙрд░реНрдо рдореЗрдВ рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА / рд╕реИрдВрдкрд▓ / рдореЗрдЬрдмрд╛рдиреЛрдВ.ini рдХреЛ рд▓рд╛рддреЗ рд╣реИрдВ (рдиреЛрдбреНрд╕ рдХреЗ рдирд╛рдо рдХреЛ рдЕрдкрдиреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ)


 [k8s-cluster:children] kube-master kube-node [all] test-tools-kuber-apatsev-1 ansible_host=ip-- ip=ip-- test-tools-kuber-apatsev-2 ansible_host=ip-- ip=ip-- test-tools-kuber-apatsev-3 ansible_host=ip-- ip=ip-- [kube-master] test-tools-kuber-apatsev-1 test-tools-kuber-apatsev-2 test-tools-kuber-apatsev-3 [kube-node] test-tools-kuber-apatsev-1 test-tools-kuber-apatsev-2 test-tools-kuber-apatsev-3 [etcd] test-tools-kuber-apatsev-1 test-tools-kuber-apatsev-2 test-tools-kuber-apatsev-3 [calico-rr] [vault] test-tools-kuber-apatsev-1 test-tools-kuber-apatsev-2 test-tools-kuber-apatsev-3 

рдлрд╝рд╛рдЗрд▓ рд╕реВрдЪреА / рдирдореВрдирд╛ / group_vars / k8s- рдХреНрд▓рд╕реНрдЯрд░ / addons.yml рдореЗрдВ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдорд╛рди рдмрджрд▓реЗрдВ


 helm_enabled: true #  helm   local_volume_provisioner_enabled: true #  local volume provisioner ingress_nginx_enabled: true #  ingress controller 

рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА / рдирдореВрдирд╛ / group_vars / k8s-рдХреНрд▓рд╕реНрдЯрд░.yml рдЬреЛрдбрд╝реЗрдВ


 docker_dns_servers_strict: no #   'no',   DNS   3 

рд╣рдо рд╕реНрдерд╛рдкрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ
рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, kubespray рдкреНрд░рд▓реЗрдЦрди https://github.com/kubernetes-incubator/kubespray рдкрдврд╝реЗрдВ
ansible-playbook -u 'рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдиреЛрдбреНрд╕ -i рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА / рд╕реИрдВрдкрд▓ / рд╣реЛрд╕реНрдЯреНрд╕.рдЗрди рдХреНрд▓рд╕реНрдЯрд░ред sud -b рд╣реИ


StorageClass рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ


 kubectl get storageclass NAME PROVISIONER AGE local-storage kubernetes.io/no-provisioner 18m 

рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣реЗ рдкреА.рд╡реА.


 kubectl get pv local-pv-26b51a64 49Gi RWO Delete Available local-storage 11m local-pv-5bec36e4 19Gi RWO Delete Available local-storage 14m local-pv-81c889eb 49Gi RWO Delete Available local-storage 13m local-pv-aa880f42 19Gi RWO Delete Available local-storage 10m local-pv-b6ffa66b 19Gi RWO Delete Available local-storage 11m local-pv-d465b035 49Gi RWO Delete Available local-storage 10m 

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╣реЗрд▓реНрдо


 helm init --service-account tiller 

рд╣рдо рдЗрд▓рд╛рд╕реНрдЯрд┐рдХреНрд╕ рдХреА рд╕реНрдерд╛рдкрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ


 helm install stable/elasticsearch --namespace logging --name elasticsearch --set data.persistence.storageClass=local-storage,master.persistence.storageClass=local-storage 

рдЗрд▓рд╛рд╕реНрдЯрд┐рдХреНрд╕ рдЦреЛрдЬ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 5 рдорд┐рдирдЯ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВред


рд╣рдо рдЙрд╕ рд╕реЗрд╡рд╛ рдХреЛ рдЦреЛрдЬрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐рдмрд╛рдирд╛ рдФрд░ рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдЗрд╕рдХреЗ рдирд╛рдо рдореЗрдВ рдЗрд▓рд╛рд╕реНрдЯрд┐рдХреНрд╕рд░реНрдЪ-рдХреНрд▓рд╛рдЗрдВрдЯ рд╣реЛрддрд╛ рд╣реИ


 kubectl get services --namespace logging | grep elasticsearch elasticsearch-client ClusterIP 10.233.60.173 <none> 9200/TCP 19s elasticsearch-discovery ClusterIP None <none> 9300/TCP 19s 

рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣-рдЗрд▓рд╛рд╕реНрдЯрд┐рдХреНрд╕ рдЦреЛрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп рдирд╛рдо рдЗрд▓рд╛рд╕реНрдЯрд┐рдХреНрд╕-рдХреНрд▓рд╛рдЗрдВрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ


 helm install stable/fluentd-elasticsearch --namespace logging --set elasticsearch.host=elasticsearch-client 

рдХрд┐рдмрд╛рдирд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп рдЗрд▓рд╛рд╕реНрдЯрд┐рдХреНрд╕-рдХреНрд▓рд╛рдЗрдВрдЯ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ


 helm install --namespace logging --set ingress.enabled=true,ingress.hosts[0]=kibana.mydomain.io --set env.ELASTICSEARCH_URL=http://elasticsearch-client:9200 stable/kibana 

рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╕рднреА рдкреЙрдбреНрд╕ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдЪрд▓ рд░рд╣реА рд╣реИ


 kubectl get pod --namespace=logging 

рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реИ, рддреЛ рд╣рдо рд▓реЙрдЧ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред


 kubectl logs - --namespace logging 

DNS рдпрд╛ / etc / рдореЗрдЬрдмрд╛рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ


 IP-- kibana.mydomain.io IP-- kibana.mydomain.io IP-- kibana.mydomain.io 

рдиреЛрдЯ: рдпрджрд┐ рдЖрдк рдмрд╛рд╣рд░реА рдЗрд▓рд╛рд╕реНрдЯрд┐рдХреНрд╕ рдЦреЛрдЬ рдореЗрдВ рд▓реЙрдЧ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрд▓реЗрд╕реНрдЯрд┐рдХреНрд╕рдЦреЛрдЬ рдХреЗ рд╕рд╛рде рдЗрдВрд╕реНрдЯрд╛рд▓реЗрд╢рди рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП редрд╣реЛрд╕реНрдЯ = рдбреАрдПрдирдПрд╕-рдирд╛рдо-рдСрдл-рдпреЛрд░-рдПрдХреНрд╕рд▓рд┐рдЯрд┐рдХреНрд╕ рдЦреЛрдЬ


Kibana.mydomain.io рдкрд░ рдЬрд╛рдПрдВ
рдЗрдВрдбреЗрдХреНрд╕ рдкреИрдЯрд░реНрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ



рдирд╛рдо рд╕реВрдЪрдХрд╛рдВрдХ рджрд░реНрдЬ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдпрд╣ рдиреАрдЪреЗ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рд╕реЗ рдореЗрд▓ рдЦрд╛рдП



@ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ



рдФрд░ рдпрд╣рд╛рдБ EFK рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ



рд╣рдо рдХреНрдпреВрдм-рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдХреА рд╕реНрдерд╛рдкрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ


рдкреНрд░реЛрдореЗрдерд┐рдпрд╕-рдСрдкрд░реЗрдЯрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ


 git clone https://github.com/coreos/prometheus-operator.git 

рдХреНрдпреВрдм-рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬрд╛рдПрдВ


 cd prometheus-operator/contrib/kube-prometheus 

рд╣рдо рд╕рд╛рдЗрдЯ рдкрд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕реНрдерд╛рдкрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ


 kubectl create -f manifests/ || true until kubectl get customresourcedefinitions servicemonitors.monitoring.coreos.com ; do date; sleep 1; echo ""; done until kubectl get servicemonitors --all-namespaces ; do date; sleep 1; echo ""; done kubectl create -f manifests/ 2>/dev/null || true 

рдЗрдВрдЯреЗрдЧреНрд░реЗрд╕-рдЧреНрд░рд╛рдлрд╛рдирд╛-рдкреНрд░реЛрдореЗрдерд┐рдпрд╕.рдорд╛рдЗрд▓ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ


 apiVersion: extensions/v1beta1 kind: Ingress metadata: name: test namespace: monitoring spec: rules: - host: grafana.mydomain.io http: paths: - backend: serviceName: grafana servicePort: 3000 

рдПрдХ рдкреНрд░рд╡реЗрд╢ рд╕рдВрд╕рд╛рдзрди рдмрдирд╛рдПрдБ


 kubectl create -f ingress-grafana-prometheus.yml 

DNS рдпрд╛ / etc / рдореЗрдЬрдмрд╛рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ


 IP-- grafana.mydomain.io IP-- grafana.mydomain.io IP-- grafana.mydomain.io 

Grafana.mydomain.io рдкрд░ рдЬрд╛рдПрдВред рдорд╛рдирдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо / рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░реЗрдВ: рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ / рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ
рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕:











рдкреБрдирд╢реНрдЪ: рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рдЬреА рддреМрд░ рдкрд░ рддреБрд░рдВрдд рд▓рд┐рдЦрдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

Source: https://habr.com/ru/post/hi426959/


All Articles