部署Spinnaker的Amory发行版

关于IaaS、PaaS、SaaS

K8S不是传统意义上的PaaS平台,而很多互联网公司都需要的是PaaS平台,而不是单纯的K8S,K8S及其周边生态(如logstash、Prometheus等)才是PaaS平台,才是公司需要的

获得PaaS能力的几个必要条件:

  • 统一应有的运行时环境(docker)
  • 有IaaS能力(K8S)
  • 有可靠的中间件集群、数据库集群(DBA的主要工作)
  • 有分布式存储集群(存储工程师的主要工作)
  • 有适配的监控、日志系统(Prometheus、ELK)
  • 有完善的CI、CD系统(Jenkins、Spinnaker)

阿里云、腾讯云等厂商都提供了K8S为底的服务,即你买了集群就给你配备了K8S,但我们不能完全依赖于厂商,而被钳制,同时我们也需要不断的学习以备更好的理解和使用,公司越大时越需要自己创建而不是依赖于厂商。

spinnaker简介

WHAT :通过灵活和可配置 Pipelines,实现可重复的自动化部署;提供所有环境的全局视图,可随时查看应用程序在其部署 Pipeline 的状态;易于配置、维护和扩展;等等;

主要功能

  • 集群管理:主要用于管理云资源,即主要是IaaS的资源
  • 部落管理:负责将Jenkins流水线创建的镜像,部署到K8S集群中去,让服务真正运行起来。
  • 架构:官网地址

  • Deck:点点点页面
  • Gate:网关
  • Igor:用来和Jenkins通信
  • Echo:信息通讯组件
  • Orca:任务编排引擎
  • Clouddriver:云计算基础设施
  • Front50:管理持久化数据
  • 其中我们用到Redis、minio
  • 部署顺序:Minio-->Redis-->Clouddriver-->Front50-->Orca-->Echo-->Igor-->Gate-->Deck-->Nginx(是静态页面所以需要)

部署Spinnaker的Amory发行版

# 200机器,准备镜像、在资源清单:
~]# docker pull minio/minio:latest
~]# docker images|grep minio
~]# docker tag 7ea4a619ecfc harbor.od.com/armory/minio:latest
# 在此之前你应该创建一个私有armory
# 否则报错:denied: requested access to the resource is denied
~]# docker push harbor.od.com/armory/minio:latest
~]# mkdir -p /data/k8s-yaml/armory/minio
~]# cd /data/k8s-yaml/armory/minio/
minio]# vi dp.yaml
kind: Deployment
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    name: minio
  name: minio
  namespace: armory
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 7
  selector:
    matchLabels:
      name: minio
  template:
    metadata:
      labels:
        app: minio
        name: minio
    spec:
      containers:
      - name: minio
        image: harbor.od.com/armory/minio:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 9000
          protocol: TCP
        args:
        - server
        - /data
        env:
        - name: MINIO_ACCESS_KEY
          value: admin
        - name: MINIO_SECRET_KEY
          value: admin123
        readinessProbe:
          failureThreshold: 3
          httpGet:
            path: /minio/health/ready
            port: 9000
            scheme: HTTP
          initialDelaySeconds: 10
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 5
        volumeMounts:
        - mountPath: /data
          name: data
      imagePullSecrets:
      - name: harbor
      volumes:
      - nfs:
          server: hdss7-200
          path: /data/nfs-volume/minio
        name: data
minio]# vi svc.yaml 
apiVersion: v1
kind: Service
metadata:
  name: minio
  namespace: armory
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 9000
  selector:
    app: minio
minio]# vi ingress.yaml 
kind: Ingress
apiVersion: extensions/v1beta1
metadata: 
  name: minio
  namespace: armory
spec:
  rules:
  - host: minio.od.com
    http:
      paths:
      - path: /
        backend: 
          serviceName: minio
          servicePort: 80
# 创建对应的存储
minio]# mkdir /data/nfs-volume/minio
# 11机器,解析域名:
vi /var/named/od.com.zone
serial 前滚一位
minio              A    10.4.7.10
systemctl restart named
dig -t A minio.od.com +short

为什么每次每次都不用些od.com,是因为第一行有$ORIGIN od.com. 的宏指令,会自动补

# 22机器:
# 创建名称空间
~]# kubectl create ns armory
# 因为armory仓库是私有的,要创建secret,不然拉不了
~]# kubectl create secret docker-registry harbor --docker-server=harbor.od.com --docker-username=admin --docker-password=Harbor12345 -n armory

在amory名称空间里面就能看到

# 22机器,应用清单:
~]# kubectl apply -f http://k8s-yaml.od.com/armory/minio/dp.yaml
~]# kubectl apply -f http://k8s-yaml.od.com/armory/minio/svc.yaml
~]# kubectl apply -f http://k8s-yaml.od.com/armory/minio/ingress.yaml

minio.od.com

账户:admin

密码:admin123