首页 文章 精选 留言 我的

精选列表

搜索[环境],共10000篇文章
优秀的个人博客,低调大师

踏上kubernetes的第一步:集群环境部署介绍

一、简介 redhat 在今年9月份发布了k8s 和 etcd 的yum 源(redhat 7),我们下面都是基于redhat 7操作系统以yum来构建k8s集群,你也可以到github 下载kubernetes 进行安装部署 下面是k8s集群架构 二、架构部署 基本信息 2.1 etcd 安装配置(etcd) 安装etcd 配置 etcd配置文件 这里我直接使用脚本进行替换配置,也可以手工修改,主要是配置etcd地址,这里主要做演示,就不搭建etcd集群了,如果搭建etcd集群可以参考coreos doc 构建etcd集群。 注意:这里的ip变量,因为我的地址是192网段, 所以我这里简单点直接grep 192来过滤。 配置etcd 启动 2.2 kube master 安装配置(kubem) 安装 k8s master 配置 master默认配置 配置k8s master 启动 2.3 kube minion 安装配置(minion1,minion2) 安装 k8s minion + docker(注意k8s 2个节点都需要同样配置) 配置 k8s minion配置文件 启动k8s minion + docker 到此我们k8s集群搭建完成了,我们可以使用如下命令在k8s master执行获取nodes信息: 2.4 使用工具quagga 配置容器间网络互通 从前面k8s集群搭建,你会看到网上搜索的k8s集群搭建容器网络互通大部分都基于flannel 来做,但这里我们使用quagga 来实现容器互通,使用quagga来做主要是觉得目前flannel通过端口转发方式实现容器互通,从性能上来看还不太理想,同时flannel本身还不够稳定,quagga的配置步奏如下: 安装brctl工具 删除默认的docker0 网卡,并创建新的网卡kbr0 配置kbr0 IP(我们写入一个配置文件到操作系统的网络配置目录) 这里注意:每个minion 节点配置不同的IPADDR,假设minion1 为172.11.11.1 ,则可以配置minion2为172.12.12.1,同时更改网关同步配置 更改docker默认参数配置,让docker默认使用kbr0网卡 重启network和docker 注意:如果重启network 没有加载kbr0,则需要重启操作系统 这里有网友直接将quagga 配置好并打包为docker image,我们直接拿来使用,我们也可以自行在宿主机上安装quagga 等待几秒钟,我们通过以下命令查看,可以看到route自动更新了。 注意:如果你执行命令route -n没有发现更新,你可以尝试stop 系统防火墙,再执行命令查看。 三、kube-ui 安装 kubernetes 自带了一个kube-ui,用来展示kubernetes 集群状态,目前kube-ui 还比较简单,只展现了kube 节点资源使用率,rc,service,pod ,nodes 情况,默认情况下安装kubernetes 集群是没有安装kube-ui的,需要我们手工安装。 注意:在安装kube-ui 之前,你需要把kube master服务器与其他kube minon 容器大二层网络互通,直接办法就是前面讲到的使用工具quagga 配置容器间网络互通这一节的流程在kube master 服务器上执行一次,可以在kube master上配置一个网卡kbr0 ,网络配置也跟其他minion节点容器网络相同域,让kube master 也能访问到kube minion 容器网络,否则kube-ui 安装好后会报无法访问minion pod地址。 安装配置准备工作 kube-ui的docker image是在google gcr中,由于众所周知的原因,我们在国内无法访问到这个源,这里我将源下载下来放到百度云盘中,我们可以将此image 下载下来后通过docker load 命令进行导入到kube minion或者私有仓库中。 kube-ui image 国内源 同时我们要用到3个文件 分别是kube-ui rc ,svc,kube-system,这3个文件,rc和service 在kubernetes 安装包kubernetes\cluster\addons\kube-ui路径下,你可以从github下载kubernetes 获取这2个文件,kube-system 文件需要你自己定义构建,由于kubernetes 完整安装包非常大,我这里直接将这3个文件内容展示,你可以直接复制内容命名一个文件名称使用kubectl create -f 进行创建,同时这里我将kubernetes 1.1版本直接搬到了百度云上,有需要可以下载: kuberntes 1.1版本 国内下载地址 下面是kube-ui rc,svc 和kube-system 内容,创建的顺序是kube-system-->kube-ui-rc-->kube-ui-svc。 kube-system.yaml kube-ui-rc.yaml kube-ui-svc.yaml 安装配置过程 前面的准备工作准备好以后,kube-ui的安装配置非常简单,总结为下面几步 (1)执行创建kube-system (2)创建kube-ui-rc 这里再提醒一下,一定要记得把kube-ui 镜像导入到kube minion 中,否则由于无法访问gcr的源,会一直卡在这里无法running 成功,同时注意由于我们的kube-ui 是创建在kube-system namespace 中的,所有我们查找rc,pod 都需要带关键字 --namespace=kube-system 或--all-namespace。 (3)创建kube-ui-svc (4)访问http://kube-master地址:8080/ui 可以看到我们kube-ui界面 四、总结 前面的配置,基本绕过了网上的一些构建k8s集群不完整文档的坑,主要有如下几个坑。 1. 2. 五、参考文章 高可用及自动发现的Docker基础架构 CentOS 7实战Kubernetes部署 kubernetes 官方doc 作者介绍 王佩 新炬网络云计算高级工程师 目前主要研究Docker相关的云计算技术 本文来自云栖社区合作伙伴"DBAplus",原文发布时间:2016-04-08

