热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

快速搭建云原生开发环境(k8s+pv+prometheus+grafana)

欢迎访问我的GitHub这里分类和汇总了欣宸的全部原创(含配套源码):https:github.comzq2599blog_demos本篇概览欣宸正在为接下新的Ja




欢迎访问我的GitHub



这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos



本篇概览


  • 欣宸正在为接下新的Java云原生实战系列原创做准备,既然是实战,少不了一套云原生环境,以下内容是必不可少的:

  1. linux操作系统
  2. kubernetes
  3. kubernetes的外部存储,平时数据库、监控、消息这些中间件的数据不可能放在容器内,需要有个可靠的地方存起来不丢失
  4. 监控

  • 一番操作下来,轻松完成了上述工作,这里将整个过程记录定下来,这样可以保证每次重装都能轻松愉快的完成,省下的时间用来写更多的技术原创

版本信息


  • 本次安装的版本信息如下,供您参考

  1. 操作系统:CentOS 7.6 (腾讯云轻应用服务器)
  2. kubernetes:1.22 (底层容器服务是docker)
  3. prometheus:2.32.1
  4. grafana:8.3.3

初始化


  • CentOS操作系统的安装就不在这里讲了,接下来的操作假设您已装好纯净的CentOS系统
  • 本文中的操作都是用root账号执行的
  • 安装ssh服务

sudo yum install openssh-server -y

  • 修改root密码

sudo passwd root

  • 修改ssh配置,允许root远程登录,文件是/etc/ssh/sshd_config,注意下图两个箭头指向的配置,确保您的值与之一致
    在这里插入图片描述
  • 安装常用软件:

yum install redhat-lsb lrzsz wget -y

  • 关闭防火墙

systemctl stop firewalld && \
systemctl disable firewalld && \
setenforce 0

  • 接下来可以安装k8s了,如果网速正常,可以采用k8s安装(在线下载镜像和文件)章节的方法,如果网络太慢,或者像我这样使用腾讯云服务器时发现下载文件太慢,可以采用k8s安装(使用离线的镜像和文件)章节的方法

k8s安装(在线下载镜像和文件)


  • 为了简单省事儿,本次打算使用sealos安装K8S单机版,底层容器是docker
  • 下载sealos,地址是:https://github.com/labring/sealos/releases/download/v4.1.3/sealos_4.1.3_linux_amd64.tar.gz
  • 解压并存放到指定位置

tar -zxvf sealos_4.1.3_linux_amd64.tar.gz sealos && chmod +x sealos && mv sealos /usr/bin

  • 然后一行命令安装k8s

sealos run labring/kubernetes-docker:v1.22.8-4.1.3 labring/helm:v3.8.2 labring/calico:v3.24.1 --single

  • 等待三分钟左右,K8S单机版安装完成,控制台输出如下
    在这里插入图片描述
  • 查看系统pod,一切正常

[root@VM-12-12-centos k8s]# kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
calico-apiserver calico-apiserver-67b7856948-bg2wh 1/1 Running 0 12s
calico-apiserver calico-apiserver-67b7856948-fz64n 1/1 Running 0 12s
calico-system calico-kube-controllers-78687bb75f-z2r7m 1/1 Running 0 41s
calico-system calico-node-l6nmw 1/1 Running 0 41s
calico-system calico-typha-b46ff96f6-qqzxb 1/1 Running 0 41s
calico-system csi-node-driver-lv2g2 2/2 Running 0 21s
kube-system coredns-78fcd69978-57r7x 1/1 Running 0 47s
kube-system coredns-78fcd69978-psjcs 1/1 Running 0 46s
kube-system etcd-vm-12-12-centos 1/1 Running 0 60s
kube-system kube-apiserver-vm-12-12-centos 1/1 Running 0 61s
kube-system kube-controller-manager-vm-12-12-centos 1/1 Running 0 62s
kube-system kube-proxy-x8nhg 1/1 Running 0 47s
kube-system kube-scheduler-vm-12-12-centos 1/1 Running 0 60s
tigera-operator tigera-operator-6f669b6c4f-t8t9h 1/1 Running 0 46s

  • 由于是单机版,需要去除污点才能使用,执行以下命令

kubectl taint nodes --all node-role.kubernetes.io/master-

