基于CentOS7安装kubesphere和Kubernetes并接入外部ES收集日志
一、修改所有节点主机名
主节点就修改成master
hostnamectl set-hostname master
然后输入bash刷新当前主机名
工作节点1就修改成node1
hostnamectl set-hostname node1
然后输入bash刷新当前主机名
二、全部节点安装依赖并同步时间
yum -y install socat conntrack ebtables ipset
yum install ntpdate -y
同步时间
ntpdate time.windows.com
三、下载 KubeKey
3.1 选择中国时区
export KKZONE=cn
3.2 执行以下命令下载 KubeKey
curl -sfL https://get-kk.kubesphere.io | VERSION=v3.0.13 sh –
注意:
节点要求
- 所有节点必须都能通过 SSH 访问。
- 所有节点时间同步。
- 所有节点都应使用 sudo/curl/openssl/tar
3.3 为 kk 添加可执行权限
chmod +x kk
3.4 创建集群
3.5 创建示例配置文件
我这里kubesphere选了3.4.1版本,如果不指定 Kubernetes 版本,KubeKey 将默认安装 Kubernetes v1.23.10
./kk create config --with-kubernetes v1.23.0 --with-kubesphere v3.4.1 -f k8s/自定义文件名.yaml
3.6 修改生成的yaml文件
只修改主机名、IP地址、用户名密码,区分工作节点与主节点,其他不变
3.7 运行以下命令安装集群
./kk create cluster -f k8s/文件名.yaml
如果出现无法下载镜像包,那就配置一下dockers的加速器
cat /etc/docker/daemon.json
{
"exec-opts": [
"native.cgroupdriver=systemd"
],
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.m.daocloud.io",
"https://docker.1panel.top"
],
"live-restore": true,
"log-driver": "json-file",
"log-opts": {
"max-size": "500m",
"max-file": "3"
},
"max-concurrent-downloads": 10,
"max-concurrent-uploads": 5
}
重启dockers服务
systemctl daemon-reload && systemctl restart docker
最后出现这个就是装好了
四、安装Elasticsearch收集pod日志
4.1 服务器优化
4.1.1、调整最大文件数到65535
vi /etc/security/limits.conf
* hard nofile 65535
* soft nofile 65535
通过ulimit -n命令查看
4.1.2、修改vm.max_map_count
修改/etc/sysctl.conf文件,再文件末尾加上
vm.max_map_count=655360
并执行sysctl -p,使修改文件部分生效。
4.1.3、创建用户
Elasticsearch不允许root用户启动,需要创建es专用账号
groupadd elastic
useradd elastic -g elastic
#设置用户密码
passwd elastic
4.1.4创建数据目录
mkdir -p /data/elastic/data
mkdir -p /data/elastic/logs
cd /data/elastic/
#下载elasticsearch软件包;
wget -c https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.0-linux-x86_64.tar.gz
#tar解压elasticsearch软件包;
tar -xzvf elasticsearch-7.17.0-linux-x86_64.tar.gz
chown -R elastic:elastic /data/elastic
安装jdk
wget -c https://download.oracle.com/otn/java/jdk/8u441-b07/7ed26d28139143f38c58992680c214a5/jdk-8u441-linux-x64.tar.gz?AuthParam=1740191829_6b95284f0978b16082f95c598ba9fc01
解压到指定目录
tar -zxvf jdk-8u441-linux-x64.tar.gz -C /usr/local/
配置jdk环境变量
export JAVA_HOME=/usr/local/jdk1.8.0_441
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH
source /etc/profile
切换用户
su – elastic
据服务器配置修改jvm.options中的Xms、Xmx
我的服务器是32G
这里修改jvm占用内存 ,例如修改为8g
-Xms8g
-Xmx8g
注意把这两个参数的空格去掉,不然会报错4.1.5
4.1.5 修改elasticsearch.yml配置文件
配置相关信息并开启安全认证(可选,我取消证书认证了)
cluster.name: 集群名
node.name: node-1
path.data: /data/elastic/data
path.logs: /data/elastic/logs
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["主机IP"]
cluster.initial_master_nodes: ["node-1"]
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization
ingest.geoip.downloader.enabled: false
#开启安全认证配置(可选,我取消证书认证了)
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12
如果是集群可以在任意节点生成证书(可选,我取消证书认证了)
为Elasticsearch集群创建一个证书颁发机构。(可选,我取消证书认证了)
bin/elasticsearch-certutil ca ,
Please enter the desired output file [elastic-stack-ca.p12]: #这里直接回车即可
Enter password for elastic-stack-ca.p12 : #这里直接回车即可,不要设置密码
之后会看到新生成的文件 elastic-stack-ca.p12
生成私钥(可选,我取消证书认证了)
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
下面三项直接回车即可:
Enter password for CA (elastic-stack-ca.p12) :
Please enter the desired output file [elastic-certificates.p12]:
Enter password for elastic-certificates.p12 : #这里直接回车即可,不要设置密码,否则后面ES会启动不了
Certificates written to /……/elastic-certificates.p12
设置完毕后,会在当前目录 下看到新生成的文件:elastic-certificates.p12
创建文件夹certs放置私钥(可选,我取消证书认证了)
mkdir config/certs
cp elastic-certificates.p12 config/certs
如果是集群,将生成的证书拷贝到其他节点的相同目录即可。
启动es
bin/elasticsearch (初次不加-d 静默启动,便于观察日志)
可以看到除了有些告警以外,es可以正常启动
然后设置密码
[elastic@server elasticsearch-7.17.0]$ bin/elasticsearch-setup-passwords interactive
warning: usage of JAVA_HOME is deprecated, use ES_JAVA_HOME
Future versions of Elasticsearch will require Java 11; your Java version from [/usr/local/jdk1.8.0_441/jre] does not meet this requirement. Consider switching to a distribution of Elasticsearch with a bundled JDK. If you are already using a distribution with a bundled JDK, ensure the JAVA_HOME environment variable is not set.
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]y
Enter password for [elastic]:
Reenter password for [elastic]:
Enter password for [apm_system]:
Reenter password for [apm_system]:
Enter password for [kibana_system]:
Reenter password for [kibana_system]:
Enter password for [logstash_system]:
Reenter password for [logstash_system]:
Enter password for [beats_system]:
Reenter password for [beats_system]:
Enter password for [remote_monitoring_user]:
Reenter password for [remote_monitoring_user]:
Changed password for user [apm_system]
Changed password for user [kibana_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]
按个人需求输入密码即可。
ES中内置的用户:
- elastic 账号:拥有 superuser 角色,是内置的超级用户。
- kibana 账号:拥有 kibana_system 角色,用户 kibana 用来连接 elasticsearch 并与之通信。Kibana 服务器以该用户身份提交请求以访问集群监视 API 和 .kibana 索引。不能访问 index。
- logstash_system 账号:拥有 logstash_system 角色。用户 Logstash 在 Elasticsearch 中存储监控信息时使用。
- beats_system账号:拥有 beats_system 角色。用户 Beats 在 Elasticsearch 中存储监控信息时使用。
- elastic是超级用户,它可以做任何事情
4.1.6 验证ES是否正常
curl -XGET --user elastic:elastic http://节点IP:9200/_cluster/health?pretty
将kubesphere默认的日志接收器换成外部ES
在定制资源定义中找到 ClusterConfiguration ---ks-installer配置文件截图
修改es部分保存即可
修改OutPut部分
- 这个文件不支持显示明文用户密码,所以需要先创建secret保存用户密码
kubectl create secret generic elasticsearch-credentials --from-literal=username=elastic --from-literal=password=elastic -n kubesphere-logging-system -v=8
- 修改修改OutPut文件
key: username # 使用 Secret 中的键名
name: elasticsearch-credentials # 确保密钥名称正确
key: password # 使用 Secret 中的键名
name: elasticsearch-credentials # 确保密钥名称正确
然后查看fluent-bit的pod是否将日志推送到外部ES,并且kubesphere是否能正常显示ES收集的日志
我这已经成功使用外部ES收集并显示日志
注意ES配置证书后,kubesphere访问有点麻烦,所以我的ES取消证书认证了,只配置了密码