Alpine容器安装Docker和OpenShift Client Tools

安装Docker echo "http://dl-2.alpinelinux.org/alpine/edge/main" > /etc/apk/repositories echo "http://dl-2.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories echo "http://dl-2.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories apk -U --no-cache \ --allow-untrusted add \ shadow \ docker \ py-pip \ openrc \ && pip install docker-compose rc-update add docker boot 安装OpenShift Client Tools 需要先安装glibc apk --no-cache add ca-certificates

Hystrix工作原理三

异常处理 Hystrix异常类型 HystrixRuntimeException HystrixBadRequestException HystrixTimeoutException RejectedExecutionException HystrixRuntimeException HystrixCommand失败时抛出, 不会触发fallback. HystrixBadRequestException 用提供的参数或状态表示错误的异常

Spring Cloud Ribbon 详解

客户端负载均衡, Ribbon的核心概念是命名的客户端.

使用

引入Ribbon依赖和配置

加入spring-cloud-starter-netflix-ribbon依赖

代码中使用RibbonClient注解

@Configuration 
@RibbonClient(name = "foo", configuration = FooConfiguration.class) public class TestConfiguration {}
@Configuration protected static class FooConfiguration {

    @Bean 
    public ZonePreferenceServerListFilter serverListFilter() {
        ZonePreferenceServerListFilter filter = new ZonePreferenceServerListFilter();
        filter.setZone("myTestZone");
        return filter; 
    }

    @Bean 
    public IPing ribbonPing() { 
        return new PingUrl(); 
    }

}

Ribbon客户端的配置, 如果不指定会使用默认的实现:

  • IClientConfig 客户端相关配置
  • IRule 定义负载均衡策略
  • IPing 定义如何ping目标服务实例来判断是否存活, ribbon使用单独的线程每隔一段时间(默认10s)对本地缓存的ServerList做一次检查
  • ServerList 定义如何获取服务实例列表. 两种实现基于配置的ConfigurationBasedServerList和基于Eureka服务发现的DiscoveryEnabledNIWSServerList
  • ServerListFilter 用来使用期望的特征过滤静态配置动态获得的候选服务实例列表. 若未提供, 默认使用ZoneAffinityServerListFilter
  • ILoadBalancer 定义了软负载均衡器的操作的接口. 一个典型的负载均衡器至少需要一组用来做负载均衡的服务实例, 一个标记某个服务实例不在旋转中的方法, 和对应的方法调用从实例列表中选出某一个服务实例.
  • ServerListUpdater DynamicServerListLoadBalancer用来更新实例列表的策略(推EurekaNotificationServerListUpdater/拉PollingServerListUpdater, 默认是拉)

Jenkins CI/CD (一) 基于角色的授权策略

最近开始客串运维做CI/CD的规划设计, 主要是基于’Pipeline as Code in Jenkins’. 整理了下思路和技术点, 慢慢的写.

这一篇是关于基于角色的授权策略, 用的是Role-Based Authorization Strategy Plugin.

授权在CI/CD流程中比较常见, 比如我们只让某些特定用户才可以构建Pre-Release的Job. 而更高级的Release发布, 又会需要某些用户的审批才可以进行. 需要授权时, 可能还需要发邮件提醒用户.

UI上如何使用就不提了, 这里只说Pipeline as Code. 后面的几篇也会是这个背景.

参考的这篇文章, 文章里的代码运行失败, 做了修复.

配置

安装完插件, 需要开始基于角色的授权策略. 同时添加角色和为用户分配角色.

使用Role-Based Strategy作为验证方式

Manage Jenkins / Configure Global Security / Configure Global Security

KVM安装手册

添加虚拟机流程:

1. 配置网络
2. 配置存储池
3. 上传镜像
4. 安装虚拟机,指定配置

安装KVM虚拟机

1. 关闭防火墙,selinux

# service iptables stop
# setenforce 0 临时关闭
# chkconfig NetworkManager off

2. 安装kvm虚拟机

# yum install kvm libvirt libvirt-devel python-virtinst python-virtinst qemu-kvm virt-viewer bridge-utils virt-top libguestfs-tools ca-certificates audit-libs-python device-mapper-libs virt-install
# 启动服务
# service libvirtd restart
下载virtio-win-1.5.2-1.el6.noarch.rpm 如果不安装window虚拟机或者使用带virtio驱动的镜像可以不用安装
# rpm -ivh virtio-win-1.5.2-1.el6.noarch.rpm

3. Libvirt在管理本地或远程Hypervisor时的表现形式如下。

在libvirt内部管理了五部分:

  • 节点:所谓的节点就是我们的物理服务器,一个服务器代表一个节点,上边存放着Hyper和Domain
  • Hypervisor:即VMM,指虚拟机的监控程序,在KVM中是一个加载了kvm.ko的标准Linux系统。
  • 域(Domain):指虚拟机,一个域代表一个虚拟机(估计思路来源于Xen的Domain0)
  • 存储池(Storage Pool):存储空间,支持多种协议和网络存储。作为虚拟机磁盘的存储源。
  • 卷组(Volume):虚拟机磁盘在Host上的表现形式。 上边的五部分,我们必须使用的是前三个,因为很多时候根据业务规则或应用的灵活性并没有使用卷组(其实就是有了编制的虚拟磁盘文件),也就没有必要使用存储池。