k8s-应用部署与监控

k8s-应用部署与监控

SpringBoot应用

1.编写相关应用程序

@SpringBootApplication
@RestController
@Slf4j
public class DemoAppApplication {
    @RequestMapping("/")
    public String index(){
        log.info("有新的请求");
        return "恭喜你访问成功了";
    }
    public static void main(String[] args) {
        SpringApplication.run(DemoAppApplication.class, args);
    }

}

2.配置相关maven插件

            <!--docker打包插件-->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.4.13</version>
                <configuration>
                    <username>admin</username>
                    <password>shudi123</password>
                    <repository>${profiles.docker.repository}/paramland/${project.artifactId}</repository>
                    <tag>${project.version}</tag>
                    <buildArgs>
                        <jar_file_name>${project.build.finalName}.jar</jar_file_name>
                    </buildArgs>
                </configuration>
                <executions>
                </executions>
            </plugin>

3.编写Dockerfile文件

在pom同级目录下新增Dockerfile文件并且输入以下配置信息

FROM openjdk:8-jre-slim #指定基础镜像
MAINTAINER 戴渝  #指定实际维护人
ARG jar_file_name  # build时传进来的参数 ARG指令定义的参数,在docker build命令中以--build-arg a_name=a_value形式赋值。
#如果docker build命令传递的参数,在Dockerfile中没有对应的参数,将抛出如下警告:
WORKDIR /app  # 指定工具目录
ADD target/${jar_file_name} /app/app.jar # 将jar添加到工作目录中
ENV JAR_NAME ${jar_file_name}  #将jar的名称设置为环境变量
ENV JAVA_OPTS "-Xms128M -Xmx128M" #默认的java启动参数
EXPOSE 8055 #指定程序要暴露的端口号,请设置与实际端口号一致
ENTRYPOINT ["exec","java","java -jar ", " $JAVA_OPTS ", "app.jar"]

执行以下命令命令

mvn clean package dockerfile:build dockerfile:tag dockerfile:push -DskipTests

原生打包方式

docker build -t paramland/demo-app:1.0 . 

K8S配置

###demo配置 describe
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: demo-deployment
spec:
  selector:
    matchLabels:
      app: demo
  replicas: 1
  template:
    metadata:
      labels:
        app: demo
    spec:
      containers:
        - name: demo
          image: paramland/demo-app:1.0
          ports:
            - containerPort: 8080
      resources:
        requests: #需求限制
          cpu: 1000m #指定100毫核
          memory: 500Mi
        limits: #最大限制,需要大于等于requests配置
          cpu: 1000m
          memory: 500Mi
---
apiVersion: v1
kind: Service
metadata:
  name: demo-service
spec:
  type: NodePort
  selector:
    app: demo
  ports:
    - protocol: TCP
      port: 8080
      nodePort: 30006
      targetPort: 8080

CICD集成

k8s-应用部署与监控_第1张图片

监控

容器编排平台Kubernetes的热度一直不减,它帮助企业自动执行部署,扩展和操作应用程序容器。虽然Kubernetes使用现代化方式来构建和运行应用程序,但它的控制和可视化策略却并不完善,因此你需要一个专门的Kubernetes监控系统。

1.Prometheus

Prometheus(普罗米修斯)是Kubernetes使用上最受欢迎和最佳的监控工具之一。该工具由SoundCloud早期开发,后来捐赠给了CNCF。Prometheus将所有数据按时间顺序存储。简而言之,使Prometheus在其他时间序列数据库中脱颖而出的是它的内置警报机制,多维数据模型,PromQL查询语言,当然还有社区。

k8s-应用部署与监控_第2张图片

Prometheus的其他一些功能包括:

  • 不依赖分布式存储;

  • 通过服务发现或静态配置发现目标

  • PromQL,一种灵活的查询语言

  • 单服务器节点是自治的

  • 通过中间网关支持推送时间序列

  • 具有按指标名称和键/值对分析的时间序列数据的多维数据模型

  • 并且,多种形式的图形和仪表板支持

2.Kubewatch

Kubewatch是Kubernetes的监控工具,可以将K8s事件发布到团队通信应用程序Slack。Kubewatch在Kubernetes集群中作为Pod运行,并监控系统中发生的更改。你可以通过编辑配置文件来指定要接收的通知。

k8s-应用部署与监控_第3张图片

它在Golang中创建,并使用Kubernetes客户端库与Kubernetes API服务器连接。该库是监控Kubernetes事件的基础。kubewatch可监控特定Kubernetes资源所需的更改-部署,pod,服务,副本集,服务,复制控制器和配置映射等。

3.Jaeger

Jaeger是一个追踪系统,由Uber发布。它用于监控事务和复杂的分布式系统中的故障排除。Jaeger具有针对Java,Python,Node和C ++的基于OpenTracing的工具。它使用一致的前期采样以及每个服务/端点的概率,并支持多个存储后端-Cassandra,Elasticsearch,Kafka和内存。

