比Minikube更快,使用Kind快速创建K8S学习环境

比Minikube更快,使用Kind快速创建K8S学习环境

简述 K8S 如火如荼的发展着,越来越多人想学习和了解 K8S,但是由于 K8S 的入门曲线较高很多人望而却步。 然而随着 K8S 生态的蓬勃发展,社区也呈现了越来越多的部署方案,光针对生产可用的环境就有好几种部署方案,对于用来测试和学习环境也同样提供了好几种简单可用的方案。 今天我们来介绍一种用于测试、学习环境快速搭建 K8S 环境的方案:Kind。 Kind 的官网是:https://kind.sigs.k8s.io/ 那么 Kind 相比于 Minikube 有什么优势呢? 基于 Docker 而不是虚拟化 运行架构图如下: Kind 不是打包一个虚拟化镜像,而是直接讲 K8S 组件运行在 Docker。带来了什么好处呢? 不需要运行 GuestOS 占用资源更低。 不基于虚拟化技术,可以在 VM 中使用。 文件更小,更利于移植。 支持多节点 K8S 集群和 HA Kind 支持多角色的节点部署,你可以通过配置文件控制你需要几个 Master 节点,几个 Worker 节点,以更好的模拟生产中的实际环境。 回到目录 安装 Kind Kind 的安装非常简单,只有一个二进制文件,如果大家嫌麻烦,可以直接去 GitHub releases 上下载二进制文件即可。 下面的安装方式来自 Kind 文档 https://kind.sigs.k8s.io/docs/user/quick-start/ macOS / Linux curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.8.1/kind-$(uname)-amd64 chmod +x ./kind mv ./kind /some-dir-in-your-PATH/kind macOS / Linux 使用 Homebrew brew install kind Windows curl.exe -Lo kind-windows-amd64.exe https://kind.sigs.k8s.io/dl/v0.8.1/kind-windows-amd64 Move-Item .\kind-windows-amd64.exe c:\some-dir-in-your-PATH\kind.exe Windows 使用 Chocolatey choco install kind 回到目录 创建 K8S 集群 如果你在 macOS 或 Windows 中使用 Docker 那么至少需要设置 Docker VM 的内存至 6GB,Kind 建议设置为 8GB。 不是不基于虚拟化技术吗?为什么还有 Docker VM? 因为 Docker 其实只支持 Linux,macOS 和 Windwos 是基于虚拟化技术创建了一个 Linux VM。在 Linux 系统上则不存在这些问题。 最简单的情况,我们使用一条命令就能创建出一个单节点的 K8S 环境 kind create cluster 可是呢,默认配置有几个限制大多数情况是不满足实际需要的,默认配置的主要限制如下: APIServer 只监听了 127.0.0.1,也就意味着在 Kind 的本机环境之外无法访问 APIServer 由于国内的网络情况关系,Docker Hub 镜像站经常无法访问或超时,会导致无法拉取镜像或拉取镜像

Helm, 在Kubernetes中部署应用的利器

Helm, 在Kubernetes中部署应用的利器

