如何提高高可用性Kubernetes集群而不使大脑爆炸? 当然,请使用Kubespray。
Kubespray是一组Ansible角色,用于使用Kubernetes容器安装和配置业务流程系统。
Kubernetes是一个开放源代码项目,旨在将Linux容器集群作为一个系统进行管理。 Kubernetes在大量主机上管理和运行容器,以及共同托管和复制大量容器。
小心,在elasticsearch的cat 4屏幕截图和prometheus的9屏幕截图下!
准备工作
有3个Centos 7节点,内存为8GB。
更好地使用16GB
在每个节点上,执行以下操作。
我们连接所需大小的磁盘。
对于弹性,您需要3个大于30GB(data.persistence.size)的PV和2个大于4GB(master.persistence.size)的PV。
为此,在每个节点上创建2个所需大小的磁盘。
磁盘大小取决于您的数据数量-您需要进行实验检查。
Disk /dev/vdb: 21.5 GB Disk /dev/vdc: 53.7 GB
通过fdisk,我们在每个1部分上创建
在/ mnt / disks中创建一个带有我们新磁盘名称的文件夹
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
我们将清单/示例/hosts.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-cluster / addons.yml中更改以下值
helm_enabled: true # helm local_volume_provisioner_enabled: true # local volume provisioner ingress_nginx_enabled: true # ingress controller
将清单/样本/group_vars/k8s-cluster.yml添加到文件末尾
docker_dns_servers_strict: no # 'no', DNS 3
我们开始安装
在安装之前,请阅读kubespray文档https://github.com/kubernetes-incubator/kubespray
ansible-playbook -u'在节点上具有sudo的用户'-i目录/ sample / hosts.ini cluster.yml -b
检查StorageClass
kubectl get storageclass NAME PROVISIONER AGE local-storage kubernetes.io/no-provisioner 18m
检查PV
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
我们开始安装elasticsearch
helm install stable/elasticsearch --namespace logging --name elasticsearch --set data.persistence.storageClass=local-storage,master.persistence.storageClass=local-storage
等待5分钟以安装Elasticsearch。
我们找到了将kibana和fluentd连接起来的服务。 通常名称中有elasticsearch-client
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
在安装fluentd-elasticsearch时指定名称elasticsearch-client
helm install stable/fluentd-elasticsearch --namespace logging --set elasticsearch.host=elasticsearch-client
安装kibana时指定名称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
我们看到所有Pod的状态都在运行
kubectl get pod --namespace=logging
如果有错误,我们将查看日志。
kubectl logs - --namespace logging
添加到DNS或/ etc / hosts文件
IP-- kibana.mydomain.io IP-- kibana.mydomain.io IP-- kibana.mydomain.io
注意:如果要将日志发送到外部Elasticsearch,则应使用elasticsearch.host = dns-name-of-your-external-elasticsearch开始安装
转到kibana.mydomain.io
点击索引模式

输入名称索引,使其与下面的索引匹配

选择@时间戳

EFK在这里起作用

我们开始安装kube-prometheus
下载prometheus-operator
git clone https://github.com/coreos/prometheus-operator.git
转到kube-prometheus文件夹
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
创建ingress-grafana-prometheus.yml文件
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 / hosts文件
IP-- grafana.mydomain.io IP-- grafana.mydomain.io IP-- grafana.mydomain.io
转到grafana.mydomain.io。 输入标准的用户名/密码:admin / admin
普罗米修斯截图:









PS:最好立即私下写出所有错误。