学习背景

最近刚刚换了一个砖厂,板砖,刚刚入团队,就接到领导的一个烫手的山芋任务,负责搭建公司的开发和测试环境,而且,只有我一个人,公司是由运维,但是主要活动在遥远的帝都,而我所在的魔都,没有运维,团队内部一个运维都没有,这也意味着,我将没有被大佬带飞的机会,只能自己摸石头过河,走一步算一步。通过自己学习和调研,最终给完成了公司,从打包到部署一系列的 CICD 持续集成。

学习的目的

学习主要解决以下问题

初识 Rancher

什么是 Rancher

Rancher 是一个开源的企业级容器管理平台。通过 Rancher,企业再也不必自己使用一系列的开源软件去从头搭建容器服务平台。Rancher 提供了在生产环境中使用的管理 Docker 和 Kubernetes 的全栈化容器部署与管理平台。

Rancher 的组成

下图来源于 Rancher 官网

基础设施编排

Rancher 可以使用任何公有云或者私有云的 Linux 主机资源。Linux 主机可以是虚拟机,也可以是物理机。Rancher 仅需要主机有 CPU,内存,本地磁盘和网络资源。从 Rancher 的角度来说,一台云厂商提供的云主机和一台自己的物理机是一样的。同时,Rancher 为运行容器化的应用实现了一层灵活的基础设施服务。Rancher 的基础设施服务包括网络, 存储, 负载均衡, DNS 和安全模块。Rancher 的基础设施服务也是通过容器部署的,所以同样 Rancher 的基础设施服务可以运行在任何 Linux 主机上。

容器编排与调度

很多情况下我们都会选择使用容器编排调度框架来运行容器化应用。我为什么会选择 Rancher,因为 Rancher 包含了当前全部主流的编排调度引擎,例如 Docker Swarm, Kubernetes, 和 Mesos。同一个用户可以创建 Swarm 或者 Kubernetes 集群。并且可以使用原生的 Swarm 或者 Kubernetes 工具管理应用。同时,Rancher 是除了 Swarm,Kubernetes 和 Mesos 之外,Rancher 还支持自己的 Cattle 容器编排调度引擎。Cattle 被广泛用于编排 Rancher 自己的基础设施服务以及用于 Swarm 集群,Kubernetes 集群和 Mesos 集群的配置,管理与升级的便捷工具。

Rancher 的应用商店

一个好的开源项目,必定有一个良好的生态圈子,Rancher 的应用商店作为 Rancher 的可以在应用商店里一键部署由多个容器组成的应用。用户可以管理这个部署的应用,并且可以在这个应用有新的可用版本时进行自动化的升级。Rancher 提供了一个由 Rancher 社区维护的应用商店,其中包括了一系列的流行应用。Rancher 的用户也可以创建自己的私有应用商店。

企业级权限管理

Rancher 另外一大好处就是,支持企业级的一个权限管理,而且 Rancher 支持灵活的插件式的用户认证。支持 Active Directory,LDAP, Github 等 认证方式。 Rancher 支持在环境级别的基于角色的访问控制 (RBAC),可以通过角色来配置某个用户或者用户组对开发环境或者生产环境的访问权限

Rancher 优缺点

优点

缺点

总结

基于以上优缺点的分析,最终我还是采用了 Rancher,因为他能解决我目前我们在服务器资源较少的情况下,能动态的分配,我的服务器资源,同时,Gui 界面,简单容易操作,便于团队其他小伙伴的学习操作,管理 K8s 的集群较为方便。

回归实践

实现目标

开发 push 代码到 Gogs,触发 jenkins 自动 pull 代码,通过 maven 编译、打包,然后通过执行 shell 脚本使 docker 构建镜像并 push 到私服 Harbor(或者阿里云)仓库,此操作完成后 Rancher 服务器上再配置对应的简单配置,Rancher 从 Harbor 仓(私服)拉取镜像,启动容器。整个操作流程完成。

最终设计

通过自己以往的经历,和社区的一些大佬,巨佬,超级巨佬的交流所得经验,最近现在为公司搭建如下的环境,

踩坑记录

如何解决
可以将依赖文件下载下来,删除多余的或者重复的依赖镜像
为了不浪费大家时间,我个人整理如下

