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

程序员欣宸 程序员欣宸     2022-12-02     720

关键词:

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

安装Prometheus+Grafana(下载配置文件)

  • 接下来会用operator的方式部署Prometheus+Grafana,这是一种非常简单使用的方法
  • 有几个镜像下载会超时,因此改为下载国内镜像,然后用tag命令改为同名镜像即可,命令如下:
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的配置文件了, 打开Prometheus operator的GitHub主页,首先确认自己的kubernetes版本应该使用哪个版本的Prometheus operator,如下图,我这里的kubernetes是1.22版本,因此使用的operator应该是release-0.9或者release-0.10
  • 在operator的release页面,找到release-0.10版本点击下载

安装Prometheus+Grafana(修改配置文件:对外暴露服务)

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

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

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

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

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

安装Prometheus+Grafana(配置外部存储)

  • 解决了外部访问的问题,接下来是存储问题了,如果不将Prometheus和grafana的数据保存在容器外部的话,只要pod被删,数据就丢失了,这在很多场景下是不可接受的
  • 既然前面咱们已经准备好了pv,那么这里就可以把prometheus和grafana的存储改为pvc,让它们的数据保存在pv上
  • 首先修改prometheus的存储配置,打开文件prometheus-prometheus.yaml,如下图,红框内是新增内容(稍后我会把文字贴出来便于复制)
  • 上图红框中的内容如下
  storage:
    volumeClaimTemplate:
      spec:
        storageClassName: local-path
        resources:
          requests:
            storage: 10Gi
  • 接着是grafana的存储,进入目录kube-prometheus-0.10.0/manifests/setup,新增名为grafana-pvc.yaml的文件,内容如下:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: grafana
  namespace: monitoring
spec:
  storageClassName: local-path
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  • 然后还要修改deployment配置,打开文件grafana-deployment.yaml,找到下图红色箭头所指内容
  • 替换成下图红框中的内容

安装Prometheus+Grafana(数据采集权限)

  • 需要给足prometheus权限,这样它才能采集到用于展示的数据,打开文件prometheus-clusterRole.yaml,新增一些权限配置,修改完毕后的完整内容如下所示,新增的位置主要在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
  • 再执行以下操作,给prometheus增加管理员身份(可酌情选择)
kubectl create clusterrolebinding kube-state-metrics-admin-binding \\
--clusterrole=cluster-admin  \\
--user=system:serviceaccount:monitoring:kube-state-metrics
  • 至此,配置已经修改完成,可以启动了

安装Prometheus+Grafana(安装和启动)

  • 启动过程分为两步:先安装再启动
  • 首先,回到prometheus/kube-prometheus-0.10.0目录,执行以下命令开始安装
kubectl apply --server-side -f manifests/setup
  • 可能会遇到以下提示,我这边放心起见重复执行了一次安装命令,就没有此错误了
Error from server (NotFound): namespaces "monitoring" not found
  • 接下来可以启动了,执行以下命令
kubectl apply -f manifests/
  • 查看pod情况,如下图,大部分pod创建得很快,也有一两个稍微慢一点的,实测两三分钟可以全部ready
  • 再去看看数据卷使用情况,如下图,已经分配好三个了
  • 最后,如果您用的是云服务器,记得在公网放开端口,我这边是腾讯云服务器,放开方式如下图

访问grafana

  • 现在可以访问grafana了,输入IP:端口,会提示输入账号密码,默认的账号密码都是admin
  • 登录成功后会提示修改初始密码,按照提示操作即可
  • 然后就进入grafana页面了,里面已经内置了很多监控数据,这里挑一个物理服务器信息的监控数据看看,如下图
  • 再去看看给pv使用的服务器磁盘,如下所示,已经创建了三个文件夹,都是容器在用的
[root@VM-12-12-centos local-path-provisioner]# pwd
/opt/local-path-provisioner
[root@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
  • 至此,k8s+pv+prometheus+grafana环境已经搭建完成,这样的环境离生产环境还差得远,但是作为日常开发和测试已经基本合格,如果您对云原生感兴趣,想要简单快速的从零开始搭建一套环境用于学习和研发,希望本文能给您提供一些参考

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

你不孤单,欣宸原创一路相伴

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

云原生kubernetes基于minikube搭建第一个k8s集群

...)一个K8s部署工具,提供kubeadminit和kubeadmjoin ;用于快速搭建k8s集群,比较推荐(也是官方推荐的方式); 二进制包搭建github下载发行版二进制包,手动部署每个组件,组成Kubernete 查看详情

边缘使用k8s门槛太高?openyurt这个功能帮你快速搭建集群!(代码片段)

...xff1a; 为了降低OpenYurt的使用门槛,帮助更多地开发者快速上手OpenYurt,社区提供了OpenYurt易用性工具yurtctl。该工具致力于屏蔽OpenYurt集群创建的复杂性,帮助开发者在本地快速地搭建OpenYurt开发测试集群。OpenYurt作为阿... 查看详情

边缘使用k8s门槛太高?openyurt这个功能帮你快速搭建集群!(代码片段)

...:为了降低OpenYurt的使用门槛,帮助更多地开发者快速上手OpenYurt,社区提供了OpenYurt易用性工具yurtctl。该工具致力于屏蔽OpenYurt集群创建的复杂性,帮助开发者在本地快速地搭建OpenYurt开发测试集群。OpenYurt作为阿... 查看详情

云原生|kubernetes篇自建高可用k8s集群搭建(代码片段)