k8s安装(使用离线的镜像和文件)


  • 如果您通过上面一段的操作顺利装好k8s,那么这一段内容可以直接跳过
  • 我用的是腾讯云轻应用服务器,在安装过程中发现下载sealos的文件非常慢,于是使用了以下方法来提升安装速度,如果您遇到了同样问题也可以参考这种方法
  • 为了简单省事儿,本次打算使用sealos安装K8S单机版,底层容器是docker
  • 在CSDN下载四个文件,它们的下载地址如下,下载后存放在CentOS服务器上的同一个目录下(不要积分,免费下载):

  1. https://download.csdn.net/download/boling_cavalry/86908222
  2. https://download.csdn.net/download/boling_cavalry/86908229
  3. https://download.csdn.net/download/boling_cavalry/86908433
  4. https://download.csdn.net/download/boling_cavalry/86908647

  • 确认一下,四个文件名依次是:sealos_4.1.3_linux_amd64.tar.gz、helm.tar、calico.tar、kubernetes.tar
  • ssh进入上述四个文件的存放目录
  • 首先是操作sealos_4.1.3_linux_amd64.tar.gz文件

tar zxvf sealos_4.1.3_linux_amd64.tar.gz sealos && chmod +x sealos && mv sealos /usr/bin

  • 再用sealos工具加载其他三个文件

sealos load -i kubernetes.tar
sealos load -i helm.tar
sealos load -i calico.tar

  • 此时,再执行以下命令安装k8s

sealos run labring/kubernetes-docker:v1.22.8-4.1.3 labring/helm:v3.8.2 labring/calico:v3.24.1 --single

  • 等待三分钟左右,K8S单机版安装完成,控制台输出如下
    在这里插入图片描述
  • 查看系统pod,一切正常

[root@VM-12-12-centos k8s]# kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
calico-apiserver calico-apiserver-67b7856948-bg2wh 1/1 Running 0 12s
calico-apiserver calico-apiserver-67b7856948-fz64n 1/1 Running 0 12s
calico-system calico-kube-controllers-78687bb75f-z2r7m 1/1 Running 0 41s
calico-system calico-node-l6nmw 1/1 Running 0 41s
calico-system calico-typha-b46ff96f6-qqzxb 1/1 Running 0 41s
calico-system csi-node-driver-lv2g2 2/2 Running 0 21s
kube-system coredns-78fcd69978-57r7x 1/1 Running 0 47s
kube-system coredns-78fcd69978-psjcs 1/1 Running 0 46s
kube-system etcd-vm-12-12-centos 1/1 Running 0 60s
kube-system kube-apiserver-vm-12-12-centos 1/1 Running 0 61s
kube-system kube-controller-manager-vm-12-12-centos 1/1 Running 0 62s
kube-system kube-proxy-x8nhg 1/1 Running 0 47s
kube-system kube-scheduler-vm-12-12-centos 1/1 Running 0 60s
tigera-operator tigera-operator-6f669b6c4f-t8t9h 1/1 Running 0 46s

  • 由于是单机版,需要去除污点才能使用,执行以下命令

kubectl taint nodes --all node-role.kubernetes.io/master-

安装本地pv


  • 本地pv的作用是给所有pvc提供存储空间
  • 实测发现,安装本地pv的过程中,有两个镜像经常会拉取失败,建议您先下载tar到服务器,在服务器上通过docker load命令加载后再部署本地pv
  • 请在CSDN下载两个镜像的tar文件,地址如下(不要积分,免费下载)

  1. https://download.csdn.net/download/boling_cavalry/86908763 (下载后是个zip,解压后,文件夹里面才是真正的tar)
  2. https://download.csdn.net/download/boling_cavalry/86908874 (下载后是个zip,解压后,文件夹里面才是真正的tar)

  • 上述文件上传到CentOS,执行以下命令加载两个镜像

docker load < busybox.tar
docker load < local-pv.tar

  • 下载本地pv的配置文件&#xff0c;地址是&#xff1a;https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.22/deploy/local-path-storage.yaml
  • 然后打开此文件&#xff0c;做以下四步操作
  • 第一&#xff0c;如下图&#xff0c;删除debug哪一行
    在这里插入图片描述
  • 第二&#xff0c;找到reclaimPolicy&#xff0c;将其值从Delete改为Retain
    在这里插入图片描述
  • 第三&#xff0c;增加下面这句&#xff0c;使当前storageclass成为默认的storageclass
    在这里插入图片描述
  • 第四&#xff0c;修改下图红色箭头位置&#xff0c;指向您自己电脑为pv准备的位置
    在这里插入图片描述
  • 设置完毕后&#xff0c;执行命令kubectl apply -f local-path-storage.yaml即可完成本地pv的创建
  • 如下图红色箭头&#xff0c;新增的pv的pod
    在这里插入图片描述
  • 此时&#xff0c;k8s环境中的pvc&#xff0c;都可以使用storageClass&#61;local-path来使用本地磁盘了

