zookeeper & kafka部署和使用
zookeeper
简介
ZooKeeper是一个开源的分布式应用程序协调服务,是Google的Chubby一个开源的实现。ZooKeeper为分布式应用提供一致性服务,提供的功能包括:分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)、分布式锁(Distributed Lock)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。
ZooKeeper本身可以以单机模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。
keepalived几个配置问题讲解
配置
使用keepalived做主备,其中一台设置为master,一台设置为backup。当master出现异常后,backup自动切换为master。当backup成为master后,master恢复正常后会再次抢占成为master,导致不必要的主备切换。因此可以将两台keepalived初始状态均配置为backup,设置不同的优先级,优先级高的设置nopreempt解决异常恢复后再次抢占的问题。
有如下配置表示意思也比较简单,VIP为192.168.0.18,2台机器的初始state都是BACKUP,machineA的优先级是15,machineB的优先级是13,配置了/root/1.sh
这个来检测服务是否正常。
machineA机器配置:
openwrt出现dnsmasq部分域名解析不了的问题
前言
最近几天在访问一些常用网站的时候,如ping.chinaz.com
,出现了域名无法解析的情况,由于是常用网站,才不得不进行问题排查。网上搜索了几个方法,都是不行,如以下方法:
- 在
网络 --> DHCP/DNS --> 常规配置
中,重绑定保护取消掉 openwrt路由器dnsmasq部分域名无法解析) - 在/etc/dnsmasq.conf添加配置no-resolv和server等:https://oracleblog.org/its-my-life/can-not-resolv-some-domain-name-in-openwrt/
- dnsmasq进程无法启动:http://www.openwrt.pro/post-44.html
git使用方法小结
本地文件添加到github
- 第一步生成ssh key
1 | ssh-keygen -t rsa -C "your_email@youremail.com" |
后面的 your_email@youremail.com 改为你在github上注册的邮箱,之后会要求确认路径和输入密码,我们这使用默认的一路回车就行。
成功的话会在当前用户~/下生成.ssh文件夹,如我的目录是C:\Users\xxx\ .ssh
,打开id_rsa.pub,复制里面的key(可以把这个公钥文件删除,只保留id_rsa私钥文件)。
回到github上,进入 Account Settings(账户配置),左边选择SSH Keys,Add SSH Key,title
随便填,粘贴在你电脑上生成的key。
openssl手工生成证书以及acme.sh自动部署证书
证书简介
有关https是如何保证数据的安全证的,可以参考文章:详解https加密通信原理 ,以下简介证书相关的知识点。
我们一般在服务器上面可以使用openssl命令来生成证书的.而一般是使用X509的证书链。x509证书一般会用到三类文件,key,csr,crt
。
key是私用密钥,openssl格式,通常是rsa算法
csr是证书请求文件,用于申请证书。在申请的时候,必须使用自己的私钥来签署申请,还可以设定一个密钥。
- crt是证书文件(windows下面的csr,其实是crt),是签署人用自己的key给你签署的凭证。
实战CentOS7安装且使用KVM虚拟机
镜像格式
介绍
- RAW格式是直接给云服务器进行读写的文件。RAW不支持动态增长空间,是镜像中I/O性能最好的一种格式。
QCOW2格式镜像是QEMU模拟器支持的一种磁盘镜像,是用一个文件的形式来表示一块固定大小的块设备磁盘。与普通的RAW格式镜像相比,QCOW2格式有如下几个特性:
- 支持更小的磁盘占用。
- 支持写时拷贝(CoW,Copy-On-Write),镜像文件只反映底层磁盘变化。
- 支持快照,可以包含多个历史快照。
- 支持压缩和加密,可以选择ZLIB压缩和AES加密。
VMDK是VMware创建的虚拟硬盘格式。一个VMDK文件代表VMFS(云服务器文件系统)在云服务器上的一个物理硬盘驱动。
- VHD是微软提供的一种虚拟硬盘文件格式。VHD文件格式可以被压缩成单个文件存放到宿主机的文件系统上,主要包括云服务器启动所需的文件系统。微软在Windows Server 2012中的Hyper-V引入的一个新版本的VHD格式,称为VHDX。与VHD格式相比,VHDX具有更大的存储容量。它在电源故障期间提供数据损坏保护,并且优化了磁盘结构对齐方式,以防止新的大扇区物理磁盘性能降级。
- vdi(Virtual Disk Image)是Oracle的VirtualBox虚拟机中的存储格式
k8s入门教程十五:使用ceph实现storageclass动态存储
简介
从上文我们可知,虽然K8S提供了PVC的方式进行存储的便利性,但是PV的创建还是要手工的,使用起来不是很方便,在k8s 1.4以后,kubernetes提供了一种更加方便的动态创建PV的方式,即StorageClass。使用StorageClass时无需预先创建固定大小的PV来等待使用者创建PVC使用,而是直接创建PVC即可使用。
本文主要使用Rook搭建一个ceph集群,然后使用StorageClass来直接创建PVC。
Rook与ceph
Rook 是基于Kubernetes
之上,提供一键部署存储系统的编排系统。Rook 将存储软件转变成自我管理、自我扩展和自我修复的存储服务,通过自动化部署、启动、配置、供应、扩展、升级、迁移、灾难恢复、监控和资源管理来实现。Rook 底层使用云原生容器管理、调度和编排平台提供的能力来提供这些功能。
k8s入门教程十四:安全与RBAC
k8s入门教程十三:statefulset控制器
statefulset简介
statefulset也是一种POD控制器,那为什么要放在PV/PVC之后再简介呢?这是因为statefulset是必须也有持久化数据,每个POD所对应的PV都是不一样的。相对于Deployment所创建的POD是无状态的,那statefulset是属于有状态的,即可以保留POD的状态信息。其特点有:
- 1、稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现
- 2、稳定的网络标志,即Pod重新调度后其PodName和HostName不变,基于Headless Service(即没有Cluster IP的Service)来实现
- 3、有序部署,有序扩展,即Pod是有顺序的,在部署或者扩展的时候要依据定义的顺序依次依次进行(即从0到N-1,在下一个Pod运行之前所有之前的Pod必须都是Running和Ready状态),基于init containers来实现
- 4、有序收缩,有序删除(即从N-1到0)
- 5、有序的滚动更新
k8s入门教程十二:存储管理volume、PV/PVC
kubernetes存储管理按照发展的历程,涉及到有Volume,PV(Persistent Volume)和PVC(PersistentVolumeClaims),和StorageClass
,Volume是最早提出的存储卷,主要解决容器和数据存储的依赖关系,抽象底层驱动以支持不同的存储类型;使用Volume需要了解底层存储细节,因此提出了PV,Persistent Volume是由k8s管理员定义的存储单元,应用端使用PersistentVolumeClaims声明去调用PV存储,进一步抽象了底层存储;随着PV数量的增加,管理员需要不停的定义PV的数量,衍生了通过StorageClass动态生成PV,StorageClass通过PVC中声明存储的容量,会调用底层的提供商生成PV。本文介绍Volume的使用,下篇文章介绍PV,PVC和StorageClass。
- Volume 存储卷,独立于容器,后端和不同的存储驱动对接
- PV Persistent Volume持久化存储卷,和node类似,是一种集群资源,由管理员定义,对接不同的存储
- PVC PersistentVolumeClaims持久化存储声明,和pod类似,作为PV的使用者
- StorageClass 动态存储类型,分为静态和动态两种类型,通过在PVC中定义存储类型,自动创建所需PV
k8s入门教程十一:ConfigMap与secrets
k8s入门教程十:Ingress与Ingress controller
简介在kubernetes中对外暴露服务的方式有两种:service(NodePort或者外部LoadBalancer)和ingress,其中service是提供四层的负载均衡,通过iptables DNAT或lvs nat模式实现后端Pod的代理请求。如需实现http,域名,URI,证书等请求方式 ...
k8s入门教程九:Service之服务发现
简介
Pod存在生命周期,有销毁,有重建,无法提供一个固定的访问接口给客户端。并且为了同类的Pod都能够实现工作负载的价值,由此Service资源出现了,可以为一类Pod资源对象提供一个固定的访问接口和负载均衡。
Service和Pod对象的IP地址,一个是虚拟地址,一个是Pod IP地址,都仅仅在集群内部可以进行访问,无法接入集群外部流量。而为了解决该类问题的办法可以是在单一的节点上做端口暴露(hostPort)以及让Pod资源共享工作节点的网络名称空间(hostNetwork)以外,还可以使用NodePort或者是LoadBalancer类型的Service资源,或者是有7层负载均衡能力的Ingress资源。
k8s入门教程八:Pod控制器之DaemonSet、Job与CronJob
带你走进redis安装、哨兵与集群配置
安装
Redis是REmote DIctionary Server(远程字典服务器)的缩写。一个开源的、高性能的、基于键值对的缓存与存储系统,目前redis稳定版是5.0.8,下载安装:
1 | cd /usr/local/src/ |
k8s入门教程六:POD资源限制与调度
POD资源限制
简介
容器运行过程中需要分配所需的资源,如何与cggroup联动配合呢?答案是通过定义resource来实现资源的分配,资源的分配单位主要是cpu和memory,资源的定义分两种:requests和limits
,requests表示请求资源,主要用于初始kubernetes调度pod时的依据,表示必须满足的分配资源;limits表示资源的限制,即pod不能超过limits定义的限制大小,超过则通过cggroup限制,pod中定义资源可以通过下面四个字段定义:
- spec.container[].resources.requests.cpu 请求cpu资源的大小,如
0.1个cpu和100m表示分配1/10个cpu
; - spec.container[].resources.requests.memory 请求内存大小,单位可用M,Mi,G,Gi表示;
- spec.container[].resources.limits.cpu 限制cpu的大小,不能超过阀值,cggroup中限制的值;
- spec.container[].resources.limits.memory 限制内存的大小,不能超过阀值,超过会发生OOM;