k8s-应用部署与监控_第4张图片

Jaeger的其他一些功能包括:

  • 分布式交易监控

  • 分布式上下文传播

  • 性能/延迟优化

  • 根本原因分析

  • 服务依赖性分析

4.cAdvisor

cAdvisor设计用于组装,处理和导出有关正在运行的容器的资源使用情况和生产信息。它还被开发成Kubernetes,并集成到Kubelet二进制文件中。与其他服务器不同,cAdvisor不在每个吊舱中部署,而是在节点级别部署。它将自动确定系统上运行的所有容器,并收集系统指标,例如内存,CPU,网络等。cAdvisor是一个基本工具,以下是其一些功能。

k8s-应用部署与监控_第5张图片

  • 对Docker容器的本地支持,并有助于其他容器类型。

  • 支持将统计信息导出到各种存储插件,例如。InfluxDB等,

  • 它通过分析计算机上的“根”容器来提供整个计算机的使用情况。

  • 支持在Docker或任何其他容器之外独立运行。

  • cAdvisor在每个节点上运行。它会自动发现给定节点中的所有容器,并收集CPU,文件系统和网络使用情况统计信息。

  • 可以在Web-UI上查看指标,该UI导出有关系统上所有容器的实时信息。

5.Cabin

Cabin是Kubernetes最好的原生移动仪表板应用程序。UI是使用React Native开发的,因此可以同时运行iOS和Android设备。它是移动助手,它提供细粒度的操作来操纵Kubernetes资源。其他一些功能:

k8s-应用部署与监控_第6张图片

  • 创建基本部署扩展部署和复制控制器

  • 切换服务类型

  • 通过服务公开部署

  • 与GKE集成以实现单击集群配置

  • 访问多个容器中的日志

  • 删除并添加标签

  • 在浏览器中打开NodePort服务

  • 在容器中执行命令

6.Telepresence

Telepresence使你可以在将特定服务连接到远程Kubernetes集群时在本地运行特定服务。这使从事多服务操作的开发人员可以采用本地安装的任何工具来检查/调试/编辑服务。例如,可以运行调试器或IDE。

它也使开发人员可以快速进行特定服务的本地开发,即使该服务依赖于集群中的单独服务。过渡到你的服务并保存,可以立即发现正在使用的新服务。远程呈现是一个令人印象深刻的本地开发环境,用于在Kubernetes中运行的服务。实时调试部分是独特的,并且发展很快。以下是其更多功能。

  • 允许容器中运行的代码连接到主机上运行的IDE或调试器。

  • Telepresence在观察OpenShift集群时会使用特定于OpenShift的代理镜像。

  • Telepresence还支持与Pod中其他容器之间的转发流量。

  • Telepresence使用Docker可访问目录作为临时目录。

7.Weave Scope

Weave Scope是Kubernetes的故障排除和监控工具。它为应用程序和基础结构提供了逻辑拓扑,这有助于你考虑,监控和控制基于容器的,基于微服务的应用程序。

k8s-应用部署与监控_第7张图片

它提供了自顶向下的视图,可查看应用程序以及完整的基础架构。它授权实时确定分布式容器化应用程序的任何问题,因为该应用程序已部署到云提供商。Weave Scope的一些功能包括:

  • 支持任何部署样式(本地,托管或混合),并具有收集和报告主机/容器指标的能力

  • 汇总来自Kubernetes的指标,事件和标签

  • 实时上下文指标

  • 可以通过CPU和内存管理来过滤节点,以便你可以使用最多的资源快速识别容器。

8.Grafana

Grafana用于可视化指标,但也可以用作报警工具。Grafana可以在Slack,Webhook,邮件或其他通信渠道上发出警报。另一个关键原因是数据的来源:Grafana可以同时查询多个实体。

k8s-应用部署与监控_第8张图片

可以从像ElasticSearch这样的数据库中查询,或者从像Cloudwatch这样的监控工具中查询,也可以在上面设置警报。其他一些功能如下。

  • 警报管理器处理警报部分

  • 该应用程序还使用Kubernetes标签来过滤Pod指标。

  • Pod/Container仪表板利用Pod标签,以便轻松找到相关的一个或多个Pod。

9.Zabbix

使用Zabbix,可以同时控制成千上万台服务器,虚拟机和网络设备的高性能实时监控系统。除了保存数据外,还可以访问可视化功能,以及用于报警目的的极其灵活的数据查找方法。Zabbix的一些功能包括:

k8s-应用部署与监控_第9张图片

  • 根本原因分析

  • Zabbix帮助将数据保留为JSON格式,因此许多应用程序也可以使用它。

  • 实时监控

  • 强烈建议将Zabbix代理用于大规模生产系统。

  • 深入报告

  • 低级发现会自动检查新节点,而不会费力。

  • 高度可配置和可扩展。

https://blog.csdn.net/yunqiinsight/article/details/104929329)

你可能感兴趣的:(运维,java,spring,boot,开发语言)