文末有惊喜文章目录自建高可用k8s集群搭建一、所有节点基础环境1、环境准备与内核升级2、安装Docker二、PKI三、证书工具准备1、下载证书工具2、ca根配置3、ca签名请求4、生成证书5、k8s集群是如何使用证书的四、etcd高可用搭建... 查看详情

云原生kubernetes部署k8s集群架构(admin部署)(代码片段)

...前主流的方式有kubeadm、minikube、二进制包minikube:一个用于快速搭建单节点kubenetes的工具kubeadm:一个用于快速搭建kubenetes集群的工具二进制包:从官网下载每个组件的二进制包,一次去安装,此方式对于理解kubernetes组件... 查看详情

云原生开发框架dapr环境搭建:cli安装和初始化

dapr是微软的一个云原生(CloudNative)开源项目,英文全称:Distributed Application Runtime,中文要翻译的话就是:分布式应用运行时。也就是一个运行时框架,面向云原生架构。dapr官网地址:Dapr-Distribu... 查看详情

自己搭建一个k8s环境(代码片段)

背景Kubernetes是时下流行的容器编排引擎,因为字母太多,且掐头去尾后剩下8个字母,于是被大家亲切的缩写为k8s。Kubernetes https://kubernetes.io/另外所谓“云原生”概念火爆,各大云厂商也纷纷推出了自己的容器服... 查看详情

云原生centos7搭建安装k8s集群v1.25版本详细教程实战(代码片段)

文章目录前言一.实验环境二.k8s的介绍三.k8s的安装3.1搭建实验环境3.1.1硬件层面的要求3.1.2软件层面环境配置3.2docker的安装3.2.1搭建docker3.2.2部署cri-dockerd3.3部署k8s3.3.1配置添加阿里云的yum源3.3.2安装kubeadmkubeletkubectl3.3.3k8s-master节点... 查看详情

云原生系列三:k8s应用安全加固技术

...K8s集群时,开发者面临的主要挑战是如何管理安全风险。快速解决此问题的一个好方法是在开发过程中对应用清单进行安全加固。本文,将介绍10种开发者可以对应用程序应用加固的方法。以下技术允许在开发过程中测试强化版... 查看详情

学习kubernetes,从快速搭建k8s集群开始(代码片段)

本系列文章,我们将在UbuntuServer18.04上搭建k8s环境进行入门学习。为了使用原生的UbuntuServer18.04,我们将使用multipass来创建多台UbuntuServer18.04虚拟环境。也就是说,如果你想完整参考本系列博客学习,你电脑上应当安装并能正常运... 查看详情

云原生•kubernetes搭建k8s集群(kubeadm方式)(代码片段)

....多master集群(推荐)二、集群环境硬件配置要求三、k8s集群搭建(Kubeadm方式)1.主机准备2.系统初始化3.Docker的安装4.添加阿里云yum源5.kubeadm、kubelet、kubectl的安装6.在Master节点中部署集群7.将node节点加入集群8.部署CNI网络插件四、方法... 查看详情

云原生之kubernetes实战在k8s环境下部署kubegems云管理平台

【云原生之kubernetes实战】在k8s环境下部署KubeGems云管理平台一、KubeGems介绍1.KubeGems简介2.KubeGems特点3.KubeGems产品生态二、检查本地k8s环境1.检查工作节点状态2.检查系统pod状态三、安装KubeGemsInstaller控制器1.KubeGemsInstaller介绍2.创建... 查看详情

k8s云管理平台umc角色权限体系

...趋。对于企业而言,已建立的内部集成并不能支撑其快速搭建开发环境、快速部署集群服务,并且动态水平扩展对多组织情况许可费用高昂、没有敏捷快速迭代机制,导致开发完毕就落伍,以及不能快速进行产品... 查看详情

云原生之kubernetes实战在k8s环境下部署kubegems云管理平台

【云原生之kubernetes实战】在k8s环境下部署KubeGems云管理平台一、KubeGems介绍1.KubeGems简介2.KubeGems特点3.KubeGems产品生态二、检查本地k8s环境1.检查工作节点状态2.检查系统pod状态三、安装KubeGemsInstaller控制器1.KubeGemsInstaller介绍2.创建... 查看详情

云原生|从零开始学kubernetes二使用kubeadm搭建k8s集群(代码片段)

...以访问外网禁止swap分区kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。准备环境角色IPmaster192.168.11.139node1192.168.11.140node2192.168.11.141初始化首先,我们要在三台机子上做一些操作。关闭防火墙,selinux,sw... 查看详情

云原生之kubernetes实战在k8s集群下搭建gitlab(代码片段)

【云原生之kubernetes实战】在k8s集群下搭建gitlab一、gitlab介绍1.gitlab简介2.gitlab的特点3.github和gitlab区别二、检查本地k8s集群状态三、安装nfs共享存储1.安装nfs2.创建共享目录3.配置共享目录4.使配置生效5.重启nfs相关服务①设置nfs服... 查看详情

云原生之kubernetes实战使用sealos部署k8s集群环境

【云原生之kubernetes实战】使用Sealos部署k8s集群一、Sealos介绍1.Sealos简介2.Sealos特性3.Sealos图示二、本地k8s节点环境1.节点规划2.节点系统版本三、下载Sealos工具包四、初始环境配置1.关闭防火墙和selinux2.配置host文件解析3.配置时间... 查看详情

云原生之kubernetes实战使用sealos部署k8s集群环境

【云原生之kubernetes实战】使用Sealos部署k8s集群一、Sealos介绍1.Sealos简介2.Sealos特性3.Sealos图示二、本地k8s节点环境1.节点规划2.节点系统版本三、下载Sealos工具包四、初始环境配置1.关闭防火墙和selinux2.配置host文件解析3.配置时间... 查看详情