#!/bin/bash
function dsc() {
    #10.7.x.x 私服地址
    #拼命拉取镜像 直到成功为止
    pull=1
    while [ ${pull} != 0 ]
    do
        docker pull ${1}
        if [ $? -eq 0 ] ; then
            echo -e "\033[32m[ INFO ] \033[0m"  pull10.7.6.2/${1}
            pull=0
            continue
        else
            echo -e "\033[31m[ ERROR ]\033[0m" pull 10.7.6.2/${1}
            pull=1
            continue
        fi
    done
    #拼命tag 直到成功为止
    tag=1
    while [ ${tag} != 0 ]
    do
        docker tag ${1} 10.7.x.x/${1}
        if [ $? -eq 0 ] ; then
            echo -e "\033[32m[ INFO ] \033[0m"  10.7.6.2/${1}
            tag=0
            continue
        else
            echo -e "\033[31m[ ERROR ]\033[0m" 10.7.6.2/${1}
            tag=1
            continue        
        fi
    done
    #拼命推送镜像 直到成功为止
    push=1
    while [ ${push} != 0 ]
    do
        docker push 10.7.x.x/${1}
        if [ $? -eq 0 ] ; then
            echo -e "\033[32m[ INFO ] \033[0m"  push 10.7.6.2/${1}
            push=0
            continue
        else
            echo -e "\033[31m[ ERROR ]\033[0m" push 10.7.6.2/${1}
            push=1
            continue        
        fi      
    done    
}