安装Prometheus&#43;Grafana&#xff08;下载配置文件&#xff09;


  • 接下来会用operator的方式部署Prometheus&#43;Grafana&#xff0c;这是一种非常简单使用的方法
  • 有几个镜像下载会超时&#xff0c;因此改为下载国内镜像&#xff0c;然后用tag命令改为同名镜像即可&#xff0c;命令如下&#xff1a;

docker pull docker.io/willdockerhub/prometheus-adapter:v0.9.1
docker tag docker.io/willdockerhub/prometheus-adapter:v0.9.1 k8s.gcr.io/prometheus-adapter/prometheus-adapter:v0.9.1
docker pull bolingcavalry/kube-state-metrics:v2.3.0
docker tag bolingcavalry/kube-state-metrics:v2.3.0 k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.3.0

  • 现在要下载operator的配置文件了&#xff0c; 打开Prometheus operator的GitHub主页&#xff0c;首先确认自己的kubernetes版本应该使用哪个版本的Prometheus operator&#xff0c;如下图&#xff0c;我这里的kubernetes是1.22版本&#xff0c;因此使用的operator应该是release-0.9或者release-0.10
    在这里插入图片描述
  • 在operator的release页面&#xff0c;找到release-0.10版本点击下载
    在这里插入图片描述

安装Prometheus&#43;Grafana&#xff08;修改配置文件&#xff1a;对外暴露服务&#xff09;


  • 接下来对下载的配置文件做些修改

  • 首先是修改Grafana的service文件&#xff0c;因为默认的service是ClusterIP类型&#xff0c;无法从kubernetes外部访问的&#xff0c;这里改成集群外也可以访问service&#xff0c;打开文件kube-prometheus-0.10.0/manifests/grafana-service.yaml&#xff0c;新增箭头所指的两行&#xff0c;注意31330端口是我随便找的一个可用端口&#xff0c;您也可以随意&#xff0c;在30000-32767之间即可
    在这里插入图片描述

  • 如果想通过外部访问prometheus&#xff0c;可以用上述同样的方法修改prometheus-service.yaml文件

  • 另外&#xff0c;如果您像我一样是将服务部署在云上&#xff08;我这里是腾讯云&#xff09;&#xff0c;就涉及到公网IP的使用&#xff0c;请查找文件grafana-networkPolicy.yaml&#xff0c;如果有就删除&#xff08;0.10.0-release版本没有这个文件&#xff09;&#xff0c;如果不删除&#xff0c;就无发通过公网IP访问grafana

  • 对于prometheus也是一样&#xff0c;如果想从公网IP访问prometheus&#xff0c;需要删除文件prometheus-networkPolicy.yaml


安装Prometheus&#43;Grafana&#xff08;配置外部存储&#xff09;


  • 解决了外部访问的问题&#xff0c;接下来是存储问题了&#xff0c;如果不将Prometheus和grafana的数据保存在容器外部的话&#xff0c;只要pod被删&#xff0c;数据就丢失了&#xff0c;这在很多场景下是不可接受的
  • 既然前面咱们已经准备好了pv&#xff0c;那么这里就可以把prometheus和grafana的存储改为pvc&#xff0c;让它们的数据保存在pv上
  • 首先修改prometheus的存储配置&#xff0c;打开文件prometheus-prometheus.yaml&#xff0c;如下图&#xff0c;红框内是新增内容&#xff08;稍后我会把文字贴出来便于复制&#xff09;
    在这里插入图片描述
  • 上图红框中的内容如下

storage:
volumeClaimTemplate:
spec:
storageClassName: local-path
resources:
requests:
storage: 10Gi

  • 接着是grafana的存储&#xff0c;进入目录kube-prometheus-0.10.0/manifests/setup&#xff0c;新增名为grafana-pvc.yaml的文件&#xff0c;内容如下&#xff1a;

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: grafana
namespace: monitoring
spec:
storageClassName: local-path
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi

  • 然后还要修改deployment配置&#xff0c;打开文件grafana-deployment.yaml&#xff0c;找到下图红色箭头所指内容
    在这里插入图片描述
  • 替换成下图红框中的内容
    在这里插入图片描述

安装Prometheus&#43;Grafana&#xff08;数据采集权限&#xff09;


  • 需要给足prometheus权限&#xff0c;这样它才能采集到用于展示的数据&#xff0c;打开文件prometheus-clusterRole.yaml&#xff0c;新增一些权限配置&#xff0c;修改完毕后的完整内容如下所示&#xff0c;新增的位置主要在resources和varbs两处

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
labels:
app.kubernetes.io/component: prometheus
app.kubernetes.io/instance: k8s
app.kubernetes.io/name: prometheus
app.kubernetes.io/part-of: kube-prometheus
app.kubernetes.io/version: 2.32.1
name: prometheus-k8s
namespace: monitoring
rules:
- apiGroups:
- ""
resources:
- nodes/metrics
- services
- endpoints
- pods
verbs:
- get
- list
- watch
- nonResourceURLs:
- /metrics
verbs:
- get

  • 再执行以下操作&#xff0c;给prometheus增加管理员身份&#xff08;可酌情选择&#xff09;