优秀的个人博客,低调大师

ELK菜鸟手记 (一) 环境配置+log4j日志记录

1. 背景介绍 在大数据时代,日志记录和管理变得尤为重要。 以往的文件记录日志的形式,既查询起来又不方便,又造成日志在服务器上分散存储,管理起来相当麻烦, 想根据一个关键字查询日志中某个关键信息相当困难。 这个时候,ELK诞生了。 什么是ELK? 简单来说:它是一套完整的日志记录和分析的解决方案平台。 2. 技术栈介绍 ELK =Elasticsearch +Logstash +Kibana 2-1)Elasticsearch: ( Elasticsearch is a distributed open source search engine based on Apache Lucene, and released under an Apache 2.0 license (which means that it can be downloaded, used, and modi ed free of charge). It provides horizontal scalability, reliability, and multitenant capability for real-time search. Elasticsearch features are available through JSON over a RESTful API. The searching capabilities are backed by a schema-less Apache Lucene Engine, which allows it to dynamically index data without knowing the structure beforehand. Elasticsearch is able to achieve fast search responses because it uses indexing to search over the texts. ) Elasticsearch是一个分布式的开源的基于Apache Lucene项目的搜索引擎,它发布在Apache 2.0协议下 (这也就意味着它可以被免费地下载,使用并且修改)。 Elasticsearch提供了水平的,可扩展的,可靠的,多用户形式的实时搜索。 Elasticsearch的功能可以通过JSON格式的RESTful API形式访问。 Elasticsearch的搜索能力是得到Apache Lucene引擎的支持,允许给文本数据增加加动态索引。 2-2)Logstash ( Logstash is a data pipeline that helps collect, parse, and analyze a large variety of structured and unstructured data and events generated across various systems. It provides plugins to connect to various types of input sources and platforms, andis designed to ef ciently process logs, events, and unstructured data sources for distribution into a variety of outputs with the use of its output plugins, namely le, stdout (as output on console running Logstash), or Elasticsearch. ) Logstash是一个数据管道,它被用来收集,解析和分析各种结构化的和非结构化的由各种系统产生的数据以及事件。 它提供了插件用来连接到各种输入数据源,可以高效地处理日志,事件以及非结构化的数据,而且可以通过输出插件的形式 把结果输出到各种输出源,比如:标准输出,控制台或者Elasticsearch。 2-3) Kibana (Kibana is an open source Apache 2.0 licensed data visualization platform that helps in visualizing any kind of structured and unstructured data stored in Elasticsearch indexes. Kibana is entirely written in HTML and JavaScript. ) Kibana是一个基于Apache 2.0协议的开源可视化平台,它用来可视化任何结构化的和非结构化的存储在Elasticsearch索引 中的数据。Kibana完全用HTML和Javascript编写。 3. 下载/安装/配置/启动 前面说了很多废话,接下来是每个程序员感兴趣的动手环节了,let's start! 3-1) 安装Elasticsearch 下载地址: https://www.elastic.co/downloads/elasticsearch a) 解压安装包elasticsearch-5.2.2.tar.gz (由于本人是mac系统)我把它解压到了/usr/local目录下,完整路径如下: /usr/local/elasticsearch-5.2.2 b) 编辑配置文件 cd config vielasticsearch.yml 内容如下: # ---------------------------------- Cluster ----------------------------------- # # Use a descriptive name for your cluster: # cluster.name: my-application # # ------------------------------------ Node ------------------------------------ # # Use a descriptive name for the node: # node.name: node-1 # # Add custom attributes to the node: # #node.attr.rack: r1 # # ----------------------------------- Paths ------------------------------------ # # Path to directory where to store the data (separate multiple locations by comma): # path.data: /tmp/elasticsearch/data # # Path to log files: # path.logs: /tmp/elasticsearch/logs # ---------------------------------- Network ----------------------------------- # # Set the bind address to a specific IP (IPv4 or IPv6): # network.host: localhost # # Set a custom port for HTTP: # http.port: 9200 c) 启动Elasticsearch./bin/elasticsearch 如果没有错误发生,可以进入到下一步的验证环节 d) 验证 可以使用cURL命令: curl 'http://localhost:9200/?pretty' 或者 直接用浏览器打开 http://localhost:9200 3-2) 安装Logstash a) 解压安装包logstash-5.2.2.tar.gz 完整路径如下: /usr/local/logstash-5.2.2 b) 编辑配置文件 cd config 新建配置文件log4j_es.conf vilog4j_es.conf 内容如下: input { log4j { host => "127.0.0.1" port => 4560 } } output { stdout { codec => rubydebug } elasticsearch{ hosts => ["localhost:9200"] index => "log4j-%{+YYYY.MM.dd}" document_type => "log4j_type" } } c) 启动Logstash ./bin/logstash -f config/log4j-es.conf 3-3) 安装Kibana a) 解压安装包kibana-5.2.2.tar.gz 完整路径如下: /usr/local/ kibana-5.2.2 b) 编辑配置文件 cd config vi kibana.yml 内容如下: # Kibana is served by a back end server. This setting specifies the port to use. server.port: 5601 server.host: "localhost" # The URL of the Elasticsearch instance to use for all your queries. elasticsearch.url: "http://localhost:9200" # Kibana uses an index in Elasticsearch to store saved searches, visualizations and # dashboards. Kibana creates a new index if the index doesn't already exist. kibana.index: ".kibana" c) 启动Kibana ./bin/kibana d) 验证打开网址:http://localhost:5601/ 见到如下Logo 4. Log4j记录日志到Logstash 4-1) 新建maven项目 pom中的关键dependency配置如下: <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> 4-2)log4j.properties(放在resources文件夹下) ### 设置### log4j.rootLogger = debug,stdout,D,E,logstash ### 输出信息到控制抬 ### log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n ### 输出DEBUG 级别以上的日志到=/Users/bee/Documents/elk/log4j/debug.log### log4j.appender.D = org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File = /Users/KG/Documents/logs/elk/debug.log log4j.appender.D.Append = true log4j.appender.D.Threshold = DEBUG log4j.appender.D.layout = org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n ### 输出ERROR 级别以上的日志到=/Users/bee/Documents/elk/log4j/error.log ### log4j.appender.E = org.apache.log4j.DailyRollingFileAppender log4j.appender.E.File =/Users/KG/Documents/logs/elk/error.log log4j.appender.E.Append = true log4j.appender.E.Threshold = ERROR log4j.appender.E.layout = org.apache.log4j.PatternLayout log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n #输出日志到logstash log4j.appender.logstash=org.apache.log4j.net.SocketAppender log4j.appender.logstash.RemoteHost=127.0.0.1 log4j.appender.logstash.port=4560 log4j.appender.logstash.ReconnectionDelay=60000 log4j.appender.logstash.LocationInfo=true 4-3) Java代码(ElkLog4jTest.java): package org.genesis.arena.elk; import org.apache.log4j.Logger; /** * Created by KG on 17/3/27. */ public class ElkLog4jTest { private static final Logger logger = Logger.getLogger(ElkLog4jTest.class); public static void main(String[] args) throws Exception { logger.debug("This is a debug message!"); logger.info("This is info message!"); logger.warn("This is a warn message!"); logger.error("This is error message!"); try{ System.out.println(5/0); }catch(Exception e){ logger.error(e); } } } 4-4) 运行结果 [DEBUG] 2017-03-29 12:56:00,454 method:org.genesis.arena.elk.ElkLog4jTest.main(ElkLog4jTest.java:11)This is a debug message![INFO ] 2017-03-29 12:56:00,529 method:org.genesis.arena.elk.ElkLog4jTest.main(ElkLog4jTest.java:12)This is info message![WARN ] 2017-03-29 12:56:00,531 method:org.genesis.arena.elk.ElkLog4jTest.main(ElkLog4jTest.java:13)This is a warn message![ERROR] 2017-03-29 12:56:00,533 method:org.genesis.arena.elk.ElkLog4jTest.main(ElkLog4jTest.java:14)This is error message![ERROR] 2017-03-29 12:56:00,538 method:org.genesis.arena.elk.ElkLog4jTest.main(ElkLog4jTest.java:19)java.lang.ArithmeticException: / by zero 然后会在Logstash控制台看到输出如下图: 5. 连通Kibana 5-1) 打开 http://localhost:5601/ 5-2) 创建索引 还记得我们之前在logstash配置文件中配置的索引吗? log4j-%{+YYYY.MM.dd} 因此,我们应该创建索引为:log4j-* 5-3)验证 从这里可以看到自己刚才在Java代码中记录的日志。 好了,一切大功告成了!!! 是不是很有成就感啊?