# ranchar依赖镜像
dsc rancher/backup-restore-operator:v1.0.2&
dsc rancher/banzaicloud-fluentd:v1.11.2-alpine-2&
dsc rancher/banzaicloud-logging-operator:3.6.0&
dsc rancher/calico-cni:v3.13.4&
dsc rancher/calico-cni:v3.16.1&
dsc rancher/calico-ctl:v3.13.4&
dsc rancher/calico-ctl:v3.16.1&
dsc rancher/calico-kube-controllers:v3.13.4&
dsc rancher/calico-kube-controllers:v3.16.1&
dsc rancher/calico-node:v3.13.4&
dsc rancher/calico-node:v3.16.1&
dsc rancher/calico-pod2daemon-flexvol:v3.13.4&
dsc rancher/calico-pod2daemon-flexvol:v3.16.1&
dsc rancher/cis-operator:v1.0.1&
dsc rancher/cluster-proportional-autoscaler:1.7.1&
dsc rancher/cluster-proportional-autoscaler:1.8.1&
dsc rancher/configmap-reload:v0.3.0-rancher2&
dsc rancher/coredns-coredns:1.6.2&
dsc rancher/coredns-coredns:1.6.5&
dsc rancher/coredns-coredns:1.6.9&
dsc rancher/coredns-coredns:1.7.0&
dsc rancher/coreos-etcd:v3.3.15-rancher1&
dsc rancher/coreos-etcd:v3.4.13-rancher1&
dsc rancher/coreos-etcd:v3.4.3-rancher1&
dsc rancher/coreos-flannel:v0.12.0&
dsc rancher/coreos-flannel:v0.13.0-rancher1&
dsc rancher/coreos-kube-state-metrics:v1.9.7&
dsc rancher/coreos-prometheus-config-reloader:v0.38.1&
dsc rancher/coreos-prometheus-operator:v0.38.1&
dsc rancher/curlimages-curl:7.70.0&
dsc rancher/directxman12-k8s-prometheus-adapter-amd64:v0.6.0&
dsc rancher/eks-operator:v1.0.1&
dsc rancher/flannel-cni:v0.3.0-rancher6&
dsc rancher/fleet-agent:v0.3.0&
dsc rancher/fleet:v0.3.0&
dsc rancher/fluent-bit-out-syslog:0.1.0&
dsc rancher/fluent-fluent-bit:1.5.4&
dsc rancher/fluentd:v0.1.19&
dsc rancher/gitjob:v0.1.6&
dsc rancher/grafana-grafana:6.7.4&
dsc rancher/grafana-grafana:7.1.5&
dsc rancher/hyperkube:v1.16.15-rancher1&
dsc rancher/hyperkube:v1.17.12-rancher1&
dsc rancher/hyperkube:v1.18.9-rancher1&
dsc rancher/hyperkube:v1.19.2-rancher1&
dsc rancher/istio-1.5-migration:0.1.1&&
dsc rancher/istio-citadel:1.5.9&
dsc rancher/istio-coredns-plugin:0.2-istio-1.1&
dsc rancher/istio-galley:1.5.9&
dsc rancher/istio-install-cni:1.7.1&
dsc rancher/istio-installer:1.7.1-rancher1&
dsc rancher/istio-kubectl:1.4.6&
dsc rancher/istio-kubectl:1.5.10&
dsc rancher/istio-kubectl:1.5.9&
dsc rancher/istio-mixer:1.5.9&
dsc rancher/istio-mixer:1.7.1&
dsc rancher/istio-node-agent-k8s:1.5.9&
dsc rancher/istio-pilot:1.5.9&
dsc rancher/istio-pilot:1.7.1&
dsc rancher/istio-proxyv2:1.5.9&
dsc rancher/istio-proxyv2:1.7.1&
dsc rancher/istio-sidecar_injector:1.5.9&
dsc rancher/jaegertracing-all-in-one:1.14&
dsc rancher/jenkins-jnlp-slave:3.35-4&
dsc rancher/jetstack-cert-manager-controller:v0.8.1&
dsc rancher/jettech-kube-webhook-certgen:v1.2.1&
dsc rancher/jimmidyson-configmap-reload:v0.2.2&
dsc rancher/jimmidyson-configmap-reload:v0.3.0&
dsc rancher/k3s-upgrade:v1.17.12-k3s1&
dsc rancher/k3s-upgrade:v1.18.9-k3s1&
dsc rancher/k3s-upgrade:v1.19.2-k3s1&
dsc rancher/k8s-dns-dnsmasq-nanny:1.15.0&
dsc rancher/k8s-dns-dnsmasq-nanny:1.15.10&
dsc rancher/k8s-dns-dnsmasq-nanny:1.15.2&
dsc rancher/k8s-dns-kube-dns:1.15.0&
dsc rancher/k8s-dns-kube-dns:1.15.10&
dsc rancher/k8s-dns-kube-dns:1.15.2&
dsc rancher/k8s-dns-node-cache:1.15.13&
dsc rancher/k8s-dns-node-cache:1.15.7&
dsc rancher/k8s-dns-sidecar:1.15.0&
dsc rancher/k8s-dns-sidecar:1.15.10&
dsc rancher/k8s-dns-sidecar:1.15.2&
dsc rancher/kiali-kiali:v1.17&
dsc rancher/kiali-kiali:v1.23.0&
dsc rancher/kiwigrid-k8s-sidecar:0.1.151&
dsc rancher/klipper-helm:v0.2.3&
dsc rancher/klipper-helm:v0.2.7&
dsc rancher/klipper-helm:v0.3.0&
dsc rancher/klipper-lb:v0.1.2&
dsc rancher/kube-api-auth:v0.1.4&
dsc rancher/kubectl:v1.18.0&
dsc rancher/kubectl:v1.18.6&
dsc rancher/kubernetes-external-dns:v0.7.3&
dsc rancher/library-busybox:1.31.1&
dsc rancher/library-nginx:1.19.2-alpine&
dsc rancher/library-traefik:1.7.19&
dsc rancher/local-path-provisioner:v0.0.11&
dsc rancher/local-path-provisioner:v0.0.14&
dsc rancher/log-aggregator:v0.1.6&
dsc rancher/longhornio-csi-attacher:v2.0.0&
dsc rancher/longhornio-csi-node-driver-registrar:v1.2.0&
dsc rancher/longhornio-csi-provisioner:v1.4.0&
dsc rancher/longhornio-csi-resizer:v0.3.0&
dsc rancher/longhornio-longhorn-engine:v1.0.2&
dsc rancher/longhornio-longhorn-instance-manager:v1_20200514&
dsc rancher/longhornio-longhorn-manager:v1.0.2&
dsc rancher/longhornio-longhorn-ui:v1.0.2&
dsc rancher/metrics-server:v0.3.4&
dsc rancher/metrics-server:v0.3.6&
dsc rancher/minio-minio:RELEASE.2020-07-13T18-09-56Z&
dsc rancher/nginx-ingress-controller-defaultbackend:1.5-rancher1&
dsc rancher/nginx-ingress-controller:nginx-0.35.0-rancher1&
dsc rancher/opa-gatekeeper:v3.1.0-beta.7&
dsc rancher/openpolicyagent-gatekeeper:v3.1.1&
dsc rancher/openzipkin-zipkin:2.14.2&
dsc rancher/pause:3.1&
dsc rancher/pause:3.2&
dsc rancher/pipeline-jenkins-server:v0.1.4&
dsc rancher/pipeline-tools:v0.1.15&
dsc rancher/plugins-docker:18.09&
dsc rancher/prom-alertmanager:v0.21.0&
dsc rancher/prom-node-exporter:v1.0.1&
dsc rancher/prom-prometheus:v2.12.0&
dsc rancher/prom-prometheus:v2.18.2&
dsc rancher/prometheus-auth:v0.2.0&
dsc rancher/pstauffer-curl:v1.0.3&
dsc rancher/pushprox-client:v0.1.0-rancher1-client&
dsc rancher/pushprox-proxy:v0.1.0-rancher1-proxy&
dsc rancher/rancher-agent:v2.4.8&
dsc rancher/rancher-agent:v2.5.0&
dsc rancher/rancher-operator:v0.1.0&
dsc rancher/rancher-webhook:v0.1.0-beta5&
dsc rancher/rancher:v2.5.0&
dsc rancher/rke-tools:v0.1.65&
dsc rancher/security-scan:v0.1.14&
dsc rancher/security-scan:v0.2.1&
dsc rancher/shell:v0.1.4&
dsc rancher/sonobuoy-sonobuoy:v0.16.3&
dsc rancher/squareup-ghostunnel:v1.5.2&
dsc rancher/system-upgrade-controller:v0.6.2&
dsc rancher/tekton-utils:v0.1.0&
dsc rancher/thanosio-thanos:v0.15.0&
dsc rancher/webhook-receiver:v0.2.4&
dsc registry:2&

集群最终实现


↙↙↙阅读原文可查看相关链接,并与作者交流