<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Kubernetes on luanrz's blog</title><link>https://luanrz.github.io/tags/kubernetes/</link><description>Recent content in Kubernetes on luanrz's blog</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Tue, 05 Dec 2023 20:48:07 +0800</lastBuildDate><atom:link href="https://luanrz.github.io/tags/kubernetes/index.xml" rel="self" type="application/rss+xml"/><item><title>构建Java云原生镜像：基于Quarkus的镜像</title><link>https://luanrz.github.io/posts/%E4%BA%91%E5%8E%9F%E7%94%9F/%E6%9E%84%E5%BB%BAjava%E4%BA%91%E5%8E%9F%E7%94%9F%E9%95%9C%E5%83%8F%E5%9F%BA%E4%BA%8Equarkus%E7%9A%84%E9%95%9C%E5%83%8F/</link><pubDate>Tue, 05 Dec 2023 20:48:07 +0800</pubDate><guid>https://luanrz.github.io/posts/%E4%BA%91%E5%8E%9F%E7%94%9F/%E6%9E%84%E5%BB%BAjava%E4%BA%91%E5%8E%9F%E7%94%9F%E9%95%9C%E5%83%8F%E5%9F%BA%E4%BA%8Equarkus%E7%9A%84%E9%95%9C%E5%83%8F/</guid><description>&lt;h2 id="一准备一个quarkus项目"&gt;一、准备一个Quarkus项目&lt;/h2&gt;
&lt;p&gt;可使用&lt;a href="https://quarkus.io/guides/cli-tooling"&gt;Quarkus CLI&lt;/a&gt;快速生成一个Quarkus项目，如下所示：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;quarkus create
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;该命令将生成一个名为&lt;code&gt;code-with-quarkus&lt;/code&gt;的项目，如果不想使用&lt;code&gt;quarkus-cli&lt;/code&gt;，也可基于&lt;a href="https://code.quarkus.io"&gt;Quarkus脚手架&lt;/a&gt;或&lt;a href="https://quarkus.io/guides/ide-tooling"&gt;IDE插件&lt;/a&gt;创建项目。&lt;/p&gt;</description></item><item><title>构建Java云原生镜像：基于SpringBoot的GraalVM镜像</title><link>https://luanrz.github.io/posts/%E4%BA%91%E5%8E%9F%E7%94%9F/%E6%9E%84%E5%BB%BAjava%E4%BA%91%E5%8E%9F%E7%94%9F%E9%95%9C%E5%83%8F%E5%9F%BA%E4%BA%8Espringboot%E7%9A%84graalvm%E9%95%9C%E5%83%8F/</link><pubDate>Tue, 05 Dec 2023 20:47:23 +0800</pubDate><guid>https://luanrz.github.io/posts/%E4%BA%91%E5%8E%9F%E7%94%9F/%E6%9E%84%E5%BB%BAjava%E4%BA%91%E5%8E%9F%E7%94%9F%E9%95%9C%E5%83%8F%E5%9F%BA%E4%BA%8Espringboot%E7%9A%84graalvm%E9%95%9C%E5%83%8F/</guid><description>&lt;h2 id="一引入graalvm组件"&gt;一、引入graalvm组件&lt;/h2&gt;
&lt;p&gt;在任意&lt;a href="https://luanrz.github.io/posts/%E4%BA%91%E5%8E%9F%E7%94%9F/%E6%9E%84%E5%BB%BAjava%E4%BA%91%E5%8E%9F%E7%94%9F%E9%95%9C%E5%83%8F%E5%9F%BA%E4%BA%8Espringboot%E7%9A%84%E5%88%86%E5%B1%82%E9%95%9C%E5%83%8F/#一准备一个springboot项目"&gt;SpringBoot项目&lt;/a&gt;的基础上，引入以下graalvm的maven插件：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.graalvm.buildtools&lt;span style="color:#f92672"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;native-maven-plugin&lt;span style="color:#f92672"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="二使用springboot插件构建镜像"&gt;二、使用SpringBoot插件构建镜像&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;spring-boot-maven-plugin&lt;/code&gt;插件下的&lt;code&gt;build-image&lt;/code&gt;执行目标提供了一键生成镜像的功能，如下所示：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mvn -Pnative spring-boot:build-image
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;执行该命令需要先启动Docker，执行完成后，会自动生成Docker镜像。&lt;/p&gt;</description></item><item><title>构建Java云原生镜像：基于SpringBoot的分层镜像</title><link>https://luanrz.github.io/posts/%E4%BA%91%E5%8E%9F%E7%94%9F/%E6%9E%84%E5%BB%BAjava%E4%BA%91%E5%8E%9F%E7%94%9F%E9%95%9C%E5%83%8F%E5%9F%BA%E4%BA%8Espringboot%E7%9A%84%E5%88%86%E5%B1%82%E9%95%9C%E5%83%8F/</link><pubDate>Tue, 05 Dec 2023 17:30:23 +0800</pubDate><guid>https://luanrz.github.io/posts/%E4%BA%91%E5%8E%9F%E7%94%9F/%E6%9E%84%E5%BB%BAjava%E4%BA%91%E5%8E%9F%E7%94%9F%E9%95%9C%E5%83%8F%E5%9F%BA%E4%BA%8Espringboot%E7%9A%84%E5%88%86%E5%B1%82%E9%95%9C%E5%83%8F/</guid><description>&lt;p&gt;Java应用上云接入K8S的第一步便是构建镜像，其最简单的方法就是直接将整个jar包打入Docker镜像。除此之外，SpringBoot还提供了一种分层镜像的方式，能够将基本不变的外部依赖包与经常发生变动的应用文件隔离成了不同的Docker层，在二次构建过程中，不变的外部依赖包的Docker层会默认使用缓存，以带来更快的构建速度。&lt;/p&gt;</description></item><item><title>Helm部署K8S时Secret大小超过1MB的问题</title><link>https://luanrz.github.io/posts/%E4%BA%91%E5%8E%9F%E7%94%9F/helm%E9%83%A8%E7%BD%B2k8s%E6%97%B6secret%E5%A4%A7%E5%B0%8F%E8%B6%85%E8%BF%871mb%E7%9A%84%E9%97%AE%E9%A2%98/</link><pubDate>Mon, 12 Jun 2023 15:33:44 +0800</pubDate><guid>https://luanrz.github.io/posts/%E4%BA%91%E5%8E%9F%E7%94%9F/helm%E9%83%A8%E7%BD%B2k8s%E6%97%B6secret%E5%A4%A7%E5%B0%8F%E8%B6%85%E8%BF%871mb%E7%9A%84%E9%97%AE%E9%A2%98/</guid><description>&lt;h2 id="一现象"&gt;一、现象&lt;/h2&gt;
&lt;p&gt;在使用Helm部署K8S应用时，发现&lt;code&gt;helm install&lt;/code&gt;指令报错，报错内容如下：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Error: create: failed to create: Secret &amp;#34;sh.helm.release.v1.xxxxxx-xxxxxxxx.v1&amp;#34; is invalid:
data: Too long: must have at most 1048576 bytes
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;上述报错信息表明，在Helm部署K8S创建Secret时，其内容超过了1048576 bytes（即1MB），导致部署失败。基于上述报错，可能需要考虑以下几点：&lt;/p&gt;</description></item><item><title>SpringCloud与K8S中的服务网关</title><link>https://luanrz.github.io/posts/%E4%BA%91%E5%8E%9F%E7%94%9F/springcloud%E4%B8%8Ek8s%E4%B8%AD%E7%9A%84%E6%9C%8D%E5%8A%A1%E7%BD%91%E5%85%B3/</link><pubDate>Fri, 12 May 2023 20:00:00 +0800</pubDate><guid>https://luanrz.github.io/posts/%E4%BA%91%E5%8E%9F%E7%94%9F/springcloud%E4%B8%8Ek8s%E4%B8%AD%E7%9A%84%E6%9C%8D%E5%8A%A1%E7%BD%91%E5%85%B3/</guid><description>&lt;p&gt;微服务中的服务网关至少有以下作用：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;转发（服务路由与负载均衡）&lt;/li&gt;
&lt;li&gt;鉴权（身份认证与权限校验）&lt;/li&gt;
&lt;li&gt;限流（流量控制与熔断）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它们在SpringCloud和K8S中有着不同的实现方式：&lt;/p&gt;</description></item><item><title>SpringCloud与K8S中的配置管理</title><link>https://luanrz.github.io/posts/%E4%BA%91%E5%8E%9F%E7%94%9F/springcloud%E4%B8%8Ek8s%E4%B8%AD%E7%9A%84%E9%85%8D%E7%BD%AE%E7%AE%A1%E7%90%86/</link><pubDate>Wed, 10 May 2023 20:00:00 +0800</pubDate><guid>https://luanrz.github.io/posts/%E4%BA%91%E5%8E%9F%E7%94%9F/springcloud%E4%B8%8Ek8s%E4%B8%AD%E7%9A%84%E9%85%8D%E7%BD%AE%E7%AE%A1%E7%90%86/</guid><description>&lt;p&gt;微服务中的配置管理在SpringCloud和K8S中有着不同的实现方式：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;SpringCloud&lt;/th&gt;
&lt;th&gt;K8S&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;配置管理&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;配置中心&lt;/strong&gt;（SpringCloudConfig、Nacos等）&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;ConfigMap、Secret&lt;/strong&gt;等&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;下面将基于&lt;code&gt;Nacos&lt;/code&gt;与&lt;code&gt;ConfigMap&lt;/code&gt;分别介绍SpinrgCloud与K8S中配置管理的过程。&lt;/p&gt;</description></item><item><title>SpringCloud与K8S中的服务调用</title><link>https://luanrz.github.io/posts/%E4%BA%91%E5%8E%9F%E7%94%9F/springcloud%E4%B8%8Ek8s%E4%B8%AD%E7%9A%84%E6%9C%8D%E5%8A%A1%E8%B0%83%E7%94%A8/</link><pubDate>Mon, 08 May 2023 10:19:50 +0800</pubDate><guid>https://luanrz.github.io/posts/%E4%BA%91%E5%8E%9F%E7%94%9F/springcloud%E4%B8%8Ek8s%E4%B8%AD%E7%9A%84%E6%9C%8D%E5%8A%A1%E8%B0%83%E7%94%A8/</guid><description>&lt;p&gt;微服务中的服务调用至少需要考虑以下几个方面：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;服务注册：动态存储服务的访问地址&lt;/li&gt;
&lt;li&gt;服务发现：动态获取服务的访问地址&lt;/li&gt;
&lt;li&gt;负载均衡：按照一定的规则获取同一服务的不同实例&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它们在SpringCloud和K8S中有着不同的实现方式：&lt;/p&gt;</description></item><item><title>Sleuth在K8S中的连接重置问题</title><link>https://luanrz.github.io/posts/%E4%BA%91%E5%8E%9F%E7%94%9F/sleuth%E5%9C%A8k8s%E4%B8%AD%E7%9A%84%E8%BF%9E%E6%8E%A5%E9%87%8D%E7%BD%AE%E9%97%AE%E9%A2%98/</link><pubDate>Tue, 13 Dec 2022 14:22:49 +0800</pubDate><guid>https://luanrz.github.io/posts/%E4%BA%91%E5%8E%9F%E7%94%9F/sleuth%E5%9C%A8k8s%E4%B8%AD%E7%9A%84%E8%BF%9E%E6%8E%A5%E9%87%8D%E7%BD%AE%E9%97%AE%E9%A2%98/</guid><description>&lt;h2 id="一前言"&gt;一、前言&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Sleuth是Java中的一种链路追踪组件&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;最近在使用K8S部署Java应用时，发现引入Sleuth组件后，日志中将会出现大量“Connection reset by peer”（连接重置）错误。这个错误不影响正常业务流程，但会极大污染日志内容。下面记录一下此问题的排查过程，以便后续参考。&lt;/p&gt;</description></item><item><title>Java应用部署K8S全流程：Docker镜像制作、Harbor镜像存储与Helm应用部署</title><link>https://luanrz.github.io/posts/%E4%BA%91%E5%8E%9F%E7%94%9F/java%E5%BA%94%E7%94%A8%E9%83%A8%E7%BD%B2k8s%E5%85%A8%E6%B5%81%E7%A8%8Bdocker%E9%95%9C%E5%83%8F%E5%88%B6%E4%BD%9Charbor%E9%95%9C%E5%83%8F%E5%AD%98%E5%82%A8%E4%B8%8Ehelm%E5%BA%94%E7%94%A8%E9%83%A8%E7%BD%B2/</link><pubDate>Sun, 11 Dec 2022 11:01:19 +0800</pubDate><guid>https://luanrz.github.io/posts/%E4%BA%91%E5%8E%9F%E7%94%9F/java%E5%BA%94%E7%94%A8%E9%83%A8%E7%BD%B2k8s%E5%85%A8%E6%B5%81%E7%A8%8Bdocker%E9%95%9C%E5%83%8F%E5%88%B6%E4%BD%9Charbor%E9%95%9C%E5%83%8F%E5%AD%98%E5%82%A8%E4%B8%8Ehelm%E5%BA%94%E7%94%A8%E9%83%A8%E7%BD%B2/</guid><description>&lt;h2 id="一前言"&gt;一、前言&lt;/h2&gt;
&lt;p&gt;Java应用部署到K8S（Kubernetes），一般需要镜像制作、镜像存储与应用部署这三个步骤。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;镜像制作：根据Java源代码生成符合OCI（开放容器标准）的镜像。可以使用&lt;code&gt;Docker&lt;/code&gt;完成镜像制作。&lt;/li&gt;
&lt;li&gt;镜像存储：将镜像上传到镜像仓库以便后续使用。这里的镜像仓库一般是指&lt;code&gt;Harbor&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;应用部署：根据镜像仓库中的镜像及其对应配置，将应用部署到K8S集群。K8S原生支持手动编写配置文件实现应用部署，&lt;code&gt;Helm&lt;/code&gt;简化了应用部署的过程。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;为了更好地理解云环境部署，可以类比传统的虚机部署。在云环境部署中：&lt;/p&gt;</description></item><item><title>Kubernetes入门</title><link>https://luanrz.github.io/posts/%E4%BA%91%E5%8E%9F%E7%94%9F/kubernetes%E5%85%A5%E9%97%A8/</link><pubDate>Fri, 01 Jul 2022 11:30:48 +0800</pubDate><guid>https://luanrz.github.io/posts/%E4%BA%91%E5%8E%9F%E7%94%9F/kubernetes%E5%85%A5%E9%97%A8/</guid><description>&lt;p&gt;kubernetes（k8s）是容器编排的利器。&lt;/p&gt;
&lt;p&gt;本文将介绍kubernetes本地环境的安装与基础使用，包括：创建集群、部署应用、故障排除、暴露服务、缩放应用、更新应用等内容，这里面大部分内容都来自于&lt;a href="https://kubernetes.io/zh-cn/docs/tutorials/"&gt;Kubernetes官方教程&lt;/a&gt;。&lt;/p&gt;</description></item></channel></rss>