1.基本概念 使用k8s安装gitlab-ce,采用GlusterFS实现持久化(注意PG使用的是NFS存储,使用动态存储重启postgresql的pod后无法成功启动pg,待解决),并集成了openLDAP. 注意:我公司使用的gitlab是独立于k8s集群之外的. 2.安装部署 最一开始使用的是helm安装gitlab,网上的文档应该全部都是使用的这个chart:https://github.com/helm/charts/tree/master/stable/gitlab-ce 但是这个c…
1.基本概念 上节在k8s中部署了harbor和ldap,本节将部署harbor使用openLDAP验证,部署方式与之前相同,只是改了adminserver-cm.yaml的AUTH_MODE: "ldap_auth".另外harbor配置ldap登录非必须,按需. 2.部署 下载项目 git clone https://github.com/dotbalo/helm.git [root@k8s-master01 ci]# cd harbor-helm-ldap/ [root@k8s-…
1.基本概念 Jenkins在DevOps工具链中是核心的流程管理中心,负责串联系统的构建流程.测试流程.镜像制作流程.部署流程等,在持续集成中常用到的工具如下: Maven:源代码编译工具 RobotFramework:自动化测试工具 NewMan:接口自动化测试工具 SonarQube Scanner:源代码扫描工具 GitLab:代码仓库工具 Docker:镜像制作工具 kubectl:K8S工具 公司目前使用的流程是通过Redmine和GitLab中创建项目.开发提交代码.触发jenki…
1.基本概念 此次安装的有Jenkins.Gitlab.Redmine,我公司目前使用的是独立于k8s集群之外单独部署的Jenkins等服务,此文章会介绍三种服务基于k8s的部署方式,之后集成之前部署的openLDAP实现统一认证.之后将进行简单持续集成持续部署的演示,最后再结合我公司的项目进行实战操作,应付出现的各种使用场景. 2.使用Helm安装redmine [root@k8s-master01 ci]# git clone https://github.com/dotbalo/helm.…
1.基本概念 对于复杂的应用中间件,需要设置镜像运行的需求.环境变量,并且需要定制存储.网络等设置,最后设计和编写Deployment.Configmap.Service及Ingress等相关yaml配置文件,再提交给kubernetes进行部署.这些复杂的过程将逐步被Helm应用包管理工具实现. Helm是一个由CNCF孵化和管理的项目,用于对需要在k8s上部署复杂应用进行定义.安装和更新.Helm以Chart的方式对应用软件进行描述,可以方便地创建.版本化.共享和发布复杂的应用软件. Cha…
1.PV创建 在nfs或者其他类型后端存储创建pv,首先创建共享目录 [root@nfs ~]# cat /etc/exports /k8s/redis-sentinel/ *(rw,sync,no_subtree_check,no_root_squash) /k8s/redis-sentinel/ *(rw,sync,no_subtree_check,no_root_squash) /k8s/redis-sentinel/ *(rw,sync,no_subtree_check,no_root_…
上一篇文章介绍了svn集成OpenLDAP认证,版本控制除了svn外,git目前也被越来越多的开发者所喜爱,本文将介绍GitLab如何集成openldap实现账号认证 GitLab集成OpenLDAP认证 修改配置文件gitlab.yml ldap: enabled: true servers: main: label: 'LDAP' host: 'ldap.blz.netease.com' port: 389 uid: 'uid' method: 'plain' bind_dn: 'uid=a…
1.基本概念 为了方便管理和集成jenkins,k8s.harbor.jenkins均使用openLDAP统一认证. 2.部署openLDAP 此处将openLDAP部署在k8s上,openLDAP可以在集群之外存在,不一定非要在k8s上部署openLDAP. 根据之前的文档,openLDAP使用GFS进行数据持久化. 下载对应的openLDAP文件 git clone https://github.com/dotbalo/k8s.git cd k8s/openldap 创建openLDAP […
1.基本概念 本次部署使用的是CoreOS的prometheus-operator. 本次部署包含监控etcd集群. 本次部署适用于二进制和kubeadm安装方式. 本次部署适用于k8s v1.10版本以上,其他版本自行测试. 项目地址:https://github.com/coreos/prometheus-operator/tree/master/contrib/kube-prometheus 使用Helm安装:https://github.com/helm/charts/tree/mast…
1.基本概念 升级之后所有的containers会重启,因为hash值会变. 不可跨版本升级. 2.升级Master节点 当前版本 [root@k8s-master01 ~]# kubeadm version kubeadm version: &version.Info{Major:", GitVersion:"v1.11.1", GitCommit:"b1b29978270dc22fecc592ac55d903350454310a", GitTr…
1.镜像下载 所有节点下载镜像 docker pull kibana: docker tag kibana: docker.elastic.co/kibana/kibana: docker pull dotbalo/fluentd-elasticsearch:v2.0.4 docker pull dotbalo/elasticsearch:v5.6.4 docker tag dotbalo/fluentd-elasticsearch:v2.0.4 k8s.gcr.io/fluentd-elast…
1.软件包下载 去github上下载较新的Kubernetes软件包https://github.com/ 2.升级说明 升级包括master节点升级和node节点的升级,本章升级至v1.15.12: Master节点的服务包括:apiserver.controller-manager.kube-scheduler: Node节点的服务包括:kubelet和kube-proxy: 由于apiserver被nginx代理,所以在升级的时候需要操作操作nginx注释升级节点,避免带来无法访问的情况:…
1docker版本 docker 17.09 https://docs.docker.com/ appledeAir:~ apple$ docker version Client: Docker Engine - Community Version:           18.09.0 API version:       1.39 Go version:        go1.10.4 Git commit:        4d60db4 Built:             Wed Nov …
说明:部署的过程中请保证每个命令都有在相应的节点执行,并且执行成功,此文档已经帮助几十人(仅包含和我取得联系的)快速部署k8s高可用集群,文档不足之处也已更改,在部署过程中遇到问题请先检查是否遗忘某个步骤,文档中每个步骤都是必须的. 经测验此文档也适合高可用部署k8s v.12,只需修改对应版本号就可. 1.部署架构 详细架构: 2.基本配置 主机名 IP地址 说明 组件 k8s-master01 ~ 03 192.168.20.20 ~ 22 master节点 * 3 keepalived.n…
1.准备工作 所有节点安装GFS客户端 yum install glusterfs glusterfs-fuse -y 如果不是所有节点要部署GFS管理服务,就在需要部署的节点上打上标签 [root@k8s-master01 ~]# kubectl label node k8s-node01 storagenode=glusterfs node/k8s-node01 labeled [root@k8s-master01 ~]# kubectl label node k8s-node02 stor…
1. PersistentVolume(PV)简介 1.1 为什么需要Persistent Volume(PV) 1.2 PersistentVolume(PV)和Volume的区别 1.3 PV和PVC更具体的概念和关系 1.3.1 PersistentVolume(PV) 1.3.2 PersistentVolumeClaim(PVC) 1.3.3 PV和PVC的关系和图解 2. PersistentVolume(PV)的分类 2.1 静态PV 2.2 动态PV 3. PersistentV…
1.traefik traefik:HTTP层路由,官网:http://traefik.cn/,文档:https://docs.traefik.io/user-guide/kubernetes/ 功能和nginx ingress类似. 相对于nginx ingress,traefix能够实时跟Kubernetes API 交互,感知后端 Service.Pod 变化,自动更新配置并热重载.Traefik 更快速更方便,同时支持更多的特性,使反向代理.负载均衡更直接更高效. k8s集群部署Trae…
1.基本概念 RBAC(Role-Based Access Control,基于角色的访问控制)在k8s v1.5中引入,在v1.6版本时升级为Beta版本,并成为kubeadm安装方式下的默认选项,相对于其他访问控制方式,新的RBAC具有如下优势: - 对集群中的资源和非资源权限均有完整的覆盖  整个RBAC完全由几个API对象完成,同其他API对象一样,可以用kubectl或API进行操作  可以在运行时进行调整,无需重启API Server 要使用RBAC授权模式,需要在API Serve…
1.Droplr——构建移动服务 Bruno de Carvalho,首席架构师 在Droplr,我们在我的基础设施的核心部分.从我们的API服务器到辅助服务的各个部分都使用了Netty. 这是一个关于我们如何从一个单片的.运行缓慢的LAMP(Linux.Apache Web Server.MySQL以及PHP)应用程序迁移到基于Netty实现的现代的.高性能的以及水平扩展的分布式架构的案例研究. 1.1.一切的起因 当我加入这个团队时,我们运行的是一个LAMP应用程序,其作为前端页面服务于用户…
项目部署 稳定,并发,效益, 一.Django配置 1.settings.py配置 复制全局settings.py配置文件,创建一个副本命名为MyBlog/pro_settings.py,修改DEBUG为False. DEBUG = False 将不再提供静态文件服务 # 填写你自己的ip和域名ALLOWED_HOSTS = ["www.youkou.site", "39.108.191.165", "localhost", "127.…
由于redis服务端是单线程实现的,因此只能占用CPU的单核,为了充分利用CPU资源,可以在一台服务器上同时启动多个redis-server实例 首先删除之前的rdb.aof文件 注释掉3个save appendonly改为no 配置方法: 每个实例创建一个conf文件 修改每个conf文件中的端口号 启动不同实例时指定不同的配置文件 复制一份conf,命名为6380.conf 该端口号.保存的文件名为6380 重启 关闭已启动的Redis进程 启动Redis,加载两个配置文件 使用查看进程和r…
保证线程安全演进: synchronized volatile AtomicInteger Lock接口提供的方法: void lock():加锁 void unlock():解锁 void lockInterruptibly():在多个线程并发获取锁的时候,那么,当有些线程拿不到锁时会等待,会不停的去抢占资源,在抢占的过程中,使用synchronized是无法进行中断的,那么,使用lockInterruptibly()方法,如果在抢占过程中发出一个中断,是可以中断的. tryLock():非阻…
上一篇,我介绍了自己在DDD分层架构方面的一些感想,本文开始介绍领域层的实体,代码主要参考自<领域驱动设计C#2008实现>,另外参考了网上找到的一些示例代码. 什么是实体 由标识来区分的对象称为实体. 实体的定义隐藏了几个信息: 两个实体对象,只要它们的标识属性值相等,哪怕标识属性以外的所有属性值都不相等,这两个对象也认为是同一个实体,这意味着两个对象是同一实体在其生命周期内的不同阶段. 为了能正确区分实体,标识必须唯一. 实体的标识属性值是不可变的,标识属性以外的属性值是可变的.如果标识值…
本人今天上午参考了不少博文,发现不少博文不是特别好,不是因为依赖冲突问题就是因为版本问题. 于是我结合相关的博文和案例,自己改写了下并参考了下,于是就有了这篇文章.希望能够给大家帮助,少走一些弯路. 一.KafKa的介绍 1.主要功能 根据官网的介绍,ApacheKafka®是一个分布式流媒体平台,它主要有3种功能: a.发布和订阅消息流,这个功能类似于消息队列,这也是kafka归类为消息队列框架的原因. b.以容错的方式记录消息流,kafka以文件的方式来存储消息流. c.可以再消息发布的时候…
我在以前的帖子里讲了装饰器的用法,这里我们来具体讲一讲Python中的装饰器,这里,我们从前面讲的函数,闭包为切入点,引出装饰器的概念.表达和基本使用方法.其次,我们结合一些实际工程中的例子,以便能再次理解. 一.函数与装饰器 函数的核心 第一点,在Python中,函数是“一等公民”(first-class citizen)(在有些资料例如流畅的Python中被叫做一等对象),函数也是对象,我们可以把函数赋予变量,比如下面的代码 def fun(message): print('Get a me…
功能:输入用户名和密码,正确,显示登录成功,为空的话,提示用户名和密码不能为空,还有记住密码功能. MainActivity.java package com.aimee.android.play.qqlogin; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.CheckBox; import an…
Setting up LDAP sign-in If you have an LDAP directory service such as Active Directory, you can configure GitLab so that your users can sign in with their LDAP credentials. Add the following to /etc/gitlab/gitlab.rb, edited for your server. For GitLa…
在应用程序框架实战十四:DDD分层架构之领域实体(基础篇)一文中,我介绍了领域实体的基础,包括标识.相等性比较.输出实体状态等.本文将介绍领域实体的一个核心内容——验证,它是应用程序健壮性的基石.为了完成领域实体的验证,我们在前面已经准备好了验证公共操作类和异常公共操作类. .Net提供的DataAnnotations验证方法非常强大,Mvc会自动将DataAnnotations特性转换为客户端Js验证,从而提升了用户体验.但是客户端验证是靠不住的,因为很容易绕开界面向服务端提交数据,所以服务端…
前几篇分文章分别介绍了OpenLDAP的部署管理和维护以及svn.git的接入,今天我们再下一城接入jenkins. 前情提要:LDAP系列文章 LDAP落地实战(一):OpenLDAP部署及管理维护 LDAP落地实战(二):SVN集成OpenLDAP认证 LDAP落地实战(三):GitLab集成OpenLDAP认证 jenkins集成OpenLDAP认证 1. 安装LDAP插件 使用LDAP认证需要安装LDAP插件,安装插件有两种方法: 方法一:后台插件管理里直接安装 优点:简单方便,不需要考…
1.基本配置 基本配置.内核升级.基本服务安装参考https://www.cnblogs.com/dukuan/p/10278637.html,或者参考<再也不踩坑的Kubernetes实战指南>第一章第一节 2.Kubernetes组件安装 所有节点安装Kubeadm.Kubectl.kubelet -.x86_64 kubectl--.x86_64 kubelet--.x86_64 所有节点启动Docker [root@k8s-master01 ~]# systemctl enable -…