kubectl create clusterrolebinding kube-state-metrics-admin-binding \
--clusterrole&#61;cluster-admin \
--user&#61;system:serviceaccount:monitoring:kube-state-metrics

  • 至此&#xff0c;配置已经修改完成&#xff0c;可以启动了

安装Prometheus&#43;Grafana&#xff08;安装和启动&#xff09;


  • 启动过程分为两步&#xff1a;先安装再启动
  • 首先&#xff0c;回到prometheus/kube-prometheus-0.10.0目录&#xff0c;执行以下命令开始安装

kubectl apply --server-side -f manifests/setup

  • 可能会遇到以下提示&#xff0c;我这边放心起见重复执行了一次安装命令&#xff0c;就没有此错误了

Error from server (NotFound): namespaces "monitoring" not found

  • 接下来可以启动了&#xff0c;执行以下命令

kubectl apply -f manifests/

  • 查看pod情况&#xff0c;如下图&#xff0c;大部分pod创建得很快&#xff0c;也有一两个稍微慢一点的&#xff0c;实测两三分钟可以全部ready
    在这里插入图片描述
  • 再去看看数据卷使用情况&#xff0c;如下图&#xff0c;已经分配好三个了
    在这里插入图片描述
  • 最后&#xff0c;如果您用的是云服务器&#xff0c;记得在公网放开端口&#xff0c;我这边是腾讯云服务器&#xff0c;放开方式如下图
    在这里插入图片描述

访问grafana


  • 现在可以访问grafana了&#xff0c;输入IP:端口&#xff0c;会提示输入账号密码&#xff0c;默认的账号密码都是admin
    在这里插入图片描述
  • 登录成功后会提示修改初始密码&#xff0c;按照提示操作即可
  • 然后就进入grafana页面了&#xff0c;里面已经内置了很多监控数据&#xff0c;这里挑一个物理服务器信息的监控数据看看&#xff0c;如下图
    在这里插入图片描述
  • 再去看看给pv使用的服务器磁盘&#xff0c;如下所示&#xff0c;已经创建了三个文件夹&#xff0c;都是容器在用的

[root&#64;VM-12-12-centos local-path-provisioner]# pwd
/opt/local-path-provisioner
[root&#64;VM-12-12-centos local-path-provisioner]# ls -al
total 20
drwxr-xr-x 5 root root 4096 Nov 5 10:02 .
drwxr-xr-x. 7 root root 4096 Oct 31 08:29 ..
drwxrwxrwx 3 root root 4096 Nov 5 10:06 pvc-0b8b93ae-944c-4433-a904-71c00d65c8ad_monitoring_prometheus-k8s-db-prometheus-k8s-0
drwxrwxrwx 6 root root 4096 Nov 5 10:53 pvc-9a5dccda-673f-4db8-a64e-baf4df5006cf_monitoring_grafana
drwxrwxrwx 3 root root 4096 Nov 5 10:06 pvc-bccf40a7-59a5-4472-a6a3-65f4898255d6_monitoring_prometheus-k8s-db-prometheus-k8s-1

  • 至此&#xff0c;k8s&#43;pv&#43;prometheus&#43;grafana环境已经搭建完成&#xff0c;这样的环境离生产环境还差得远&#xff0c;但是作为日常开发和测试已经基本合格&#xff0c;如果您对云原生感兴趣&#xff0c;想要简单快速的从零开始搭建一套环境用于学习和研发&#xff0c;希望本文能给您提供一些参考

  • 编写本文时&#xff0c;有些操作步骤参考了这位大佬的&#xff0c;在此表示感谢&#xff1a;http://www.javajun.net/posts/5019/index.html


你不孤单&#xff0c;欣宸原创一路相伴


  1. Java系列
  2. Spring系列
  3. Docker系列
  4. kubernetes系列
  5. 数据库&#43;中间件系列
  6. DevOps系列






推荐阅读
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的步骤和方法
    本文介绍了在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的详细步骤和方法。首先需要下载最新的Java SE Development Kit 9发行版,然后按照给出的Shell命令行方式进行安装。详细的步骤和方法请参考正文内容。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
author-avatar
月在杏花枝
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有