优秀的个人博客,低调大师

IntelliJ IDEA + Maven环境编写第一个hadoop程序

1. 新建IntelliJ下的maven项目 点击File->New->Project,在弹出的对话框中选择Maven,JDK选择你自己安装的版本,点击Next 2.填写Maven的GroupId和ArtifactId 你可以根据自己的项目随便填,点击Next 这样就新建好了一个空的项目 这里程序名填写WordCount,我们的程序是一个通用的网上的范例,用来计算文件中单词出现的次数 3. 设置程序的编译版本 打开Intellij的Preference偏好设置,定位到Build, Execution, Deployment->Compiler->Java Compiler, 将WordCount的Target bytecode version修改为你的jdk版本(我的是1.8) 4. 配置依赖 编辑pom.xml进行配置 1)添加apache源 在project内尾部添加 <repositories> <repository> <id>apache</id> <url>http://maven.apache.org</url> </repository> </repositories> 2) 添加hadoop依赖 这里只需要用到基础依赖hadoop-core和hadoop-common;如果需要读写HDFS,则还需要依赖hadoop-hdfs和hadoop-client;如果需要读写HBase,则还需要依赖hbase-client 在project内尾部添加 <dependencies> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-core</artifactId> <version>1.2.1</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.7.2</version> </dependency> </dependencies> 修改pom.xml完成后,Intellij右上角会提示Maven projects need to be Imported,点击Import Changes以更新依赖,或者点击Enable Auto Import 最后,我的完整的pom.xml如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.fun</groupId> <artifactId>hadoop</artifactId> <version>1.0-SNAPSHOT</version> <repositories> <repository> <id>apache</id> <url>http://maven.apache.org</url> </repository> </repositories> <dependencies> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-core</artifactId> <version>1.2.1</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.7.2</version> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-dependency-plugin</artifactId> <configuration> <excludeTransitive>false</excludeTransitive> <stripVersion>true</stripVersion> <outputDirectory>./lib</outputDirectory> </configuration> </plugin> </plugins> </build> </project> 5. 编写主程序 WordCount.java /** * Created by jinshilin on 16/12/7. */ import java.io.IOException; import java.util.StringTokenizer; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; public class WordCount { public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(Object key, Text value, Context context ) throws IOException, InterruptedException { StringTokenizer itr = new StringTokenizer(value.toString()); while (itr.hasMoreTokens()) { word.set(itr.nextToken()); context.write(word, one); } } } public static class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> { private IntWritable result = new IntWritable(); public void reduce(Text key, Iterable<IntWritable> values, Context context ) throws IOException, InterruptedException { int sum = 0; for (IntWritable val : values) { sum += val.get(); } result.set(sum); context.write(key, result); } } public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); Job job = Job.getInstance(conf, "word count"); job.setJarByClass(WordCount.class); job.setMapperClass(TokenizerMapper.class); job.setCombinerClass(IntSumReducer.class); job.setReducerClass(IntSumReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); System.exit(job.waitForCompletion(true) ? 0 : 1); } } 6. 配置输入和输出结果文件夹 1) 添加和src目录同级的input文件夹到项目中 在input文件夹中放置一个或多个输入文件源 我的输入文件源如下: test.segmented: dfdfadgdgagaadadsfudflclcckcerfadfdfdfadgdgagfudflclfuckfuckfuckfuckhahaaaa 2) 配置运行参数在Intellij菜单栏中选择Run->Edit Configurations,在弹出来的对话框中点击+,新建一个Application配置。配置Main class为WordCount(可以点击右边的...选择), Program arguments为input/ output/,即输入路径为刚才创建的input文件夹,输出为output 由于Hadoop的设定,下次运行时务必删除output文件夹! 好了,运行程序,结果如下: aaa 1aadads 1cckcer 1dfdfadgdgag 2fadf 1fuck 2fuckfuck 1fudflcl 2haha 1 至此,一个简单的hadoop程序完成!

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

用户登录
用户注册