一、背景 Kubernetes(k8s)是一个基于容器技术的分布式架构领先方案。它在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。 在容器云环境及容器化服务在业界开始大规模部署应用的前提下,Kubernetes在业界的实际应用情况又是怎样的呢?在今年召开的JFrog SwampUp用户大会上,Codefresh公司为大家展示了一些有意思的数据。如下图: 据Codefresh公司统计,在目前JFrog的企业用户当中,有80%已经使用了Kubernetes,这说明Kubernetes已经得到了业界的认可并开始了广泛的应用。然而,只有5%的JFrog用户在生产环境中使用Kubernetes。也就是说,企业更多的只是在自己的研发、测试环境中去使用 Kubernetes。这是什么原因呢?JFrog通过自身在Kubernetes应用上的大量实践证明,“Kubernetes is hard”,直接使用Kubernetes去部署和管理容器化的云服务,尤其是基于微服务的云服务,是非常具有挑战性的工作。 那如何才能更便捷地应用Kubernetes呢?JFrog选择了Helm,Kubernetes的官方包管理工具。我们再来看Codefresh提供的另一组数据,如下图: 和上一组数据一样,只有5%的JFrog企业用户在生产环境使用了Kubernetes。但同时,也有5%的JFrog用户使用了Helm。可见,当把Kubernetes应用到生产环境的时候,众多企业也和JFrog一样,选择了Helm这一“利器”。 为什么Helm会受到这样的青睐?本文将通过JFrog实施Helm和Kubernetes的实践来介绍和分析Helm的优势所在。 二、Helm是什么 在介绍Helm之前,我们先来看看直接应用Kubernetes部署云服务会遇到哪些困难。 Kubernetes使用yaml文件来描述和管理服务中各个组件的配置和部署需求,每个组件对应一个yaml文件。当下的云服务通常都是由多个组件构成的,如何配置和处理好这些组件,也就是多个yaml文件之间的关联关系,成为了Kubernetes应用的额外任务。而当云服务升级,却仅仅涉及其中一个或某几个模块时,升级模块的新yaml文件和已有yaml文件之间的关联关系就会变得更加错综复杂,从而更增加了使用Kubernetes来配置和管理升级的难度。 其次,Kubernetes把组件的配置信息也直接记录到yaml文件当中。从描述组件的角度来讲,这种方式确实比较清晰。但是,当云服务的部署面对多个环境,如不同的开发、测试、产品环境(这也是当前比较常见的应用场景)时,要如何处理这些环境配置之间的差别?要为每个环境都开发和维护一套不同的yaml文件?

使用 Kind 搭建你的本地 Kubernetes 集群

使用 Kind 搭建你的本地 Kubernetes 集群

Kind 是我很喜欢也一直在参与的项目,我计划将 Kind 相关的文章写成一个系列。(flag++) 这是第一篇。 Kind 介绍 Kind 是 Kubernetes In Docker 的缩写,顾名思义是使用 Docker 容器作为 Node 并将 Kubernetes 部署至其中的一个工具。官方文档中也把 Kind 作为一种本地集群搭建的工具进行推荐。 安装 二进制安装 Kind 使用 Golang 进行开发,在仓库的 Release 页面,已经上传了构建好的二进制,支持多种操作系统,可直接按需下载进行使用。 e.g. # 下载最新的 0.2.0 版本 wget -O /usr/local/bin/kind https://github.com/kubernetes-sigs/kind/releases/download/0.2.0/kind-linux-amd64 && chmod +x /usr/local/bin/kind 复制代码 通过源码安装 如果你本地已经配置好了 Golang 的开发环境,那你可以直接通过源码进行安装。 e.g. go get -u sigs.k8s.io/kind 复制代码 运行完上述命令后,会将 kind 的可执行文件放到 $(go env GOPATH)/bin 文件夹内,你可能需要将此目录加入到 $PATH 中。 或者也可以先 clone 源代码再通过 go build 进行构建。 依赖 Kind 的主要功能目前需要有 Docker 环境的支持,可参考 Docker 官方文档进行安装。 如果需要操作集群,则需要安装 kubectl 命令行。安装方法可参考官方文档 搭建单节点集群 以下的演示均使用最新的代码(即通过源码安装)。 基础用法 搭建单节点集群是 Kind 最基础的功能。 e.g. master $ kind create cluster --name moelove Creating cluster "moelove" ... ✓ Ensuring node image (kindest/node:v1.13.4) 🖼 ✓ Preparing nodes 📦 ✓ Creating kubeadm config 📜 ✓ Starting control-plane 🕹️ Cluster creation complete. You can now use the cluster with: export KUBECONFIG="$(kind get kubeconfig-path --name="moelove")" kubectl cluster-info 复制代码 以上命令中, --name 是可选参数,如不指定,默认创建出来的集群名字为 kind。 我们根据命令执行完的输出进行操作: master $ export KUBECONFIG="$(kind get kubeconfig-path --name="moelove")" master $ kubectl cluster-info Kubernetes master is running at https://localhost:34458 KubeDNS is running at https://localhost:34458/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'. master $ kubectl get nodes

