Browsed by
标签:Docker

Java微服务实践乱谈

Java微服务实践乱谈

閱讀本文約花費: 25 (分鐘) 楔子 目前业界最流行的微服务架构正在或者已被各种规模的互联网公司广泛接受和认可,业已成为互联网开发人员必备技术。无论是互联网、云计算还是大数据,Java平台已成为全栈的生态体系,其重要性几乎不可替代。 这两年微服务作为一个非常新的技术,各种理论流派试图从不同的角度去阐述其概念和优势,我一开始是拒绝的,因为我没有”Duang“的一下想清楚。个人感性地认知是,姿势不对,纯靠意会。理性的看法则是,在思想上,那些布道师们并未达到一致。经过参考各家思想之后,得到了一些自己的领悟,我分享给大家。 微服务是什么? 微服务是一种细粒度(Fine-Grain)的SOA 个人认为,与其说微服务是一种技术,不如将其定义为一种架构,而架构则是“技”的实现与“术”的策略相辅相成。“术”的策略需要分析使用场景,进行合理地划分业务边界,实现“业以类聚”,然而“技”的实现则通过特定的技术在实现业务逻辑之时,更多的考虑实现过程中的效率性、测试的便利性、维护的可持续性,达到“技以群分”的目的。 由此而论,我个人偏好将其定义为:“微服务是一种细粒度的SOA”。 这样定义的好处在于,没必要去重复地“抹黑”“单体应用”(Monolithic,也有人翻译成“巨石应用”),缘于SOA技术的衍化过程中早已提及。那么,细粒度更多的体现在“取其精华,去其糟粕”。 SOA又是什么? SOA = Ser…

Read More Read More

兩年取得 AWS All-5 + BigData 認證的學習心得

兩年取得 AWS All-5 + BigData 認證的學習心得

閱讀本文約花費: 6 (分鐘) 上個月考過 AWS Solutions Architect-Professional,沈澱之後想做個學習紀錄與分享。想想從開始準備到現在一晃眼也兩年了,像讀了一個碩士班一樣… XD。若專心於取得認證的朋友們,一定能找到適合自己的方式與更快的節奏來完成這個目標。只是考試這類事情因每個人的起點、專長經歷、備考時間分配、完成動機不同,所以需走過的路也不同,以下分享希望對某些人能有所幫助。 個人工作背景 軟體公司的技術經理,開發與營運 Web/API 服務,對架構有制定的空間,故能將 AWS 適合的方案帶入工作範圍 考試動機 學習瞭解 Cloud-Native Best Practices 架構設計,工作本質上就在開發與協助 SaaS 服務多些能力證明以爭取工作上更多架構設計的影響力 完成日期與成績 Transcript for Chiang Hsien TaiCheck out my transcript to see all of my accomplishments.www.certmetrics.com 12/09, 2016. 87%. AWS Certified Solutions Architect — Associate02/21, 2017. 87%. AWS Certified Developer …

Read More Read More

Kubernetes(K8s) 安装(使用kubeadm安装Kubernetes集群)

Kubernetes(K8s) 安装(使用kubeadm安装Kubernetes集群)

閱讀本文約花費: 18 (分鐘) 概述:         这篇文章是为了介绍使用kubeadm安装Kubernetes集群(可以用于生产级别)。使用了Centos 7系统。 一、Centos7 配置说明 1.1   Firewalld(防火墙) CentOS Linux 7 默认开起来防火墙服务(firewalld),而Kubernetes的Master与工作Node之间会有大量的网络通信,安全的做法是在防火墙上配置Kbernetes各组件(api-server、kubelet等等)需要相互通信的端口号。在安全的内部网络环境中可以关闭防火墙服务。 关闭防火墙的命令: 1 # firewall-cmd –state #查看防火墙状态 2 # systemctl stop firewalld.service #停止firewall 3 # systemctl disable firewalld.service #禁止firewall开机启动 1.2   SELinux 建议禁用SELinux,让容器可以读取主机文件系统 执行命令: 1 # getenforce #查看selinux状态 2 # setenforce 0 #临时关闭selinux 3 # sed -i ‘s/^ *SELINUX=enfor…

Read More Read More

Etcd Raft使用入门及原理解析

Etcd Raft使用入门及原理解析

