Docker Engine

Install

1
2
3
# install docker engine
https://docs.docker.com/engine/install/debian/

Storage

Overview
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# show docker volume info
docker volume ls
DRIVER VOLUME NAME
local jenkins_home
local yakir-test


# how to use
# default volume, directory = /var/lib/docker/volumes/
-v yakir-test:/container-app/my-app
--volume yakir-test:/container-app/my-app
--mount
# bind mounts
-v /local_path/app.conf:/container-app/app.conf
--volume /local_path/app.conf:/container-app/app.conf
--mount
# memory volume
--tmpfs

阅读全文 »

一、简介

1)容器网络基本概念

  • Linux Network Namespace
    • linux 网络设备:network interface device,loopback device,bridge device,veth device,tun/tap device,vxlan device,ip tunnel device 等等可完成网络数据包收发,提供额外修改数据包功能设备
    • linux 路由表(三层 ip 包路由寻址功能),arp 表(提供 ip 对应的 mac 信息),fdb(提供基于 mac 转发功能中 mac 地址对应的网络接口) 等
    • linux 协议栈:对网络协议包的封装与解析,如二层 ethernet 包,三层 ip icmp包,四层 tcp/udp 包等
    • linux iptable:基于内核模块 netfilter 完成对 linux 的 firewall 管理,例如控制 ingress 与 engress,nat 地址转换,端口映射等
阅读全文 »

一、原理

参考:
https://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html
https://www.ruanyifeng.com/blog/2014/09/illustration-ssl.html
https://www.nixops.me/articles/ssl-cetificate-create-and-signed.html

二、证书操作

1、第三方签发 SSL 证书

1
2
3
4
5
6
7
8
9
10
11
12
# 生成私钥,加密参数 -des3
openssl genrsa -out a.com.key 2048


# 生成 csr 文件
openssl genrsa -out a.com.key 2048 openssl req -new -sha256 -key a.com.key -out a.com.csr
# 查看 csr 信息
openssl req -noout -text -in a.com.csr


# 提交 csr 文件到 CA 或第三方证书机构获取数字签名后的公钥 crt 文件
# 部署 crt 与 key 文件至 web 服务器
阅读全文 »

一、背景

概述

  • 什么是事件:Kubernetes 的架构设计基于状态机,不同的状态之间进行转换则会生成相应的事件,正常的状态之间转换会生成 Normal 等级的事件,正常状态与异常状态之间的转换会生成Warning等级的事件。

  • kube-eventer 组件:Alicloud开源组件,用于获取 Kubernetes 集群中事件消息,并转存至自定义中间件或存储中。(Kubernetes 集群默认只保存1小时内事件)

  • 组件官方地址:https://github.com/AliyunContainerService/kube-eventer

部署前提与软件

名称 功能 备注
Kubernetes 集群 应用集群 使用 minikube 测试集群
kube-eventer 收集 Kubernetes 集群事件 集群第三方组件
Kafka / Elasticsearch / influxDB 中间件:存储事件消息 存储组件(选型 Kafka)
kube-eventer-py 从队列获取事件消息发送至 telegram 告警群组 事件消费者
阅读全文 »

一、组件说明

Fluentd
负责从 Kubernetes 搜集日志,每个 node 节点上面的 fluentd 监控并收集该节点上面的系统+容器日志,并将处理过后的日志信息发送给 Elasticsearch。

fluentd 数据流逻辑:source –> parser –> filter –> output

Elasticsearch
搜索引擎,负责存储日志并提供查询接口。

Kibana
提供了一个 Web GUI,用户可以浏览和搜索存储在 Elasticsearch 中的日志。

主要的日志收集方案:

  • 在节点上运行一个 agent 来收集日志(daemonSet)
  • 在 Pod 中包含一个 sidecar 容器来收集应用日志
  • 直接在应用程序中将日志信息推送到采集后端(一般不采用该方式)
阅读全文 »

一、组件说明

Prometheus Server

  • 核心组件,负责实现对监控数据的获取,存储与查询。
  • 支持静态配置管理监控目标,也可通过 Service Discovery 方式动态管理监控目录,获取数据。
  • 可从其他 Prometheus Server 获取数据
  • 对外提供 PromQL 实现数据查询和分析

Exporter

  • 直接采集,内置用于想 Prometheus 暴露监控数据的 Endpoints,如 node-exporter
  • 间接采集,通过 Prometheus 提供的客户端库监控采集程序,如 mysql-exporter

AlertManager
基于 PromQL 创建告警规则,满足规则产生告警并推送,支持 mail、webhook 等。

PushGateway
原获取数据方式为基于 Prometheus Server 从 Exporter pull 数据,当网络或其他原因 Server 无法与 Exporter 直接通信时,使用 PushGateway 方式中转。
Prometheus server 定期从配置好的 jobs 和 exporters 中拉取 metrics,或者接收来自 Pushgateway 发送过来的 metrics,或者从其它的 Prometheus server 中拉 metrics

metrics:实际监控指标数据,如 cpu 利用率

阅读全文 »

一、环境准备

1. multipass 虚拟机创建

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 生成密钥对
ssh-keygen -t rsa -b 4096 -f ~/k8s_rsa -C k8s

# 创建 Master 节点
multipass launch -c 2 -m 2G -d 20G -n master --cloud-init - << EOF
ssh_authorized_keys:
- $(cat ~/.ssh/k8s_rsa.pub)
EOF

# 创建 Node 节点
multipass launch -c 1 -m 2G -d 20G -n node1 --cloud-init - << EOF
ssh_authorized_keys:
- $(cat ~/.ssh/k8s_rsa.pub)
EOF

multipass launch -c 1 -m 2G -d 20G -n node2 --cloud-init - << EOF
ssh_authorized_keys:
- $(cat ~/.ssh/k8s_rsa.pub)
EOF

–cloud-init :导入本地生成的公钥文件到初始化系统中,可以使用密钥免密 SSH

阅读全文 »

一、RabbitMQ 介绍

什么是消息队列

消息(Message)是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。

消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递。消息发布者只管把消息发布到 MQ 中而不用管谁来取,消息使用者只管从 MQ 中取消息而不管是谁发布的。这样发布者和使用者都不用知道对方的存在。

为何用消息队列

以常见的订单系统为例,用户点击【下单】按钮之后的业务逻辑可能包括:扣减库存、生成相应单据、发红包、发短信通知。在业务发展初期这些逻辑可能放在一起同步执行,随着业务的发展订单量增长,需要提升系统服务的性能,这时可以将一些不需要立即生效的操作拆分出来异步执行,比如发放红包、发短信通知等。这种场景下就可以用 MQ ,在下单的主流程(比如扣减库存、生成相应单据)完成之后发送一条消息到 MQ 让主流程快速完结,而由另外的单独线程拉取MQ的消息(或者由 MQ 推送消息),当发现 MQ 中有发红包或发短信之类的消息时,执行相应的业务逻辑。

以上是用于业务解耦的情况,其它常见场景包括最终一致性、广播、错峰流控等等。

阅读全文 »

流量网关方案与灰度发布方式

一、Alicloud原生 Ingress 方式

前置要求

  1. 集群已安装 Ingress 组件
  2. 明确灰度发布规则(使用 cookie 值匹配 A/B 测试规则)

操作步骤

  1. 部署新旧版本 Deployment 和 Service

通过 Edas 创建新应用,并暴露 service(无需 SLB 暴露)。已 app1 应用为例:

资源 旧版本 新版本
Edas 应用 app1-test app1-new-test
Deployment app1-test-group-x-xxx app1-new-test-group-x-xxx
Service app1-svc app1-new-svc
阅读全文 »