Local Kubernetes with kind, Helm & Dashboard

Local Kubernetes with kind, Helm & Dashboard

Because we don’t have to mess up our local machine with dev configuration! We already know that all the cool devs are using Docker for the local development environment. And there is Kuberenetes for the coolest group. But if we want to try out the application in a local Kubernetes node before deploying it to the production, things might become a bit complicated. And we have an hassle free solution for it! Let’s see how we can do that. The only prerequisite is — Docker. Let’s assume we already have Docker installed and running. minikube (alternative) We can use minikube to run and test an application (image) in local Kubernetes. But it is super slow (my Macbook Pro starts radiating heat after a while). So, we are not going to use it. kind (Kubernetes) We are going to use — kind. It is runs local Kubernetes cluster in Docker container. Thus, it requires very little time to up and stop the Kubernetes node. We can follow the Quick Start section of their official docs to install kind. After we are done installing kind, we can create our Kubernetes cluster with the following command — kind create cluster --name local It may take a while to download the Docker image for the first time and we will see the following output when the cluster is created. Now, we have a running Kubernetes cluster for local development. Thankfully, it automatically switches to the newly created kubectl context :) Next stop, Helm! Helm Helm is a package manager for Kubernetes. We will use it to deploy our Kubernetes Dashboard with just a single line of command. Follow the installation guide in the official documentation to install Helm. If you are running OSX like me and using Homebrew then just run the following command in terminal brew install helm Kubernetes Dashboard Add Chart Repo Helm uses a chart file to deploy any application. These chart files hold the configuration for that application that defines the controller, service, secret, and other resources for the application. A reposito

惊:FastThreadLocal吞吐量居然是ThreadLocal的3倍!!!

惊:FastThreadLocal吞吐量居然是ThreadLocal的3倍!!!

说明 接着上次手撕面试题ThreadLocal!!!面试官一听,哎呦不错哦!本文将继续上文的话题,来聊聊FastThreadLocal,目前关于FastThreadLocal的很多文章都有点老有点过时了(本文将澄清几个误区),很多文章关于FastThreadLocal介绍的也不全,希望本篇文章可以带你彻底理解FastThreadLocal!!! FastThreadLocal是Netty提供的,在池化内存分配等都有涉及到! 关于FastThreadLocal,零度准备从这几个方面进行讲解: FastThreadLocal的使用。 FastThreadLocal并不是什么情况都快,你要用对才会快。 FastThreadLocal利用字节填充来解决伪共享问题。 FastThreadLocal比ThreadLocal快,并不是空间换时间。 FastThreadLocal不在使用ObjectCleaner处理泄漏,必要的时候建议重写onRemoval方法。 FastThreadLocal为什么快? FastThreadLocal的使用 FastThreadLocal用法上兼容ThreadLocal FastThreadLocal使用示例代码: public class FastThreadLocalTest { private static FastThreadLocal<Integer> fastThreadLocal = new FastThreadLocal<>(); public static void main(String[] args) { //if (thread instanceof FastThreadLocalThread) 使用FastThreadLocalThread更优,普通线程也可以 new FastThreadLocalThread(() -> { for (int i = 0; i < 100; i++) { fastThreadLocal.set(i); System.out.println(Thread.currentThread().getName() + "====" + fastThreadLocal.get()); try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } } }, "fastThreadLocal1").start(); new FastThreadLocalThread(() -> { for (int i = 0; i < 100; i++) { System.out.println(Thread.currentThread().getName() + "====" + fastThreadLocal.get()); try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } } }, "fastThreadLocal2").start(); } } 代码截图: 代码运行结果: 我们在回顾下之前的ThreadLocal的 最佳实践做法: try { // 其它业务逻

联系我们

联系电话

4000-640-466

联系邮箱

service@f-li.cn

办公地址

上海黄浦区外滩源1号

谢谢,您的信息已成功发送。
请填写信息。