閱讀本文約花費: 13 (分鐘) 什么是Raft Raft是一个分布式一致性算法,充分的利用了可复制状态机以及日志。其最核心的设计目标就是易于理解。在性能、错误容错等方面来看有点类似Paxos,但不同之处在于,Raft论文较为清晰的描述了其主要流程以及其中一些细节问题,而Paxos我们知道非常难以理解。 当构建一个分布式系统时,一个非常重要的设计目标就是fault tolerance。如果系统基于Raft协议实现,那么当其中一个节点挂掉,或者发生了网络分区等异常情况时,只要大多数节点仍然能够正常通讯,整个集群就能够正常对外提供服务而不会挂掉。 关于Raft更多的细节,这里建议直接阅读论文: “In Search of an Understandable Consensus Algorithm“ 介绍 Etcd的Raft库已经在生产环境得到了非常广泛的应用,有力的支撑了etcd、K8S、Docker Swarm、TiDB/TiKV等分布式系统的构建,当你能够熟练的使用一个成熟的Raft库、甚至如果能够自己实现一个,那会有种’有了锤子,干什么都是钉子’的感觉。 特性 Etcd raft基本上已经实现了Raft协议的完整特性,包括: – Leader选举 – 日志复制 – 日志压缩 – 成员变…

Read More Read More

如何以非root用户运行Docker容器

如何以非root用户运行Docker容器

閱讀本文約花費: 5 (分鐘) 需要用root用户运行Docker? 组织中,经常以Root用户运行Docker中的容器。但是你的工作负载真的需要root权限吗?显然很少。尽管如此,默认情况下,你的容器仍将以root用户身份运行,但这可能会带来严重的安全问题。实际上,如果以root用户运行容器内部的进程,就是以root用户身份运行主机的进程。这就为那些恶意访问主机的攻击者,提供了机会。 只需在常用的任何镜像上使用以下命令,你就可以自己查看它使用的用户身份, $ kubectl run -i –tty hello-world –image=hello-world –restart=Never — sh # ps aux PID USER TIME COMMAND 1 root 0:10 sh 显然,作为最佳实践,我们应该避免以超级用户身份运行容器。因此,让我们看看如何以非root用户身份运行容器。 将非root用户添加到Dockerfile 你可以在Dockerfile中使用RUN命令创建用户,这个用户仅具有容器内工作负载所需的权限。 RUN groupadd –gid 5000 newuser \ && useradd –home-dir /home/newuser –create-home –uid 5000 \ –gid 5000 –shel…

Read More Read More

子网与超网-Kubernetes基础知识

子网与超网-Kubernetes基础知识

閱讀本文約花費: 7 (分鐘) 子网 1、IP地址是以网络号和主机号来表示网络上的主机的,只有在一个网络号下的计算机之间才能“直接”互通,不同网络号的计算机要通过网关才能互通。但这样的划分在某些情况下显得并不十分灵活。为此IP网络还允许划分成更小的网络,称为子网。 2、作用::IP数据包从网际上的一个网络到达另一个网络时,选择路径可以基于网络而不是主机。在大型的网际中,这一点优势特别明显,因为路由表中只存储网络信息而不是主机信息,这样可以大大简化路由表。 3、因为有了子网,就产生了子网掩码。子网掩码的作用就是用来判断任意两个IP地址是否属于同一子网络,这时只有在同一子网的计算机才能”直接”互通。 4、子网掩码与IP地址都是由4个数段组成,每个数段的取值范围是0-255(共256个值,等于2的8次方),如我们在搭建局域网时通常用到的IP地址192.168.1.1,子网掩码255.255.255.0,当然十进制是为了方便人的理解,转换成机器能识别的二进制后,每个数段由8个0或1组成,一个完整的IP地址或子网掩码就转换成32个0或1组成的序列。子网掩码与IP地址是组合使用的,IP地址我们都知道是计算机在网络内的唯一标识,而子网掩码顾名思义是用于划分子网的,下面通过几个例子进行讲解。   (1)255.255.255.0   子网掩码由连续的1和0组成,连续的1表示…

Read More Read More

Kubernetes是什么-Wikipedia

Kubernetes是什么-Wikipedia

閱讀本文約花費: 11 (分鐘) 英文链接:https://en.wikipedia.org/wiki/Kubernetes Kubernetes(通常写成“k8s”)是最开始由google设计开发最后贡献给Cloud Native Computing Foundation的开源容器集群管理项目。它的设计目标是在主机集群之间提供一个能够自动化部署、可拓展、应用容器可运营的平台。Kubernetes通常结合docker容器工具工作,并且整合多个运行着docker容器的主机集群。 历史 Kubernetes( 来自希腊语κυβερνήτης:,意思为 “操舵员” 或者 “飞行员”)由Joe Beda, Brendan Burns 和Craig McLuckie建立,并在2014年被google公司首次对外公布。它的发展和设计受到google的Borg系统的严重影响。Kubernetes项目的许多主要贡献者来自Borg项目。在Google内部Kubernetes最开始的名字叫Serven of Nine,引用了电影“星际迷航”中通常被认为“更加友好”的“博格人”这个角色。由于google律师的反对,它的名字被重命名为Kubernetes。从Kubernetes的logo上面那车轮上的七个幅条就能在一定程度上推断出Kubernets最开始的名字是什么。 2015年七月21日Kubernet…

Read More Read More

Dockerfile部署Nginx、Apache、Tomcat

Dockerfile部署Nginx、Apache、Tomcat

閱讀本文約花費: 1 (分鐘) nginx #安装nginx并用CMD设置默认启动命令 #默认初始镜像为centos:7 FROM centos:7 RUN yum install -y epel-release && yum install -y nginx CMD [“nginx”,”-g”,”daemon off;”] apache #安装http并用CMD设置默认启动命令 #默认初始镜像为centos:7 FROM centos:7 RUN yum install -y httpd CMD [“httpd”,”-D”,”FOREGROUND”] tomcat #安装jdk tomcat并启动 #默认初始镜像为centos:7 FROM centos:7 ADD ./apache-tomcat-9.0.12.tar.gz /root ADD ./jdk-8u181-linux-x64.tar.gz /root ENV JAVA_HOME /root/jdk1.8.0_181 ENV PATH $JAVA_HOME/bin:$PATH RUN echo JAVA_OPTS=”-Djava.security.egd=file:/dev/./urandom” >> /root/apache-tomcat-9.0.12/bin/catalina.sh ENTRYPOI…

Read More Read More

基于k8s Prometheus+Grafana+Altermanager钉钉报警

基于k8s Prometheus+Grafana+Altermanager钉钉报警

閱讀本文約花費: 6 (分鐘) 一、概述 Alertmanager与Prometheus是相互分离的两个组件。Prometheus服务器根据报警规则将警报发送给Alertmanager,然后Alertmanager将silencing、inhibition、aggregation等消息通过电子邮件、dingtalk和HipChat发送通知。 Alertmanager处理由例如Prometheus服务器等客户端发来的警报。它负责删除重复数据、分组,并将警报通过路由发送到正确的接收器,比如电子邮件、Slack、dingtalk等。Alertmanager还支持groups,silencing和警报抑制的机制。 钉钉作为内部通讯工具,基本上大家在电脑和手机上都能用,消息可以第一时间查看,报警消息的即时性要求比较高,所以适合用钉钉通知。 二、添加钉钉机器人 请参考官方文档:自定义机器人 添加机器人后获取机器人的hook(机器人好像只能在钉钉群里面添加),在后面部署会用到。 机器人hook:https://oapi.dingtalk.com/robot/send?access_token=xxxxxx 三、配置Alertmanager Alertmanager官方文档:https://github.com/prometheus/docs/blob/db2a09a8a7e193d6e474f3…

Read More Read More

使用Prometheus Operator监控kubetnetes集群

使用Prometheus Operator监控kubetnetes集群

閱讀本文約花費: 9 (分鐘) 一、简介 Prometheus Prometheus 是一个开源监控系统,它本身已经成为了云原生中指标监控的事实标准,几乎所有 Kubernetes 的核心组件以及其它云原生系统都以 Prometheus 的指标格式输出自己的运行时监控信息。 主要特性: 使用指标名称及键值对标识的多维度数据模型。采用弹性查询语言PromQL。不依赖分布式存储,为自治的单点服务。使用http完成对监控数据的拉取。通过网关支持时序数据的推送。支持多种图形和Dashboard的展示。 另外在Prometheus的整个生态系统中有各种可选组件,用于功能的扩充。 Prometheus-Operator CoreOS提供了一种名为Operator的管理工具,他是管理特定应用程序的控制器。通过扩展Kubernetes API以软件的方式帮助用户创建、配置和管理复杂的或又状态的应用程序实例(如etcd、Redis、MySQL、Prometheus等)。 它通过Kubernetes的CRD(Custom Resource Definition,自定义资源定义)对Prometheus和Prometheus需要监控的服务进行部署和配置。 Prometheus-Operator使用下面两种资源来配置Prometheus及其要监控的服务。 Prometheus:为Prometheus的dep…

Read More Read More